From e5b58fa3913c56a7678897f075f371edc9769cab Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 14 Nov 2010 15:45:39 +0000 Subject: [PATCH 001/630] package for Debian (based on Ubuntu packaging) Mods: misc updates; create debian/watch; hotwire qmake to qmake-qt4 in debian/rules as qmake in debian defaults to qmake-qt3 --- debian/changelog | 6 ++++++ debian/compat | 1 + debian/control | 23 +++++++++++++++++++++++ debian/copyright | 39 +++++++++++++++++++++++++++++++++++++++ debian/install | 1 + debian/menu | 7 +++++++ debian/rules | 15 +++++++++++++++ debian/source/format | 1 + debian/watch | 2 ++ 9 files changed, 95 insertions(+) create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/install create mode 100644 debian/menu create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 00000000..d38578cd --- /dev/null +++ b/debian/changelog @@ -0,0 +1,6 @@ +focuswriter (1.3.1-1) unstable; urgency=low + + * Initial release for Debian, based on Ubuntu packaging (closes: #580763) + * Packaging updated from Ubuntu debian, thanks to Graeme Gott + + -- Barak A. Pearlmutter Sun, 14 Nov 2010 15:53:39 +0000 diff --git a/debian/compat b/debian/compat new file mode 100644 index 00000000..45a4fb75 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +8 diff --git a/debian/control b/debian/control new file mode 100644 index 00000000..923a73a3 --- /dev/null +++ b/debian/control @@ -0,0 +1,23 @@ +Source: focuswriter +Section: editors +Priority: optional +Maintainer: Barak A. Pearlmutter +Build-Depends: cdbs, debhelper (>= 8), imagemagick, libqt4-dev, libao-dev, libhunspell-dev, libzip-dev, pkg-config +Suggests: hunspell-dictionary, myspell-dictionary +Standards-Version: 3.9.1 +Homepage: http://gottcode.org/focuswriter/ +Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git +Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary + +Package: focuswriter +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: A fullscreen, distraction-free writing program + A fullscreen writing program where you can customize your + environment by changing the font, colors, and background image + to add ambiance as you type. FocusWriter features an on-the-fly + updating wordcount, optional auto-save, optional daily goals, + and toolbars that hide away to allow you to focus more clearly. + Additionally, when you open the program your current work in + progress will automatically load and position you at the end + of your document, so that you can immediately jump back in. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 00000000..e2ae9075 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,39 @@ +This package was debianized by: + + Graeme Gott on Fri, 30 Apr 2010 13:01:15 -0400 + +It was downloaded from: + + http://gottcode.org/focuswriter/ + +Upstream Author: + + Graeme Gott + +Copyright: + + Copyright (C) 2008, 2009, 2010 Graeme Gott + +License: + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +On Debian systems, the complete text of the GNU General +Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'. + +The Debian packaging is: + + Copyright (C) 2010 Graeme Gott + +and is licensed under the GPL version 3, see above. diff --git a/debian/install b/debian/install new file mode 100644 index 00000000..223a0771 --- /dev/null +++ b/debian/install @@ -0,0 +1 @@ +icons/focuswriter.xpm usr/share/pixmaps/ diff --git a/debian/menu b/debian/menu new file mode 100644 index 00000000..5367bcdb --- /dev/null +++ b/debian/menu @@ -0,0 +1,7 @@ +?package(focuswriter):\ + needs="x11"\ + section="Applications/Editors"\ + title="Focuswriter"\ + longtitle="Fullscreen word processor"\ + icon="/usr/share/pixmaps/focuswriter.xpm"\ + command="/usr/bin/focuswriter" diff --git a/debian/rules b/debian/rules new file mode 100755 index 00000000..1169a5f6 --- /dev/null +++ b/debian/rules @@ -0,0 +1,15 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/qmake.mk + +QMAKE = qmake-qt4 +DEB_QMAKE_ARGS = PREFIX=/usr + +update-config:: icons/focuswriter.xpm + +icons/focuswriter.xpm: + convert -resize 32x32 icons/focuswriter.png icons/focuswriter.xpm + +reverse-config:: + rm -f icons/focuswriter.xpm diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 00000000..18ad94da --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 From 3131a15343ac10794df061442397128d9b7b3306 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 14 Nov 2010 18:16:23 +0000 Subject: [PATCH 002/630] git ignore debian/ debris --- debian/.gitignore | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 debian/.gitignore diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 00000000..7f0158c2 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,7 @@ +/*.debhelper +/*.log +/*.substvars +/files +/focuswriter/ +/stamp-makefile-build +/stamp-makefile-install From f0e54e4162b6d0df4fc4d6864f04bbb49d0f8cb7 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 14 Nov 2010 18:17:16 +0000 Subject: [PATCH 003/630] git ignore more precisely (editor temp files belong in global git config) --- .gitignore | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index b51a4c4f..0142ba71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -Makefile -build -focuswriter -*~ +/Makefile +/build +/focuswriter +/icons/focuswriter.xpm From b6c5d1220b87fdead29f038ac6aa189404514ac5 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 18 Nov 2010 09:32:00 +0000 Subject: [PATCH 004/630] slightly revise long description (debian/control) --- debian/control | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/debian/control b/debian/control index 923a73a3..0ba8e384 100644 --- a/debian/control +++ b/debian/control @@ -13,11 +13,11 @@ Package: focuswriter Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: A fullscreen, distraction-free writing program - A fullscreen writing program where you can customize your - environment by changing the font, colors, and background image - to add ambiance as you type. FocusWriter features an on-the-fly - updating wordcount, optional auto-save, optional daily goals, - and toolbars that hide away to allow you to focus more clearly. - Additionally, when you open the program your current work in - progress will automatically load and position you at the end - of your document, so that you can immediately jump back in. + Focuswriter is a fullscreen writing program designed to be + distraction free. You can customize your environment by changing the + font, colors, and background image to add ambiance. FocusWriter + features an on-the-fly updating wordcount, optional auto-save, + optional daily goals, and toolbars that hide away to allow you to + focus more clearly. Additionally, when you open the program your + current work in progress will automatically load and position you at + the end of your document, so that you can immediately jump back in. From 33ab0eea0763683e2e26389917de14d08f9e9f4d Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 18 Nov 2010 09:36:08 +0000 Subject: [PATCH 005/630] include URL of upstream git repository (debian/copyright) --- debian/copyright | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debian/copyright b/debian/copyright index e2ae9075..77120db8 100644 --- a/debian/copyright +++ b/debian/copyright @@ -5,6 +5,8 @@ This package was debianized by: It was downloaded from: http://gottcode.org/focuswriter/ + http://gottcode.org/focuswriter/focuswriter-1.3.1-src.tar.bz2 + git://github.com/gottcode/focuswriter.git Upstream Author: From 806910b68d481273282025b095a73aeeb30d7214 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 18 Nov 2010 11:15:36 +0000 Subject: [PATCH 006/630] Include Graeme Gott (upstream author & ubuntu maintainer) as co-maintainer (debian/control) --- debian/control | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/control b/debian/control index 0ba8e384..b6978027 100644 --- a/debian/control +++ b/debian/control @@ -2,6 +2,7 @@ Source: focuswriter Section: editors Priority: optional Maintainer: Barak A. Pearlmutter +Uploaders: Graeme Gott Build-Depends: cdbs, debhelper (>= 8), imagemagick, libqt4-dev, libao-dev, libhunspell-dev, libzip-dev, pkg-config Suggests: hunspell-dictionary, myspell-dictionary Standards-Version: 3.9.1 From b29d3f322a4f470dacc91a27c8739c5eebfa8e1e Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 19 Nov 2010 23:12:07 +0000 Subject: [PATCH 007/630] move suggests field from general to binary stanza (debian/control) --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index b6978027..b4d568d5 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,6 @@ Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: cdbs, debhelper (>= 8), imagemagick, libqt4-dev, libao-dev, libhunspell-dev, libzip-dev, pkg-config -Suggests: hunspell-dictionary, myspell-dictionary Standards-Version: 3.9.1 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git @@ -13,6 +12,7 @@ Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary Package: focuswriter Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} +Suggests: hunspell-dictionary, myspell-dictionary Description: A fullscreen, distraction-free writing program Focuswriter is a fullscreen writing program designed to be distraction free. You can customize your environment by changing the From b3078452bb0b48b54bb2f3d27faf50e2fa4abe80 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 28 Dec 2010 19:39:34 -0500 Subject: [PATCH 008/630] log new upstream version --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index d38578cd..3cd63573 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.2-1) unstable; urgency=low + + * New upstream version + + -- Barak A. Pearlmutter Tue, 28 Dec 2010 19:39:14 -0500 + focuswriter (1.3.1-1) unstable; urgency=low * Initial release for Debian, based on Ubuntu packaging (closes: #580763) From 3a9125479a7d97c9881b16fb48705d3278942a9c Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 29 Dec 2010 12:16:06 -0500 Subject: [PATCH 009/630] update debian/changelog --- debian/changelog | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3cd63573..b19e1530 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,11 @@ -focuswriter (1.3.2-1) unstable; urgency=low +focuswriter (1.3.2.git.69e4975b-1) unstable; urgency=low * New upstream version + * Include post-release upstream mods + - crash fix + - es_MX (Mexican spanish) translation - -- Barak A. Pearlmutter Tue, 28 Dec 2010 19:39:14 -0500 + -- Barak A. Pearlmutter Wed, 29 Dec 2010 12:15:47 -0500 focuswriter (1.3.1-1) unstable; urgency=low From 725e33ddce4385df593ec284cec9591f50e241d2 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 29 Dec 2010 21:29:56 -0500 Subject: [PATCH 010/630] log new upstream version --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index b19e1530..4de0aeb2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.2.1-1) unstable; urgency=low + + * New upstream version (same as 1.3.2.git.69e4975b but bumps version) + + -- Barak A. Pearlmutter Wed, 29 Dec 2010 21:28:37 -0500 + focuswriter (1.3.2.git.69e4975b-1) unstable; urgency=low * New upstream version From 05beb1cfa42a8824c2573a8c2a79fadced676fb7 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Jun 2011 09:53:27 +0100 Subject: [PATCH 011/630] bump debian standard version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index b4d568d5..8393be2f 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: cdbs, debhelper (>= 8), imagemagick, libqt4-dev, libao-dev, libhunspell-dev, libzip-dev, pkg-config -Standards-Version: 3.9.1 +Standards-Version: 3.9.2 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary From 6337cd375fc086d3d86443702d0c99f1299c1c9f Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Jun 2011 09:55:22 +0100 Subject: [PATCH 012/630] upstream icon directory has moved; build debian desktop icon in new location --- debian/install | 2 +- debian/rules | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/debian/install b/debian/install index 223a0771..add4c251 100644 --- a/debian/install +++ b/debian/install @@ -1 +1 @@ -icons/focuswriter.xpm usr/share/pixmaps/ +resources/images/icons/hicolor/32x32/apps/focuswriter.xpm usr/share/pixmaps/ diff --git a/debian/rules b/debian/rules index 1169a5f6..49fff0aa 100755 --- a/debian/rules +++ b/debian/rules @@ -6,10 +6,12 @@ include /usr/share/cdbs/1/class/qmake.mk QMAKE = qmake-qt4 DEB_QMAKE_ARGS = PREFIX=/usr -update-config:: icons/focuswriter.xpm +ICON_DIR = resources/images/icons/hicolor/32x32/apps -icons/focuswriter.xpm: - convert -resize 32x32 icons/focuswriter.png icons/focuswriter.xpm +update-config:: $(ICON_DIR)/focuswriter.xpm + +$(ICON_DIR)/focuswriter.xpm: $(ICON_DIR)/focuswriter.png + convert -resize 32x32 $(ICON_DIR)/focuswriter.png $(ICON_DIR)/focuswriter.xpm reverse-config:: - rm -f icons/focuswriter.xpm + rm -f $(ICON_DIR)/focuswriter.xpm From 5b0f1cc3bd63844b4577a460fd733c3452d4770d Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Jun 2011 09:55:43 +0100 Subject: [PATCH 013/630] git ignore desktop icon in its new location --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0142ba71..c25718ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /Makefile /build /focuswriter -/icons/focuswriter.xpm +/resources/images/icons/hicolor/32x32/apps/focuswriter.xpm From e003c812d4c577ade700ef338b241679254791e8 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Jun 2011 09:56:42 +0100 Subject: [PATCH 014/630] log changes and prep for release --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 4de0aeb2..edb07a29 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +focuswriter (1.3.2.1-2) unstable; urgency=low + + * Merge many upstream enhancements and bug fixes + * Bump debian standards version + * Account for shifted upstream icon file directory (rules, install) + + -- Barak A. Pearlmutter Fri, 10 Jun 2011 09:51:13 +0100 + focuswriter (1.3.2.1-1) unstable; urgency=low * New upstream version (same as 1.3.2.git.69e4975b but bumps version) From 540a5b92e015552db3a2114bb8dbb67757d6314b Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Jun 2011 10:40:49 +0100 Subject: [PATCH 015/630] bump upstream version with pseudo-release: binary files have moved --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index edb07a29..d29fdbdb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -focuswriter (1.3.2.1-2) unstable; urgency=low +focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low * Merge many upstream enhancements and bug fixes * Bump debian standards version From 250e0d3c42d0fa157fada6a67a7c321f831e0a34 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 11 Jul 2011 20:08:11 +0200 Subject: [PATCH 016/630] update debian/watch for uscan --- debian/watch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/watch b/debian/watch index 18ad94da..cd7a7422 100644 --- a/debian/watch +++ b/debian/watch @@ -1,2 +1,3 @@ version=3 -http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 +# http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 +http://githubredir.debian.net/github/gottcode/focuswriter/ v(.*)\.tar\.gz From 42a3ab00d8d66ead3c9b419b8c7a1a484f7bca36 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 11 Jul 2011 20:08:44 +0200 Subject: [PATCH 017/630] log updated debian/watch --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index d29fdbdb..e0f4a363 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.2.1+git.daa4c602-2) unstable; urgency=low + + * update debian/watch for uscan to github redir + + -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:08:36 +0200 + focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low * Merge many upstream enhancements and bug fixes From c6a043ca866e746ffd4cd5966663b00a6430cc32 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 11 Jul 2011 20:14:47 +0200 Subject: [PATCH 018/630] log new upstream version --- debian/changelog | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index e0f4a363..ab202517 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ -focuswriter (1.3.2.1+git.daa4c602-2) unstable; urgency=low +focuswriter (1.3.3-1) unstable; urgency=low * update debian/watch for uscan to github redir + * New upstream version - -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:08:36 +0200 + -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:14:38 +0200 focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low From 7379b8e36c8e907eda4bdcf6f3e3ae422e57b7de Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 11 Jul 2011 20:19:55 +0200 Subject: [PATCH 019/630] log merge minor upstream fixes --- debian/changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index ab202517..2544fdbd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,7 +2,8 @@ focuswriter (1.3.3-1) unstable; urgency=low * update debian/watch for uscan to github redir * New upstream version - + * merge post-release fixes: icon location, no-sound crash + -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:14:38 +0200 focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low From 200d166141f31c60e36e0905f9a9eda0db15bcbe Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 1 Oct 2011 09:38:25 +0100 Subject: [PATCH 020/630] single debian patch option --- debian/source/local-options | 1 + 1 file changed, 1 insertion(+) create mode 100644 debian/source/local-options diff --git a/debian/source/local-options b/debian/source/local-options new file mode 100644 index 00000000..7423a2df --- /dev/null +++ b/debian/source/local-options @@ -0,0 +1 @@ +single-debian-patch From e8c5cd477f1aa135fb5a3800ac00782831efdca2 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 1 Oct 2011 18:28:08 +0100 Subject: [PATCH 021/630] silence lintian warning description-synopsis-starts-with-article --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 8393be2f..4d2be1d8 100644 --- a/debian/control +++ b/debian/control @@ -13,7 +13,7 @@ Package: focuswriter Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: hunspell-dictionary, myspell-dictionary -Description: A fullscreen, distraction-free writing program +Description: Fullscreen distraction-free writing program Focuswriter is a fullscreen writing program designed to be distraction free. You can customize your environment by changing the font, colors, and background image to add ambiance. FocusWriter From 7356ea8ef8bc9f5716a9fbcdd412900c94a832e6 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 2 Oct 2011 22:53:01 +0100 Subject: [PATCH 022/630] create man page --- debian/focuswriter.manpages | 1 + debian/man/focuswriter.1 | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 debian/focuswriter.manpages create mode 100644 debian/man/focuswriter.1 diff --git a/debian/focuswriter.manpages b/debian/focuswriter.manpages new file mode 100644 index 00000000..a7e95cdc --- /dev/null +++ b/debian/focuswriter.manpages @@ -0,0 +1 @@ +debian/man/focuswriter.1 diff --git a/debian/man/focuswriter.1 b/debian/man/focuswriter.1 new file mode 100644 index 00000000..f9230b14 --- /dev/null +++ b/debian/man/focuswriter.1 @@ -0,0 +1,24 @@ +.TH FOCUSWRITER "1" "Oct 2011" "User Commands" +.SH NAME +focuswriter \- editor allowing monomaniacal writing +.SH SYNOPSIS +.B focuswriter +[\fIfile...\fR] +.SH DESCRIPTION +Qt editing application that takes over the entire screen and provides +a focused monomaniacal writing experience. +Makes the computer into a typewriter, complete with sound effects. +.PP +If in full screen mode, move the mouse to the top of the screen to +activate the menu. +Usage should be self explanatory. +Many configuration options are available. +.SH AUTHOR +Graeme Gott +.SH "REPORTING BUGS" +See http://gottcode.org/focuswriter/ +.SH COPYRIGHT +Licensed under the GNU GPL3+. +.SH "SEE ALSO" +No, do not look at anything else. +Get back to writing! From c7e88b776a52fa4d412ebba457eedcd7bc817268 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 1 Oct 2011 09:41:32 +0100 Subject: [PATCH 023/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2544fdbd..8e3c2ac7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.3.3-2) unstable; urgency=low + + * single debian patch source option (closes: #643117) + * silence lintian: rephrase description and add minimal man page + + -- Barak A. Pearlmutter Sun, 02 Oct 2011 22:53:46 +0100 + focuswriter (1.3.3-1) unstable; urgency=low * update debian/watch for uscan to github redir From 2396edfac85d1625f85789c5d6a85f27f3615766 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 16 Oct 2011 18:11:43 +0100 Subject: [PATCH 024/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 8e3c2ac7..1b039515 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.4-1) unstable; urgency=low + + * New upstream version + + -- Barak A. Pearlmutter Sun, 16 Oct 2011 18:11:31 +0100 + focuswriter (1.3.3-2) unstable; urgency=low * single debian patch source option (closes: #643117) From d49655ed85e9a63cf318414e928ebb41e3abfca0 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 18 Oct 2011 10:24:48 +0100 Subject: [PATCH 025/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1b039515..330ae34f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.4.1-1) unstable; urgency=low + + * New upstream version + + -- Barak A. Pearlmutter Tue, 18 Oct 2011 10:22:21 +0100 + focuswriter (1.3.4-1) unstable; urgency=low * New upstream version From a8ffe7ccc008e21e7374f4708beda252bc322761 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 28 Oct 2011 09:28:33 +0100 Subject: [PATCH 026/630] no longer uses libao. now dynamic loads libsdl-mixer, which is not needed for build. --- debian/control | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index 4d2be1d8..6cdbf4a3 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,12 @@ Section: editors Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott -Build-Depends: cdbs, debhelper (>= 8), imagemagick, libqt4-dev, libao-dev, libhunspell-dev, libzip-dev, pkg-config +Build-Depends: cdbs, debhelper (>= 8), + imagemagick, + libqt4-dev, + libhunspell-dev, + libzip-dev, + pkg-config Standards-Version: 3.9.2 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git @@ -12,7 +17,7 @@ Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary Package: focuswriter Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Suggests: hunspell-dictionary, myspell-dictionary +Suggests: hunspell-dictionary, myspell-dictionary, libsdl-mixer1.2 Description: Fullscreen distraction-free writing program Focuswriter is a fullscreen writing program designed to be distraction free. You can customize your environment by changing the From f721d6453512310f19a42de8652c7dbb193812ff Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 28 Oct 2011 09:30:29 +0100 Subject: [PATCH 027/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 330ae34f..c2c4d93a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.3.4.1-2) unstable; urgency=low + + * Build no longer depends upon libao-dev + * Suggest libsdl-mixer1.2 which is dynamically loaded if available + + -- Barak A. Pearlmutter Fri, 28 Oct 2011 09:30:16 +0100 + focuswriter (1.3.4.1-1) unstable; urgency=low * New upstream version From fc9f1ef2ba1a183068e4d209b20fc79a3af31339 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 10 Nov 2011 12:43:41 +0000 Subject: [PATCH 028/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index c2c4d93a..182abe6d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.5-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Thu, 10 Nov 2011 12:34:53 +0000 + focuswriter (1.3.4.1-2) unstable; urgency=low * Build no longer depends upon libao-dev From 912be3da4a3e43acc84622a2b243413c6b2edad7 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 10 Nov 2011 16:41:24 +0000 Subject: [PATCH 029/630] use upstream xpm --- debian/control | 1 - debian/install | 1 - debian/rules | 12 +++--------- 3 files changed, 3 insertions(+), 11 deletions(-) delete mode 100644 debian/install diff --git a/debian/control b/debian/control index 6cdbf4a3..534f240c 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,6 @@ Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: cdbs, debhelper (>= 8), - imagemagick, libqt4-dev, libhunspell-dev, libzip-dev, diff --git a/debian/install b/debian/install deleted file mode 100644 index add4c251..00000000 --- a/debian/install +++ /dev/null @@ -1 +0,0 @@ -resources/images/icons/hicolor/32x32/apps/focuswriter.xpm usr/share/pixmaps/ diff --git a/debian/rules b/debian/rules index 49fff0aa..912fb4cf 100755 --- a/debian/rules +++ b/debian/rules @@ -6,12 +6,6 @@ include /usr/share/cdbs/1/class/qmake.mk QMAKE = qmake-qt4 DEB_QMAKE_ARGS = PREFIX=/usr -ICON_DIR = resources/images/icons/hicolor/32x32/apps - -update-config:: $(ICON_DIR)/focuswriter.xpm - -$(ICON_DIR)/focuswriter.xpm: $(ICON_DIR)/focuswriter.png - convert -resize 32x32 $(ICON_DIR)/focuswriter.png $(ICON_DIR)/focuswriter.xpm - -reverse-config:: - rm -f $(ICON_DIR)/focuswriter.xpm +install/focuswriter:: + cd debian/focuswriter/usr/share/pixmaps/ \ + && mv focuswriter_32.xpm focuswriter.xpm From 05d6f2a89cd4c277f7b7b4f76c79d4134c809828 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 10 Nov 2011 16:41:58 +0000 Subject: [PATCH 030/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 182abe6d..d209e52a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.5-2) unstable; urgency=low + + * use upstream xpm icon + + -- Barak A. Pearlmutter Thu, 10 Nov 2011 16:41:54 +0000 + focuswriter (1.3.5-1) unstable; urgency=low * New upstream release From cb261f2f23c8c6a0f6ef6e2de19dd0511c037562 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 12 Nov 2011 22:39:33 +0000 Subject: [PATCH 031/630] install new scalable application icon --- debian/install | 1 + 1 file changed, 1 insertion(+) create mode 100644 debian/install diff --git a/debian/install b/debian/install new file mode 100644 index 00000000..0ab83626 --- /dev/null +++ b/debian/install @@ -0,0 +1 @@ +resources/images/icons/hicolor/scalable/apps/focuswriter.svg usr/share/icons/hicolor/scalable/apps/ From 54b772ce1205889b7fabdeadec67afe41cd7cb15 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 12 Nov 2011 22:40:21 +0000 Subject: [PATCH 032/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index d209e52a..272f1f6c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.5+git.a0b47c53-1) unstable; urgency=low + + * use new upstream scalable icon + + -- Barak A. Pearlmutter Sat, 12 Nov 2011 22:40:14 +0000 + focuswriter (1.3.5-2) unstable; urgency=low * use upstream xpm icon From fdada5c10201ec4dd950d75e7418024637cd52cb Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 4 Dec 2011 11:46:01 +0000 Subject: [PATCH 033/630] document unofficial release tarball creation process --- debian/README.source | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 debian/README.source diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 00000000..24bef6a4 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,10 @@ +Un-official upstream releases created with, eg + +u=1.3.5 +r=$(git show-ref upstream/master | head -c8) +v=$u+git.$r +p=focuswriter +git tag -s -u -m 'unofficial upstream release' upstream/$v +git archive --format tar --prefix $p/ $r | gzip -9 > ../$p_$v.orig.tar.gz + + -- Barak A. Pearlmutter , Sun, 4 Dec 2011 11:45:01 +0000 From b5b9c37e0a3f7940c06587d88d3d8417b22a1681 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 4 Dec 2011 22:31:21 +0000 Subject: [PATCH 034/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 272f1f6c..96ae7990 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.3.5.1-1) unstable; urgency=low + + * Document vcs snapshot tarball creation procedure + * New upstream release + + -- Barak A. Pearlmutter Sun, 04 Dec 2011 22:30:26 +0000 + focuswriter (1.3.5+git.a0b47c53-1) unstable; urgency=low * use new upstream scalable icon From 3a275a53f8782d1ced5ab65f8435493e3389c453 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 18 Jan 2012 14:02:58 +0000 Subject: [PATCH 035/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 96ae7990..4daa3d48 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.5.2-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Wed, 18 Jan 2012 14:02:40 +0000 + focuswriter (1.3.5.1-1) unstable; urgency=low * Document vcs snapshot tarball creation procedure From ed159554b3fb7ac4e3479c8790559b8efd6c5a82 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 7 Jun 2012 09:35:24 +0100 Subject: [PATCH 036/630] dh9 and bump debian policy version --- debian/compat | 2 +- debian/control | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/compat b/debian/compat index 45a4fb75..ec635144 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -8 +9 diff --git a/debian/control b/debian/control index 534f240c..ef5ab022 100644 --- a/debian/control +++ b/debian/control @@ -3,12 +3,12 @@ Section: editors Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott -Build-Depends: cdbs, debhelper (>= 8), +Build-Depends: cdbs, debhelper (>= 9), libqt4-dev, libhunspell-dev, libzip-dev, pkg-config -Standards-Version: 3.9.2 +Standards-Version: 3.9.3 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary From 2571fa544fe27e7d3bf73b8856939b19954c9b62 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 10 Feb 2012 00:28:50 +0000 Subject: [PATCH 037/630] German translation for GenericName in Desktop file. Thanks to Ronny Standtke , see http://bugs.debian.org/659283 --- resources/unix/focuswriter.desktop | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index bc511f04..8eb07670 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -2,6 +2,7 @@ Type=Application Name=FocusWriter GenericName=Fullscreen Word Processor +GenericName[de]=Vollbild-Textverarbeitung Comment=Write without distractions Icon=focuswriter TryExec=focuswriter From 6b529fbf6c5532e274df7ffcace5a3c7e319fdf2 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 15 Apr 2012 11:32:41 -0400 Subject: [PATCH 038/630] Update Spanish translation. --- translations/focuswriter_es.qm | Bin 28880 -> 28888 bytes translations/focuswriter_es.ts | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/focuswriter_es.qm b/translations/focuswriter_es.qm index ca1e4b15be7e70bf7ac92dfb15891ec2c3e058c9..080062d82bef265bafe88ea1a606048ddc8a5f71 100644 GIT binary patch delta 2064 zcmYk7dsGzn7017`^VnVXfhfAd(IANOSOEn^Q9wXIp%ICwJcTI1gdWrwpxQ>=`lPb73gAn+6>uB`%G8Jt6~7>2(lV*SY~I28S;roK+snBmU{wGW8i!I*MKc*BYa04 zMcs#Q$24G(D}3+IBrn5SauSI3gLNOD#|p4kTqM7TwT<>A&4{q{0pe6F@!k(CIDq(I zet7Cb@;xTB3BP!S$>>jEY0htefK5m|a2-gGM^c+F1Mk3!UBwuOSyPZQ%*X=skT#~6 z5spz~1h>>6q~#t0=3TQhdpFX)V0f) z3B1-KeEM&`8~r<>@%brW%}U{3673FKg~7pFfPbetN8_e%)g+ndEB3g$T4S;GYAWZ) z0~6acAD6cQk^P$5(Q-sZXquY;2rR#$`Acy%5R;&3Sr^1I#%j72`U4T~Yp!3&W_e^y z?@bT(JV(>#wFa19rg<<(?^$`8;fv#dv@_yZ?@}OjlIVV~gXhkRGmP{nJQ8Qu46vU` z6UC6reN6NtF|(2n=B9}6++aX66U7SAhX(`18n1r#D@<%irlUnW#D@J_0mmw_rRNIZ zc3Qmr+|0lX;y*`zU;`4x{)3f(pObjY%mhqL;!pXsFANZ$_ap$GzLLY|6miIRlD9D# z1_aegOCvs~AyC~WT5PMOGE)nXIV@GgodJA3q{`itfp4mGJUETASSZz%-Un6+Ffma`>VUor6T>4w(298&XboGsBhOtGu`l~Xk`6H>b_XORQ zN}acB$xdlx)gHjwEenr0wi)@dxUHD!{705X&(C$2qn|P?>qa@|WDoDFT}FeUO!5e z&3aeK8+VQ>c2U-sb^%i^E4!L0q8SFIB$ujOcTPE4=g)H^N_(C&;IaH=_b40tv_JY!RU3<8RDW-g=trOV6 zS?$_7g~1peYEQIh0zP}SE$c*%MvnIC4kMtHX}`%$q?df{P4~Nid7n;Kdy*scU)`h^ zo7s~Iy1<82a`;(wkK&eEuiH9mb*a@Ajl2nHkLk*`y~IL3(0%E}&d7h#U25b03tFV> zy0wS}{l?Dpow^@g{s9*b8?EX76rl;PbhL95Z{6s#9)rWqPEP0(wOZ?Dvl%vr z?BLQ_ZP?=cOMWN8(9oa-oazm&lMb@sw+)x-`WWv9J11n>IsFqm{fg|I+ihp)|Lk1& zy`7me4A%zOTHSiXK%@^azR56nu8oR5W|R)caIs{}F*=Xuh6=5;Gkk*4Ih^<5KN_dB z@xw818-veKTiJJv;m?M+dAp49XW6d6Dr4GLo^+%&=G0YFOWTdP3GQr9u(4nrM=I-6 zW1;38H+F}y=Fe=i*9XStAM*MBMB|xmN@LD?`{YZjtxR z&bAHgz)xnknA_A~x7ilSgkCK-mmGbKE4IeGzo?9>`vY^|9amQ5E%WX63tZvF<~w6= zFo7X;zuw~Hi?mPR$Bl7 delta 2064 zcmXw)dsLKl8ppryyqB3_-WddOM?EHj+($qzUhsl|fTD>girkSDTsEWDOJb|esEo;T)xjk#|@$F zhVafPA!O%sR{PJutPg;R5kNvTkZJ~=*MKFxz@o1Jp8yAE9D}Zb=hz=1eb~@h14Fz6_z z2LWx~z)V*J{4$g01{4&(~pVp?&r-L|MB5aV%#0?Et2}g*g-X z;j#D0T}-F|a~BK)jP;n8_ZkpffTVZ61u|lg+`^=$oyVfB+c6X&!;#w0$U>JReaLo3 zXwc#W_cR;Q3-$n$zjkoh2Bd$%@J3EShOPk!|0gm;zMg&(nF=`p4o<&?%qqGc`gi1* zBU#%dER({4l#lS1QvGaKG}YV<&4)g<%hA1k-GL7K|s{ox^GV}1Je6- zT{k`1^DJGrZ!R#UMEC0*de2#|>pwe`_YI<}Un!90CVJd%?r0~^@5&24PXk=N z+766qRkog>h{lOZaRF7C|A|sr6U289m2)fI0MCW7%H`rqz?@-9 z$NT}REZjlQPnF+1x~R^L+8x~FhsF@XOZkfKw{*2Pe(eG_!im7|_H3B;r z(yXsh7>wz@zV=);;BVJA<%=AREdAxpDxj3<|6PzoFE8qEdi)GnN(_eTqa30C7)Cu? z$DUXWq4%le$VTlA#Xaq?VZ)$xM73etz$<|M14G%y(JW-I;VWNuM*i4vp@sV|Y^tHX zXC@2U?qJ4ihX0PZ0;tE0a^@zM;*@br|LZJ4lhJdK{$X0b;_I&&E0$Q;#&icW&KsL= z?q&b48o$|NWCLKld+ANaGE1AM_Z8x`wR(4#^-j0*2k$yfPFt>WLhosZ^zQa`rgagU zxpWqriroIh@5Gzx>hyri5!0DbJK6ASrVBOQjJMFiKjb**Q|VyfW(Oy=IXLZC2WMP& zFx$)YO)pz(c*)co?GFrVG~H=#p`!Px(%v{OmdrraZ5TJywA~IyT2!}4o+EFoV_Nv( zxYg>!lhoF-@72gBce!~ls&h`UU7_!)=@-2i_%k)H<`A{?s#=if!S)2HYw|f#Io0Y~ zT{Aa!n_Be`w%K==dg9({{(gvhvV+o?kf&ZdEkZkO@Jxs?J9WgeH)ZDMG{%*`0!SA8|-CF)LEHeM)i$uU9%e*bgN_o!E0*&s`Jr*~6 zAv^HE;vRR48f>%JqnXgsQcH2=a<13|mL1#5xVm>)x_=tUimbBSI(M2Ye2e8L*XvB+ zM{S4E>f+(Ny1a@bROGy7aI$j`XpKfM;a+{0@!?pbikVo6mr{{MtrtkR~3 LSnJ0JeH8OQV+d6X diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index b04b7df9..04416c90 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -582,7 +582,7 @@ Clone - Clonar + Duplicar @@ -602,7 +602,7 @@ Clone Session - Clonar sesión + Duplicar sesión From 2e3612f83872c837859606fc4b714b717fad2201 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 7 May 2012 15:29:13 -0400 Subject: [PATCH 039/630] Make character check variables more explicit. --- src/dictionary.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 812cccf6..b4a02030 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -329,9 +329,9 @@ QStringRef DictionaryPrivate::check(const QString& string, int start_at) const int index = -1; int length = 0; int chars = 1; - bool number = false; - bool uppercase = f_ignore_uppercase; - bool word = false; + bool is_number = false; + bool is_uppercase = f_ignore_uppercase; + bool is_word = false; int count = string.length() - 1; for (int i = start_at; i <= count; ++i) { @@ -340,10 +340,10 @@ QStringRef DictionaryPrivate::check(const QString& string, int start_at) const case QChar::Number_DecimalDigit: case QChar::Number_Letter: case QChar::Number_Other: - number = true; + is_number = f_ignore_numbers; goto Letter; case QChar::Letter_Lowercase: - uppercase = false; + is_uppercase = false; Letter: case QChar::Letter_Uppercase: case QChar::Letter_Titlecase: @@ -370,13 +370,13 @@ QStringRef DictionaryPrivate::check(const QString& string, int start_at) const default: if (index != -1) { - word = true; + is_word = true; } break; } - if (word || (i == count && index != -1)) { - if (!uppercase && !(number && f_ignore_numbers)) { + if (is_word || (i == count && index != -1)) { + if (!is_uppercase && !is_number) { QStringRef check(&string, index, length); QString word = check.toString(); word.replace(QChar(0x2019), QLatin1Char('\'')); @@ -385,9 +385,9 @@ QStringRef DictionaryPrivate::check(const QString& string, int start_at) const } } index = -1; - word = false; - number = false; - uppercase = f_ignore_uppercase; + is_word = false; + is_number = false; + is_uppercase = f_ignore_uppercase; } } return QStringRef(); From bb4b0b632ebc253622eae2da5d7e9ee45094fa1e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 11 May 2012 09:48:17 -0400 Subject: [PATCH 040/630] Use translated names for dictionaries. --- ChangeLog | 3 ++ src/locale_dialog.cpp | 86 ++++++++++++++------------------------ src/locale_dialog.h | 1 + src/preferences_dialog.cpp | 15 ++----- 4 files changed, 39 insertions(+), 66 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebb93865..6fd5322c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-05-11 Graeme Gott + * Use translated names for dictionaries. + 2012-01-16 Graeme Gott * Tag version 1.3.5.2. diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index e33d0951..2da82b33 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -35,59 +35,6 @@ //----------------------------------------------------------------------------- -namespace -{ - class LocaleNames - { - LocaleNames() - { - m_names["ca"] = QString::fromUtf8("Catal\303\240"); - m_names["cs"] = QString::fromUtf8("\304\214esky"); - m_names["de"] = QLatin1String("Deutsch"); - m_names["el"] = QString::fromUtf8("\316\225\316\273\316\273\316\267\316\275\316\271\316\272\316\254"); - m_names["en"] = QLatin1String("English"); - m_names["es"] = QString::fromUtf8("Espa\303\261ol"); - m_names["es_MX"] = QString::fromUtf8("Espa\303\261ol (M\303\251xico)"); - m_names["fi"] = QLatin1String("Suomi"); - m_names["fr"] = QString::fromUtf8("Fran\303\247ais"); - m_names["he"] = QString::fromUtf8("\327\242\326\264\327\221\326\260\327\250\326\264\327\231\327\252"); - m_names["hu"] = QLatin1String("Magyar"); - m_names["it"] = QLatin1String("Italiano"); - m_names["nl"] = QLatin1String("Nederlands"); - m_names["pl"] = QLatin1String("Polski"); - m_names["pt"] = QString::fromUtf8("Portugu\303\252s"); - m_names["pt_BR"] = QString::fromUtf8("Portugu\303\252s (Brasil)"); - m_names["ru"] = QString::fromUtf8("\320\240\321\203\321\201\321\201\320\272\320\270\320\271"); - m_names["sv"] = QLatin1String("Svenska"); - m_names["uk"] = QString::fromUtf8("\320\243\320\272\321\200\320\260\321\227\320\275\321\201\321\214\320\272\320\260"); - m_names["uk_UA"] = QString::fromUtf8("\320\243\320\272\321\200\320\260\321\227\320\275\321\201\321\214\320\272\320\260 (\320\243\320\272\321\200\320\260\321\227\320\275\320\260)"); - } - - QHash m_names; - - public: - static QString toString(const QString& name) - { - static LocaleNames locale_names; - QString locale_name = locale_names.m_names.value(name); - if (locale_name.isEmpty()) { - QLocale locale(name); - QString language = QLocale::languageToString(locale.language()); - if (locale.country() != QLocale::AnyCountry) { - QString country = QLocale::countryToString(locale.country()); - locale_name = QString("%1 (%2)").arg(language, country); - } else { - locale_name = language; - } - locale_names.m_names[name] = locale_name; - } - return locale_name; - } - }; -} - -//----------------------------------------------------------------------------- - QString LocaleDialog::m_current; QString LocaleDialog::m_path; QString LocaleDialog::m_appname; @@ -110,7 +57,7 @@ LocaleDialog::LocaleDialog(QWidget* parent) continue; } translation.remove(m_appname); - m_translations->addItem(LocaleNames::toString(translation), translation); + m_translations->addItem(languageName(translation), translation); } int index = qMax(0, m_translations->findData(m_current)); m_translations->setCurrentIndex(index); @@ -177,6 +124,37 @@ void LocaleDialog::loadTranslator(const QString& name) //----------------------------------------------------------------------------- +QString LocaleDialog::languageName(const QString& language) +{ + QString lang_code = language.left(5); + QLocale locale(lang_code); + QString name; +#if QT_VERSION >= 0x040800 + if (lang_code.length() > 2) { + if (locale.name() == lang_code) { + name = locale.nativeLanguageName() + " (" + locale.nativeCountryName() + ")"; + } else { + name = locale.nativeLanguageName() + " (" + language + ")"; + } + } else { + name = locale.nativeLanguageName(); + } +#else + if (lang_code.length() > 2) { + if (locale.name() == lang_code) { + name = QLocale::languageToString(locale.language()) + " (" + QLocale::countryToString(locale.country()) + ")"; + } else { + name = QLocale::languageToString(locale.language()) + " (" + language + ")"; + } + } else { + name = QLocale::languageToString(locale.language()); + } +#endif + return name; +} + +//----------------------------------------------------------------------------- + QStringList LocaleDialog::findTranslations() { QStringList result = QDir(m_path, "*.qm").entryList(QDir::Files); diff --git a/src/locale_dialog.h b/src/locale_dialog.h index 3852447c..71f1a817 100644 --- a/src/locale_dialog.h +++ b/src/locale_dialog.h @@ -31,6 +31,7 @@ class LocaleDialog : public QDialog LocaleDialog(QWidget* parent = 0); static void loadTranslator(const QString& appname); + static QString languageName(const QString& language); public slots: virtual void accept(); diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index 226f6d52..68f9273e 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -20,6 +20,7 @@ #include "preferences_dialog.h" #include "dictionary.h" +#include "locale_dialog.h" #include "preferences.h" #include "smart_quotes.h" @@ -48,16 +49,6 @@ namespace { - QString languageName(const QString& language) - { - QLocale locale(language.left(5)); - QString name = QLocale::languageToString(locale.language()); - if (locale.country() != QLocale::AnyCountry) { - name += " (" + QLocale::countryToString(locale.country()) + ")"; - } - return name; - } - QWidget* makeScrollable(QWidget* tab) { QScrollArea* area = new QScrollArea(tab->parentWidget()); @@ -452,7 +443,7 @@ void PreferencesDialog::addLanguage() foreach (const QString& dictionary, dictionaries) { QString language = dictionary; language.replace(QChar('-'), QChar('_')); - QString name = languageName(language); + QString name = LocaleDialog::languageName(language); // Prompt user about replacing duplicate languages QString aff_file = dictionary_path + dictionary + ".aff"; @@ -811,7 +802,7 @@ QWidget* PreferencesDialog::initSpellingTab() QStringList languages = Dictionary::availableLanguages(); foreach (const QString& language, languages) { - m_languages->addItem(languageName(language), language); + m_languages->addItem(LocaleDialog::languageName(language), language); } m_languages->model()->sort(0); From 32c6096d67109e533bdde9f0442ed046a8eb94dc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 18 May 2012 20:41:43 -0400 Subject: [PATCH 041/630] FIXED: Inserting text resets alignment. Closes #53. --- ChangeLog | 3 +++ src/rtf/writer.cpp | 42 +++++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6fd5322c..585f67a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-05-18 Graeme Gott + * FIXED: Inserting text resets alignment. + 2012-05-11 Graeme Gott * Use translated names for dictionaries. diff --git a/src/rtf/writer.cpp b/src/rtf/writer.cpp index 913ded4b..689eb42e 100644 --- a/src/rtf/writer.cpp +++ b/src/rtf/writer.cpp @@ -253,26 +253,30 @@ bool RTF::Writer::write(QIODevice* device, QTextDocument* text, bool full) device->write(m_header); for (QTextBlock block = text->begin(); block.isValid(); block = block.next()) { - QByteArray par("{\\pard\\plain"); - QTextBlockFormat block_format = block.blockFormat(); - bool rtl = block_format.layoutDirection() == Qt::RightToLeft; - if (rtl) { - par += "\\rtlpar"; - } - Qt::Alignment align = block_format.alignment(); - if (rtl && (align & Qt::AlignLeft)) { - par += "\\ql"; - } else if (align & Qt::AlignRight) { - par += "\\qr"; - } else if (align & Qt::AlignCenter) { - par += "\\qc"; - } else if (align & Qt::AlignJustify) { - par += "\\qj"; - } - if (block_format.indent() > 0) { - par += "\\li" + QByteArray::number(block_format.indent() * 15); + if (full) { + QByteArray par("{\\pard\\plain"); + QTextBlockFormat block_format = block.blockFormat(); + bool rtl = block_format.layoutDirection() == Qt::RightToLeft; + if (rtl) { + par += "\\rtlpar"; + } + Qt::Alignment align = block_format.alignment(); + if (rtl && (align & Qt::AlignLeft)) { + par += "\\ql"; + } else if (align & Qt::AlignRight) { + par += "\\qr"; + } else if (align & Qt::AlignCenter) { + par += "\\qc"; + } else if (align & Qt::AlignJustify) { + par += "\\qj"; + } + if (block_format.indent() > 0) { + par += "\\li" + QByteArray::number(block_format.indent() * 15); + } + device->write(par); + } else { + device->write("{"); } - device->write(par); if (block.begin() != block.end()) { device->write(" "); From 32c71b09c771aa918c562f1360cfb3d3679ffc24 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 26 May 2012 17:46:08 -0400 Subject: [PATCH 042/630] Add Danish translation. --- CREDITS | 1 + ChangeLog | 3 + focuswriter.pro | 1 + translations/focuswriter_da.qm | Bin 0 -> 26820 bytes translations/focuswriter_da.ts | 1667 ++++++++++++++++++++++++++++++++ 5 files changed, 1672 insertions(+) create mode 100644 translations/focuswriter_da.qm create mode 100644 translations/focuswriter_da.ts diff --git a/CREDITS b/CREDITS index 9eb62f4d..35285cdd 100644 --- a/CREDITS +++ b/CREDITS @@ -6,6 +6,7 @@ Translators ----------- * Pavel Fric (cs) * Ladislav Thon (cs) +* Morten Juhl-Johansen Zölde-Fejér (da) * Dennis Peteranderl (de) * Eduard Bruckner (de) * Epameinondas Soufleros (el) diff --git a/ChangeLog b/ChangeLog index 585f67a1..550306df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-05-26 Morten Juhl-Johansen Zölde-Fejér + * Add Danish translation. + 2012-05-18 Graeme Gott * FIXED: Inserting text resets alignment. diff --git a/focuswriter.pro b/focuswriter.pro index 414040b1..e8e24c68 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -110,6 +110,7 @@ SOURCES += src/alert.cpp \ src/rtf/writer.cpp TRANSLATIONS = translations/focuswriter_cs.ts \ + translations/focuswriter_da.ts \ translations/focuswriter_de.ts \ translations/focuswriter_el.ts \ translations/focuswriter_en.ts \ diff --git a/translations/focuswriter_da.qm b/translations/focuswriter_da.qm new file mode 100644 index 0000000000000000000000000000000000000000..0ee9541c5b7ce390e15e7d728dde8958b727d54a GIT binary patch literal 26820 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 MxdtC+Y*bhGAD^Dr2LJ#7 literal 0 HcmV?d00001 diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts new file mode 100644 index 00000000..8233a09c --- /dev/null +++ b/translations/focuswriter_da.ts @@ -0,0 +1,1667 @@ + + + + + Alert + + + Close (Ctrl+D) + Luk (Ctrl+D) + + + + Collapse + Fold sammen + + + + Expand + Fold ud + + + + AlertLayer + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + + + Sorry + Beklager + + + + Unable to save '%1'. + Det er ikke muligt at gemme '%1'. + + + + + Save File As + Gem fil som + + + + + Unable to overwrite '%1'. + Det er ikke muligt at overskrive '%1'. + + + + Rename File + Omdøb fil + + + + Unable to rename '%1'. + Det er ikke muligt at omdøbe '%1'. + + + + Plain Text (*.txt) + Ren tekst (*.txt) + + + + OpenDocument Text (*.odt) + OpenDocument-tekst (*.odt) + + + + Rich Text (*.rtf) + Rich Text (*.rtf) + + + + All Files (*) + Alle filer (*) + + + + FindDialog + + + Search for: + Søg efter: + + + + Replace with: + Erstat med: + + + + Ignore case + Ignorer store/små bogstaver + + + + Whole words only + Kun hele ord + + + + Search up + Søg tilbage + + + + Search down + Søg fremad + + + + + Find + Find + + + + + Replace + Erstat + + + + Replace All + Erstat alle + + + + Replace %n instance(s)? + + Erstat %n forekomst? + Erstat %n forekomster? + + + + + Question + Spørgsmål + + + + + Sorry + Beklager + + + + + Phrase not found. + Frasen kunne ikke findes. + + + + Highlighter + + + Add + Tilføj + + + + Check Spelling... + Stavekontrol... + + + + (No suggestions found) + (Der er ikke fundet forslag) + + + + ImageButton + + + Open Image + Åbn billede + + + + Images(%1) + Billeder(%1) + + + + LocaleDialog + + + Select application language: + Vælg programmets sprog: + + + + <System Language> + <Systemsprog> + + + + Note + Note + + + + Please restart this application for the change in language to take effect. + Genstart programmet for at skifte til det valgte sprog. + + + + PreferencesDialog + + + Preferences + Indstillinger + + + + General + Generelt + + + + Statistics + Statistik + + + + Toolbar + Værktøjslinie + + + + Spell Checking + Stavekontrol + + + + Select Dictionary + Vælg ordbog + + + + + Sorry + Beklager + + + + Unable to open archive. + Det er ikke muligt at åbne arkivet. + + + + Unable to read archive metadata. + Det er ikke muligt at indlæse arkivets metadata. + + + + The archive does not contain a usable dictionary. + Dette arkiv indeholder ikke en anvendelig ordbog. + + + + Unable to open file '%1'. + Det er ikke muligt at åbne filen '%1'. + + + + Unable to close file '%1'. + Det er ikke muligt at lukke filen '%1'. + + + + + Question + Spørgsmål + + + + The dictionary "%1" already exists. Do you want to replace it? + Ordbogen '%1' findes allerede. Ønsker du at erstatte den? + + + + Remove current dictionary? + Fjern aktuelle ordbog? + + + + Daily Goal + Dagligt mål + + + + None + Intet + + + + Minutes: + Minutter: + + + + + Words: + Ord: + + + + Editing + Redigering + + + + Always vertically center + Altid centreret lodret + + + + Block insertion cursor + Firkantet markør for indsættelse + + + + Default to rich text + Rich text som standard + + + + Smooth fonts + Udjævn skrifttyper + + + + Typewriter sounds + Skrivemaskinelyde + + + + Smart quotes: + Smart quotes: + + + + Double + Dobbelte + + + + Single + Enkelte + + + + Saving + Gemmer + + + + Automatically save changes + Gem automatisk + + + + Remember cursor position + Husk markørens placering + + + + Contents + Indhold + + + + Word count + Optælling af ord + + + + Page count + Antal sider + + + + Paragraph count + Antal afsnit + + + + Character count + Antal tegn + + + + Page Size + Sideformat + + + + Characters: + Tegn: + + + + Paragraphs: + Afsnit: + + + + Word Count Algorithm + Algoritme til ordtælling + + + + Detect word boundaries + Registrer ordgrænser + + + + Divide character count by six + Del antal tegn med seks + + + + Style + Stil + + + + Icons Only + Kun ikoner + + + + Text Only + Kun tekst + + + + Text Alongside Icons + Tekst ved siden af ikoner + + + + Text Under Icons + Tekst under ikoner + + + + Text Position: + Placering i tekst + + + + Actions + Handlinger + + + + Move Up + Flyt op + + + + Move Down + Flyt ned + + + + Add Separator + Tilføj opdeling + + + + Check spelling as you type + Kontroller stavning, mens der skrives + + + + Ignore words in UPPERCASE + Ignorer STORE BOGSTAVER + + + + Ignore words with numbers + Ignorer ord med tal + + + + Language + Sprog + + + + + Add + Tilføj + + + + + Remove + Fjern + + + + Personal Dictionary + Personlig ordbog + + + + Reader + + + + Not a supported RTF file. + Ikke en understøttet RTF-fil + + + + Unable to open archive. + Kunne ikke åbne arkivet. + + + + Unable to open file '%1'. + Kunne ikke åbne filen '%1'. + + + + Unable to close file '%1'. + Kunne ikke lukke filen '%1'. + + + + Session + + + + + + + + + Default + Standard + + + + SessionManager + + + Manage Sessions + Administrer sessioner + + + + S&essions + S&essioner + + + + New + Ny + + + + Rename + Omdøb + + + + Clone + Klon + + + + Delete + Slet + + + + Switch To + Skift til + + + + New Session + Ny session + + + + Clone Session + Klon session + + + + Rename Session + Omdøb session + + + + Question + Spørgsmål + + + + Delete selected session? + Slet valgte session? + + + + Session name: + Navn på session: + + + + Sorry + Beklager + + + + The requested session name is already in use. + Der gøres allerede brug af det ønskede sessionsnavn. + + + + &New... + &Ny... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Administrer + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + SmartQuote + + + Replacing quotation marks... + Erstatter citatonstegn... + + + + Please Wait + Vent venligst + + + + SpellChecker + + + Check Spelling + Kontroller stavning + + + + Add + Tilføj + + + + Ignore + Ignorer + + + + Ignore All + Ignorer alle + + + + Change + Erstat + + + + Change All + Erstat alle + + + + Not in dictionary: + Ikke i ordbogen: + + + + Change to: + Skift til: + + + + Checking spelling... + Kontrollerer stavning... + + + + Cancel + Fortryd + + + + Please wait + Vent venligst + + + + Spell check complete. + Stavekontrol fuldført. + + + + Stack + + + Question + Spørgsmål + + + + Remove all formatting from the current file? + Fjern al formattering fra denne fil? + + + + Theme + + + Untitled %1 + Uden titel %1 + + + + ThemeDialog + + + Modify Theme + Tilpas tema + + + + Name: + Navn: + + + + Background + Baggrund + + + + No Image + Intet billede + + + + Tiled + Side om side + + + + + Centered + Centreret + + + + + Stretched + Strakt + + + + Scaled + Skaleret + + + + Zoomed + Zoomet + + + + Remove + Fjern + + + + Type: + Type: + + + + + + Color: + Farve: + + + + Image: + Billede: + + + + Foreground + Forgrund + + + + Opacity + Gennemsigtighed + + + + + + + pixels + pixels + + + + Left + Venstre + + + + Right + Højre + + + + Position + Position + + + + Size: + Størrelse: + + + + Rounding: + Runding: + + + + Margin: + Margen: + + + + Padding: + Luft omkring: + + + + Text + Tekst + + + + Font: + Skrifttype: + + + + Misspelled: + Stavefejl: + + + + The quick brown fox jumps over the lazy dog + Tekst til test + + + + ThemeManager + + + Themes + Temaer + + + + Add + Tilføj + + + + Modify + Tilpas + + + + Remove + Fjern + + + + Import + Importer + + + + Export + Eksport + + + + Close + Luk + + + + Question + Spørgsmål + + + + Remove selected theme? + Fjern valgte tema? + + + + Import Theme + Importer tema + + + + Themes (*.fwtz *.theme) + Temaer (*.fwtz *.theme) + + + + Themes (*.fwtz) + Temaer(*.fwtz) + + + + Sorry + Beklager + + + + A theme already exists with that name. Please enter a new name: + Der findes allerede et tema med det navn. Indtast venligst et nyt: + + + + Export Theme + Eksporter tema + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Spørgsmål + + + + Delete timer? + Slet tæller + + + + <b>Words:</b> %L1 + <b>Ord:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Sider:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Afsnit:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Tegn:</b> %L1 / %L2 + + + + Set Delay + Sæt nedtælling + + + + Set Time + Sæt tid + + + + Delay: + Nedtælling: + + + + Time: + Tid: + + + + HH:mm:ss + TT:mm:ss + + + + Alarm + Alarm + + + + Type: + Type: + + + + Memo: + Memo: + + + + Edit + Rediger + + + + Delete + Slet + + + + TimerDisplay + + + HH:mm:ss + TT:mm:ss + + + + No timers running + Ingen aktive tællere + + + + TimerManager + + + Timers + Tællere + + + + New + Ny + + + + Recent + Nylig + + + + Question + Spørgsmål + + + + Cancel editing timers? + Fortryd ændring af tællere + + + + +HH:mm:ss + +TT:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Uventet nået slutning på fil. + + + + Window + + + Words: 0 + Ord: 0 + + + + Pages: 0 + Sider: 0 + + + + Paragraphs: 0 + Afsnit: 0 + + + + Characters: 0 + Tegn: 0 + + + + 0% of daily goal + 0% af dagligt mål + + + + Loading themes + Indlæser temaer + + + + Loading sounds + Indlæser lyde + + + + + Untitled + Uden titel + + + + + Sorry + Beklager + + + + Note + Note + + + + Open File + Åbn fil + + + + About FocusWriter + Om FocusWriter + + + + Characters: %L1 / %L2 + Tegn: %L1 / %L2 + + + + Pages: %L1 + Sider: %L1 + + + + Paragraphs: %L1 + Afsnit: %L1 + + + + Words: %L1 + Ord: %L1 + + + + %1% of daily goal + %1% af dagligt mål + + + + Opening %1 + Åbner %1 + + + + Question + Spørgsmål + + + + Save changes? + Gem ændringer + + + + + (Untitled %1) + (Uden titel%1) + + + + Loading settings + Indlæser indstillinger + + + + Emergency cache is not writable. + Der kan ikke skrives til reservecachen. + + + + + Warning + Advarsel + + + + FocusWriter was not shut down cleanly. + FocusWriter blev ikke lukket korrekt. + + + + Restore from the emergency cache? + Gendan fra reservecache? + + + + Some files are unsupported and will not be opened. + Visse filer er ikke understøttet og vil ikke blive åbnet. + + + + Some files could not be opened. + Visse filer kunne ikke åbnes. + + + + Some files were opened Read-Only. + Visse filer blev åbnet skrivebeskyttet. + + + + Text Files (%1);;All Files (*) + Tekstfiler (%1);;Alle Filer (*) + + + + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> + <p><center><big><b>FocusWriter %1</b></big><br/>Et enkelt tekstbehandlingsprogram i fuldskærm<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Udgivet under <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a>-licensen</small></center></p><p><center>Anvender <a href="http://hunspell.sourceforge.net/">Hunspell</a> til stavekontrol<br/><small>Anvendt under <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a>-licensen</small></center></p><p><center>Anvender ikoner fra <a href="http://www.oxygen-icons.org/">Oxygen</a>-ikontemaet<br/><small>Anvendt under <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a>-licensen</small></center></p> + + + + '%1' is newer than the cached copy. + '%1' er nyere end den lagrede kopi. + + + + Overwrite newer file? + Overskriv nyere fil? + + + + Unable to load typewriter sounds. + Kan ikke indlæse skrivemaskinelyde. + + + + %1 (Read-Only) + %1 (Skrivebeskyttet) + + + + &File + &Fil + + + + &New + &Ny + + + + &Open... + &Åbn... + + + + &Save + &Gem + + + + Save &As... + Gem &som + + + + &Rename... + &Omdøb... + + + + Save A&ll + Gem &alle + + + + Manage Sessions + Administrer sessioner + + + + New Session + Ny session + + + + &Print... + &Udskrift... + + + + &Close + &Luk + + + + &Quit + &Afslut + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Rediger + + + + &Undo + &Fortryd + + + + &Redo + &Gendan + + + + Cu&t + K&lip + + + + &Copy + &Kopier + + + + &Paste + &Indsæt + + + + Select &All + Vælg &alle + + + + Fo&rmat + Fo&rmat + + + + &Bold + &Fed + + + + &Italic + &Kursiv + + + + &Underline + &Understreg + + + + Stri&kethrough + &Gennemstreg + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + &Hævet skrift + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Sænket skrift + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + &Venstrestil + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + &Centrer + + + + Ctrl+| + Ctrl+| + + + + Align &Right + &Højrestil + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + &Tilpasset + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Forminds indrykning + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Fo&røg indrykning + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Tekstblok med Ve&nstre til højre + + + + Ri&ght to Left Block + Tekstblok med Hø&jre til venstre + + + + &Make Plain Text + Gør til ren &tekst + + + + &Make Rich Text + Gør til &Rich text + + + + &Tools + &Værktøjer + + + + &Find... + &Find... + + + + Find &Next + Find &næste + + + + Find Pre&vious + Find &tidligere + + + + &Replace... + &Erstat + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Smart &Quotes + + + + Update &Document + Opdater &dokument + + + + Update &Selection + Opdater &markering + + + + &Spelling... + &Stavning... + + + + F7 + F7 + + + + &Timers... + &Tællere... + + + + &Settings + &Indstillinger + + + + Show &Toolbar + Vis &værktøjslinie + + + + Show &Menu Icons + Vis &menuikoner + + + + &Fullscreen + &Fuld skærm + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + M&inimer + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Temaer... + + + + &Preferences... + &Indstillinger... + + + + &Help + &Hjælp + + + + Application &Language... + Programmets &sprog + + + + &About + &Om + + + + About &Qt + Om &QT + + + From 4a755cc32d2308db91f9f05ea663c2ec861fb2ba Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 26 May 2012 17:58:41 -0400 Subject: [PATCH 043/630] Update mac deployment to match Tetzle. --- mac_deploy.sh | 7 ++----- resources/mac/background.png | Bin 19256 -> 21475 bytes 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/mac_deploy.sh b/mac_deploy.sh index b2e3c39f..1a8270f3 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -17,6 +17,7 @@ echo 'Done' echo -n 'Copying application bundle... ' mkdir "$APP" cp -Rpf "$BUNDLE" "$APP/" +strip "$APP/$BUNDLE/Contents/MacOS/$APP" cp COPYING "$APP/License.txt" cp CREDITS "$APP/Credits.txt" cp README "$APP/Read Me.txt" @@ -61,11 +62,6 @@ rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtXmlPatterns.framework" rm -Rf "$APP/$BUNDLE/Contents/PlugIns/qmltooling" echo 'Done' -# Create link to Applications folder -echo -n 'Creating Applications link... ' -ln -s '/Applications' "${APP}/Applications" -echo 'Done' - # Copy background echo -n 'Copying background... ' mkdir "${APP}/.background" @@ -102,6 +98,7 @@ echo ' end tell set background picture of viewOptions to file ".background:background.png" + make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} set position of item "'${BUNDLE}'" of container window to {90, 90} set position of item "Applications" of container window to {310, 90} set position of item "Credits.txt" of container window to {100, 215} diff --git a/resources/mac/background.png b/resources/mac/background.png index 3d19cfd2e0af0b3199c7b78bbfe6e9bd450161d8..24ee81f569f9d227682f8ada67b1c3ec69a33730 100644 GIT binary patch literal 21475 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 b1>pY!I%RS)JO?6v00000NkvXXu0mjfszNgm From 0732a984cac75b6a5e590aef47fa03ab65edcdc8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 9 Jun 2012 09:43:57 -0400 Subject: [PATCH 044/630] Fix application icon not loading without breaking fallback icons. --- src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 35f81a4d..542189af 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,7 +76,11 @@ Application::Application(int& argc, char** argv) fallback.addFile(":/hicolor/24x24/apps/focuswriter.png"); fallback.addFile(":/hicolor/22x22/apps/focuswriter.png"); fallback.addFile(":/hicolor/16x16/apps/focuswriter.png"); - setWindowIcon(QIcon::fromTheme("focuswriter", fallback)); + if (!QIcon::themeName().isEmpty() && (QIcon::themeName() != "hicolor")) { + setWindowIcon(QIcon::fromTheme("focuswriter", fallback)); + } else { + setWindowIcon(fallback); + } } #ifndef Q_WS_MAC From 4c7b659f46418d8bc6a0f5f066a91dc14467a727 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 9 Jun 2012 12:44:32 -0400 Subject: [PATCH 045/630] Update locale dialog. --- src/locale_dialog.cpp | 8 ++++++-- src/locale_dialog.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index 2da82b33..4651f3b0 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011 Graeme Gott + * Copyright (C) 2010, 2011, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -44,7 +44,8 @@ QString LocaleDialog::m_appname; LocaleDialog::LocaleDialog(QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) { - setWindowTitle(QCoreApplication::applicationName()); + QString title = parent ? parent->window()->windowTitle() : QString(); + setWindowTitle(!title.isEmpty() ? title : QCoreApplication::applicationName()); QLabel* text = new QLabel(tr("Select application language:"), this); @@ -139,6 +140,9 @@ QString LocaleDialog::languageName(const QString& language) } else { name = locale.nativeLanguageName(); } + if (locale.textDirection() == Qt::RightToLeft) { + name.prepend(QChar(0x202b)); + } #else if (lang_code.length() > 2) { if (locale.name() == lang_code) { diff --git a/src/locale_dialog.h b/src/locale_dialog.h index 71f1a817..e3262e57 100644 --- a/src/locale_dialog.h +++ b/src/locale_dialog.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011 Graeme Gott + * Copyright (C) 2010, 2011, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by From c4031d8d677126604148ca0ba94bae879b9c546b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 11:09:21 -0400 Subject: [PATCH 046/630] FIXED: Was adding spaces before pasted rich text. --- ChangeLog | 3 +++ src/rtf/writer.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 550306df..43269a6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-06-10 Graeme Gott + * FIXED: Was adding spaces before pasted rich text. + 2012-05-26 Morten Juhl-Johansen Zölde-Fejér * Add Danish translation. diff --git a/src/rtf/writer.cpp b/src/rtf/writer.cpp index 689eb42e..c0d4adf7 100644 --- a/src/rtf/writer.cpp +++ b/src/rtf/writer.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011 Graeme Gott + * Copyright (C) 2010, 2011, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -279,7 +279,9 @@ bool RTF::Writer::write(QIODevice* device, QTextDocument* text, bool full) } if (block.begin() != block.end()) { - device->write(" "); + if (full) { + device->write(" "); + } for (QTextBlock::iterator iter = block.begin(); !(iter.atEnd()); ++iter) { QTextFragment fragment = iter.fragment(); QTextCharFormat char_format = fragment.charFormat(); From 7c8c63a6cdb1de3ce056b7df2a048ec8a1780a57 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 14:13:10 -0400 Subject: [PATCH 047/630] FIXED: Data was not always written to disk. References #60. --- ChangeLog | 1 + src/document.cpp | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 43269a6b..29570225 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * FIXED: Data was not always written to disk. * FIXED: Was adding spaces before pasted rich text. 2012-05-26 Morten Juhl-Johansen Zölde-Fejér diff --git a/src/document.cpp b/src/document.cpp index 1040ddea..4e9b190a 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -51,6 +51,15 @@ #include #include +#if defined(Q_OS_MAC) +#include +#elif defined(Q_OS_UNIX) +#include +#elif defined(Q_OS_WIN) +#include +#include +#endif + #include //----------------------------------------------------------------------------- @@ -1022,7 +1031,7 @@ void Document::updateState() bool Document::writeFile(const QString& filename) { bool saved = false; - QFile file(filename); + QFile file(filename + ".tmp"); QString suffix = filename.section(QLatin1Char('.'), -1).toLower(); if (!m_rich_text) { if (file.open(QFile::WriteOnly | QFile::Text)) { @@ -1048,10 +1057,23 @@ bool Document::writeFile(const QString& filename) } } } + if (file.isOpen()) { - saved = saved && (file.error() == QFile::NoError); +#if defined(Q_OS_MAC) + saved &= (fcntl(file.handle(), F_FULLFSYNC, NULL) == 0); +#elif defined(Q_OS_UNIX) + saved &= (fsync(file.handle()) == 0); +#elif defined(Q_OS_WIN) + saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); +#endif + saved &= (file.error() == QFile::NoError); file.close(); } + + if (saved) { + QFile::remove(filename); + QFile::rename(filename + ".tmp", filename); + } return saved; } From 96cf78cc57550ab7e36c01d37b2b0ed5b11f2e75 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 14:32:24 -0400 Subject: [PATCH 048/630] FIXED: Emergency cache was not working for rich text. References #60. --- ChangeLog | 1 + src/document.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 29570225..d852ab2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * FIXED: Emergency cache was not working for rich text. * FIXED: Data was not always written to disk. * FIXED: Was adding spaces before pasted rich text. diff --git a/src/document.cpp b/src/document.cpp index 4e9b190a..81e2df02 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -432,13 +432,13 @@ void Document::loadFile(const QString& filename, int position) file.close(); } } else { - if (filename.endsWith(".odt")) { + if (m_filename.endsWith(".odt")) { ODT::Reader reader; reader.read(filename, document); if (reader.hasError()) { QMessageBox::warning(this, tr("Sorry"), reader.errorString()); } - } else if (filename.endsWith(".rtf")) { + } else { QFile file(filename); if (file.open(QIODevice::ReadOnly)) { RTF::Reader reader; @@ -1032,7 +1032,7 @@ bool Document::writeFile(const QString& filename) { bool saved = false; QFile file(filename + ".tmp"); - QString suffix = filename.section(QLatin1Char('.'), -1).toLower(); + QString suffix = m_filename.section(QLatin1Char('.'), -1).toLower(); if (!m_rich_text) { if (file.open(QFile::WriteOnly | QFile::Text)) { QTextStream stream(&file); @@ -1048,7 +1048,7 @@ bool Document::writeFile(const QString& filename) if (suffix == "odt") { QTextDocumentWriter writer(&file, "ODT"); saved = writer.write(m_text->document()); - } else if (suffix == "rtf") { + } else { RTF::Writer writer(m_codepage); if (m_codepage.isEmpty()) { m_codepage = writer.codePage(); From 1963c57451dd235b3f83ef892f117d60a699c825 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 15:46:13 -0400 Subject: [PATCH 049/630] FIXED: Was not loading data from emergency cache files. Closes #60. --- ChangeLog | 1 + src/window.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d852ab2b..9cbbd4f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * FIXED: Was not loading data from emergency cache files. * FIXED: Emergency cache was not working for rich text. * FIXED: Data was not always written to disk. * FIXED: Was adding spaces before pasted rich text. diff --git a/src/window.cpp b/src/window.cpp index 67f052cf..dc425772 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -944,7 +944,7 @@ bool Window::addDocument(const QString& file, const QString& datafile, int posit Document* document = new Document(file, m_current_wordcount, m_current_time, this); m_documents->addDocument(document); document->loadTheme(m_sessions->current()->theme()); - document->loadFile(datafile, m_save_positions ? position : -1); + document->loadFile(path, m_save_positions ? position : -1); if (datafile != file) { document->text()->document()->setModified(!compareFiles(file, datafile)); QFile::remove(datafile); From bef962c205cb16fe4922d1efb7115bc46a7f21d8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 16:42:10 -0400 Subject: [PATCH 050/630] FIXED: Emergency cache files could have broken names. --- ChangeLog | 1 + src/document.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9cbbd4f0..9732334d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * FIXED: Emergency cache files could have broken names. * FIXED: Was not loading data from emergency cache files. * FIXED: Emergency cache was not working for rich text. * FIXED: Data was not always written to disk. diff --git a/src/document.cpp b/src/document.cpp index 81e2df02..4a9dc573 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -81,7 +81,7 @@ namespace QString filename; QDir dir(g_cache_path); do { - filename = QString("fw_%1").arg(qrand(), 6, 36); + filename = QString("fw_%1").arg(qrand(), 6, 36, QLatin1Char('0')); } while (dir.exists(filename)); return filename; } From a84164e3915ce1629b26927a605b2bfedc783789 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 18:55:38 -0400 Subject: [PATCH 051/630] FIXED: Crashed when loading empty RTF files. --- ChangeLog | 1 + src/rtf/tokenizer.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9732334d..f034cab3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * FIXED: Crashed when loading empty RTF files. * FIXED: Emergency cache files could have broken names. * FIXED: Was not loading data from emergency cache files. * FIXED: Emergency cache was not working for rich text. diff --git a/src/rtf/tokenizer.cpp b/src/rtf/tokenizer.cpp index a7db0e0f..c63afa35 100644 --- a/src/rtf/tokenizer.cpp +++ b/src/rtf/tokenizer.cpp @@ -147,7 +147,7 @@ char RTF::Tokenizer::next() if (m_position >= m_buffer.size()) { m_buffer.resize(8192); int size = m_device->read(m_buffer.data(), m_buffer.size()); - if (size == -1) { + if (size < 1) { throw tr("Unexpectedly reached end of file."); } m_buffer.resize(size); From 0c09543b9a06a12df944c9c23e3ea9e1de5fe1a9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 20:03:22 -0400 Subject: [PATCH 052/630] Load original file when unable to load cached file. --- ChangeLog | 1 + src/document.cpp | 12 ++++++++++-- src/document.h | 2 +- src/window.cpp | 11 +++++++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index f034cab3..d36e83e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * Load original file when unable to load cached file. * FIXED: Crashed when loading empty RTF files. * FIXED: Emergency cache files could have broken names. * FIXED: Was not loading data from emergency cache files. diff --git a/src/document.cpp b/src/document.cpp index 4a9dc573..19486057 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -389,8 +389,10 @@ void Document::print() //----------------------------------------------------------------------------- -void Document::loadFile(const QString& filename, int position) +bool Document::loadFile(const QString& filename, int position) { + bool loaded = true; + if (filename.isEmpty()) { m_text->setReadOnly(false); @@ -400,7 +402,7 @@ void Document::loadFile(const QString& filename, int position) connect(m_text->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(updateWordCount(int,int,int))); connect(m_text->document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded())); - return; + return loaded; } bool enabled = m_highlighter->enabled(); @@ -437,6 +439,8 @@ void Document::loadFile(const QString& filename, int position) reader.read(filename, document); if (reader.hasError()) { QMessageBox::warning(this, tr("Sorry"), reader.errorString()); + loaded = false; + position = -1; } } else { QFile file(filename); @@ -449,6 +453,8 @@ void Document::loadFile(const QString& filename, int position) file.close(); if (reader.hasError()) { QMessageBox::warning(this, tr("Sorry"), reader.errorString()); + loaded = false; + position = -1; } } } @@ -480,6 +486,8 @@ void Document::loadFile(const QString& filename, int position) } connect(m_text->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(updateWordCount(int,int,int))); connect(m_text->document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded())); + + return loaded; } //----------------------------------------------------------------------------- diff --git a/src/document.h b/src/document.h index 6db343ad..09cdb871 100644 --- a/src/document.h +++ b/src/document.h @@ -60,7 +60,7 @@ class Document : public QWidget bool rename(); void checkSpelling(); void print(); - void loadFile(const QString& filename, int position); + bool loadFile(const QString& filename, int position); void loadTheme(const Theme& theme); void loadPreferences(const Preferences& preferences); void setRichText(bool rich_text); diff --git a/src/window.cpp b/src/window.cpp index dc425772..899c9419 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -944,10 +944,13 @@ bool Window::addDocument(const QString& file, const QString& datafile, int posit Document* document = new Document(file, m_current_wordcount, m_current_time, this); m_documents->addDocument(document); document->loadTheme(m_sessions->current()->theme()); - document->loadFile(path, m_save_positions ? position : -1); - if (datafile != file) { - document->text()->document()->setModified(!compareFiles(file, datafile)); - QFile::remove(datafile); + if (document->loadFile(path, m_save_positions ? position : -1)) { + if (datafile != file) { + document->text()->document()->setModified(!compareFiles(file, datafile)); + QFile::remove(datafile); + } + } else { + document->loadFile(file, m_save_positions ? position : -1); } connect(document, SIGNAL(changed()), this, SLOT(updateDetails())); connect(document, SIGNAL(changed()), this, SLOT(updateProgress())); From 0b416267b80919763b59aa78fba6481be5166238 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 10 Jun 2012 20:19:38 -0400 Subject: [PATCH 053/630] Increase cache interval to 10 minutes. --- ChangeLog | 1 + src/window.cpp | 14 ++++++++++---- src/window.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index d36e83e3..4590e98e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-10 Graeme Gott + * Increase cache interval to 10 minutes. * Load original file when unable to load cached file. * FIXED: Crashed when loading empty RTF files. * FIXED: Emergency cache files could have broken names. diff --git a/src/window.cpp b/src/window.cpp index 899c9419..835dc452 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -127,6 +127,10 @@ Window::Window(const QStringList& files) // Set up menubar and toolbar initMenus(); + // Set up cache timer + m_save_timer = new QTimer(this); + m_save_timer->setInterval(600000); + // Set up details m_footer = new QWidget(contents); QWidget* details = new QWidget(m_footer); @@ -329,6 +333,8 @@ Window::Window(const QStringList& files) activateWindow(); raise(); unsetCursor(); + + m_save_timer->start(); } //----------------------------------------------------------------------------- @@ -1020,11 +1026,11 @@ void Window::loadPreferences(Preferences& preferences) m_auto_save = preferences.autoSave(); if (m_auto_save) { - disconnect(m_clock_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); - connect(m_clock_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); + disconnect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); + connect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); } else { - disconnect(m_clock_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); - connect(m_clock_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); + disconnect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); + connect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); } m_save_positions = preferences.savePositions(); diff --git a/src/window.h b/src/window.h index 683c9993..56d5502b 100644 --- a/src/window.h +++ b/src/window.h @@ -114,6 +114,7 @@ private slots: QLabel* m_progress_label; QLabel* m_clock_label; QTimer* m_clock_timer; + QTimer* m_save_timer; bool m_fullscreen; bool m_auto_save; From 96e3f94e4eb8c8684ed64501810c7ad2bd3d6041 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Jun 2012 05:37:07 -0400 Subject: [PATCH 054/630] Make variables names for files more clear. --- src/window.cpp | 26 +++++++++++++------------- src/window.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 835dc452..746b3334 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -78,7 +78,7 @@ namespace //----------------------------------------------------------------------------- -Window::Window(const QStringList& files) +Window::Window(const QStringList& command_line_files) : m_toolbar(0), m_key_sound(0), m_enter_key_sound(0), @@ -244,7 +244,7 @@ Window::Window(const QStringList& files) if (!writable) { m_documents->alerts()->addAlert(style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap(32,32), tr("Emergency cache is not writable."), QStringList()); } - QStringList cachedfiles, datafiles; + QStringList files, datafiles; QString cachepath; QStringList entries = QDir(Document::cachePath()).entryList(QDir::Files); if (writable && (entries.count() > 1) && entries.contains("mapping")) { @@ -276,7 +276,7 @@ Window::Window(const QStringList& files) QString datafile = line.section(' ', 0, 0); QString path = line.section(' ', 1); if (!datafile.isEmpty()) { - cachedfiles.append(path); + files.append(path); datafiles.append(cachepath + "/" + datafile); } } @@ -284,13 +284,13 @@ Window::Window(const QStringList& files) } // Ask if they want to use cached files - if (!cachedfiles.isEmpty()) { - QStringList files = cachedfiles; + if (!files.isEmpty()) { + QStringList filenames = files; int untitled = 1; - int count = files.count(); + int count = filenames.count(); for (int i = 0; i < count; ++i) { - if (files.at(i).isEmpty()) { - files[i] = tr("(Untitled %1)").arg(untitled); + if (filenames.at(i).isEmpty()) { + filenames[i] = tr("(Untitled %1)").arg(untitled); untitled++; } } @@ -299,12 +299,12 @@ Window::Window(const QStringList& files) mbox.setWindowTitle(tr("Warning")); mbox.setText(tr("FocusWriter was not shut down cleanly.")); mbox.setInformativeText(tr("Restore from the emergency cache?")); - mbox.setDetailedText(files.join("\n")); + mbox.setDetailedText(filenames.join("\n")); mbox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); mbox.setDefaultButton(QMessageBox::Yes); mbox.setIcon(QMessageBox::Warning); if (mbox.exec() == QMessageBox::No) { - cachedfiles.clear(); + files.clear(); datafiles.clear(); } } @@ -312,13 +312,13 @@ Window::Window(const QStringList& files) // Open previous documents QString session = settings.value("SessionManager/Session").toString(); - if (cachedfiles.isEmpty() && !files.isEmpty()) { + if (files.isEmpty() && !command_line_files.isEmpty()) { session.clear(); - settings.setValue("Save/Current", files); + settings.setValue("Save/Current", command_line_files); settings.setValue("Save/Positions", QStringList()); settings.setValue("Save/Active", 0); } - m_sessions->setCurrent(session, cachedfiles, datafiles); + m_sessions->setCurrent(session, files, datafiles); // Remove old cache if (!cachepath.isEmpty()) { diff --git a/src/window.h b/src/window.h index 56d5502b..eab18ad7 100644 --- a/src/window.h +++ b/src/window.h @@ -39,7 +39,7 @@ class Window : public QMainWindow Q_OBJECT public: - Window(const QStringList& files); + Window(const QStringList& command_line_files); void addDocuments(const QStringList& files, const QStringList& datafiles, const QStringList& positions = QStringList(), int active = -1, bool show_load = false); void addDocuments(QDropEvent* event); From 2b8b25fe7dea30e48056451ce249a34807648dbc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Jun 2012 05:41:35 -0400 Subject: [PATCH 055/630] FIXED: Displayed paths did not use native separators. --- ChangeLog | 3 +++ src/document.cpp | 8 ++++---- src/window.cpp | 18 ++++++++++-------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4590e98e..05166f4b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-06-11 Graeme Gott + * FIXED: Displayed paths did not use native separators. + 2012-06-10 Graeme Gott * Increase cache interval to 10 minutes. * Load original file when unable to load cached file. diff --git a/src/document.cpp b/src/document.cpp index 19486057..007c6a00 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -296,7 +296,7 @@ bool Document::save() } if (!saved) { - QMessageBox::critical(window(), tr("Sorry"), tr("Unable to save '%1'.").arg(m_filename)); + QMessageBox::critical(window(), tr("Sorry"), tr("Unable to save '%1'.").arg(QDir::toNativeSeparators(m_filename))); return false; } @@ -313,7 +313,7 @@ bool Document::saveAs() if (!filename.isEmpty()) { filename = fileNameWithExtension(filename, selected); if (QFile::exists(filename) && !QFile::remove(filename)) { - QMessageBox::critical(window(), tr("Sorry"), tr("Unable to overwrite '%1'.").arg(filename)); + QMessageBox::critical(window(), tr("Sorry"), tr("Unable to overwrite '%1'.").arg(QDir::toNativeSeparators(filename))); return false; } qSwap(m_filename, filename); @@ -345,11 +345,11 @@ bool Document::rename() if (!filename.isEmpty()) { filename = fileNameWithExtension(filename, selected); if (QFile::exists(filename) && !QFile::remove(filename)) { - QMessageBox::critical(window(), tr("Sorry"), tr("Unable to overwrite '%1'.").arg(filename)); + QMessageBox::critical(window(), tr("Sorry"), tr("Unable to overwrite '%1'.").arg(QDir::toNativeSeparators(filename))); return false; } if (!QFile::rename(m_filename, filename)) { - QMessageBox::critical(window(), tr("Sorry"), tr("Unable to rename '%1'.").arg(m_filename)); + QMessageBox::critical(window(), tr("Sorry"), tr("Unable to rename '%1'.").arg(QDir::toNativeSeparators(m_filename))); return false; } m_filename = filename; diff --git a/src/window.cpp b/src/window.cpp index 746b3334..37d51365 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -285,12 +285,14 @@ Window::Window(const QStringList& command_line_files) // Ask if they want to use cached files if (!files.isEmpty()) { - QStringList filenames = files; + QStringList filenames; int untitled = 1; - int count = filenames.count(); + int count = files.count(); for (int i = 0; i < count; ++i) { - if (filenames.at(i).isEmpty()) { - filenames[i] = tr("(Untitled %1)").arg(untitled); + if (!files.at(i).isEmpty()) { + filenames.append(QDir::toNativeSeparators(files.at(i))); + } else { + filenames.append(tr("(Untitled %1)").arg(untitled)); untitled++; } } @@ -360,7 +362,7 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles if (!skip.isEmpty()) { QStringList skipped; foreach (int i, skip) { - skipped += files.at(i); + skipped += QDir::toNativeSeparators(files.at(i)); } QMessageBox mbox(window()); mbox.setWindowTitle(tr("Sorry")); @@ -396,14 +398,14 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles skip.removeFirst(); continue; } else if (!addDocument(files.at(i), datafiles.at(i), positions.value(i, "-1").toInt())) { - missing.append(files.at(i)); + missing.append(QDir::toNativeSeparators(files.at(i))); } else if (!files.at(i).isEmpty() && (m_documents->currentDocument()->untitledIndex() > 0)) { int index = m_documents->currentIndex(); - missing.append(files.at(i)); + missing.append(QDir::toNativeSeparators(files.at(i))); m_documents->removeDocument(index); m_tabs->removeTab(index); } else if (m_documents->currentDocument()->isReadOnly() && m_documents->count() > open_files) { - readonly.append(files.at(i)); + readonly.append(QDir::toNativeSeparators(files.at(i))); } open_files = m_documents->count(); } From 41888e82e0ae8b4f4936bb06c07d10144a26a38d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Jun 2012 08:57:36 -0400 Subject: [PATCH 056/630] FIXED: Saved cache files more frequently than necessary. --- ChangeLog | 1 + src/document.cpp | 9 ++++++++- src/document.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 05166f4b..fe34a22e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-11 Graeme Gott + * FIXED: Saved cache files more frequently than necessary. * FIXED: Displayed paths did not use native separators. 2012-06-10 Graeme Gott diff --git a/src/document.cpp b/src/document.cpp index 007c6a00..4ee0f15f 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -168,6 +168,7 @@ namespace Document::Document(const QString& filename, int& current_wordcount, int& current_time, QWidget* parent) : QWidget(parent), m_cache_filename(randomCacheFilename()), + m_cache_outdated(false), m_index(0), m_always_center(false), m_rich_text(false), @@ -270,7 +271,10 @@ bool Document::isReadOnly() const void Document::cache() { - writeFile(g_cache_path + m_cache_filename); + if (m_cache_outdated) { + m_cache_outdated = false; + writeFile(g_cache_path + m_cache_filename); + } } //----------------------------------------------------------------------------- @@ -289,6 +293,7 @@ bool Document::save() // Write file to disk bool saved = writeFile(m_filename); if (saved) { + m_cache_outdated = false; QFile::remove(g_cache_path + m_cache_filename); QFile::copy(m_filename, g_cache_path + m_cache_filename); } else { @@ -836,6 +841,8 @@ void Document::undoCommandAdded() void Document::updateWordCount(int position, int removed, int added) { + m_cache_outdated = true; + // Change filename and rich text status if necessary because of undo/redo int steps = m_text->document()->availableUndoSteps(); if (m_old_states.contains(steps)) { diff --git a/src/document.h b/src/document.h index 09cdb871..e868eda5 100644 --- a/src/document.h +++ b/src/document.h @@ -111,6 +111,7 @@ private slots: private: QString m_filename; QString m_cache_filename; + bool m_cache_outdated; QByteArray m_codepage; QHash > m_old_states; int m_index; From 7a40fefc4d56db3db83ce5c796f40c0f443b2928 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Jun 2012 20:36:04 -0400 Subject: [PATCH 057/630] Only use fsync when saving files. --- ChangeLog | 1 + src/document.cpp | 14 ++++++++------ src/document.h | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index fe34a22e..de19d2de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-06-11 Graeme Gott + * Only use fsync when saving files. * FIXED: Saved cache files more frequently than necessary. * FIXED: Displayed paths did not use native separators. diff --git a/src/document.cpp b/src/document.cpp index 4ee0f15f..3a91bf10 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -273,7 +273,7 @@ void Document::cache() { if (m_cache_outdated) { m_cache_outdated = false; - writeFile(g_cache_path + m_cache_filename); + writeFile(g_cache_path + m_cache_filename, false); } } @@ -291,7 +291,7 @@ bool Document::save() } // Write file to disk - bool saved = writeFile(m_filename); + bool saved = writeFile(m_filename, true); if (saved) { m_cache_outdated = false; QFile::remove(g_cache_path + m_cache_filename); @@ -1043,7 +1043,7 @@ void Document::updateState() //----------------------------------------------------------------------------- -bool Document::writeFile(const QString& filename) +bool Document::writeFile(const QString& filename, bool sync) { bool saved = false; QFile file(filename + ".tmp"); @@ -1074,13 +1074,15 @@ bool Document::writeFile(const QString& filename) } if (file.isOpen()) { + if (sync) { #if defined(Q_OS_MAC) - saved &= (fcntl(file.handle(), F_FULLFSYNC, NULL) == 0); + saved &= (fcntl(file.handle(), F_FULLFSYNC, NULL) == 0); #elif defined(Q_OS_UNIX) - saved &= (fsync(file.handle()) == 0); + saved &= (fsync(file.handle()) == 0); #elif defined(Q_OS_WIN) - saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); + saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); #endif + } saved &= (file.error() == QFile::NoError); file.close(); } diff --git a/src/document.h b/src/document.h index e868eda5..88e84155 100644 --- a/src/document.h +++ b/src/document.h @@ -106,7 +106,7 @@ private slots: QString fileNameWithExtension(const QString& filename, const QString& filter) const; void updateSaveLocation(); void updateState(); - bool writeFile(const QString& filename); + bool writeFile(const QString& filename, bool sync); private: QString m_filename; From e42d2a253f14c62dbd34b0d281eaee8197c89d2e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 12 Jun 2012 09:25:52 -0400 Subject: [PATCH 058/630] Remove document name from locale dialog title. --- src/locale_dialog.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index 4651f3b0..64005d8f 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -44,8 +44,7 @@ QString LocaleDialog::m_appname; LocaleDialog::LocaleDialog(QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) { - QString title = parent ? parent->window()->windowTitle() : QString(); - setWindowTitle(!title.isEmpty() ? title : QCoreApplication::applicationName()); + setWindowTitle(QCoreApplication::applicationName()); QLabel* text = new QLabel(tr("Select application language:"), this); From 7d656b93f66964a8c52b6ae8791b89197cd5f990 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 12 Jun 2012 11:31:52 -0400 Subject: [PATCH 059/630] Tag version 1.3.6 --- ChangeLog | 3 +++ mac_deploy.sh | 2 +- resources/mac/Info.plist | 4 ++-- src/main.cpp | 2 +- windows_deploy.bat | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index de19d2de..371803f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-06-12 Graeme Gott + * Tag version 1.3.6. + 2012-06-11 Graeme Gott * Only use fsync when saving files. * FIXED: Saved cache files more frequently than necessary. diff --git a/mac_deploy.sh b/mac_deploy.sh index 1a8270f3..1ea3a61d 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.3.5.2' +VERSION='1.3.6' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/mac/Info.plist b/resources/mac/Info.plist index 91117c7d..30a93f4d 100644 --- a/resources/mac/Info.plist +++ b/resources/mac/Info.plist @@ -15,9 +15,9 @@ CFBundleIdentifier org.gottcode.FocusWriter CFBundleShortVersionString - 1.3.5.2 + 1.3.6 CFBundleVersion - 1.3.5.2 + 1.3.6 CFBundleName FocusWriter diff --git a/src/main.cpp b/src/main.cpp index 542189af..a9a6edf7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -64,7 +64,7 @@ Application::Application(int& argc, char** argv) m_window(0) { setApplicationName("FocusWriter"); - setApplicationVersion("1.3.5.2"); + setApplicationVersion("1.3.6"); setOrganizationDomain("gottcode.org"); setOrganizationName("GottCode"); { diff --git a/windows_deploy.bat b/windows_deploy.bat index 951601ba..7d636d9d 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.3.5.2 +SET VERSION=1.3.6 ECHO Copying executable MKDIR %APP% From 55756f7a215ad91a18cef0c6f8256175496ad908 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 18 Jun 2012 11:10:13 -0400 Subject: [PATCH 060/630] Update translations. --- focuswriter.pro | 4 +- translations/focuswriter_ca.qm | Bin 0 -> 1427 bytes translations/focuswriter_ca.ts | 1668 +++++++++++++++++++++++++++++ translations/focuswriter_cs.qm | Bin 27477 -> 27529 bytes translations/focuswriter_cs.ts | 424 ++++---- translations/focuswriter_da.ts | 262 ++--- translations/focuswriter_de.ts | 400 +++---- translations/focuswriter_el.ts | 400 +++---- translations/focuswriter_en.ts | 400 +++---- translations/focuswriter_es.ts | 400 +++---- translations/focuswriter_es_MX.ts | 400 +++---- translations/focuswriter_fi.ts | 400 +++---- translations/focuswriter_fr.ts | 400 +++---- translations/focuswriter_hu.ts | 400 +++---- translations/focuswriter_it.ts | 400 +++---- translations/focuswriter_ja.qm | Bin 0 -> 20584 bytes translations/focuswriter_ja.ts | 1666 ++++++++++++++++++++++++++++ translations/focuswriter_nl.ts | 400 +++---- translations/focuswriter_pl.ts | 400 +++---- translations/focuswriter_pt.ts | 400 +++---- translations/focuswriter_pt_BR.ts | 400 +++---- translations/focuswriter_ru.ts | 408 +++---- translations/focuswriter_sv.ts | 400 +++---- translations/focuswriter_uk.ts | 400 +++---- 24 files changed, 6884 insertions(+), 3548 deletions(-) create mode 100644 translations/focuswriter_ca.qm create mode 100644 translations/focuswriter_ca.ts create mode 100644 translations/focuswriter_ja.qm create mode 100644 translations/focuswriter_ja.ts diff --git a/focuswriter.pro b/focuswriter.pro index e8e24c68..dcaf9d90 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -109,7 +109,8 @@ SOURCES += src/alert.cpp \ src/rtf/tokenizer.cpp \ src/rtf/writer.cpp -TRANSLATIONS = translations/focuswriter_cs.ts \ +TRANSLATIONS = translations/focuswriter_ca.ts \ + translations/focuswriter_cs.ts \ translations/focuswriter_da.ts \ translations/focuswriter_de.ts \ translations/focuswriter_el.ts \ @@ -120,6 +121,7 @@ TRANSLATIONS = translations/focuswriter_cs.ts \ translations/focuswriter_fr.ts \ translations/focuswriter_hu.ts \ translations/focuswriter_it.ts \ + translations/focuswriter_ja.ts \ translations/focuswriter_nl.ts \ translations/focuswriter_pl.ts \ translations/focuswriter_pt.ts \ diff --git a/translations/focuswriter_ca.qm b/translations/focuswriter_ca.qm new file mode 100644 index 0000000000000000000000000000000000000000..c3f9abcd9ece12a7e4c0156d870956ce295c24da GIT binary patch literal 1427 zcmbVLziSgw9RJ4rFuzP`DgJ;A=TP&b5^2G~+QDnm>YyS?L~!z&yd(#gyZG+Xq+Po> z6%jfVTpV-}Cl?n{a1lX^lOU*nfS`-B_4D3^OOv#vb;$eX-M#PU*Z1B0tLo_wzaMXY zJez!T@5$?L3qg6>V#(3FQOL0S1Sas@pUE#cC7+T9_L+2-Gk-F59yw#ze&|)I;gQc@bWELgE&iouSkHHdRS%wSOL)0Ew1@q}s^%93s{TS;f7!*Ic>w42OyO`ek` zMN}3wfnmzP1oi;3CoWcGrq*N(q$2IM + + + + Alert + + + Close (Ctrl+D) + Tanca (Ctrl+D) + + + + Collapse + Redueix + + + + Expand + Expandeix + + + + AlertLayer + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + + + Sorry + Disculpes + + + + Unable to save '%1'. + No s'ha pogut desar '%1'. + + + + + Save File As + Anomena i desa + + + + + Unable to overwrite '%1'. + No s'ha pogut sobreescriure '%1'. + + + + Rename File + Reanomena el fitxer + + + + Unable to rename '%1'. + No s'ha pogut reanomenar '%1'. + + + + Plain Text (*.txt) + + + + + OpenDocument Text (*.odt) + + + + + Rich Text (*.rtf) + Text enriquit (*.rtf) + + + + All Files (*) + Tots els fitxers (*) + + + + FindDialog + + + Search for: + Cerca: + + + + Replace with: + + + + + Ignore case + + + + + Whole words only + + + + + Search up + + + + + Search down + + + + + + Find + + + + + + Replace + + + + + Replace All + + + + + Replace %n instance(s)? + + + + + + + + + Question + + + + + + Sorry + Disculpes + + + + + Phrase not found. + + + + + Highlighter + + + Add + + + + + Check Spelling... + + + + + (No suggestions found) + + + + + ImageButton + + + Open Image + + + + + Images(%1) + + + + + LocaleDialog + + + Select application language: + + + + + <System Language> + + + + + Note + + + + + Please restart this application for the change in language to take effect. + + + + + PreferencesDialog + + + Preferences + + + + + General + + + + + Statistics + + + + + Toolbar + + + + + Spell Checking + + + + + Select Dictionary + + + + + + Sorry + Disculpes + + + + Unable to open archive. + + + + + Unable to read archive metadata. + + + + + The archive does not contain a usable dictionary. + + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + + Question + + + + + The dictionary "%1" already exists. Do you want to replace it? + + + + + Remove current dictionary? + + + + + Daily Goal + + + + + None + + + + + Minutes: + + + + + + Words: + + + + + Editing + + + + + Always vertically center + + + + + Block insertion cursor + + + + + Default to rich text + + + + + Smooth fonts + + + + + Typewriter sounds + + + + + Smart quotes: + + + + + Double + + + + + Single + + + + + Saving + + + + + Automatically save changes + + + + + Remember cursor position + + + + + Contents + + + + + Word count + + + + + Page count + + + + + Paragraph count + + + + + Character count + + + + + Page Size + + + + + Characters: + + + + + Paragraphs: + + + + + Word Count Algorithm + + + + + Detect word boundaries + + + + + Divide character count by six + + + + + Style + + + + + Icons Only + + + + + Text Only + + + + + Text Alongside Icons + + + + + Text Under Icons + + + + + Text Position: + + + + + Actions + + + + + Move Up + + + + + Move Down + + + + + Add Separator + + + + + Check spelling as you type + + + + + Ignore words in UPPERCASE + + + + + Ignore words with numbers + + + + + Language + + + + + + Add + + + + + + Remove + + + + + Personal Dictionary + + + + + Reader + + + + Not a supported RTF file. + + + + + Unable to open archive. + + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + Session + + + + + + + + + Default + + + + + SessionManager + + + Manage Sessions + + + + + S&essions + + + + + New + + + + + Rename + + + + + Clone + + + + + Delete + + + + + Switch To + + + + + New Session + + + + + Clone Session + + + + + Rename Session + + + + + Question + + + + + Delete selected session? + + + + + Session name: + + + + + Sorry + Disculpes + + + + The requested session name is already in use. + + + + + &New... + + + + + Ctrl+Shift+N + + + + + &Manage... + + + + + Ctrl+Shift+M + + + + + SmartQuote + + + Replacing quotation marks... + + + + + Please Wait + + + + + SpellChecker + + + Check Spelling + + + + + Add + + + + + Ignore + + + + + Ignore All + + + + + Change + + + + + Change All + + + + + Not in dictionary: + + + + + Change to: + + + + + Checking spelling... + + + + + Cancel + + + + + Please wait + + + + + Spell check complete. + + + + + Stack + + + Question + + + + + Remove all formatting from the current file? + + + + + Theme + + + Untitled %1 + + + + + ThemeDialog + + + Modify Theme + + + + + Name: + + + + + Background + + + + + No Image + + + + + Tiled + + + + + + Centered + + + + + + Stretched + + + + + Scaled + + + + + Zoomed + + + + + Remove + + + + + Type: + + + + + + + Color: + + + + + Image: + + + + + Foreground + + + + + Opacity + + + + + + + + pixels + + + + + Left + + + + + Right + + + + + Position + + + + + Size: + + + + + Rounding: + + + + + Margin: + + + + + Padding: + + + + + Text + + + + + Font: + + + + + Misspelled: + + + + + The quick brown fox jumps over the lazy dog + + + + + ThemeManager + + + Themes + + + + + Add + + + + + Modify + + + + + Remove + + + + + Import + + + + + Export + + + + + Close + + + + + Question + + + + + Remove selected theme? + + + + + Import Theme + + + + + Themes (*.fwtz *.theme) + + + + + Themes (*.fwtz) + + + + + Sorry + Disculpes + + + + A theme already exists with that name. Please enter a new name: + + + + + Export Theme + + + + + Timer + + + <b>%1</b> - %2 + + + + + Question + + + + + Delete timer? + + + + + <b>Words:</b> %L1 + + + + + <b>Pages:</b> %L1 + + + + + <b>Paragraphs:</b> %L1 + + + + + <b>Characters:</b> %L1 / %L2 + + + + + Set Delay + + + + + Set Time + + + + + Delay: + + + + + Time: + + + + + HH:mm:ss + + + + + Alarm + + + + + Type: + + + + + Memo: + + + + + Edit + + + + + Delete + + + + + TimerDisplay + + + HH:mm:ss + + + + + No timers running + + + + + TimerManager + + + Timers + + + + + New + + + + + Recent + + + + + Question + + + + + Cancel editing timers? + + + + + +HH:mm:ss + + + + + %1 - %2 + + + + + Tokenizer + + + Unexpectedly reached end of file. + + + + + Window + + + Words: 0 + + + + + Pages: 0 + + + + + Paragraphs: 0 + + + + + Characters: 0 + + + + + 0% of daily goal + + + + + Loading themes + + + + + Loading sounds + + + + + + Untitled + + + + + + Sorry + Disculpes + + + + Note + + + + + Open File + + + + + About FocusWriter + + + + + Characters: %L1 / %L2 + + + + + Pages: %L1 + + + + + Paragraphs: %L1 + + + + + Words: %L1 + + + + + %1% of daily goal + + + + + Opening %1 + + + + + Question + + + + + Save changes? + + + + + + (Untitled %1) + + + + + Loading settings + + + + + Emergency cache is not writable. + + + + + + Warning + + + + + FocusWriter was not shut down cleanly. + + + + + Restore from the emergency cache? + + + + + Some files are unsupported and will not be opened. + + + + + Some files could not be opened. + + + + + Some files were opened Read-Only. + + + + + Text Files (%1);;All Files (*) + + + + + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> + + + + + '%1' is newer than the cached copy. + + + + + Overwrite newer file? + + + + + Unable to load typewriter sounds. + + + + + %1 (Read-Only) + + + + + &File + + + + + &New + + + + + &Open... + + + + + &Save + + + + + Save &As... + + + + + &Rename... + + + + + Save A&ll + + + + + Manage Sessions + + + + + New Session + + + + + &Print... + + + + + &Close + + + + + &Quit + + + + + Ctrl+Q + + + + + &Edit + + + + + &Undo + + + + + &Redo + + + + + Cu&t + + + + + &Copy + + + + + &Paste + + + + + Select &All + + + + + Fo&rmat + + + + + &Bold + + + + + &Italic + + + + + &Underline + + + + + Stri&kethrough + + + + + Ctrl+K + + + + + Sup&erscript + + + + + Ctrl+^ + + + + + &Subscript + + + + + Ctrl+_ + + + + + Align &Left + + + + + Ctrl+{ + + + + + Align &Center + + + + + Ctrl+| + + + + + Align &Right + + + + + Ctrl+} + + + + + Align &Justify + + + + + Ctrl+J + + + + + &Decrease Indent + + + + + Ctrl+< + + + + + I&ncrease Indent + + + + + Ctrl+> + + + + + Le&ft to Right Block + + + + + Ri&ght to Left Block + + + + + &Make Plain Text + + + + + &Make Rich Text + + + + + &Tools + + + + + &Find... + + + + + Find &Next + + + + + Find Pre&vious + + + + + &Replace... + + + + + Ctrl+R + + + + + Smart &Quotes + + + + + Update &Document + + + + + Update &Selection + + + + + &Spelling... + + + + + F7 + + + + + &Timers... + + + + + &Settings + + + + + Show &Toolbar + + + + + Show &Menu Icons + + + + + &Fullscreen + + + + + F11 + + + + + Esc + + + + + M&inimize + + + + + Ctrl+M + + + + + &Themes... + + + + + &Preferences... + + + + + &Help + + + + + Application &Language... + + + + + &About + + + + + About &Qt + + + + diff --git a/translations/focuswriter_cs.qm b/translations/focuswriter_cs.qm index e95071b2ed51e1f583eb915282f1d8760f043de5..f52291f24eaa53f38e580a42a1ad2be48821bdcd 100644 GIT binary patch delta 3108 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 a0EYiAf%ReXp diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index f7532ad2..926d3f25 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - - + + Save File As Uložit soubor jako - - + + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Plain Text (*.txt) Prostý text (*.txt) - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -197,22 +197,22 @@ LocaleDialog - + Select application language: Vybrat jazyk programu: - + <System Language> <Jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. Spusťte program znovu, aby se změna jazyka projevila. @@ -220,302 +220,302 @@ PreferencesDialog - + Preferences Nastavení - + General Obecné - + Statistics Statistika - + Toolbar Nástrojový pruh - + Spell Checking - Ověření správného psaní + Správné psaní - + Select Dictionary Vybrat slovník - - + + Sorry Promiňte - + Unable to open archive. Nelze otevřít archiv. - + Unable to read archive metadata. Nelze přečíst metadata archivu. - + The archive does not contain a usable dictionary. Archiv neobsahuje použitelný slovník. - + Unable to open file '%1'. Nelze otevřít soubor '%1'. - + Unable to close file '%1'. Nelze zavřít soubor '%1'. - - + + Question Otázka - + The dictionary "%1" already exists. Do you want to replace it? Slovník "%1" již existuje. Chcete jej nahradit? - + Remove current dictionary? Odstranit současný slovník? - + Daily Goal Denní cíl - + None Žádný - + Minutes: - Minuty: + Minut: - - + + Words: - Slova: + Slov: - + Editing Úpravy - + Always vertically center Umístit vždy svisle do středu - + Block insertion cursor Ukazovátko vkládání bloku - + Default to rich text Jako výchozí text s formátováním - + Smooth fonts Vyhlazená písma - + Typewriter sounds Zvuky psacího stroje - + Smart quotes: Chytré uvozovky: - + Double dvojité - + Single jednoduché - + Saving Ukládání - + Automatically save changes Automaticky uložit změny - + Remember cursor position Zapamatovat si polohu ukazovátka - + Contents Obsah - + Word count Počet slov - + Page count Počet stran - + Paragraph count Počet odstavců - + Character count Počet znaků - + Page Size Velikost strany - + Characters: - Znaky: + Znaků: - + Paragraphs: - Odstavce: + Odstavců: - + Word Count Algorithm Algoritmus pro počítání slov - + Detect word boundaries Zjistit hranice slov - + Divide character count by six Vydělit počet znaků šesti - + Style Styl - + Icons Only Pouze ikony - + Text Only Pouze text - + Text Alongside Icons Text vedle ikon - + Text Under Icons Text pod ikonami - + Text Position: Poloha textu: - + Actions Činnosti - + Move Up Posunout nahoru - + Move Down Posunout dolů - + Add Separator Přidat oddělovač - + Check spelling as you type Ověřování pravopisu během psaní - + Ignore words in UPPERCASE Nevšímat si slov psaných VELKÝMI PÍSMENY - + Ignore words with numbers Nevšímat si slov s čísly - + Language Jazyk - - + + Add Přidat - - + + Remove Odstranit - + Personal Dictionary Osobní slovník @@ -523,8 +523,8 @@ Reader - - + + Not a supported RTF file. To nie jest obsługiwany plik RTF. @@ -547,7 +547,7 @@ Session - + @@ -684,7 +684,7 @@ Ignore - Nevšímat si + Přehlížet @@ -895,7 +895,7 @@ The quick brown fox jumps over the lazy dog - Šourající se ježek něco říká žluté včelce + Rychlá bílá liška hbitě skáče přes pomalého ježka. Ó, ú, á, é zaznívají obdivné výkřiky přihlížejících zvířátek @@ -903,7 +903,7 @@ Themes - Podoby + Vzhled @@ -948,7 +948,7 @@ Import Theme - Zavést podobu + Zavést vzhled @@ -1118,7 +1118,7 @@ Tokenizer - + Unexpectedly reached end of file. Niespodziewanie osiągnięto koniec pliku. @@ -1126,541 +1126,541 @@ Window - + Words: 0 Slova: 0 - + Pages: 0 Strany: 0 - + Paragraphs: 0 Odstavce: 0 - + Characters: 0 Znaky: 0 - + 0% of daily goal 0% z denního cíle - + Loading themes Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - - + + Untitled Bez názvu - - + + Sorry Promiňte - + Note Notiz - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + Characters: %L1 / %L2 Znaky: %L1 / %L2 - + Pages: %L1 Strany: %L1 - + Paragraphs: %L1 Odstavce: %L1 - + Words: %L1 Slova: %L1 - + %1% of daily goal %1% z denního cíle - + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - - + + (Untitled %1) (Bez názvu %1) - + Loading settings Nahrávají se nastavení - + Emergency cache is not writable. Pohotovostní vyrovnávací paměť není zapisovatelná - - + + Warning Varování - + FocusWriter was not shut down cleanly. FocusWriter nebyl vypnut čistě. - + Restore from the emergency cache? Obnovit z pohotovostní vyrovnávací paměti? - + Some files are unsupported and will not be opened. Některé soubory nejsou podporovány a nebudou otevřeny. - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + Text Files (%1);;All Files (*) Textové soubory (%1);;Všechny soubory (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> - <p><center><big><b>FocusWriter %1</b></big><br/>Jednoduchý textový procesor pro práci na celou obrazovku<br/><small>Autorské právo &copy; 2008-%2 Graeme Gott</small><br/><small>Vydáno pod povolením <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> </small></center></p><p><center>Používá <a href="http://hunspell.sourceforge.net/">Hunspell</a> pro ověření pravopisu<br/><small>Použito pod povolením <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> </small></center></p><p><center>Používá ikony z souboru ikon<a href="http://www.oxygen-icons.org/">Oxygen</a> <br/><small>Použito pod povolením <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> </small></center></p> + <p><center><big><b>FocusWriter %1</b></big><br/>Jednoduchý celoobrazovkový editor textu<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Vydáno s licencí <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Používá<a href="http://hunspell.sourceforge.net/">Hunspell</a> na ověření pravopisu<br/><small>Použito s licencí <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Používá ikony ze sady ikon <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Použito s licencí <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit &Úpravy - + &Undo &Zpět - + &Redo &Znovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Select &All Vybrat &vše - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Make Plain Text &Udělat prostý text - + &Make Rich Text &Udělat text s formátováním - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize - &Minimalizovat + Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... - &Podoby... + &Vzhled... - + &Preferences... &Nastavení... - + &Help &Nápověda - + Application &Language... Jazyk &programu... - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 8233a09c..7fb1e661 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - - + + Save File As Gem fil som - - + + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Plain Text (*.txt) Ren tekst (*.txt) - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) @@ -206,12 +206,12 @@ <Systemsprog> - + Note Note - + Please restart this application for the change in language to take effect. Genstart programmet for at skifte til det valgte sprog. @@ -546,7 +546,7 @@ Session - + @@ -1125,541 +1125,541 @@ Window - + Words: 0 Ord: 0 - + Pages: 0 Sider: 0 - + Paragraphs: 0 Afsnit: 0 - + Characters: 0 Tegn: 0 - + 0% of daily goal 0% af dagligt mål - + Loading themes Indlæser temaer - + Loading sounds Indlæser lyde - - + + Untitled Uden titel - - + + Sorry Beklager - + Note Note - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + Characters: %L1 / %L2 Tegn: %L1 / %L2 - + Pages: %L1 Sider: %L1 - + Paragraphs: %L1 Afsnit: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1% af dagligt mål - + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - - + + (Untitled %1) (Uden titel%1) - + Loading settings Indlæser indstillinger - + Emergency cache is not writable. Der kan ikke skrives til reservecachen. - - + + Warning Advarsel - + FocusWriter was not shut down cleanly. FocusWriter blev ikke lukket korrekt. - + Restore from the emergency cache? Gendan fra reservecache? - + Some files are unsupported and will not be opened. Visse filer er ikke understøttet og vil ikke blive åbnet. - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + Text Files (%1);;All Files (*) Tekstfiler (%1);;Alle Filer (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Et enkelt tekstbehandlingsprogram i fuldskærm<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Udgivet under <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a>-licensen</small></center></p><p><center>Anvender <a href="http://hunspell.sourceforge.net/">Hunspell</a> til stavekontrol<br/><small>Anvendt under <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a>-licensen</small></center></p><p><center>Anvender ikoner fra <a href="http://www.oxygen-icons.org/">Oxygen</a>-ikontemaet<br/><small>Anvendt under <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a>-licensen</small></center></p> - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Select &All Vælg &alle - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Make Plain Text Gør til ren &tekst - + &Make Rich Text Gør til &Rich text - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + &Help &Hjælp - + Application &Language... Programmets &sprog - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index c585bacc..197fe5fa 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - - + + Save File As Datei speichern unter - - + + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Plain Text (*.txt) nur Text (*.txt) - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Programmsprache wählen: - + <System Language> <Systemsprache> - + Note Beachte - + Please restart this application for the change in language to take effect. Damit Änderungen an der Programmsprache in Kraft treten können, muss das Programm neu gestartet werden. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Einstellungen - + General Allgemein - + Statistics Statistiken - + Toolbar Symbolleiste - + Spell Checking Rechtschreibprüfung - + Select Dictionary Wörterbuch wählen - - + + Sorry Entschuldigung - + Unable to open archive. Archiv kann nicht geöffnet werden. - + Unable to read archive metadata. Die Metadaten des Archivs können nicht gelesen werden. - + The archive does not contain a usable dictionary. Dieses Archiv enthält kein brauchbares Wörterbuch. - + Unable to open file '%1'. Die Datei '%1' kann nicht geöffnet werden. - + Unable to close file '%1'. Die Datei '%1' kann nicht geschlossen werden. - - + + Question Frage - + The dictionary "%1" already exists. Do you want to replace it? Das Wörterbuch %1 existiert bereits. Möchten Sie es ersetzen? - + Remove current dictionary? Aktuelles Wörterbuch entfernen? - + Daily Goal Tagesziel - + None Nichts - + Minutes: Minuten: - - + + Words: Wörter: - + Editing Bearbeitung - + Always vertically center Immer mittig ausrichten - + Block insertion cursor Eingabemarkierung als Block darstellen - + Default to rich text Rich Text Format als Standard - + Smooth fonts Geglättete Schriften - + Typewriter sounds Tippgeräusche - + Smart quotes: Typographische Anführungszeichen: - + Double Doppelt - + Single Einfach - + Saving Speichern - + Automatically save changes Änderungen automatisch speichern - + Remember cursor position Position der Eingabemarkierung merken - + Contents Inhalt - + Word count Wörterzählung - + Page count Seitenzählung - + Paragraph count Absatzzählung - + Character count Zeichenzählung - + Page Size Seitengröße - + Characters: Zeichen: - + Paragraphs: Absätze: - + Word Count Algorithm Algorithmus für die Wortzählung - + Detect word boundaries Wortgrenzen entdecken - + Divide character count by six Zeichenzahl durch sechs dividieren - + Style Erscheinungsbild - + Icons Only nur Symbole - + Text Only nur Text - + Text Alongside Icons Text neben Symbolen - + Text Under Icons Text unter Icons - + Text Position: Text Position: - + Actions Befehle - + Move Up Nach oben verschieben - + Move Down Nach unten verschieben - + Add Separator Trennlinie hinzufügen - + Check spelling as you type Rechtschreibung bei der Eingabe prüfen - + Ignore words in UPPERCASE GROßSCHREIBUNG von Wörtern ignorieren - + Ignore words with numbers Wörter mit Ziffern ignorieren - + Language Sprache - - + + Add Hinzufügen - - + + Remove Entfernen - + Personal Dictionary Persönliches Wörterbuch @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Keine unterstützte RTF-Datei. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Ende der Datei unerwartet erreicht. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Wörter: 0 - + Pages: 0 Seiten: 0 - + Paragraphs: 0 Absätze: 0 - + Characters: 0 Zeichen: 0 - + 0% of daily goal 0% vom Tagesziel - + Loading themes Themen werden geladen - + Loading sounds Sounds werden geladen - - + + Untitled Unbenannt - - + + Sorry Entschuldigung - + Note Hinweis - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - + Pages: %L1 Seiten: %L1 - + Paragraphs: %L1 Absätze: %L1 - + Words: %L1 Wörter: %L1 - + %1% of daily goal %1% des Tagesziels - + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - - + + (Untitled %1) (Unbenannt %1) - + Loading settings Einstellungen werden geladen - + Emergency cache is not writable. Der Sicherheitsspeicher ist nicht beschreibbar. - - + + Warning Warnung - + FocusWriter was not shut down cleanly. FocusWriter wurde nicht ordnungsgemäß beendet. - + Restore from the emergency cache? Sicherheitskopie wiederherstellen? - + Some files are unsupported and will not be opened. Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + Text Files (%1);;All Files (*) Text-Dateien (%1);;Alle Dateien (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Ein einfacher Vollbild-Texteditor <br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Herausgegeben unter der <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> Lizenz</small></center></p><p><center>Für die Rechtschreibprüfung wird <a href="http://hunspell.sourceforge.net/">Hunspell</a> benutzt<br/><small>Unter Verwendung der <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> Lizenz</small></center></p><p><center>Die Symbole entststammen dem <a href="http://www.oxygen-icons.org/">Oxygen</a> Symbol-Thema<br/><small>Unter Verwendung der<a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> Lizenz</small></center></p> - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+A - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Select &All Alles Ausw&ählen - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Make Plain Text &Nur Text - + &Make Rich Text &Rich Text - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + &Help &Hilfe - + Application &Language... &Sprache... - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 86b05d6a..0f703daa 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το '%1'. - - + + Save File As Αποθήκευση αρχείου ως - - + + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το '%1'. - + Rename File Μετονομασία αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το '%1'. - + Plain Text (*.txt) Απλό κείμενο (*.txt) - + OpenDocument Text (*.odt) Κείμενο OpenDocument (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Επιλέξτε τη γλώσσα της εφαρμογής: - + <System Language> <System Language> - + Note Σημείωση - + Please restart this application for the change in language to take effect. Επανεκκινήστε την εφαρμογή για να ισχύσει η αλλαγή γλώσσας. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Προτιμήσεις - + General Γενικά - + Statistics Στατιστικά - + Toolbar Γραμμή εργαλείων - + Spell Checking Ορθογραφικός έλεγχος - + Select Dictionary Επιλογή λεξικού - - + + Sorry Λυπούμαστε - + Unable to open archive. Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. - + Unable to read archive metadata. Δεν ήταν δυνατό να αναγνωστούν τα μεταδεδομένα της αρχειοθήκης. - + The archive does not contain a usable dictionary. Η αρχειοθήκη δεν περιέχει αξιοποιήσιμο λεξικό. - + Unable to open file '%1'. Δεν ήταν δυνατό να ανοίξει το αρχείο '%1'. - + Unable to close file '%1'. Δεν ήταν δυνατό να κλείσει το αρχείο '%1'. - - + + Question Ερώτηση - + The dictionary "%1" already exists. Do you want to replace it? Το λεξικό '%1' υπάρχει ήδη. Θέλετε να αντικατασταθεί; - + Remove current dictionary? Να αφαιρεθεί το υπάρχον λεξικό; - + Daily Goal Ημερήσιος στόχος - + None Κανείς - + Minutes: Λεπτά: - - + + Words: Λέξεις: - + Editing Επεξεργασία - + Always vertically center Πάντοτε κατακόρυφο κεντράρισμα - + Block insertion cursor Παχύς δρομέας εισαγωγής - + Default to rich text Ορισμός εμπλουτισμένου κειμένου ως προεπιλογής - + Smooth fonts Στρογγυλεμένες γραμματοσειρές - + Typewriter sounds Ήχοι γραφομηχανής - + Smart quotes: Έξυπνα εισαγωγικά: - + Double Διπλά - + Single Μονά - + Saving Αποθήκευση - + Automatically save changes Αποθήκευση αλλαγών αυτόματα - + Remember cursor position Μνημόνευση θέσης δρομέα - + Contents Περιεχόμενα - + Word count Αριθμός λέξεων - + Page count Αριθμός σελίδων - + Paragraph count Αριθμός παραγράφων - + Character count Αριθμός χαρακτήρων - + Page Size Μέγεθος σελίδας - + Characters: Χαρακτήρες: - + Paragraphs: Παράγραφοι: - + Word Count Algorithm Αριθμός καταμέτρησης λέξεων - + Detect word boundaries Εντοπισμός ορίων λέξεων - + Divide character count by six Διαίρεση αριθμού χαρακτήρων διά του έξι - + Style Στυλ - + Icons Only Μόνο εικονίδια - + Text Only Μόνο κείμενο - + Text Alongside Icons Κείμενο πλάι στα εικονίδια - + Text Under Icons Κείμενο κάτω από τα εικονίδια - + Text Position: Θέση κειμένου: - + Actions Ενέργειες - + Move Up Μετακίνηση πάνω - + Move Down Μετακίνηση κάτω - + Add Separator Προσθήκη διαχωριστικού - + Check spelling as you type Ορθογραφικός έλεγχος κατά την πληκτρολόγηση - + Ignore words in UPPERCASE Παράβλεψη λέξεων με κεφαλαία - + Ignore words with numbers Παράβλεψη λέξεων με αριθμούς - + Language Γλώσσα - - + + Add Προσθήκη - - + + Remove Αφαίρεση - + Personal Dictionary Προσωπικό λεξικό @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Μη υποστηριζόμενο αρχείο RTF. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Απρόσμενη μετάβαση στο τέλος του αρχείου. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Λέξεις: 0 - + Pages: 0 Σελίδες: 0 - + Paragraphs: 0 Παράγραφοι: 0 - + Characters: 0 Χαρακτήρες: 0 - + 0% of daily goal 0% του ημερήσιου στόχου - + Loading themes Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - - + + Untitled Χωρίς τίτλο - - + + Sorry Λυπούμαστε - + Note Σημείωση - + Open File Άνοιγμα αρχείου - + About FocusWriter Περί του FocusWriter - + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - + Pages: %L1 Σελίδες: %L1 - + Paragraphs: %L1 Παράγραφοι: %L1 - + Words: %L1 Λέξεις: %L1 - + %1% of daily goal %1% του ημερήσιου στόχου - + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - - + + (Untitled %1) (Χωρίς τίτλο %1) - + Loading settings Φορτώνουν ρυθμίσεις - + Emergency cache is not writable. Δεν μπορεί να γίνει εγγραφή στην cache εκτάκτου ανάγκης. - - + + Warning Προειδοποίηση - + FocusWriter was not shut down cleanly. Το FocusWriter δεν τερματίστηκε σωστά. - + Restore from the emergency cache? Να γίνει επαναφορά από την cache εκτάκτου ανάγκης; - + Some files are unsupported and will not be opened. Ορισμένα αρχεία δεν υποστηρίζονται και δεν θα ανοιχτούν. - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + Text Files (%1);;All Files (*) Αρχεία κειμένου (%1);;Όλα τα αρχεία (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Ένας απλός επεξεργαστής κειμένου σε πλήρη οθόνη<br/><small>Copyright&copy; 2008-%2 Graeme Gott</small><br/><small>Κυκλοφορεί υπό την άδεια <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Χρησιμοποιεί το <a href="http://hunspell.sourceforge.net/">Hunspell</a>για τον ορθογραφικό έλεγχο<br/><small>Χρησιμοποιείται υπό την άδεια <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Χρησιμοποιείται υπό την άδεια <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. Το '%1' είναι νεότερο από το αντίγραφο στην cache. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση περιόδων λειτουργίας - + New Session Νέα περίοδος λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Select &All Επιλογή όλ&ων - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript Δεί&κτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη γραφή - + Ri&ght to Left Block Αριστερόστρο&φη γραφή - + &Make Plain Text Απ&λό κείμενο - + &Make Rich Text Εμπλουτ&ισμένο κείμενο - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &επόμενου - + Find Pre&vious Εύρεση &προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση γραμμής εργα&λείων - + Show &Menu Icons Εμφάνιση εικονιδίων &μενού - + &Fullscreen Πλήρης οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + &Help &Βοήθεια - + Application &Language... &Γλώσσα εφαρμογής... - + &About &Ταυτότητα - + About &Qt &Περί του Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index e509d2dc..9636f59c 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry - + Unable to save '%1'. - - + + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Plain Text (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: - + <System Language> - + Note - + Please restart this application for the change in language to take effect. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences - + General - + Statistics - + Toolbar - + Spell Checking - + Select Dictionary - - + + Sorry - + Unable to open archive. - + Unable to read archive metadata. - + The archive does not contain a usable dictionary. - + Unable to open file '%1'. - + Unable to close file '%1'. - - + + Question - + The dictionary "%1" already exists. Do you want to replace it? - + Remove current dictionary? - + Daily Goal - + None - + Minutes: - - + + Words: - + Editing - + Always vertically center - + Block insertion cursor - + Default to rich text - + Smooth fonts - + Typewriter sounds - + Smart quotes: - + Double - + Single - + Saving - + Automatically save changes - + Remember cursor position - + Contents - + Word count - + Page count - + Paragraph count - + Character count - + Page Size - + Characters: - + Paragraphs: - + Word Count Algorithm - + Detect word boundaries - + Divide character count by six - + Style - + Icons Only - + Text Only - + Text Alongside Icons - + Text Under Icons - + Text Position: - + Actions - + Move Up - + Move Down - + Add Separator - + Check spelling as you type - + Ignore words in UPPERCASE - + Ignore words with numbers - + Language - - + + Add - - + + Remove - + Personal Dictionary @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. @@ -1125,541 +1125,541 @@ Window - + Words: 0 - + Pages: 0 - + Paragraphs: 0 - + Characters: 0 - + 0% of daily goal - + Loading themes - + Loading sounds - - + + Untitled - - + + Sorry - + Note - + Open File - + About FocusWriter - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - + Opening %1 - + Question - + Save changes? - - + + (Untitled %1) - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files are unsupported and will not be opened. - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + %1 (Read-Only) - + &File - + &New - + &Open... - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Select &All - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Make Plain Text - + &Make Rich Text - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + &Help - + Application &Language... - + &About - + About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 04416c90..29a30323 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Error - + Unable to save '%1'. No se puede guardar "%1". - - + + Save File As Guardar como - - + + Unable to overwrite '%1'. No se puede sobrescribir "%1". - + Rename File Cambiar el nombre del archivo - + Unable to rename '%1'. No se puede cambiar el nombre de "%1". - + Plain Text (*.txt) Texto plano (*.txt) - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Seleccione el idioma de la aplicación: - + <System Language> <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Reinicie la aplicación para que el cambio de idioma tenga efecto. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Preferencias - + General General - + Statistics Estadísticas - + Toolbar Barra de herramientas - + Spell Checking Ortografía - + Select Dictionary Seleccionar diccionario - - + + Sorry Error - + Unable to open archive. No se puede abrir el archivo. - + Unable to read archive metadata. No se pueden leer los metadatos del archivo. - + The archive does not contain a usable dictionary. El archivo no contiene un diccionario compatible. - + Unable to open file '%1'. No se puede abrir el archivo "%1". - + Unable to close file '%1'. No se puede cerrar el archivo "%1". - - + + Question Confirmación - + The dictionary "%1" already exists. Do you want to replace it? El diccionario "%1". ya existe. ¿Desea reemplazarlo? - + Remove current dictionary? ¿Desea eliminar el diccionario actual? - + Daily Goal Objetivo diario - + None Ninguno - + Minutes: Minutos: - - + + Words: Palabras: - + Editing Edición - + Always vertically center Centrar siempre verticalmente - + Block insertion cursor Bloquear el cursor de inserción - + Default to rich text Usar texto enriquecido por defecto - + Smooth fonts Suavizar fuentes - + Typewriter sounds Sonidos de máquina de escribir - + Smart quotes: Comillas tipográficas: - + Double Dobles - + Single Simples - + Saving Guardado - + Automatically save changes Guardar los cambios automáticamente - + Remember cursor position Recordar la posición del cursor - + Contents Contenido - + Word count Número de palabras - + Page count Número de páginas - + Paragraph count Número de párrafos - + Character count Número de caracteres - + Page Size Tamaño de página - + Characters: Caracteres: - + Paragraphs: Párrafos: - + Word Count Algorithm Algoritmo para contar palabras - + Detect word boundaries Detectar límites de palabras - + Divide character count by six Dividir entre seis el número de caracteres - + Style Estilo - + Icons Only Solo iconos - + Text Only Solo texto - + Text Alongside Icons Texto al lado de los iconos - + Text Under Icons Texto debajo de los iconos - + Text Position: Posición del texto: - + Actions Acciones - + Move Up Subir - + Move Down Bajar - + Add Separator Añadir separador - + Check spelling as you type Revisar la ortografía mientras escribe - + Ignore words in UPPERCASE Omitir palabras en MAYÚSCULAS - + Ignore words with numbers Omitir palabras con números - + Language Idioma - - + + Add Añadir - - + + Remove Eliminar - + Personal Dictionary Diccionario personal @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. No es un archivo RTF compatible. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Se ha llegado al final del archivo inesperadamente. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Palabras: 0 - + Pages: 0 Páginas: 0 - + Paragraphs: 0 Párrafos: 0 - + Characters: 0 Caracteres: 0 - + 0% of daily goal 0% del objetivo diario - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - - + + Sorry Error - + Note Nota - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% del objetivo diario - + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - - + + (Untitled %1) (Sin título %1) - + Loading settings Cargando configuración - + Emergency cache is not writable. No se puede escribir en la caché de emergencia. - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no se cerró correctamente. - + Restore from the emergency cache? ¿Desea restaurarlo de la caché de emergencia? - + Some files are unsupported and will not be opened. Algunos archivos no son compatibles y no se pueden abrir. - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + Text Files (%1);;All Files (*) Archivos de texto (%1);;Todos los archivos (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Un procesador de textos simple a pantalla completa<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Publicado según la licencia <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> </small></center></p><p><center> Revisión ortográfica con <a href="http://hunspell.sourceforge.net/">Hunspell</a><br/><small>Usado según la licencia <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> </small></center></p><p><center>Iconos del tema <a href="http://www.oxygen-icons.org/">Oxygen</a> <br/><small>Usados según la licencia <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> </small></center></p> - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + &Save &Guardar - + Save &As... Guardar c&omo... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... Im&primir... - + &Close Ce&rrar - + &Quit Sa&lir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo Re&hacer - + Cu&t Co&rtar - + &Copy &Copiar - + &Paste &Pegar - + Select &All Seleccionar &todo - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic C&ursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript Supe&ríndice - + Ctrl+^ Ctrl+^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinear a la izquierda - + Ctrl+{ Caracteres: 0 - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Dis&minuir sangría - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar sangría - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escribir de &izquierda a derecha - + Ri&ght to Left Block Escri&bir de derecha a izquierda - + &Make Plain Text Con&vertir en texto plano - + &Make Rich Text Convertir en te&xto enriquecido - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + &Settings &Configuración - + Show &Toolbar Mostrar barra de &herramientas - + Show &Menu Icons Mostrar &iconos del menú - + &Fullscreen Pantalla &completa - + F11 F11 - + Esc Esc - + M&inimize Mi&nimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + &Help A&yuda - + Application &Language... Idioma de la &aplicación... - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 962784d9..6604cf54 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - - + + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Plain Text (*.txt) Texto Plano (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Seleccione idioma de la aplicación: - + <System Language> <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie esta aplicación para que los cambios de idioma se realicen. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Preferencias - + General General - + Statistics Estadísticas - + Toolbar Barra de herramientas - + Spell Checking Chequeo de ortógrafía - + Select Dictionary Seleccione diccionario - - + + Sorry Lo siento - + Unable to open archive. No se puede abrir el archivo. - + Unable to read archive metadata. No se puede abrir el archivo de metadatos. - + The archive does not contain a usable dictionary. El archivo no contiene un diccionario utilizable. - + Unable to open file '%1'. No se puede abrir el archivo '%1'. - + Unable to close file '%1'. No se puede cerrar el archivo '%1'. - - + + Question Pregunta - + The dictionary "%1" already exists. Do you want to replace it? El diccionario "%1" ya existe. ¿Desea reemplazarlo? - + Remove current dictionary? ¿Desea eliminar el diccionario actual? - + Daily Goal Meta diaria - + None Ninguna - + Minutes: Minutos: - - + + Words: Palabras: - + Editing Edición - + Always vertically center Siempre centrar verticalmente - + Block insertion cursor Cursor de bloque - + Default to rich text Texto enriquecido por omisión - + Smooth fonts Suavizar fuentess - + Typewriter sounds Sonido de máquina de escribir - + Smart quotes: Comillas inteligentes: - + Double Dobles - + Single Sencillas - + Saving Guardar - + Automatically save changes Guardar automáticamente los cambios - + Remember cursor position Recordar la posición del cursor - + Contents Contenido - + Word count Conteo de palabras - + Page count Conteo de páginas - + Paragraph count Conteo de párrafos - + Character count Conteo de caracteres - + Page Size Tamaño de página - + Characters: Caracteres: - + Paragraphs: Párrafos: - + Word Count Algorithm Algoritmo de conteo de palabras - + Detect word boundaries Detectar límite de palabra - + Divide character count by six Dividir conteo de caracteres por 6 - + Style EStilo - + Icons Only Solo íconos - + Text Only Solo texto - + Text Alongside Icons Texto con íconos - + Text Under Icons Texto debajo íconos - + Text Position: Posición de texto: - + Actions Acciones - + Move Up Mover arriba - + Move Down Mover abajo - + Add Separator Agregar separador - + Check spelling as you type Checar ortigrafía mientras escribe - + Ignore words in UPPERCASE Ignorar palabras en mayúsculas - + Ignore words with numbers Ignorar palabras con números - + Language Idioma - - + + Add Agregar - - + + Remove Eliminar - + Personal Dictionary Diccionario personal @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Archivo RTF no soportado. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Se alcazó inesperadamente el fin de archivo. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Palabras: 0 - + Pages: 0 Páginas: 0 - + Paragraphs: 0 Párrafos: 0 - + Characters: 0 Caracteres: 0 - + 0% of daily goal 0% de la meta diaria - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - - + + Sorry Lo siento - + Note Observe - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% de la meta diaria - + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - - + + (Untitled %1) (Sin título %1) - + Loading settings Cargando preferencias - + Emergency cache is not writable. No se puede escribir el caché de emergencia - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no fue cerrado correctamente - + Restore from the emergency cache? ¿Restaurar el caché de emergencia? - + Some files are unsupported and will not be opened. Algunos archivos no son compatibles y no serán abiertos. - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + Text Files (%1);;All Files (*) Archivos de Texto (%1);;Todos los archivos (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>En procesador simple de palabras en pantalla completa<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Liberado bajo licencia <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a>.</small></center></p><p><center>Usa <a href="http://hunspell.sourceforge.net/">Hunspell</a> para checar ortigrafía.<br/><small>Usado bajo licencia <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a>.</small></center></p><p><center>Usa íconos del tema <a href="http://www.oxygen-icons.org/">Oxygen</a>.<br/><small>Usado bajo licencia <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a>.</small></center></p> - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Select &All Seleccionar &todo - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Make Plain Text Crear Texto &Plano - + &Make Rich Text Crear Texto &Enriquecido - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + &Help A&yuda - + Application &Language... &Idioma de aplicación... - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 4420a293..89e881a1 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Pahoittelut - + Unable to save '%1'. %1 - tallentaminen epäonnistui. - - + + Save File As Tallenna nimellä - - + + Unable to overwrite '%1'. Ei voitu korvata "%1". - + Rename File Uudelleennimeä - + Unable to rename '%1'. Ei voitu nimetä uudelleen "%1". - + Plain Text (*.txt) Teksti (*.txt) - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Valitse sovelluksen kieli: - + <System Language> Järjestelmän kieli - + Note Huomautus - + Please restart this application for the change in language to take effect. Ole hyvä ja käynnistä sovellus uudelleen jotta kielen muutos astuu voimaan. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Asetukset - + General Yleinen - + Statistics Tilastot - + Toolbar Työkalu - + Spell Checking Oikoluku - + Select Dictionary Valitse sanakirja - - + + Sorry Pahoittelut - + Unable to open archive. Ei voitu avata arkistoa. - + Unable to read archive metadata. Ei voitu lukea arkiston metatietoja. - + The archive does not contain a usable dictionary. Arkisto ei sisällä käyttökelpoista sanakirjaa. - + Unable to open file '%1'. Ei voitu avata tiedostoa "%1". - + Unable to close file '%1'. Ei voitu sulkea tiedostoa "%1". - - + + Question Kysymys - + The dictionary "%1" already exists. Do you want to replace it? Sanakirja "%1" on jo olemassa. Haluatko korvata sen? - + Remove current dictionary? Poistetaanko nykyinen sanakirja? - + Daily Goal Päivittäinen tavoite - + None Tyhjä - + Minutes: Minuutteja: - - + + Words: Sanoja: - + Editing Muokkaaminen - + Always vertically center Keskitä aina pystysuunnassa - + Block insertion cursor Estä lisäyskohdistin - + Default to rich text Muotoiltu teksti oletuksena - + Smooth fonts Tasoitetut kirjaimet - + Typewriter sounds Kirjoituskoneäänet - + Smart quotes: Älykkäät lainausmerkit - + Double Tupla - + Single Yksi - + Saving Tallennetaan - + Automatically save changes Tallenna automaattisesti - + Remember cursor position Muista kohdistimen sijainti - + Contents Sisällysluettelo - + Word count Sanamäärä - + Page count Sivumäärä - + Paragraph count Kappalemäärä - + Character count Merkkimäärä - + Page Size Sivun koko - + Characters: Kirjainmäärä: - + Paragraphs: Kappaleet: - + Word Count Algorithm Sanalaskenta-algoritmi - + Detect word boundaries Tunnista sanojen rajat - + Divide character count by six Jaa merkkimäärä kuudella - + Style Tyyli - + Icons Only Vain kuvakkeet - + Text Only Vain teksti - + Text Alongside Icons Teksti ja kuvakkeet - + Text Under Icons Teksti kuvakkeiden alla - + Text Position: Tekstin sijainti: - + Actions Toiminnot - + Move Up Siirrä ylös - + Move Down Siirrä alas - + Add Separator Lisää erotin - + Check spelling as you type Tarkista oikeinkirjoitus kirjoitettaessa - + Ignore words in UPPERCASE Ohita sanat ISOILLA - + Ignore words with numbers Ohita sanat, joissa on numeroita - + Language Kieli - - + + Add Lisää - - + + Remove Poista - + Personal Dictionary Oma sanakirja @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Ei tuettu RTF-tiedosto. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Tiedosto loppui yllättäen. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Sanat: 0 - + Pages: 0 Sivut: 0 - + Paragraphs: 0 Kappaleet: 0 - + Characters: 0 Kirjainmerkit: 0 - + 0% of daily goal 0% päivittäisestä tavoiteesta - + Loading themes Ladataan teemoja - + Loading sounds Ladataan ääniä - - + + Untitled Nimetön - - + + Sorry Anteeksi - + Note Huomautus - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + Characters: %L1 / %L2 Kirjaimet: %L1 / %L2 - + Pages: %L1 Sivut: %L1 - + Paragraphs: %L1 Kappaleet: %L1 - + Words: %L1 Sanat: %L1 - + %1% of daily goal %1% päivittäisestä tavoiteesta - + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - - + + (Untitled %1) (Nimetön %1) - + Loading settings Ladataan asennuksia - + Emergency cache is not writable. Hätävälimuistia ei voida kirjoittaa. - - + + Warning Varoitus - + FocusWriter was not shut down cleanly. FocusWriteriä ei suljettu oikein. - + Restore from the emergency cache? Palautetaanko tilanne hätävälimuistista? - + Some files are unsupported and will not be opened. Joitain tiedostoja ei tueta eikä täten avata. - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin Vain Luku -tilassa - + Text Files (%1);;All Files (*) Tekstitiedostot (%1);;Kaikki tiedostot (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Yksinkertainen kokoruudun tekstinkäsittelyohjelma<br/><small>Copyright &amp;copy; 2008-%2 Graeme Gott</small><br/><small>Julkaistu <a href=&quot;http://www.gnu.org/licenses/gpl.html&quot;>GPL 3</a> -lisenssin alaisena</small></center></p><p><center>Käyttää <a href=&quot;http://hunspell.sourceforge.net/&quot;>Hunspell</a>iä oikeinkirjoituksen tarkistamiseen<br/><small>Käytetty <a href=&quot;http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html&quot;>LGPL 2.1</a> -lisenssin alaisena</small></center></p><p><center>Käyttää <a href=&quot;http://www.oxygen-icons.org/&quot;>Oxygen</a> -kuvaketeeman kuvakkeita<br/><small>Käytetty <a href=&quot;http://www.gnu.org/licenses/lgpl.html&quot;>LGPL 3</a> -lisenssin alaisena</small></center></p> - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Ei pystytty lataamaan kirjoituskoneääniä. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa... - + &Save &Tallenna - + Save &As... Tallenna &nimellä... - + &Rename... &Nimeä uudelleen... - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... &Tulosta... - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t Leik&kaa - + &Copy &Kopioi - + &Paste &Liitä - + Select &All Valitse kaikki - + Fo&rmat Muo&toile - + &Bold &Lihavoitu - + &Italic &Kursivoitu - + &Underline &Alleviivattu - + Stri&kethrough Yli&viivattu - + Ctrl+K Ctrl+K - + Sup&erscript Ylä&indeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vasemm&alta oikealle - + Ri&ght to Left Block Oike&alta vasemmalle - + &Make Plain Text Muunna &pelkäksi tekstiksi - + &Make Rich Text Muunna &muotoilluksi tekstiksi - + &Tools &Työkalut - + &Find... &Etsi... - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa... - + Ctrl+R Ctrl+R - + Smart &Quotes Alykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus... - + F7 F7 - + &Timers... &Ajastimet... - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalut - + Show &Menu Icons Näytä &valikkokuvakkeet - + &Fullscreen &Koko näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... &Teemat... - + &Preferences... &Asetukset... - + &Help &Ohje - + Application &Language... Sovelluksen &kieli... - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index e97e2cf5..215f995f 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - - + + Save File As Enregistrer sous - - + + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Plain Text (*.txt) Texte brut (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Choisissez la langue du programme : - + <System Language> <Langue du système> - + Note Note - + Please restart this application for the change in language to take effect. Veuillez redémarrer le programme pour que le changement de langue prenne effet. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Préférences - + General Général - + Statistics Statistiques - + Toolbar Barre d'outils - + Spell Checking Orthographe - + Select Dictionary Choisir le dictionnaire - - + + Sorry Désolé - + Unable to open archive. Impossible d'ouvrir l'archive. - + Unable to read archive metadata. Impossible de lire les métadonnées de l'archive. - + The archive does not contain a usable dictionary. L'archive ne contient pas de dictionnaire utilisable. - + Unable to open file '%1'. Impossible d'ouvrir le fichier '%1'. - + Unable to close file '%1'. Impossible de fermer le fichier '%1'. - - + + Question Question - + The dictionary "%1" already exists. Do you want to replace it? Le dictionnaire "%1" existe déjà. Voulez-vous le remplacer ? - + Remove current dictionary? Supprimer le dictionnaire courant ? - + Daily Goal Objectif quotidien - + None Aucun - + Minutes: Minutes : - - + + Words: Mots : - + Editing Édition - + Always vertically center Toujours centrer verticalement - + Block insertion cursor Curseur bloc - + Default to rich text Utiliser le format de texte enrichi par défaut - + Smooth fonts Polices lissées - + Typewriter sounds Sons de machine à écrire - + Smart quotes: Guillemets typographiques : - + Double Doubles - + Single Simples - + Saving Enregistrement - + Automatically save changes Automatique - + Remember cursor position Se souvenir de la position du curseur - + Contents Contenu - + Word count Nombre de mots - + Page count Nombre de pages - + Paragraph count Nombre de paragraphes - + Character count Nombre de caractères - + Page Size Taille de page - + Characters: Caractères : - + Paragraphs: Paragraphes : - + Word Count Algorithm Algorithme de comptage des mots - + Detect word boundaries Détecter la fin des mots - + Divide character count by six Diviser le nombre de caractères par six - + Style Style - + Icons Only Icône seule - + Text Only Texte seul - + Text Alongside Icons Texte à côté des icônes - + Text Under Icons Texte sous les icônes - + Text Position: Position du texte : - + Actions Actions - + Move Up Monter - + Move Down Descendre - + Add Separator Ajouter un séparateur - + Check spelling as you type Vérifier l'orthographe pendant la frappe - + Ignore words in UPPERCASE Ignorer les mots en MAJUSCULES - + Ignore words with numbers Ignorer les mots comportant des chiffres - + Language Langue - - + + Add Ajouter - - + + Remove Supprimer - + Personal Dictionary Dictionnaire personnel @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Format de texte enrichi RTF non reconnu. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Fin de fichier atteinte de façon inattendue. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Mots : 0 - + Pages: 0 Pages : 0 - + Paragraphs: 0 Paragraphes : 0 - + Characters: 0 Caractères : 0 - + 0% of daily goal 0 % de l'objectif quotidien - + Loading themes Chargement des thèmes - + Loading sounds Chargement des sons - - + + Untitled Sans titre - - + + Sorry Désolé - + Note Note - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + Characters: %L1 / %L2 Caractères : %L1 / %L2 - + Pages: %L1 Pages : %L1 - + Paragraphs: %L1 Paragraphes : %L1 - + Words: %L1 Mots : %L1 - + %1% of daily goal %1 % de l'objectif quotidien - + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - - + + (Untitled %1) (Sans titre %1) - + Loading settings Chargement des préférences - + Emergency cache is not writable. Le cache d'urgence n'est pas accessible en écriture. - - + + Warning Avertissement - + FocusWriter was not shut down cleanly. FocusWriter ne s'est pas fermé correctement. - + Restore from the emergency cache? Récupérer les informations depuis le cache d'urgence ? - + Some files are unsupported and will not be opened. Certains fichiers ne sont pas supportés et ne pourront pas être ouverts. - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + Text Files (%1);;All Files (*) Fichiers texte (%1);;Tous les fichiers (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Un traitement de texte simple en plein écran<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Distribué dans les conditions de la licence <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Inclut <a href="http://hunspell.sourceforge.net/">Hunspell</a> pour la vérification d’orthographe<br/><small>Utilisé sous la licence <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Inclut des icônes du thème <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Utilisé sous la licence <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Select &All Tout &sélectionner - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Make Plain Text Transformer en texte &brut - + &Make Rich Text Transformer en texte en&richi - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + &Help &Aide - + Application &Language... &Langue de l'application... - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index c8fe571b..eb70d51a 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - - + + Save File As Mentés másként - - + + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -195,22 +195,22 @@ LocaleDialog - + Select application language: Válaszd ki az alkalmazás nyelvét: - + <System Language> <A rendszer nyelve> - + Note Megjegyzés - + Please restart this application for the change in language to take effect. Indítsd újra az alkalmazást, hogy a változtatások érvénybe lépjenek. @@ -218,302 +218,302 @@ PreferencesDialog - + Preferences Beállítások - + General Általános - + Statistics Statisztika - + Toolbar Eszközsáv - + Spell Checking Helyesírás-ellenőrzés - + Select Dictionary Szótár kiválasztása - - + + Sorry Elnézést - + Unable to open archive. Nem sikerült a csomagfájl megnyitása. - + Unable to read archive metadata. Nem sikerült a csomagfájl metaadatainak olvasása. - + The archive does not contain a usable dictionary. Nincs használható szótár a csomagfájlban. - + Unable to open file '%1'. Nem sikerült '%1' fájl megnyitása. - + Unable to close file '%1'. Nem sikerült '%1' fájl bezárása. - - + + Question Kérdés - + The dictionary "%1" already exists. Do you want to replace it? "%1" szótár már létezik. Le szeretnéd cserélni? - + Remove current dictionary? Eltávolítsuk az aktuális szótárt? - + Daily Goal Napi cél - + None Nincs - + Minutes: Perc: - - + + Words: Szó: - + Editing Szerkesztés - + Always vertically center A kurzor maradjon függőlegesen középen - + Block insertion cursor Blokkszerű kurzor - + Default to rich text Formázott szöveg alapértelmezés szerint - + Smooth fonts Betűtípusok képének simítása - + Typewriter sounds Írógéphangok - + Smart quotes: Intelligens idézőjelek: - + Double Dupla - + Single Szimpla - + Saving Mentés - + Automatically save changes A változtatások automatikus mentése - + Remember cursor position A kurzor pozíciójának megjegyzése - + Contents Tartalom - + Word count Szavak száma - + Page count Oldalak száma - + Paragraph count Bekezdések száma - + Character count Karakterek száma - + Page Size Egy oldal mérete - + Characters: Karakter: - + Paragraphs: Bekezdés: - + Word Count Algorithm Szószámlálás algoritmusa - + Detect word boundaries Szóhatárok felismerése - + Divide character count by six Karakterszám osztása hattal - + Style Stílus - + Icons Only Csak ikonok - + Text Only Csak szöveg - + Text Alongside Icons Szöveg az ikonok mellett - + Text Under Icons Szöveg az ikonok alatt - + Text Position: Szöveg helyzete: - + Actions Akciók - + Move Up Felfelé mozgatás - + Move Down Lefelé mozgatás - + Add Separator Elválasztó hozzáadása - + Check spelling as you type Helyesírás-ellenőrzés gépelés közben - + Ignore words in UPPERCASE CSUPA NAGYBETŰS SZAVAK figyelmen kívül hagyása - + Ignore words with numbers Számokat tartalmazó szavak figyelmen kívül hagyása - + Language Nyelv - - + + Add Hozzáadás - - + + Remove Eltávolítás - + Personal Dictionary Saját szótár @@ -521,8 +521,8 @@ Reader - - + + Not a supported RTF file. Nem támogatott RTF fájl. @@ -545,7 +545,7 @@ Session - + @@ -1116,7 +1116,7 @@ Tokenizer - + Unexpectedly reached end of file. A fájl váratlanul véget ért. @@ -1124,541 +1124,541 @@ Window - + Words: 0 Szó: 0 - + Pages: 0 Oldal: 0 - + Paragraphs: 0 Bekezdés: 0 - + Characters: 0 Karakter: 0 - + 0% of daily goal A napi cél 0%-a - + Loading themes Témák betöltése - + Loading sounds Hangok betöltése - - + + Untitled Névtelen - - + + Sorry Elnézést - + Note Jegyzet - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Oldal: %L1 - + Paragraphs: %L1 Bekezdés: %L1 - + Words: %L1 Szó: %L1 - + %1% of daily goal A napi cél %1%-a - + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - - + + (Untitled %1) (Névtelen %1) - + Loading settings Beállítások betöltése - + Emergency cache is not writable. A vész-gyorsítótár nem írható. - - + + Warning Figyelmeztetés - + FocusWriter was not shut down cleanly. A FocusWriter hibásan lett leállítva. - + Restore from the emergency cache? Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files are unsupported and will not be opened. Néhány fájltípus nem támogatott és nem kerül megnyitásra. - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + Text Files (%1);;All Files (*) Szövegfájlok (%1);;Minden fájl (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Egyszerű, teljes képernyőn használható szövegszerkesztő<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Kiadva a <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> licensz alatt</small></center></p><p><center>A <a href="http://hunspell.sourceforge.net/">Hunspell</a>-t használjuk a helyesírás-ellenőrzéshez<br/><small><a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> licensz alatt</small></center></p><p><center>Az <a href="http://www.oxygen-icons.org/">Oxygen</a> ikontémát használjuk<br/><small><a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> licensz alatt</small></center></p> - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Select &All &Összes kijelölése - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Make Plain Text &Egyszerű szöveg - + &Make Rich Text For&mázott szöveg - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index a5b44d82..1b0c15b3 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - - + + Save File As Salva con nome - - + + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Plain Text (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*. rtf) - + All Files (*) Tutti i file (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Selezionare una lingua per l'applicazione: - + <System Language> - + Note Nota - + Please restart this application for the change in language to take effect. Per modificarela lingua riavviare l'applicazione. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Preferenze - + General Generale - + Statistics Statistiche - + Toolbar Toolbar - + Spell Checking Controllo ortografico - + Select Dictionary Selezionare Dizionario - - + + Sorry Spiacente - + Unable to open archive. Impossibile aprire archivio. - + Unable to read archive metadata. Impossibile leggere i metadati dell'archivio. - + The archive does not contain a usable dictionary. L'archivio non contiene un dizionario utilizzabile. - + Unable to open file '%1'. Impossibile aprire il file '%1'. - + Unable to close file '%1'. Impossibile chiudere il file '%1' - - + + Question Domanda - + The dictionary "%1" already exists. Do you want to replace it? Il dizionario "%1" esiste già. Vuoi sostituirlo? - + Remove current dictionary? Rimuovere dizionario corrente? - + Daily Goal Obiettivo del giorno - + None Nessuno - + Minutes: Minuti: - - + + Words: Parole: - + Editing Modifica - + Always vertically center Sempre centrato in verticale - + Block insertion cursor Blocca inserimento del cursore - + Default to rich text Predefinito rich text - + Smooth fonts Font "morbide" - + Typewriter sounds Suoni della macchina da scrivere - + Smart quotes: Citazione: - + Double Doppio - + Single Singolo - + Saving Salvataggio - + Automatically save changes Salva automaticamente le modifiche - + Remember cursor position Ricorda la posizione del cursore - + Contents Contenuti - + Word count Conteggio parole - + Page count Conteggio pagina - + Paragraph count Conteggio paragrafo - + Character count Conteggio caratteri - + Page Size Dimensione pagina - + Characters: Caratteri: - + Paragraphs: Paragrafi: - + Word Count Algorithm Conteggio parole Algoritmo - + Detect word boundaries Rileva confini delle parole - + Divide character count by six Dividere conteggio dei caratteri da sei - + Style Stile - + Icons Only Solo icone - + Text Only Solo testo - + Text Alongside Icons Testo e icone allineate - + Text Under Icons Testo sotto le icone - + Text Position: Posizione testo: - + Actions Azioni - + Move Up Sposta su - + Move Down Sposta giù - + Add Separator Aggiungi separatore - + Check spelling as you type Controllo ortografico durante la digitazione - + Ignore words in UPPERCASE Ignora parole MAIUSCOLE - + Ignore words with numbers Ignora parole con numeri - + Language Lingua - - + + Add Aggiungi - - + + Remove Rimuovi - + Personal Dictionary Dizionario personale @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Non è un file RTF supportato. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Fine del file raggiunta inaspettatamente. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Parole: 0 - + Pages: 0 Pagine: 0 - + Paragraphs: 0 I paragrafi: 0 - + Characters: 0 Caratteri: 0 - + 0% of daily goal 0% dell' obiettivo giornaliero - + Loading themes Caricamento temi - + Loading sounds Caricamento suoni - - + + Untitled Senza nome - - + + Sorry Spiacente - + Note Nota - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - + Pages: %L1 Pagine: %L1 - + Paragraphs: %L1 Paragrafi: %L1 - + Words: %L1 Parole: %L1 - + %1% of daily goal %1% dell' obiettivo giornaliero - + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - - + + (Untitled %1) (Senza nome %1) - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files are unsupported and will not be opened. - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Select &All Seleziona &tutto - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Make Plain Text &Testo semplice - + &Make Rich Text &Testo formattato - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &sostituisci... - + Ctrl+R Ctrl + R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &ortografia... - + F7 F7 - + &Timers... &Timer... - + &Settings &impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl + M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + &Help &aiuto - + Application &Language... Lingua &applicazione... - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.qm b/translations/focuswriter_ja.qm new file mode 100644 index 0000000000000000000000000000000000000000..4a00d5220fb7ce27077b8e1d7d71cd2585979315 GIT binary patch literal 20584 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 DHyede literal 0 HcmV?d00001 diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts new file mode 100644 index 00000000..47222fdc --- /dev/null +++ b/translations/focuswriter_ja.ts @@ -0,0 +1,1666 @@ + + + + + Alert + + + Close (Ctrl+D) + 閉じる (Ctrl+D) + + + + Collapse + セッション (&S) + + + + Expand + 詳細 + + + + AlertLayer + + + Ctrl+D + + + + + Document + + + + + + + + Sorry + エラー + + + + Unable to save '%1'. + '%1' を保存できませんでした。 + + + + + Save File As + 名前を付けて保存 + + + + + Unable to overwrite '%1'. + '%1' を上書きすることができませんでした。 + + + + Rename File + ファイル名の変更 + + + + Unable to rename '%1'. + '%1' の名前を変更できませんでした。 + + + + Plain Text (*.txt) + テキスト文書 (*.txt) + + + + OpenDocument Text (*.odt) + OpenDocument 形式 (*.odt) + + + + Rich Text (*.rtf) + リッチ テキスト形式 (*.rtf) + + + + All Files (*) + すべてのファイル (*.*) + + + + FindDialog + + + Search for: + 検索する文字列: + + + + Replace with: + 置換後の文字列: + + + + Ignore case + 大文字と小文字を区別しない + + + + Whole words only + 単語単位で探す + + + + Search up + 前を検索 + + + + Search down + 次を検索 + + + + + Find + 検索 + + + + + Replace + 置換 + + + + Replace All + すべて置換 + + + + Replace %n instance(s)? + + %n 件置換しますか? + + + + + Question + 確認 + + + + + Sorry + エラー + + + + + Phrase not found. + 見つかりませんでした。 + + + + Highlighter + + + Add + 追加 + + + + Check Spelling... + スペルチェック... + + + + (No suggestions found) + (修正候補は見つかりませんでした) + + + + ImageButton + + + Open Image + 画像の選択 + + + + Images(%1) + + + + + LocaleDialog + + + Select application language: + 言語の選択: + + + + <System Language> + <システムの言語> + + + + Note + 注意 + + + + Please restart this application for the change in language to take effect. + 言語の変更を反映させるためにアプリケーションを再起動してください。 + + + + PreferencesDialog + + + Preferences + 設定 + + + + General + 一般 + + + + Statistics + 統計 + + + + Toolbar + ツール バー + + + + Spell Checking + スペルチェック + + + + Select Dictionary + 辞書の選択 + + + + + Sorry + エラー + + + + Unable to open archive. + アーカイブを開けませんでした。 + + + + Unable to read archive metadata. + アーカイブのメタデータを読み込めませんでした。 + + + + The archive does not contain a usable dictionary. + このアーカイブには有効な辞書が含まれていません。 + + + + Unable to open file '%1'. + '%1' を開けませんでした。 + + + + Unable to close file '%1'. + '%1' を閉じれませんでした。 + + + + + Question + 確認 + + + + The dictionary "%1" already exists. Do you want to replace it? + "%1" という名前の辞書は既にあります。置き換えても良いですか? + + + + Remove current dictionary? + この辞書を削除しても良いですか? + + + + Daily Goal + 一日の目標 + + + + None + なし + + + + Minutes: + 分: + + + + + Words: + 語: + + + + Editing + 編集 + + + + Always vertically center + カーソル位置を常に縦方向の中央にする + + + + Block insertion cursor + 挿入モードでもブロック形のカーソルを使う + + + + Default to rich text + リッチ テキスト形式をデフォルトにする + + + + Smooth fonts + フォントをなめらかにする + + + + Typewriter sounds + タイプライター音を再生する + + + + Smart quotes: + スマート引用符: + + + + Double + 二重 + + + + Single + 一重 + + + + Saving + 保存 + + + + Automatically save changes + 変更を自動的に保存する + + + + Remember cursor position + カーソル位置を記憶する + + + + Contents + 内容 + + + + Word count + 単語数 + + + + Page count + ページ数 + + + + Paragraph count + 段落数 + + + + Character count + 文字数 + + + + Page Size + ページのサイズ + + + + Characters: + 文字 + + + + Paragraphs: + 段落 + + + + Word Count Algorithm + 単語カウント・アルゴリズム + + + + Detect word boundaries + 単語の境界を認識する + + + + Divide character count by six + 文字数を 6 で割る + + + + Style + スタイル + + + + Icons Only + アイコンのみ + + + + Text Only + 文字のみ + + + + Text Alongside Icons + アイコンの横に文字 + + + + Text Under Icons + アイコンの下に文字 + + + + Text Position: + 文字の位置: + + + + Actions + アクション + + + + Move Up + 上へ移動 + + + + Move Down + 下へ移動 + + + + Add Separator + セパレーターを追加 + + + + Check spelling as you type + タイプするごとにチェックする + + + + Ignore words in UPPERCASE + 大文字を無視する + + + + Ignore words with numbers + 数字が含まれる単語を無視する + + + + Language + 言語 + + + + + Add + 追加 + + + + + Remove + 削除 + + + + Personal Dictionary + ユーザー辞書 + + + + Reader + + + + Not a supported RTF file. + サポートしていないリッチ テキスト形式です。 + + + + Unable to open archive. + アーカイブを開けませんでした。 + + + + Unable to open file '%1'. + '%1' を開けませんでした。 + + + + Unable to close file '%1'. + '%1' を閉じれませんでした。 + + + + Session + + + + + + + + + Default + デフォルト + + + + SessionManager + + + Manage Sessions + セッションの管理 + + + + S&essions + セッション (&S) + + + + New + 新規 + + + + Rename + 名前の変更 + + + + Clone + 複製 + + + + Delete + 削除 + + + + Switch To + 切り替え + + + + New Session + 新しいセッション + + + + Clone Session + セッションの複製 + + + + Rename Session + セッション名の変更 + + + + Question + 確認 + + + + Delete selected session? + 選択中のセッションを削除しますか? + + + + Session name: + セッション名: + + + + Sorry + エラー + + + + The requested session name is already in use. + 指定したセッション名は既にあります。 + + + + &New... + 新規 (&N)... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + 管理 (&M)... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + SmartQuote + + + Replacing quotation marks... + 引用符の置換... + + + + Please Wait + お待ちください + + + + SpellChecker + + + Check Spelling + スペルチェック + + + + Add + 追加 + + + + Ignore + 無視 + + + + Ignore All + すべて無視 + + + + Change + 変更 + + + + Change All + すべて変更 + + + + Not in dictionary: + 辞書にないもの: + + + + Change to: + 変更後: + + + + Checking spelling... + スペルチェック中です... + + + + Cancel + キャンセル + + + + Please wait + お待ちください + + + + Spell check complete. + スペルチェックが終わりました。 + + + + Stack + + + Question + 確認 + + + + Remove all formatting from the current file? + このファイルからすべての書式を取り除いても良いですか? + + + + Theme + + + Untitled %1 + 無題 %1 + + + + ThemeDialog + + + Modify Theme + テーマの編集 + + + + Name: + 名前: + + + + Background + 背景 + + + + No Image + イメージなし + + + + Tiled + 並べて表示 + + + + + Centered + 中央に表示 + + + + + Stretched + 画面に合わせて伸縮 + + + + Scaled + ページ縦幅に合わせる + + + + Zoomed + ページ横幅に合わせる + + + + Remove + 削除 + + + + Type: + 画像の配置: + + + + + + Color: + 背景色: + + + + Image: + 画像: + + + + Foreground + 前景 + + + + Opacity + 透明度 + + + + + + + pixels + ピクセル + + + + Left + 左寄せ + + + + Right + 右寄せ + + + + Position + 位置 + + + + Size: + 大きさ: + + + + Rounding: + 角の丸さ: + + + + Margin: + 外側の余白: + + + + Padding: + 内側の余白: + + + + Text + 文字 + + + + Font: + フォント: + + + + Misspelled: + スペルミス: + + + + The quick brown fox jumps over the lazy dog + Windows でコンピューターの世界が広がります。 + + + + ThemeManager + + + Themes + テーマ + + + + Add + 追加 + + + + Modify + 編集 + + + + Remove + 削除 + + + + Import + インポート + + + + Export + エクスポート + + + + Close + 閉じる + + + + Question + 確認 + + + + Remove selected theme? + 選択中のテーマを削除しますか? + + + + Import Theme + テーマのインポート + + + + Themes (*.fwtz *.theme) + テーマ (*.fwtz *.theme) + + + + Themes (*.fwtz) + テーマ (*.fwtz) + + + + Sorry + エラー + + + + A theme already exists with that name. Please enter a new name: + その名前のテーマは既にあります。他の名前を指定してください。 + + + + Export Theme + テーマのエクスポート + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + 確認 + + + + Delete timer? + タイマーを削除しますか? + + + + <b>Words:</b> %L1 + <b>単語数:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>ページ数:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>段落数:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>文字数:</b> %L1 / %L2 + + + + Set Delay + 時間で指定 + + + + Set Time + 時刻で指定 + + + + Delay: + 時間: + + + + Time: + 時刻: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + アラーム + + + + Type: + 種類: + + + + Memo: + メモ: + + + + Edit + 編集 + + + + Delete + 削除 + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + タイマーはありません。 + + + + TimerManager + + + Timers + タイマー + + + + New + 新規作成 + + + + Recent + 履歴 + + + + Question + 確認 + + + + Cancel editing timers? + タイマーの編集を中止しますか? + + + + +HH:mm:ss + + + + + %1 - %2 + + + + + Tokenizer + + + Unexpectedly reached end of file. + ファイルの最後に到達しました。 + + + + Window + + + Words: 0 + 単語数: 0 + + + + Pages: 0 + ページ数: 0 + + + + Paragraphs: 0 + 段落数: 0 + + + + Characters: 0 + 文字数: 0 + + + + 0% of daily goal + 一日の目標の 0% + + + + Loading themes + テーマを読み込んでいます + + + + Loading sounds + 音声を読み込んでいます + + + + + Untitled + 無題 + + + + + Sorry + エラー + + + + Note + 注意 + + + + Open File + 開く + + + + About FocusWriter + FocusWriter について + + + + Characters: %L1 / %L2 + 文字数: %L1 / %L2 + + + + Pages: %L1 + ページ数: %L1 + + + + Paragraphs: %L1 + 段落数: %L1 + + + + Words: %L1 + 単語数: %L1 + + + + %1% of daily goal + 一日の目標の %1% + + + + Opening %1 + %1 を開いています + + + + Question + 確認 + + + + Save changes? + 変更を保存しますか? + + + + + (Untitled %1) + (無題 %1) + + + + Loading settings + 設定を読み込んでいます + + + + Emergency cache is not writable. + 緊急用のキャッシュに書き込むことができませんでした。 + + + + + Warning + 警告 + + + + FocusWriter was not shut down cleanly. + FocusWriter は正常に終了できませんでした。 + + + + Restore from the emergency cache? + 緊急用のキャッシュから復活させますか? + + + + Some files are unsupported and will not be opened. + いくつかのファイルはサポートされていない形式なので開かれません。 + + + + Some files could not be opened. + いくつかのファイルが開けませんでした。 + + + + Some files were opened Read-Only. + いくつかをファイルを読み取り専用で開きました。 + + + + Text Files (%1);;All Files (*) + テキスト文書 (%1);;すべてのファイル (*) + + + + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> + + + + + '%1' is newer than the cached copy. + '%1' はキャッシュより新しいようです。 + + + + Overwrite newer file? + 新しいファイルを上書きしますか? + + + + Unable to load typewriter sounds. + タイプライター音を読み込めませんでした。 + + + + %1 (Read-Only) + %1 (読み込み専用) + + + + &File + ファイル (&F) + + + + &New + 新規作成 (&N) + + + + &Open... + 開く (&O)... + + + + &Save + 保存 (&S)... + + + + Save &As... + 名前を付けて保存 (&A)... + + + + &Rename... + 名前の変更 (&R)... + + + + Save A&ll + すべて保存 (&L) + + + + Manage Sessions + セッションの管理 + + + + New Session + 新規セッション + + + + &Print... + 印刷 (&P)... + + + + &Close + 閉じる (&C) + + + + &Quit + 終了 (&Q) + + + + Ctrl+Q + + + + + &Edit + 編集 (&E) + + + + &Undo + 元に戻す (&U) + + + + &Redo + やり直し (&R) + + + + Cu&t + 切り取り (&T) + + + + &Copy + コピー (&C) + + + + &Paste + 貼り付け (&P) + + + + Select &All + すべて選択 (&A) + + + + Fo&rmat + 書式 (&R) + + + + &Bold + 太字 (&B) + + + + &Italic + 斜体 (&I) + + + + &Underline + 下線 (&U) + + + + Stri&kethrough + 取り消し線 (&K) + + + + Ctrl+K + + + + + Sup&erscript + 下付き文字 (&E) + + + + Ctrl+^ + + + + + &Subscript + 上付き文字 (&S) + + + + Ctrl+_ + + + + + Align &Left + 左揃え (&L) + + + + Ctrl+{ + + + + + Align &Center + 中央揃え (&C) + + + + Ctrl+| + + + + + Align &Right + 右揃え (&R) + + + + Ctrl+} + + + + + Align &Justify + 均等割付 (&J) + + + + Ctrl+J + + + + + &Decrease Indent + インデントを減らす (&D) + + + + Ctrl+< + + + + + I&ncrease Indent + インデントを増やす (&N) + + + + Ctrl+> + + + + + Le&ft to Right Block + 左から右へ (&F) + + + + Ri&ght to Left Block + 右から左へ (&G) + + + + &Make Plain Text + プレーンテキストにする (&M) + + + + &Make Rich Text + リッチ テキスト形式にする (&M) + + + + &Tools + ツール (&T) + + + + &Find... + 検索 (&F)... + + + + Find &Next + 次を検索 (&N) + + + + Find Pre&vious + 前を検索 (&V) + + + + &Replace... + 置換 (&R)... + + + + Ctrl+R + + + + + Smart &Quotes + スマート引用符 (&Q) + + + + Update &Document + 文書全体に適用 (&D) + + + + Update &Selection + 選択範囲に適用 (&S) + + + + &Spelling... + スペルチェック (&S)... + + + + F7 + + + + + &Timers... + タイマー (&T)... + + + + &Settings + 設定 (&S) + + + + Show &Toolbar + ツール バーを表示 (&T) + + + + Show &Menu Icons + メニュー項目のアイコンを表示 (&M) + + + + &Fullscreen + 全画面表示 (&F) + + + + F11 + + + + + Esc + + + + + M&inimize + 最小化 (&I) + + + + Ctrl+M + + + + + &Themes... + テーマ (&T)... + + + + &Preferences... + 設定 (&P)... + + + + &Help + ヘルプ (&H) + + + + Application &Language... + + + + + &About + FocusWriter について (&A) + + + + About &Qt + Qt について (&Q) + + + diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 26c18f0b..8dd612d3 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - - + + Save File As Opslaan als - - + + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Plain Text (*.txt) Platte tekst (*.txt) - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Taal selecteren: - + <System Language> <Systeemtaal> - + Note Let op - + Please restart this application for the change in language to take effect. Graag de applicatie herstarten om de taalverandering door te voeren. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Instellungen - + General Algemeen - + Statistics Statistieken - + Toolbar Werkbalk - + Spell Checking Spellingscontrole - + Select Dictionary Woordenboek kiezen - - + + Sorry Sorry - + Unable to open archive. Archief kan niet geopend worden. - + Unable to read archive metadata. Kan archief met metadata niet lezen. - + The archive does not contain a usable dictionary. Dit archief bevat geen bruikbare woordenlijst. - + Unable to open file '%1'. Bestand '%1' kan niet geopend worden. - + Unable to close file '%1'. Bestand '%1' kan niet afgesloten worden. - - + + Question Vraag - + The dictionary "%1" already exists. Do you want to replace it? Het woordenboek %1 bestaat al. Deze vervangen ? - + Remove current dictionary? Huidig woordenboek verwijderen? - + Daily Goal Dagelijks doel - + None Niets - + Minutes: Minuten: - - + + Words: Woorden: - + Editing Bewerking - + Always vertically center Verticaal centreren - + Block insertion cursor Blok invoeg cursor - + Default to rich text Rich Text Format als Standaard - + Smooth fonts Afgevlakte letters - + Typewriter sounds Typemachine geluiden - + Smart quotes: Slimme aanhalingstekens: - + Double Dubbel - + Single Enkel - + Saving Opslaan - + Automatically save changes Automatisch veranderingen opslaan - + Remember cursor position Onthou cursor positie - + Contents Inhoud - + Word count Woordtelling - + Page count Paginatelling - + Paragraph count Paragraaftelling - + Character count Tekentelling - + Page Size Paginagrootte - + Characters: Tekens: - + Paragraphs: Paragrafen: - + Word Count Algorithm Algoritme voor woordtelling - + Detect word boundaries Woordgrenzen bepalen - + Divide character count by six Tekentelling door 6 delen - + Style Stijl - + Icons Only Alleen iconen - + Text Only Alleen tekst - + Text Alongside Icons Tekst naast iconen - + Text Under Icons Tekst onder Iconen - + Text Position: Tekst positie: - + Actions Acties - + Move Up Naar boven verschuiven - + Move Down Naar onder verschuiven - + Add Separator Scheidingsteken toevoegen - + Check spelling as you type Spelling controleren terwijl je typt - + Ignore words in UPPERCASE Woorden in HOOFDLETTERS negeren - + Ignore words with numbers Woorden met getallen negeren - + Language Taal - - + + Add Toevoegen - - + + Remove Verwijderen - + Personal Dictionary Persoonlijke woordenboek @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Geen odnersteund RTF bestand. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Onverwacht het einde van het bestand bereikt. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Woorden: 0 - + Pages: 0 Pagina's: 0 - + Paragraphs: 0 Paragrafen: 0 - + Characters: 0 Tekens: 0 - + 0% of daily goal 0% van dagdoel - + Loading themes Thema wordt geladen - + Loading sounds Geluiden worden geladen - - + + Untitled Unbenannt - - + + Sorry Sorry - + Note Opmerking - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + Characters: %L1 / %L2 Tekens: %L1 / %L2 - + Pages: %L1 Pagina's: %L1 - + Paragraphs: %L1 Paragrafen: %L1 - + Words: %L1 Woorden: %L1 - + %1% of daily goal %1% van het dagdoel - + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - - + + (Untitled %1) (naamloos %1) - + Loading settings Instellingen inladen - + Emergency cache is not writable. De noodopslag is niet beschrijfbaar. - - + + Warning Waarschuwing - + FocusWriter was not shut down cleanly. FocusWriter is niet netjes afgesloten. - + Restore from the emergency cache? Veiligheidskopie herstellen? - + Some files are unsupported and will not be opened. Enkele bestanden zijn niet ondersteund en zullen niet geopend worden. - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + Text Files (%1);;All Files (*) Tekst-bestanden (%1);;Alle Bestanden (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Een eenvoudige schermvullende tekstbewerker <br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Uitgegeven onder de <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> licentie</small></center></p><p><center>Voor de spellingscontrole wordt <a href="http://hunspell.sourceforge.net/">Hunspell</a> gebruikt<br/><small>Gebruikt onder <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> Licentie</small></center></p><p><center>Gebruikt iconen van <a href="http://www.oxygen-icons.org/">Oxygen</a> iconen thema<br/><small>Onder de<a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> licentie</small></center></p> - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Select &All Alles &Selecteren - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Make Plain Text &Platte tekst maken - + &Make Rich Text &Rich Text maken - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + &Help &Help - + Application &Language... &Taal... - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 95e2bbfb..14a68e4b 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - - + + Save File As Zapisz plik jako - - + + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Plain Text (*.txt) Zwykły tekst (*.txt) - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) @@ -197,22 +197,22 @@ LocaleDialog - + Select application language: Wybierz język aplikacji: - + <System Language> <Język systemowy> - + Note Informacja - + Please restart this application for the change in language to take effect. Zmiany zostaną uwzględnione przy następnym uruchomieniu programu. @@ -220,302 +220,302 @@ PreferencesDialog - + Preferences Preferencje - + General Ogólne - + Statistics Statystyki - + Toolbar Pasek narzędzi - + Spell Checking Sprawdzanie pisowni - + Select Dictionary Wybierz słownik - - + + Sorry Przepraszam - + Unable to open archive. Nie można otworzyć archiwum. - + Unable to read archive metadata. Nie można odczytać metadanych archiwum. - + The archive does not contain a usable dictionary. Archiwum nie zawiera prawidłowego słownika. - + Unable to open file '%1'. Nie można otworzyć pliku '%1'. - + Unable to close file '%1'. Nie można zamknąć pliku '%1'. - - + + Question Pytanie - + The dictionary "%1" already exists. Do you want to replace it? Słowniki "%1" już istnieje. Czy chcesz go zastąpić? - + Remove current dictionary? Usunąć obecny słownik? - + Daily Goal Dzienny cel - + None Brak - + Minutes: Minuty: - - + + Words: Słowa: - + Editing Edycja - + Always vertically center Zawsze wyśrodkuj w pionie - + Block insertion cursor Kursor blokowy - + Default to rich text Domyślnie stosuj tekst z formatowaniem - + Smooth fonts Wygładzone czcionki - + Typewriter sounds Odgłosy maszyny do pisania - + Smart quotes: Eleganckie cudzysłowy: - + Double Podwójne - + Single Pojedyncze - + Saving Zapisywanie - + Automatically save changes Automatycznie zapisuj zmiany - + Remember cursor position Pamiętaj pozycję kursora - + Contents Treść - + Word count Licznik słów - + Page count Licznik stron - + Paragraph count Licznik akapitów - + Character count Licznik znaków - + Page Size Rozmiar strony - + Characters: Znaki: - + Paragraphs: Akapity: - + Word Count Algorithm Algorytm zliczania słów - + Detect word boundaries Wykrywaj granice słów - + Divide character count by six Dziel liczbę znaków przez sześć - + Style Styl - + Icons Only Tylko ikony - + Text Only Tylko tekst - + Text Alongside Icons Tekst obok ikon - + Text Under Icons Tekst pod ikonami - + Text Position: Położenie tekstu: - + Actions Działania - + Move Up Przesuń w górę - + Move Down Przesuń w dół - + Add Separator Dodaj odstęp - + Check spelling as you type Sprawdzaj pisownię podczas pisania - + Ignore words in UPPERCASE Ignoruj słowa pisane WIELKIMI LITERAMI - + Ignore words with numbers Ignoruj słowa z liczbami - + Language Język - - + + Add Dodaj - - + + Remove Usuń - + Personal Dictionary Osobisty słownik @@ -523,8 +523,8 @@ Reader - - + + Not a supported RTF file. To nie jest obsługiwany plik RTF. @@ -547,7 +547,7 @@ Session - + @@ -1118,7 +1118,7 @@ Tokenizer - + Unexpectedly reached end of file. Niespodziewanie osiągnięto koniec pliku. @@ -1126,541 +1126,541 @@ Window - + Words: 0 Słowa: 0 - + Pages: 0 Strony: 0 - + Paragraphs: 0 Akapity: 0 - + Characters: 0 Znaki: 0 - + 0% of daily goal 0% dziennego celu - + Loading themes Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - - + + Untitled Bez tytułu - - + + Sorry Przepraszam - + Note Informacja - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + Characters: %L1 / %L2 Znaki: %L1 / %L2 - + Pages: %L1 Strony: %L1 - + Paragraphs: %L1 Akapity: %L1 - + Words: %L1 Słowa: %L1 - + %1% of daily goal %1% dziennego celu - + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - - + + (Untitled %1) (Bez tytułu %1) - + Loading settings Wczytywanie ustawień - + Emergency cache is not writable. Bufor awaryjny nie jest zapisywalny. - - + + Warning Ostrzeżenie - + FocusWriter was not shut down cleanly. Program FocusWriter nie został zamknięty prawidłowo. - + Restore from the emergency cache? Przywrócić z bufora awaryjnego? - + Some files are unsupported and will not be opened. Niektóre pliki nie są obsługiwane i nie zostaną otwarte. - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + Text Files (%1);;All Files (*) Pliki tekstowe (%1);;Wszystkie pliki (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Prosty pełnoekranowy procesor tekstu<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Opublikowany na licencji <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Używa <a href="http://hunspell.sourceforge.net/">Hunspell</a> do sprawdzania pisowni<br/><small>Wykorzystany na licencji <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Używa ikon z zestawu <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Wykorzystane na licencji <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Select &All &Zaznacz wszystko - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Make Plain Text &Zamień na zwykły tekst - + &Make Rich Text &Zamień na tekst z formatowaniem - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 72b8d85c..d32657c2 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - - + + Save File As Guardar como - - + + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Plain Text (*.txt) Texto simples (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Seleccionar a língua do programa: - + <System Language> <Idioma do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie o programa para a mudança da língua do programa ser aplicada. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Definições - + General Geral - + Statistics Estatísticas - + Toolbar Barra de ferramentas - + Spell Checking Verificação ortográfica - + Select Dictionary Selecionar o dicionário - - + + Sorry Desculpe - + Unable to open archive. Não foi possível abrir o arquivo. - + Unable to read archive metadata. Não foi possível ler as metainformações do arquivo. - + The archive does not contain a usable dictionary. O arquivo não contem nenhum dicionário utilizável. - + Unable to open file '%1'. Não foi possível abrir o ficheiro '%1'. - + Unable to close file '%1'. Não foi possível fechar o ficheiro '%1'. - - + + Question Pergunta - + The dictionary "%1" already exists. Do you want to replace it? O dicionário "%1" já existe. Deseja substituí-lo? - + Remove current dictionary? Eliminar o dicionário actual? - + Daily Goal Objectivo do dia - + None Nenhum - + Minutes: Minutos: - - + + Words: Palavras: - + Editing Edição - + Always vertically center Sempre centrar na vertical - + Block insertion cursor Cursor de bloco - + Default to rich text Usar o formato de texto rico por defeito - + Smooth fonts Tipos de letra suavizados - + Typewriter sounds Ruidos de máquina de escrever - + Smart quotes: Aspas curvas e angulares : - + Double Duplas - + Single Simples - + Saving Gravação - + Automatically save changes Gravar automaticamente as alterações - + Remember cursor position Memorizar a posição do cursor - + Contents Conteúdo - + Word count Número de palavras - + Page count Número de páginas - + Paragraph count Número de parágrafos - + Character count Número de caracteres - + Page Size Tamanho da página - + Characters: Caracteres: - + Paragraphs: Parágrafos: - + Word Count Algorithm Algoritmo de contagem das palavras - + Detect word boundaries Detectar o fim das palavras - + Divide character count by six Dividir o número de caracteres por seis - + Style Estilo - + Icons Only Apenas o ícone - + Text Only Apenas o texto - + Text Alongside Icons Texto ao lado do ícone - + Text Under Icons Texto por baixo do ícone - + Text Position: Posição do texto: - + Actions Acções - + Move Up Subir - + Move Down Descer - + Add Separator Adicionar um separador - + Check spelling as you type Verificar ortografia ao escrever - + Ignore words in UPPERCASE Ignorar palavras em MAIÚSCULAS - + Ignore words with numbers Ignorar palavras com números - + Language Idioma - - + + Add Adicionar - - + + Remove Eliminar - + Personal Dictionary Dicionário definido pelo utilizador @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Formato de texto rico RTF não reconhecido. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Fim do ficheiro inesperada. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Palavras: 0 - + Pages: 0 Páginas: 0 - + Paragraphs: 0 Parágrafos: 0 - + Characters: 0 Caracteres: 0 - + 0% of daily goal 0% do objectivo do dia - + Loading themes Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - - + + Untitled Sem título - - + + Sorry Desculpe - + Note Nota - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palávras: %L1 - + %1% of daily goal %1% do objectivo do dia - + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - - + + (Untitled %1) (Sem título %1) - + Loading settings A carregar definições - + Emergency cache is not writable. Não foi possível escrever o cache de emergência. - - + + Warning Atenção - + FocusWriter was not shut down cleanly. FocusWriter não fechou correctamente. - + Restore from the emergency cache? Recuperar dados do cache de emergência? - + Some files are unsupported and will not be opened. Alguns ficheiros com formato não suportado não podem ser abertos. - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + Text Files (%1);;All Files (*) Ficheiros de texto (%1);;Todos os ficheiros (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Um processador de texto simples de ecrã completo<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Distribuido sob licença <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Contém <a href="http://hunspell.sourceforge.net/">Hunspell</a> para a verificação ortográfica<br/><small>Disponibilizado sob licença <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Inclui ícones originários do tema de ícones <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Disponibilizado sob licença <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Select &All Seleccionar &tudo - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Make Plain Text Converter em texto si&mples - + &Make Rich Text Converter em texto ric&o - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + &Help A&juda - + Application &Language... &Língua do programa... - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 8462ccea..0be27e6d 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - - + + Save File As Salvar como - - + + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Plain Text (*.txt) Texto plano (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Selecione o idioma do programa: - + <System Language> <Linguagem do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor, reinicie o programa para que as alterações no idioma tenham efeito. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Preferências - + General Geral - + Statistics Estatísticas - + Toolbar Barra de ferramentas - + Spell Checking Verificação ortográfica - + Select Dictionary Selecionar dicionário - - + + Sorry Desculpe - + Unable to open archive. Não foi possível abrir o arquivo. - + Unable to read archive metadata. Não foi possível ler os metadados do arquivo. - + The archive does not contain a usable dictionary. O arquivo não contém um dicionário utilizável. - + Unable to open file '%1'. Não foi possível abrir o arquivo '%1'. - + Unable to close file '%1'. Não foi possível fechar o arquivo '%1'. - - + + Question Pergunta - + The dictionary "%1" already exists. Do you want to replace it? O dicionário "%1" já existe. Deseja subistituí-lo? - + Remove current dictionary? Remover o dicionário atual? - + Daily Goal Objetivo diário - + None Nenhum - + Minutes: Minutos: - - + + Words: Palavras: - + Editing Edição - + Always vertically center Sempre centralizado verticalmente - + Block insertion cursor Cursor de inserção de bloco - + Default to rich text Texto formatado como padrão - + Smooth fonts Fontes suavizadas - + Typewriter sounds Sons de máquina datilográfica - + Smart quotes: Aspas inteligentes: - + Double Dupla - + Single Simples - + Saving Salvando - + Automatically save changes Salvar alterações automaticamente - + Remember cursor position Lembrar posição do cursor - + Contents Conteúdo - + Word count Contagem de palavras - + Page count Contagem de páginas - + Paragraph count Contagem de parágrafos - + Character count Contagem de caracteres - + Page Size Tamanho da página - + Characters: Caracteres: - + Paragraphs: Parágrafos: - + Word Count Algorithm Algoritmo de contagem de palavras - + Detect word boundaries Detectar limites de palavras - + Divide character count by six Dividir contagem de caracteres por seis - + Style Estilo - + Icons Only Apenas ícones - + Text Only Apenas textos - + Text Alongside Icons Texto ao lado dos ícones - + Text Under Icons Texto abaixo dos ícones - + Text Position: Posição do texto: - + Actions Ações - + Move Up Mover para cima - + Move Down Mover para baixo - + Add Separator Adicionar separador - + Check spelling as you type Verificaçar ortografia ao escrever - + Ignore words in UPPERCASE Ignorar palavras em MAIÚSCULAS - + Ignore words with numbers Ignorar palavras com números - + Language Idioma - - + + Add Adicionar - - + + Remove Remover - + Personal Dictionary Dicionário definido pelo usuário @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. Não é um arquivo RTF suportado. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Fim do arquivo alcançado inesperadamente. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Palavras: 0 - + Pages: 0 Páginas: 0 - + Paragraphs: 0 Parágrafos: 0 - + Characters: 0 Caracteres: 0 - + 0% of daily goal 0% do objetivo diário - + Loading themes Carregando temas - + Loading sounds Carregando sons - - + + Untitled Sem título - - + + Sorry Desculpe - + Note Nota - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palavras: %L1 - + %1% of daily goal %1% do objetivo diário - + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - - + + (Untitled %1) (Sem título %1) - + Loading settings Carregando configurações - + Emergency cache is not writable. Não é possível escrever no cache de emergência. - - + + Warning Aviso - + FocusWriter was not shut down cleanly. O FocusWriter não foi desligado corretamente. - + Restore from the emergency cache? Restaurar a partir do cache de emergência? - + Some files are unsupported and will not be opened. Alguns arquivos não são suportados e não serão abertos. - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + Text Files (%1);;All Files (*) Arquivos de texto (%1);;Todos os arquivos (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>Um processador de textos simples para escrita em modo Tela cheia<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Liberado sob a licença <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> </small></center></p><p><center>Utiliza o <a href="http://hunspell.sourceforge.net/">Hunspell</a> para verificação ortográfica<br/><small>Sob a licença <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> </small></center></p><p><center>Utiliza os ícones do tema <a href="http://www.oxygen-icons.org/">Oxygen</a> <br/><small>Sob a licença <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> </small></center></p> - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de escrever. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Select &All Selecionar t&udo - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de escrita da es&querda para a direita - + Ri&ght to Left Block Bloco de escrita da di&reita para a esquerda - + &Make Plain Text Gerar Te&xto plano - + &Make Rich Text Gerar Te&xto formatado - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + &Help A&juda - + Application &Language... &Idioma do programa... - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 9ee6a1b5..b303a49d 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Простите - + Unable to save '%1'. Невозможно сохранить '%1'. - - + + Save File As Сохранить как - - + + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Plain Text (*.txt) Простой текст (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) @@ -197,22 +197,22 @@ LocaleDialog - + Select application language: Выберите язык приложения: - + <System Language> <Язык системы> - + Note Информация - + Please restart this application for the change in language to take effect. Перезапустите программу, чтобы применить изменение языка. @@ -220,302 +220,302 @@ PreferencesDialog - + Preferences Параметры - + General Общие - + Statistics Статистика - + Toolbar Панель инструментов - + Spell Checking Проверка орфографии - + Select Dictionary Выберите словарь - - + + Sorry Простите - + Unable to open archive. Невозможно открыть архив. - + Unable to read archive metadata. Невозможно прочесть метаданные архива. - + The archive does not contain a usable dictionary. Архив не содержит правильного словаря. - + Unable to open file '%1'. Невозможно открыть файл '%1'. - + Unable to close file '%1'. Невозможно закрыть файл '%1'. - - + + Question Вопрос - + The dictionary "%1" already exists. Do you want to replace it? Словарь "%1" уже существует. Перезаписать его? - + Remove current dictionary? Удалить текущий словарь? - + Daily Goal Дневная задача - + None Нет - + Minutes: Минут: - - + + Words: Слов: - + Editing Редактирование - + Always vertically center Всегда центрировать по вертикали - + Block insertion cursor Прямоугольный курсор - + Default to rich text Включить форматирование текста по умолчанию - + Smooth fonts Сглаживать шрифты - + Typewriter sounds Звук пишущей машинки - + Smart quotes: Заменять кавычки: - + Double Двойные - + Single Одинарные - + Saving Сохранение - + Automatically save changes Автоматически сохранять изменения - + Remember cursor position Запоминать позицию курсора - + Contents Содержание - + Word count Количество слов - + Page count Количество страниц - + Paragraph count Количество абзацев - + Character count Количество символов - + Page Size Размер страницы - + Characters: Символов: - + Paragraphs: Абзацев: - + Word Count Algorithm Алгоритм подсчёта слов - + Detect word boundaries Определять границы слов - + Divide character count by six Делить количество символов на шесть - + Style Стиль - + Icons Only Только значки - + Text Only Только текст - + Text Alongside Icons Текст рядом со значками - + Text Under Icons Текст под значками - + Text Position: Положение текста: - + Actions Действия - + Move Up Переместить вверх - + Move Down Переместить вниз - + Add Separator Добавить разделитель - + Check spelling as you type Проверять орфографию при вводе - + Ignore words in UPPERCASE Пропускать слова, написанные ПРОПИСНЫМИ буквами - + Ignore words with numbers Пропускать слова с цифрами - + Language Язык - - + + Add Добавить - - + + Remove Удалить - + Personal Dictionary Пользовательский словарь @@ -523,8 +523,8 @@ Reader - - + + Not a supported RTF file. Неподдерживаемый файл RTF. @@ -547,7 +547,7 @@ Session - + @@ -1118,7 +1118,7 @@ Tokenizer - + Unexpectedly reached end of file. Неожиданно достигнут конец файла. @@ -1126,541 +1126,541 @@ Window - + Words: 0 Слов: 0 - + Pages: 0 Страниц: 0 - + Paragraphs: 0 Абзацев: 0 - + Characters: 0 Символов: 0 - + 0% of daily goal 0% от дневной задачи - + Loading themes Загружаются темы - + Loading sounds Загружаются звуки - - + + Untitled Безымянный - - + + Sorry Простите - + Note Информация - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - - <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> - <p><center><big><b>FocusWriter %1</b></big><br/>Простой полноэкранный текстовый процессор<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Распространяется по лицензии <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Использует <a href="http://hunspell.sourceforge.net/">Hunspell</a> для проверки орфографии<br/><small>Используется согласно лицензии <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Использует значки из темы <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Используются согласно лицензии <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - - - + Characters: %L1 / %L2 Символов: %L1 / %L2 - + Pages: %L1 Страниц: %L1 - + Paragraphs: %L1 Абзацев: %L1 - + Words: %L1 Слов: %L1 - + %1% of daily goal %1% от дневной задачи - + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - - + + (Untitled %1) (Безымянный %1) - + Loading settings Загружаются настройки - + Emergency cache is not writable. Резервная память недоступна для записи. - - + + Warning Внимание - + FocusWriter was not shut down cleanly. Работа приложения не была завершена правильно. - + Restore from the emergency cache? Восстановить открытые файлы из резервной памяти? - + Some files are unsupported and will not be opened. Некоторые файлы не поддерживаются программой и не будут открыты. - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + Text Files (%1);;All Files (*) Текстовые файлы (%1);;Все файлы (*) - + + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> + <p><center><big><b>FocusWriter %1</b></big><br/>Простой полноэкранный текстовый процессор<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Распространяется по лицензии <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Использует <a href="http://hunspell.sourceforge.net/">Hunspell</a> для проверки орфографии<br/><small>Используется согласно лицензии <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Использует значки из темы <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Используются согласно лицензии <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> + + + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&ё - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Select &All &Выбрать всё - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Make Plain Text Заменить на п&ростой текст - + &Make Rich Text Заменить на текст с &форматированием - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + &Help Спр&авка - + Application &Language... &Язык приложения... - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 1465167b..8cc01b6b 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - - + + Save File As Spara fil som - - + + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Plain Text (*.txt) Vanlig text (*.txt) - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) @@ -196,22 +196,22 @@ LocaleDialog - + Select application language: Välj programspråk: - + <System Language> <Systemspråk> - + Note Observera - + Please restart this application for the change in language to take effect. Starta om programmet för att språkändringar ska aktiveras. @@ -219,302 +219,302 @@ PreferencesDialog - + Preferences Inställningar - + General Allmänt - + Statistics Statistik - + Toolbar Verktygsrad - + Spell Checking Stavningskontroll - + Select Dictionary Välj ordbok - - + + Sorry Tyvärr - + Unable to open archive. Kunde inte öppna arkivet. - + Unable to read archive metadata. Kunde inte läsa arkivets metadata. - + The archive does not contain a usable dictionary. Arkivet innehåller ingen användbar ordbok. - + Unable to open file '%1'. Kunde inte öppna filen "%1". - + Unable to close file '%1'. Kunde inte stänga filen "%1". - - + + Question Fråga - + The dictionary "%1" already exists. Do you want to replace it? Ordboken "%1" finns redan. Vill du ersätta den? - + Remove current dictionary? Ta bort aktuell ordbok? - + Daily Goal Dagligt mål - + None Inget - + Minutes: Minuter: - - + + Words: Ord: - + Editing Redigering - + Always vertically center Centrera alltid vertikalt - + Block insertion cursor Blockmarkör för infogning - + Default to rich text Rich text är standard - + Smooth fonts Mjuka typsnitt - + Typewriter sounds Skrivmaskinsljud - + Smart quotes: Smarta citationstecken: - + Double Dubbel - + Single Enkel - + Saving Spara - + Automatically save changes Spara automatiskt ändringar - + Remember cursor position Kom ihåg markörposition - + Contents Innehåll - + Word count Antal ord - + Page count Antal sidor - + Paragraph count Antal stycken - + Character count Antal tecken - + Page Size Sidstorlek - + Characters: Tecken: - + Paragraphs: Stycken: - + Word Count Algorithm Algoritm för ordantal - + Detect word boundaries Identifiera ordgränser - + Divide character count by six Dela teckenantal med sex - + Style Stil - + Icons Only Endast ikoner - + Text Only Endast text - + Text Alongside Icons Text bredvid ikoner - + Text Under Icons Text under ikoner - + Text Position: Textposition: - + Actions Åtgärder - + Move Up Flytta uppåt - + Move Down Flytta nedåt - + Add Separator Lägg till avgränsare - + Check spelling as you type Kontrollera stavning när du skriver - + Ignore words in UPPERCASE Ignorera ord med VERSALER - + Ignore words with numbers Ignorera ord med siffror - + Language Språk - - + + Add Lägg till - - + + Remove Ta bort - + Personal Dictionary Personlig ordbok @@ -522,8 +522,8 @@ Reader - - + + Not a supported RTF file. RTF-filen stöds inte. @@ -546,7 +546,7 @@ Session - + @@ -1117,7 +1117,7 @@ Tokenizer - + Unexpectedly reached end of file. Nådde oväntat slutet på filen. @@ -1125,541 +1125,541 @@ Window - + Words: 0 Ord: 0 - + Pages: 0 Sidor: 0 - + Paragraphs: 0 Stycken: 0 - + Characters: 0 Tecken: 0 - + 0% of daily goal 0% av dagligt mål - + Loading themes Läser in teman - + Loading sounds Läser in ljud - - + + Untitled Namnlös - - + + Sorry Tyvärr - + Note Observera - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + Characters: %L1 / %L2 Tecken: %L1 / %L2 - + Pages: %L1 Sidor: %L1 - + Paragraphs: %L1 Stycken: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1% av dagligt mål - + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - - + + (Untitled %1) (Namnlös %1) - + Loading settings Läser in inställningar - + Emergency cache is not writable. Nödcachen är inte skrivbar. - - + + Warning Varning - + FocusWriter was not shut down cleanly. FocusWriter stängdes inte av korrekt. - + Restore from the emergency cache? Återställ från nödcachen? - + Some files are unsupported and will not be opened. Några filer stöds inte och kommer inte att öppnas. - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + Text Files (%1);;All Files (*) Textfiler (%1);;Alla filer (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> <p><center><big><b>FocusWriter %1</b></big><br/>En enkel ordbehandlare i helskärmsläge<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Utgivet under licensen <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a></small></center></p><p><center>Använder <a href="http://hunspell.sourceforge.net/">Hunspell</a> för stavningskontroll<br/><small>Används under licensen <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a></small></center></p><p><center>Använder ikoner från ikontemat <a href="http://www.oxygen-icons.org/">Oxygen</a><br/><small>Används under licensen <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a></small></center></p> - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Select &All Markera &allt - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indragning - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&dragning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Make Plain Text &Gör till vanlig text - + &Make Rich Text &Gör till rich text - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + &Help &Hjälp - + Application &Language... Programs&pråk... - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index d5f54324..4b7e4d34 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -30,59 +30,59 @@ Document - - - - - - + + + + + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - - + + Save File As Зберегти файл як - - + + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Plain Text (*.txt) - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) @@ -197,22 +197,22 @@ LocaleDialog - + Select application language: Виберіть мову програми: - + <System Language> - + Note Примітка - + Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набрала чинності. @@ -220,302 +220,302 @@ PreferencesDialog - + Preferences Параметри - + General Загальне - + Statistics Статистика - + Toolbar Панель інструментів - + Spell Checking Перевірка правопису - + Select Dictionary Вибрати словник - - + + Sorry На жаль - + Unable to open archive. Не вдалось відкрити архів. - + Unable to read archive metadata. Не вдалось прочитати метадані архіву. - + The archive does not contain a usable dictionary. Архів не містить придатного словника. - + Unable to open file '%1'. Не вдалось відкрити файл '%1'. - + Unable to close file '%1'. Не вдалось закрити файл '%1'. - - + + Question Запитання - + The dictionary "%1" already exists. Do you want to replace it? Словник "%1" вже є. Хочете замінити його? - + Remove current dictionary? Вилучити чинний словник? - + Daily Goal Щоденні завдання - + None Немає - + Minutes: Хвилин: - - + + Words: Слів: - + Editing Редагування - + Always vertically center Завжди центрувати вертикально - + Block insertion cursor Блокувати курсор вставки - + Default to rich text Типово форматований текст - + Smooth fonts Згладжені шрифти - + Typewriter sounds Звуки друкарської машинки - + Smart quotes: Прямі лапки: - + Double Подвійні - + Single Одинарні - + Saving Збереження - + Automatically save changes Зміни зберігати автоматично - + Remember cursor position Пам'ятати позицію курсору - + Contents Вміст - + Word count Кількість слів - + Page count Кількість сторінок - + Paragraph count Кількість абзаців - + Character count Кількість символів - + Page Size Розмір сторінки - + Characters: Символів: - + Paragraphs: Абзаців: - + Word Count Algorithm Алгоритм підрахунку слів - + Detect word boundaries Визначати межі слова - + Divide character count by six Ділити кількість символів на шість - + Style Стиль - + Icons Only Лише значки - + Text Only Лише текст - + Text Alongside Icons Текст біля значків - + Text Under Icons Текст під значками - + Text Position: Розташування тексту: - + Actions Дії - + Move Up Перемістити уверх - + Move Down Перемістити вниз - + Add Separator Додати розділювач - + Check spelling as you type Перевіряти правопис під час введення - + Ignore words in UPPERCASE Ігнорувати слова у ВЕРХНЬОМУ регістрі - + Ignore words with numbers Ігнорувати слова з цифрами - + Language Мова - - + + Add Додати - - + + Remove Вилучити - + Personal Dictionary Особистий словник @@ -523,8 +523,8 @@ Reader - - + + Not a supported RTF file. Не підтримуваний файл RTF. @@ -547,7 +547,7 @@ Session - + @@ -1118,7 +1118,7 @@ Tokenizer - + Unexpectedly reached end of file. Несподівано завершився файл. @@ -1126,541 +1126,541 @@ Window - + Words: 0 Слів: 0 - + Pages: 0 Сторінок: 0 - + Paragraphs: 0 Абзаців: 0 - + Characters: 0 Символів: 0 - + 0% of daily goal 0% щоденного завдання - + Loading themes Завантаження тем - + Loading sounds Завантаження звуків - - + + Untitled Без назви - - + + Sorry На жаль - + Note Примітка - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + Characters: %L1 / %L2 Символів: %L1 / %L2 - + Pages: %L1 Сторінок: %L1 - + Paragraphs: %L1 Абзаців: %L1 - + Words: %L1 Слів: %L1 - + %1% of daily goal %1% щоденного завдання - + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - - + + (Untitled %1) (Без назви %1) - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files are unsupported and will not be opened. - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + <p><center><big><b>FocusWriter %1</b></big><br/>A simple fullscreen word processor<br/><small>Copyright &copy; 2008-%2 Graeme Gott</small><br/><small>Released under the <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> license</small></center></p><p><center>Uses <a href="http://hunspell.sourceforge.net/">Hunspell</a> for spell checking<br/><small>Used under the <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL 2.1</a> license</small></center></p><p><center>Uses icons from the <a href="http://www.oxygen-icons.org/">Oxygen</a> icon theme<br/><small>Used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> license</small></center></p> - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Select &All Вибрати &все - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Make Plain Text Замінити на п&ростий текст - + &Make Rich Text Замінити на &форматований текст - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + &Help &Довідка - + Application &Language... Мова &програми... - + &About &Про програму - + About &Qt Про &Qt From 3120932b6aed366782c1db164075b0f465fa6acd Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 13 Jul 2012 09:32:35 -0400 Subject: [PATCH 061/630] Update translations. --- translations/focuswriter_de.qm | Bin 28636 -> 28636 bytes translations/focuswriter_de.ts | 2 +- translations/focuswriter_fr.qm | Bin 28946 -> 29060 bytes translations/focuswriter_fr.ts | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm index 184d48cceb7b7b292c56a6c5d6f2179db386b0f6..56ed5f7efd05ac4d657ba0a74664d82e2b8c09db 100644 GIT binary patch delta 16 Ycmca}pYhIp#trA<7y~z-kK+{t085nzr2qf` delta 16 Ycmca}pYhIp#trA<7#%mCkK+{t082Fol>h($ diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 197fe5fa..1b74f368 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -1366,7 +1366,7 @@ Ctrl+Q - Strg+A + Strg+Q diff --git a/translations/focuswriter_fr.qm b/translations/focuswriter_fr.qm index f4ede66f607847c8ac28a760f4211a67263d0f27..5af4e60a1d5bc8c419d7ad61da1cdd7eafaf5c6c 100644 GIT binary patch delta 2628 zcmXArdq9n89>>4uy`B3xhFo$jN_EPKgmSB>2)T@VwYhY$?NT9w7H82IUBoDqvB?-_ zlcgbck|Bf{Y(ld`c3Q+*IVII$5i zB{qg80JF@)>B%d^N&dj(c_?{50q}T=Q-M!`j?TE@o=M(E!-ZyGW{XCXy$YDyq_NlC z0ZeY1zB$Q2x2GyycWNg3eM(3AX%;r}y}-Vjw3FWg@$s5nI~}n=!W_+^fAgZy-kS2a zhk-d2nun7)Z|JRg{P-?luMp&djX>8pp-n~{&}D?s=_oyMIw?5MNdfwNCQLTdfbd`; zy>SN6W`U4 zL!SwiiTx?KCqiA29S9yP{CJudM!O32jXf!}IYNWS9AL1Y@W02ra8{Y{?rb|C>Z;h* zGnbL@6kQ+Ia^H8NkBR4L9*O=X4;Vq472>r~!H`7caiG(6AEmpDj$mpeN$(&x-(`E8<-X9WYN4 zUo7VQ@QdQx8{;XmCdp9ooS|MNd77qEGsRM5a0L)>L7Km06H{CvIqG;%uONrCy7hu^ zQOY-0(xV|#LBw&ut6D0`pcuVgOM3@KQJnpx(%eVDR1Nurw3AH$_K|NmjwY#vsq4vi zHDH&*8Ldi^6x`wSh{rilYHhrP`XyXAF$b_ zYxnk%%cYiSp90=RvZjgs#1Zp1SzMV#4{yoRhZj!Dp>JrZx0f7t@CHL2CQmv!6Zq(W zyyieI(7RU7-Z2FTx*_L;pQXrds`Trsa?lYuXY>H>+a?#(j$)PUlnd8TtbVm}@pu~E zX`FoE%o(O)n_MkJrul@4({*uPZiG?l3d@l||xa6Dt0;%9aJLfBPi}W%9!Q|*8k8(CF&GaY`Lk-E2dier6}{;onSRoC<}7yc;Pl>?J+wH{XfXGeWtXUBip6Dc2{o0NtOf?3tsybgie#mn&}%k)8jm z6>Tqg&seSU1;rR&r)~Sv!G8X`8twdtBbif;c7ZvAb-hrV`iKVEGqlSb?}6An?e-&i z^lZ1bR6}j_`$}7?aNT%FyZ>A)McPGMnJBUh7i%xCHUY{+?Z1*H^4vmgqw6ocP|)f2 zF_N=GbzR@{`(mro`8{XV4486TfuWPFQE z(sp_hGtcDIK8_-uqH@?VlhbgHhi^2wRP*An9;SiE%PF=mOv9U*;!&xlG2c-`ep^gY zm)uzY_GVK;=^lpA&6G6Wm7<9?r6saq%xW<$5l*mGE;E&UL-Bcdn2tSN%&PjRdL&9Qr!b5pZ9`L`5yzKiB1KP_Pu^fv#gYCPcD#hf{@BM)dcSCulCdS`R> z_d^-t#pah$^tAIZOWXPyrf!|Z$&t+UU6vkU_gHr27DouzXFs!K7svDCbjq?JGoJ=U zS{m+mrs3T!_s*SWXZtwAa=+~@mRVEy{1ylI63~BuD0#Ddr=Z<)ey>zY0R`};UAvGa6G$n4yf`sHWmnjL$(p)@k O_LTUv!_N&aiT?+C(&tbB delta 2532 zcmXAqdtA@=9>-t5@9lU0{j4HdE=6~|;~U4$(Yhp@-Y zBN-ufRC6tioyv-lt%I0{xgCzJGgRl*`Tq6%UO%7r<@I`ha@sVX-qUPxu>Av&wgYij zfygfbomr(ZTcwA)$`OACCWrC61HgNqk$gY%65zH>WvB$9lK0^QARTB1Vvj?rmVhxe zkQ&3ehX~n=&;1TUj*S59Hb9N^Q$%F33zrdG=4BV z8{NoQcs?0QcEPLQ2oRADuR^|$2!dBh9Wb#MylVM8@(IQ{wgSQ)Omg1@jIKpgAU7Tu zOKt;3?8cPoJz<0HDW;}o0lruBcTWHhwnl{ z`VKCfp;GIqviEhBL#C@7`9@_*Jrd3`@IIwT6e^kEZ6u0ZC-}dZqvYFwfF9i!z*slT zDf0yE>M_q8!c2;gA_V|{>Ofgn3@~H^&ILUOdL6+nw>-dcEn2U<0cIC#GzFgk3-UF- z&G!Ifm1bz+5}@w}l`bPR(}r(gB9}B7ZTxT4MNQ@zwms#wX5SuL60opcbL?N-XhMyq z^6haTIY#q%2A}I|G*6%2XJujpxnwi&?jJ&roD{(6rqKH&GjW(D^hsU{`1BQKm>EFC z4I!&79_S$oMQ1vJo{xlWrTc+EMJOE|1@v|n4t!qAmU;*WyIT;JE1a-ZeZdSfg_HUG zFg#bNPV;B)a)jnkUm*0ZaQ!?tO!!7$c;vG^$=yE*kO~3&DB8C zHK}BB4d9U=mF7@{9-F1F0uxyJOHz5!6K1rXd`8xiuK*k*U-SM2Ne#^EM|O}?r1H%g zay2QC`$-G=18F6@NH5ycoAf4avw7jei(KiD`xRE=xpc^zr5m(Bxl%7qi_=zZ^ zDB2V!z)+|3O5wr*VM^~=Y|Xej#cvnyZSFBWo zGPz|kzhA9Hy&;3wC<*86>3>UxvS=?=I!sm;+n=TjVw4Yynz^Bml3hhHdZjA`=~VS1 zMcG^K%kQ$3i;EqA={J>zf_iS0uH2021o~}M>FTPqyR^{nR^{z6(&-be==mF9zN=OK zPBAY0Kx^0j4lsA2cJX7|1ZKEh`=L39e%5N2J)xa^owTcMT@~mevS_UKq>LP7H&j9gLUGyEy`{_%fYT3djeQBJ93xBCHaf|+R+fIt> zjsDsWJ$nrOv--a=lRSNwFDs#})OQuJ)XHJQfVylZA{)HEV~;g{hB0Zo=$>FhYC{CY zoNuVi;P>y2GSn1iat@T*3|EU~4w&PH$7$UQ-!>Z7H*pku7_IU^Rv^~+-acOr76)UR zJ2P{>ZcJ~;U?u)(TotsAqxZIPwFAZJRcWlK(9)ju#tY6{X=6v@mGV}W_=d`!4{D>!`1CX@;}>9(b~2O14wFOA6rS(D zsvJAb(`Y`7T?q&AxSe#XG#i_GD(IUxuBMDo8u{mn`H{po+x zR`ZhImok%N^NJr=aN`>DU(QC;en-uD(;Qjqt>&}k?4|CAx%P4}d#E?JCot1KO%}VB zdSH^X#lg0OiWq6>AMt>;i?Z0l_O?kyU?bWi+S#4@yeS@&Et; diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 215f995f..0386df3a 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -74,7 +74,7 @@ OpenDocument Text (*.odt) - + OpenDocument Texte (*.odt) From 724a7cbfebc19b04fd1811a04a823d4e85c09fc8 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 17 Jul 2012 11:02:16 +0200 Subject: [PATCH 062/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 4daa3d48..112ff6c2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.3.6-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Sun, 24 Jun 2012 00:25:52 +0100 + focuswriter (1.3.5.2-1) unstable; urgency=low * New upstream release From ad29f98390c64229ca069c9c82a64cb524449bc8 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 16 Jul 2012 19:27:54 +0200 Subject: [PATCH 063/630] stop using cdbs to simplify debian/rules and fix hardening flags issues --- debian/control | 2 +- debian/rules | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/debian/control b/debian/control index ef5ab022..0b1e9f9d 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: editors Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott -Build-Depends: cdbs, debhelper (>= 9), +Build-Depends: debhelper (>= 9), libqt4-dev, libhunspell-dev, libzip-dev, diff --git a/debian/rules b/debian/rules index 912fb4cf..81bcaefa 100755 --- a/debian/rules +++ b/debian/rules @@ -1,11 +1,9 @@ #!/usr/bin/make -f -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/qmake.mk +%: + dh $@ --parallel -QMAKE = qmake-qt4 -DEB_QMAKE_ARGS = PREFIX=/usr - -install/focuswriter:: +override_dh_auto_install: + dh_auto_install cd debian/focuswriter/usr/share/pixmaps/ \ && mv focuswriter_32.xpm focuswriter.xpm From 6b8fec1885edf73d077b8cd7e1a6257de108f3e5 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 16 Jul 2012 19:08:16 +0200 Subject: [PATCH 064/630] allow debian sources to represent binary changes to translation files --- debian/source/include-binaries | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 debian/source/include-binaries diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 00000000..42299b89 --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1,5 @@ +translations/focuswriter_fr.qm +translations/focuswriter_cs.qm +translations/focuswriter_ja.qm +translations/focuswriter_ca.qm +translations/focuswriter_de.qm From c5c20d72b8577f74f67c246608797d933c2f3367 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 17 Jul 2012 11:31:26 +0200 Subject: [PATCH 065/630] include documentation files README and CREDITS --- debian/focuswriter.docs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 debian/focuswriter.docs diff --git a/debian/focuswriter.docs b/debian/focuswriter.docs new file mode 100644 index 00000000..297170db --- /dev/null +++ b/debian/focuswriter.docs @@ -0,0 +1,2 @@ +README +CREDITS From 320e9b7af67a6e21f78702bec137cf6ee69dac2d Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 16 Jul 2012 18:13:12 +0200 Subject: [PATCH 066/630] log changes --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 112ff6c2..91815368 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +focuswriter (1.3.6-2) unstable; urgency=low + + * Stop using cdbs in debian/rules to fix hardening flags pass-through issue + * Merge post-release upstream translations + * Include documentation file CREDITS, and continue to include README + + -- Barak A. Pearlmutter Tue, 17 Jul 2012 11:32:40 +0200 + focuswriter (1.3.6-1) unstable; urgency=low * New upstream release From ddf3c3dfd96c3714763816543e767131e3a699b1 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 19 Aug 2012 11:02:13 +0200 Subject: [PATCH 067/630] rm debian/source/include-binaries (binary changes to translation files) --- debian/source/include-binaries | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 debian/source/include-binaries diff --git a/debian/source/include-binaries b/debian/source/include-binaries deleted file mode 100644 index 42299b89..00000000 --- a/debian/source/include-binaries +++ /dev/null @@ -1,5 +0,0 @@ -translations/focuswriter_fr.qm -translations/focuswriter_cs.qm -translations/focuswriter_ja.qm -translations/focuswriter_ca.qm -translations/focuswriter_de.qm From ce5b2598d3f7cbf7457131ff0c0c7c313a8fa6ce Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 19 Aug 2012 11:11:00 +0200 Subject: [PATCH 068/630] upstream now uses libenchant for spell checking --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 0b1e9f9d..a2848e02 100644 --- a/debian/control +++ b/debian/control @@ -5,7 +5,7 @@ Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: debhelper (>= 9), libqt4-dev, - libhunspell-dev, + libenchant-dev, libzip-dev, pkg-config Standards-Version: 3.9.3 From adbae458a7ea9b8db97dc8cf93c6f4b3d5f89283 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 19 Aug 2012 11:18:23 +0200 Subject: [PATCH 069/630] bitmap icon name changed upstream, no long need to rename it --- debian/rules | 5 ----- 1 file changed, 5 deletions(-) diff --git a/debian/rules b/debian/rules index 81bcaefa..ce2eb52b 100755 --- a/debian/rules +++ b/debian/rules @@ -2,8 +2,3 @@ %: dh $@ --parallel - -override_dh_auto_install: - dh_auto_install - cd debian/focuswriter/usr/share/pixmaps/ \ - && mv focuswriter_32.xpm focuswriter.xpm From 9709e75a5652eab02ce61c0dc4765451a6de9ef1 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 19 Aug 2012 11:05:05 +0200 Subject: [PATCH 070/630] log changes --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 91815368..0ce550dd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +focuswriter (1.3.80-1) unstable; urgency=low + + * New upstream release + - uses libenchant for spell checking + - includes translation patches, no need to represent binary changes + - renamed bitmap icon, no longer need to rename + + -- Barak A. Pearlmutter Sun, 19 Aug 2012 11:19:41 +0200 + focuswriter (1.3.6-2) unstable; urgency=low * Stop using cdbs in debian/rules to fix hardening flags pass-through issue From df8627169ea68076ef72a921383846d0a100682e Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 26 Aug 2012 14:58:39 +0200 Subject: [PATCH 071/630] quilt patch reverting windows-related sound fix that broke sound for me --- debian/patches/0001-revert-SDL-load-fix.patch | 61 +++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 62 insertions(+) create mode 100644 debian/patches/0001-revert-SDL-load-fix.patch create mode 100644 debian/patches/series diff --git a/debian/patches/0001-revert-SDL-load-fix.patch b/debian/patches/0001-revert-SDL-load-fix.patch new file mode 100644 index 00000000..28a6f50e --- /dev/null +++ b/debian/patches/0001-revert-SDL-load-fix.patch @@ -0,0 +1,61 @@ +From: "Barak A. Pearlmutter" +Date: Sun, 26 Aug 2012 11:50:19 +0200 +Subject: revert SDL load fix + +This reverts commit 3da303ed3a02fd53970a1db35f3eb267bbde4976, +"FIXED: Regression - Windows did not load SDL." +Said commit broke loading the SDL_mixer library on Debian testing +thus breaking typewriter sounds---the key feature of focuswriter! +--- + ChangeLog | 1 - + src/sdl/sound.cpp | 18 +++++++----------- + 2 files changed, 7 insertions(+), 12 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 9ccd00c..68c7a17 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -30,7 +30,6 @@ + * FIXED: Dragging top scene merged it with other scenes. + + 2012-08-13 Graeme Gott +- * FIXED: Regression - Windows did not load SDL. + * Use built-in Voikko support for finding dictionaries. + + 2012-08-12 Graeme Gott +diff --git a/src/sdl/sound.cpp b/src/sdl/sound.cpp +index 7ec6589..c47a145 100644 +--- a/src/sdl/sound.cpp ++++ b/src/sdl/sound.cpp +@@ -111,24 +111,20 @@ namespace + void loadSDL() + { + // Initialize SDL +- QLibrary sdl_lib("SDL2"); + QLibrary mixer_lib("SDL2_mixer"); +- if (!sdl_lib.load()) { +- sdl_lib.setFileName("SDL"); ++ if (!mixer_lib.load()) { + mixer_lib.setFileName("SDL_mixer"); + } +- if (!sdl_lib.load()) { +- sdl_lib.setFileNameAndVersion("SDL2-2.0", "0"); ++ if (!mixer_lib.load()) { + mixer_lib.setFileNameAndVersion("SDL2_mixer-2.0", "0"); + } +- if (!sdl_lib.load()) { +- sdl_lib.setFileNameAndVersion("SDL-1.2", "0"); ++ if (!mixer_lib.load()) { + mixer_lib.setFileNameAndVersion("SDL_mixer-1.2", "0"); + } +- sdl_Init = (func_SDL_Init) sdl_lib.resolve("SDL_Init"); +- sdl_Quit = (func_SDL_Quit) sdl_lib.resolve("SDL_Quit"); +- sdl_GetError = (func_SDL_GetError) sdl_lib.resolve("SDL_GetError"); +- sdl_RWFromFile = (func_SDL_RWFromFile) sdl_lib.resolve("SDL_RWFromFile"); ++ sdl_Init = (func_SDL_Init) mixer_lib.resolve("SDL_Init"); ++ sdl_Quit = (func_SDL_Quit) mixer_lib.resolve("SDL_Quit"); ++ sdl_GetError = (func_SDL_GetError) mixer_lib.resolve("SDL_GetError"); ++ sdl_RWFromFile = (func_SDL_RWFromFile) mixer_lib.resolve("SDL_RWFromFile"); + if ((sdl_Init == 0) || (sdl_Quit == 0) || (sdl_GetError == 0) || (sdl_RWFromFile == 0)) { + qWarning("Unable to load SDL"); + return; diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000..15b3254e --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-revert-SDL-load-fix.patch From f7e8d113daded5889f9c2af9115d43a498cc397a Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 24 Aug 2012 22:48:29 +0200 Subject: [PATCH 072/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 0ce550dd..505c637f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.3.90-1) unstable; urgency=low + + * New upstream release + * Quilt patch reverting 3da303ed which broke typewriter sounds + + -- Barak A. Pearlmutter Sun, 26 Aug 2012 15:01:16 +0200 + focuswriter (1.3.80-1) unstable; urgency=low * New upstream release From 8831efe2d61acf913a603ad33418a54d8a1afc5b Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 31 Aug 2012 09:43:11 +0200 Subject: [PATCH 073/630] remove SDL-load-fix.patch due to merged proper upstream fix --- debian/patches/0001-revert-SDL-load-fix.patch | 61 ------------------- debian/patches/series | 1 - 2 files changed, 62 deletions(-) delete mode 100644 debian/patches/0001-revert-SDL-load-fix.patch delete mode 100644 debian/patches/series diff --git a/debian/patches/0001-revert-SDL-load-fix.patch b/debian/patches/0001-revert-SDL-load-fix.patch deleted file mode 100644 index 28a6f50e..00000000 --- a/debian/patches/0001-revert-SDL-load-fix.patch +++ /dev/null @@ -1,61 +0,0 @@ -From: "Barak A. Pearlmutter" -Date: Sun, 26 Aug 2012 11:50:19 +0200 -Subject: revert SDL load fix - -This reverts commit 3da303ed3a02fd53970a1db35f3eb267bbde4976, -"FIXED: Regression - Windows did not load SDL." -Said commit broke loading the SDL_mixer library on Debian testing -thus breaking typewriter sounds---the key feature of focuswriter! ---- - ChangeLog | 1 - - src/sdl/sound.cpp | 18 +++++++----------- - 2 files changed, 7 insertions(+), 12 deletions(-) - -diff --git a/ChangeLog b/ChangeLog -index 9ccd00c..68c7a17 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -30,7 +30,6 @@ - * FIXED: Dragging top scene merged it with other scenes. - - 2012-08-13 Graeme Gott -- * FIXED: Regression - Windows did not load SDL. - * Use built-in Voikko support for finding dictionaries. - - 2012-08-12 Graeme Gott -diff --git a/src/sdl/sound.cpp b/src/sdl/sound.cpp -index 7ec6589..c47a145 100644 ---- a/src/sdl/sound.cpp -+++ b/src/sdl/sound.cpp -@@ -111,24 +111,20 @@ namespace - void loadSDL() - { - // Initialize SDL -- QLibrary sdl_lib("SDL2"); - QLibrary mixer_lib("SDL2_mixer"); -- if (!sdl_lib.load()) { -- sdl_lib.setFileName("SDL"); -+ if (!mixer_lib.load()) { - mixer_lib.setFileName("SDL_mixer"); - } -- if (!sdl_lib.load()) { -- sdl_lib.setFileNameAndVersion("SDL2-2.0", "0"); -+ if (!mixer_lib.load()) { - mixer_lib.setFileNameAndVersion("SDL2_mixer-2.0", "0"); - } -- if (!sdl_lib.load()) { -- sdl_lib.setFileNameAndVersion("SDL-1.2", "0"); -+ if (!mixer_lib.load()) { - mixer_lib.setFileNameAndVersion("SDL_mixer-1.2", "0"); - } -- sdl_Init = (func_SDL_Init) sdl_lib.resolve("SDL_Init"); -- sdl_Quit = (func_SDL_Quit) sdl_lib.resolve("SDL_Quit"); -- sdl_GetError = (func_SDL_GetError) sdl_lib.resolve("SDL_GetError"); -- sdl_RWFromFile = (func_SDL_RWFromFile) sdl_lib.resolve("SDL_RWFromFile"); -+ sdl_Init = (func_SDL_Init) mixer_lib.resolve("SDL_Init"); -+ sdl_Quit = (func_SDL_Quit) mixer_lib.resolve("SDL_Quit"); -+ sdl_GetError = (func_SDL_GetError) mixer_lib.resolve("SDL_GetError"); -+ sdl_RWFromFile = (func_SDL_RWFromFile) mixer_lib.resolve("SDL_RWFromFile"); - if ((sdl_Init == 0) || (sdl_Quit == 0) || (sdl_GetError == 0) || (sdl_RWFromFile == 0)) { - qWarning("Unable to load SDL"); - return; diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index 15b3254e..00000000 --- a/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -0001-revert-SDL-load-fix.patch From 3de70c233b85fe0345f3e84266cf161bcacfaee5 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 31 Aug 2012 09:45:33 +0200 Subject: [PATCH 074/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 505c637f..1addf54e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.3.90-2) unstable; urgency=low + + * merge upstream proper sound fix + * remove corresponding quilt patch 0001-revert-SDL-load-fix.patch + + -- Barak A. Pearlmutter Fri, 31 Aug 2012 09:44:20 +0200 + focuswriter (1.3.90-1) unstable; urgency=low * New upstream release From bd9c9d32157c9eb87808c6b9f0288e7ac60e3a1c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Sep 2012 12:58:31 -0400 Subject: [PATCH 075/630] Tag version 1.4.0 --- ChangeLog | 3 +++ focuswriter.pro | 7 ++----- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e7a17139..77e56a37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-09-22 Graeme Gott + * Tag version 1.4.0. + 2012-09-18 Graeme Gott * FIXED: Could not save to WebDAV. diff --git a/focuswriter.pro b/focuswriter.pro index 28b4aacd..047a2ae6 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -17,11 +17,8 @@ MOC_DIR = build OBJECTS_DIR = build RCC_DIR = build -VERSION = $$system(git rev-parse --short HEAD) -isEmpty(VERSION) { - VERSION = 0 -} -DEFINES += VERSIONSTR=\\\"git.$${VERSION}\\\" +VERSION = 1.4.0 +DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { TARGET = focuswriter diff --git a/mac_deploy.sh b/mac_deploy.sh index 6f9c5ca8..3273ecff 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION=$(git rev-parse --short HEAD) +VERSION='1.4.0' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index f30e5b7e..656c3ad1 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -FOR /f %%i IN ('git rev-parse --short HEAD') DO SET VERSION=%%i +SET VERSION=1.4.0 ECHO Copying executable MKDIR %APP% From 2b13d1d1a082b3bf72c435f9bff9c2d87726677d Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 25 Sep 2012 15:06:00 +0100 Subject: [PATCH 076/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1addf54e..99bc0183 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.4.0-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Tue, 25 Sep 2012 15:05:55 +0100 + focuswriter (1.3.90-2) unstable; urgency=low * merge upstream proper sound fix From 8399b94e983003d6f196e953eb04ea553e06afba Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 12 Oct 2012 21:17:04 -0400 Subject: [PATCH 077/630] FIXED: Cannot add new keyboard shortcuts with the Shift key. --- ChangeLog | 3 +++ src/shortcut_edit.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 77e56a37..7bcac81b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-10-12 Graeme Gott + * FIXED: Cannot add new keyboard shortcuts with the Shift key. + 2012-09-22 Graeme Gott * Tag version 1.4.0. diff --git a/src/shortcut_edit.cpp b/src/shortcut_edit.cpp index aa159ee6..1575f4c7 100644 --- a/src/shortcut_edit.cpp +++ b/src/shortcut_edit.cpp @@ -94,9 +94,9 @@ bool ShortcutEdit::eventFilter(QObject* watched, QEvent* event) } // Add modifiers; only allow shift if it is not required for key of shortcut - if ((modifiers & Qt::ShiftModifier) && !key_event->text().isEmpty()) { - QChar c = key_event->text().at(0); - if (c.isPrint() && !c.isLetterOrNumber() && !c.isSpace()) { + if (modifiers & Qt::ShiftModifier) { + QChar c = !key_event->text().isEmpty() ? key_event->text().at(0) : QChar(); + if (!c.isPrint() || c.isLetterOrNumber() || c.isSpace()) { key |= Qt::SHIFT; } } From bbddc0dc720755b96a5660fea3c22d7c81ffe1d7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 14 Oct 2012 15:28:56 -0400 Subject: [PATCH 078/630] FIXED: Cleared keyboard shortcuts not saved. --- ChangeLog | 3 +++ src/action_manager.cpp | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7bcac81b..590f789d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-10-14 Graeme Gott + * FIXED: Cleared keyboard shortcuts not saved. + 2012-10-12 Graeme Gott * FIXED: Cannot add new keyboard shortcuts with the Shift key. diff --git a/src/action_manager.cpp b/src/action_manager.cpp index 390808e7..86f3a04f 100644 --- a/src/action_manager.cpp +++ b/src/action_manager.cpp @@ -109,12 +109,14 @@ QKeySequence ActionManager::shortcut(quint32 unicode) void ActionManager::addAction(const QString& name, QAction* action) { + bool set = m_actions.contains(name); Action& act = m_actions[name]; act.action = action; act.default_shortcut = action->shortcut(); - if (!act.shortcut.isEmpty()) { - action->setShortcut(act.shortcut); + if (!set) { + act.shortcut = act.default_shortcut; } + action->setShortcut(act.shortcut); } //----------------------------------------------------------------------------- @@ -160,7 +162,7 @@ void ActionManager::setShortcuts(const QHash& shortcuts) while (j.hasNext()) { const QString& name = j.next().key(); const Action& act = j.value(); - if (!act.shortcut.isEmpty() && (act.default_shortcut != act.shortcut)) { + if (act.default_shortcut != act.shortcut) { settings.setValue(name, act.shortcut); } else { settings.remove(name); From 197b541f7d3ce1a4823043536e43447173d5d1ab Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 14 Oct 2012 16:55:59 -0400 Subject: [PATCH 079/630] FIXED: Could check spelling of Read-Only files. --- ChangeLog | 1 + src/highlighter.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 590f789d..a36e3cc2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-10-14 Graeme Gott + * FIXED: Could check spelling of Read-Only files. * FIXED: Cleared keyboard shortcuts not saved. 2012-10-12 Graeme Gott diff --git a/src/highlighter.cpp b/src/highlighter.cpp index 6258237c..2f8aa06f 100644 --- a/src/highlighter.cpp +++ b/src/highlighter.cpp @@ -82,7 +82,7 @@ void Highlighter::setMisspelledColor(const QColor& color) bool Highlighter::eventFilter(QObject* watched, QEvent* event) { - if (watched != m_text->viewport() || event->type() != QEvent::ContextMenu || !m_enabled) { + if (watched != m_text->viewport() || event->type() != QEvent::ContextMenu || !m_enabled || m_text->isReadOnly()) { return QSyntaxHighlighter::eventFilter(watched, event); } else { // Check spelling of text block under mouse @@ -144,7 +144,7 @@ bool Highlighter::eventFilter(QObject* watched, QEvent* event) void Highlighter::highlightBlock(const QString& text) { BlockStats* stats = static_cast(currentBlockUserData()); - if (!m_enabled || !stats || (stats->spellingStatus() == BlockStats::Unchecked)) { + if (!m_enabled || m_text->isReadOnly() || !stats || (stats->spellingStatus() == BlockStats::Unchecked)) { return; } if (stats->spellingStatus() == BlockStats::CheckSpelling) { @@ -172,7 +172,7 @@ void Highlighter::highlightBlock(const QString& text) void Highlighter::updateSpelling() { - if (!m_enabled) { + if (!m_enabled || m_text->isReadOnly()) { return; } From b9a8dd6d2308449d5150e9425510712ff4e4fa46 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 14 Oct 2012 17:04:29 -0400 Subject: [PATCH 080/630] FIXED: Could paste unformatted in Read-Only files. --- ChangeLog | 1 + src/window.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index a36e3cc2..2fb52926 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-10-14 Graeme Gott + * FIXED: Could paste unformatted in Read-Only files. * FIXED: Could check spelling of Read-Only files. * FIXED: Cleared keyboard shortcuts not saved. diff --git a/src/window.cpp b/src/window.cpp index 95586052..001c647a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1271,6 +1271,7 @@ void Window::updateWriteState(int index) bool writable = !document->isReadOnly(); m_actions["Paste"]->setEnabled(writable); + m_actions["PasteUnformatted"]->setEnabled(writable); m_actions["Replace"]->setEnabled(writable); m_actions["CheckSpelling"]->setEnabled(writable); if (writable) { From 368f7601f442f0e35faea8132b708a69b08350df Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 14 Oct 2012 20:32:38 -0400 Subject: [PATCH 081/630] FIXED: Could insert symbols in Read-Only files. --- ChangeLog | 1 + src/stack.cpp | 1 + src/stack.h | 5 +++++ src/symbols_dialog.cpp | 23 ++++++++++++++++++++--- src/symbols_dialog.h | 3 +++ src/window.cpp | 5 +++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2fb52926..026e5786 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-10-14 Graeme Gott + * FIXED: Could insert symbols in Read-Only files. * FIXED: Could paste unformatted in Read-Only files. * FIXED: Could check spelling of Read-Only files. * FIXED: Cleared keyboard shortcuts not saved. diff --git a/src/stack.cpp b/src/stack.cpp index cbc2bdb6..18b783c8 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -595,6 +595,7 @@ void Stack::showSymbols() if (!m_symbols_dialog) { window()->setCursor(Qt::WaitCursor); m_symbols_dialog = new SymbolsDialog(this); + m_symbols_dialog->setInsertEnabled(!m_current_document->isReadOnly()); m_symbols_dialog->setPreviewFont(m_current_document->text()->font()); connect(m_symbols_dialog, SIGNAL(insertText(QString)), this, SLOT(insertSymbol(QString))); window()->unsetCursor(); diff --git a/src/stack.h b/src/stack.h index bc7476a5..597eb95d 100644 --- a/src/stack.h +++ b/src/stack.h @@ -44,6 +44,7 @@ class Stack : public QWidget AlertLayer* alerts() const; LoadScreen* loadScreen() const; + SymbolsDialog* symbols() const; int count() const; Document* currentDocument() const; @@ -157,6 +158,10 @@ inline LoadScreen* Stack::loadScreen() const { return m_load_screen; } +inline SymbolsDialog* Stack::symbols() const { + return m_symbols_dialog; +} + inline int Stack::count() const { return m_documents.count(); } diff --git a/src/symbols_dialog.cpp b/src/symbols_dialog.cpp index 5ab35f80..5a613d5b 100644 --- a/src/symbols_dialog.cpp +++ b/src/symbols_dialog.cpp @@ -212,9 +212,9 @@ SymbolsDialog::SymbolsDialog(QWidget* parent) : connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); - QPushButton* insert_button = buttons->addButton(tr("Insert"), QDialogButtonBox::AcceptRole); - insert_button->setAutoDefault(true); - insert_button->setDefault(true); + m_insert_button = buttons->addButton(tr("Insert"), QDialogButtonBox::AcceptRole); + m_insert_button->setAutoDefault(true); + m_insert_button->setDefault(true); // Lay out dialog QVBoxLayout* layout = new QVBoxLayout(this); @@ -257,6 +257,23 @@ SymbolsDialog::SymbolsDialog(QWidget* parent) : //----------------------------------------------------------------------------- +void SymbolsDialog::setInsertEnabled(bool enabled) +{ + if (m_insert_button->isEnabled() == enabled) { + return; + } + + m_insert_button->setEnabled(enabled); + + if (enabled) { + connect(m_view, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept())); + } else { + disconnect(m_view, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept())); + } +} + +//----------------------------------------------------------------------------- + void SymbolsDialog::setPreviewFont(const QFont& font) { QFontMetrics metrics(font); diff --git a/src/symbols_dialog.h b/src/symbols_dialog.h index 99368f93..e5fdaf1b 100644 --- a/src/symbols_dialog.h +++ b/src/symbols_dialog.h @@ -43,6 +43,7 @@ class SymbolsDialog : public QDialog public: SymbolsDialog(QWidget* parent = 0); + void setInsertEnabled(bool enabled); void setPreviewFont(const QFont& font); signals: @@ -83,6 +84,8 @@ private slots: QLabel* m_symbol_code; QTableWidget* m_recent; + + QPushButton* m_insert_button; }; #endif diff --git a/src/window.cpp b/src/window.cpp index 001c647a..6435cbc8 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -34,6 +34,7 @@ #include "smart_quotes.h" #include "sound.h" #include "stack.h" +#include "symbols_dialog.h" #include "theme.h" #include "theme_manager.h" #include "timer_display.h" @@ -1283,6 +1284,10 @@ void Window::updateWriteState(int index) m_replace_document_quotes->setEnabled(writable); m_replace_selection_quotes->setEnabled(writable); + if (m_documents->symbols()) { + m_documents->symbols()->setInsertEnabled(writable); + } + foreach (QAction* action, m_format_actions) { action->setEnabled(writable); } From 90518231bdf7099a44e26b276dc212355c973747 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 14 Oct 2012 20:39:10 -0400 Subject: [PATCH 082/630] FIXED: Could drag scenes in Read-Only files. --- ChangeLog | 1 + src/scene_list.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 026e5786..ce2a1cb8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-10-14 Graeme Gott + * FIXED: Could drag scenes in Read-Only files. * FIXED: Could insert symbols in Read-Only files. * FIXED: Could paste unformatted in Read-Only files. * FIXED: Could check spelling of Read-Only files. diff --git a/src/scene_list.cpp b/src/scene_list.cpp index cc39c109..e82c55a0 100644 --- a/src/scene_list.cpp +++ b/src/scene_list.cpp @@ -199,6 +199,7 @@ void SceneList::setDocument(Document* document) m_document = document; if (m_document && scenesVisible()) { + m_scenes->setDragDropMode(!m_document->text()->isReadOnly() ? QAbstractItemView::InternalMove : QAbstractItemView::NoDragDrop); m_document->sceneModel()->setUpdatesBlocked(false); connect(m_document->text(), SIGNAL(cursorPositionChanged()), this, SLOT(selectCurrentScene())); selectCurrentScene(); @@ -250,6 +251,7 @@ void SceneList::showScenes() setMaximumWidth(m_width); if (m_document) { + m_scenes->setDragDropMode(!m_document->text()->isReadOnly() ? QAbstractItemView::InternalMove : QAbstractItemView::NoDragDrop); m_document->sceneModel()->setUpdatesBlocked(false); connect(m_document->text(), SIGNAL(cursorPositionChanged()), this, SLOT(selectCurrentScene())); selectCurrentScene(); From c1e475113052a9da1c49d33e7c144c807c4bf546 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 9 Nov 2012 13:38:04 +0000 Subject: [PATCH 083/630] bump debian standards version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index a2848e02..399abe83 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Build-Depends: debhelper (>= 9), libenchant-dev, libzip-dev, pkg-config -Standards-Version: 3.9.3 +Standards-Version: 3.9.4 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary From a6ecb6c2f2454a9a9392cc00d451ffebb57038e7 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 9 Nov 2012 13:37:29 +0000 Subject: [PATCH 084/630] log changes --- debian/changelog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/debian/changelog b/debian/changelog index 99bc0183..c144f529 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,16 @@ +focuswriter (1.4.0.2012.10.15-1) unstable; urgency=low + + * merge upstream bug fixes on branch release-1.4 + - FIXED: Could drag scenes in Read-Only files. + - FIXED: Could insert symbols in Read-Only files. + - FIXED: Could paste unformatted in Read-Only files. + - FIXED: Could check spelling of Read-Only files. + - FIXED: Cleared keyboard shortcuts not saved. + - FIXED: Cannot add new keyboard shortcuts with the Shift key. + * bump debian standards version, no changes needed + + -- Barak A. Pearlmutter Fri, 09 Nov 2012 13:38:35 +0000 + focuswriter (1.4.0-1) unstable; urgency=low * New upstream release From 4c2d34818a2aec8d3749640b1c49774f51988a9c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 4 Nov 2012 07:10:42 -0500 Subject: [PATCH 085/630] FIXED: Played sounds constantly in Ubuntu 10.04. Closes #104. --- ChangeLog | 3 +++ src/document.cpp | 23 +++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce2a1cb8..98d1821c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-04 Graeme Gott + * FIXED: Played sounds constantly in Ubuntu 10.04. + 2012-10-14 Graeme Gott * FIXED: Could drag scenes in Read-Only files. * FIXED: Could insert symbols in Read-Only files. diff --git a/src/document.cpp b/src/document.cpp index 24589b7f..17c54c08 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -147,6 +147,18 @@ namespace setOverwriteMode(!overwriteMode()); } else { QTextEdit::keyPressEvent(event); + + // Play sound effect + int key = event->key(); + if (!(event->modifiers().testFlag(Qt::ControlModifier)) && + !(event->modifiers().testFlag(Qt::AltModifier)) && + !(event->modifiers().testFlag(Qt::MetaModifier))) { + if ((key == Qt::Key_Return) || (key == Qt::Key_Enter)) { + Sound::play(Qt::Key_Enter); + } else if ((key < Qt::Key_Escape) || (key == Qt::Key_unknown)) { + Sound::play(Qt::Key_Any); + } + } } } @@ -1039,17 +1051,8 @@ void Document::updateWordCount(int position, int removed, int added) } } - // Play a sound on keypress - int block_count = m_text->document()->blockCount(); - if (added) { - if ((m_cached_block_count < block_count) && (m_cached_block_count > 0)) { - Sound::play(Qt::Key_Enter); - } else { - Sound::play(Qt::Key_Any); - } - } - // Clear cached stats if amount of blocks or current block has changed + int block_count = m_text->document()->blockCount(); int current_block = m_text->textCursor().blockNumber(); if (m_cached_block_count != block_count || m_cached_current_block != current_block) { m_cached_stats.clear(); From ed6073735617f099ba500dc651c9ea438de4a717 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 17 Nov 2012 18:18:18 +0000 Subject: [PATCH 086/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index c144f529..27735e4e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.4.0.2012.11.04-1) unstable; urgency=low + + * merge upstream bug fixes on branch release-1.4 + - FIXED: Played sounds constantly in Ubuntu 10.04. + + -- Barak A. Pearlmutter Sat, 17 Nov 2012 18:17:59 +0000 + focuswriter (1.4.0.2012.10.15-1) unstable; urgency=low * merge upstream bug fixes on branch release-1.4 From 155bd1af0737a4088956aad36eecc9d41375eb79 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Nov 2012 13:23:03 -0500 Subject: [PATCH 087/630] Sync translations with Transifex. --- CREDITS | 3 + ChangeLog | 3 + focuswriter.pro | 3 + translations/focuswriter_ca.ts | 318 ++--- translations/focuswriter_cs.qm | Bin 32077 -> 32067 bytes translations/focuswriter_cs.ts | 318 ++--- translations/focuswriter_da.ts | 310 ++--- translations/focuswriter_de.ts | 314 +++-- translations/focuswriter_el.ts | 318 ++--- translations/focuswriter_en.ts | 310 ++--- translations/focuswriter_es.qm | Bin 33780 -> 33698 bytes translations/focuswriter_es.ts | 436 +++---- translations/focuswriter_es_MX.ts | 318 ++--- translations/focuswriter_fi.ts | 310 ++--- translations/focuswriter_fr.ts | 310 ++--- translations/focuswriter_he.qm | Bin 0 -> 29368 bytes translations/focuswriter_he.ts | 2027 ++++++++++++++++++++++++++++ translations/focuswriter_hu.ts | 318 ++--- translations/focuswriter_it.ts | 318 ++--- translations/focuswriter_ja.ts | 310 ++--- translations/focuswriter_nl.ts | 310 ++--- translations/focuswriter_pl.ts | 310 ++--- translations/focuswriter_pt.ts | 310 ++--- translations/focuswriter_pt_BR.ts | 310 ++--- translations/focuswriter_ro.qm | Bin 0 -> 32554 bytes translations/focuswriter_ro.ts | 2028 +++++++++++++++++++++++++++++ translations/focuswriter_ru.ts | 310 ++--- translations/focuswriter_sk.ts | 310 ++--- translations/focuswriter_sv.ts | 318 ++--- translations/focuswriter_tr.qm | Bin 0 -> 26784 bytes translations/focuswriter_tr.ts | 2026 ++++++++++++++++++++++++++++ translations/focuswriter_uk.ts | 322 ++--- translations/focuswriter_zh_CN.qm | Bin 18855 -> 21722 bytes translations/focuswriter_zh_CN.ts | 398 +++--- 34 files changed, 9641 insertions(+), 3555 deletions(-) create mode 100644 translations/focuswriter_he.qm create mode 100644 translations/focuswriter_he.ts create mode 100644 translations/focuswriter_ro.qm create mode 100644 translations/focuswriter_ro.ts create mode 100644 translations/focuswriter_tr.qm create mode 100644 translations/focuswriter_tr.ts diff --git a/CREDITS b/CREDITS index ed49acec..f4bd56d4 100644 --- a/CREDITS +++ b/CREDITS @@ -15,15 +15,18 @@ Translators * Israel Buitrón (es_MX) * Aarni (fi) * Jérôme Borme (fr) +* Isratine Citizen (he) * Zoltán Adamek (hu) * Robert Borst (nl) * Jakub Kowalski (pl) * Jérôme Borme (pt) * Márcio Massula Jr. (pt_BR) +* Jaff (Oprea Nicolae) (ro) * Danila Evstifeyev (ru) * Dmitriy Kodanev (ru) * Jan Gallik (sk) * Daniel Nylander (sv) +* Ülgen (tr) * Sergiy Gavrylov (uk) Icons diff --git a/ChangeLog b/ChangeLog index 98d1821c..e82d0cfd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-18 Graeme Gott + * Sync translations with Transifex. + 2012-11-04 Graeme Gott * FIXED: Played sounds constantly in Ubuntu 10.04. diff --git a/focuswriter.pro b/focuswriter.pro index 047a2ae6..04d9f3e7 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -176,6 +176,7 @@ TRANSLATIONS = translations/focuswriter_ca.ts \ translations/focuswriter_es_MX.ts \ translations/focuswriter_fi.ts \ translations/focuswriter_fr.ts \ + translations/focuswriter_he.ts \ translations/focuswriter_hu.ts \ translations/focuswriter_it.ts \ translations/focuswriter_ja.ts \ @@ -183,9 +184,11 @@ TRANSLATIONS = translations/focuswriter_ca.ts \ translations/focuswriter_pl.ts \ translations/focuswriter_pt.ts \ translations/focuswriter_pt_BR.ts \ + translations/focuswriter_ro.ts \ translations/focuswriter_ru.ts \ translations/focuswriter_sk.ts \ translations/focuswriter_sv.ts \ + translations/focuswriter_tr.ts \ translations/focuswriter_uk.ts \ translations/focuswriter_zh_CN.ts diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index a8149186..445ed636 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Disculpes - + Unable to save '%1'. No s'ha pogut desar '%1'. - + Save File As Anomena i desa - - + + Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - + Rename File Reanomena el fitxer - + Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text enriquit (*.rtf) - + All Files (*) Tots els fitxers (*) @@ -242,7 +242,7 @@ Sorry - Disculpes + Disculpes @@ -341,7 +341,7 @@ Sorry - Disculpes + Disculpes @@ -684,12 +684,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -794,7 +794,7 @@ Sorry - Disculpes + Disculpes @@ -1232,7 +1232,7 @@ Sorry - Disculpes + Disculpes @@ -1396,631 +1396,631 @@ Window - + Loading themes - + Loading sounds - - + + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + %1% of daily goal - - + + Opening %1 - + Question - + Save changes? - - + + (Untitled %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_cs.qm b/translations/focuswriter_cs.qm index 9dd07ae7649d624eed2928476ae0eab401c4a674..58c8e637b3ba795d8b42f1477d1188e7d01911e5 100644 GIT binary patch delta 1389 zcmY+DZBSHY6vzM1y?1x-?%iEo6b%wrP+a82)p%J}QAP!gK~a2(SOi;v1wmm`P*c)acl(FUYNodv2-TV2xtpvoa_xjJL#uB+~;@CnRCxM&-tJG z)d*`JVQ)=gK2-r`?J%&M1MADH63r$DgqG{Ts{N2YxCvxjs4BH3EkS6*D?myeLR%$Z zr5T|&f{81L34m@XLI>xN{U^dI&H$C{Mz;5sB z2C^bpUyurL`}1{z)s!zdJud@=^+K+TqOxxB8o{zpFEqx~Q0v7)%cb{$7utl657kp^ zK|-r5l3KD0t^5K-mkT%JXVW11h3>X&z!@Rj=?wy2Tp;vVoWQaq;rlfAfNe~wHnak+?L0u5?3^l{Iy?-d zClen4I7%ELdnfTBv7R_a?2=9$VZ_Ho0dRy9sgmPcBF#BNB8Cy?62pmE#0X*quaV5G zj<-k_ZNKz+T@m>Pc%Nit*SN3hQ@^vS)9vj*;w4p69H(iWQ8j&1Ldsm^Ln_;%tLjPF z=YhqNdh)%WXm*wAXVwh@D=w?8$H<=b9xpiFAv!JC}8s~xnUJe zXhXQ%zNQ+;ZRC9#i(i}kyI&VD!KziQC)HDHw3DtbBo#V%u)NHatgTCZZe8!L4S;5^u5WQU)fahy z*0Lx>8K)w(ryW<8pO_7VmnyChsz3dLvZ<4H+C8T1u)hYx<|sQS768%d%I=_2`V&N@ z{zsZ*j*TDCuAJ4YeB-4ZGf1*=?v1h=a?li;LcfF1N;{yJ! zVq;r)w-U}`ngxA`C9(v?n1&+c(lbPFZnATpoLlK_JDlVnBmXwCO0kj7t<9N{M}n6u zMGAdX%nWoE;@;Cx_AG_wP|!9w+1@8f|4Uy;o+4zE{r^Pv^uL+v4pp1k9Fx&4s2mhE Kvw3{h0`tE*#FSzH delta 1399 zcmYk5dr(w$6vw~6d+*-8ckk}ns-WvY3o0#7*F;#+gis#CjJ#ALKp^BLVz3HC5t98k@@r!5Yo^ItP~OQKE*P=vbzv+mi((bn;*omcXz=S{+XjF< zCmWir16*@?hTyPl5(+#Uf$~nFxP+qeZt_;azRg=W8re#%Zx(t^9RyxFFMPS{5VaO6 zxJ$yRrR9Q~pQPv};cCo08pQ9yz?njzz$sk6JsWsAQ5dur0EtP$*eG>WY7r(p(|}j* zh*JZbfc#BjsFCuCSHy)!hUq*r#i;&4VE%}h*G7K6M10==3$ZJcVpDs?uEu)6>#^v* zb^!=DF7`h*Qx7t46rHSyd&C&4L)x?JGa$TM;@NWm=Y-T^aswsXxvw;%AW%BibQj3V zApQ+tFL9jgw}_93ox};^4e8i!24t&5ffz}oO4+xFH0K;MF@(5;7)o463?sJkR>{T= z^B&2r-jlv-t03PPACesG0{7B=V|D9}_w@nsr*vH}aGF-9uIsC6Ql^iO>YTCtvUlML zV3{P(xb+*&?jw0-#t4vnPIl}kf9_Iw!P^nk^<8ERW5O>^EalU(b~w*-NUF zyNuC~?gFd!@GyhTzuZ_|Li<;mVXP5O1J6-gY@t*|NK;^YV+V9v*=87%|qwT&^@l^A8Srl z%LlYj_F}hS477*)p#o(nh9B0`vkKMpR*AK!V#`p2Qu Document - - - - + + + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - + Save File As Uložit soubor jako - - + + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Reload File Nahrát soubor znovu - + Reload the file %1 from disk? Nahrát soubor %1 z disku? - + All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - + Reload Nahrát znovu - + Plain Text (*.txt) Prostý text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -638,7 +638,7 @@ Not a supported RTF file. - To nie jest obsługiwany plik RTF. + Toto není podporovaný soubor RTF. @@ -684,12 +684,12 @@ Shift+F4 - + Show scene list (%1) Ukázat seznam scén (%1) - + Hide scene list (%1) Skrýt seznam scén (%1) @@ -1390,637 +1390,637 @@ Unexpectedly reached end of file. - Niespodziewanie osiągnięto koniec pliku. + Neočekávaně dosaženo konce souboru. Window - + Loading themes Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - - + + Untitled Bez názvu - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - + Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slova: %L1 - - + + %1% of daily goal %1% z denního cíle - - + + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - - + + (Untitled %1) (Bez názvu %1) - + Switch to Next Document Přepnout na další dokument - + Switch to Previous Document Přepnout na předchozí dokument - + Switch to First Document Přepnout na první dokument - + Switch to Last Document Přepnout na poslední dokument - + Switch to Document %1 Přepnout na dokument %1 - + Loading settings Nahrávají se nastavení - + Emergency cache is not writable. Pohotovostní vyrovnávací paměť není zapisovatelná - - + + Warning Varování - + FocusWriter was not shut down cleanly. FocusWriter nebyl vypnut čistě. - + Restore from the emergency cache? Obnovit z pohotovostní vyrovnávací paměti? - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + Text Files (%1);;All Files (*) Textové soubory (%1);;Všechny soubory (*) - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit - &Úpravy + Úp&ravy - + &Undo &Zpět - + &Redo - &Znovu + Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... - + Some files were unsupported and could not be opened. Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index f1955077..18369fda 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - + Save File As Gem fil som - - + + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Reload File Genindlæs fil - + Reload the file %1 from disk? Genindlæs filen %1 fra disk? - + All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - + Reload Genindlæs - + Plain Text (*.txt) Ren tekst (*.txt) - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) @@ -683,12 +683,12 @@ Shift+F4 - + Show scene list (%1) Vis liste over scener (%1) - + Hide scene list (%1) Skjul liste over scener (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Indlæser temaer - + Loading sounds Indlæser lyde - - + + Untitled Uden titel - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - + Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - + Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - - + + Characters: %L1 / %L2 Tegn: %L1 / %L2 - - + + Pages: %L1 Sider: %L1 - - + + Paragraphs: %L1 Afsnit: %L1 - - + + Words: %L1 Ord: %L1 - - + + %1% of daily goal %1% af dagligt mål - - + + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - - + + (Untitled %1) (Uden titel%1) - + Switch to Next Document Skift til næste dokument - + Switch to Previous Document Skift til tidligere dokument - + Switch to First Document Skift til første dokument - + Switch to Last Document Skift til sidste dokument - + Switch to Document %1 Skift til dokument %1 - + Loading settings Indlæser indstillinger - + Emergency cache is not writable. Der kan ikke skrives til reservecachen. - - + + Warning Advarsel - + FocusWriter was not shut down cleanly. FocusWriter blev ikke lukket korrekt. - + Restore from the emergency cache? Gendan fra reservecache? - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + Text Files (%1);;All Files (*) Tekstfiler (%1);;Alle Filer (*) - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog - + Some files were unsupported and could not be opened. Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 8f93095a..ea1a4d4f 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - + Save File As Datei speichern unter - - + + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Reload File Datei neu laden - + Reload the file %1 from disk? Die Datei %1 von der Festplatte neu laden? - + All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - + Reload Neu laden - + Plain Text (*.txt) nur Text (*.txt) - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) @@ -388,10 +388,6 @@ The dictionary "%1" already exists. Do you want to replace it? Das Wörterbuch %1 existiert bereits. Möchten Sie es ersetzen? - - Remove current dictionary? - Aktuelles Wörterbuch entfernen? - Daily Goal @@ -687,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -1399,631 +1395,631 @@ Window - + Loading themes Themen werden geladen - + Loading sounds Sounds werden geladen - - + + Untitled Unbenannt - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Einfache Vollbild Textverarbeitung - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - + Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - + Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - - + + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - - + + Pages: %L1 Seiten: %L1 - - + + Paragraphs: %L1 Absätze: %L1 - - + + Words: %L1 Wörter: %L1 - - + + %1% of daily goal %1% des Tagesziels - - + + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - - + + (Untitled %1) (Unbenannt %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Einstellungen werden geladen - + Emergency cache is not writable. Der Sicherheitsspeicher ist nicht beschreibbar. - - + + Warning Warnung - + FocusWriter was not shut down cleanly. FocusWriter wurde nicht ordnungsgemäß beendet. - + Restore from the emergency cache? Sicherheitskopie wiederherstellen? - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + Text Files (%1);;All Files (*) Text-Dateien (%1);;Alle Dateien (*) - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + S&ymbols... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph &Absatz - + Focus Paragraph - + &Help &Hilfe - + Application &Language... &Sprache... - + Some files were unsupported and could not be opened. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index aa5caf9e..5f48b9fc 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το '%1'. - + Save File As Αποθήκευση αρχείου ως - - + + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το '%1'. - + Rename File Μετονομασία αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Απλό κείμενο (*.txt) - + Question - Ερώτηση + Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) Κείμενο OpenDocument (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -941,7 +941,7 @@ Name: - Όνομα: + Όνομα: @@ -1122,7 +1122,7 @@ Single - Μονά + Μονά @@ -1132,7 +1132,7 @@ Double - Διπλά + Διπλά @@ -1395,631 +1395,631 @@ Window - + Loading themes Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - - + + Untitled Χωρίς τίτλο - + Open File Άνοιγμα αρχείου - + About FocusWriter Περί του FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - - + + Pages: %L1 Σελίδες: %L1 - - + + Paragraphs: %L1 Παράγραφοι: %L1 - - + + Words: %L1 Λέξεις: %L1 - - + + %1% of daily goal %1% του ημερήσιου στόχου - - + + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - - + + (Untitled %1) (Χωρίς τίτλο %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Φορτώνουν ρυθμίσεις - + Emergency cache is not writable. Δεν μπορεί να γίνει εγγραφή στην cache εκτάκτου ανάγκης. - - + + Warning Προειδοποίηση - + FocusWriter was not shut down cleanly. Το FocusWriter δεν τερματίστηκε σωστά. - + Restore from the emergency cache? Να γίνει επαναφορά από την cache εκτάκτου ανάγκης; - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + Text Files (%1);;All Files (*) Αρχεία κειμένου (%1);;Όλα τα αρχεία (*) - + '%1' is newer than the cached copy. Το '%1' είναι νεότερο από το αντίγραφο στην cache. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση περιόδων λειτουργίας - + New Session Νέα περίοδος λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Επιλογή όλ&ων - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript Δεί&κτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη γραφή - + Ri&ght to Left Block Αριστερόστρο&φη γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &επόμενου - + Find Pre&vious Εύρεση &προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + S&ymbols... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση γραμμής εργα&λείων - + Show &Menu Icons Εμφάνιση εικονιδίων &μενού - + F&ocused Text - + &Fullscreen Πλήρης οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Βοήθεια - + Application &Language... &Γλώσσα εφαρμογής... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Ταυτότητα - + About &Qt &Περί του Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index e2ada6da..5cd99ab3 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes - + Loading sounds - - + + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + %1% of daily goal - - + + Opening %1 - + Question - + Save changes? - - + + (Untitled %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_es.qm b/translations/focuswriter_es.qm index 959afd32921c2ded3aa20a9a305e802988c89722..c9e20d9db277afc99cd90e36afb0712a1d570542 100644 GIT binary patch delta 4205 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 xVfBBf4}|x_78aGJKs6yectzdo^!sp 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 diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 55d8e36a..2f4fe780 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - Advertencia + Aviso - + Unable to save '%1'. - No se puede guardar "%1". + No se puede guardar «%1». - + Save File As - Guardar como + Guardar archivo como - - + + Unable to overwrite '%1'. - No se puede sobrescribir "%1". + No se puede sobrescribir «%1». - + Rename File - Cambiar el nombre del archivo + Renombrar el archivo - + Unable to rename '%1'. - No se puede cambiar el nombre de "%1". + No se puede renombrar «%1». - + Reload File Volver a cargar el archivo - + Reload the file %1 from disk? ¿Desea volver a cargar el archivo %1 del disco? - + All unsaved changes will be lost. Se perderán todos los cambios no guardados. - + Reload Volver a cargar - + Plain Text (*.txt) Texto plano (*.txt) - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -241,7 +241,7 @@ Sorry - Advertencia + Aviso @@ -260,7 +260,7 @@ Check Spelling... - Revisar la ortografía... + Revisar la ortografía… @@ -340,32 +340,32 @@ Sorry - Advertencia + Aviso Unable to open archive. - No se puede abrir el archivo. + No se puede abrir el archivador. Unable to read archive metadata. - No se pueden leer los metadatos del archivo. + No se pueden leer los metadatos del archivador. The archive does not contain a usable dictionary. - El archivo no contiene un diccionario compatible. + El archivador no contiene un diccionario compatible. Unable to open file '%1'. - No se puede abrir el archivo "%1". + No se puede abrir el archivo «%1». Unable to close file '%1'. - No se puede cerrar el archivo "%1". + No se puede cerrar el archivo «%1». @@ -386,7 +386,7 @@ The dictionary "%1" already exists. Do you want to replace it? - El diccionario "%1". ya existe. ¿Desea reemplazarlo? + El diccionario «%1» ya existe. ¿Quiere reemplazarlo? @@ -427,7 +427,7 @@ Smooth fonts - Suavizar fuentes + Suavizar tipografías @@ -642,17 +642,17 @@ Unable to open archive. - No se puede abrir el archivo. + No se puede abrir el archivador. Unable to open file '%1'. - No se puede abrir el archivo "%1". + No se puede abrir el archivo «%1». Unable to close file '%1'. - No se puede cerrar el archivo "%1". + No se puede cerrar el archivo «%1». @@ -660,7 +660,7 @@ Ctrl+Shift+Down - Control + Mayús + Abajo + Ctrl + Mayús + Abajo @@ -670,7 +670,7 @@ Ctrl+Shift+Up - Control + Mayús + Arriba + Ctrl + Mayús + Arriba @@ -683,12 +683,12 @@ Mayús + F4 - + Show scene list (%1) Mostrar la lista de escenas (%1) - + Hide scene list (%1) Ocultar la lista de escenas (%1) @@ -719,7 +719,7 @@ Default - Predeterminada + Predeterminado @@ -732,7 +732,7 @@ S&essions - Ses&iones + &Sesiones @@ -742,7 +742,7 @@ Rename - Cambiar nombre + Renombrar @@ -772,7 +772,7 @@ Rename Session - Cambiar el nombre de la sesión + Renombrar la sesión @@ -782,7 +782,7 @@ Delete selected session? - ¿Desea eliminar la sesión seleccionada? + ¿Quiere eliminar la sesión seleccionada? @@ -793,7 +793,7 @@ Sorry - Advertencia + Aviso @@ -808,7 +808,7 @@ Ctrl+Shift+N - Ctrl + Mayús + N + Ctrl+Mayús+N @@ -818,7 +818,7 @@ Ctrl+Shift+M - Ctrl + Mayús + M + Ctrl+Mayús+M @@ -883,7 +883,7 @@ C&hange All - Ca&mbiar todas + Cambiar t&odas @@ -1102,7 +1102,7 @@ Font: - Fuente: + Tipo de letra: @@ -1112,7 +1112,7 @@ Spacings - Espaciados + Espaciado @@ -1210,7 +1210,7 @@ Remove selected theme? - ¿Desea eliminar el tema seleccionado? + ¿Quiere eliminar el tema seleccionado? @@ -1231,7 +1231,7 @@ Sorry - Advertencia + Aviso @@ -1260,7 +1260,7 @@ Delete timer? - ¿Desea eliminar la alarma? + ¿Quiere eliminar la alarma? @@ -1371,7 +1371,7 @@ Cancel editing timers? - ¿Desea cancelar la edición de las alarmas? + ¿Quiere cancelar la edición de las alarmas? @@ -1395,631 +1395,631 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesador de textos simple a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + %1% of daily goal %1% del objetivo diario - - + + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - - + + (Untitled %1) (Sin título %1) - + Switch to Next Document Cambiar al documento siguiente - + Switch to Previous Document Cambiar al documento anterior - + Switch to First Document Cambiar al primer documento - + Switch to Last Document Cambiar al último documento - + Switch to Document %1 Cambiar al documento %1 - + Loading settings Cargando configuración - + Emergency cache is not writable. No se puede escribir en la caché de emergencia. - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no se cerró correctamente. - + Restore from the emergency cache? ¿Desea restaurarlo desde la caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + Text Files (%1);;All Files (*) Archivos de texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... - Guardar c&omo... + G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... - Im&primir... + &Imprimir... - + &Close - Ce&rrar + C&errar - + &Quit - Sa&lir + Sali&r - + Ctrl+Q - Ctrl+Q + Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo - Re&hacer + &Rehacer - + Cu&t - Co&rtar + C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All - Seleccionar &todo + &Seleccionar todo - + Select &Scene - Seleccionar &Escena + Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold - Ne&grita + &Negrita - + &Italic - C&ursiva + &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K - Ctrl+K + Ctrl + K - + Sup&erscript - Supe&ríndice + Su&períndice - + Ctrl+^ - Ctrl+^ + Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center - &Centrar + Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent - Dis&minuir sangría + &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent - A&umentar sangría + &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block - Escribir de &izquierda a derecha + &Escribir de izquierda a derecha - + Ri&ght to Left Block - Escri&bir de derecha a izquierda + Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes - Comillas &tipográficas + &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + S&ymbols... - Símb&olos + Símb&olos… - + &Settings &Configuración - + Show &Toolbar - Mostrar barra de &herramientas + Mo&strar barra de herramientas - + Show &Menu Icons - Mostrar &iconos del menú + M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen - Pantalla &completa + &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize - Mi&nimizar + &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help - A&yuda + &Ayuda - + Application &Language... - Idioma de la &aplicación... + &Idioma de la aplicación... - + Some files were unsupported and could not be opened. Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index bfe194eb..369a1d0e 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Texto Plano (*.txt) - + Question - Pregunta + Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -941,7 +941,7 @@ Name: - Nombre: + Nombre: @@ -1122,7 +1122,7 @@ Single - Sencillas + Sencillas @@ -1132,7 +1132,7 @@ Double - Dobles + Dobles @@ -1395,631 +1395,631 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + %1% of daily goal %1% de la meta diaria - - + + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - - + + (Untitled %1) (Sin título %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Cargando preferencias - + Emergency cache is not writable. No se puede escribir el caché de emergencia - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no fue cerrado correctamente - + Restore from the emergency cache? ¿Restaurar el caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + Text Files (%1);;All Files (*) Archivos de Texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleccionar &todo - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + S&ymbols... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help A&yuda - + Application &Language... &Idioma de aplicación... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index fb70477a..9efc97a0 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Pahoittelut - + Unable to save '%1'. %1 - tallentaminen epäonnistui. - + Save File As Tallenna nimellä - - + + Unable to overwrite '%1'. Ei voitu korvata "%1". - + Rename File Uudelleennimeä - + Unable to rename '%1'. Ei voitu nimetä uudelleen "%1". - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Teksti (*.txt) - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Ladataan teemoja - + Loading sounds Ladataan ääniä - - + + Untitled Nimetön - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + FocusWriter FocusWriter - + A simple fullscreen word processor Yksinkertainen kokoruudun tekstinkäsittelyohjelma - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssin alaisena - + Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - + Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin alaisena - - + + Characters: %L1 / %L2 Kirjaimet: %L1 / %L2 - - + + Pages: %L1 Sivut: %L1 - - + + Paragraphs: %L1 Kappaleet: %L1 - - + + Words: %L1 Sanat: %L1 - - + + %1% of daily goal %1% päivittäisestä tavoiteesta - - + + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - - + + (Untitled %1) (Nimetön %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Ladataan asennuksia - + Emergency cache is not writable. Hätävälimuistia ei voida kirjoittaa. - - + + Warning Varoitus - + FocusWriter was not shut down cleanly. FocusWriteriä ei suljettu oikein. - + Restore from the emergency cache? Palautetaanko tilanne hätävälimuistista? - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin Vain Luku -tilassa - + Text Files (%1);;All Files (*) Tekstitiedostot (%1);;Kaikki tiedostot (*) - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Ei pystytty lataamaan kirjoituskoneääniä. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa... - + Reloa&d - + &Save &Tallenna - + Save &As... Tallenna &nimellä... - + &Rename... &Nimeä uudelleen... - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... &Tulosta... - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t Leik&kaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &Muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse kaikki - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Muo&toile - + &Bold &Lihavoitu - + &Italic &Kursivoitu - + &Underline &Alleviivattu - + Stri&kethrough Yli&viivattu - + Ctrl+K Ctrl+K - + Sup&erscript Ylä&indeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vasemm&alta oikealle - + Ri&ght to Left Block Oike&alta vasemmalle - + &Tools &Työkalut - + &Find... &Etsi... - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa... - + Ctrl+R Ctrl+R - + Smart &Quotes Alykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus... - + F7 F7 - + &Timers... &Ajastimet... - + S&ymbols... - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalut - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen &Koko näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... &Teemat... - + &Preferences... &Asetukset... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph &Kappale - + Focus Paragraph - + &Help &Ohje - + Application &Language... Sovelluksen &kieli... - + Some files were unsupported and could not be opened. - + &Off P&ois - + One &Line &Yksi rivi - + &Three Lines &Kolme riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index d754a4a2..e8d65250 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - + Save File As Enregistrer sous - - + + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Reload File Recharger le fichier - + Reload the file %1 from disk? Voulez-vous recharger le fichier %1 depuis le disque ? - + All unsaved changes will be lost. Toutes les modifications non sauvegardées seront perdues. - + Reload Rechargement - + Plain Text (*.txt) Texte brut (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? - + OpenDocument Text (*.odt) Texte OpenDocument (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) @@ -683,12 +683,12 @@ Maj+F4 - + Show scene list (%1) Afficher la liste des scènes (%1) - + Hide scene list (%1) Masquer la liste des scènes (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Chargement des thèmes - + Loading sounds Chargement des sons - - + + Untitled Sans titre - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un traitement de texte plein écran simple - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caractères : %L1 / %L2 - - + + Pages: %L1 Pages : %L1 - - + + Paragraphs: %L1 Paragraphes : %L1 - - + + Words: %L1 Mots : %L1 - - + + %1% of daily goal %1 % de l'objectif quotidien - - + + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - - + + (Untitled %1) (Sans titre %1) - + Switch to Next Document Basculer vers le document suivant - + Switch to Previous Document Basculer vers le document précédent - + Switch to First Document Basculer vers le premier document - + Switch to Last Document Basculer vers le dernier document - + Switch to Document %1 Basculer vers le document %1 - + Loading settings Chargement des préférences - + Emergency cache is not writable. Le cache d'urgence n'est pas accessible en écriture. - - + + Warning Avertissement - + FocusWriter was not shut down cleanly. FocusWriter ne s'est pas fermé correctement. - + Restore from the emergency cache? Récupérer les informations depuis le cache d'urgence ? - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + Text Files (%1);;All Files (*) Fichiers texte (%1);;Tous les fichiers (*) - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... - + Some files were unsupported and could not be opened. Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm new file mode 100644 index 0000000000000000000000000000000000000000..b30cec09d94cf9ba9d8cd2846a341a4755b15925 GIT binary patch literal 29368 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 + + + + Alert + + + Close (%1) + לסגור (%1) + + + + Collapse + לצמצם + + + + Expand + להרחיב + + + + AlertLayer + + + Dismiss Alert + סילוק אתראה + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + צר לי + + + + Unable to save '%1'. + לא ניתן לשמור '%1'. + + + + Save File As + שמירת קובץ בשם + + + + + Unable to overwrite '%1'. + לא ניתן להחליף את '%1'. + + + + Rename File + שינוי שם קובץ + + + + Unable to rename '%1'. + לא ניתן לשנות שם '%1'. + + + + Reload File + טעינת קובץ מחדש + + + + Reload the file %1 from disk? + טעינת הקובץ %1 מחדש מתוך כונן? + + + + All unsaved changes will be lost. + כל השינויים שלא נשמרו יאבדו. + + + + Reload + טעינה מחדש + + + + Plain Text (*.txt) + תמליל גלוי ‪(*.txt) + + + + Question + שאלה + + + + Saving as plain text will discard all formatting. Discard formatting? + שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? + + + + OpenDocument Text (*.odt) + תמליל ‫OpenDocument ‫(‭*.odt‬) + + + + Rich Text (*.rtf) + תמליל עשיר ‪(*.rtf) + + + + All Files (*) + כל הקבצים (*) + + + + DocumentWatcher + + + File Changed + קובץ שונה + + + + The file %1 was changed by another program. + הקובץ %1 שונה על ידי תוכנית אחרת. + + + + Do you want to reload the file? + האם ברצונך להטעין את הקובץ מחדש? + + + + Reload + טעינה מחדש + + + + Ignore + התעלמות מן אירוע + + + + File Deleted + קובץ נמחק + + + + The file %1 was deleted by another program. + הקובץ %1 נמחק על ידי תוכנית אחרת. + + + + Do you want to save or close the file? + האם ברצונך לשמור או לסגור את הקובץ? + + + + FindDialog + + + Search for: + חיפוש עבור: + + + + Replace with: + החלפה עם: + + + + Ignore case + התעלמות מרישיות + + + + Whole words only + כל המילים בלבד + + + + Regular expressions + ביטויים רגולריים + + + + Search up + חיפוש מעלה + + + + Search down + חיפוש מטה + + + + &Find + &מציאה + + + + &Replace + &החלפה + + + + Replace &All + החלפה &מוחלטת + + + + Find + מציאה + + + + Replace + החלפה + + + + Replace %n instance(s)? + + להחליף מאורע %n? + להחליף %n מאורעות? + + + + + Question + שאלה + + + + + Sorry + צר לי + + + + + Phrase not found. + צירוף מילים לא נמצא. + + + + Highlighter + + + Add + הוספה + + + + Check Spelling... + בדיקת איות... + + + + (No suggestions found) + (לא נמצאו הצעות) + + + + ImageButton + + + Open Image + פתיחת תמונה + + + + Images(%1) + תמונות(%1) + + + + LocaleDialog + + + Select application language: + בחירת שפת יישום: + + + + <System Language> + <שפת מערכת> + + + + Note + הערה + + + + Please restart this application for the change in language to take effect. + נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. + + + + PreferencesDialog + + + Preferences + העדפות + + + + General + כללי + + + + Statistics + סטטיסטיקה + + + + Toolbar + סרגל כלים + + + + Spell Checking + בדיקת איות + + + + Select Dictionary + בחירת מילון + + + + + Sorry + צר לי + + + + Unable to open archive. + לא ניתן לפתוח ארכיון. + + + + Unable to read archive metadata. + לא ניתן לקרוא metadata של ארכיון. + + + + The archive does not contain a usable dictionary. + הארכיון לא מכיל מילון שמיש. + + + + Unable to open file '%1'. + לא ניתן לפתוח קובץ '%1'. + + + + Unable to close file '%1'. + לא ניתן לסגור קובץ '%1'. + + + + + Question + שאלה + + + + Shortcuts + קיצורי דרך + + + + One or more shortcuts conflict. Do you wish to proceed? + התנגשות קיצור דרך אחת או יותר. האם ברצונך להמשיך? + + + + The dictionary "%1" already exists. Do you want to replace it? + המילון "%1" כבר קיים. האם ברצונך להחליפו? + + + + Daily Goal + יעד יומי + + + + None + בלי + + + + Minutes: + דקות: + + + + + Words: + מילים: + + + + Editing + עריכה + + + + Always vertically center + תמיד ממורכז במאונך + + + + Block insertion cursor + סמן שיבוץ בלוק + + + + Smooth fonts + גופנים מלוטשים + + + + Typewriter sounds + קולות מכונת־כתיבה + + + + Smart quotes: + מרכאות חכמות: + + + + Double + כפולות + + + + Single + בודדות + + + + Scenes + מקטעים + + + + Divider: + מפריד: + + + + Saving + שמירה + + + + Automatically save changes + שמירת שינויים אוטומטית + + + + Remember cursor position + זכירת מיקום סמן + + + + Contents + תכנים + + + + Word count + ספירת מילים + + + + Page count + ספירת עמודים + + + + Paragraph count + ספירת פסקאות + + + + Character count + ספירת תווים + + + + Page Size + גודל עמוד + + + + Characters: + תווים: + + + + Paragraphs: + פסקאות: + + + + Word Count Algorithm + אלגוריתם ספירת מילים + + + + Detect word boundaries + איתור גבולות מילה + + + + Divide character count by six + חילוק ספירת תו בשש (6) + + + + Style + סגנון + + + + Icons Only + צלמיות בלבד + + + + Text Only + תמליל בלבד + + + + Text Alongside Icons + תמליל לצד צלמיות + + + + Text Under Icons + תמליל תחת צלמיות + + + + Text Position: + מיקום תמליל: + + + + Actions + פעולות + + + + Move Up + הזזה מעלה + + + + Move Down + הזזה מטה + + + + Add Separator + הוספת חוצץ + + + + Command + פקודה + + + + Shortcut + קיצור דרך + + + + Action + פעולה + + + + Check spelling as you type + בדיקת איות בעת הקלדה + + + + Ignore words in UPPERCASE + התעלמות ממילים עיליות + + + + Ignore words with numbers + התעלמות ממילים עם אותיות + + + + Language + שפה + + + + + Add + הוספה + + + + Remove + הסרה + + + + Personal Dictionary + מילון אישי + + + + Reader + + + + Not a supported RTF file. + קובץ RTF שלא נתמך. + + + + Unable to open archive. + לא ניתן לפתוח ארכיון. + + + + Unable to open file '%1'. + לא ניתן לפתוח קובץ '%1'. + + + + Unable to close file '%1'. + לא ניתן לסגור קובץ '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+מטה + + + + Move Scenes Up + הזזת מקטעים מעלה + + + + Ctrl+Shift+Up + Ctrl+Shift+מעלה + + + + Toggle Scene List + הצגת/הסתרת רשימת מקטע + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + הצגת רשימת מקטע (%1) + + + + Hide scene list (%1) + הסתרת רשימת מקטע (%1) + + + + Filter + סינון + + + + Move Scenes Down + הזזת מקטעים מטה + + + + Resize scene list + שינוי גודל רשימת מקטע + + + + Session + + + + + + + + + Default + ברירת מחדל + + + + SessionManager + + + Manage Sessions + ניהול סשנים + + + + S&essions + ס&שנים + + + + New + חדש + + + + Rename + שינוי שם + + + + Clone + שיבוט + + + + Delete + מחיקה + + + + Switch To + החלפה אל + + + + New Session + סשן חדש + + + + Clone Session + שיבוט סשן + + + + Rename Session + שינוי שם סשן + + + + Question + שאלה + + + + Delete selected session? + מחיקת סשן נבחר? + + + + + Session name: + שם סשן: + + + + Sorry + צר לי + + + + The requested session name is already in use. + שם הסשן המבוקש כבר מצוי בשימוש. + + + + &New... + &חדש... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &ניהול... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + טיהור + + + + Reset to Default + איפוס אל ברירת מחדל + + + + + Shortcut: + קיצור דרך: + + + + SmartQuote + + + Replacing quotation marks... + מחליף כעת סימני מרכאות... + + + + Please Wait + נא להמתין + + + + SpellChecker + + + Check Spelling + בדיקת איות + + + + &Add + להו&סיף + + + + &Ignore + להת&עלם + + + + I&gnore All + להתעלם מ&הכל + + + + &Change + ל&שנות + + + + C&hange All + לשנות ה&כל + + + + Not in dictionary: + לא במילון: + + + + Change to: + שינוי אל: + + + + Checking spelling... + בודק כעת איות... + + + + Cancel + ביטול + + + + Please wait + נא להמתין + + + + Spell check complete. + בדיקת איות הושלמה + + + + SymbolsDialog + + + Symbols + סמלים + + + + Recently used symbols + סמלים שנשתמשו לאחרונה + + + + All symbols + כל הסמלים + + + + Details + פרטים + + + + Name: + שם: + + + + Insert + שיבוץ + + + + SymbolsModel + + + Blocks + בלוקים + + + + Scripts + תסריטים + + + + Theme + + + Untitled %1 + ללא כותרת %1 + + + + ThemeDialog + + + Modify Theme + התאמת מוטיב + + + + Name: + שם: + + + + Background + רקע אחורי + + + + No Image + ללא תמונה + + + + Tiled + מרוצף + + + + + Centered + ממורכז + + + + + Stretched + פרוש + + + + Scaled + מתוח + + + + Zoomed + מוקרב + + + + Remove + הסרה + + + + Type: + סוג: + + + + + + Color: + צבע: + + + + Image: + תמונה: + + + + Foreground + רקע קדמי + + + + Opacity + עמימות + + + + + + + pixels + פיקסלים + + + + Left + שמאל + + + + Right + ימין + + + + Position + מיקום + + + + Size: + גודל: + + + + Rounding: + התעגלות: + + + + Margin: + שוליים: + + + + Padding: + ריפוד: + + + + Text + תמליל + + + + Font: + גופן: + + + + Misspelled: + שגיאת כתיב: + + + + Spacings + ריווח + + + + Line Spacing + ריווח שורה + + + + Single + בודדות + + + + 1.5 Lines + 1.5 שורות + + + + Double + כפולות + + + + Proportional + פרופורציונלי + + + + Paragraph Spacing + ריווח פסקאות + + + + Indent First Line: + הזחת שורה ראשונה: + + + + Pixels Above: + פיקסלים תחתונים: + + + + Pixels Below: + פיקסלים תחתונים: + + + + The quick brown fox jumps over the lazy dog + יורם יהודה, צייד הנחשים + + + + ThemeManager + + + Themes + מוטיבים + + + + Add + הוספה + + + + Modify + התאמה + + + + Remove + הסרה + + + + Import + ייבוא + + + + Export + ייצוא + + + + Close + סגירה + + + + Question + שאלה + + + + Remove selected theme? + הסרת מוטיב נבחר? + + + + Import Theme + ייבוא מוטיב + + + + Themes (*.fwtz *.theme) + מוטיבים ‪(*.fwtz *.theme) + + + + Themes (*.fwtz) + מוטיבים ‪(*.fwtz) + + + + + Sorry + צר לי + + + + + A theme already exists with that name. Please enter a new name: + כבר קיים מוטיב עם שם זה. נא להזין שם חדש: + + + + Export Theme + ייצוא מוטיב + + + + Timer + + + <b>%1</b> - %2 + + + + + Question + שאלה + + + + Delete timer? + מחיקת שעון עצר? + + + + <b>Words:</b> %L1 + <b>מילים:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>עמודים:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>פסקאות:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>תווים:</b> %L1 / %L2 + + + + Set Delay + הגדרת שיהוי + + + + Set Time + הגדרת זמן + + + + Delay: + שיהוי: + + + + Time: + זמן: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + אזעקה + + + + Type: + סוג: + + + + Memo: + תזכיר: + + + + Edit + עריכה + + + + Delete + מחיקה + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + אין שעון עצר שמורץ + + + + TimerManager + + + Timers + שעוני עצר + + + + New + חדש + + + + Recent + אחרונים + + + + Question + שאלה + + + + Cancel editing timers? + ביטול עריכת שעוני עצר? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + + + + + Tokenizer + + + Unexpectedly reached end of file. + הגעה בלתי צפויה אל סוף קובץ. + + + + Window + + + Loading themes + מטעין כעת מוטיבים + + + + Loading sounds + מטעין כעת צלילים + + + + + Untitled + ללא כותרת + + + + Open File + פתיחת קובץ + + + + About FocusWriter + אדות ‫FocusWriter + + + + FocusWriter + ‫FocusWriter + + + + A simple fullscreen word processor + עורך תמלילים פשוט במסך מלא + + + + Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> + + + + Used under the <a href=%1>LGPL 3</a> license + בשימוש תחת הרשיון <a href=%1>LGPL 3</a> + + + + + Characters: %L1 / %L2 + תווים: %L1 / %L2 + + + + + Pages: %L1 + עמודים: %L1 + + + + + Paragraphs: %L1 + פסקאות: %L1 + + + + + Words: %L1 + מילים: %L1 + + + + + %1% of daily goal + %1% מן היעד היומי + + + + + Opening %1 + ‫‭%1‬ נפתח כעת + + + + Question + שאלה + + + + Save changes? + שמירת שינויים? + + + + + (Untitled %1) + (ללא כותרת %1) + + + + Switch to Next Document + מעבר אל מסמך בא + + + + Switch to Previous Document + מעבר אל מסמך קודם + + + + Switch to First Document + מעבר אל מסמך ראשון + + + + Switch to Last Document + מעבר אל מסמך אחרון + + + + Switch to Document %1 + מעבר אל מסמך %1 + + + + Loading settings + טוען כעת הגדרות + + + + Emergency cache is not writable. + מטמון חירום אינו בר־כתיבה + + + + + Warning + אזהרה + + + + FocusWriter was not shut down cleanly. + ‫FocusWriter לא סוים באופן מוסדר. + + + + Restore from the emergency cache? + שחזור ממטמון חירום? + + + + Some files could not be opened. + קבצים מסוימים לא יכלו להיפתח. + + + + Some files were opened Read-Only. + קבצים מסוימים נפתחו לקריאה-בלבד. + + + + Text Files (%1);;All Files (*) + קבצי תמליל (%1);;כל הקבצים (*) + + + + '%1' is newer than the cached copy. + '%1' הינו חדש יותר מן העותק המוטמן. + + + + Overwrite newer file? + החלפת קובץ חדש? + + + + Unable to load typewriter sounds. + לא ניתן לטעון קולות מכונת־כתיבה. + + + + Please make sure that SDL_mixer is installed. + נא לוודא שהרכיב SDL_mixer הינו מותקן. + + + + %1 (Read-Only) + %1 (לקריאה-בלבד) + + + + &File + &קובץ + + + + &New + &חדש + + + + &Open... + &פתיחה... + + + + Reloa&d + &טעינה מחדש + + + + &Save + &שמירה + + + + Save &As... + שמירה &בשם... + + + + &Rename... + שי&נוי שם... + + + + Save A&ll + שמור ה&כל + + + + Manage Sessions + ניהול סשנים + + + + New Session + סשן חדש + + + + &Print... + ה&דפסה... + + + + &Close + &סגירה + + + + &Quit + י&ציאה + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + ע&ריכה + + + + &Undo + &ביטול + + + + &Redo + &חזרה + + + + Cu&t + &גזור + + + + &Copy + הע&תק + + + + &Paste + ה&דבק + + + + Paste &Unformatted + הדבק בלי &עיצוב + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + בחר ה&כל + + + + Select &Scene + בחר &מקטע + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + עי&צוב + + + + &Bold + &מודגש + + + + &Italic + &נטוי + + + + &Underline + &קו תחתון + + + + Stri&kethrough + קו &חוצה + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + כיתוב &עילי + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + כיתוב &תחתי + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + יישור &שמאל + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + יישור מ&רכז + + + + Ctrl+| + Ctrl+| + + + + Align &Right + יישור &ימין + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + יישור מ&אוזן + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &צמצום שוליים + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + &גידול שוליים + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + בלוק שמ&אל לימין + + + + Ri&ght to Left Block + בלוק י&מין לשמאל + + + + &Tools + &כלים + + + + &Find... + &מציאה... + + + + Find &Next + מציאת ה&בא + + + + Find Pre&vious + מציאת ה&קודם + + + + &Replace... + ה&חלפה... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + מר&כאות חכמות + + + + Update &Document + עדכון &מסמך + + + + Update &Selection + עדכון &נבחר + + + + &Spelling... + &איות... + + + + F7 + F7 + + + + &Timers... + &שעוני עצר... + + + + S&ymbols... + &סמלים... + + + + &Settings + &הגדרות + + + + Show &Toolbar + הצגת &סרגל כלים + + + + Show &Menu Icons + הצגת &צלמיות תפריט + + + + F&ocused Text + תמליל ממור&כז + + + + &Fullscreen + &מסך מלא + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + מ&זעור + + + + Ctrl+M + Ctrl+M + + + + &Themes... + מו&טיבים... + + + + &Preferences... + &העדפות... + + + + Focus Off + כיבוי מרכוז + + + + Focus One Line + מרכוז שורה אחת + + + + Focus Three Lines + מרכוז שלוש שורות + + + + &Paragraph + &פסקה + + + + Focus Paragraph + מרכוז פסקה + + + + &Help + &עזרה + + + + Application &Language... + &שפת יישום... + + + + Some files were unsupported and could not be opened. + קבצים מסוימים לא נתמכו ולא ניתן היה לפתוחם. + + + + &Off + &כבוי + + + + One &Line + שורה &אחת + + + + &Three Lines + &שלוש שורות + + + + &About + &אודות + + + + About &Qt + אודות &Qt + + + diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 67791c95..d792fedc 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - + Save File As Mentés másként - - + + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + Question - Kérdés + Kérdés - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -682,12 +682,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -940,7 +940,7 @@ Name: - Név: + Név: @@ -1121,7 +1121,7 @@ Single - Szimpla + Szimpla @@ -1131,7 +1131,7 @@ Double - Dupla + Dupla @@ -1394,631 +1394,631 @@ Window - + Loading themes Témák betöltése - + Loading sounds Hangok betöltése - - + + Untitled Névtelen - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Karakter: %L1 / %L2 - - + + Pages: %L1 Oldal: %L1 - - + + Paragraphs: %L1 Bekezdés: %L1 - - + + Words: %L1 Szó: %L1 - - + + %1% of daily goal A napi cél %1%-a - - + + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - - + + (Untitled %1) (Névtelen %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Beállítások betöltése - + Emergency cache is not writable. A vész-gyorsítótár nem írható. - - + + Warning Figyelmeztetés - + FocusWriter was not shut down cleanly. A FocusWriter hibásan lett leállítva. - + Restore from the emergency cache? Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + Text Files (%1);;All Files (*) Szövegfájlok (%1);;Minden fájl (*) - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + S&ymbols... - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 622694bf..344823ec 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - + Save File As Salva con nome - - + + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - Domanda + Domanda - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*. rtf) - + All Files (*) Tutti i file (*) @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -941,7 +941,7 @@ Name: - Nome: + Nome: @@ -1122,7 +1122,7 @@ Single - Singolo + Singolo @@ -1132,7 +1132,7 @@ Double - Doppio + Doppio @@ -1395,631 +1395,631 @@ Window - + Loading themes Caricamento temi - + Loading sounds Caricamento suoni - - + + Untitled Senza nome - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - - + + Pages: %L1 Pagine: %L1 - - + + Paragraphs: %L1 Paragrafi: %L1 - - + + Words: %L1 Parole: %L1 - - + + %1% of daily goal %1% dell' obiettivo giornaliero - - + + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - - + + (Untitled %1) (Senza nome %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &sostituisci... - + Ctrl+R Ctrl + R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &ortografia... - + F7 F7 - + &Timers... &Timer... - + S&ymbols... - + &Settings &impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl + M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &aiuto - + Application &Language... Lingua &applicazione... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 07746133..5fb59bdb 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry エラー - + Unable to save '%1'. '%1' を保存できませんでした。 - + Save File As 名前を付けて保存 - - + + Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - + Rename File ファイル名の変更 - + Unable to rename '%1'. '%1' の名前を変更できませんでした。 - + Reload File ファイルを再読み込みする - + Reload the file %1 from disk? ファイル %1 を再読み込みしますか? - + All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - + Reload 再読み込み - + Plain Text (*.txt) テキスト文書 (*.txt) - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? - + OpenDocument Text (*.odt) OpenDocument 形式 (*.odt) - + Rich Text (*.rtf) リッチ テキスト形式 (*.rtf) - + All Files (*) すべてのファイル (*.*) @@ -682,12 +682,12 @@ Shift+F4 - + Show scene list (%1) シーン・リストの表示 (%1) - + Hide scene list (%1) シーン・リストの非表示 (%1) @@ -1394,631 +1394,631 @@ Window - + Loading themes テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - - + + Untitled 無題 - + Open File 開く - + About FocusWriter FocusWriter について - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 文字数: %L1 / %L2 - - + + Pages: %L1 ページ数: %L1 - - + + Paragraphs: %L1 段落数: %L1 - - + + Words: %L1 単語数: %L1 - - + + %1% of daily goal 一日の目標の %1% - - + + Opening %1 %1 を開いています - + Question 確認 - + Save changes? 変更を保存しますか? - - + + (Untitled %1) (無題 %1) - + Switch to Next Document 次のドキュメントへ切り替える - + Switch to Previous Document 前のドキュメントへ切り替える - + Switch to First Document 最初のドキュメントへ切り替える - + Switch to Last Document 最後のドキュメントへ切り替える - + Switch to Document %1 %1 へ切り替える - + Loading settings 設定を読み込んでいます - + Emergency cache is not writable. 緊急用のキャッシュに書き込むことができませんでした。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter は正常に終了できませんでした。 - + Restore from the emergency cache? 緊急用のキャッシュから復活させますか? - + Some files could not be opened. いくつかのファイルが開けませんでした。 - + Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - + Text Files (%1);;All Files (*) テキスト文書 (%1);;すべてのファイル (*) - + '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - + Overwrite newer file? 新しいファイルを上書きしますか? - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + %1 (Read-Only) %1 (読み込み専用) - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 6de17c43..e982cb47 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - + Save File As Opslaan als - - + + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Reload File Bestand herladen - + Reload the file %1 from disk? Bestand %1 herladen van disk ? - + All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - + Reload Herladen - + Plain Text (*.txt) Platte tekst (*.txt) - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) @@ -683,12 +683,12 @@ Shift-F4 - + Show scene list (%1) Laat scene lijst (%1) zien - + Hide scene list (%1) Verberg scene lijst (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Thema wordt geladen - + Loading sounds Geluiden worden geladen - - + + Untitled Unbenannt - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Een simpele schermvullende tekstverwerker - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - + Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - + Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - - + + Characters: %L1 / %L2 Tekens: %L1 / %L2 - - + + Pages: %L1 Pagina's: %L1 - - + + Paragraphs: %L1 Paragrafen: %L1 - - + + Words: %L1 Woorden: %L1 - - + + %1% of daily goal %1% van het dagdoel - - + + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - - + + (Untitled %1) (naamloos %1) - + Switch to Next Document Schakel naar volgend document - + Switch to Previous Document Schakel naar vorig document - + Switch to First Document Schakel naar eerste document - + Switch to Last Document Schakel naar laatste document - + Switch to Document %1 Schakel naar document %1 - + Loading settings Instellingen inladen - + Emergency cache is not writable. De noodopslag is niet beschrijfbaar. - - + + Warning Waarschuwing - + FocusWriter was not shut down cleanly. FocusWriter is niet netjes afgesloten. - + Restore from the emergency cache? Veiligheidskopie herstellen? - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + Text Files (%1);;All Files (*) Tekst-bestanden (%1);;Alle Bestanden (*) - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... - + Some files were unsupported and could not be opened. Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 759652db..1e4e2e2b 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - + Save File As Zapisz plik jako - - + + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Reload File Wczytaj ponownie - + Reload the file %1 from disk? Wczytaj ponownie plik %1 z dysku? - + All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - + Reload Wczytaj ponownie - + Plain Text (*.txt) Zwykły tekst (*.txt) - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) @@ -684,12 +684,12 @@ Shift+F4 - + Show scene list (%1) Pokaż listę scen (%1) - + Hide scene list (%1) Ukryj listę scen (%1) @@ -1396,631 +1396,631 @@ Window - + Loading themes Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - - + + Untitled Bez tytułu - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaki: %L1 / %L2 - - + + Pages: %L1 Strony: %L1 - - + + Paragraphs: %L1 Akapity: %L1 - - + + Words: %L1 Słowa: %L1 - - + + %1% of daily goal %1% dziennego celu - - + + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - - + + (Untitled %1) (Bez tytułu %1) - + Switch to Next Document Przełącz do następnego dokumentu - + Switch to Previous Document Przełącz do poprzedniego dokumentu - + Switch to First Document Przełącz do pierwszego dokumentu - + Switch to Last Document Przełącz do ostatniego dokumentu - + Switch to Document %1 Przełącz do dokumentu %1 - + Loading settings Wczytywanie ustawień - + Emergency cache is not writable. Bufor awaryjny nie jest zapisywalny. - - + + Warning Ostrzeżenie - + FocusWriter was not shut down cleanly. Program FocusWriter nie został zamknięty prawidłowo. - + Restore from the emergency cache? Przywrócić z bufora awaryjnego? - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + Text Files (%1);;All Files (*) Pliki tekstowe (%1);;Wszystkie pliki (*) - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... - + Some files were unsupported and could not be opened. Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 079d229c..9a70ec8d 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - + Save File As Guardar como - - + + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Reload File Carregar de novo o ficheiro - + Reload the file %1 from disk? Carregar de novo o ficheiro %1 a partir do disco? - + All unsaved changes will be lost. As alterações que não forem gravadas serão perdidas. - + Reload Carregar de novo - + Plain Text (*.txt) Texto simples (*.txt) - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? - + OpenDocument Text (*.odt) Texto OpenDocument (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) @@ -683,12 +683,12 @@ Shift+F4 - + Show scene list (%1) Mostrar a lista de cenas (%1) - + Hide scene list (%1) Esconder a lista de cenas (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - - + + Untitled Sem título - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de texto simples em ecrã completo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palávras: %L1 - - + + %1% of daily goal %1% do objectivo do dia - - + + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - - + + (Untitled %1) (Sem título %1) - + Switch to Next Document Passar ao documento seguinte - + Switch to Previous Document Passar ao documento anterior - + Switch to First Document Passar ao primeiro documento - + Switch to Last Document Passar ao último documento - + Switch to Document %1 Passar ao dicumento %1 - + Loading settings A carregar definições - + Emergency cache is not writable. Não foi possível escrever o cache de emergência. - - + + Warning Atenção - + FocusWriter was not shut down cleanly. FocusWriter não fechou correctamente. - + Restore from the emergency cache? Recuperar dados do cache de emergência? - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + Text Files (%1);;All Files (*) Ficheiros de texto (%1);;Todos os ficheiros (*) - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... - + Some files were unsupported and could not be opened. Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 463e24f6..b4f972f5 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - + Save File As Salvar como - - + + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Reload File Recarregar o arquivo - + Reload the file %1 from disk? Recarregar o arquivo %1 do disco? - + All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - + Reload Recarregar - + Plain Text (*.txt) Texto simples (*.txt) - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? - + OpenDocument Text (*.odt) Texto do OpenDocument (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) @@ -683,12 +683,12 @@ Shift+F4 - + Show scene list (%1) Exibir lista de cenas (%1) - + Hide scene list (%1) Ocultar lista de cenas (%1) @@ -1395,631 +1395,631 @@ Window - + Loading themes Carregando temas - + Loading sounds Carregando sons - - + + Untitled Sem título - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palavras: %L1 - - + + %1% of daily goal %1% do objetivo diário - - + + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - - + + (Untitled %1) (Sem título %1) - + Switch to Next Document Ir para próximo documento - + Switch to Previous Document Ir para documento anterior - + Switch to First Document Ir para o primeiro documento - + Switch to Last Document Ir para o último documento - + Switch to Document %1 Ir para o documento %1 - + Loading settings Carregando configurações - + Emergency cache is not writable. Não é possível escrever no cache de emergência. - - + + Warning Aviso - + FocusWriter was not shut down cleanly. O FocusWriter não foi fechado corretamente. - + Restore from the emergency cache? Restaurar a partir do cache de emergência? - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + Text Files (%1);;All Files (*) Arquivos de texto (%1);;Todos os arquivos (*) - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... - + Some files were unsupported and could not be opened. Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.qm b/translations/focuswriter_ro.qm new file mode 100644 index 0000000000000000000000000000000000000000..76f5c3fab4c5134572c802a13542c4f550cfb07b GIT binary patch literal 32554 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 literal 0 HcmV?d00001 diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts new file mode 100644 index 00000000..c7853be3 --- /dev/null +++ b/translations/focuswriter_ro.ts @@ -0,0 +1,2028 @@ + + + + + Alert + + + Close (%1) + Închide (%1) + + + + Collapse + Restrînge + + + + Expand + Extinde + + + + AlertLayer + + + Dismiss Alert + Revocare alertă + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Scuze + + + + Unable to save '%1'. + Nu se poate salva '%1'. + + + + Save File As + Salvează fişierul ca + + + + + Unable to overwrite '%1'. + Nu se poate suprascrie'%1'. + + + + Rename File + Redenumire fişier + + + + Unable to rename '%1'. + Nu se poate redenumi '%1'. + + + + Reload File + Reîncarcă fişier + + + + Reload the file %1 from disk? + Reîncarcă fişierul %1? + + + + All unsaved changes will be lost. + Toate modificările nesalvate vor fi pierdute + + + + Reload + Reîncarcă + + + + Plain Text (*.txt) + Text simplu (*.txt) + + + + Question + Întrebare + + + + Saving as plain text will discard all formatting. Discard formatting? + Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? + + + + OpenDocument Text (*.odt) + Text OpenDocument (*.odt) + + + + Rich Text (*.rtf) + Text îmbogăţit (*.rtf) + + + + All Files (*) + Toate fişierele (*) + + + + DocumentWatcher + + + File Changed + Fişierul a fost modificat + + + + The file %1 was changed by another program. + Fişierul %1 a fost modificat de un alt program. + + + + Do you want to reload the file? + Doriţi să reîncărcaţi fişierul? + + + + Reload + Reîncarcă + + + + Ignore + Ignoră + + + + File Deleted + Fişier şters + + + + The file %1 was deleted by another program. + Fişierul %1 a fost şters de un alt program. + + + + Do you want to save or close the file? + Doriţi să salvaţi sau închideţi fişierul? + + + + FindDialog + + + Search for: + Caută: + + + + Replace with: + Înlocuieşte cu: + + + + Ignore case + Ignoră minuscule/majuscule + + + + Whole words only + Doar cuvinte întregi + + + + Regular expressions + Expresii regulate + + + + Search up + Caută în sus + + + + Search down + Caută în jos + + + + &Find + Caută + + + + &Replace + Înlocuieşte + + + + Replace &All + Înlocuieşte toate + + + + Find + Căutare + + + + Replace + Înlocuire + + + + Replace %n instance(s)? + + Înlocuire %n o dată? + Înlocuire %n ori? + Înlocuire %n ori? + + + + + Question + Întrebare + + + + + Sorry + Scuze + + + + + Phrase not found. + Fraza nu a fost găsită. + + + + Highlighter + + + Add + Adaugă + + + + Check Spelling... + Verificare ortografică... + + + + (No suggestions found) + (Nu s-au găsit sugestii) + + + + ImageButton + + + Open Image + Deschide imagine + + + + Images(%1) + Imagini (%1) + + + + LocaleDialog + + + Select application language: + Selectaţi limba aplicaţiei: + + + + <System Language> + <Limbaj Sistem> + + + + Note + Notă + + + + Please restart this application for the change in language to take effect. + Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. + + + + PreferencesDialog + + + Preferences + Preferinţe + + + + General + General + + + + Statistics + Statistici + + + + Toolbar + Bară de intrumente + + + + Spell Checking + Verificare ortografică + + + + Select Dictionary + Selectaţi dicţionarul + + + + + Sorry + Scuze + + + + Unable to open archive. + Nu se poate deschide arhiva + + + + Unable to read archive metadata. + Nu se pot citi metadatele arhivei. + + + + The archive does not contain a usable dictionary. + Arhiva nu conţine un dicţionar utilizabil. + + + + Unable to open file '%1'. + Nu se poate deschide fişierul '%1'. + + + + Unable to close file '%1'. + Nu se poate închide fişierul '%1'. + + + + + Question + Întrebare + + + + Shortcuts + Scurtături + + + + One or more shortcuts conflict. Do you wish to proceed? + Una sau mai multe scurtături sînt în conflict. Doriţi să continuaţi? + + + + The dictionary "%1" already exists. Do you want to replace it? + Dicţionarul "%1" deja există. Doriţi să-l înlocuiţi? + + + + Daily Goal + Obiectiv zilnic + + + + None + Niciunul + + + + Minutes: + Minute: + + + + + Words: + Cuvinte: + + + + Editing + Editare + + + + Always vertically center + Centrează vertical întotdeauna + + + + Block insertion cursor + Cursor block de inserare + + + + Smooth fonts + Netezire font-uri + + + + Typewriter sounds + Sunete maşină de scris + + + + Smart quotes: + Ghilimele inteligente: + + + + Double + Duble + + + + Single + Simple + + + + Scenes + Scene + + + + Divider: + Divizor: + + + + Saving + Salvare + + + + Automatically save changes + Salvează automat modificările + + + + Remember cursor position + Amintire poziţie cursor + + + + Contents + Conţinut + + + + Word count + Contor cuvinte + + + + Page count + Contor pagini + + + + Paragraph count + Contor paragrafe + + + + Character count + Contor caractere + + + + Page Size + Mărime pagină + + + + Characters: + Caractere: + + + + Paragraphs: + Paragrafe: + + + + Word Count Algorithm + Algoritm contorizare cuvinte + + + + Detect word boundaries + Detectare limite cuvinte + + + + Divide character count by six + Împarte numărul de caractere cu şase + + + + Style + Stil + + + + Icons Only + Doar iconuri + + + + Text Only + Doar text + + + + Text Alongside Icons + Text lîngă iconuri + + + + Text Under Icons + Text sub iconuri + + + + Text Position: + Poziţie text + + + + Actions + Acţiuni + + + + Move Up + Mută în sus + + + + Move Down + Mută în jos + + + + Add Separator + Adaugă separator + + + + Command + Comandă + + + + Shortcut + Scurtătură + + + + Action + Acţiune + + + + Check spelling as you type + Verificare ortografică în timpul tastării + + + + Ignore words in UPPERCASE + Ignorare cuvinte cu MAJUSCULE + + + + Ignore words with numbers + Ignorare cuvinte care conţin cifre + + + + Language + Limbă + + + + + Add + Adăugare + + + + Remove + Înlăturare + + + + Personal Dictionary + Dicţionar personal + + + + Reader + + + + Not a supported RTF file. + Fişier RTF nesuportat. + + + + Unable to open archive. + Nu se poate deschide arhiva. + + + + Unable to open file '%1'. + Nu se poate deschide fişierul '%1'. + + + + Unable to close file '%1'. + Nu se poate închide fişierul '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Săgeată în jos + + + + Move Scenes Up + Mută scene în sus + + + + Ctrl+Shift+Up + Ctrl+Shift+Săgeată în sus + + + + Toggle Scene List + Comutare listă scene + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Arată listă scene (%1) + + + + Hide scene list (%1) + Ascunde listă scene (%1) + + + + Filter + Filtru + + + + Move Scenes Down + Mută scene în jos + + + + Resize scene list + Redimensionare listă scene + + + + Session + + + + + + + + + Default + Iniţial + + + + SessionManager + + + Manage Sessions + Gestionare sesiuni + + + + S&essions + S&esiuni + + + + New + Nou + + + + Rename + Redenumire + + + + Clone + Clonează + + + + Delete + Ştergere + + + + Switch To + Comută la + + + + New Session + Sesiune nouă + + + + Clone Session + Clonează sesiune + + + + Rename Session + Redenumire sesiune + + + + Question + Întrebare + + + + Delete selected session? + Şterge sesiunea selectată? + + + + + Session name: + Nume sesiune: + + + + Sorry + Scuze + + + + The requested session name is already in use. + Numele solicitat al sesiunii este deja în uz. + + + + &New... + &Nou... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + Gestionare... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Curăţă + + + + Reset to Default + Resetează la valorile implicte + + + + + Shortcut: + Scurtătură: + + + + SmartQuote + + + Replacing quotation marks... + Înlocuire ghilimele... + + + + Please Wait + Vă rugăm aşteptaţi + + + + SpellChecker + + + Check Spelling + Verificare ortografică + + + + &Add + &Adaugă + + + + &Ignore + &Ignoră + + + + I&gnore All + I&gnoră toate + + + + &Change + &Modifică + + + + C&hange All + Modifică &toate + + + + Not in dictionary: + Nu este în dicţionar: + + + + Change to: + Modifică în: + + + + Checking spelling... + Verificare ortografie... + + + + Cancel + Anulare + + + + Please wait + Vă rugăm aşteptaţi + + + + Spell check complete. + Verificare ortografică completă. + + + + SymbolsDialog + + + Symbols + Simboluri + + + + Recently used symbols + Simbolurile folosite recent + + + + All symbols + Toate simbolurile + + + + Details + Detalii + + + + Name: + Nume: + + + + Insert + Inserează + + + + SymbolsModel + + + Blocks + Blocuri + + + + Scripts + Script-uri + + + + Theme + + + Untitled %1 + FărăTitlu %1 + + + + ThemeDialog + + + Modify Theme + Modificare temă + + + + Name: + Nume: + + + + Background + Fundal + + + + No Image + Fără imagine + + + + Tiled + Placat + + + + + Centered + Centrat + + + + + Stretched + Întins + + + + Scaled + Redimensionat + + + + Zoomed + Mărit + + + + Remove + Înlătură + + + + Type: + Tip: + + + + + + Color: + Culoare: + + + + Image: + Imagine: + + + + Foreground + Prim plan + + + + Opacity + Opacitate + + + + + + + pixels + pixeli + + + + Left + Stînga + + + + Right + Dreapta + + + + Position + Poziţie + + + + Size: + Mărime: + + + + Rounding: + Rotunjire: + + + + Margin: + Margine: + + + + Padding: + Umplere: + + + + Text + Text + + + + Font: + Font: + + + + Misspelled: + Greşit: + + + + Spacings + Spaţiere + + + + Line Spacing + Spaţiere rînd + + + + Single + Simplă + + + + 1.5 Lines + 1.5 linii + + + + Double + Două rînduri + + + + Proportional + Proporţional + + + + Paragraph Spacing + Spaţiere paragraf + + + + Indent First Line: + Indentaţie prima linie: + + + + Pixels Above: + Pixeli deasupra: + + + + Pixels Below: + Pixeli dedesubt: + + + + The quick brown fox jumps over the lazy dog + The quick brown fox jumps over the lazy dog + + + + ThemeManager + + + Themes + Teme + + + + Add + Adăugare + + + + Modify + Modificare + + + + Remove + Înlăturare + + + + Import + Import + + + + Export + Export + + + + Close + Închide + + + + Question + Întrebare + + + + Remove selected theme? + Înlătură tema selectată? + + + + Import Theme + Importare temă + + + + Themes (*.fwtz *.theme) + Teme (*.fwtz *.theme) + + + + Themes (*.fwtz) + Teme (*.fwtz) + + + + + Sorry + Scuze + + + + + A theme already exists with that name. Please enter a new name: + Există deja o temă cu acest nume. Vă rugăm tastaţi un alt nume: + + + + Export Theme + Exportare temă + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Întrebare + + + + Delete timer? + Şterge cronometru? + + + + <b>Words:</b> %L1 + <b>Cuvinte:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Pagini:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Paragrafe:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Caractere:</b> %L1 / %L2 + + + + Set Delay + Setare întîrzîiere + + + + Set Time + Setare timp + + + + Delay: + Întîrzîiere: + + + + Time: + Timp: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Alarmă + + + + Type: + Tip: + + + + Memo: + Notă: + + + + Edit + Editare + + + + Delete + Ştergere + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Nu există cronometre care rulează + + + + TimerManager + + + Timers + Cronometre + + + + New + Nou + + + + Recent + Recent + + + + Question + Întrebare + + + + Cancel editing timers? + Anulare cronometru editare? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + S-a ajuns pe neaşteptate la sfîrşitul fişierului. + + + + Window + + + Loading themes + Încărcare teme + + + + Loading sounds + Încărcare sunete + + + + + Untitled + FărăTitlu + + + + Open File + Deschide fişier + + + + About FocusWriter + Despre FocusWriter + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Un procesor simplu de text pe tot ecranul + + + + Copyright &copy; 2008-%1 Graeme Gott + Toate drepturile rezervate &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Lansat sub licenţă <a href=%1>GPL 3</a> + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Foloseşte iconuri din tema <a href=%1>Oxygen</a> + + + + Used under the <a href=%1>LGPL 3</a> license + Folosit sub licenţă <a href=%1>LGPL 3</a> + + + + + Characters: %L1 / %L2 + Caractere: %L1 / %L2 + + + + + Pages: %L1 + Pagini: %L1 + + + + + Paragraphs: %L1 + Paragrafe: %L1 + + + + + Words: %L1 + Cuvinte: %L1 + + + + + %1% of daily goal + %1% din obiectiv zilnic + + + + + Opening %1 + Deschidere %1 + + + + Question + Întrebare + + + + Save changes? + Salvaţi modificările? + + + + + (Untitled %1) + (Fără titlu %1) + + + + Switch to Next Document + Comutare la următorul document + + + + Switch to Previous Document + Comutare la documentul precedent + + + + Switch to First Document + Comutare la primul document + + + + Switch to Last Document + Comutare la ultimul document + + + + Switch to Document %1 + Comutare la document %1 + + + + Loading settings + Încărcare setări + + + + Emergency cache is not writable. + Cache-ul de urgenţă nu poate fi scris. + + + + + Warning + Avertisment + + + + FocusWriter was not shut down cleanly. + FocusWriter nu a fost oprit corect. + + + + Restore from the emergency cache? + Restaurare din memoria cache de urgenţă? + + + + Some files could not be opened. + Unele fişiere nu au putut fi deschise. + + + + Some files were opened Read-Only. + Unele fişiere au fost deschise în mod doar-citire. + + + + Text Files (%1);;All Files (*) + Fişiere text (%1);;Toate fişierele (*) + + + + '%1' is newer than the cached copy. + '%1' este mai nou decît copia din cache. + + + + Overwrite newer file? + Suprascrie noul fişier? + + + + Unable to load typewriter sounds. + Nu se pot încărca sunetele maşină de scris. + + + + Please make sure that SDL_mixer is installed. + Vă rugăm să vă asiguraţi că SDL_mixer este instalat. + + + + %1 (Read-Only) + %1 (Doar-citire) + + + + &File + &Fişier + + + + &New + &Nou + + + + &Open... + &Deschide... + + + + Reloa&d + Reîncarcă + + + + &Save + &Salvare + + + + Save &As... + Salvare c&a... + + + + &Rename... + &Redenumire... + + + + Save A&ll + Salvează tot + + + + Manage Sessions + Gestionare sesiuni + + + + New Session + Sesiune nouă + + + + &Print... + Imprimare... + + + + &Close + Închide + + + + &Quit + &Ieşire + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Editare + + + + &Undo + Anulează + + + + &Redo + Reface + + + + Cu&t + &Taie + + + + &Copy + &Copiază + + + + &Paste + &Lipeşte + + + + Paste &Unformatted + Lipire neformatat + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Selectează &tot + + + + Select &Scene + Selectare &scenă + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Fo&rmatare + + + + &Bold + Îngroşat + + + + &Italic + &Italic + + + + &Underline + S&ubliniat + + + + Stri&kethrough + &Tăiat + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Exponent + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + Indice + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Aliniere la &stînga + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Aliniere la &centru + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Aliniere la &dreapta + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Aliniere stînga-dreapta + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + Mărire alineat + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Micşorare alineat + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Bloc stînga-dreapta + + + + Ri&ght to Left Block + Bloc dreapta-stînga + + + + &Tools + &Unelte + + + + &Find... + &Caută... + + + + Find &Next + Caută &următorul + + + + Find Pre&vious + Caută &precedent + + + + &Replace... + Înlocuire... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Ghilimele inteligente + + + + Update &Document + Actualizare &document + + + + Update &Selection + Actualizare &selecţie + + + + &Spelling... + &Ortografie... + + + + F7 + F7 + + + + &Timers... + Cronometre... + + + + S&ymbols... + S&imboluri... + + + + &Settings + &Setări + + + + Show &Toolbar + Arată bară de unelte + + + + Show &Menu Icons + Arată iconuri &meniu + + + + F&ocused Text + Text f&ocalizat + + + + &Fullscreen + &Tot ecranul + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + M&inimizare + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Teme... + + + + &Preferences... + &Preferinţe... + + + + Focus Off + Focaliuzare oprită + + + + Focus One Line + Focalizare o linie + + + + Focus Three Lines + Focalizare trei linii + + + + &Paragraph + &Paragraf + + + + Focus Paragraph + Focalizare paragraf + + + + &Help + &Ajutor + + + + Application &Language... + Limbă aplicaţie... + + + + Some files were unsupported and could not be opened. + Unele fişiere au fost nesuportate şi nu au putut fi deschide. + + + + &Off + &Oprit + + + + One &Line + O &linie + + + + &Three Lines + &Trei linii + + + + &About + &Despre + + + + About &Qt + Despre &Qt + + + diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index e8062dfc..dd0f1875 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Простите - + Unable to save '%1'. Невозможно сохранить '%1'. - + Save File As Сохранить как - - + + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Reload File Открыть файл заново - + Reload the file %1 from disk? Действительно заново открыть файл %1? - + All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - + Reload Открыть заново - + Plain Text (*.txt) Простой текст (*.txt) - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Если вы сохраните файл как простой текст, всё форматирование будет убрано. Убрать форматирование? - + OpenDocument Text (*.odt) Текст формата OpenDocument (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) @@ -684,12 +684,12 @@ Shift+F4 - + Show scene list (%1) Показать список сцен (%1) - + Hide scene list (%1) Скрыть список сцен (%1) @@ -1396,631 +1396,631 @@ Window - + Loading themes Загружаются темы - + Loading sounds Загружаются звуки - - + + Untitled Безымянный - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Простой полноэкранный текстовый редактор - + Copyright &copy; 2008-%1 Graeme Gott &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Символов: %L1 / %L2 - - + + Pages: %L1 Страниц: %L1 - - + + Paragraphs: %L1 Абзацев: %L1 - - + + Words: %L1 Слов: %L1 - - + + %1% of daily goal %1% от дневной задачи - - + + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - - + + (Untitled %1) (Безымянный %1) - + Switch to Next Document Перейти к следующему документу - + Switch to Previous Document Перейти к предыдущему документу - + Switch to First Document Перейти к первому документу - + Switch to Last Document Перейти к последнему документу - + Switch to Document %1 Перейти к документу %1 - + Loading settings Загружаются настройки - + Emergency cache is not writable. Резервная память недоступна для записи. - - + + Warning Внимание - + FocusWriter was not shut down cleanly. Работа приложения не была завершена правильно. - + Restore from the emergency cache? Восстановить открытые файлы из резервной памяти? - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + Text Files (%1);;All Files (*) Текстовые файлы (%1);;Все файлы (*) - + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. Пожалуйста, проверьте, установлен ли пакет SDL_mixer. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&ё - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + S&ymbols... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help Спр&авка - + Application &Language... &Язык приложения... - + Some files were unsupported and could not be opened. Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off - + One &Line - + &Three Lines - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index d487c44c..e767a7fd 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Prepáčte - + Unable to save '%1'. Nedá sa uložiť '%1'. - + Save File As Uložiť súbor ako - - + + Unable to overwrite '%1'. Nedá sa prepísať '%1'. - + Rename File Premenovať súbor - + Unable to rename '%1'. Nedá sa premenovať '%1'. - + Reload File Opätovne načítať súbor - + Reload the file %1 from disk? Opätovne načítať súbor %1 z disku? - + All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - + Reload Opätovne načítať - + Plain Text (*.txt) Obyčajný text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Všetky súbory (*) @@ -684,12 +684,12 @@ Shift+F4 - + Show scene list (%1) Zobraziť zoznam scén (%1) - + Hide scene list (%1) Skryť zoznam scén (%1) @@ -1396,631 +1396,631 @@ Window - + Loading themes Načítavanie tém - + Loading sounds Načítavanie zvukov - - + + Untitled Bez názvu - + Open File Otvoriť súbor - + About FocusWriter O programe FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - + Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slová: %L1 - - + + %1% of daily goal %1% denného cieľa - - + + Opening %1 Otváranie %1 - + Question Otázka - + Save changes? Uložiť zmeny? - - + + (Untitled %1) (Bez názvu %1) - + Switch to Next Document Prepnúť na ďalší dokument - + Switch to Previous Document Prepnúť na predchádzajúci dokument - + Switch to First Document Prepnúť na prvý dokument - + Switch to Last Document Prepnúť na posledný dokument - + Switch to Document %1 Prepnúť na dokument %1 - + Loading settings Načítavanie nastavení - + Emergency cache is not writable. Nie je možné zapisovať do pohotovostnej vyrovnávacej pamäti. - - + + Warning Upozornenie - + FocusWriter was not shut down cleanly. Program FocusWriter nebol riadne ukončený. - + Restore from the emergency cache? Obnoviť z vyrovnávacej pamäti. - + Some files could not be opened. Niektoré súbory nemohli byť otvorené. - + Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - + Text Files (%1);;All Files (*) Textové súbory (%1);;Všetky súbory (*) - + '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - + Overwrite newer file? Prepísať novší súbor? - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + %1 (Read-Only) %1 (Iba na čítanie) - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... - + Some files were unsupported and could not be opened. Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 7ceb9e6f..e324db88 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - + Save File As Spara fil som - - + + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Vanlig text (*.txt) - + Question - Fråga + Fråga - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) @@ -683,12 +683,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -941,7 +941,7 @@ Name: - Namn: + Namn: @@ -1122,7 +1122,7 @@ Single - Enkel + Enkel @@ -1132,7 +1132,7 @@ Double - Dubbel + Dubbel @@ -1395,631 +1395,631 @@ Window - + Loading themes Läser in teman - + Loading sounds Läser in ljud - - + + Untitled Namnlös - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Tecken: %L1 / %L2 - - + + Pages: %L1 Sidor: %L1 - - + + Paragraphs: %L1 Stycken: %L1 - - + + Words: %L1 Ord: %L1 - - + + %1% of daily goal %1% av dagligt mål - - + + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - - + + (Untitled %1) (Namnlös %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Läser in inställningar - + Emergency cache is not writable. Nödcachen är inte skrivbar. - - + + Warning Varning - + FocusWriter was not shut down cleanly. FocusWriter stängdes inte av korrekt. - + Restore from the emergency cache? Återställ från nödcachen? - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + Text Files (%1);;All Files (*) Textfiler (%1);;Alla filer (*) - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Markera &allt - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indragning - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&dragning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + S&ymbols... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Hjälp - + Application &Language... Programs&pråk... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm new file mode 100644 index 0000000000000000000000000000000000000000..4ad7332a2681403c03b03a2e5d3a453d34813179 GIT binary patch literal 26784 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 literal 0 HcmV?d00001 diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts new file mode 100644 index 00000000..b608abcf --- /dev/null +++ b/translations/focuswriter_tr.ts @@ -0,0 +1,2026 @@ + + + + + Alert + + + Close (%1) + + + + + Collapse + Çökme + + + + Expand + Genişlet + + + + AlertLayer + + + Dismiss Alert + Uyarıyı gizle + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Pardon + + + + Unable to save '%1'. + + + + + Save File As + Farklı kaydet + + + + + Unable to overwrite '%1'. + + + + + Rename File + Yeniden adlandır + + + + Unable to rename '%1'. + + + + + Reload File + Dosyayı güncelle + + + + Reload the file %1 from disk? + + + + + All unsaved changes will be lost. + Tüm kaydedilmemiş değişiklikler kaybolacaktır. + + + + Reload + Güncelle + + + + Plain Text (*.txt) + Düz metin (*.txt) + + + + Question + Soru + + + + Saving as plain text will discard all formatting. Discard formatting? + Düz metin olarak kaydedildiğinde tüm biçimlendirme kaybolacaktır. Biçimlendirme silinsin mi? + + + + OpenDocument Text (*.odt) + Belgeyi metin olarak aç (*.odt) + + + + Rich Text (*.rtf) + Zengin metin (*.rtf) + + + + All Files (*) + Tüm dosyalar (*) + + + + DocumentWatcher + + + File Changed + Dosya değiştirildi + + + + The file %1 was changed by another program. + + + + + Do you want to reload the file? + Dosyayı yeniden yüklemek ister misiniz? + + + + Reload + Güncelle + + + + Ignore + Gizle + + + + File Deleted + Dosya silindi + + + + The file %1 was deleted by another program. + + + + + Do you want to save or close the file? + Dosyayı kaydetmek veya kapatmak istiyor musunuz? + + + + FindDialog + + + Search for: + Ara: + + + + Replace with: + Değiştir: + + + + Ignore case + Yoksay + + + + Whole words only + Yalnızca tam sözcükleri + + + + Regular expressions + Düzenli ifadeler + + + + Search up + Yukarı ara + + + + Search down + Aşağı ara + + + + &Find + &Bul + + + + &Replace + &Değiştir + + + + Replace &All + &Hepsini değiştir + + + + Find + Bul + + + + Replace + Değiştir + + + + Replace %n instance(s)? + + + + + + + Question + Soru + + + + + Sorry + Pardon + + + + + Phrase not found. + Cümle bulunamadı. + + + + Highlighter + + + Add + Ekle + + + + Check Spelling... + Yazım denetimi ... + + + + (No suggestions found) + (Öneri bulunamadı) + + + + ImageButton + + + Open Image + Resim aç + + + + Images(%1) + + + + + LocaleDialog + + + Select application language: + Uygulama dilini seçin: + + + + <System Language> + <Sistem dili> + + + + Note + Not + + + + Please restart this application for the change in language to take effect. + Dil değişikliğinin etkili olması için, Uygulamayı yeniden başlatın. + + + + PreferencesDialog + + + Preferences + Tercihler + + + + General + Genel + + + + Statistics + İstatistikler + + + + Toolbar + Araç çubuğu + + + + Spell Checking + Yazım denetimi + + + + Select Dictionary + Sözlük seç + + + + + Sorry + Pardon + + + + Unable to open archive. + Arşiv açılamadı. + + + + Unable to read archive metadata. + Arşiv okunamıyor. + + + + The archive does not contain a usable dictionary. + Arşiv kullanılabilir bir sözlük içermiyor. + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + + Question + Soru + + + + Shortcuts + Kısayollar + + + + One or more shortcuts conflict. Do you wish to proceed? + Bir veya daha fazla kısayol çatışıyor. Devam etmek istiyor musunuz? + + + + The dictionary "%1" already exists. Do you want to replace it? + + + + + Daily Goal + Günlük hedef + + + + None + Hiçbiri + + + + Minutes: + Dakika: + + + + + Words: + Kelime: + + + + Editing + Düzenle + + + + Always vertically center + Daima dikey merkezli + + + + Block insertion cursor + İmleci kapat + + + + Smooth fonts + Yazı tipleri + + + + Typewriter sounds + Daktilo sesleri + + + + Smart quotes: + Akıllı alıntı: + + + + Double + Çift + + + + Single + Tek + + + + Scenes + Sahneler + + + + Divider: + Böl: + + + + Saving + Kaydediliyor + + + + Automatically save changes + Değişiklikleri otomatik kaydet + + + + Remember cursor position + İmleç konumu hatırla + + + + Contents + İçindekiler + + + + Word count + Kelime sayımı + + + + Page count + Sayfa sayısı + + + + Paragraph count + Paragraf sayısı + + + + Character count + Karakter sayımı + + + + Page Size + Sayfa boyutu + + + + Characters: + Karakterler: + + + + Paragraphs: + Paragraflar: + + + + Word Count Algorithm + Sözcük sayımı algoritması + + + + Detect word boundaries + Sözcük sınırları algıla + + + + Divide character count by six + Altı ile karakter sayısı bölün + + + + Style + Tarz + + + + Icons Only + Sadece simgeler + + + + Text Only + Sadece metin + + + + Text Alongside Icons + Simgeler yanında metin + + + + Text Under Icons + Simgeler altında metin + + + + Text Position: + Metin pozisyon: + + + + Actions + Eylemler + + + + Move Up + Yukarı taşı + + + + Move Down + Aşağı taşı + + + + Add Separator + Ayırıcı ekle + + + + Command + Yönet + + + + Shortcut + Kısayol + + + + Action + Eylem + + + + Check spelling as you type + Yazdığınız yazıyı denetleyin + + + + Ignore words in UPPERCASE + BÜYÜK HARFLİ sözcükleri yok say + + + + Ignore words with numbers + Sayı içeren sözcükleri yoksay + + + + Language + Dil + + + + + Add + Ekle + + + + Remove + Sil + + + + Personal Dictionary + Kişisel sözlük + + + + Reader + + + + Not a supported RTF file. + Desteklenmeyen RTF dosyası. + + + + Unable to open archive. + Arşiv açılamadı. + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + Sahneyi yukarı taşı + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + Toggle sahne listesi + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + + + + + Hide scene list (%1) + + + + + Filter + Filtre + + + + Move Scenes Down + Sahneleri aşağı taşı + + + + Resize scene list + Sahne listesini yeniden boyutlandır + + + + Session + + + + + + + + + Default + Standart + + + + SessionManager + + + Manage Sessions + Oturumları yönet + + + + S&essions + Oturumlar + + + + New + Yeni + + + + Rename + Yeni ad ver + + + + Clone + Kopyala + + + + Delete + Sil + + + + Switch To + Değiştir + + + + New Session + Yeni oturum + + + + Clone Session + Oturumu kopyala + + + + Rename Session + Oturumu yeniden adlandır + + + + Question + Soru + + + + Delete selected session? + Seçili oturum silinsin mi? + + + + + Session name: + Oturum adı: + + + + Sorry + Pardon + + + + The requested session name is already in use. + İstenen oturum adı zaten kullanımda. + + + + &New... + Yeni... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + Yönet... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Temizle + + + + Reset to Default + Varsayılana sıfırla + + + + + Shortcut: + Kısayol: + + + + SmartQuote + + + Replacing quotation marks... + Seçili bölüm yerine ... + + + + Please Wait + Lütfen bekleyin + + + + SpellChecker + + + Check Spelling + Yazım denetimi + + + + &Add + &Ekle + + + + &Ignore + &Gizle + + + + I&gnore All + &Hepsini gizle + + + + &Change + &Değiştir + + + + C&hange All + &Hepsini değiştir + + + + Not in dictionary: + Sözlükte yok: + + + + Change to: + Sözlükte yok: + + + + Checking spelling... + Yazım denetimi ... + + + + Cancel + İptal + + + + Please wait + Lütfen bekleyin + + + + Spell check complete. + Yazım denetimi tamamlandı. + + + + SymbolsDialog + + + Symbols + Simgeler + + + + Recently used symbols + Son kullanılan simgeler + + + + All symbols + Tüm simgeler + + + + Details + Ayrıntılar + + + + Name: + İsim: + + + + Insert + Ekle + + + + SymbolsModel + + + Blocks + Bloklar + + + + Scripts + Senaryolar + + + + Theme + + + Untitled %1 + + + + + ThemeDialog + + + Modify Theme + Tema değiştir + + + + Name: + Adı: + + + + Background + Arka plan + + + + No Image + Görüntü yok + + + + Tiled + Tuğla + + + + + Centered + Merkezi + + + + + Stretched + Uzat + + + + Scaled + Ölçekli + + + + Zoomed + Yakınlaştır + + + + Remove + Sil + + + + Type: + Tür: + + + + + + Color: + Renk: + + + + Image: + Resim: + + + + Foreground + Zemin + + + + Opacity + Opak + + + + + + + pixels + Piksel + + + + Left + Sol + + + + Right + Sağ + + + + Position + Pozisyon + + + + Size: + Boyut: + + + + Rounding: + Yuvarla: + + + + Margin: + Kenar: + + + + Padding: + Dolgu: + + + + Text + Metin + + + + Font: + Yazı tipi: + + + + Misspelled: + Yanlış yazılmış: + + + + Spacings + Aralıklar + + + + Line Spacing + Satır aralığı + + + + Single + Yalnız + + + + 1.5 Lines + 1.5 Satır + + + + Double + Çifte + + + + Proportional + Orantılı + + + + Paragraph Spacing + Paragraf aralığı + + + + Indent First Line: + İlk satır girintisi: + + + + Pixels Above: + Piksel yukarıda: + + + + Pixels Below: + Piksel aşağıda: + + + + The quick brown fox jumps over the lazy dog + Tembel köpeğin üstünden hızlı kahverengi tilki atlar + + + + ThemeManager + + + Themes + Temalar + + + + Add + Ekle + + + + Modify + Değiştir + + + + Remove + Sil + + + + Import + İçe aktar + + + + Export + Dışa aktar + + + + Close + Kapat + + + + Question + Soru + + + + Remove selected theme? + Seçili temayı sil? + + + + Import Theme + Tema yükle + + + + Themes (*.fwtz *.theme) + Temalar (*.fwtz *.theme) + + + + Themes (*.fwtz) + Temalar (*.fwtz) + + + + + Sorry + Pardon + + + + + A theme already exists with that name. Please enter a new name: + Bu adla zaten bir tema var. Yeni bir ad girin: + + + + Export Theme + Temayı dışa aktar + + + + Timer + + + <b>%1</b> - %2 + + + + + Question + Soru + + + + Delete timer? + Zamanlayıcıyı sil? + + + + <b>Words:</b> %L1 + + + + + <b>Pages:</b> %L1 + + + + + <b>Paragraphs:</b> %L1 + + + + + <b>Characters:</b> %L1 / %L2 + + + + + Set Delay + Gecikmeyi ayarla + + + + Set Time + Saati Ayarla + + + + Delay: + Gecikme: + + + + Time: + Zaman: + + + + HH:mm:ss + HH mm ss + + + + Alarm + Alarm + + + + Type: + Tür: + + + + Memo: + Memo: + + + + Edit + Düzenle + + + + Delete + Sil + + + + TimerDisplay + + + HH:mm:ss + HH mm ss + + + + No timers running + Zamanlayıcı çalışmıyor + + + + TimerManager + + + Timers + Zamanlayıcı + + + + New + Yeni + + + + Recent + Son + + + + Question + Soru + + + + Cancel editing timers? + Zamanlayıcı iptal edilsin mi? + + + + +HH:mm:ss + +HH mm ss + + + + %1 - %2 + + + + + Tokenizer + + + Unexpectedly reached end of file. + Beklenmedik dosya sonuna ulaşıldı. + + + + Window + + + Loading themes + Temalar yükleniyor + + + + Loading sounds + Sesler yükleniyor + + + + + Untitled + Başlıksız + + + + Open File + Dosyayı aç + + + + About FocusWriter + FocusWriter Hakkında + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + + + + + Copyright &copy; 2008-%1 Graeme Gott + + + + + Released under the <a href=%1>GPL 3</a> license + + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + + Used under the <a href=%1>LGPL 3</a> license + + + + + + Characters: %L1 / %L2 + + + + + + Pages: %L1 + + + + + + Paragraphs: %L1 + + + + + + Words: %L1 + + + + + + %1% of daily goal + + + + + + Opening %1 + + + + + Question + Soru + + + + Save changes? + Değişikleri kaydet? + + + + + (Untitled %1) + + + + + Switch to Next Document + Sonraki belgeye geç + + + + Switch to Previous Document + Önceki belgeye geç + + + + Switch to First Document + İlk belgeye geç + + + + Switch to Last Document + Son belgeye geç + + + + Switch to Document %1 + + + + + Loading settings + Ayarlar yükleniyor + + + + Emergency cache is not writable. + Acil önbellek yazılabilir değil. + + + + + Warning + Uyarı + + + + FocusWriter was not shut down cleanly. + FocusWriter düzgün bir şekilde kapatılmadı! + + + + Restore from the emergency cache? + Acil önbellekten geri yüklensin mi? + + + + Some files could not be opened. + Bazı dosyalar açılamadı. + + + + Some files were opened Read-Only. + Bazı dosyalar salt okunur açıldı. + + + + Text Files (%1);;All Files (*) + + + + + '%1' is newer than the cached copy. + + + + + Overwrite newer file? + Yeni dosya üzerine yazılsın mı? + + + + Unable to load typewriter sounds. + Daktilo sesleri yüklenemiyor. + + + + Please make sure that SDL_mixer is installed. + SDL_mixer yüklü olduğundan emin olun. + + + + %1 (Read-Only) + + + + + &File + &Dosya + + + + &New + &Yeni + + + + &Open... + &Aç... + + + + Reloa&d + &Güncelle + + + + &Save + &Kaydet + + + + Save &As... + &Farklı kaydet... + + + + &Rename... + &Yeniden adlandır... + + + + Save A&ll + &Hepsini kaydet + + + + Manage Sessions + Oturumları yönet + + + + New Session + Yeni oturum + + + + &Print... + &Yazdır... + + + + &Close + &Kapat + + + + &Quit + &Çık + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Düzenle + + + + &Undo + &Geri + + + + &Redo + &İleri + + + + Cu&t + &Kes + + + + &Copy + &Kopyala + + + + &Paste + &Yapıştır + + + + Paste &Unformatted + &Değiştirmeden yapıştır + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + &Hepsini seç + + + + Select &Scene + &Sahneyi seç + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + &Biçimlendir + + + + &Bold + &Kalın + + + + &Italic + &İtalik + + + + &Underline + &Altı çizili + + + + Stri&kethrough + &Üstü çizili + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + &Üst simge + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Simge + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + &Sola hizala + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + &Ortaya hizala + + + + Ctrl+| + Ctrl+| + + + + Align &Right + &Sağa hizala + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + &Yasla hizala + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Girintiyi azalt + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + &Girintiyi arttır + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + &Soldan sağa blok + + + + Ri&ght to Left Block + &Sağdan sola blok + + + + &Tools + &Araçlar + + + + &Find... + &Bul... + + + + Find &Next + &Sonrakini bul + + + + Find Pre&vious + &Öncekini bul + + + + &Replace... + &Değiştir... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + &Akıllı alıntılar + + + + Update &Document + &Dökümanı güncelle + + + + Update &Selection + &Seçili olanı güncelle + + + + &Spelling... + &yazım... + + + + F7 + F7 + + + + &Timers... + &Zamanlayıcı... + + + + S&ymbols... + &Simgeler... + + + + &Settings + &Ayarlar + + + + Show &Toolbar + &Araç çubuğunu göster + + + + Show &Menu Icons + &Menü simgelerini göster + + + + F&ocused Text + Metne odaklan + + + + &Fullscreen + &Tam ekran + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + &Küçült + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Temalar... + + + + &Preferences... + &Tercihler... + + + + Focus Off + Odaklanma kapalı + + + + Focus One Line + Bir satıra odaklan + + + + Focus Three Lines + Üç satıra odaklan + + + + &Paragraph + &Paragraf + + + + Focus Paragraph + Paragrafa odaklan + + + + &Help + &Yardım + + + + Application &Language... + &Uygulama dili ... + + + + Some files were unsupported and could not be opened. + Bazı desteklenmeyen dosyalar açılamadı. + + + + &Off + &Kapalı + + + + One &Line + &Bir satır + + + + &Three Lines + &Üç satır + + + + &About + &Hakkında + + + + About &Qt + &Qt Hakkında + + + diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 923b6767..35d65c57 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - + Save File As Зберегти файл як - - + + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) @@ -643,17 +643,17 @@ Unable to open archive. - Не вдалось відкрити архів. + Не вдалось відкрити архів. Unable to open file '%1'. - Не вдалось відкрити файл '%1'. + Не вдалось відкрити файл '%1'. Unable to close file '%1'. - Не вдалось закрити файл '%1'. + Не вдалось закрити файл '%1'. @@ -684,12 +684,12 @@ - + Show scene list (%1) - + Hide scene list (%1) @@ -942,7 +942,7 @@ Name: - Назва: + Назва: @@ -1123,7 +1123,7 @@ Single - Одинарні + Одинарні @@ -1133,7 +1133,7 @@ Double - Подвійні + Подвійні @@ -1396,631 +1396,631 @@ Window - + Loading themes Завантаження тем - + Loading sounds Завантаження звуків - - + + Untitled Без назви - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Символів: %L1 / %L2 - - + + Pages: %L1 Сторінок: %L1 - - + + Paragraphs: %L1 Абзаців: %L1 - - + + Words: %L1 Слів: %L1 - - + + %1% of daily goal %1% щоденного завдання - - + + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - - + + (Untitled %1) (Без назви %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + S&ymbols... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_zh_CN.qm b/translations/focuswriter_zh_CN.qm index 3434267bf6dba73341fab83db930790de95eedbf..04e5fa24ec88a35359be0b981b3e4354d0c8e251 100644 GIT binary patch delta 4926 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 BOfdie delta 2499 zcmXYydt6jy8poe=o!dDxa#4^#7!Vm|fEiRwP*D^`Nzgu;7P?vrl!k69YN2)#+TFN_ z`WZ1Y7ojp2AtVRf6uhK}ga)``DSg5W-Ilztn-@Nc!2am;*Y}+Feb4*ce$R6{%9%q> zMw$Fos&{kG{-STqzNcR;JNe^uBAtbZ|B&eU3ZjJ1h=c&`o?DPh|Om__lZ=E}jG%*8PW*pe&k6Bs)l0bdX5= znuN-SMCLBC?j21O_K2*Xze5zBOxB?b!fVOe77X4b>s<#7WRfla2$8*?Yz5f2UnX1e zc_PO?vNd3Rtb?X`brP`|G~2QR4#<=^0rtE$fki|?9i+VQ;&2$AL`i8`M5A`m{9RXx zqJO3Z4OXI1h8E`J5&6BO(*Fv*+z$r>ZcxfFtef*GWz|P8Fij=@Smm(IDt)%A3@)IQ zGjQC^mzJ?Rf5}9^VXEVwXZDg4IcZsIBn27eDiL@5RQLvWC!=-X~A2WaKUy$knW?dJ)8#9y1 zJpC0>>;k6jz%rt#iZ4_1%!LcKFn1PULHw1uckdP=?qr4HokZ>~cG&xTok#d*TxW zlFA;-!#R5dTbDkLNQrD?+owhl*;?4EXJIJ%OSYpckZ61k+Zpm2QHY)W-#r+d>|p!P zdtm=P&fQW-G%K^4^u5P5w@8aoLIa;P?Kr;sh0oZy3nd)nm39~!(Z_Eey5AAX z?~&_>CiU>ebLxqnYvMnjkfK0z6Zwk5yNLK(@ILqygvclnd`c7*0;1MY3&DPHJ72Mr z0joe3`~ftg&9tBii~?=o3NQ@Z35J99e5IusUEts=!;m@eH$VjsmPLHci51X59DnS1 zFp+^(IVzPu&Lj~H*YIcmJ_?S-@J%Ia(eIvo>l^WKa17tNX%A}7^H**kMnn$;<{{=n zOo_m4%R^w@0{{Ddsu2Ga4*LE{n0e$n&Nm1zo_+;(_6pfbRUrmPyO6(sAvBOF6wEpg zb=y@2)T#{j6$)lY;oL!?xGe$u%Y~1!Ax3kQP?`*fO)V?`Lu5h_=XA`$xp`t@9~hb}rhE-?>KXC%Qiw4iOw8~&1(7`w z*A%wHP?A_$5rOqwu`$CFgXyk#ZQcMhw@6VRMtmUlnmeG@)#9_Gpj)Gcvp&Koc4@?q zA*$Gu8uwl|h-bPcYOt?X9@=?4?>Du&eJ8FDcyLIUNuu5(2z+3oVG-~&3gGQ#dX)lDJguJM2Zs1X( zW7_sxaM-(3WsIlx!N`B1o6>Z`(s$AS_K$S|{fNZ(hAwc3&&|^XFM~*g(Yh=bYRSsF zoU9h`m@Y43946a(U2$Rq+SINqS!{$RrmKvZr90KN5B;B@yWfHzlXZ-4Fai+HL0KD|JZ%{JEPd_PrKl*=in?9{|Ce(OIU$YJ$xX;qp7i6Mu+w~Xs2r$&I zzmu+m1hyFT*;i20QiDkdLgfE3%q>GrygcWT7&z?8_xOe#sJ!6Xs+ml11pAz{^x#B7mO~IBmX!sx<`EvwWzcusGO8#xZDkq z2}=y!aiJK!(T01ckdaY!62A|D#H^P*hp$9ix2g=iCwa!=-MUW-XnQ(@Cl?vj#mW4JDr8WW_1EH|l_J?s zal-S7v2y$?m~37hAU^aq%gYX;*4iWT+Q)xJBw6yt?>9p2OXV$RlF?2sId{GnQZ316 zDo{&NkQ@Afu63O@@{Dtb`&nnc zht>68kAHBkCNC@N3i3(eT+jSAu+HmIKF)MMFPF~TF1jvTw(!nuhqv=d_-jtP{hD)z Tqt-chypJ<8(! Close (%1) - + 关闭 (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + 忽略警告 @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. 不能保存 '%1'。 - + Save File As 保存文件为 - - + + Unable to overwrite '%1'. 不能覆盖 '%1'。 - + Rename File 重命名文件 - + Unable to rename '%1'. 不能重命名 '%1'。 - + Reload File - + 重新加载文件 - + Reload the file %1 from disk? - + 重新从磁盘中加载文件 %1 ? - + All unsaved changes will be lost. - + 未保存的更改将丢失。 - + Reload - + 重新加载 - + Plain Text (*.txt) 纯文本 (*.txt) - + Question - 询问 + 问题 - + Saving as plain text will discard all formatting. Discard formatting? - + 保存为纯文本将丢弃全部格式。丢弃格式吗? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) 所有文件 (*) @@ -124,42 +124,42 @@ File Changed - + 文件已更改 The file %1 was changed by another program. - + 文件 %1 已由其他程序更改。 Do you want to reload the file? - + 您要重新加载文件吗? Reload - + 重新加载 Ignore - + 忽略 File Deleted - + 文件已删除 The file %1 was deleted by another program. - + 文件 %1 已经由其他程序删除。 Do you want to save or close the file? - + 您要保存或关闭该文件? @@ -187,7 +187,7 @@ Regular expressions - + 正则表达式 @@ -202,17 +202,17 @@ &Find - + 查找(&F) &Replace - + 替换(&R) Replace &All - + 替换全部(&A) @@ -375,12 +375,12 @@ Shortcuts - + 快捷键 One or more shortcuts conflict. Do you wish to proceed? - + 一个或多个快捷键冲突。您要继续吗? @@ -581,17 +581,17 @@ Command - + 命令 Shortcut - + 快捷键 Action - + 动作 @@ -659,7 +659,7 @@ Ctrl+Shift+Down - + Ctrl+Shift+Down @@ -669,7 +669,7 @@ Ctrl+Shift+Up - + Ctrl+Shift+Down @@ -679,22 +679,22 @@ Shift+F4 - + Shift+F4 - + Show scene list (%1) - + Hide scene list (%1) Filter - + 过滤器 @@ -825,18 +825,18 @@ Clear - + 清除 Reset to Default - + 恢复默认 Shortcut: - + 快捷键: @@ -862,27 +862,27 @@ &Add - + 添加(&A) &Ignore - + 忽略(&I) I&gnore All - + 忽略全部(&G) &Change - + 更改(&C) C&hange All - + 更改全部(&H) @@ -920,27 +920,27 @@ Symbols - + 符号 Recently used symbols - + 最近使用过的符号 All symbols - + 全部符号 Details - + 详情 Name: - 名称: + 名称: @@ -1121,7 +1121,7 @@ Single - 单引号 + 单引号 @@ -1131,7 +1131,7 @@ Double - 双引号 + 双引号 @@ -1394,631 +1394,631 @@ Window - + Loading themes 载入主题 - + Loading sounds 载入声音 - - + + Untitled 无标题 - + Open File 打开文件 - + About FocusWriter 关于 FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 字符数:%L1 / %L2 - - + + Pages: %L1 页数:%L1 - - + + Paragraphs: %L1 段落数:%L1 - - + + Words: %L1 单词数:%L1 - - + + %1% of daily goal 每日目标的 %1% - - + + Opening %1 正在打开 %1 - + Question 询问 - + Save changes? 保存更改? - - + + (Untitled %1) (无标题 %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings 栽入设置 - + Emergency cache is not writable. 紧急缓存是不可写的。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter 没有完全关闭。 - + Restore from the emergency cache? 从紧急缓存中还原? - + Some files could not be opened. 有些文件无法打开。 - + Some files were opened Read-Only. 一些文件以只读方式打开。 - + Text Files (%1);;All Files (*) 文本文件 (%1);;所有文件 (*) - + '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - + Overwrite newer file? 覆盖较新的文件? - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (只读) - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左至右块(&F) - + Ri&ght to Left Block 右至左块 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + &Timers... 定时器(&T)... - + S&ymbols... - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About 关于&About - + About &Qt 关于 &Qt From cb827de3da01288808c0b5ffd30e340f29258da1 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 19 Nov 2012 19:53:09 +0000 Subject: [PATCH 088/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 27735e4e..2492ec38 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.4.0.2012.11.18-1) unstable; urgency=low + + * merge upstream changes on branch release-1.4 + - Sync translations with Transifex. + + -- Barak A. Pearlmutter Mon, 19 Nov 2012 19:52:37 +0000 + focuswriter (1.4.0.2012.11.04-1) unstable; urgency=low * merge upstream bug fixes on branch release-1.4 From d464aaf280c95559597c00a33be11d5a00e256f7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 20 Nov 2012 09:54:29 -0500 Subject: [PATCH 089/630] FIXED: Showing scene list moved cursor to start of document. --- ChangeLog | 3 +++ src/scene_list.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e82d0cfd..c69185ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-20 Graeme Gott + * FIXED: Showing scene list moved cursor to start of document. + 2012-11-18 Graeme Gott * Sync translations with Transifex. diff --git a/src/scene_list.cpp b/src/scene_list.cpp index e82c55a0..457b8c0f 100644 --- a/src/scene_list.cpp +++ b/src/scene_list.cpp @@ -137,7 +137,6 @@ SceneList::SceneList(QWidget* parent) : m_scenes->setWordWrap(true); m_scenes->viewport()->setAcceptDrops(true); m_scenes->setModel(m_filter_model); - connect(m_scenes->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(sceneSelected(QModelIndex))); m_scenes->show(); setFocusProxy(m_scenes); setFocusPolicy(Qt::StrongFocus); @@ -211,6 +210,7 @@ void SceneList::setDocument(Document* document) void SceneList::hideScenes() { if (m_document) { + disconnect(m_scenes->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(sceneSelected(QModelIndex))); m_document->sceneModel()->setUpdatesBlocked(true); disconnect(m_document->text(), SIGNAL(cursorPositionChanged()), this, SLOT(selectCurrentScene())); } @@ -227,11 +227,11 @@ void SceneList::hideScenes() m_filter->clear(); + hide(); + if (m_document) { m_document->text()->setFocus(); } - - hide(); } //----------------------------------------------------------------------------- @@ -255,6 +255,7 @@ void SceneList::showScenes() m_document->sceneModel()->setUpdatesBlocked(false); connect(m_document->text(), SIGNAL(cursorPositionChanged()), this, SLOT(selectCurrentScene())); selectCurrentScene(); + connect(m_scenes->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(sceneSelected(QModelIndex))); } m_scenes->setFocus(); From 0e0600140de686dde9a8b90c3dd8a1cae765b810 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Nov 2012 07:51:43 -0500 Subject: [PATCH 090/630] FIXED: Crashed when typing circumflex with focused text. Closes #105. --- ChangeLog | 3 +++ src/document.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c69185ff..ff71a102 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-26 Graeme Gott + * FIXED: Crashed when typing circumflex with focused text. + 2012-11-20 Graeme Gott * FIXED: Showing scene list moved cursor to start of document. diff --git a/src/document.cpp b/src/document.cpp index 17c54c08..ee45186c 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -744,10 +744,12 @@ void Document::setFocusMode(int focus_mode) m_text->setStyleSheet(style_sheet); if (m_focus_mode) { - connect(m_text, SIGNAL(textChanged()), this, SLOT(focusText())); + connect(m_text, SIGNAL(cursorPositionChanged()), this, SLOT(focusText())); + connect(m_text, SIGNAL(selectionChanged()), this, SLOT(focusText())); focusText(); } else { - disconnect(m_text, SIGNAL(textChanged()), this, SLOT(focusText())); + disconnect(m_text, SIGNAL(cursorPositionChanged()), this, SLOT(focusText())); + disconnect(m_text, SIGNAL(selectionChanged()), this, SLOT(focusText())); m_text->setExtraSelections(QList()); } } From 941ae3839b235c6b910bc3fca2a4fc62986e0344 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Nov 2012 12:15:19 -0500 Subject: [PATCH 091/630] Use QSound on Windows because SDL doesn't always work. --- ChangeLog | 1 + focuswriter.pro | 2 +- src/qsound/sound.cpp | 116 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/qsound/sound.cpp diff --git a/ChangeLog b/ChangeLog index ff71a102..b0689d0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2012-11-26 Graeme Gott + * Use QSound on Windows because SDL doesn't always work. * FIXED: Crashed when typing circumflex with focused text. 2012-11-20 Graeme Gott diff --git a/focuswriter.pro b/focuswriter.pro index 04d9f3e7..6a0ee980 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -62,7 +62,7 @@ macx { src/enchant/dictionary.cpp \ src/enchant/dictionary_data.cpp \ src/enchant/dictionary_manager.cpp \ - src/sdl/sound.cpp + src/qsound/sound.cpp } else { INCLUDEPATH += src/enchant diff --git a/src/qsound/sound.cpp b/src/qsound/sound.cpp new file mode 100644 index 00000000..16b2fd47 --- /dev/null +++ b/src/qsound/sound.cpp @@ -0,0 +1,116 @@ +/*********************************************************************** + * + * Copyright (C) 2010, 2011, 2012 Graeme Gott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + ***********************************************************************/ + +#include "../sound.h" + +#include +#include +#include + +//----------------------------------------------------------------------------- + +namespace +{ + // Shared data + QString f_path; + bool f_enabled = false; + + QList > f_sounds; + int f_total_sounds = 0; + QHash f_ids; + QHash f_sound_objects; +} + +//----------------------------------------------------------------------------- + +Sound::Sound(int name, const QString& filename, QObject* parent) : + QObject(parent), + m_id(-1), + m_name(name) +{ + f_total_sounds++; + + if (f_ids.contains(filename)) { + m_id = f_ids.value(filename); + } else if (QSound::isAvailable()) { + m_id = f_sounds.count(); + QSound* sound = new QSound(f_path + "/" + filename); + f_sounds.append(QList() << sound); + f_ids[filename] = m_id; + } + + f_sound_objects[m_name] = this; +} + +//----------------------------------------------------------------------------- + +Sound::~Sound() +{ + f_sound_objects[m_name] = 0; + f_total_sounds--; + if (f_total_sounds == 0) { + int count = f_sounds.count(); + for (int i = 0; i < count; ++i) { + qDeleteAll(f_sounds[i]); + } + f_sounds.clear(); + f_ids.clear(); + } +} + +//----------------------------------------------------------------------------- + +void Sound::play(int name) +{ + if (f_enabled) { + Sound* sound = f_sound_objects.value(name); + if (sound && sound->isValid()) { + QSound* qsound = 0; + QList& sounds = f_sounds[sound->m_id]; + int count = sounds.count(); + for (int i = 0; i < count; ++i) { + if (sounds.at(i)->isFinished()) { + qsound = sounds.at(i); + break; + } + } + if (qsound == 0) { + qsound = new QSound(sounds.first()->fileName()); + sounds.append(qsound); + } + qsound->play(); + } + } +} + +//----------------------------------------------------------------------------- + +void Sound::setEnabled(bool enabled) +{ + f_enabled = enabled; +} + +//----------------------------------------------------------------------------- + +void Sound::setPath(const QString& path) +{ + f_path = path; +} + +//----------------------------------------------------------------------------- From 528bbeaa3fc686bd72b1ec695b45921a992fbbef Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 27 Nov 2012 15:47:36 -0500 Subject: [PATCH 092/630] FIXED: High CPU use in Ubuntu 10.04. --- ChangeLog | 3 +++ src/highlighter.cpp | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index b0689d0a..08711e75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-27 Graeme Gott + * FIXED: High CPU use in Ubuntu 10.04. + 2012-11-26 Graeme Gott * Use QSound on Windows because SDL doesn't always work. * FIXED: Crashed when typing circumflex with focused text. diff --git a/src/highlighter.cpp b/src/highlighter.cpp index 2f8aa06f..0444f8ed 100644 --- a/src/highlighter.cpp +++ b/src/highlighter.cpp @@ -144,12 +144,21 @@ bool Highlighter::eventFilter(QObject* watched, QEvent* event) void Highlighter::highlightBlock(const QString& text) { BlockStats* stats = static_cast(currentBlockUserData()); +#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0)) if (!m_enabled || m_text->isReadOnly() || !stats || (stats->spellingStatus() == BlockStats::Unchecked)) { return; } if (stats->spellingStatus() == BlockStats::CheckSpelling) { stats->checkSpelling(text, m_dictionary); } +#else + if (!m_enabled || m_text->isReadOnly() || !stats) { + return; + } + if (stats->spellingStatus() != BlockStats::Checked) { + stats->checkSpelling(text, m_dictionary); + } +#endif QTextCharFormat error; error.setUnderlineColor(m_misspelled); @@ -176,6 +185,7 @@ void Highlighter::updateSpelling() return; } +#if (QT_VERSION >= QT_VERSION_CHECK(4,7,0)) QTextBlock block = m_text->textCursor().block(); bool found = false; @@ -205,6 +215,9 @@ void Highlighter::updateSpelling() if (found) { m_spell_timer->start(); } +#else + rehighlight(); +#endif } //----------------------------------------------------------------------------- From d03a179717c186bad7db7c46b3d5398b4c534e3a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 28 Nov 2012 09:29:43 -0500 Subject: [PATCH 093/630] Always call QTextEdit's keyPressEvent. --- src/document.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index ee45186c..530d3168 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -143,11 +143,11 @@ namespace void TextEdit::keyPressEvent(QKeyEvent* event) { + QTextEdit::keyPressEvent(event); + if (event->key() == Qt::Key_Insert) { setOverwriteMode(!overwriteMode()); } else { - QTextEdit::keyPressEvent(event); - // Play sound effect int key = event->key(); if (!(event->modifiers().testFlag(Qt::ControlModifier)) && From fb718a44273bdd3e57e5b8dcb7950b7a57efe1cf Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 28 Nov 2012 09:36:25 -0500 Subject: [PATCH 094/630] Sync translations with Transifex. --- CREDITS | 1 + translations/focuswriter_ca.ts | 20 +-- translations/focuswriter_cs.ts | 20 +-- translations/focuswriter_da.ts | 20 +-- translations/focuswriter_de.ts | 20 +-- translations/focuswriter_el.qm | Bin 25303 -> 31955 bytes translations/focuswriter_el.ts | 194 +++++++++++++-------------- translations/focuswriter_en.ts | 20 +-- translations/focuswriter_es.ts | 20 +-- translations/focuswriter_es_MX.ts | 20 +-- translations/focuswriter_fi.ts | 20 +-- translations/focuswriter_fr.ts | 20 +-- translations/focuswriter_he.ts | 20 +-- translations/focuswriter_hu.ts | 20 +-- translations/focuswriter_it.ts | 20 +-- translations/focuswriter_ja.ts | 20 +-- translations/focuswriter_nl.ts | 20 +-- translations/focuswriter_pl.ts | 20 +-- translations/focuswriter_pt.ts | 20 +-- translations/focuswriter_pt_BR.ts | 20 +-- translations/focuswriter_ro.ts | 20 +-- translations/focuswriter_ru.ts | 20 +-- translations/focuswriter_sk.ts | 20 +-- translations/focuswriter_sv.qm | Bin 23211 -> 31120 bytes translations/focuswriter_sv.ts | 212 +++++++++++++++--------------- translations/focuswriter_tr.ts | 20 +-- translations/focuswriter_uk.ts | 20 +-- translations/focuswriter_zh_CN.ts | 20 +-- 28 files changed, 434 insertions(+), 433 deletions(-) diff --git a/CREDITS b/CREDITS index f4bd56d4..3a799744 100644 --- a/CREDITS +++ b/CREDITS @@ -26,6 +26,7 @@ Translators * Dmitriy Kodanev (ru) * Jan Gallik (sk) * Daniel Nylander (sv) +* Påvel Nicklasson (sv) * Ülgen (tr) * Sergiy Gavrylov (uk) diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 445ed636..6ee23e3e 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text enriquit (*.rtf) - + All Files (*) Tots els fitxers (*) @@ -684,17 +684,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -704,7 +704,7 @@ - + Resize scene list diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index e394fd22..5b8546f1 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -89,32 +89,32 @@ Nahrát znovu - + Plain Text (*.txt) Prostý text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -684,17 +684,17 @@ Shift+F4 - + Show scene list (%1) Ukázat seznam scén (%1) - + Hide scene list (%1) Skrýt seznam scén (%1) - + Filter Filtr @@ -704,7 +704,7 @@ Přesunout scény dolů - + Resize scene list Změnit velikost seznamu scén diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 18369fda..e80e556b 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -89,32 +89,32 @@ Genindlæs - + Plain Text (*.txt) Ren tekst (*.txt) - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) @@ -683,17 +683,17 @@ Shift+F4 - + Show scene list (%1) Vis liste over scener (%1) - + Hide scene list (%1) Skjul liste over scener (%1) - + Filter Filter @@ -703,7 +703,7 @@ Flyt scener ned - + Resize scene list Juster liste over scener diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index ea1a4d4f..8e5f66d3 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -89,32 +89,32 @@ Neu laden - + Plain Text (*.txt) nur Text (*.txt) - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) @@ -683,17 +683,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -703,7 +703,7 @@ - + Resize scene list diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm index 4592d63ee7070de95124c38c9856e42d5580145e..95cfd98d9aa78d322b3a59dc32ce81b4a8fb3204 100644 GIT binary patch delta 8593 zcmbtZ2~XX^e^g zIS^wjW-u`l915a{hzdA`7^CJV+N~?b__NGlI{8W48PwkQJt#^g>F)KHi#l((_uMn= zeeSu>&zcnHe^q!A59EiR{$b08k9tJZFW6ppc^r|UFOg~!(IbsS6W<~VdRLa6qGUPV zL6nw^_vJ(xBIM&lGfofKH-lil2#+6DWFPZ=$JvDSF3p$W;{06lAI>`fMa*A|w|ix=6A38Wg0S zQ@HC75H0#%v3*-EQSn_x)gN9cSgg3{K_qg2Rb20>CMro(e4B;$9j7V2|NbkYk(o+$ z*(*em)ykk}^N4!?O&R_H9P6f6W|?3>mO^Q1T1@n)pcD$AZ+@9_#kJW)p77_CYwPb2 zb$?#DVe8vODQ4x?k?BM|4k+K**hnVt0(&041XU^T`~+perF7!1Je zRMv_xcz(L_!kAd1$<@kFkHG-T*UC%RdLmN4E3fpi0J!IrKYkBG3Rf#{HwEMU8(hb} zYso_kqPhM?C{%UkhU~n71x|7!KD>g^y0~1)pjWx2yOENlW!&?>ya(C9z4!$TOw8lT zxPC-RHMg_RRe;LF?U}U}VBF5_c^Qld`;e=>c!sF&W$wd2%rLZw`}>_Ah$g(qU0t`8 zX!us{EAty3qL51N7Z+Y+Sh+tgP5~JIrqb8^1dDl9U*jxbW07h?c@R!-;XyVez>~8Q@;2li)vi|*ke4BqM053!X2@ztfNSoTkTKwQ zAY^~YM92Yj^XL;|$Ast-KuVw6%O52hz@G=m%9` z6Q-%xJUkThR;kO*P6Qoe)vrBMg}TsF{aRxK?(OPr&mi~x%hcsl;CPQ`J@UoaTy^=6 z@kH69)Rhewm^wneCsD-0E7W`TV`2L?byc$yn8;UuHhCLDdP;pczdMmGPMv;h@v0SX!AM)6Y-kRJS;q}SQB;?^qezO6Fw8UpYpn9;1)c8$IDz5y{+W?JmV>IB-q7OM~~pUu!Fl z=Ys!37iwz@I243w+G{<&!Geo*y7v&$qEKDL-KD_B1YP`3Z=f{a(v5fm1{r7QCXTpC zqKG_FSgc$BL^mQwjBaz_5F%TdZbv3qH2>g-+c+A3BHHeKB9zB{E+PxVsi93GAci zn^uAy=k+nCfDNTfKe9V=TCCKMD%gUEx%K%8a3E}oUif$d#?8}LEynyvrT)+wH|V-W z-xR(Psi@YUe#!+p3i=N{>(wZY|Dpfz5IjzZ&|h0IAE++VUmpk09&ONnTM$5`h%|5; z^N`abgZ`QG0AB|~pt={f&rn0g_E=QR2tz?%L?~*d!TK>anZ;8LOGiA7@!Jf`I)N3# zZX4eIatg3hY1p$zi^8+s&=9c>CA*iwb9&bmcyihxNmEBzc2AdOT&651be3iMG+9nI z%2FsXd~yS<2pVU&k=zfv-Ft=`B{PxpCk)>oMuHfK>1puu&&EeUPm=NSF%AWbGk$UV z4)*^#S;lzQ8h==Y+=PZ3|2qzbC>9&<{CysBKF*|aRbn?=WYT}0f&z5O)K!E>xsRC= z7X1upjWwmr`4M}-a7gSG1C@|aJTT3alB2=%C8pfB2V-+fFxmgh0ne?b($7HKt`5^< zN05r>O{P_uVW>ZggH12^&Vs}C~($ASe6(TD0Kf72K*jq-8}=f z`}aUs*-jYp&%oLND-aNI%}@a0z_h$hdxhCaIHcg43-K(*rh*?aQs>j&RM~ zLGCEm#GT~!6VGjcrYf!;&+DOgKQ!;>j8Bv%}%Q5$LJI-*LEhlxyTp zF(-WbG}8r}!;;Tpp-XY(l@<$jw}M5p@1ISDY3szXhHwv?$ER9t!h@4%|Hb4+_|znM zeH1>jbV>KLOG;I(^ag2wWFzY!tE7}3L_$aT?Cv@}LNc6p7YTd;jNl{V_yVV+n9sMm z9vveF8~Q7lncfcT;I-d6+)hztjMkpyHnEk&r{;C?ARyJ!av!lIvB!|LEcCc$>0)SN z>5>hX(<3MJD3tF8Rxk!*n=y-_rcwF@0`c}Ze*Mrxv3M`zjLogVTo0QfO_j2b$&ze$ zI^ML!U_zEmJ&0@9lZef{Q1_OeSXL089767Bb;Vibe-543m1F+Kbwr69s zVppT6ZHd14WK5WN##rRLA8lIUyFP4+k4r@x{yyBShLbF4Ko)+h{ZPi7Zsg9ept3RI zf|w9-YmPp(dy0c!?kMG#TI_D#?ckmF=5Gu`QD7?sXIb2NMS@d8Vy^#^;;W`G(?_k! zv2>+4COX7_Ay3qO3o)+n4kw={F~1crf4*K6^5cUHR(Mf@56ka5I9|(DaEDpGeNZ$q z4)Eh8E`mttG1_&5P4`#39?7o;=Z`|+@pcrZ2sXhjNX%?kpBehRh<~$OmVD-TG--u) zhf`u@yA%IkMWI~{^SHNKc;e@fL|>kJ-{T8cYh62mItHF2fQ&SZ*%eYC8P$%!|7Ix) zdqJ{8KvP?-i<#la?WI7uT<`Mvh0A%1-GNLx`4Xq2&}k`-Z9|U-70e$#+3gzJR&A>8 z$pho!zh-3upD$Znw!JzrdG?!-mlkvXWdI3O@Ur;C~{fa7^$ zi8;jkpQf%#1$!64Q?X<;Y6cph~(0XFH>UD2s~7N(JPm z7)qrfKGWbdvnqASy|cWPF%=rm21N8A(s}?^$>3`1YSiOxf<;=(*cyik`BvGPgnN1u zwp&#I77UsUa^<+MZ_&%%G0@7J|6ZS2LDL17@QAdDr3eLlCZS z<|vf5(Qxi{py~+JFwDFU-&kVnaz2?b@YdhfIspf<3CF$X~&*Zj=ek zFC&3$ShgIKnAJyQiur-WlxbZi*l@&H=vX3*WNZJ))PsLIbsRdarP5UK@ezaib%d$x zK)^a&uT+oQ;$+NpI!aLBtPZ=yCOKL$;u}S!xM^fgR42*BddbBK{4)5ofk)RGovTAb zy+4lZ#UVT)Nh=j)-q(_Ds&O89F(qB`iuZgNXVCR=QocY7$y6ti~q{5+@g?-quRH9DL`|ZWrDAD)@nZ(r0eqG}4^~e9c_o+-? z=_x{r*?Eth{Mcs8wn4VNvEyZpRB>3}-_Wx0F^=MlL{XGS4l1GLGzxd|Gzk9^Xn@>m z(L{2R1pq3>ACEf+3aH!1=HBBSCCi=G!Xh^xl^2fdQGEQMK?wtJPMYYn2*mvm?p?F;UZpOG!xX4b@ z$0bJ(!F|?g?Dr+1up;dOIelgsBn`8iR&2N4`s@;A za5;d-7H$UE&?;i>*G1!?uHyVT(Jk-TA)I~ZV61vw+%jj9ba)Q&-ky`K@T~BaC$`^8 z2jdp_?}Orfcvb_oQjd>pFj}xijUAYPV<0n&QYeGw1E+GqbK(s<_cOAyQS21NG_&T8 z<#Ru@OUG^bEHH?DxuF4>*wXRkrr7c*ny^xIV(ub~o6kzgm|u(v>Ex|0-fDNbapD!@ z<_C*W-6O?ibB&%wXn2~So|(3mO*;`?rcGStQkt@Pz4D&Om#`<04|<+g}NCO(A!?(*Uv z+e+Xp%){p|pIISUORYFovlg}WoQeu_2~<5)0b*>y4*gk z_p3~lRnB}15oVtbnxJ+s0Kg7_?W+!JQ=MV?3(X0#=4tFRm)vCGE6x8!>lF5>q%{in z+dEd)nkF}c`{6u0N3f>+ue5h*vpLf#EU`LJwOUs2PFxVG^ep4vK}=bdmp)IzWPBl% zRJR^b{&iSp+y_jaK~v5cK1@*mnG!1717*hlipm$;wO^(aqYl2%AwavO9gWeb^&Bl# z0q%eYq-F>3Dd)D(j4=u#CR7&-xz-a%eBoIbZvD%IseTc=k-44{Lb(D`!1jF_uPET+^T2Hfk$TA zHNGg?dc~p7scE}T+#N-v_95c85k+q%8ncH;)g)82lR4OyC?W*w8Mq`|;Y8yu5IJv= z`PsL`R^vJ33Gw@}H!73(TApb5G~%zDV0$+S?s)GNNP>An7?Je_5+>{=(wIo7ctzyf zLdNf%h(_KZd)`5!(81)s0qda(axbh0|04G~ zybo)j;GQi+Tn`F&-AFVniy{MX-hjT~R-(ZXWR6NeH0mEICN+o1Gmqjo|3VbEmJ;iX z@c2B9TfLshgO%xRqDdd&picoMcf)(%OiG@;ort|JQ+ZdWUARn_lQIMLQu1jy-phq1 zv(-d{ifJ;3{Ua*OG(~}%K@Vh(xJgq=jYL+j>2qBWk!d=m@PmoM^;Fs!N96L3nw{4X z_4q(7jqizK$1_acS487yFkVd$h{OcOXG11YpEok?Z!qzLz9#a{X6CnI-;gCt)~O>z z6TV}1{V&$cEoXCDClPfEV)IXRz#$uU>(0GMX*IiZcqCEJui5?I*P(>PY*|;TgNdy#NKIjM8yANTU@3S4PC4V)VV7EnTm!kOU5@w%aNpjCBVO~kLe7nd?s26q zzd-}eT;)XU4~gO`H!deL8P;&M%~y%~m2sCo=ph;_?$?eNL;+shZ(DW}xv$|K>fyPr zgnPXZ?>{qeADUw!qRG7G=u4#ZJnt$_Larg? zi!adC5{>a>U+?feO#r(BdCO9~VzqY6VH8=A&+sY8pQ-OJf zxe(tVa4Xg$^(uk?wB9M0-oZg*t`K&x8Kqe*B%Dej>b^?IH6O?)8n{KsD;kH?J{C5N zu7{Xb%Ji8k)4yHV5blrf#tMbk$6)=quss)I^yP(;SUB7>L8fo8aNyiIl^@@PhgGyf29CjS6K-Zz657qDKl0`&ldO z#-k)7LloXcc#f`83|b8bux04GSai!9#c=KwGBQaKaVG)?Jyk@$2S>OllFvY-hG0c{ z2}J2#qsXv63AI}(=H@pclP!vpaxcseFU9!`8=}!|X2tEe4v4R(OozLQc85DiUAf}J zA+WbW$r)c0>C2Rge?nXnHA<`Y?nDVElo?M#aZru;DS;Lb*jcX9;N!1s_7vdc6N{%*P!~V*A4W)Sg97Ke1#M>s_j1_5_gl@v5RgR zwewVnMP;kbv7n~xM)m5PtC-~_>h)fJm~h4F!pJ&I$UW+v6ZJ5BLT0?L`ef@4Ov*{> z=U3MvfFbHmFGQ@=sXOzLQDvgWzJ4_VFlpQyF#m~((Tqqdg8F-DQm=(Ul~**?^Rc1# zHO=u2S?J$X&7}eXbKx7!lQcCXAZazZH!(nJwFY4TB5&13??O!-+q7w}h^SAzcJ{UT zL`hNF#lu#iB>vhZHqe-{Ra;r9gndDKt`Gi{LmRY>41*Qng8@?QNL@d&%@a zEpvFg%+C(V94lylehiVRGPRFG+=y(4YM-4%Mm#Tz{0;;XzgD!dO~FsBK<0=J(IyDb zfj33_I-EBuR}46AuEx*crWo`dwKX-1ktZM)pL1gJWhZ$4NK7r?3so-=XU96A)+@!V zvVj=dsiN|jv#eOm3-Lo7V+9KZn*g@2Hy-bJ6;)`|2 zs9vMv7al+cZFCy*Z4<2DlM!jJWWCj$t0>)jy^T2&>woC` zhqa-*Uh2&uSRa?9pORNH6K$Z^Z(LV^zf`)uaWI5zMa@}fLu&uG zFnH0hu&@+;TWqNH%)vA`WoQVs#sK<{q1_P&sg;KI_4z2}klFC+8)>C>n>0s^mZEey z%rWV_ZiO_>(3`1}mKiMFtGF}V1+IoW$erTq$)0PFMs_nwVF|8MZTDnp_mF;)pVchT zO8U3em!Ifm?P8hJvoC9D?&ZrlI8q=b(o$MTS(Hk1$)2KVI%QHiWrOLIYVq!Sk+FF8 zPv|A^rbapuUM7u;^pS?TJ4=ru>!lkWUEg$Y=I?pikByrX#Nx#6;vUXM$W0^N+8Y>+h zVUlbzdl*j3hGDcC*I6kc&{z5*vmaAsS(iD7kq*!EwcMKD#9K}-5m+f{dCva Close (%1) - + Κλείσιμο (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Απόκρυψη Ειδοποίησης @@ -45,76 +45,76 @@ Unable to save '%1'. - Δεν ήταν δυνατό να αποθηκευτεί το '%1'. + Δεν ήταν δυνατό να αποθηκευτεί το «%1». Save File As - Αποθήκευση αρχείου ως + Αποθήκευση Αρχείου Ως Unable to overwrite '%1'. - Δεν ήταν δυνατό να αντικατασταθεί το '%1'. + Δεν ήταν δυνατό να αντικατασταθεί το «%1». Rename File - Μετονομασία αρχείου + Μετονομασία Αρχείου Unable to rename '%1'. - Δεν ήταν δυνατό να μετονομαστεί το '%1'. + Δεν ήταν δυνατό να μετονομαστεί το «%1». Reload File - + Επαναφόρτωση Αρχείου Reload the file %1 from disk? - + Επαναφόρτωση του αρχείου «%1» από τον δίσκο; All unsaved changes will be lost. - + Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. Reload - + Επαναφόρτωση - + Plain Text (*.txt) - Απλό κείμενο (*.txt) + Απλό Κείμενο (*.txt) - + Question - Ερώτηση + Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? - + Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; - + OpenDocument Text (*.odt) Κείμενο OpenDocument (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) @@ -124,42 +124,42 @@ File Changed - + Αρχείο Έχει Αλλάξει The file %1 was changed by another program. - + Το αρχείο %1 έχει αλλαχθεί από άλλο πρόγραμμα. Do you want to reload the file? - + Θέλετε να επαναφορτώσετε το αρχείο; Reload - + Επαναφόρτωση Ignore - + Αγνόηση File Deleted - + Αρχείο Διεγράφει The file %1 was deleted by another program. - + Το αρχείο «%1» διεγράφη από άλλο πρόγραμμα. Do you want to save or close the file? - + Θέλετε να αποθηκεύσετε ή να κλείσετε το αρχείο; @@ -202,17 +202,17 @@ &Find - + &Εύρεση &Replace - + &Αντικατάσταση Replace &All - + Αντικατάσταση &Όλων @@ -291,7 +291,7 @@ <System Language> - <System Language> + <Γλώσσα Συστήματος> @@ -376,12 +376,12 @@ Shortcuts - + Συντομεύσεις One or more shortcuts conflict. Do you wish to proceed? - + Μία ή περισσότερες συντομεύσεις συγκρούονται. Θέλετε να συνεχίσετε; @@ -452,12 +452,12 @@ Scenes - + Σκηνές Divider: - + Διαχωριστικό: @@ -582,17 +582,17 @@ Command - + Εντολή Shortcut - + Συντόμευση Action - + Δράση @@ -660,7 +660,7 @@ Ctrl+Shift+Down - + Ctrl+Shift+Κάτω @@ -670,7 +670,7 @@ Ctrl+Shift+Up - + Ctrl+Shift+Πάνω @@ -680,22 +680,22 @@ Shift+F4 - + Shift+F4 - + Show scene list (%1) - + Hide scene list (%1) - + Filter - + Φιλτράρισμα @@ -703,7 +703,7 @@ - + Resize scene list @@ -826,18 +826,18 @@ Clear - + Εκκαθάριση Reset to Default - + Επαναφορά στα Προκαθορισμένα Shortcut: - + Συντόμευση: @@ -921,32 +921,32 @@ Symbols - + Σύμβολα Recently used symbols - + Πρόσφατα σύμβολα All symbols - + Όλα τα σύμβολα Details - + Λεπτομέρειες Name: - Όνομα: + Όνομα: Insert - + Εισαγωγή @@ -975,7 +975,7 @@ Modify Theme - Τροποποίηση θέματος + Τροποποίηση Θέματος @@ -990,7 +990,7 @@ No Image - Χωρίς εικόνα + Χωρίς Εικόνα @@ -1112,37 +1112,37 @@ Spacings - + Αποστάσεις Line Spacing - + Απόσταση Γραμμών Single - Μονά + Μονή 1.5 Lines - + 1,5 Γραμμή Double - Διπλά + Διπλή Proportional - + Αναλογική Paragraph Spacing - + Απόσταση Παραγράφων @@ -1152,12 +1152,12 @@ Pixels Above: - + Pixel Παραπάνω: Pixels Below: - + Pixel Παρακάνω: @@ -1215,7 +1215,7 @@ Import Theme - Εισαγωγή θέματος + Εισαγωγή Θέματος @@ -1242,7 +1242,7 @@ Export Theme - Εξαγωγή θέματος + Εξαγωγή Θέματος @@ -1285,12 +1285,12 @@ Set Delay - Ορισμός καθυστέρησης + Ορισμός Καθυστέρησης Set Time - Ορισμός ώρας + Ορισμός Ώρας @@ -1413,42 +1413,42 @@ Open File - Άνοιγμα αρχείου + Άνοιγμα Αρχείου About FocusWriter - Περί του FocusWriter + Σχετικά με το FocusWriter FocusWriter - + FocusWriter A simple fullscreen word processor - + Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης Copyright &copy; 2008-%1 Graeme Gott - + Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - + Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - + Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> @@ -1505,27 +1505,27 @@ Switch to Next Document - + Μετάβαση στο Επόμενο Έγγραφο Switch to Previous Document - + Μετάβαση στο Προηγούμενο Έγγραφο Switch to First Document - + Μετάβαση στο Πρώτο Έγγραφο Switch to Last Document - + Μετάβαση στο Τελευταίο Έγγραφο Switch to Document %1 - + Μετάβαση στο Έγγραφο %1 @@ -1535,7 +1535,7 @@ Emergency cache is not writable. - Δεν μπορεί να γίνει εγγραφή στην cache εκτάκτου ανάγκης. + Δεν μπορεί να γίνει εγγραφή στην κρυφή μνήμη εκτάκτου ανάγκης. @@ -1586,7 +1586,7 @@ Please make sure that SDL_mixer is installed. - + Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. @@ -1611,7 +1611,7 @@ Reloa&d - + Επαναφόρτωσ&η @@ -1636,12 +1636,12 @@ Manage Sessions - Διαχείριση περιόδων λειτουργίας + Διαχείριση Περιόδων Λειτουργίας New Session - Νέα περίοδος λειτουργίας + Νέα Περίοδος Λειτουργίας @@ -1701,7 +1701,7 @@ Ctrl+Shift+V - + Ctrl+Shift+V @@ -1716,7 +1716,7 @@ Ctrl+Shift+A - + Ctrl+Shift+A @@ -1961,17 +1961,17 @@ Focus Off - + Εστίαση Ανένεργη Focus One Line - + Εστίαση Μίας Γραμμής Focus Three Lines - + Εστίαση Τριών Γραμμών @@ -1981,7 +1981,7 @@ Focus Paragraph - + Εστίαση Παραγράφου @@ -2016,12 +2016,12 @@ &About - &Ταυτότητα + &Σχετικά About &Qt - &Περί του Qt + &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 5cd99ab3..57084d88 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -683,17 +683,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -703,7 +703,7 @@ - + Resize scene list diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 2f4fe780..9dc9ded8 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -89,32 +89,32 @@ Volver a cargar - + Plain Text (*.txt) Texto plano (*.txt) - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -683,17 +683,17 @@ Mayús + F4 - + Show scene list (%1) Mostrar la lista de escenas (%1) - + Hide scene list (%1) Ocultar la lista de escenas (%1) - + Filter Filtro @@ -703,7 +703,7 @@ Bajar escenas - + Resize scene list Cambiar el tamaño de la lista de escenas diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 369a1d0e..ad0362fa 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) Texto Plano (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -683,17 +683,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -703,7 +703,7 @@ - + Resize scene list diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 9efc97a0..95d5ee1e 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) Teksti (*.txt) - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot @@ -683,17 +683,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -703,7 +703,7 @@ - + Resize scene list diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index e8d65250..aa8902db 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -89,32 +89,32 @@ Rechargement - + Plain Text (*.txt) Texte brut (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? - + OpenDocument Text (*.odt) Texte OpenDocument (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) @@ -683,17 +683,17 @@ Maj+F4 - + Show scene list (%1) Afficher la liste des scènes (%1) - + Hide scene list (%1) Masquer la liste des scènes (%1) - + Filter Filtre @@ -703,7 +703,7 @@ Déplacer les scènes vers le bas - + Resize scene list Redimensionner la liste des scènes diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 9a66b4c9..71d76ce5 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -89,32 +89,32 @@ טעינה מחדש - + Plain Text (*.txt) תמליל גלוי ‪(*.txt) - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? - + OpenDocument Text (*.odt) תמליל ‫OpenDocument ‫(‭*.odt‬) - + Rich Text (*.rtf) תמליל עשיר ‪(*.rtf) - + All Files (*) כל הקבצים (*) @@ -683,17 +683,17 @@ Shift+F4 - + Show scene list (%1) הצגת רשימת מקטע (%1) - + Hide scene list (%1) הסתרת רשימת מקטע (%1) - + Filter סינון @@ -703,7 +703,7 @@ הזזת מקטעים מטה - + Resize scene list שינוי גודל רשימת מקטע diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index d792fedc..abace03c 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + Question Kérdés - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -682,17 +682,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -702,7 +702,7 @@ - + Resize scene list diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 344823ec..e0b71b43 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*. rtf) - + All Files (*) Tutti i file (*) @@ -683,17 +683,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -703,7 +703,7 @@ - + Resize scene list diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 5fb59bdb..40358d92 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -89,32 +89,32 @@ 再読み込み - + Plain Text (*.txt) テキスト文書 (*.txt) - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? - + OpenDocument Text (*.odt) OpenDocument 形式 (*.odt) - + Rich Text (*.rtf) リッチ テキスト形式 (*.rtf) - + All Files (*) すべてのファイル (*.*) @@ -682,17 +682,17 @@ Shift+F4 - + Show scene list (%1) シーン・リストの表示 (%1) - + Hide scene list (%1) シーン・リストの非表示 (%1) - + Filter 絞込み @@ -702,7 +702,7 @@ シーンをひとつ下に移動 - + Resize scene list シーン・リストのリサイズ diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index e982cb47..2c2f5a5c 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -89,32 +89,32 @@ Herladen - + Plain Text (*.txt) Platte tekst (*.txt) - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) @@ -683,17 +683,17 @@ Shift-F4 - + Show scene list (%1) Laat scene lijst (%1) zien - + Hide scene list (%1) Verberg scene lijst (%1) - + Filter Filteren @@ -703,7 +703,7 @@ Verplaats Scenes naar beneden - + Resize scene list Vergroot of verklein scene lijst diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 1e4e2e2b..96f1a399 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -89,32 +89,32 @@ Wczytaj ponownie - + Plain Text (*.txt) Zwykły tekst (*.txt) - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) @@ -684,17 +684,17 @@ Shift+F4 - + Show scene list (%1) Pokaż listę scen (%1) - + Hide scene list (%1) Ukryj listę scen (%1) - + Filter Filtruj @@ -704,7 +704,7 @@ Przenieś sceny w dół - + Resize scene list Zmień rozmiar listy scen diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 9a70ec8d..c4931efa 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -89,32 +89,32 @@ Carregar de novo - + Plain Text (*.txt) Texto simples (*.txt) - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? - + OpenDocument Text (*.odt) Texto OpenDocument (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) @@ -683,17 +683,17 @@ Shift+F4 - + Show scene list (%1) Mostrar a lista de cenas (%1) - + Hide scene list (%1) Esconder a lista de cenas (%1) - + Filter Filtrar @@ -703,7 +703,7 @@ Deslocar cenas para baixo - + Resize scene list Alterar o tamanho da lista diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index b4f972f5..64c10853 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -89,32 +89,32 @@ Recarregar - + Plain Text (*.txt) Texto simples (*.txt) - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? - + OpenDocument Text (*.odt) Texto do OpenDocument (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) @@ -683,17 +683,17 @@ Shift+F4 - + Show scene list (%1) Exibir lista de cenas (%1) - + Hide scene list (%1) Ocultar lista de cenas (%1) - + Filter Filtro @@ -703,7 +703,7 @@ Mover cenas para baixo - + Resize scene list Alterar tamanho da lista de cenas diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index c7853be3..f2eb6939 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -89,32 +89,32 @@ Reîncarcă - + Plain Text (*.txt) Text simplu (*.txt) - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text îmbogăţit (*.rtf) - + All Files (*) Toate fişierele (*) @@ -684,17 +684,17 @@ Shift+F4 - + Show scene list (%1) Arată listă scene (%1) - + Hide scene list (%1) Ascunde listă scene (%1) - + Filter Filtru @@ -704,7 +704,7 @@ Mută scene în jos - + Resize scene list Redimensionare listă scene diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index dd0f1875..6bf6662e 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -89,32 +89,32 @@ Открыть заново - + Plain Text (*.txt) Простой текст (*.txt) - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Если вы сохраните файл как простой текст, всё форматирование будет убрано. Убрать форматирование? - + OpenDocument Text (*.odt) Текст формата OpenDocument (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) @@ -684,17 +684,17 @@ Shift+F4 - + Show scene list (%1) Показать список сцен (%1) - + Hide scene list (%1) Скрыть список сцен (%1) - + Filter Фильтровать -?- @@ -704,7 +704,7 @@ Передвинуть сцены ниже -?- - + Resize scene list Изменить размер списка сцен -?- diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index e767a7fd..60f20685 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -89,32 +89,32 @@ Opätovne načítať - + Plain Text (*.txt) Obyčajný text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Všetky súbory (*) @@ -684,17 +684,17 @@ Shift+F4 - + Show scene list (%1) Zobraziť zoznam scén (%1) - + Hide scene list (%1) Skryť zoznam scén (%1) - + Filter Filter @@ -704,7 +704,7 @@ Posunúť scény nadol - + Resize scene list Zmeniť veľkosť zoznamu scén diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm index 9c6e50b6a1544fce6e042bd6d2fab90afbf5a017..0a7c79a560130d853d4060ff982c5ed7d2d1a05d 100644 GIT binary patch delta 9680 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 CuNLkA delta 2701 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 Close (%1) - + Stäng (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Stäng varning @@ -71,50 +71,50 @@ Reload File - + Läs om fil Reload the file %1 from disk? - + Läs om filen %1 från disk? All unsaved changes will be lost. - + Alla osparade ändringar kommer att gå förlorade. Reload - + Läs om - + Plain Text (*.txt) Vanlig text (*.txt) - + Question - Fråga + Fråga - + Saving as plain text will discard all formatting. Discard formatting? - + Att spara som vanlig text tar bort all formatering. Ta bort formatering? - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) @@ -124,42 +124,42 @@ File Changed - + Filen ändrad The file %1 was changed by another program. - + Filen %1 ändrades av ett annat program. Do you want to reload the file? - + Vill du läsa om filen? Reload - + Läs om Ignore - + Ignorera File Deleted - + Fil raderad The file %1 was deleted by another program. - + Filen %1 togs bort av ett annat program. Do you want to save or close the file? - + Vill du spara eller stänga filen? @@ -187,7 +187,7 @@ Regular expressions - + Reguljära uttryck @@ -202,17 +202,17 @@ &Find - + &Sök &Replace - + &Ersätt Replace &All - + Ersätt &alla @@ -301,7 +301,7 @@ Please restart this application for the change in language to take effect. - Starta om programmet för att språkändringar ska aktiveras. + Starta om programmet för att språkändringen ska aktiveras. @@ -376,12 +376,12 @@ Shortcuts - + Genvägar One or more shortcuts conflict. Do you wish to proceed? - + Genvägar i konflikt. Vill du fortsätta? @@ -452,12 +452,12 @@ Scenes - + Scener Divider: - + Avdelare: @@ -582,17 +582,17 @@ Command - + Kommando Shortcut - + Genväg Action - + Åtgärd @@ -660,52 +660,52 @@ Ctrl+Shift+Down - + Ctrl+Skift+Ned Move Scenes Up - + Flytta upp scener Ctrl+Shift+Up - + Ctrl+Skift+Upp Toggle Scene List - + Växla scenlista Shift+F4 - + Skift+F4 - + Show scene list (%1) - + Visa scenlista (%1) - + Hide scene list (%1) - + Dölj scenlista (%1) - + Filter - + Filter Move Scenes Down - + Flytta ner scener - + Resize scene list - + Storleksändra scenlista @@ -826,18 +826,18 @@ Clear - + Töm Reset to Default - + Återställ till förval Shortcut: - + Genväg: @@ -863,27 +863,27 @@ &Add - + &Lägg till &Ignore - + &Ignorera I&gnore All - + I&gnorera alla &Change - + &Ändra C&hange All - + Ä&ndra alla @@ -921,32 +921,32 @@ Symbols - + Symboler Recently used symbols - + Nyligen använda symboler All symbols - + Alla symboler Details - + Detaljer Name: - Namn: + Namn: Insert - + Infoga @@ -954,12 +954,12 @@ Blocks - + Tecken Scripts - + Skriftspråk @@ -1057,7 +1057,7 @@ pixels - bildpunkter + bildpunkter @@ -1112,52 +1112,52 @@ Spacings - + Avstånd Line Spacing - + Radavstånd Single - Enkel + Enkelt 1.5 Lines - + 1,5 radavstånd Double - Dubbel + Dubbelt Proportional - + Proportionellt Paragraph Spacing - + Styckeavstånd Indent First Line: - + Indrag första raden: Pixels Above: - + Pixlar ovanför: Pixels Below: - + Pixlar nedanför: @@ -1423,32 +1423,32 @@ FocusWriter - + FocusWriter A simple fullscreen word processor - + En enkel ordbehandlare med helskärmsläge Copyright &copy; 2008-%1 Graeme Gott - + Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + Släppt under licensen <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - + Använder ikoner från ikontemat <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - + Använda under licensen <a href=%1>GPL 3</a> @@ -1478,7 +1478,7 @@ %1% of daily goal - %1% av dagligt mål + %1 % av dagligt mål @@ -1505,27 +1505,27 @@ Switch to Next Document - + Växla till nästa dokument Switch to Previous Document - + Växla till föregående dokument Switch to First Document - + Växla till första dokumentet Switch to Last Document - + Växla till sista dokumentet Switch to Document %1 - + Växla till dokument %1 @@ -1586,7 +1586,7 @@ Please make sure that SDL_mixer is installed. - + Se till att SDL_mixer är installerat. @@ -1611,7 +1611,7 @@ Reloa&d - + Läs in &igen @@ -1696,12 +1696,12 @@ Paste &Unformatted - + Klistra in &oformaterat Ctrl+Shift+V - + Ctrl+Skift+V @@ -1711,12 +1711,12 @@ Select &Scene - + Välj &scen Ctrl+Shift+A - + Ctrl+Skift+A @@ -1811,7 +1811,7 @@ &Decrease Indent - &Minska indragning + &Minska indrag @@ -1821,7 +1821,7 @@ I&ncrease Indent - Öka in&dragning + Öka in&drag @@ -1901,7 +1901,7 @@ S&ymbols... - + S&ymboler... @@ -1921,7 +1921,7 @@ F&ocused Text - + F&okuserad text @@ -1961,27 +1961,27 @@ Focus Off - + Fokus av Focus One Line - + Fokusera en rad Focus Three Lines - + Fokusera tre rader &Paragraph - + &Stycke Focus Paragraph - + Fokusera stycke @@ -1996,22 +1996,22 @@ Some files were unsupported and could not be opened. - + Några filer stöds inte och kunde inte öppnas. &Off - + &Av One &Line - + En &rad &Three Lines - + &Tre rader diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index b608abcf..25d1d0c0 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -89,32 +89,32 @@ Güncelle - + Plain Text (*.txt) Düz metin (*.txt) - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydedildiğinde tüm biçimlendirme kaybolacaktır. Biçimlendirme silinsin mi? - + OpenDocument Text (*.odt) Belgeyi metin olarak aç (*.odt) - + Rich Text (*.rtf) Zengin metin (*.rtf) - + All Files (*) Tüm dosyalar (*) @@ -682,17 +682,17 @@ Shift+F4 - + Show scene list (%1) - + Hide scene list (%1) - + Filter Filtre @@ -702,7 +702,7 @@ Sahneleri aşağı taşı - + Resize scene list Sahne listesini yeniden boyutlandır diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 35d65c57..f7022734 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) @@ -684,17 +684,17 @@ - + Show scene list (%1) - + Hide scene list (%1) - + Filter @@ -704,7 +704,7 @@ - + Resize scene list diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 6ad42560..b5708745 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -89,32 +89,32 @@ 重新加载 - + Plain Text (*.txt) 纯文本 (*.txt) - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) 所有文件 (*) @@ -682,17 +682,17 @@ Shift+F4 - + Show scene list (%1) - + Hide scene list (%1) - + Filter 过滤器 @@ -702,7 +702,7 @@ - + Resize scene list From 14dca98a1b0dc025b661201fdf20d91eaecd6658 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 28 Nov 2012 09:38:20 -0500 Subject: [PATCH 095/630] Tag version 1.4.1 --- ChangeLog | 3 +++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08711e75..919cd637 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-11-28 Graeme Gott + * Tag version 1.4.1. + 2012-11-27 Graeme Gott * FIXED: High CPU use in Ubuntu 10.04. diff --git a/focuswriter.pro b/focuswriter.pro index 6a0ee980..bfa3936d 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -17,7 +17,7 @@ MOC_DIR = build OBJECTS_DIR = build RCC_DIR = build -VERSION = 1.4.0 +VERSION = 1.4.1 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index 3273ecff..ac0497c8 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.0' +VERSION='1.4.1' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 656c3ad1..2c466404 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.0 +SET VERSION=1.4.1 ECHO Copying executable MKDIR %APP% From 209e44f2e5eea89f70f41fa5665226f636a6a8e7 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 30 Nov 2012 22:58:16 +0000 Subject: [PATCH 096/630] fix debian/watch file --- debian/watch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/watch b/debian/watch index cd7a7422..d7dcd282 100644 --- a/debian/watch +++ b/debian/watch @@ -1,3 +1,3 @@ version=3 # http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 -http://githubredir.debian.net/github/gottcode/focuswriter/ v(.*)\.tar\.gz +http://githubredir.debian.net/github/gottcode/focuswriter/ .*/v(.*)\.tar\.gz From 12a3c3de6e9537414266a3dbc3a5dc5d3eacf7ae Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 30 Nov 2012 23:04:00 +0000 Subject: [PATCH 097/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2492ec38..7e664e6c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.4.1-1) unstable; urgency=low + + * new upstream release + * fix debian/watch file + + -- Barak A. Pearlmutter Fri, 30 Nov 2012 23:03:48 +0000 + focuswriter (1.4.0.2012.11.18-1) unstable; urgency=low * merge upstream changes on branch release-1.4 From 98db86927742a89847c8190fbe33aa94a6cce098 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 6 Dec 2012 11:29:14 -0500 Subject: [PATCH 098/630] Sync translations with Transifex. --- CREDITS | 1 + translations/focuswriter_ca.qm | Bin 1293 -> 33292 bytes translations/focuswriter_ca.ts | 742 ++++++++++++++++----------------- 3 files changed, 372 insertions(+), 371 deletions(-) diff --git a/CREDITS b/CREDITS index 3a799744..855ad7b4 100644 --- a/CREDITS +++ b/CREDITS @@ -4,6 +4,7 @@ Developers Translators ----------- +* Joan Queralt Gil (ca) * Pavel Fric (cs) * Ladislav Thon (cs) * Morten Juhl-Johansen Zölde-Fejér (da) diff --git a/translations/focuswriter_ca.qm b/translations/focuswriter_ca.qm index a0a7c43d2704b15011f98cc85d4656eab5817692..4a1cc76b7e7c7fb6294e5811c94bc9fdf9dfb17e 100644 GIT binary patch literal 33292 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 delta 241 zcmeBaVd~|ox7m>*aq9h?sb>{s_9radd)JA9fuVuHLHr&A0}~5FROUBdEK1N zRp)^G8qWXHeYY4GnEkk3r*Q(+P3Cu;3Zxm0GZ`3IGACQ{OrI>z8#I|u;PqrTX`#s% w>_s+P3PmtZJ|SfW6PTPMEdXcR=!rwwT9Xght4!7k<>TrAn#;<__}`Hm06#HB4FCWD diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 6ee23e3e..0a3c4dfd 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -6,7 +6,7 @@ Close (%1) - + Tanca (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Descarta l'alerta @@ -71,42 +71,42 @@ Reload File - + Torna a carregar el fitxer Reload the file %1 from disk? - + Voleu tornar a carregar el fitxer %1 des del disc? All unsaved changes will be lost. - + Es perdran tots els canvis. Reload - + Torna a carregar Plain Text (*.txt) - + Text pla (*.txt) Question - + Pregunta Saving as plain text will discard all formatting. Discard formatting? - + Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? OpenDocument Text (*.odt) - + Text OpenDocument (*.odt) @@ -124,42 +124,42 @@ File Changed - + S'ha canviat el fitxer The file %1 was changed by another program. - + Un altre programa ha modificat el fitxer %1 Do you want to reload the file? - + Este segur que voleu tornar a carregar el fitxer? Reload - + Torna a carregar Ignore - + Ignora File Deleted - + S'ha esborrat el fitxer The file %1 was deleted by another program. - + Un altre programa ha esborrat el fitxer %1 Do you want to save or close the file? - + Voleu tancar o desar el fitxer? @@ -172,83 +172,83 @@ Replace with: - + Reemplaça amb: Ignore case - + Ignora majúscules Whole words only - + Només paraules senceres Regular expressions - + Expressions regulars Search up - + Cerca cap enrere Search down - + Cerca cap endavant &Find - + Cerca &Replace - + &Reemplaça Replace &All - + Reemplaça-ho tot Find - + Troba Replace - + Reemplaça Replace %n instance(s)? - - - + + Reemplaça %n instància? + Reemplaça %n instàncies? Question - + Pregunta Sorry - Disculpes + Disculpeu Phrase not found. - + No s'ha trobat la frase @@ -256,17 +256,17 @@ Add - + Afegeix Check Spelling... - + Comprova l'ortografia (No suggestions found) - + (No s'han trobat suggeriments) @@ -274,12 +274,12 @@ Open Image - + Obre la imatge Images(%1) - + Imatges (%1) @@ -287,22 +287,22 @@ Select application language: - + Seleccioneu l'idioma de l'aplicació: <System Language> - + <Idioma del sistema> Note - + Nota Please restart this application for the change in language to take effect. - + Call que reinicieu l'aplicació perquè tingui efecte el canvi d'idioma @@ -310,326 +310,326 @@ Preferences - + Preferències General - + General Statistics - + Estadístiques Toolbar - + Barra d'eines Spell Checking - + Ortografia Select Dictionary - + Seleccioneu un diccionari Sorry - Disculpes + Disculpeu Unable to open archive. - + És impossible obrir el fitxer Unable to read archive metadata. - + És impossible llegir el fitxer de metadades The archive does not contain a usable dictionary. - + El fitxer no conté un diccionari que es pugui utilitzar Unable to open file '%1'. - + És impossible obrir el fitxer '%1' Unable to close file '%1'. - + És impossible tancar el fitxer '%1' Question - + Pregunta Shortcuts - + Dreceres One or more shortcuts conflict. Do you wish to proceed? - + Hi ha un conflicte entre dreceres. Esteu segur que voleu continuar? The dictionary "%1" already exists. Do you want to replace it? - + Ja existeix el diccionari '%1'. Voleu reemplaçar-lo? Daily Goal - + Objectiu del dia None - + Cap Minutes: - + Minuts: Words: - + Paraules: Editing - + Edita Always vertically center - + Sempre centrat verticalment Block insertion cursor - + Cursor d'inserció de bloc Smooth fonts - + Lletres suaus Typewriter sounds - + So de màquina d'escriure Smart quotes: - + Cometes tipogràfiques: Double - + Doble Single - + Senzill Scenes - + Escenes Divider: - + Divisor Saving - + S'està desant Automatically save changes - + Desa els canvis automàticament Remember cursor position - + Recorda la posició del cursor Contents - + Continguts Word count - + Recompte de paraules Page count - + Recompte de pàgines Paragraph count - + Recompte de paràgrafs Character count - + Recompte de caràcters Page Size - + Mida de la pàgina Characters: - + Caràcters: Paragraphs: - + Paràgrafs: Word Count Algorithm - + Algorisme de recompte de paraules Detect word boundaries - + Detecta els límits de les paraules Divide character count by six - + Divideix el nombre de caràcters entre sis Style - + Estil Icons Only - + Només icones Text Only - + Només text Text Alongside Icons - + Text al costat de les icones Text Under Icons - + Text sota les icones Text Position: - + Posició del text: Actions - + Accions Move Up - + Puja Move Down - + Baixa Add Separator - + Afegeix separador Command - + Ordre Shortcut - + Drecera Action - + Acció Check spelling as you type - + Comprova l'ortografia mentre s'escriu Ignore words in UPPERCASE - + Ignaora les paraules en MAJÚSCULES Ignore words with numbers - + Ignora les paraules amb números Language - + Idioma Add - + Afegeix Remove - + Elimina Personal Dictionary - + Diccionari personal @@ -638,22 +638,22 @@ Not a supported RTF file. - + Fitxer RTF sense suport. Unable to open archive. - + No es pot obrir el fitxer. Unable to open file '%1'. - + No es pot obrir el fitxer '%1'. Unable to close file '%1'. - + No es pot tancar el fitxer '%1'. @@ -661,52 +661,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Down Move Scenes Up - + Puja les escenes Ctrl+Shift+Up - + Ctrl+Shift+Up Toggle Scene List - + Commuta la llista d'escenes Shift+F4 - + Shift+F4 Show scene list (%1) - + Mostra la llista d'escenes (%1) Hide scene list (%1) - + Oculta la llista d'escenes (%1) Filter - + Filtre Move Scenes Down - + Baixa les escenes Resize scene list - + Redimensiona la llista d'escenes @@ -720,7 +720,7 @@ Default - + Per defecte @@ -728,98 +728,98 @@ Manage Sessions - + Gestiona les sessions S&essions - + S&essions New - + Nou Rename - + Canvia el nom Clone - + Clona Delete - + Elimina Switch To - + Canvia a New Session - + Sessió nova Clone Session - + Clona la sessió Rename Session - + Canvia el nom de la sessió Question - + Pregunta Delete selected session? - + Esteu segur que voleu eliminar la sessió seleccionada? Session name: - + Nom de la sessió: Sorry - Disculpes + Disculpes The requested session name is already in use. - + El nom de la sessió seleccionat ja està essent utilitzat. &New... - + &Nou... Ctrl+Shift+N - + Ctrl+Maj+N &Manage... - + Administrar Ctrl+Shift+M - + Ctrl+Maj+M @@ -827,18 +827,18 @@ Clear - + Neteja Reset to Default - + Reinicia a per defecte Shortcut: - + Drecera: @@ -846,12 +846,12 @@ Replacing quotation marks... - + Reemplaça cometes ... Please Wait - + Espereu siusplau @@ -859,62 +859,62 @@ Check Spelling - + Comprova l'ortografia &Add - + &Afegeix &Ignore - + &Ignora I&gnore All - + I&gnora-ho tot &Change - + &Canvia C&hange All - + Canvia-ho tot Not in dictionary: - + No s'ha trobat al diccionari: Change to: - + Canvia per: Checking spelling... - + S'està comprovant l'ortografia Cancel - + Cancel·la Please wait - + Espereu siusplau Spell check complete. - + S'ha completat la revisió ortogràfica @@ -922,32 +922,32 @@ Symbols - + Símbols Recently used symbols - + Símbols utilitzats darrerament All symbols - + Tots els símbols Details - + Detalls Name: - + Nom: Insert - + Insereix @@ -955,12 +955,12 @@ Blocks - + Blocs Scripts - + Scripts @@ -968,7 +968,7 @@ Untitled %1 - + Sensetítol %1 @@ -976,81 +976,81 @@ Modify Theme - + Modifica el Tema Name: - + Nom: Background - + Fons No Image - + Sense imatge Tiled - + En mosaic Centered - + Centrada Stretched - + Estirada Scaled - + Escalada Zoomed - + Aplica el zoom Remove - + Esborra Type: - + Tipus: Color: - + Color: Image: - + Imatge: Foreground - + Primer pla Opacity - + Opacitat @@ -1058,112 +1058,112 @@ pixels - + píxels Left - + Esquerra Right - + Dreta Position - + Posició Size: - + Mida: Rounding: - + Arrodoniment: Margin: - + Marge: Padding: - + Farciment: Text - + Text Font: - + Tipus de lletra: Misspelled: - + Error ortogràfic Spacings - + Espaiament Line Spacing - + Espai entre línies Single - + Senzill 1.5 Lines - + 1.5 Línies Double - + Doble Proportional - + Proporcional Paragraph Spacing - + Espai entre paràgrafs Indent First Line: - + Sagnat de la primera línia: Pixels Above: - + Píxels per sobre: Pixels Below: - + Píxels per sota: The quick brown fox jumps over the lazy dog - + Jove xef, porti whisky amb quinze glaçons d'hidrogen, coi @@ -1171,79 +1171,79 @@ Themes - + Temes Add - + Afegeix Modify - + Modifica Remove - + Elimina Import - + Importa Export - + Exporta Close - + Tanca Question - + Pregunta Remove selected theme? - + Esteu segur que voleu eliminar el Tema seleccionat? Import Theme - + Importa Tema Themes (*.fwtz *.theme) - + Temes (*.fwtz *.theme) Themes (*.fwtz) - + Temes (*.fwtz) Sorry - Disculpes + Disculpes A theme already exists with that name. Please enter a new name: - + Ja existeix un tema amb aquest nom. Poseu-li un altre nom: Export Theme - + Exporta Tema @@ -1251,87 +1251,87 @@ <b>%1</b> - %2 - + <b>%1</b> - %2 Question - + Pregunta Delete timer? - + Voleu eliminar el temporitzador? <b>Words:</b> %L1 - + <b>Paraules:</b> %L1 <b>Pages:</b> %L1 - + <b>Pàgines:</b> %L1 <b>Paragraphs:</b> %L1 - + <b>Paràgrafs:</b> %L1 <b>Characters:</b> %L1 / %L2 - + <b>Caràcters:</b> %L1 / %L2 Set Delay - + Ajusta el retard Set Time - + Ajusta el temps Delay: - + Retard: Time: - + Temps: HH:mm:ss - + HH:mm:ss Alarm - + Alarma Type: - + Tipus: Memo: - + Memoràndum Edit - + Edita Delete - + Esborra @@ -1339,12 +1339,12 @@ HH:mm:ss - + HH:mm:ss No timers running - + No hi ha cap temporitzador en marxa @@ -1352,37 +1352,37 @@ Timers - + Temporitzadors New - + Nou Recent - + Recent Question - + Pregunta Cancel editing timers? - + Voleu cancel·lar els temporitzadors existents? +HH:mm:ss - + +HH:mm:ss %1 - %2 - + %1 - %2 @@ -1390,7 +1390,7 @@ Unexpectedly reached end of file. - + S'ha arribat inesperadament al final del fitxer. @@ -1398,631 +1398,631 @@ Loading themes - + S'estan carregant els Temes Loading sounds - + S'estan carregant els sons Untitled - + Sense títol Open File - + bre fitxer About FocusWriter - + Sobre FocusWriter FocusWriter - + FocusWriter A simple fullscreen word processor - + Un processador de text senzill a pantalla completa Copyright &copy; 2008-%1 Graeme Gott - + Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + Publicat sota llicència <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - + Usa les icones del tema <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - + Utilitzades sota llicència <a href=%1>LGPL 3</a> Characters: %L1 / %L2 - + Caràcters: %L1 / %L2 Pages: %L1 - + Pàgines: %L1 Paragraphs: %L1 - + Paràgrafs: %L1 Words: %L1 - + Paraules: %L1 %1% of daily goal - + %1% de l'objectiu diari Opening %1 - + 'està obrint %1 Question - + Pregunta Save changes? - + Voleu desar els canvis? (Untitled %1) - + (Sense títol %1) Switch to Next Document - + Canvia a un document nou Switch to Previous Document - + Canvia al document anterior Switch to First Document - + Canvia al primer document Switch to Last Document - + Canvia al darrer document Switch to Document %1 - + Canvia al document %1 Loading settings - + S'estan carregant els ajustos Emergency cache is not writable. - + No es pot escriure a la memòria cau d'emergència. Warning - + Avís FocusWriter was not shut down cleanly. - + FocusWriter no es va tancat correctament. Restore from the emergency cache? - + Voleu restaurar des de la memòria cau d'emergència? Some files could not be opened. - + No s'han pogut obrir alguns fitxers. Some files were opened Read-Only. - + S'han obert alguns fitxers en mode de Només lectura. Text Files (%1);;All Files (*) - + Fitxers de text (%1);;Tots el fitxers (*) '%1' is newer than the cached copy. - + '%1'és més nou que la còpia de la memòria cau. Overwrite newer file? - + Voleu sobreescriure el fitxer més nou? Unable to load typewriter sounds. - + No s'han pogut carregar els sons de màquina d'escriure. Please make sure that SDL_mixer is installed. - + Assegureu-vos que heu instal·lat SDL_mixer %1 (Read-Only) - + %1 (Només lectura) &File - + &Fitxer &New - + &Nou &Open... - + &Obre Reloa&d - + Torna a carregar &Save - + &Desa Save &As... - + Desa &com... &Rename... - + &Reanomena... Save A&ll - + Desa-ho tot Manage Sessions - + Gestiona les sessions New Session - + Nova sessió &Print... - + Im&primeix &Close - + Tan&ca &Quit - + Surt Ctrl+Q - + Ctrl+Q &Edit - + &Edita &Undo - + Desfés &Redo - + &Refés Cu&t - + Talla &Copy - + &Copia &Paste - + Enganxa Paste &Unformatted - + Enganxa sense format Ctrl+Shift+V - + Ctrl+Shift+V Select &All - + Seleccion&a tot Select &Scene - + Selecciona l'escena Ctrl+Shift+A - + Ctrl+Shift+A Fo&rmat - + Fo&rmat &Bold - + Negreta &Italic - + Itàlica &Underline - + S&ubratllat Stri&kethrough - + Ratllat Ctrl+K - + Ctrl+K Sup&erscript - + Sup&eríndex Ctrl+^ - + Ctrl+^ &Subscript - + &Subíndex Ctrl+_ - + Ctrl+_ Align &Left - + Alinea a l'esquerra Ctrl+{ - + Ctrl+{ Align &Center - + Alinea al &Centre Ctrl+| - + Ctrl+| Align &Right - + Alinea a la dreta Ctrl+} - + Ctrl+} Align &Justify - + &Justifica Ctrl+J - + Ctrl+J &Decrease Indent - + &Disminueix el sagnat Ctrl+< - + Ctrl+< I&ncrease Indent - + I&ncrementa el sagnat Ctrl+> - + Ctrl+> Le&ft to Right Block - + Escriure d'esquerra a dreta Ri&ght to Left Block - + Escriure de dreta a esquerra &Tools - + Eines &Find... - + Cerca... Find &Next - + Cerca el següent Find Pre&vious - + Cerca l'anterior &Replace... - + Reemplaça Ctrl+R - + Ctrl+R Smart &Quotes - + Cometes tipogràfiques Update &Document - + Actualitza el document Update &Selection - + Actualitza la selecció &Spelling... - + Ortografia F7 - + F7 &Timers... - + &Temporitzadors S&ymbols... - + S&ímbols... &Settings - + Configuració Show &Toolbar - + Mostra la barra d'eines Show &Menu Icons - + Mostra les icones del menú F&ocused Text - + Text focalitzat &Fullscreen - + Pantalla completa F11 - + F11 Esc - + Esc M&inimize - + M&inimitza Ctrl+M - + Ctrl+M &Themes... - + &Temes... &Preferences... - + &Preferències... Focus Off - + No focalitzis Focus One Line - + Focalitza una línia Focus Three Lines - + Focalitza tres línies &Paragraph - + &Paràgraf Focus Paragraph - + Focalitza un paràgraf &Help - + Ajuda Application &Language... - + Idioma de l'aplicació Some files were unsupported and could not be opened. - + Alguns fitxers no tenen suport i no es podran obrir &Off - + Tanca One &Line - + Una &Línia &Three Lines - + &Tres línies &About - + Sobre About &Qt - + Sobre &Qt From 63fc20e5fa72c51e0586e064327bad5bc73e10a6 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 21 Dec 2012 11:38:20 -0500 Subject: [PATCH 099/630] Add support for compiling with Qt 5.0.0. --- ChangeLog | 3 ++ src/image_button.cpp | 10 ++++++- src/locale_dialog.cpp | 2 +- src/main.cpp | 8 +++++ src/preferences_dialog.cpp | 6 ++++ .../qtsingleapplication.cpp | 2 ++ src/qtsingleapplication/qtsingleapplication.h | 2 ++ src/rtf/writer.cpp | 2 -- src/scene_model.cpp | 1 - src/session.cpp | 10 +++---- src/session_manager.cpp | 30 ++++++++----------- src/symbols_dialog.cpp | 24 ++++++++++++--- src/theme_dialog.cpp | 2 +- src/theme_manager.cpp | 4 --- src/window.cpp | 16 +++++++++- 15 files changed, 85 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index 919cd637..e09ee7cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2012-12-21 Graeme Gott + * Add support for compiling with Qt 5.0.0. + 2012-11-28 Graeme Gott * Tag version 1.4.1. diff --git a/src/image_button.cpp b/src/image_button.cpp index 1c55872a..cf6aa565 100644 --- a/src/image_button.cpp +++ b/src/image_button.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,11 @@ #include "image_button.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) +#include +#else #include +#endif #include #include @@ -78,7 +82,11 @@ void ImageButton::onClicked() foreach (QByteArray type, formats) { filters.append("*." + type); } +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + QString path = !m_path.isEmpty() ? m_path : QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); +#else QString path = !m_path.isEmpty() ? m_path : QDesktopServices::storageLocation(QDesktopServices::PicturesLocation); +#endif QString image = QFileDialog::getOpenFileName(window(), tr("Open Image"), path, tr("Images(%1)").arg(filters.join(" "))); if (!image.isEmpty()) { setImage(image, image); diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index cd4fdaca..61757764 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -132,7 +132,7 @@ QString LocaleDialog::languageName(const QString& language) QString lang_code = language.left(5); QLocale locale(lang_code); QString name; -#if QT_VERSION >= 0x040800 +#if (QT_VERSION >= QT_VERSION_CHECK(4,8,0)) if (lang_code.length() > 2) { if (locale.name() == lang_code) { name = locale.nativeLanguageName() + " (" + locale.nativeCountryName() + ")"; diff --git a/src/main.cpp b/src/main.cpp index d18be1cc..525b3076 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,7 +26,11 @@ #include "symbols_model.h" #include "theme.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) +#include +#else #include +#endif #include #include #include @@ -95,7 +99,11 @@ int main(int argc, char** argv) // Find user data dir if not in portable mode if (userdir.isEmpty()) { +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + userdir = QStandardPaths::writableLocation(QStandardPaths::DataLocation); +#else userdir = QDesktopServices::storageLocation(QDesktopServices::DataLocation); +#endif // Move user data to new location if (!QFile::exists(userdir)) { diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index ad086aa9..698f08f9 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -1008,9 +1008,15 @@ QWidget* PreferencesDialog::initShortcutsTab() m_shortcuts->setColumnCount(3); m_shortcuts->setColumnHidden(2, true); m_shortcuts->setHeaderLabels(QStringList() << tr("Command") << tr("Shortcut") << tr("Action")); +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + m_shortcuts->header()->setSectionsClickable(false); + m_shortcuts->header()->setSectionsMovable(false); + m_shortcuts->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); +#else m_shortcuts->header()->setClickable(false); m_shortcuts->header()->setMovable(false); m_shortcuts->header()->setResizeMode(0, QHeaderView::ResizeToContents); +#endif connect(m_shortcuts, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(shortcutDoubleClicked())); // List shortcuts diff --git a/src/qtsingleapplication/qtsingleapplication.cpp b/src/qtsingleapplication/qtsingleapplication.cpp index 5bf61691..4715bb6f 100644 --- a/src/qtsingleapplication/qtsingleapplication.cpp +++ b/src/qtsingleapplication/qtsingleapplication.cpp @@ -170,6 +170,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char * } +#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a @@ -180,6 +181,7 @@ QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) { sysInit(); } +#endif #if defined(Q_WS_X11) diff --git a/src/qtsingleapplication/qtsingleapplication.h b/src/qtsingleapplication/qtsingleapplication.h index 2cb05483..6e5e22bd 100644 --- a/src/qtsingleapplication/qtsingleapplication.h +++ b/src/qtsingleapplication/qtsingleapplication.h @@ -67,7 +67,9 @@ class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication public: QtSingleApplication(int &argc, char **argv, bool GUIenabled = true); QtSingleApplication(const QString &id, int &argc, char **argv); +#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) QtSingleApplication(int &argc, char **argv, Type type); +#endif #if defined(Q_WS_X11) QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0); diff --git a/src/rtf/writer.cpp b/src/rtf/writer.cpp index 84f9b9e2..85cad020 100644 --- a/src/rtf/writer.cpp +++ b/src/rtf/writer.cpp @@ -95,8 +95,6 @@ QHash mapCodePages() codepages[QLocale::Portuguese] = "CP1252"; codepages[QLocale::RhaetoRomance] = "CP1252"; codepages[QLocale::Quechua] = "CP1252"; - codepages[QLocale::Sesotho] = "CP1252"; - codepages[QLocale::Setswana] = "CP1252"; codepages[QLocale::Spanish] = "CP1252"; codepages[QLocale::Swahili] = "CP1252"; codepages[QLocale::Swedish] = "CP1252"; diff --git a/src/scene_model.cpp b/src/scene_model.cpp index 18915e9a..19227d46 100644 --- a/src/scene_model.cpp +++ b/src/scene_model.cpp @@ -39,7 +39,6 @@ SceneModel::SceneModel(QTextEdit* document, QObject* parent) : m_document(document), m_updates(0) { - setSupportedDragActions(Qt::MoveAction); connect(m_document->document(), SIGNAL(blockCountChanged(int)), this, SLOT(invalidateScenes())); f_scene_models.append(this); diff --git a/src/session.cpp b/src/session.cpp index 0a5da9f6..24e62563 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010 Graeme Gott + * Copyright (C) 2010, 2012 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,10 +19,10 @@ #include "session.h" -#include -#include -#include -#include +#include +#include +#include +#include //----------------------------------------------------------------------------- diff --git a/src/session_manager.cpp b/src/session_manager.cpp index 67e7807b..c3ce7bed 100644 --- a/src/session_manager.cpp +++ b/src/session_manager.cpp @@ -23,19 +23,19 @@ #include "theme.h" #include "window.h" -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include //----------------------------------------------------------------------------- @@ -351,11 +351,7 @@ QString SessionManager::getSessionName(const QString& title, const QString& sess QString name = session; forever { bool ok; -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) - name = QInputDialog::getText(window, title, tr("Session name:"), QLineEdit::Normal, name, &ok, 0, Qt::ImhNone); -#else name = QInputDialog::getText(window, title, tr("Session name:"), QLineEdit::Normal, name, &ok); -#endif if (!ok) { return QString(); } diff --git a/src/symbols_dialog.cpp b/src/symbols_dialog.cpp index 5a613d5b..b44b2db4 100644 --- a/src/symbols_dialog.cpp +++ b/src/symbols_dialog.cpp @@ -107,13 +107,20 @@ SymbolsDialog::SymbolsDialog(QWidget* parent) : m_recent->setRowCount(1); m_recent->setSelectionMode(QAbstractItemView::SingleSelection); m_recent->setTabKeyNavigation(false); +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + m_recent->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + m_recent->verticalHeader()->setSectionsClickable(false); + m_recent->verticalHeader()->setSectionsMovable(false); + m_recent->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); +#else m_recent->horizontalHeader()->setResizeMode(QHeaderView::Stretch); m_recent->verticalHeader()->setClickable(false); m_recent->verticalHeader()->setMovable(false); m_recent->verticalHeader()->setResizeMode(QHeaderView::Fixed); +#endif m_recent->setMaximumHeight(m_recent->verticalHeader()->sectionSize(0)); - m_recent->horizontalHeader()->setHidden(true); - m_recent->verticalHeader()->setHidden(true); + m_recent->horizontalHeader()->hide(); + m_recent->verticalHeader()->hide(); m_recent->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_recent->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(m_recent, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)), this, SLOT(recentSymbolClicked(QTableWidgetItem*))); @@ -157,13 +164,22 @@ SymbolsDialog::SymbolsDialog(QWidget* parent) : m_view->setSelectionMode(QAbstractItemView::SingleSelection); m_view->setTabKeyNavigation(false); m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + m_view->horizontalHeader()->setSectionsClickable(false); + m_view->horizontalHeader()->setSectionsMovable(false); + m_view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + m_view->verticalHeader()->setSectionsClickable(false); + m_view->verticalHeader()->setSectionsMovable(false); + m_view->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); +#else m_view->horizontalHeader()->setClickable(false); m_view->horizontalHeader()->setMovable(false); m_view->horizontalHeader()->setResizeMode(QHeaderView::Stretch); - m_view->horizontalHeader()->hide(); m_view->verticalHeader()->setClickable(false); m_view->verticalHeader()->setMovable(false); m_view->verticalHeader()->setResizeMode(QHeaderView::Fixed); +#endif + m_view->horizontalHeader()->hide(); m_view->verticalHeader()->hide(); m_view->setModel(m_model); connect(m_view->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(symbolClicked(QModelIndex))); @@ -180,7 +196,7 @@ SymbolsDialog::SymbolsDialog(QWidget* parent) : QGraphicsScene* scene = new QGraphicsScene(this); scene->setBackgroundBrush(palette().base()); - m_symbol_preview_item = new QGraphicsSimpleTextItem(0, scene); + m_symbol_preview_item = scene->addSimpleText(""); m_symbol_preview_item->setBrush(palette().text()); m_symbol_preview = new QGraphicsView(scene, details_group); m_symbol_preview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index 0eb2d1ed..e9416869 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -260,7 +260,7 @@ ThemeDialog::ThemeDialog(Theme& theme, QWidget* parent) spacing_layout->addWidget(paragraph_spacing); spacing_layout->addStretch(); -#if QT_VERSION < 0x040800 +#if (QT_VERSION < QT_VERSION_CHECK(4,8,0)) line_spacing->hide(); #endif diff --git a/src/theme_manager.cpp b/src/theme_manager.cpp index e81856a3..66db6d98 100644 --- a/src/theme_manager.cpp +++ b/src/theme_manager.cpp @@ -201,11 +201,7 @@ void ThemeManager::importTheme() QString name = QUrl::fromPercentEncoding(QFileInfo(filename).baseName().toUtf8()); while (QFile::exists(Theme::filePath(name))) { bool ok; -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) - name = QInputDialog::getText(this, tr("Sorry"), tr("A theme already exists with that name. Please enter a new name:"), QLineEdit::Normal, name, &ok, 0, Qt::ImhNone); -#else name = QInputDialog::getText(this, tr("Sorry"), tr("A theme already exists with that name. Please enter a new name:"), QLineEdit::Normal, name, &ok); -#endif if (!ok) { return; } diff --git a/src/window.cpp b/src/window.cpp index 6435cbc8..092b45b2 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -44,7 +44,11 @@ #include #include #include +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) +#include +#else #include +#endif #include #include #include @@ -679,7 +683,11 @@ void Window::newDocument() void Window::openDocument() { +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + static QString oldpath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +#else static QString oldpath = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); +#endif QString path = m_documents->currentDocument()->filename(); if (!path.isEmpty()) { path = QFileInfo(path).dir().path(); @@ -1467,7 +1475,13 @@ void Window::initMenus() QMenu* help_menu = menuBar()->addMenu(tr("&Help")); m_actions["About"] = help_menu->addAction(QIcon::fromTheme("help-about"), tr("&About"), this, SLOT(aboutClicked())); m_actions["About"]->setMenuRole(QAction::AboutRole); - m_actions["AboutQt"] = help_menu->addAction(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), qApp, SLOT(aboutQt())); + m_actions["AboutQt"] = help_menu->addAction( +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"), +#else + QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), +#endif + tr("About &Qt"), qApp, SLOT(aboutQt())); m_actions["AboutQt"]->setMenuRole(QAction::AboutQtRole); // Always show menubar From 9985dc49bbe62a7fcde9bfcf3912cf10d0afc25b Mon Sep 17 00:00:00 2001 From: vjandrea Date: Sun, 3 Feb 2013 14:25:01 -0500 Subject: [PATCH 100/630] Update Italian translation. --- translations/focuswriter_it.qm | Bin 22640 -> 32628 bytes translations/focuswriter_it.ts | 242 ++++++++++++++++----------------- 2 files changed, 121 insertions(+), 121 deletions(-) diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index b5285a064028d4542e0361055604fe5907dd0e39..ecb0b6c883392f0ced8e03e1e054dd275021e222 100644 GIT binary patch delta 11581 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 P)aniecz>RIasB@RIgql) delta 2878 zcmXYzd0bUx8pofr-SymiQC2r(mCI!f6a@)IKm=JNQIs4^ub>!$2xyslCv_|q(R$r7 zb*#o3#1Zu3f_sQdn#(ATXlWVPjJY)`QmHUMIP(Xe?>X;z-)H?j@8ww+_iH_8i#|BZ z?cC!n>o0f?JpR^aM{kWG(wra?HxeaQ;8>!}Gelmi z6h@vQz5(wsLrDCp1>gITcvvKgI78y)cp_mcNdZ{5)RJVIoIuoP7fF+Mz;OaeyPgpR z=aXfF4^ebKvV8e2xP&Y{2BM#m<+3l)>%L@p5DK29fXX_eQGcRlNI+0H~-S90Z za+c`!xfev^nz`VXpNMqvTxeAxQU6;C-KTOB!u~=O(9RXNVgFDqS9<&)QJMqS@X}6{ z+QQwRn1jS^3%G|5+mX2oFKt>w)NeNLu+mE8mcqO3N2Gl};3pcEp|ofD#cflFj2V3O z@h&1KJ->e24wSH%-xigOfIjEH+R#iivX$T2Q`+cMe&3M-ZOceDof2|3AY)Pg3%{DKh_(l9}zZvL}#Q*mp9H!{`SEn4&3V$I`h5=3|46V6` zN`wlL=WnADCxx8e0PYJP{)hl9KL|B`cW{2EP@e_izP?hZU%iCL@PTmn#zmrm6NU3H zjR?R~_*d6sqOhyNosYJWjr@KW+Kq@*zftHY!H3A1!pj?J5Xo9m*Z2gb%M#6U7DTyG zOdZ`w6#j)+P_`DLohRB_;Arq2@%yt2-id5iiY& zM`Xd`rG@Lz+Zgfc-JQrJOX8kk-jf?8VQB?QT_TCS-}g)Le;}|SkEMjV8z^b0lyQ72 zk!hW@e0MdG_X4SMOD1|9C{>L;1Z5VtM9q-u50pa9OQeQx7obI-O4n2Wij4P3xAxZI@~V-3 zuAECWXpc&5?N6kQRk>JUH{_toZ4z2BvQQPW1@DPC zmHYx6{%2M8*ASs0Q8jxz#1|N-DsVgoHD{>iRky&w4Au79V64}uP8T>q?PFA}>0Lwv zS`-eBR&{#b#2C7$UhV~5e^U#V4kEcu-M6z3v=U-d7u=77gCErM3@b5i!_@O1z@hoB zdh>d-vxcLf*CR;@H`87lBX>+uQ!`_*Z^dgz<4_053>RC(IPcC?Dy zrd_f4A{RZo>=c9d$RV;vGaSe4lOv8aKvogT*e>6MP-p|_CQPCr{qJA zOK^UKe54hX4S6KrYO)E4s6zhnRToq{U7`CG`EfZ)Dw_;q$!?S|-JolYM*w!iAcn}t z#Tw$L;-d2S9>h7%AVba$^jPm`D12UoM3x)Mu9v}ayWzbPX_%7xh7+|(_&?&Pq4{hy zDw}2K%tnH)sm8&!gu57zw~e+~ETj%FR&JjK2W7_9Wf9Zo+s~ znPS(Yw_J)Tcku5pu+LPosRliNX*wLV7+Q%oeG})1d*hy|)9WG}PBV2@RAUO-^P%uH zNR?!IgYsz>m64V5HAHNJyp%Z_l3BemoLw=E8RXNu!Af(;gEA?X-l0-FnaM)IS;*P@xH@sn=61>cX+N#NUJe{D70?Xwu%`@4;_MgP^95GyHQLWi=`<7ma$%$t zTu4PQHVf|s;B2fE(E=)DH@#jP5Yg+n0N)n&SVDY7R7iQ)Q^DgC;m9yUQEZIlqitJfF9X#XAPFyZ?F-LP=tlPucFdqhcoE7#MW+mnj&fK%k zy2DlMm{}(vDEl|&Nj%F8u(CO+My`lu1O}*`C=Q28*(i5c`?kxx}hKP_AQZ(5@T_pY{KYr))aez3u75U79M^Njft{H#SP%tuw-|3HNlak zkB#GWZ2j2Kj}v#pWnJRW?D4pv%$ii?>`tjLJqzx83SdRt3n+JQvOmW(DN*dhlt;ZG zI Close (%1) - + Chiudi (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Chiudi avviso @@ -71,47 +71,47 @@ Reload File - + Ricarica File Reload the file %1 from disk? - + Ricaricare il file %1 dal disco? All unsaved changes will be lost. - + Tutte le modifiche non salvate verranno perse. Reload - + Ricarica Plain Text (*.txt) - + Testo semplice (*.txt) Question - Domanda + Domanda Saving as plain text will discard all formatting. Discard formatting? - + Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? OpenDocument Text (*.odt) - + OpenDocument (*.odt) Rich Text (*.rtf) - Rich Text (*. rtf) + Rich Text (*.rtf) @@ -124,42 +124,42 @@ File Changed - + File modificato The file %1 was changed by another program. - + Il file %1 è stato modificato da un altro programma. Do you want to reload the file? - + Vuoi ricaricare il file? Reload - + Ricarica Ignore - + Ignora File Deleted - + File eliminato The file %1 was deleted by another program. - + Il file %1 è stato modificato da un altro programma. Do you want to save or close the file? - + Vuoi salvare o chiudere il file? @@ -187,7 +187,7 @@ Regular expressions - + Espressioni regolari @@ -202,17 +202,17 @@ &Find - + &Cerca &Replace - + &Sostituisci Replace &All - + Sostitusci &tutto @@ -291,7 +291,7 @@ <System Language> - + <Lingua di sistema> @@ -301,7 +301,7 @@ Please restart this application for the change in language to take effect. - Per modificarela lingua riavviare l'applicazione. + Per modificare la lingua riavviare l'applicazione. @@ -376,12 +376,12 @@ Shortcuts - + Scorciatioie One or more shortcuts conflict. Do you wish to proceed? - + C'è un conflitto di scorciatoie. Continuare? @@ -391,7 +391,7 @@ Daily Goal - Obiettivo del giorno + Obiettivo giornaliero @@ -437,27 +437,27 @@ Smart quotes: - Citazione: + Virgolette: Double - Doppio + Doppie Single - Singolo + Singole Scenes - + Scene Divider: - + Divisore @@ -487,12 +487,12 @@ Page count - Conteggio pagina + Conteggio pagine Paragraph count - Conteggio paragrafo + Conteggio paragrafi @@ -502,7 +502,7 @@ Page Size - Dimensione pagina + Dimensioni pagina @@ -517,17 +517,17 @@ Word Count Algorithm - Conteggio parole Algoritmo + Algoritmo di conteggio parole Detect word boundaries - Rileva confini delle parole + Rileva limiti delle parole Divide character count by six - Dividere conteggio dei caratteri da sei + Dividere per sei il conteggio caratteri @@ -582,17 +582,17 @@ Command - + Comando Shortcut - + Scorciatoia Action - + Azione @@ -660,52 +660,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Giù Move Scenes Up - + Sposta scene su Ctrl+Shift+Up - + Ctrl+Shift+Su Toggle Scene List - + Attiva lista scene Shift+F4 - + Shift+F4 Show scene list (%1) - + Visualizza lista scene (%1) Hide scene list (%1) - + Nascondi lista scene (%1) Filter - + Filtro Move Scenes Down - + Sposta scene giù Resize scene list - + Ridimensiona lista scene @@ -826,18 +826,18 @@ Clear - + Elimina Reset to Default - + Ripristina default Shortcut: - + Scorciatoia: @@ -863,27 +863,27 @@ &Add - + &Aggiungi &Ignore - + &Ignora I&gnore All - + Ignora &tutto &Change - + &Cambia C&hange All - + Cambia t&utto @@ -898,7 +898,7 @@ Checking spelling... - Controllo ortografico ... + Controllo ortografico... @@ -921,32 +921,32 @@ Symbols - + Simboli Recently used symbols - + Simboli usati recentemente All symbols - + Tutti i simboli Details - + Dettagli Name: - Nome: + Nome: Insert - + Inserisci @@ -954,12 +954,12 @@ Blocks - + Blocchi Scripts - + Script @@ -975,7 +975,7 @@ Modify Theme - Modificare tema + Modifica tema @@ -1057,7 +1057,7 @@ pixels - pixel + pixel @@ -1112,57 +1112,57 @@ Spacings - + Spaziature Line Spacing - + Interlinea Single - Singolo + Singola 1.5 Lines - + 1.5 linee Double - Doppio + Doppia Proportional - + Proporzionale Paragraph Spacing - + Spaziatura paragrafi Indent First Line: - + Indenta prima linea: Pixels Above: - + Pixel sopra Pixels Below: - + Pixel sotto The quick brown fox jumps over the lazy dog - Ma la volpe col suo balzo ha raggiunto il quieto fido + La volpe col suo balzo ha raggiunto il quieto fido @@ -1423,32 +1423,32 @@ FocusWriter - + FocusWriter A simple fullscreen word processor - + Un semplice editor di testo a pieno schermo Copyright &copy; 2008-%1 Graeme Gott - + Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + Rilasciato sotto licenza <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - + Utilizza icone del tema <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - + Sotto licenza <a href=%1>LGPL 3</a> @@ -1505,88 +1505,88 @@ Switch to Next Document - + Passa al documento successivo Switch to Previous Document - + Passa al documento precedente Switch to First Document - + Passa al primo documento Switch to Last Document - + Passa all'ultimo documento Switch to Document %1 - + Passa al documento %1 Loading settings - + Caricamento impostazioni Emergency cache is not writable. - + La cache di emergenza non è scrivibile Warning - + Attenzione FocusWriter was not shut down cleanly. - + FocusWriter non è stato chiuso correttamente. Restore from the emergency cache? - + Ripristinare dalla cache di emergenza? Some files could not be opened. - + Non è stato possibile aprire alcuni file. Some files were opened Read-Only. - + Alcuni file sono stati aperti in sola lettura. Text Files (%1);;All Files (*) - + File di testo (%1);;Tutti i file (*) '%1' is newer than the cached copy. - + '%1' è più recente della copia in cache. Overwrite newer file? - + Sovrascrivere il file più recente? Unable to load typewriter sounds. - + Impossibile caricare i suoni della macchina per scrivere. Please make sure that SDL_mixer is installed. - + Accertati che SDL_mixer sia installato. @@ -1611,7 +1611,7 @@ Reloa&d - + Ricarica @@ -1696,12 +1696,12 @@ Paste &Unformatted - + Incolla &non formattato Ctrl+Shift+V - + Ctrl+Shift+V @@ -1711,12 +1711,12 @@ Select &Scene - + Seleziona &scena Ctrl+Shift+A - + Ctrl+Shift+A @@ -1901,7 +1901,7 @@ S&ymbols... - + S&imboli @@ -1921,7 +1921,7 @@ F&ocused Text - + Testo a fuoco @@ -1961,27 +1961,27 @@ Focus Off - + Messa a fuoco disattivata Focus One Line - + Metti a fuoco una linea Focus Three Lines - + Metti a fuoco tre linee &Paragraph - + &Paragrafo Focus Paragraph - + Paragrafo a fuoco @@ -1996,22 +1996,22 @@ Some files were unsupported and could not be opened. - + Qualche file non è supportato e non è stato aperto. &Off - + Non attivo One &Line - + Una &Linea &Three Lines - + &Tre Linee From 7f8b609de10d5ffba9ef9c3f00f1714987eeb4a5 Mon Sep 17 00:00:00 2001 From: vjandrea Date: Mon, 4 Feb 2013 14:30:30 +0100 Subject: [PATCH 101/630] Update CREDITS Added it translator --- CREDITS | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS b/CREDITS index 855ad7b4..948518b7 100644 --- a/CREDITS +++ b/CREDITS @@ -17,6 +17,7 @@ Translators * Aarni (fi) * Jérôme Borme (fr) * Isratine Citizen (he) +* Andrea Bergamasco (it) * Zoltán Adamek (hu) * Robert Borst (nl) * Jakub Kowalski (pl) From 56c8645554022e73237548f1f3810a83640b9b94 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 7 Feb 2013 06:54:21 -0500 Subject: [PATCH 102/630] Update locale dialog. --- src/locale_dialog.cpp | 8 +++---- src/locale_dialog.h | 49 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index 61757764..d2f84192 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,8 +41,8 @@ QString LocaleDialog::m_appname; //----------------------------------------------------------------------------- -LocaleDialog::LocaleDialog(QWidget* parent) - : QDialog(parent, Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) +LocaleDialog::LocaleDialog(QWidget* parent) : + QDialog(parent, Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) { QString title = parent ? parent->window()->windowTitle() : QString(); setWindowTitle(!title.isEmpty() ? title : QCoreApplication::applicationName()); @@ -80,7 +80,7 @@ void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadi { m_appname = name; - // Findpaths translator path + // Find translator path QStringList paths = datadirs; if (paths.isEmpty()) { QString appdir = QCoreApplication::applicationDirPath(); diff --git a/src/locale_dialog.h b/src/locale_dialog.h index ed8efb23..dcef47d2 100644 --- a/src/locale_dialog.h +++ b/src/locale_dialog.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,34 +17,65 @@ * ***********************************************************************/ -#ifndef LOCALE_DIALOG_H -#define LOCALE_DIALOG_H +#ifndef FOCUSWRITER_LOCALE_DIALOG_H +#define FOCUSWRITER_LOCALE_DIALOG_H #include class QComboBox; +/** + * Dialog to set application language. + * + * This class handles setting the application language when the application is + * launched, as well as allowing the user to choose a different language for + * future launches. + */ class LocaleDialog : public QDialog { Q_OBJECT public: + /** + * Construct a dialog to choose application language. + * + * @param parent the parent widget of the dialog + */ LocaleDialog(QWidget* parent = 0); + /** + * Load the stored language into the application; defaults to system language. + * + * @param appname application name to prepend to translation filenames + * @param datadirs locations to search for directory containing translations + */ static void loadTranslator(const QString& appname, const QStringList& datadirs = QStringList()); + + /** + * Fetch native language name for QLocale name. + * + * @param language QLocale name to look up + * @return translated language name + */ static QString languageName(const QString& language); public slots: - virtual void accept(); + /** Override parent function to store application language. */ + void accept(); private: + /** + * Fetch list of application translations. + * + * @return list of QLocale names + */ static QStringList findTranslations(); private: - QComboBox* m_translations; + QComboBox* m_translations; /**< list of found translations */ - static QString m_current; - static QString m_path; - static QString m_appname; + static QString m_current; /**< stored application language */ + static QString m_path; /**< location of translations; found in loadTranslator() */ + static QString m_appname; /**< application name passed to loadTranslator() */ }; -#endif +#endif // FOCUSWRITER_LOCALE_DIALOG_H From ef3726b70282dd4ae3025eb084c8cc550d300a75 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Feb 2013 20:34:37 -0500 Subject: [PATCH 103/630] Make all local Cocoa variables non-const. --- src/nssound/sound.mm | 4 ++-- src/nsspellchecker/dictionary.mm | 10 +++++----- src/nsspellchecker/dictionary_data.mm | 2 +- src/nsspellchecker/dictionary_manager.mm | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/nssound/sound.mm b/src/nssound/sound.mm index a6c897ce..9096075a 100644 --- a/src/nssound/sound.mm +++ b/src/nssound/sound.mm @@ -40,7 +40,7 @@ NSData* loadSound(const QString& filename) { - const NSString* nsstring = [[NSString alloc] initWithCharacters:reinterpret_cast(filename.unicode()) length:filename.length()]; + NSString* nsstring = [[NSString alloc] initWithCharacters:reinterpret_cast(filename.unicode()) length:filename.length()]; NSData* chunk = [[NSData alloc] initWithContentsOfFile:nsstring]; [nsstring release]; return chunk; @@ -103,7 +103,7 @@ void unloadSounds() } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - NSSound* const nssound = [[NSSound alloc] initWithData:f_chunks.at(sound->m_id)]; + NSSound* nssound = [[NSSound alloc] initWithData:f_chunks.at(sound->m_id)]; [nssound play]; [pool release]; } diff --git a/src/nsspellchecker/dictionary.mm b/src/nsspellchecker/dictionary.mm index a826baba..963477df 100644 --- a/src/nsspellchecker/dictionary.mm +++ b/src/nsspellchecker/dictionary.mm @@ -34,14 +34,14 @@ { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - const NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(string.unicode()) length:string.length()]; + NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(string.unicode()) length:string.length()]; QList misspelled; int start = 0; - const int end = string.length(); + int end = string.length(); while (start < end) { - const NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:nsstring + NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:nsstring startingAt:start language:(*d)->language() wrap:NO @@ -71,9 +71,9 @@ range.location = 0; range.length = word.length(); - const NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(word.unicode()) length:word.length()]; + NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(word.unicode()) length:word.length()]; - const NSArray* array; + NSArray* array; if ([[NSSpellChecker sharedSpellChecker] respondsToSelector:@selector(guessesForWordRange)]) { array = [[NSSpellChecker sharedSpellChecker] guessesForWordRange:range inString:nsstring diff --git a/src/nsspellchecker/dictionary_data.mm b/src/nsspellchecker/dictionary_data.mm index 47726a53..5c12fbb7 100644 --- a/src/nsspellchecker/dictionary_data.mm +++ b/src/nsspellchecker/dictionary_data.mm @@ -79,7 +79,7 @@ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; QStringList session; - const NSArray* array = [[NSSpellChecker sharedSpellChecker] ignoredWordsInSpellDocumentWithTag:m_tag]; + NSArray* array = [[NSSpellChecker sharedSpellChecker] ignoredWordsInSpellDocumentWithTag:m_tag]; if (array) { for (unsigned int i = 0; i < [array count]; ++i) { session += QString::fromUtf8([[array objectAtIndex: i] UTF8String]); diff --git a/src/nsspellchecker/dictionary_manager.mm b/src/nsspellchecker/dictionary_manager.mm index 5c353e8c..6e0d0baa 100644 --- a/src/nsspellchecker/dictionary_manager.mm +++ b/src/nsspellchecker/dictionary_manager.mm @@ -58,7 +58,7 @@ bool compareWords(const QString& s1, const QString& s2) NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; QStringList languages; - const NSArray* array = [[NSSpellChecker sharedSpellChecker] availableLanguages]; + NSArray* array = [[NSSpellChecker sharedSpellChecker] availableLanguages]; if (array) { for (unsigned int i = 0; i < [array count]; ++i) { languages += QString::fromUtf8([[array objectAtIndex: i] UTF8String]); From 1d08cc52bd257c64027652e4ad7fd4932b76c70a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 11 Feb 2013 20:57:01 -0500 Subject: [PATCH 104/630] Disable native clipboard glue classes with Qt 5. --- focuswriter.pro | 21 +++++++++++++-------- src/application.cpp | 4 ++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index bfa3936d..49d7e098 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -38,31 +38,36 @@ macx { INCLUDEPATH += src/nsspellchecker /Library/Frameworks/libzip.framework/Headers LIBS += -framework libzip -framework AppKit - HEADERS += src/rtf/clipboard_mac.h \ - src/nsspellchecker/dictionary.h \ + HEADERS += src/nsspellchecker/dictionary.h \ src/nsspellchecker/dictionary_data.h \ src/nsspellchecker/dictionary_manager.h - SOURCES += src/rtf/clipboard_mac.cpp - OBJECTIVE_SOURCES += src/nsspellchecker/dictionary.mm \ src/nsspellchecker/dictionary_data.mm \ src/nsspellchecker/dictionary_manager.mm \ src/nssound/sound.mm + + lessThan(QT_MAJOR_VERSION, 5) { + HEADERS += src/rtf/clipboard_mac.h + SOURCES += src/rtf/clipboard_mac.cpp + } } else:win32 { INCLUDEPATH += enchant libzip src/enchant LIBS += ./enchant/libenchant.dll ./libzip/libzip0.dll -lOle32 - HEADERS += src/rtf/clipboard_windows.h \ - src/enchant/dictionary.h \ + HEADERS += src/enchant/dictionary.h \ src/enchant/dictionary_data.h \ src/enchant/dictionary_manager.h - SOURCES += src/rtf/clipboard_windows.cpp \ - src/enchant/dictionary.cpp \ + SOURCES += src/enchant/dictionary.cpp \ src/enchant/dictionary_data.cpp \ src/enchant/dictionary_manager.cpp \ src/qsound/sound.cpp + + lessThan(QT_MAJOR_VERSION, 5) { + HEADERS += src/rtf/clipboard_windows.h + SOURCES += src/rtf/clipboard_windows.cpp + } } else { INCLUDEPATH += src/enchant diff --git a/src/application.cpp b/src/application.cpp index 322c89c3..790ac324 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -24,12 +24,14 @@ #include #include +#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) #ifdef Q_OS_MAC #include "rtf/clipboard_mac.h" #endif #ifdef Q_OS_WIN32 #include "rtf/clipboard_windows.h" #endif +#endif //----------------------------------------------------------------------------- @@ -63,8 +65,10 @@ Application::Application(int& argc, char** argv) : setAttribute(Qt::AA_DontShowIconsInMenus, true); #endif +#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) # if defined(Q_OS_MAC) || defined(Q_OS_WIN32) new RTF::Clipboard; +#endif #endif qputenv("UNICODEMAP_JP", "cp932"); From 80abf49e6e7dbb2331c7e9b01f47b775b68031f5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 25 Feb 2013 10:56:27 -0500 Subject: [PATCH 105/630] FIXED: Crash when ignoring words in spelling dialog. This commit reverts 9d1f39576c5c1bc29235817cf8dc6fa2fe977651. --- ChangeLog | 3 ++ src/block_stats.cpp | 7 ++- src/block_stats.h | 8 ++-- src/enchant/dictionary.cpp | 14 +++--- src/enchant/dictionary.h | 5 +- src/highlighter.cpp | 6 +-- src/nsspellchecker/dictionary.h | 5 +- src/nsspellchecker/dictionary.mm | 31 +++++------- src/spell_checker.cpp | 82 ++++++++++++++++---------------- 9 files changed, 77 insertions(+), 84 deletions(-) diff --git a/ChangeLog b/ChangeLog index e09ee7cc..e45c6826 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-02-25 Graeme Gott + * FIXED: Crash when ignoring words in spelling dialog. + 2012-12-21 Graeme Gott * Add support for compiling with Qt 5.0.0. diff --git a/src/block_stats.cpp b/src/block_stats.cpp index 20a5bc5b..aba7ff2c 100644 --- a/src/block_stats.cpp +++ b/src/block_stats.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,7 +49,10 @@ void BlockStats::checkSpelling(const QString& text, const Dictionary& dictionary { m_misspelled.clear(); if (!text.isEmpty()) { - m_misspelled = dictionary.check(text); + QStringRef word; + while ((word = dictionary.check(text, word.position() + word.length())).isNull() == false) { + m_misspelled.append(word); + } } m_checked = Checked; } diff --git a/src/block_stats.h b/src/block_stats.h index ee8aa9c9..fe825360 100644 --- a/src/block_stats.h +++ b/src/block_stats.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +36,7 @@ class BlockStats : public QTextBlockUserData int characterCount() const; int spaceCount() const; int wordCount() const; - QList misspelled() const; + QVector misspelled() const; enum SpellCheckStatus { @@ -57,7 +57,7 @@ class BlockStats : public QTextBlockUserData int m_words; bool m_scene; SceneModel* m_scene_model; - QList m_misspelled; + QVector m_misspelled; SpellCheckStatus m_checked; }; @@ -86,7 +86,7 @@ inline int BlockStats::wordCount() const return m_words; } -inline QList BlockStats::misspelled() const +inline QVector BlockStats::misspelled() const { return m_misspelled; } diff --git a/src/enchant/dictionary.cpp b/src/enchant/dictionary.cpp index 7f338d14..79c84824 100644 --- a/src/enchant/dictionary.cpp +++ b/src/enchant/dictionary.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,11 +39,10 @@ Dictionary::Dictionary(DictionaryData** data) : //----------------------------------------------------------------------------- -QList Dictionary::check(const QString& string) const +QStringRef Dictionary::check(const QString& string, int start_at) const { - QList misspelled; if (!d) { - return misspelled; + return QStringRef(); } int index = -1; @@ -54,7 +53,7 @@ QList Dictionary::check(const QString& string) const bool is_word = false; int count = string.length() - 1; - for (int i = 0; i <= count; ++i) { + for (int i = start_at; i <= count; ++i) { QChar c = string.at(i); switch (c.category()) { case QChar::Number_DecimalDigit: @@ -102,7 +101,7 @@ QList Dictionary::check(const QString& string) const word.replace(QChar(0x2019), QLatin1Char('\'')); QByteArray word_utf8 = word.toUtf8(); if (enchant_dict_check((*d)->dictionary(), word_utf8.constData(), word_utf8.length()) > 0) { - misspelled.append(check); + return check; } } index = -1; @@ -111,8 +110,7 @@ QList Dictionary::check(const QString& string) const is_uppercase = f_ignore_uppercase; } } - - return misspelled; + return QStringRef(); } //----------------------------------------------------------------------------- diff --git a/src/enchant/dictionary.h b/src/enchant/dictionary.h index 13f97c5c..0e57fe4c 100644 --- a/src/enchant/dictionary.h +++ b/src/enchant/dictionary.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +22,6 @@ class DictionaryData; -#include class QString; class QStringList; class QStringRef; @@ -32,7 +31,7 @@ class Dictionary public: Dictionary(DictionaryData** data = 0); - QList check(const QString& string) const; + QStringRef check(const QString& string, int start_at) const; QStringList suggestions(const QString& word) const; void addWord(const QString& word); diff --git a/src/highlighter.cpp b/src/highlighter.cpp index 0444f8ed..8db0e75d 100644 --- a/src/highlighter.cpp +++ b/src/highlighter.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -93,7 +93,7 @@ bool Highlighter::eventFilter(QObject* watched, QEvent* event) bool under_mouse = false; QStringRef word; - QList words = static_cast(block.userData())->misspelled(); + QVector words = static_cast(block.userData())->misspelled(); for (int i = 0; i < words.count(); ++i) { word = words.at(i); int delta = cursor - word.position(); @@ -165,7 +165,7 @@ void Highlighter::highlightBlock(const QString& text) error.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline); int cursor = m_text->textCursor().position() - currentBlock().position(); - QList words = stats->misspelled(); + QVector words = stats->misspelled(); for (int i = 0; i < words.count(); ++i) { const QStringRef& word = words.at(i); int delta = cursor - word.position(); diff --git a/src/nsspellchecker/dictionary.h b/src/nsspellchecker/dictionary.h index 8b2f6992..8ca3ade5 100644 --- a/src/nsspellchecker/dictionary.h +++ b/src/nsspellchecker/dictionary.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +22,6 @@ class DictionaryData; -#include class QString; class QStringList; class QStringRef; @@ -32,7 +31,7 @@ class Dictionary public: Dictionary(DictionaryData** data = 0) : d((data && *data) ? data : 0) { } - QList check(const QString& string) const; + QStringRef check(const QString& string, int start_at) const; QStringList suggestions(const QString& word) const; void addWord(const QString& word); diff --git a/src/nsspellchecker/dictionary.mm b/src/nsspellchecker/dictionary.mm index 963477df..78528e65 100644 --- a/src/nsspellchecker/dictionary.mm +++ b/src/nsspellchecker/dictionary.mm @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,30 +30,23 @@ //----------------------------------------------------------------------------- -QList Dictionary::check(const QString& string) const +QStringRef Dictionary::check(const QString& string, int start_at) const { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(string.unicode()) length:string.length()]; - QList misspelled; + QStringRef misspelled; - int start = 0; - int end = string.length(); - while (start < end) { - NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:nsstring - startingAt:start - language:(*d)->language() - wrap:NO - inSpellDocumentWithTag:(*d)->tag() - wordCount:NULL]; - - if (range.length > 0) { - misspelled.append(QStringRef(&string, range.location, range.length)); - } else { - break; - } - start = range.location + range.length; + NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:nsstring + startingAt:start_at + language:(*d)->language() + wrap:NO + inSpellDocumentWithTag:(*d)->tag() + wordCount:NULL]; + + if (range.length > 0) { + misspelled = QStringRef(&string, range.location, range.length); } [pool release]; diff --git a/src/spell_checker.cpp b/src/spell_checker.cpp index f4f1ab9c..e2484217 100644 --- a/src/spell_checker.cpp +++ b/src/spell_checker.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -200,10 +200,10 @@ void SpellChecker::check() reject(); } - // Check current paragraph + // Check current line QTextBlock block = m_cursor.block(); - QList misspelled = m_dictionary.check(block.text()); - if (misspelled.isEmpty()) { + QStringRef word = m_dictionary.check(block.text(), m_cursor.position() - block.position()); + if (word.isNull()) { if (block.next().isValid()) { m_cursor.movePosition(QTextCursor::NextBlock); continue; @@ -212,46 +212,44 @@ void SpellChecker::check() } } - foreach (const QStringRef& word, misspelled) { - // Select misspelled word - m_cursor.setPosition(word.position() + block.position()); - m_cursor.setPosition(m_cursor.position() + word.length(), QTextCursor::KeepAnchor); - m_word = m_cursor.selectedText(); - - if (!m_ignored.contains(m_word)) { - wait_dialog.close(); - setEnabled(true); - - // Show misspelled word in context - QTextCursor cursor = m_cursor; - cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 10); - int end = m_cursor.position() - cursor.position(); - int start = end - m_word.length(); - cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor, 21); - QString context = cursor.selectedText(); - context.insert(end, ""); - context.insert(start, ""); - context.replace("\n", "

"); - context.replace("\t", "\t"); - context = "

" + context + "

"; - m_context->setHtml(context); - - // Show suggestions - m_suggestion->clear(); - m_suggestions->clear(); - QStringList words = m_dictionary.suggestions(m_word); - if (!words.isEmpty()) { - foreach (const QString& word, words) { - m_suggestions->addItem(word); - } - m_suggestions->setCurrentRow(0); + // Select misspelled word + m_cursor.setPosition(word.position() + block.position()); + m_cursor.setPosition(m_cursor.position() + word.length(), QTextCursor::KeepAnchor); + m_word = m_cursor.selectedText(); + + if (!m_ignored.contains(m_word)) { + wait_dialog.close(); + setEnabled(true); + + // Show misspelled word in context + QTextCursor cursor = m_cursor; + cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 10); + int end = m_cursor.position() - cursor.position(); + int start = end - m_word.length(); + cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor, 21); + QString context = cursor.selectedText(); + context.insert(end, "
"); + context.insert(start, ""); + context.replace("\n", "

"); + context.replace("\t", "\t"); + context = "

" + context + "

"; + m_context->setHtml(context); + + // Show suggestions + m_suggestion->clear(); + m_suggestions->clear(); + QStringList words = m_dictionary.suggestions(m_word); + if (!words.isEmpty()) { + foreach (const QString& word, words) { + m_suggestions->addItem(word); } - - // Stop checking words - m_document->setTextCursor(m_cursor); - m_suggestion->setFocus(); - return; + m_suggestions->setCurrentRow(0); } + + // Stop checking words + m_document->setTextCursor(m_cursor); + m_suggestion->setFocus(); + return; } } From 3fa2b02fa29da8e879b015b7787efb4b0f07da11 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 25 Feb 2013 13:11:20 -0500 Subject: [PATCH 106/630] Simplify build system file. --- focuswriter.pro | 53 ++++++++++++------------------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index 49d7e098..ccf72252 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -1,22 +1,21 @@ +lessThan(QT_VERSION, 4.6) { + error("FocusWriter requires Qt 4.6 or greater") +} + TEMPLATE = app +QT += network greaterThan(QT_MAJOR_VERSION, 4) { - QT += widgets - QT += printsupport + QT += widgets printsupport } CONFIG += warn_on macx { QMAKE_INFO_PLIST = resources/mac/Info.plist - CONFIG += x86_64 } !win32 { LIBS += -lz } -MOC_DIR = build -OBJECTS_DIR = build -RCC_DIR = build - VERSION = 1.4.1 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" @@ -26,14 +25,6 @@ unix: !macx { TARGET = FocusWriter } -# Add Qt single use application -INCLUDEPATH += src/qtsingleapplication -SOURCES += src/qtsingleapplication/qtsingleapplication.cpp \ - src/qtsingleapplication/qtlocalpeer.cpp -HEADERS += src/qtsingleapplication/qtsingleapplication.h \ - src/qtsingleapplication/qtlocalpeer.h -QT *= network - macx { INCLUDEPATH += src/nsspellchecker /Library/Frameworks/libzip.framework/Headers LIBS += -framework libzip -framework AppKit @@ -84,6 +75,8 @@ macx { src/sdl/sound.cpp } +INCLUDEPATH += src/qtsingleapplication + HEADERS += src/action_manager.h \ src/alert.h \ src/alert_layer.h \ @@ -124,6 +117,8 @@ HEADERS += src/action_manager.h \ src/timer_display.h \ src/timer_manager.h \ src/window.h \ + src/qtsingleapplication/qtsingleapplication.h \ + src/qtsingleapplication/qtlocalpeer.h \ src/rtf/reader.h \ src/rtf/tokenizer.h \ src/rtf/writer.h @@ -167,35 +162,13 @@ SOURCES += src/action_manager.cpp \ src/timer_display.cpp \ src/timer_manager.cpp \ src/window.cpp \ + src/qtsingleapplication/qtsingleapplication.cpp \ + src/qtsingleapplication/qtlocalpeer.cpp \ src/rtf/reader.cpp \ src/rtf/tokenizer.cpp \ src/rtf/writer.cpp -TRANSLATIONS = translations/focuswriter_ca.ts \ - translations/focuswriter_cs.ts \ - translations/focuswriter_da.ts \ - translations/focuswriter_de.ts \ - translations/focuswriter_el.ts \ - translations/focuswriter_en.ts \ - translations/focuswriter_es.ts \ - translations/focuswriter_es_MX.ts \ - translations/focuswriter_fi.ts \ - translations/focuswriter_fr.ts \ - translations/focuswriter_he.ts \ - translations/focuswriter_hu.ts \ - translations/focuswriter_it.ts \ - translations/focuswriter_ja.ts \ - translations/focuswriter_nl.ts \ - translations/focuswriter_pl.ts \ - translations/focuswriter_pt.ts \ - translations/focuswriter_pt_BR.ts \ - translations/focuswriter_ro.ts \ - translations/focuswriter_ru.ts \ - translations/focuswriter_sk.ts \ - translations/focuswriter_sv.ts \ - translations/focuswriter_tr.ts \ - translations/focuswriter_uk.ts \ - translations/focuswriter_zh_CN.ts +TRANSLATIONS = $$files(translations/focuswriter_*.ts) RESOURCES = resources/images/images.qrc resources/images/icons/icons.qrc macx { From ee5490494ec45cc3ef30da16d684181fdcc2de26 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 25 Feb 2013 13:25:12 -0500 Subject: [PATCH 107/630] Update copyright year. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 092b45b2..bebcf3e2 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -891,7 +891,7 @@ void Window::aboutClicked() "

%6
%7

") .arg(tr("FocusWriter"), QApplication::applicationVersion(), tr("A simple fullscreen word processor"), - tr("Copyright © 2008-%1 Graeme Gott").arg("2012"), + tr("Copyright © 2008-%1 Graeme Gott").arg("2013"), tr("Released under the GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\""), tr("Uses icons from the Oxygen icon theme").arg("\"http://www.oxygen-icons.org/\""), tr("Used under the LGPL 3 license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) From aca8b3806d15dd6ce364f1069f53fe0f418b7abe Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 25 Feb 2013 13:38:28 -0500 Subject: [PATCH 108/630] Sync translations with Transifex. --- translations/focuswriter_ca.ts | 315 ++++++++++---------- translations/focuswriter_cs.ts | 315 ++++++++++---------- translations/focuswriter_da.ts | 315 ++++++++++---------- translations/focuswriter_de.ts | 315 ++++++++++---------- translations/focuswriter_el.ts | 315 ++++++++++---------- translations/focuswriter_en.ts | 315 ++++++++++---------- translations/focuswriter_es.ts | 315 ++++++++++---------- translations/focuswriter_es_MX.ts | 315 ++++++++++---------- translations/focuswriter_fi.ts | 315 ++++++++++---------- translations/focuswriter_fr.ts | 315 ++++++++++---------- translations/focuswriter_he.qm | Bin 29368 -> 29242 bytes translations/focuswriter_he.ts | 465 +++++++++++++++--------------- translations/focuswriter_hu.ts | 315 ++++++++++---------- translations/focuswriter_it.ts | 315 ++++++++++---------- translations/focuswriter_ja.ts | 315 ++++++++++---------- translations/focuswriter_nl.ts | 315 ++++++++++---------- translations/focuswriter_pl.ts | 315 ++++++++++---------- translations/focuswriter_pt.ts | 315 ++++++++++---------- translations/focuswriter_pt_BR.ts | 315 ++++++++++---------- translations/focuswriter_ro.ts | 315 ++++++++++---------- translations/focuswriter_ru.ts | 315 ++++++++++---------- translations/focuswriter_sk.ts | 315 ++++++++++---------- translations/focuswriter_sv.ts | 315 ++++++++++---------- translations/focuswriter_tr.ts | 315 ++++++++++---------- translations/focuswriter_uk.ts | 315 ++++++++++---------- translations/focuswriter_zh_CN.ts | 315 ++++++++++---------- 26 files changed, 3975 insertions(+), 4050 deletions(-) diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 0a3c4dfd..192ac06a 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Obre la imatge - + Images(%1) Imatges (%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Per defecte @@ -786,38 +786,37 @@ Esteu segur que voleu eliminar la sessió seleccionada?
- - + Session name: Nom de la sessió: - + Sorry Disculpes - + The requested session name is already in use. El nom de la sessió seleccionat ja està essent utilitzat. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... Administrar - + Ctrl+Shift+M Ctrl+Maj+M @@ -835,8 +834,8 @@ Reinicia a per defecte
- - + + Shortcut: Drecera: @@ -912,7 +911,7 @@ Espereu siusplau
- + Spell check complete. S'ha completat la revisió ortogràfica @@ -930,22 +929,22 @@ Símbols utilitzats darrerament
- + All symbols Tots els símbols - + Details Detalls - + Name: Nom: - + Insert Insereix @@ -1224,24 +1223,22 @@ Temes (*.fwtz *.theme)
- + Themes (*.fwtz) Temes (*.fwtz) - - + Sorry Disculpes - - + A theme already exists with that name. Please enter a new name: Ja existeix un tema amb aquest nom. Poseu-li un altre nom: - + Export Theme Exporta Tema @@ -1396,631 +1393,631 @@ Window - + Loading themes S'estan carregant els Temes - + Loading sounds S'estan carregant els sons - - + + Untitled Sense títol - + Open File bre fitxer - + About FocusWriter Sobre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un processador de text senzill a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa les icones del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilitzades sota llicència <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caràcters: %L1 / %L2 - - + + Pages: %L1 Pàgines: %L1 - - + + Paragraphs: %L1 Paràgrafs: %L1 - - + + Words: %L1 Paraules: %L1 - - + + %1% of daily goal %1% de l'objectiu diari - + Opening %1 'està obrint %1 - + Question Pregunta - + Save changes? Voleu desar els canvis? - - + + (Untitled %1) (Sense títol %1) - + Switch to Next Document Canvia a un document nou - + Switch to Previous Document Canvia al document anterior - + Switch to First Document Canvia al primer document - + Switch to Last Document Canvia al darrer document - + Switch to Document %1 Canvia al document %1 - + Loading settings S'estan carregant els ajustos - + Emergency cache is not writable. No es pot escriure a la memòria cau d'emergència. - - + + Warning Avís - + FocusWriter was not shut down cleanly. FocusWriter no es va tancat correctament. - + Restore from the emergency cache? Voleu restaurar des de la memòria cau d'emergència? - + Some files could not be opened. No s'han pogut obrir alguns fitxers. - + Some files were opened Read-Only. S'han obert alguns fitxers en mode de Només lectura. - + Text Files (%1);;All Files (*) Fitxers de text (%1);;Tots el fitxers (*) - + '%1' is newer than the cached copy. '%1'és més nou que la còpia de la memòria cau. - + Overwrite newer file? Voleu sobreescriure el fitxer més nou? - + Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - + Please make sure that SDL_mixer is installed. Assegureu-vos que heu instal·lat SDL_mixer - + %1 (Read-Only) %1 (Només lectura) - + &File &Fitxer - + &New &Nou - + &Open... &Obre - + Reloa&d Torna a carregar - + &Save &Desa - + Save &As... Desa &com... - + &Rename... &Reanomena... - + Save A&ll Desa-ho tot - + Manage Sessions Gestiona les sessions - + New Session Nova sessió - + &Print... Im&primeix - + &Close Tan&ca - + &Quit Surt - + Ctrl+Q Ctrl+Q - + &Edit &Edita - + &Undo Desfés - + &Redo &Refés - + Cu&t Talla - + &Copy &Copia - + &Paste Enganxa - + Paste &Unformatted Enganxa sense format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccion&a tot - + Select &Scene Selecciona l'escena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold Negreta - + &Italic Itàlica - + &Underline S&ubratllat - + Stri&kethrough Ratllat - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndex - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndex - + Ctrl+_ Ctrl+_ - + Align &Left Alinea a l'esquerra - + Ctrl+{ Ctrl+{ - + Align &Center Alinea al &Centre - + Ctrl+| Ctrl+| - + Align &Right Alinea a la dreta - + Ctrl+} Ctrl+} - + Align &Justify &Justifica - + Ctrl+J Ctrl+J - + &Decrease Indent &Disminueix el sagnat - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrementa el sagnat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escriure d'esquerra a dreta - + Ri&ght to Left Block Escriure de dreta a esquerra - + &Tools Eines - + &Find... Cerca... - + Find &Next Cerca el següent - + Find Pre&vious Cerca l'anterior - + &Replace... Reemplaça - + Ctrl+R Ctrl+R - + Smart &Quotes Cometes tipogràfiques - + Update &Document Actualitza el document - + Update &Selection Actualitza la selecció - + &Spelling... Ortografia - + F7 F7 - + &Timers... &Temporitzadors - + S&ymbols... S&ímbols... - + &Settings Configuració - + Show &Toolbar Mostra la barra d'eines - + Show &Menu Icons Mostra les icones del menú - + F&ocused Text Text focalitzat - + &Fullscreen Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimitza - + Ctrl+M Ctrl+M - + &Themes... &Temes... - + &Preferences... &Preferències... - + Focus Off No focalitzis - + Focus One Line Focalitza una línia - + Focus Three Lines Focalitza tres línies - + &Paragraph &Paràgraf - + Focus Paragraph Focalitza un paràgraf - + &Help Ajuda - + Application &Language... Idioma de l'aplicació - + Some files were unsupported and could not be opened. Alguns fitxers no tenen suport i no es podran obrir - + &Off Tanca - + One &Line Una &Línia - + &Three Lines &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 5b8546f1..8dadf613 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Otevřít obrázek - + Images(%1) Obrázky (%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Výchozí @@ -786,38 +786,37 @@ Smazat vybrané sezení?
- - + Session name: Název sezení: - + Sorry Promiňte - + The requested session name is already in use. Požadovaný název sezení se již používá. - + &New... &Nové... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovat... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ Nastavit znovu na výchozí
- - + + Shortcut: Zkratka: @@ -912,7 +911,7 @@ Počkejte, prosím
- + Spell check complete. Ověření správného psaní je hotovo. @@ -930,22 +929,22 @@ Nedávno použité symboly
- + All symbols Všechny symboly - + Details Podrobnosti - + Name: Název: - + Insert Vložka @@ -1224,24 +1223,22 @@ Podoby (*.fwtz *.theme)
- + Themes (*.fwtz) Podoby (*.fwtz) - - + Sorry Promiňte - - + A theme already exists with that name. Please enter a new name: Podoba s tímto názvem již existuje. Zadejte, prosím, nový název: - + Export Theme Vyvést podobu @@ -1396,631 +1393,631 @@ Window - + Loading themes Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - - + + Untitled Bez názvu - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - + Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slova: %L1 - - + + %1% of daily goal %1% z denního cíle - + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - - + + (Untitled %1) (Bez názvu %1) - + Switch to Next Document Přepnout na další dokument - + Switch to Previous Document Přepnout na předchozí dokument - + Switch to First Document Přepnout na první dokument - + Switch to Last Document Přepnout na poslední dokument - + Switch to Document %1 Přepnout na dokument %1 - + Loading settings Nahrávají se nastavení - + Emergency cache is not writable. Pohotovostní vyrovnávací paměť není zapisovatelná - - + + Warning Varování - + FocusWriter was not shut down cleanly. FocusWriter nebyl vypnut čistě. - + Restore from the emergency cache? Obnovit z pohotovostní vyrovnávací paměti? - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + Text Files (%1);;All Files (*) Textové soubory (%1);;Všechny soubory (*) - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit Úp&ravy - + &Undo &Zpět - + &Redo Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... - + Some files were unsupported and could not be opened. Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index e80e556b..d44cd08d 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Åbn billede - + Images(%1) Billeder(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Standard @@ -785,38 +785,37 @@ Slet valgte session?
- - + Session name: Navn på session: - + Sorry Beklager - + The requested session name is already in use. Der gøres allerede brug af det ønskede sessionsnavn. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Administrer - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ Nulstil
- - + + Shortcut: Genvej: @@ -911,7 +910,7 @@ Vent venligst
- + Spell check complete. Stavekontrol fuldført. @@ -929,22 +928,22 @@ Nyligt brugte symboler
- + All symbols Alle symboler - + Details Detaljer - + Name: Navn: - + Insert Indsæt @@ -1223,24 +1222,22 @@ Temaer (*.fwtz *.theme)
- + Themes (*.fwtz) Temaer(*.fwtz) - - + Sorry Beklager - - + A theme already exists with that name. Please enter a new name: Der findes allerede et tema med det navn. Indtast venligst et nyt: - + Export Theme Eksporter tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Indlæser temaer - + Loading sounds Indlæser lyde - - + + Untitled Uden titel - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - + Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - + Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - - + + Characters: %L1 / %L2 Tegn: %L1 / %L2 - - + + Pages: %L1 Sider: %L1 - - + + Paragraphs: %L1 Afsnit: %L1 - - + + Words: %L1 Ord: %L1 - - + + %1% of daily goal %1% af dagligt mål - + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - - + + (Untitled %1) (Uden titel%1) - + Switch to Next Document Skift til næste dokument - + Switch to Previous Document Skift til tidligere dokument - + Switch to First Document Skift til første dokument - + Switch to Last Document Skift til sidste dokument - + Switch to Document %1 Skift til dokument %1 - + Loading settings Indlæser indstillinger - + Emergency cache is not writable. Der kan ikke skrives til reservecachen. - - + + Warning Advarsel - + FocusWriter was not shut down cleanly. FocusWriter blev ikke lukket korrekt. - + Restore from the emergency cache? Gendan fra reservecache? - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + Text Files (%1);;All Files (*) Tekstfiler (%1);;Alle Filer (*) - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog - + Some files were unsupported and could not be opened. Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 8e5f66d3..f92f835b 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Bild öffnen - + Images(%1) Bilder(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Standard @@ -785,38 +785,37 @@ Sitzung löschen?
- - + Session name: Name der Sitzung: - + Sorry Entschuldigung - + The requested session name is already in use. Die gewünschte Sitzung wird derzeit benutzt. - + &New... &Neu... - + Ctrl+Shift+N Strg+Shift+N - + &Manage... &Verwalten... - + Ctrl+Shift+M Strg+Shift+V @@ -834,8 +833,8 @@
- - + + Shortcut: @@ -911,7 +910,7 @@ Bitte warten
- + Spell check complete. Rechtschreibprüfung abgeschlossen. @@ -929,22 +928,22 @@ - + All symbols - + Details - + Name: Name: - + Insert @@ -1223,24 +1222,22 @@ Thema (*.fwtz *.theme) - + Themes (*.fwtz) Thema (*.fwtz) - - + Sorry Entschuldigung - - + A theme already exists with that name. Please enter a new name: Ein Thema mit diesem Namen existiert bereits. Bitte geben Sie einen anderen Namen ein: - + Export Theme Thema exportieren @@ -1395,631 +1392,631 @@ Window - + Loading themes Themen werden geladen - + Loading sounds Sounds werden geladen - - + + Untitled Unbenannt - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Einfache Vollbild Textverarbeitung - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - + Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - + Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - - + + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - - + + Pages: %L1 Seiten: %L1 - - + + Paragraphs: %L1 Absätze: %L1 - - + + Words: %L1 Wörter: %L1 - - + + %1% of daily goal %1% des Tagesziels - + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - - + + (Untitled %1) (Unbenannt %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Einstellungen werden geladen - + Emergency cache is not writable. Der Sicherheitsspeicher ist nicht beschreibbar. - - + + Warning Warnung - + FocusWriter was not shut down cleanly. FocusWriter wurde nicht ordnungsgemäß beendet. - + Restore from the emergency cache? Sicherheitskopie wiederherstellen? - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + Text Files (%1);;All Files (*) Text-Dateien (%1);;Alle Dateien (*) - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + S&ymbols... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph &Absatz - + Focus Paragraph - + &Help &Hilfe - + Application &Language... &Sprache... - + Some files were unsupported and could not be opened. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index f65f756e..e6ebf891 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Άνοιγμα εικόνας - + Images(%1) Εικόνες (%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Προεπιλογή @@ -785,38 +785,37 @@ Διαγραφή επιλεγμένης περιόδου λειτουργίας; - - + Session name: Όνομα περιόδου λειτουργίας: - + Sorry Λυπούμαστε - + The requested session name is already in use. Αυτό το όνομα χρησιμοποιείται ήδη για άλλη περίοδο λειτουργίας. - + &New... &Νέα... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Διαχείριση... - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ Επαναφορά στα Προκαθορισμένα - - + + Shortcut: Συντόμευση: @@ -911,7 +910,7 @@ Περιμένετε - + Spell check complete. Ολοκληρώθηκε ο ορθογραφικός έλεγχος. @@ -929,22 +928,22 @@ Πρόσφατα σύμβολα - + All symbols Όλα τα σύμβολα - + Details Λεπτομέρειες - + Name: Όνομα: - + Insert Εισαγωγή @@ -1223,24 +1222,22 @@ Θέματα (*.fwtz *.theme) - + Themes (*.fwtz) Θέματα (*.fwtz) - - + Sorry Λυπούμαστε - - + A theme already exists with that name. Please enter a new name: Υπάρχει ήδη θέμα με αυτό το όνομα. Γράψτε νέο όνομα: - + Export Theme Εξαγωγή Θέματος @@ -1395,631 +1392,631 @@ Window - + Loading themes Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - - + + Untitled Χωρίς τίτλο - + Open File Άνοιγμα Αρχείου - + About FocusWriter Σχετικά με το FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης - + Copyright &copy; 2008-%1 Graeme Gott Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> - - + + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - - + + Pages: %L1 Σελίδες: %L1 - - + + Paragraphs: %L1 Παράγραφοι: %L1 - - + + Words: %L1 Λέξεις: %L1 - - + + %1% of daily goal %1% του ημερήσιου στόχου - + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - - + + (Untitled %1) (Χωρίς τίτλο %1) - + Switch to Next Document Μετάβαση στο Επόμενο Έγγραφο - + Switch to Previous Document Μετάβαση στο Προηγούμενο Έγγραφο - + Switch to First Document Μετάβαση στο Πρώτο Έγγραφο - + Switch to Last Document Μετάβαση στο Τελευταίο Έγγραφο - + Switch to Document %1 Μετάβαση στο Έγγραφο %1 - + Loading settings Φορτώνουν ρυθμίσεις - + Emergency cache is not writable. Δεν μπορεί να γίνει εγγραφή στην κρυφή μνήμη εκτάκτου ανάγκης. - - + + Warning Προειδοποίηση - + FocusWriter was not shut down cleanly. Το FocusWriter δεν τερματίστηκε σωστά. - + Restore from the emergency cache? Να γίνει επαναφορά από την cache εκτάκτου ανάγκης; - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + Text Files (%1);;All Files (*) Αρχεία κειμένου (%1);;Όλα τα αρχεία (*) - + '%1' is newer than the cached copy. Το '%1' είναι νεότερο από το αντίγραφο στην cache. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d Επαναφόρτωσ&η - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + New Session Νέα Περίοδος Λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Επιλογή όλ&ων - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript Δεί&κτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη γραφή - + Ri&ght to Left Block Αριστερόστρο&φη γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &επόμενου - + Find Pre&vious Εύρεση &προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + S&ymbols... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση γραμμής εργα&λείων - + Show &Menu Icons Εμφάνιση εικονιδίων &μενού - + F&ocused Text - + &Fullscreen Πλήρης οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off Εστίαση Ανένεργη - + Focus One Line Εστίαση Μίας Γραμμής - + Focus Three Lines Εστίαση Τριών Γραμμών - + &Paragraph - + Focus Paragraph Εστίαση Παραγράφου - + &Help &Βοήθεια - + Application &Language... &Γλώσσα εφαρμογής... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 57084d88..aa8690cd 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image - + Images(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default @@ -785,38 +785,37 @@ - - + Session name: - + Sorry - + The requested session name is already in use. - + &New... - + Ctrl+Shift+N - + &Manage... - + Ctrl+Shift+M @@ -834,8 +833,8 @@ - - + + Shortcut: @@ -911,7 +910,7 @@ - + Spell check complete. @@ -929,22 +928,22 @@ - + All symbols - + Details - + Name: - + Insert @@ -1223,24 +1222,22 @@ - + Themes (*.fwtz) - - + Sorry - - + A theme already exists with that name. Please enter a new name: - + Export Theme @@ -1395,631 +1392,631 @@ Window - + Loading themes - + Loading sounds - - + + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + %1% of daily goal - + Opening %1 - + Question - + Save changes? - - + + (Untitled %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 9dc9ded8..f3129600 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Abrir imagen - + Images(%1) Imágenes(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Predeterminado @@ -785,38 +785,37 @@ ¿Quiere eliminar la sesión seleccionada? - - + Session name: Nombre de la sesión: - + Sorry Aviso - + The requested session name is already in use. El nombre solicitado ya está en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayús+N - + &Manage... &Gestionar... - + Ctrl+Shift+M Ctrl+Mayús+M @@ -834,8 +833,8 @@ Restablecer valores predeterminados - - + + Shortcut: Atajo: @@ -911,7 +910,7 @@ Espere un momento - + Spell check complete. Finalizó la revisión ortográfica. @@ -929,22 +928,22 @@ Símbolos usados recientemente - + All symbols Todos los símbolos - + Details Detalles - + Name: Nombre: - + Insert Insertar @@ -1223,24 +1222,22 @@ Temas (*.fwtz, *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - - + Sorry Aviso - - + A theme already exists with that name. Please enter a new name: Ya existe un tema con ese nombre. Escriba un nombre nuevo: - + Export Theme Exportar tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesador de textos simple a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + %1% of daily goal %1% del objetivo diario - + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - - + + (Untitled %1) (Sin título %1) - + Switch to Next Document Cambiar al documento siguiente - + Switch to Previous Document Cambiar al documento anterior - + Switch to First Document Cambiar al primer documento - + Switch to Last Document Cambiar al último documento - + Switch to Document %1 Cambiar al documento %1 - + Loading settings Cargando configuración - + Emergency cache is not writable. No se puede escribir en la caché de emergencia. - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no se cerró correctamente. - + Restore from the emergency cache? ¿Desea restaurarlo desde la caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + Text Files (%1);;All Files (*) Archivos de texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close C&errar - + &Quit Sali&r - + Ctrl+Q Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All &Seleccionar todo - + Select &Scene Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl + K - + Sup&erscript Su&períndice - + Ctrl+^ Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block &Escribir de izquierda a derecha - + Ri&ght to Left Block Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + S&ymbols... Símb&olos… - + &Settings &Configuración - + Show &Toolbar Mo&strar barra de herramientas - + Show &Menu Icons M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help &Ayuda - + Application &Language... &Idioma de la aplicación... - + Some files were unsupported and could not be opened. Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index ad0362fa..c1343568 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Abrir imagen - + Images(%1) Imágenes (%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Por omisión @@ -785,38 +785,37 @@ ¿Borrar sesión seleccionada? - - + Session name: Nombre de sesión: - + Sorry Lo siento - + The requested session name is already in use. La sesión solicitada se encuentra en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayus+N - + &Manage... &Administrar... - + Ctrl+Shift+M Ctrl+Mayus+M @@ -834,8 +833,8 @@ - - + + Shortcut: @@ -911,7 +910,7 @@ Por favor espere - + Spell check complete. Chequeo ortográfico completo. @@ -929,22 +928,22 @@ - + All symbols - + Details - + Name: Nombre: - + Insert @@ -1223,24 +1222,22 @@ Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - - + Sorry Lo siento - - + A theme already exists with that name. Please enter a new name: Ya existe un tema con este nombre. Por favor escriba un nombre nuevo: - + Export Theme Exportar tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + %1% of daily goal %1% de la meta diaria - + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - - + + (Untitled %1) (Sin título %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Cargando preferencias - + Emergency cache is not writable. No se puede escribir el caché de emergencia - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no fue cerrado correctamente - + Restore from the emergency cache? ¿Restaurar el caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + Text Files (%1);;All Files (*) Archivos de Texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleccionar &todo - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + S&ymbols... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help A&yuda - + Application &Language... &Idioma de aplicación... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 95d5ee1e..9a5bd7f9 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Avaa kuva - + Images(%1) Kuvat (%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Oletus @@ -785,38 +785,37 @@ Poistetaanko valittu istunto? - - + Session name: Istunnon nimi: - + Sorry Pahoittelut - + The requested session name is already in use. Pyytämäsi istunnon nimi on jo käytössä. - + &New... &Uusi... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hallinnoi... - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ - - + + Shortcut: @@ -911,7 +910,7 @@ Odota - + Spell check complete. Oikoluku valmis. @@ -929,22 +928,22 @@ - + All symbols - + Details - + Name: Nimi: - + Insert @@ -1223,24 +1222,22 @@ Teemat (*.fwtz *.theme) - + Themes (*.fwtz) Teemat (*.fwtz) - - + Sorry Pahoittelut - - + A theme already exists with that name. Please enter a new name: Samanniminen teema on jo olemassa. Anna uusi nimi: - + Export Theme Vie teema @@ -1395,631 +1392,631 @@ Window - + Loading themes Ladataan teemoja - + Loading sounds Ladataan ääniä - - + + Untitled Nimetön - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + FocusWriter FocusWriter - + A simple fullscreen word processor Yksinkertainen kokoruudun tekstinkäsittelyohjelma - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssin alaisena - + Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - + Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin alaisena - - + + Characters: %L1 / %L2 Kirjaimet: %L1 / %L2 - - + + Pages: %L1 Sivut: %L1 - - + + Paragraphs: %L1 Kappaleet: %L1 - - + + Words: %L1 Sanat: %L1 - - + + %1% of daily goal %1% päivittäisestä tavoiteesta - + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - - + + (Untitled %1) (Nimetön %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Ladataan asennuksia - + Emergency cache is not writable. Hätävälimuistia ei voida kirjoittaa. - - + + Warning Varoitus - + FocusWriter was not shut down cleanly. FocusWriteriä ei suljettu oikein. - + Restore from the emergency cache? Palautetaanko tilanne hätävälimuistista? - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin Vain Luku -tilassa - + Text Files (%1);;All Files (*) Tekstitiedostot (%1);;Kaikki tiedostot (*) - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Ei pystytty lataamaan kirjoituskoneääniä. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa... - + Reloa&d - + &Save &Tallenna - + Save &As... Tallenna &nimellä... - + &Rename... &Nimeä uudelleen... - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... &Tulosta... - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t Leik&kaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &Muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse kaikki - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Muo&toile - + &Bold &Lihavoitu - + &Italic &Kursivoitu - + &Underline &Alleviivattu - + Stri&kethrough Yli&viivattu - + Ctrl+K Ctrl+K - + Sup&erscript Ylä&indeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vasemm&alta oikealle - + Ri&ght to Left Block Oike&alta vasemmalle - + &Tools &Työkalut - + &Find... &Etsi... - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa... - + Ctrl+R Ctrl+R - + Smart &Quotes Alykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus... - + F7 F7 - + &Timers... &Ajastimet... - + S&ymbols... - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalut - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen &Koko näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... &Teemat... - + &Preferences... &Asetukset... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph &Kappale - + Focus Paragraph - + &Help &Ohje - + Application &Language... Sovelluksen &kieli... - + Some files were unsupported and could not be opened. - + &Off P&ois - + One &Line &Yksi rivi - + &Three Lines &Kolme riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index aa8902db..7a93299c 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Ouvrir une image - + Images(%1) Images(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Par défaut @@ -785,38 +785,37 @@ Effacer la session sélectionnée ? - - + Session name: Nom de la session : - + Sorry Désolé - + The requested session name is already in use. Le nom demandé est déjà utilisé. - + &New... &Nouvelle... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... &Gérer... - + Ctrl+Shift+M Ctrl+Maj+M @@ -834,8 +833,8 @@ Valeurs par défaut - - + + Shortcut: Raccourcis : @@ -911,7 +910,7 @@ Veuillez patienter - + Spell check complete. Vérification de l'orthographe terminée. @@ -929,22 +928,22 @@ Symboles récemment utilisés - + All symbols Tous les symboles - + Details Détails - + Name: Nom : - + Insert Insérer @@ -1223,24 +1222,22 @@ Thèmes (*.fwtz *.theme) - + Themes (*.fwtz) Thèmes (*.fwtz) - - + Sorry Désolé - - + A theme already exists with that name. Please enter a new name: Un thème du même nom existe déjà. Veuillez entrer un autre nom : - + Export Theme Exporter le thème @@ -1395,631 +1392,631 @@ Window - + Loading themes Chargement des thèmes - + Loading sounds Chargement des sons - - + + Untitled Sans titre - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un traitement de texte plein écran simple - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caractères : %L1 / %L2 - - + + Pages: %L1 Pages : %L1 - - + + Paragraphs: %L1 Paragraphes : %L1 - - + + Words: %L1 Mots : %L1 - - + + %1% of daily goal %1 % de l'objectif quotidien - + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - - + + (Untitled %1) (Sans titre %1) - + Switch to Next Document Basculer vers le document suivant - + Switch to Previous Document Basculer vers le document précédent - + Switch to First Document Basculer vers le premier document - + Switch to Last Document Basculer vers le dernier document - + Switch to Document %1 Basculer vers le document %1 - + Loading settings Chargement des préférences - + Emergency cache is not writable. Le cache d'urgence n'est pas accessible en écriture. - - + + Warning Avertissement - + FocusWriter was not shut down cleanly. FocusWriter ne s'est pas fermé correctement. - + Restore from the emergency cache? Récupérer les informations depuis le cache d'urgence ? - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + Text Files (%1);;All Files (*) Fichiers texte (%1);;Tous les fichiers (*) - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... - + Some files were unsupported and could not be opened. Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index b30cec09d94cf9ba9d8cd2846a341a4755b15925..45e4e03896c3da4e00e6781eac525514991ff878 100644 GIT binary patch delta 4346 zcmZ`*YgiQL6+SaN-_FkN>@IQ_5fA~9RYX9Li$nxe5CH`*prQt)!5T}d#)PQbc&QPU zYR6cj){s_X2u5j^mO0(aPxCyYN&ATmK6V`7ZpYXfqU3m@tSF*Xg($NT&*zDPzO`dwE%68OUGRD0 ztFS+L5Ak1|1D+z`U=z;AkWeEKP4FY3A(2QMM$Cl$F%OB&Od@i73Oqn$HqIt?=rK`r zEd}lJBbr!8K_9;j5(6p7YGBfP6x84ktOCN2)B+A6aFj%*Ek}q_Jjk>a=aL_hsq`$? z$H;UB`>AC#-mQa(nQ3z1Hlp|ilww*(G;$@SM1a6>FW~!Rrr2JZGR*}UxI$AG7l9#B z#`b2S*#(q&CI}I%rL6VEM4{Psj2u9-Ux0AbBFb^VesmD!6np?jnRe7qv*X|yb{z4J z9pfHQP8|aAa;7HOk+*qd>eFEV${CUX9aFFDaiM~GA<_6k{`-d@GB1UHan=c$YF3#Y151czzM&c+!=UP8Rd{(X9Gq4~UFblH z@2YZbgpR9L9YKl42B?1jx9UhRF&ih^*>Wp&Vt>^ zMpfmu)dqQ zE|{A@Ah1Gs*XlSWMfhX!A)-+^f|4_oD9l6HsYi>?HJ=bllWXx}m+)~!4r*8?RFt5{ zGd==70$v0@CZg@YpRoQJ2$4+-1ik>y5Gww_0oMU};1QsKXnGD1BAmVnXaZINM*us4 zBatD4a44`I{U5(sI5YyO5Aw8Q{1-x1^{Yg=CxxTO{GsmYb_~BL9OI@E4IM2UTl*`B z^@ecj&t9nQ8sY1G%V2PkaOt%~5Cy&o)sGt}G(?{w3h)scyHT=H=Y_tR8;LX_jC+iW zE&FYzT2qYvA5*{t+Xvei+lvoFO-xQs0REmCZXY3X4`729TJMEDEb%8q7Lve{jPwMPV{qzhuVDxv@kJAJ!&uZv(~CZ*N;Jp$EwHvl!p7DMjfqs zj1r7jCtphjf#>R!pMet^)j228UQXB5a~`981HIM1DnnOAzNud7bR1prK>d1269_2k zA~T0nM`x>dKLL8a0xZTIeM?chKFpe=*c=axF7Ejjf!#b~FHQuWpJKD1M` z9sPsU9bba*$OGzUL$0AMOVrOl2YU60s-Pzz5+|znpj%#jB04@BfEzJMG!-#uKqs1G z^(#@UJL2?)MzqBfap?mPan2N9*Kfeh6(AOVi%7!i#J9}-XqRkp_ZJE>aZIe>px(%G zu|kda4mZU^=W;O(bHti_6)u*oV%L!SaLj2mpCaY+>NKAHt3aGIQENa*yFfE3>JdsZ z!K_L992;)3Cck$S7*%Ul$KAut=A&6{{a|phW^-R5k$#|N=Nd1FJ4dtI7>-D$YCg_D zyUh&KoX*?{V*Z-*{?Le)*PI^)vFX-m>dy$s>=sSa9Rw7#-;T5Yr1|H-E0_V>B{p|0 z{FuLzTu;V{h8<>_P^oO2@l)<3=4PJ-WCFL+`xQAB>Ed zw4pd zL##jPdJAVjBYSlZkE0Z0M#;i%WGXvec6LEP6H@J%P$E0WVVyWw_BmsQjALlB8pUXhPsGOt)($sdP!-;&G! zrl7V=uKo@wPwA3tucD-}lH8i$i8lU0zHv&0@jgku^`Z}2X|$u?Mfp4PX4K5_sQlw- z5aAN!zLvSr!U(;v{4oCWb?CKM6A{rM{a^(VWj)uAUGf;UJETv{{vN}o9f%<`yaWit z!<+SqIcf}Xvypy_d!CW$=Ed_BpY546! zE1^dQb3D%Ht}twoFrEW`Fl;GXg!X)F*tU5m0!c9J>fT5+XPe=MwS5;pGj!bbK*?&% zhVFBiQfZNf7fS@p@g2ta_aR2rJ!9&oD6G#LXSIQ8#6aU>?|*^NUyTJvvM?L^jmt~R zF#}SK>q-$oK$@{;WDzn~VEjjd6GSQ+pZS8gVT$otaS61wzW@r2M-j-GwX;rkg*CH# za;4O2^i#4$O%37ZpEYM2X((Y5t>8$);2B@s`&C!kc@7mJgyP6x` zf!DW?vR>B4ZjcYV3+%Bc5M=JLYuIamy++G=zXD$JWG(Ev^|kUW;Gd!+7__o`mM6o~ znOhIi)MowRiw@hNTkJmhSmum0F)0v!JK^e{vLkewXia+yYf&DACWu}ypCiK(1_Xe{ zE!G4B)*3dlcAR!qO2W0uk+2-m8cPqmg1sOmHhdUP+txG+_=|1p>BXV}b%PzHFMKIe z!{%jW`Ivu+YS3y$c2`9NN$s|0J)o^w@(jyuQs zDf7ME^w#3{B4Zs0Iarb74%*3DYU6&b5`EyNg|%8jChX;G6mD8BCmd8IC1Sr9A40Uq zla*<+t#D0NGhhnkqlkA{x2+7noVpG-mu=^7BZuwE!AWoHWOT#J$dp^@E|%EI^}Nm( z2d(LZA&YTJqUyhyQs$=hLX}OZ4TPa&qzBu?ZeMLq&-h<^mRsqCf@Cd&t(h$IvcmWQ z4qy-f@3+Cj8o^~{&rEMv?0s3S^D{$qXdkTX*%xM+l$})E0DjrF%%yUC3kvGfNc}~_! zcEDK+yKU)NG?~-;*h07ZZev}RsQg@B$;c9HSH?|c|7#|vAiU}YxfWZJJJ?P5>74JT zJb5j4upfA}gXUcX*9NN{FoO4XcS=e@4-)w@5G86!x#){TTE+Ze$wXT_;Mo%W>pJ28 iwGl#GEjpv>jqJLzt8ly##^J`=e<&4evUC?Va{mUvm@4rA delta 4376 zcmZ`*2~ZSQ8vgs5nVz0QWkf&}L_lPeQ;zOsyZq*h=ef?g){?G6G-yFTg zeA~rrb+vR5#s7uKFwu_vC)jaZI8j0j(aaM>NiuL2{=XwKC)#mR7_ndAJO6lMtFfOj znAorDfD?)TqLC=&H1WrHqKW0i*T)fQBS|o0KlB3<(k2l(1p)UFS&Z+KaNrS9A;Y?xK`hUu5uvX09zI3VLA2u@yA?83GP}O6mQuA904#7kvsxGwi4@wBwMSb{y4e z$MJcTehP^UO{2MNH4^@n=5nPLqS)g!PX$9!zIKf5q!Xp;PRioP5KSwk zl?@z`G?pq}OhYC{y8LAi(ZD2X@!CK%_z|^T_?2kZ5$X;$67d%5{oOXAxeUW>e2-}U zS;nvNC!+p^Ou(k4M8oz0EqL&(WTppwKs2_IS=I?d6GEBgC%+|HIGfq~Sq4$oZKnFE z6$Vx_Ef!QJ^%m3RArR#pV(zBkz45Qiy?eKa#?-Mw*%l)AS!}gWw3jR&B=wmv^=)R(m9*R)XHu?`JBk*AMEx$`-sM!XZJ)T61hHQzt~X= zE*RPU=oQ81vtJ+mGb$mm-<0B9!e#bYZZHUXiajPH;Ixr!<9I)!*BG|x3<8+Fi@nk5 zK{S0j+csh$66<9j-a{b2JHtLZ=YaP!ILiQ^&G_&kH%bSC++Vmc72R-{pBJ#M){qWR)fLC+Zo)aO$Yl!`O3|`L^DPJ z?*nH79}&@3;1jG@13|JG2Z7IkKk}7Z7^2rTKo%GRGyvOyAYqCgXa+_AM*;JIqk-G_ z13nj^|A_*BU=&L1`?eh?2J+QMGeNdU{+lCSVD~yZhGg?cn5jg=3;84O<)IZT_%nYR zir#Yk`8`Wvu!p~#ABRA*`O9yE_2YK(^^hicXYyCO(6WG3{(0I5L>fPVd4$0>r%&Kk zl|ug^F9crsAX*ZH-N2v|f-WHzC2|!EKOMrP$`l4K#9Rms6ylyBvw$XH(xDcdw+J&% z&LML271kWwOf+h!uyOZHqDiu_DP%bj`;{Fv?+Tk@!N zS$#YXtP?(6Q;mU=DSTRc7VG1}XKTO>uX>?88I^FYwPVCqq5NSGQL>|O@GQ=a-zii@ z$#8sLsQMcmXJ-o47k>}7uNSUQ{S1|@5L&a{h*Ud;*273hIwIWOxEQh@tWsxLTtJrP zDvfI)SQ)2s%t8QBvs8mRZlSd0DyLL%;kDB$|J~S6WmQ3ILr~%{RoIhckaDalf_ntD z)Tt6~B;ee;s>EM`vC~xPry(zsS~d4kElBvLDz6->3NxsdIMhJ4Z>Zkf+=x~-sfsKN zN*(b~wd*m^bv3Y*$ZvtFywVRco2@#y>m+39r>a|GLdGAeE|x-0fxfEdY0n|2Vmo>* zQMLUI0sD!nzF{{o$h=ig4+GtN)ST~QB8Pmn>W@%M)-v^gzWzk%r`6^n0UX$%wnXVy zpjUU)uh(D21ly=yauVjTmGA2#^uH^;MycYGYuVqvsQeDY_ySMVa28%}BIjjec%^J;qlsqF$Bnlets08nHfwen#}H+HulamB z zT(E?Rj;EtB2uelwXUI74YtchNzdfQ?23W4&E6&+|5VHA3d|LwBaRC=u&*E~45Z4x6 z!mZaKmih(bGD#B45^FKzFNu3*8Q}13JI+ZJE7YA(Q>R$dxeF@!OuT>TLkzfB@r55M zX3-rJUu;INbbVU)b88`|7OnYvkcjoyM!2EpS(E=NL#%OhTJY_k8fHIvejwNIqg7;_G>S^UkEvuYJb>}Ma*zc`&{`&;(t)$c4Q&qRgz{s414!V+BH`(%O6NaVL0w@la#dA z52HCs%Jo4hhv}t7mvO7*u9MygUk$D}OYfQ>ufV0!N)K==r;nU*LI=$XcjE~o5hK5WP6Dm%t{*>O^)9p|=54c(BHzE|pw8Hw97 zRO&8B#kK4r-K#+>LeA;GFz8u#+Y zy69i;qg0|U@dVf%F;bU)(G!MPT}~w`6T4owD0vu2x=yz|7nex}t6Ra=fV|bZimzn! zHcxl-0ZKk4M|Zp#Esgq6cRkh>GA`A%p5YMST3!3I=aB6{J9_ogJ+N#*&jz&X{uzis zn0VduYxBT`Fg;&*5G7C7Yn$W1`kneAGBQdn)`u;Agx>Af$IW?&OC}SDOK9XBAPoEZ z>*LZ@*x#$q*cS}DuKK0_cng`&)vvgYRyYsSuRMiTc&6w#Odo`nrRy!HDnT~GQGMvBzOBpvj>qf!(ov$J8w~?)T*8mZWP{1F6u)%B3~rOUFktcw$x9G8oi_abo)S>6 z!4iY>8NG&$Vn1BRVTO(6+4w28-0;zcZTR7G(y*iJ1ISb~wA$obXlVP{1p)P03|)1& zrIJq=o-O9_VXHA_JIKi0HYR--4mLX&XSE>G(65X+ZvR3+UB*R+W@1vt7z@iP5ZD#t znldEdz14VZbP+1I%J_Y(1Lj78vCjj68{RVZm2Spds9J<{PofEA5^f3|!WE%OxI^wF z^E#{Oh>aF(H(8JCvRN@oXcm6LM!VJD*vA{)g+`$V8#jeEeAHtNH2sm$>&P3++c;G( zG|Ei_hud}i2xJBOKhp_7U%25L<)I1=d#U zh-t#0pYa9!2|eVF%KV6@cG#-1I*&FBlH$JuOXcgSK{G_9zSr>ABkv1}6_qyGR}X?> zakd+N+F_tY4i7F7eem`+LQ=l;mG1|S7^qmY?T|m7UfT5@vr-y>wzT7Glu7<_%o0&+ zv(!xh{)@b=a*aHV|TWQfqp##a) z3pdGKeq+oK>!EN1qc@moz76hrC?9bM37retV?s7oZ zAm*kuDa!%Ygf`f_hI!Fs&Cj09fb%bT&|^K3lfiP13h!9+3a&E$2Dx-WrT_o{ diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 71d76ce5..512e2395 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -24,7 +24,7 @@ Dismiss Alert - סילוק אתראה + סלק אתראה @@ -76,7 +76,7 @@ Reload the file %1 from disk? - טעינת הקובץ %1 מחדש מתוך כונן? + לטעון את הקובץ %1 מחדש מתוך כונן? @@ -144,7 +144,7 @@ Ignore - התעלמות מן אירוע + התעלם מן אירוע @@ -167,17 +167,17 @@ Search for: - חיפוש עבור: + חפש עבור: Replace with: - החלפה עם: + החלף עם: Ignore case - התעלמות מרישיות + התעלם מרישיות @@ -192,27 +192,27 @@ Search up - חיפוש מעלה + חפש מעלה Search down - חיפוש מטה + חפש מטה &Find - &מציאה + &מצא &Replace - &החלפה + &החלף Replace &All - החלפה &מוחלטת + החלף ה&כל @@ -255,12 +255,12 @@ Add - הוספה + הוסף Check Spelling... - בדיקת איות... + בדוק איות... @@ -271,12 +271,12 @@ ImageButton - + Open Image - פתיחת תמונה + פתוח תמונה - + Images(%1) תמונות(%1) @@ -334,7 +334,7 @@ Select Dictionary - בחירת מילון + בחר מילון @@ -381,7 +381,7 @@ One or more shortcuts conflict. Do you wish to proceed? - התנגשות קיצור דרך אחת או יותר. האם ברצונך להמשיך? + מתנגשים קיצור דרך אחד או יותר. האם ברצונך להמשיך? @@ -432,7 +432,7 @@ Typewriter sounds - קולות מכונת־כתיבה + צלילי מכונת כתיבה @@ -472,7 +472,7 @@ Remember cursor position - זכירת מיקום סמן + זכור מיקום סמן @@ -522,12 +522,12 @@ Detect word boundaries - איתור גבולות מילה + אתר גבולות מילה Divide character count by six - חילוק ספירת תו בשש (6) + חלק ספירת תו בשש (6) @@ -577,7 +577,7 @@ Add Separator - הוספת חוצץ + הוסף חוצץ @@ -597,17 +597,17 @@ Check spelling as you type - בדיקת איות בעת הקלדה + בדוק איות בעת הקלדה Ignore words in UPPERCASE - התעלמות ממילים עיליות + התעלם ממילים עיליות Ignore words with numbers - התעלמות ממילים עם אותיות + התעלם ממילים עם אותיות @@ -665,7 +665,7 @@ Move Scenes Up - הזזת מקטעים מעלה + הזז מקטעים מעלה @@ -675,7 +675,7 @@ Toggle Scene List - הצגת/הסתרת רשימת מקטע + הצג/הסתר רשימת מקטע @@ -685,12 +685,12 @@ Show scene list (%1) - הצגת רשימת מקטע (%1) + הצג רשימת מקטע (%1) Hide scene list (%1) - הסתרת רשימת מקטע (%1) + הסתר רשימת מקטע (%1) @@ -700,24 +700,24 @@ Move Scenes Down - הזזת מקטעים מטה + הזז מקטעים מטה Resize scene list - שינוי גודל רשימת מקטע + שנה גודל רשימת מקטע Session - + - - - + + + Default ברירת מחדל @@ -742,22 +742,22 @@ Rename - שינוי שם + שנה שם Clone - שיבוט + שבט Delete - מחיקה + מחק Switch To - החלפה אל + החלף אל @@ -782,41 +782,40 @@ Delete selected session? - מחיקת סשן נבחר? + למחוק סשן נבחר? - - + Session name: שם סשן: - + Sorry צר לי - + The requested session name is already in use. שם הסשן המבוקש כבר מצוי בשימוש. - + &New... &חדש... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... - &ניהול... + &נהל... - + Ctrl+Shift+M Ctrl+Shift+M @@ -831,11 +830,11 @@ Reset to Default - איפוס אל ברירת מחדל + איפוס - - + + Shortcut: קיצור דרך: @@ -863,27 +862,27 @@ &Add - להו&סיף + הו&סף &Ignore - להת&עלם + הת&עלם I&gnore All - להתעלם מ&הכל + התעלם מ&הכל &Change - ל&שנות + &שנה C&hange All - לשנות ה&כל + שנה ה&כל @@ -893,7 +892,7 @@ Change to: - שינוי אל: + שנה אל: @@ -911,9 +910,9 @@ נא להמתין - + Spell check complete. - בדיקת איות הושלמה + בדיקת איות הושלמה. @@ -929,24 +928,24 @@ סמלים שנשתמשו לאחרונה - + All symbols כל הסמלים - + Details פרטים - + Name: שם: - + Insert - שיבוץ + שבץ @@ -990,7 +989,7 @@ No Image - ללא תמונה + אין תמונה @@ -1027,7 +1026,7 @@ Type: - סוג: + טיפוס: @@ -1147,7 +1146,7 @@ Indent First Line: - הזחת שורה ראשונה: + הזח שורה ראשונה: @@ -1162,7 +1161,7 @@ The quick brown fox jumps over the lazy dog - יורם יהודה, צייד הנחשים + השועל החום המהיר קפץ מעל הכלב העצל @@ -1210,7 +1209,7 @@ Remove selected theme? - הסרת מוטיב נבחר? + להסיר מוטיב נבחר? @@ -1223,24 +1222,22 @@ מוטיבים ‪(*.fwtz *.theme) - + Themes (*.fwtz) מוטיבים ‪(*.fwtz) - - + Sorry צר לי - - + A theme already exists with that name. Please enter a new name: כבר קיים מוטיב עם שם זה. נא להזין שם חדש: - + Export Theme ייצוא מוטיב @@ -1260,7 +1257,7 @@ Delete timer? - מחיקת שעון עצר? + למחוק שעון עצר? @@ -1285,12 +1282,12 @@ Set Delay - הגדרת שיהוי + הגדר שיהוי Set Time - הגדרת זמן + הגדר זמן @@ -1315,7 +1312,7 @@ Type: - סוג: + טיפוס: @@ -1395,631 +1392,631 @@ Window - + Loading themes מטעין כעת מוטיבים - + Loading sounds מטעין כעת צלילים - - + + Untitled ללא כותרת - + Open File פתיחת קובץ - + About FocusWriter אדות ‫FocusWriter - + FocusWriter ‫FocusWriter - + A simple fullscreen word processor עורך תמלילים פשוט במסך מלא - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license בשימוש תחת הרשיון <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 תווים: %L1 / %L2 - - + + Pages: %L1 עמודים: %L1 - - + + Paragraphs: %L1 פסקאות: %L1 - - + + Words: %L1 מילים: %L1 - - + + %1% of daily goal %1% מן היעד היומי - + Opening %1 ‫‭%1‬ נפתח כעת - + Question שאלה - + Save changes? - שמירת שינויים? + לשמור שינויים? - - + + (Untitled %1) (ללא כותרת %1) - + Switch to Next Document מעבר אל מסמך בא - + Switch to Previous Document מעבר אל מסמך קודם - + Switch to First Document מעבר אל מסמך ראשון - + Switch to Last Document מעבר אל מסמך אחרון - + Switch to Document %1 מעבר אל מסמך %1 - + Loading settings טוען כעת הגדרות - + Emergency cache is not writable. - מטמון חירום אינו בר־כתיבה + מטמון חירום אינו בר כתיבה. - - + + Warning אזהרה - + FocusWriter was not shut down cleanly. ‫FocusWriter לא סוים באופן מוסדר. - + Restore from the emergency cache? - שחזור ממטמון חירום? + לשחזר מן מטמון חירום? - + Some files could not be opened. קבצים מסוימים לא יכלו להיפתח. - + Some files were opened Read-Only. קבצים מסוימים נפתחו לקריאה-בלבד. - + Text Files (%1);;All Files (*) קבצי תמליל (%1);;כל הקבצים (*) - + '%1' is newer than the cached copy. '%1' הינו חדש יותר מן העותק המוטמן. - + Overwrite newer file? - החלפת קובץ חדש? + להחליף קובץ חדש? - + Unable to load typewriter sounds. - לא ניתן לטעון קולות מכונת־כתיבה. + לא ניתן לטעון צלילי מכונת כתיבה. - + Please make sure that SDL_mixer is installed. נא לוודא שהרכיב SDL_mixer הינו מותקן. - + %1 (Read-Only) %1 (לקריאה-בלבד) - + &File &קובץ - + &New &חדש - + &Open... &פתיחה... - + Reloa&d - &טעינה מחדש + &טען מחדש - + &Save - &שמירה + &שמור - + Save &As... שמירה &בשם... - + &Rename... - שי&נוי שם... + ש&נה שם... - + Save A&ll שמור ה&כל - + Manage Sessions ניהול סשנים - + New Session סשן חדש - + &Print... ה&דפסה... - + &Close &סגירה - + &Quit י&ציאה - + Ctrl+Q Ctrl+Q - + &Edit ע&ריכה - + &Undo - &ביטול + בט&ל - + &Redo - &חזרה + ב&צע שוב - + Cu&t &גזור - + &Copy הע&תק - + &Paste ה&דבק - + Paste &Unformatted הדבק בלי &עיצוב - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All בחר ה&כל - + Select &Scene בחר &מקטע - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat עי&צוב - + &Bold &מודגש - + &Italic &נטוי - + &Underline &קו תחתון - + Stri&kethrough קו &חוצה - + Ctrl+K Ctrl+K - + Sup&erscript כיתוב &עילי - + Ctrl+^ Ctrl+^ - + &Subscript כיתוב &תחתי - + Ctrl+_ Ctrl+_ - + Align &Left יישור &שמאל - + Ctrl+{ Ctrl+{ - + Align &Center יישור מ&רכז - + Ctrl+| Ctrl+| - + Align &Right יישור &ימין - + Ctrl+} Ctrl+} - + Align &Justify יישור מ&אוזן - + Ctrl+J Ctrl+J - + &Decrease Indent &צמצום שוליים - + Ctrl+< Ctrl+< - + I&ncrease Indent &גידול שוליים - + Ctrl+> Ctrl+> - + Le&ft to Right Block - בלוק שמ&אל לימין + בלוק שמ&אל אל ימין - + Ri&ght to Left Block - בלוק י&מין לשמאל + בלוק י&מין אל שמאל - + &Tools &כלים - + &Find... - &מציאה... + &מצא... - + Find &Next - מציאת ה&בא + מצא את ה&בא - + Find Pre&vious - מציאת ה&קודם + מצא את ה&קודם - + &Replace... - ה&חלפה... + ה&חלף... - + Ctrl+R Ctrl+R - + Smart &Quotes מר&כאות חכמות - + Update &Document - עדכון &מסמך + עדכן &מסמך - + Update &Selection - עדכון &נבחר + עדכן &בחירה - + &Spelling... &איות... - + F7 F7 - + &Timers... &שעוני עצר... - + S&ymbols... &סמלים... - + &Settings &הגדרות - + Show &Toolbar - הצגת &סרגל כלים + הצג &סרגל כלים - + Show &Menu Icons - הצגת &צלמיות תפריט + הצג &צלמיות תפריט - + F&ocused Text תמליל ממור&כז - + &Fullscreen &מסך מלא - + F11 F11 - + Esc Esc - + M&inimize - מ&זעור + מ&זער - + Ctrl+M Ctrl+M - + &Themes... מו&טיבים... - + &Preferences... &העדפות... - + Focus Off כיבוי מרכוז - + Focus One Line מרכוז שורה אחת - + Focus Three Lines מרכוז שלוש שורות - + &Paragraph &פסקה - + Focus Paragraph מרכוז פסקה - + &Help &עזרה - + Application &Language... &שפת יישום... - + Some files were unsupported and could not be opened. קבצים מסוימים לא נתמכו ולא ניתן היה לפתוחם. - + &Off &כבוי - + One &Line שורה &אחת - + &Three Lines &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index abace03c..3756bf42 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -270,12 +270,12 @@ ImageButton - + Open Image Kép megnyitása - + Images(%1) Képek(%1) @@ -710,13 +710,13 @@ Session - + - - - + + + Default Alapértelmezett @@ -784,38 +784,37 @@ Töröljük a kijelölt munkamenetet? - - + Session name: Munkamenet neve: - + Sorry Elnézést - + The requested session name is already in use. A megadott munkamenet-név már használatban van. - + &New... &Új... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Kezelés... - + Ctrl+Shift+M Ctri+Shift+M @@ -833,8 +832,8 @@ - - + + Shortcut: @@ -910,7 +909,7 @@ Kérlek, várj - + Spell check complete. A helyesírás-ellenőrzés befejeződött. @@ -928,22 +927,22 @@ - + All symbols - + Details - + Name: Név: - + Insert @@ -1222,24 +1221,22 @@ Témák (*.fwtz *.theme) - + Themes (*.fwtz) Témák (*.fwtz) - - + Sorry Elnézést - - + A theme already exists with that name. Please enter a new name: Ilyen nevű téma már létezik. Kérlek, adj meg egy új nevet: - + Export Theme Téma exportálása @@ -1394,631 +1391,631 @@ Window - + Loading themes Témák betöltése - + Loading sounds Hangok betöltése - - + + Untitled Névtelen - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Karakter: %L1 / %L2 - - + + Pages: %L1 Oldal: %L1 - - + + Paragraphs: %L1 Bekezdés: %L1 - - + + Words: %L1 Szó: %L1 - - + + %1% of daily goal A napi cél %1%-a - + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - - + + (Untitled %1) (Névtelen %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings Beállítások betöltése - + Emergency cache is not writable. A vész-gyorsítótár nem írható. - - + + Warning Figyelmeztetés - + FocusWriter was not shut down cleanly. A FocusWriter hibásan lett leállítva. - + Restore from the emergency cache? Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + Text Files (%1);;All Files (*) Szövegfájlok (%1);;Minden fájl (*) - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + S&ymbols... - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 4a6c35bd..c24a3769 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Apri immagine - + Images(%1) Immagini (%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Default @@ -785,38 +785,37 @@ Eliminare sessione selezionata? - - + Session name: Nome sessione: - + Sorry Spiacente - + The requested session name is already in use. Il nome di sessione richiesto è già in uso. - + &New... &New... - + Ctrl+Shift+N Ctrl + Maiusc + N - + &Manage... &Gestione... - + Ctrl+Shift+M Ctrl + Maiusc + M @@ -834,8 +833,8 @@ Ripristina default - - + + Shortcut: Scorciatoia: @@ -911,7 +910,7 @@ Attendere prego - + Spell check complete. Controllo ortografico completato. @@ -929,22 +928,22 @@ Simboli usati recentemente - + All symbols Tutti i simboli - + Details Dettagli - + Name: Nome: - + Insert Inserisci @@ -1223,24 +1222,22 @@ I temi (*.fwtz *.theme) - + Themes (*.fwtz) I temi (*.fwtz) - - + Sorry Spiacente - - + A theme already exists with that name. Please enter a new name: Esiste già un tema con quel nome. Si prega di inserire un nuovo nome: - + Export Theme Esporta Tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Caricamento temi - + Loading sounds Caricamento suoni - - + + Untitled Senza nome - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un semplice editor di testo a pieno schermo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Rilasciato sotto licenza <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilizza icone del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sotto licenza <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - - + + Pages: %L1 Pagine: %L1 - - + + Paragraphs: %L1 Paragrafi: %L1 - - + + Words: %L1 Parole: %L1 - - + + %1% of daily goal %1% dell' obiettivo giornaliero - + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - - + + (Untitled %1) (Senza nome %1) - + Switch to Next Document Passa al documento successivo - + Switch to Previous Document Passa al documento precedente - + Switch to First Document Passa al primo documento - + Switch to Last Document Passa all'ultimo documento - + Switch to Document %1 Passa al documento %1 - + Loading settings Caricamento impostazioni - + Emergency cache is not writable. La cache di emergenza non è scrivibile - - + + Warning Attenzione - + FocusWriter was not shut down cleanly. FocusWriter non è stato chiuso correttamente. - + Restore from the emergency cache? Ripristinare dalla cache di emergenza? - + Some files could not be opened. Non è stato possibile aprire alcuni file. - + Some files were opened Read-Only. Alcuni file sono stati aperti in sola lettura. - + Text Files (%1);;All Files (*) File di testo (%1);;Tutti i file (*) - + '%1' is newer than the cached copy. '%1' è più recente della copia in cache. - + Overwrite newer file? Sovrascrivere il file più recente? - + Unable to load typewriter sounds. Impossibile caricare i suoni della macchina per scrivere. - + Please make sure that SDL_mixer is installed. Accertati che SDL_mixer sia installato. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d Ricarica - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted Incolla &non formattato - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene Seleziona &scena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &sostituisci... - + Ctrl+R Ctrl + R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &ortografia... - + F7 F7 - + &Timers... &Timer... - + S&ymbols... S&imboli - + &Settings &impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text Testo a fuoco - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl + M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off Messa a fuoco disattivata - + Focus One Line Metti a fuoco una linea - + Focus Three Lines Metti a fuoco tre linee - + &Paragraph &Paragrafo - + Focus Paragraph Paragrafo a fuoco - + &Help &aiuto - + Application &Language... Lingua &applicazione... - + Some files were unsupported and could not be opened. Qualche file non è supportato e non è stato aperto. - + &Off Non attivo - + One &Line Una &Linea - + &Three Lines &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 40358d92..ecb50bae 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -270,12 +270,12 @@ ImageButton - + Open Image 画像の選択 - + Images(%1) 画像 (%1) @@ -710,13 +710,13 @@ Session - + - - - + + + Default デフォルト @@ -784,38 +784,37 @@ 選択中のセッションを削除しますか? - - + Session name: セッション名: - + Sorry エラー - + The requested session name is already in use. 指定したセッション名は既にあります。 - + &New... 新規 (&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理 (&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -833,8 +832,8 @@ デフォルトに戻す - - + + Shortcut: ショートカット: @@ -910,7 +909,7 @@ お待ちください - + Spell check complete. スペルチェックが終わりました。 @@ -928,22 +927,22 @@ 最近使ったシンボル - + All symbols すべてのシンボル - + Details 詳細 - + Name: 名前: - + Insert 挿入 @@ -1222,24 +1221,22 @@ テーマ (*.fwtz *.theme) - + Themes (*.fwtz) テーマ (*.fwtz) - - + Sorry エラー - - + A theme already exists with that name. Please enter a new name: その名前のテーマは既にあります。他の名前を指定してください。 - + Export Theme テーマのエクスポート @@ -1394,631 +1391,631 @@ Window - + Loading themes テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - - + + Untitled 無題 - + Open File 開く - + About FocusWriter FocusWriter について - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 文字数: %L1 / %L2 - - + + Pages: %L1 ページ数: %L1 - - + + Paragraphs: %L1 段落数: %L1 - - + + Words: %L1 単語数: %L1 - - + + %1% of daily goal 一日の目標の %1% - + Opening %1 %1 を開いています - + Question 確認 - + Save changes? 変更を保存しますか? - - + + (Untitled %1) (無題 %1) - + Switch to Next Document 次のドキュメントへ切り替える - + Switch to Previous Document 前のドキュメントへ切り替える - + Switch to First Document 最初のドキュメントへ切り替える - + Switch to Last Document 最後のドキュメントへ切り替える - + Switch to Document %1 %1 へ切り替える - + Loading settings 設定を読み込んでいます - + Emergency cache is not writable. 緊急用のキャッシュに書き込むことができませんでした。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter は正常に終了できませんでした。 - + Restore from the emergency cache? 緊急用のキャッシュから復活させますか? - + Some files could not be opened. いくつかのファイルが開けませんでした。 - + Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - + Text Files (%1);;All Files (*) テキスト文書 (%1);;すべてのファイル (*) - + '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - + Overwrite newer file? 新しいファイルを上書きしますか? - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + %1 (Read-Only) %1 (読み込み専用) - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 2c2f5a5c..5f0c7f67 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Plaatje openen - + Images(%1) Plaatjes(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Standaard @@ -785,38 +785,37 @@ Sessie verwijderen ? - - + Session name: Sessie naam: - + Sorry Sorry - + The requested session name is already in use. De sessie naam is al in gebruik. - + &New... &Nieuw... - + Ctrl+Shift+N Crtl+Shift+N - + &Manage... &Beheren... - + Ctrl+Shift+M Ctrl+Shift+B @@ -834,8 +833,8 @@ Terugzetten naar standaard instellingen - - + + Shortcut: Snelkoppeling @@ -911,7 +910,7 @@ Even geduld - + Spell check complete. Spellingcontrole klaar. @@ -929,22 +928,22 @@ Recent gebruikte symbolen - + All symbols Alle symbolen - + Details Details - + Name: Naam: - + Insert Invoegen @@ -1223,24 +1222,22 @@ Thema's (*.fwtz *.theme) - + Themes (*.fwtz) Thema's (*.fwtz) - - + Sorry Sorry - - + A theme already exists with that name. Please enter a new name: Deze naam wordt al voor een thema gebruikt. Kies een andere naam - + Export Theme Thema exporteren @@ -1395,631 +1392,631 @@ Window - + Loading themes Thema wordt geladen - + Loading sounds Geluiden worden geladen - - + + Untitled Unbenannt - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Een simpele schermvullende tekstverwerker - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - + Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - + Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - - + + Characters: %L1 / %L2 Tekens: %L1 / %L2 - - + + Pages: %L1 Pagina's: %L1 - - + + Paragraphs: %L1 Paragrafen: %L1 - - + + Words: %L1 Woorden: %L1 - - + + %1% of daily goal %1% van het dagdoel - + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - - + + (Untitled %1) (naamloos %1) - + Switch to Next Document Schakel naar volgend document - + Switch to Previous Document Schakel naar vorig document - + Switch to First Document Schakel naar eerste document - + Switch to Last Document Schakel naar laatste document - + Switch to Document %1 Schakel naar document %1 - + Loading settings Instellingen inladen - + Emergency cache is not writable. De noodopslag is niet beschrijfbaar. - - + + Warning Waarschuwing - + FocusWriter was not shut down cleanly. FocusWriter is niet netjes afgesloten. - + Restore from the emergency cache? Veiligheidskopie herstellen? - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + Text Files (%1);;All Files (*) Tekst-bestanden (%1);;Alle Bestanden (*) - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... - + Some files were unsupported and could not be opened. Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 96f1a399..0c6c2860 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Otwórz obrazek - + Images(%1) Obrazki(%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Domyślna @@ -786,38 +786,37 @@ Usunąć wybraną sesję? - - + Session name: Nazwa sesji: - + Sorry Przepraszam - + The requested session name is already in use. Podana nazwa sesji już jest używana. - + &New... &Nowa... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Za&rządzaj... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ Przywróć domyślny - - + + Shortcut: Skrót: @@ -912,7 +911,7 @@ Proszę czekać - + Spell check complete. Zakończono sprawdzanie pisowni. @@ -930,22 +929,22 @@ Ostatnio używane symbole - + All symbols Wszystkie symbole - + Details Szczegóły - + Name: Nazwa: - + Insert Wstaw @@ -1224,24 +1223,22 @@ Motywy (*.fwtz *.theme) - + Themes (*.fwtz) Motywy (*.fwtz) - - + Sorry Przepraszam - - + A theme already exists with that name. Please enter a new name: Motyw z podaną nazwą już istnieje. Proszę wybrać inną nazwę: - + Export Theme Eksportuj motyw @@ -1396,631 +1393,631 @@ Window - + Loading themes Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - - + + Untitled Bez tytułu - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaki: %L1 / %L2 - - + + Pages: %L1 Strony: %L1 - - + + Paragraphs: %L1 Akapity: %L1 - - + + Words: %L1 Słowa: %L1 - - + + %1% of daily goal %1% dziennego celu - + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - - + + (Untitled %1) (Bez tytułu %1) - + Switch to Next Document Przełącz do następnego dokumentu - + Switch to Previous Document Przełącz do poprzedniego dokumentu - + Switch to First Document Przełącz do pierwszego dokumentu - + Switch to Last Document Przełącz do ostatniego dokumentu - + Switch to Document %1 Przełącz do dokumentu %1 - + Loading settings Wczytywanie ustawień - + Emergency cache is not writable. Bufor awaryjny nie jest zapisywalny. - - + + Warning Ostrzeżenie - + FocusWriter was not shut down cleanly. Program FocusWriter nie został zamknięty prawidłowo. - + Restore from the emergency cache? Przywrócić z bufora awaryjnego? - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + Text Files (%1);;All Files (*) Pliki tekstowe (%1);;Wszystkie pliki (*) - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... - + Some files were unsupported and could not be opened. Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index c4931efa..5a442418 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Seleccionar imagem - + Images(%1) Imagens(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Sessão predefinida @@ -785,38 +785,37 @@ Apagar a sessão selecionada ? - - + Session name: Nome da sessão : - + Sorry Desculpe - + The requested session name is already in use. O nome entrado já está a ser utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerir... - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ Repor os valores padrão - - + + Shortcut: Atalho: @@ -911,7 +910,7 @@ Espere por favor - + Spell check complete. Verificação da ortografia concluída. @@ -929,22 +928,22 @@ Símbolos recentemente usados - + All symbols Todos os símbolos - + Details Pormenores - + Name: Nome: - + Insert Inserir @@ -1223,24 +1222,22 @@ Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - - + Sorry Desculpe - - + A theme already exists with that name. Please enter a new name: Um outro tema com o mesmo nome já existe. Entre por favor um outro nome : - + Export Theme Exportar o tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - - + + Untitled Sem título - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de texto simples em ecrã completo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palávras: %L1 - - + + %1% of daily goal %1% do objectivo do dia - + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - - + + (Untitled %1) (Sem título %1) - + Switch to Next Document Passar ao documento seguinte - + Switch to Previous Document Passar ao documento anterior - + Switch to First Document Passar ao primeiro documento - + Switch to Last Document Passar ao último documento - + Switch to Document %1 Passar ao dicumento %1 - + Loading settings A carregar definições - + Emergency cache is not writable. Não foi possível escrever o cache de emergência. - - + + Warning Atenção - + FocusWriter was not shut down cleanly. FocusWriter não fechou correctamente. - + Restore from the emergency cache? Recuperar dados do cache de emergência? - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + Text Files (%1);;All Files (*) Ficheiros de texto (%1);;Todos os ficheiros (*) - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... - + Some files were unsupported and could not be opened. Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 64c10853..864e813c 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Abrir imagem - + Images(%1) Imagens(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Padrão @@ -785,38 +785,37 @@ Excluir sessão selecionada? - - + Session name: Nome da sessão: - + Sorry Desculpe - + The requested session name is already in use. Este nome de sessão já está sendo utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerenciar... - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ Restaurar padrão - - + + Shortcut: Atalho: @@ -911,7 +910,7 @@ Por favor, aguarde - + Spell check complete. Verificação ortográfica completa. @@ -929,22 +928,22 @@ Símbolos usados recentemente - + All symbols Todos os símbolos - + Details Detalhes - + Name: Nome: - + Insert Inserir @@ -1223,24 +1222,22 @@ Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - - + Sorry Desculpe - - + A theme already exists with that name. Please enter a new name: Já existe um tema com este nome. Por favor, digite um novo nome: - + Export Theme Exportar tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Carregando temas - + Loading sounds Carregando sons - - + + Untitled Sem título - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palavras: %L1 - - + + %1% of daily goal %1% do objetivo diário - + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - - + + (Untitled %1) (Sem título %1) - + Switch to Next Document Ir para próximo documento - + Switch to Previous Document Ir para documento anterior - + Switch to First Document Ir para o primeiro documento - + Switch to Last Document Ir para o último documento - + Switch to Document %1 Ir para o documento %1 - + Loading settings Carregando configurações - + Emergency cache is not writable. Não é possível escrever no cache de emergência. - - + + Warning Aviso - + FocusWriter was not shut down cleanly. O FocusWriter não foi fechado corretamente. - + Restore from the emergency cache? Restaurar a partir do cache de emergência? - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + Text Files (%1);;All Files (*) Arquivos de texto (%1);;Todos os arquivos (*) - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... - + Some files were unsupported and could not be opened. Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index f2eb6939..40c929b3 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Deschide imagine - + Images(%1) Imagini (%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Iniţial @@ -786,38 +786,37 @@ Şterge sesiunea selectată? - - + Session name: Nume sesiune: - + Sorry Scuze - + The requested session name is already in use. Numele solicitat al sesiunii este deja în uz. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Gestionare... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ Resetează la valorile implicte - - + + Shortcut: Scurtătură: @@ -912,7 +911,7 @@ Vă rugăm aşteptaţi - + Spell check complete. Verificare ortografică completă. @@ -930,22 +929,22 @@ Simbolurile folosite recent - + All symbols Toate simbolurile - + Details Detalii - + Name: Nume: - + Insert Inserează @@ -1224,24 +1223,22 @@ Teme (*.fwtz *.theme) - + Themes (*.fwtz) Teme (*.fwtz) - - + Sorry Scuze - - + A theme already exists with that name. Please enter a new name: Există deja o temă cu acest nume. Vă rugăm tastaţi un alt nume: - + Export Theme Exportare temă @@ -1396,631 +1393,631 @@ Window - + Loading themes Încărcare teme - + Loading sounds Încărcare sunete - - + + Untitled FărăTitlu - + Open File Deschide fişier - + About FocusWriter Despre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesor simplu de text pe tot ecranul - + Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Foloseşte iconuri din tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Folosit sub licenţă <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caractere: %L1 / %L2 - - + + Pages: %L1 Pagini: %L1 - - + + Paragraphs: %L1 Paragrafe: %L1 - - + + Words: %L1 Cuvinte: %L1 - - + + %1% of daily goal %1% din obiectiv zilnic - + Opening %1 Deschidere %1 - + Question Întrebare - + Save changes? Salvaţi modificările? - - + + (Untitled %1) (Fără titlu %1) - + Switch to Next Document Comutare la următorul document - + Switch to Previous Document Comutare la documentul precedent - + Switch to First Document Comutare la primul document - + Switch to Last Document Comutare la ultimul document - + Switch to Document %1 Comutare la document %1 - + Loading settings Încărcare setări - + Emergency cache is not writable. Cache-ul de urgenţă nu poate fi scris. - - + + Warning Avertisment - + FocusWriter was not shut down cleanly. FocusWriter nu a fost oprit corect. - + Restore from the emergency cache? Restaurare din memoria cache de urgenţă? - + Some files could not be opened. Unele fişiere nu au putut fi deschise. - + Some files were opened Read-Only. Unele fişiere au fost deschise în mod doar-citire. - + Text Files (%1);;All Files (*) Fişiere text (%1);;Toate fişierele (*) - + '%1' is newer than the cached copy. '%1' este mai nou decît copia din cache. - + Overwrite newer file? Suprascrie noul fişier? - + Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - + Please make sure that SDL_mixer is installed. Vă rugăm să vă asiguraţi că SDL_mixer este instalat. - + %1 (Read-Only) %1 (Doar-citire) - + &File &Fişier - + &New &Nou - + &Open... &Deschide... - + Reloa&d Reîncarcă - + &Save &Salvare - + Save &As... Salvare c&a... - + &Rename... &Redenumire... - + Save A&ll Salvează tot - + Manage Sessions Gestionare sesiuni - + New Session Sesiune nouă - + &Print... Imprimare... - + &Close Închide - + &Quit &Ieşire - + Ctrl+Q Ctrl+Q - + &Edit &Editare - + &Undo Anulează - + &Redo Reface - + Cu&t &Taie - + &Copy &Copiază - + &Paste &Lipeşte - + Paste &Unformatted Lipire neformatat - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selectează &tot - + Select &Scene Selectare &scenă - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatare - + &Bold Îngroşat - + &Italic &Italic - + &Underline S&ubliniat - + Stri&kethrough &Tăiat - + Ctrl+K Ctrl+K - + Sup&erscript Exponent - + Ctrl+^ Ctrl+^ - + &Subscript Indice - + Ctrl+_ Ctrl+_ - + Align &Left Aliniere la &stînga - + Ctrl+{ Ctrl+{ - + Align &Center Aliniere la &centru - + Ctrl+| Ctrl+| - + Align &Right Aliniere la &dreapta - + Ctrl+} Ctrl+} - + Align &Justify Aliniere stînga-dreapta - + Ctrl+J Ctrl+J - + &Decrease Indent Mărire alineat - + Ctrl+< Ctrl+< - + I&ncrease Indent Micşorare alineat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloc stînga-dreapta - + Ri&ght to Left Block Bloc dreapta-stînga - + &Tools &Unelte - + &Find... &Caută... - + Find &Next Caută &următorul - + Find Pre&vious Caută &precedent - + &Replace... Înlocuire... - + Ctrl+R Ctrl+R - + Smart &Quotes Ghilimele inteligente - + Update &Document Actualizare &document - + Update &Selection Actualizare &selecţie - + &Spelling... &Ortografie... - + F7 F7 - + &Timers... Cronometre... - + S&ymbols... S&imboluri... - + &Settings &Setări - + Show &Toolbar Arată bară de unelte - + Show &Menu Icons Arată iconuri &meniu - + F&ocused Text Text f&ocalizat - + &Fullscreen &Tot ecranul - + F11 F11 - + Esc Esc - + M&inimize M&inimizare - + Ctrl+M Ctrl+M - + &Themes... &Teme... - + &Preferences... &Preferinţe... - + Focus Off Focaliuzare oprită - + Focus One Line Focalizare o linie - + Focus Three Lines Focalizare trei linii - + &Paragraph &Paragraf - + Focus Paragraph Focalizare paragraf - + &Help &Ajutor - + Application &Language... Limbă aplicaţie... - + Some files were unsupported and could not be opened. Unele fişiere au fost nesuportate şi nu au putut fi deschide. - + &Off &Oprit - + One &Line O &linie - + &Three Lines &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 6bf6662e..119a40b1 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Открыть изображение - + Images(%1) Изображения(%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default По умолчанию @@ -786,38 +786,37 @@ Удалить выбранный сеанс? - - + Session name: Название сеанса: - + Sorry Простите - + The requested session name is already in use. Заданное имя сеанса уже используется. - + &New... &Новый... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Управление... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ Сбросить к значениям по умолчанию - - + + Shortcut: Комбинация клавиш -?-: @@ -912,7 +911,7 @@ Пожалуйста, подождите - + Spell check complete. Проверка орфографии завершена. @@ -930,22 +929,22 @@ Недавно использованные символы - + All symbols Все символы - + Details Подробности - + Name: Название: - + Insert Вставить @@ -1224,24 +1223,22 @@ Темы (*.fwtz *.theme) - + Themes (*.fwtz) Темы (*.fwtz) - - + Sorry Простите - - + A theme already exists with that name. Please enter a new name: Тема с таким названием уже существует. Выберите другое название: - + Export Theme Экспортировать тему @@ -1396,631 +1393,631 @@ Window - + Loading themes Загружаются темы - + Loading sounds Загружаются звуки - - + + Untitled Безымянный - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Простой полноэкранный текстовый редактор - + Copyright &copy; 2008-%1 Graeme Gott &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Символов: %L1 / %L2 - - + + Pages: %L1 Страниц: %L1 - - + + Paragraphs: %L1 Абзацев: %L1 - - + + Words: %L1 Слов: %L1 - - + + %1% of daily goal %1% от дневной задачи - + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - - + + (Untitled %1) (Безымянный %1) - + Switch to Next Document Перейти к следующему документу - + Switch to Previous Document Перейти к предыдущему документу - + Switch to First Document Перейти к первому документу - + Switch to Last Document Перейти к последнему документу - + Switch to Document %1 Перейти к документу %1 - + Loading settings Загружаются настройки - + Emergency cache is not writable. Резервная память недоступна для записи. - - + + Warning Внимание - + FocusWriter was not shut down cleanly. Работа приложения не была завершена правильно. - + Restore from the emergency cache? Восстановить открытые файлы из резервной памяти? - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + Text Files (%1);;All Files (*) Текстовые файлы (%1);;Все файлы (*) - + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. Пожалуйста, проверьте, установлен ли пакет SDL_mixer. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&ё - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + S&ymbols... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help Спр&авка - + Application &Language... &Язык приложения... - + Some files were unsupported and could not be opened. Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off - + One &Line - + &Three Lines - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 60f20685..fc71a6d5 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Otvoriť obrázok - + Images(%1) Obrázky(%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Prednastavený @@ -786,38 +786,37 @@ Vymazať vybranú reláciu? - - + Session name: Názov relácie: - + Sorry Prepáčte - + The requested session name is already in use. Požadovaný názov relácie sa už používa. - + &New... &Nová... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovať... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ Obnoviť prednastavené - - + + Shortcut: Skratky: @@ -912,7 +911,7 @@ Čakajte prosím - + Spell check complete. Kontrola pravopisu ukončená. @@ -930,22 +929,22 @@ Posledné použité symboly - + All symbols Všetky symboly - + Details Podrobnosti - + Name: Názov: - + Insert Vložiť @@ -1224,24 +1223,22 @@ Témy (*.fwtz *.theme) - + Themes (*.fwtz) Témy (*.fwtz) - - + Sorry Prepáčte - - + A theme already exists with that name. Please enter a new name: Téma s týmto názvom už existuje. Prosím, zadajte nový názov: - + Export Theme Exportovať tému @@ -1396,631 +1393,631 @@ Window - + Loading themes Načítavanie tém - + Loading sounds Načítavanie zvukov - - + + Untitled Bez názvu - + Open File Otvoriť súbor - + About FocusWriter O programe FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - + Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slová: %L1 - - + + %1% of daily goal %1% denného cieľa - + Opening %1 Otváranie %1 - + Question Otázka - + Save changes? Uložiť zmeny? - - + + (Untitled %1) (Bez názvu %1) - + Switch to Next Document Prepnúť na ďalší dokument - + Switch to Previous Document Prepnúť na predchádzajúci dokument - + Switch to First Document Prepnúť na prvý dokument - + Switch to Last Document Prepnúť na posledný dokument - + Switch to Document %1 Prepnúť na dokument %1 - + Loading settings Načítavanie nastavení - + Emergency cache is not writable. Nie je možné zapisovať do pohotovostnej vyrovnávacej pamäti. - - + + Warning Upozornenie - + FocusWriter was not shut down cleanly. Program FocusWriter nebol riadne ukončený. - + Restore from the emergency cache? Obnoviť z vyrovnávacej pamäti. - + Some files could not be opened. Niektoré súbory nemohli byť otvorené. - + Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - + Text Files (%1);;All Files (*) Textové súbory (%1);;Všetky súbory (*) - + '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - + Overwrite newer file? Prepísať novší súbor? - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + %1 (Read-Only) %1 (Iba na čítanie) - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... - + Some files were unsupported and could not be opened. Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 107f4a48..aab61230 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -271,12 +271,12 @@ ImageButton - + Open Image Öppna bild - + Images(%1) Bilder(%1) @@ -711,13 +711,13 @@ Session - + - - - + + + Default Standard @@ -785,38 +785,37 @@ Ta bort markerad session? - - + Session name: Sessionsnamn: - + Sorry Tyvärr - + The requested session name is already in use. Det begärda sessionsnamnet används redan. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hantera... - + Ctrl+Shift+M Ctrl+Shift+M @@ -834,8 +833,8 @@ Återställ till förval - - + + Shortcut: Genväg: @@ -911,7 +910,7 @@ Vänta - + Spell check complete. Stavningskontrollen är färdig. @@ -929,22 +928,22 @@ Nyligen använda symboler - + All symbols Alla symboler - + Details Detaljer - + Name: Namn: - + Insert Infoga @@ -1223,24 +1222,22 @@ Teman (*.fwtz *.theme) - + Themes (*.fwtz) Teman (*.fwtz) - - + Sorry Tyvärr - - + A theme already exists with that name. Please enter a new name: Ett tema finns redan med det namnet. Ange ett nytt namn: - + Export Theme Exportera tema @@ -1395,631 +1392,631 @@ Window - + Loading themes Läser in teman - + Loading sounds Läser in ljud - - + + Untitled Namnlös - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor En enkel ordbehandlare med helskärmsläge - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Släppt under licensen <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Använder ikoner från ikontemat <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Använda under licensen <a href=%1>GPL 3</a> - - + + Characters: %L1 / %L2 Tecken: %L1 / %L2 - - + + Pages: %L1 Sidor: %L1 - - + + Paragraphs: %L1 Stycken: %L1 - - + + Words: %L1 Ord: %L1 - - + + %1% of daily goal %1 % av dagligt mål - + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - - + + (Untitled %1) (Namnlös %1) - + Switch to Next Document Växla till nästa dokument - + Switch to Previous Document Växla till föregående dokument - + Switch to First Document Växla till första dokumentet - + Switch to Last Document Växla till sista dokumentet - + Switch to Document %1 Växla till dokument %1 - + Loading settings Läser in inställningar - + Emergency cache is not writable. Nödcachen är inte skrivbar. - - + + Warning Varning - + FocusWriter was not shut down cleanly. FocusWriter stängdes inte av korrekt. - + Restore from the emergency cache? Återställ från nödcachen? - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + Text Files (%1);;All Files (*) Textfiler (%1);;Alla filer (*) - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. Se till att SDL_mixer är installerat. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d Läs in &igen - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted Klistra in &oformaterat - + Ctrl+Shift+V Ctrl+Skift+V - + Select &All Markera &allt - + Select &Scene Välj &scen - + Ctrl+Shift+A Ctrl+Skift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indrag - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&drag - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + S&ymbols... S&ymboler... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text F&okuserad text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off Fokus av - + Focus One Line Fokusera en rad - + Focus Three Lines Fokusera tre rader - + &Paragraph &Stycke - + Focus Paragraph Fokusera stycke - + &Help &Hjälp - + Application &Language... Programs&pråk... - + Some files were unsupported and could not be opened. Några filer stöds inte och kunde inte öppnas. - + &Off &Av - + One &Line En &rad - + &Three Lines &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 25d1d0c0..6c206118 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -270,12 +270,12 @@ ImageButton - + Open Image Resim aç - + Images(%1) @@ -710,13 +710,13 @@ Session - + - - - + + + Default Standart @@ -784,38 +784,37 @@ Seçili oturum silinsin mi? - - + Session name: Oturum adı: - + Sorry Pardon - + The requested session name is already in use. İstenen oturum adı zaten kullanımda. - + &New... Yeni... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Yönet... - + Ctrl+Shift+M Ctrl+Shift+M @@ -833,8 +832,8 @@ Varsayılana sıfırla - - + + Shortcut: Kısayol: @@ -910,7 +909,7 @@ Lütfen bekleyin - + Spell check complete. Yazım denetimi tamamlandı. @@ -928,22 +927,22 @@ Son kullanılan simgeler - + All symbols Tüm simgeler - + Details Ayrıntılar - + Name: İsim: - + Insert Ekle @@ -1222,24 +1221,22 @@ Temalar (*.fwtz *.theme) - + Themes (*.fwtz) Temalar (*.fwtz) - - + Sorry Pardon - - + A theme already exists with that name. Please enter a new name: Bu adla zaten bir tema var. Yeni bir ad girin: - + Export Theme Temayı dışa aktar @@ -1394,631 +1391,631 @@ Window - + Loading themes Temalar yükleniyor - + Loading sounds Sesler yükleniyor - - + + Untitled Başlıksız - + Open File Dosyayı aç - + About FocusWriter FocusWriter Hakkında - + FocusWriter FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + %1% of daily goal - + Opening %1 - + Question Soru - + Save changes? Değişikleri kaydet? - - + + (Untitled %1) - + Switch to Next Document Sonraki belgeye geç - + Switch to Previous Document Önceki belgeye geç - + Switch to First Document İlk belgeye geç - + Switch to Last Document Son belgeye geç - + Switch to Document %1 - + Loading settings Ayarlar yükleniyor - + Emergency cache is not writable. Acil önbellek yazılabilir değil. - - + + Warning Uyarı - + FocusWriter was not shut down cleanly. FocusWriter düzgün bir şekilde kapatılmadı! - + Restore from the emergency cache? Acil önbellekten geri yüklensin mi? - + Some files could not be opened. Bazı dosyalar açılamadı. - + Some files were opened Read-Only. Bazı dosyalar salt okunur açıldı. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? Yeni dosya üzerine yazılsın mı? - + Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - + Please make sure that SDL_mixer is installed. SDL_mixer yüklü olduğundan emin olun. - + %1 (Read-Only) - + &File &Dosya - + &New &Yeni - + &Open... &Aç... - + Reloa&d &Güncelle - + &Save &Kaydet - + Save &As... &Farklı kaydet... - + &Rename... &Yeniden adlandır... - + Save A&ll &Hepsini kaydet - + Manage Sessions Oturumları yönet - + New Session Yeni oturum - + &Print... &Yazdır... - + &Close &Kapat - + &Quit &Çık - + Ctrl+Q Ctrl+Q - + &Edit &Düzenle - + &Undo &Geri - + &Redo &İleri - + Cu&t &Kes - + &Copy &Kopyala - + &Paste &Yapıştır - + Paste &Unformatted &Değiştirmeden yapıştır - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Hepsini seç - + Select &Scene &Sahneyi seç - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Biçimlendir - + &Bold &Kalın - + &Italic &İtalik - + &Underline &Altı çizili - + Stri&kethrough &Üstü çizili - + Ctrl+K Ctrl+K - + Sup&erscript &Üst simge - + Ctrl+^ Ctrl+^ - + &Subscript &Simge - + Ctrl+_ Ctrl+_ - + Align &Left &Sola hizala - + Ctrl+{ Ctrl+{ - + Align &Center &Ortaya hizala - + Ctrl+| Ctrl+| - + Align &Right &Sağa hizala - + Ctrl+} Ctrl+} - + Align &Justify &Yasla hizala - + Ctrl+J Ctrl+J - + &Decrease Indent &Girintiyi azalt - + Ctrl+< Ctrl+< - + I&ncrease Indent &Girintiyi arttır - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Soldan sağa blok - + Ri&ght to Left Block &Sağdan sola blok - + &Tools &Araçlar - + &Find... &Bul... - + Find &Next &Sonrakini bul - + Find Pre&vious &Öncekini bul - + &Replace... &Değiştir... - + Ctrl+R Ctrl+R - + Smart &Quotes &Akıllı alıntılar - + Update &Document &Dökümanı güncelle - + Update &Selection &Seçili olanı güncelle - + &Spelling... &yazım... - + F7 F7 - + &Timers... &Zamanlayıcı... - + S&ymbols... &Simgeler... - + &Settings &Ayarlar - + Show &Toolbar &Araç çubuğunu göster - + Show &Menu Icons &Menü simgelerini göster - + F&ocused Text Metne odaklan - + &Fullscreen &Tam ekran - + F11 F11 - + Esc Esc - + M&inimize &Küçült - + Ctrl+M Ctrl+M - + &Themes... &Temalar... - + &Preferences... &Tercihler... - + Focus Off Odaklanma kapalı - + Focus One Line Bir satıra odaklan - + Focus Three Lines Üç satıra odaklan - + &Paragraph &Paragraf - + Focus Paragraph Paragrafa odaklan - + &Help &Yardım - + Application &Language... &Uygulama dili ... - + Some files were unsupported and could not be opened. Bazı desteklenmeyen dosyalar açılamadı. - + &Off &Kapalı - + One &Line &Bir satır - + &Three Lines &Üç satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index f7022734..1f4923c0 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -272,12 +272,12 @@ ImageButton - + Open Image Відкрити зображення - + Images(%1) Зображень(%1) @@ -712,13 +712,13 @@ Session - + - - - + + + Default Типово @@ -786,38 +786,37 @@ Вилучити вибраний сеанс? - - + Session name: Назва сеансу: - + Sorry На жаль - + The requested session name is already in use. Така назва сеансу вже є. - + &New... &Новий ... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Керування... - + Ctrl+Shift+M Ctrl+Shift+M @@ -835,8 +834,8 @@ - - + + Shortcut: @@ -912,7 +911,7 @@ Будь ласка, зачекайте - + Spell check complete. Перевірку правопису завершено. @@ -930,22 +929,22 @@ - + All symbols - + Details - + Name: Назва: - + Insert @@ -1224,24 +1223,22 @@ Теми (*.fwtz *.theme) - + Themes (*.fwtz) Теми (*.fwtz) - - + Sorry На жаль - - + A theme already exists with that name. Please enter a new name: Тема з такою назвою вже є. Введіть нову назву: - + Export Theme Експортувати тему @@ -1396,631 +1393,631 @@ Window - + Loading themes Завантаження тем - + Loading sounds Завантаження звуків - - + + Untitled Без назви - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Символів: %L1 / %L2 - - + + Pages: %L1 Сторінок: %L1 - - + + Paragraphs: %L1 Абзаців: %L1 - - + + Words: %L1 Слів: %L1 - - + + %1% of daily goal %1% щоденного завдання - + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - - + + (Untitled %1) (Без назви %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + S&ymbols... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index b5708745..0ccfdb6b 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -270,12 +270,12 @@ ImageButton - + Open Image 打开图像 - + Images(%1) 图像(%1) @@ -710,13 +710,13 @@ Session - + - - - + + + Default 默认 @@ -784,38 +784,37 @@ 删除所选会话? - - + Session name: 会话名称: - + Sorry Sorry - + The requested session name is already in use. 请求的会话名称已在使用中。 - + &New... 新建(&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理(&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -833,8 +832,8 @@ 恢复默认 - - + + Shortcut: 快捷键: @@ -910,7 +909,7 @@ 请等待 - + Spell check complete. 拼写检查完成。 @@ -928,22 +927,22 @@ 最近使用过的符号 - + All symbols 全部符号 - + Details 详情 - + Name: 名称: - + Insert @@ -1222,24 +1221,22 @@ 主题 (*.fwtz *.theme) - + Themes (*.fwtz) 主题 (*.fwtz) - - + Sorry Sorry - - + A theme already exists with that name. Please enter a new name: 已经存在同名的一个主题。请输入新的名称: - + Export Theme 导出主题 @@ -1394,631 +1391,631 @@ Window - + Loading themes 载入主题 - + Loading sounds 载入声音 - - + + Untitled 无标题 - + Open File 打开文件 - + About FocusWriter 关于 FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 字符数:%L1 / %L2 - - + + Pages: %L1 页数:%L1 - - + + Paragraphs: %L1 段落数:%L1 - - + + Words: %L1 单词数:%L1 - - + + %1% of daily goal 每日目标的 %1% - + Opening %1 正在打开 %1 - + Question 询问 - + Save changes? 保存更改? - - + + (Untitled %1) (无标题 %1) - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings 栽入设置 - + Emergency cache is not writable. 紧急缓存是不可写的。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter 没有完全关闭。 - + Restore from the emergency cache? 从紧急缓存中还原? - + Some files could not be opened. 有些文件无法打开。 - + Some files were opened Read-Only. 一些文件以只读方式打开。 - + Text Files (%1);;All Files (*) 文本文件 (%1);;所有文件 (*) - + '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - + Overwrite newer file? 覆盖较新的文件? - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (只读) - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左至右块(&F) - + Ri&ght to Left Block 右至左块 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + &Timers... 定时器(&T)... - + S&ymbols... - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About 关于&About - + About &Qt 关于 &Qt From 76085986f1e04369c362d9b5e83dc736bac0e32a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 25 Feb 2013 17:33:20 -0500 Subject: [PATCH 109/630] FIXED: Did not play key press sound for non-Latin languages. --- ChangeLog | 1 + src/document.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index e45c6826..f00b417e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2013-02-25 Graeme Gott + * FIXED: Did not play key press sound for non-Latin languages. * FIXED: Crash when ignoring words in spelling dialog. 2012-12-21 Graeme Gott diff --git a/src/document.cpp b/src/document.cpp index 530d3168..e114b00b 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -97,6 +97,7 @@ namespace virtual QMimeData* createMimeDataFromSelection() const; virtual void insertFromMimeData(const QMimeData* source); virtual void keyPressEvent(QKeyEvent* event); + virtual void inputMethodEvent(QInputMethodEvent* event); private: QByteArray mimeToRtf(const QMimeData* source) const; @@ -162,6 +163,12 @@ namespace } } + void TextEdit::inputMethodEvent(QInputMethodEvent* event) + { + QTextEdit::inputMethodEvent(event); + Sound::play(Qt::Key_Any); + } + QByteArray TextEdit::mimeToRtf(const QMimeData* source) const { // Parse HTML From fdcd98798472c3101973d1b7fce78a5b7a7a067c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 26 Feb 2013 06:56:51 -0500 Subject: [PATCH 110/630] Add ignoring deleted file message. --- ChangeLog | 3 +++ src/document_watcher.cpp | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f00b417e..3cf18bef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-02-26 Graeme Gott + * Add ignoring deleted file message. + 2013-02-25 Graeme Gott * FIXED: Did not play key press sound for non-Latin languages. * FIXED: Crash when ignoring words in spelling dialog. diff --git a/src/document_watcher.cpp b/src/document_watcher.cpp index 81e6b5e2..f982068c 100644 --- a/src/document_watcher.cpp +++ b/src/document_watcher.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,6 +27,7 @@ #include #include #include +#include //----------------------------------------------------------------------------- @@ -128,11 +129,21 @@ void DocumentWatcher::processUpdates() mbox.setText(tr("The file %1 was deleted by another program.").arg(filename)); mbox.setInformativeText(tr("Do you want to save or close the file?")); - mbox.setStandardButtons(QMessageBox::Save | QMessageBox::Close); + mbox.setStandardButtons(QMessageBox::Save | QMessageBox::Close | QMessageBox::Ignore); mbox.setDefaultButton(QMessageBox::Save); - if (mbox.exec() == QMessageBox::Save) { + QAbstractButton* save_button = mbox.button(QMessageBox::Save); + + QAbstractButton* ignore_button = mbox.button(QMessageBox::Ignore); + if (ignore_button->icon().isNull() && ignore_button->style()->styleHint(QStyle::SH_DialogButtonBox_ButtonsHaveIcons)) { + ignore_button->setIcon(ignore_button->style()->standardIcon(QStyle::SP_MessageBoxWarning)); + } + + mbox.exec(); + if (mbox.clickedButton() == save_button) { document->save(); + } else if (mbox.clickedButton() == ignore_button) { + document->text()->document()->setModified(true); } else { emit closeDocument(document); } From 1f128b3905a93a59262f6331819dbf7b4c1fcfd2 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 26 Feb 2013 07:07:09 -0500 Subject: [PATCH 111/630] Add small delay before handling changed files. --- ChangeLog | 1 + src/document_watcher.cpp | 3 ++- src/document_watcher.h | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3cf18bef..0ffdf308 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2013-02-26 Graeme Gott + * Add small delay before handling changed files. * Add ignoring deleted file message. 2013-02-25 Graeme Gott diff --git a/src/document_watcher.cpp b/src/document_watcher.cpp index f982068c..1d3fc6eb 100644 --- a/src/document_watcher.cpp +++ b/src/document_watcher.cpp @@ -28,6 +28,7 @@ #include #include #include +#include //----------------------------------------------------------------------------- @@ -160,7 +161,7 @@ void DocumentWatcher::documentChanged(const QString& path) } m_updates.append(path); if (parent() && (QApplication::activeWindow() == parent())) { - processUpdates(); + QTimer::singleShot(50, this, SLOT(processUpdates())); } } diff --git a/src/document_watcher.h b/src/document_watcher.h index 644d5043..1bb7bff2 100644 --- a/src/document_watcher.h +++ b/src/document_watcher.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,13 +39,15 @@ class DocumentWatcher : public QObject void addWatch(Document* document); void removeWatch(Document* document); - void processUpdates(); static DocumentWatcher* instance() { return m_instance; } +public slots: + void processUpdates(); + signals: void closeDocument(Document* document); void showDocument(Document* document); From 820cfe159dbcb4f43196030a64c049c0ed07bb98 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 26 Feb 2013 07:12:30 -0500 Subject: [PATCH 112/630] Sync Italian translation. --- translations/focuswriter_it.qm | Bin 32628 -> 32628 bytes translations/focuswriter_it.ts | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index ecb0b6c883392f0ced8e03e1e054dd275021e222..5b6c83742a1c9d2fadf09a7da195d409987d67fd 100644 GIT binary patch delta 1867 zcmYjReN@zC7Jh!8!*6EbNTTC}$HCUl=nNqsALb%rFe1aZV8);X2PUNeUHn+LQp_?< z!PQ>nkViS55?#X&Hl(saEi)^TqJ&yK>8=v(*)%(K#7-IPKFB}&$ISD-_r34^-TOTE zzITSDJHyhBxS|dqV=hqA2V@E2a-i^IAbQy-W*>lj=l~G+IphJ=6;< z2|x{~fcF5@o;1K>f##+?X<%oAtu6(w#wkGVUAPYZ1;{IcYs5LP2dISK1ciGc}THc1GE9mpW490d*O9&1ZHHyo8SSW z(uli(wErM8e;hDtj1SrVXMsOnK;8~kSbh`*=UhOhiozGS0*@M_nC!+ALwA6bx8NH? z``lN>63I~%17GE9K)M~i_nGeG+bEV#0IAbZtk5g-3Kr|c)Tc%Z%MK}2Y?7TtIdbzX zFA%XtKGb-Q^mWK@j+B+>k~`je9e84={PxxsYS1kQo|*wH{6-FlcY)Fdxpz(!kh5Iw zJ6q0bE95Kv4*|Z3@-=4}F#m?o6lYzZ@@N-HjBQa$ni<9OiSp;;tYXeu<>kRQi2-HH zzxegpMM{%04Um3P4m+=t?9ECWrm#bV(za+j#VS+U8lDHnw<>|lp8?KkO4sip%%(;8 zYWPQBUYl}#XETs^N%=N}S%+;<23OJ^n>|PQ{c;Y~TBDjz{>-%E)UeX^K-E5Vs&x_Y zSdHr0KL&91so5zfNzevyRdH7Ks;_Q60>sy$MH~=i$sWxSF(*CY`Fu_Nu zE7aEQw^;PA#M?lzi%4nFNc@faV&XkwJ#mP5N^SkCMEss81B=5&wHoz+S5l8elAY-l zqv(whM^&4>Nj)iLv(``5lk1m~D~Eb^-y|v=5LZ=OUAWpa>nz}YP`xxjCgXolhacYr z1fABTJDjnK>zcBTOeYm+>Y80-UTE50;>^!AYep(dnx%!@V4H`})56QxwMpBwwBN{R z!Y0jg{4yC0*7DC30Tb?O8;@-VVhXiwdkd+zq1DH)0>nzqK6$-XKkp;@KBv{skEc(# z*3^>@O!`WDZQ}`cwo4q<9Mej){XfM5iwd=4AAU%R^R>1lPJd3a*7gn~t+=I~xL8YR z)`~%Gy8UT=d^zu??$&MBza_P``h zO88!M>o%iK|7G$O_T&!ngPv#)n5u3vhD|e72fqYN%rdRGHJ0PPMa(wYLccb(>fAjL zFdaEx!k4Q=_)QKYGAQotm*Hj0^#jAHheqT6uhkF~0MJZ!60YuGr(^?o^uSy9%oWbU&SYs5L; zUNCG;=%jqr+pNj=ZgW86t=>}?_}KMZeHW*2Vj`{n))oraEIek1{gCy&A6N46dcoTH z4^p1mW&JvJBE4sdb>>7VQgoQpr6cYTDJmOSdLowQH=;xVg*)W_5F1P?N#^B zB513`DxR0|#LrbE*X2B`;fbHCRrjr{8E3?&;(nY;o|SV|gQc|k8EYg)R1hBl==`}0 zm-!>wZ{~D{NORl&w&WREyf9&$m|9vaWr%;)IK&&JlcZen_l&XaeWl;&7AsPDy_R9z Q;=x`~Uy| delta 1865 zcmX9;3s98T75@I`vJV(gbc3<(YK$wp5fOPL7Euc;E)N04AgdDO5g-9UP-1Kh8IrUS z!Ngu=30=bL!j4{aF=YcizpdPsj zZ0dp9qXJ3IP%kF{W-~Mw?XkD_HCSsB;B1@=qz%J)_+=nH1I`KO^v~hE{3LOd$W5kZ zIPZircne&6jst63;i{+K+HG(hJjX;*;W|tEv#YS&ItXaDuxfq-6Yocos}@+ChNNgW z5SBnZ03-|{Ib#~IB+!f0!kxgcFCqOMR+!(8wP&5o_5m_quLGX(pTxL@SU-LbSpEUL zfwZq^6q_Vlb`-oN?*fTI@P5K{XAfh8+y%tX#s-C6$$!O0ofw}piOJ*G*yaRgq~kgN zIHvs}^3_Nndp>^ql>%67X!|7%h$t5WQkpSG+In+0qYsJ&a*Q-83T2yQ6mQCo?3Hrs zk|e-hEgxw-OZwX7_b19qpCfmF^haR*Zux_{_o%@+x##)Cz`Cn)kN69a+aODLJi-;{HT=={T!c_KNbmk@tzG zl()X)=}R{$2bEAjx~sG~hDdge(t)|`5TSHr?WI`RN=L&hz;vI|bL|q~2vsgT2w*lX z%GVEn1Xli88QRwh#C)TCAHb}GUsFb^XpcyZQ65}dO|`03(}|y$)>CS5?yEp)i#p$u z1^lK`bsq`@oC9j=@)IOzhq$3QO8V75)Exz)s#W2Ag3^7b?)UEjiub7pJ-xK|s)wV! zl)6~;?Y+aI?-GZB4ReT;7LCMFzON;Y5#Jz=6T4O4+Y<2yq6}=biZV59isxtb=u>28 zVZkIOg^G678q%zukWyLe7wU;ui^$az>gkqQRJc>zP^~pn)yqpx1FjkBm0M&o>aP0m z**5{dlbUpoGgdI9DZ9vYY?h{0?2_0J!y=XyiSzqR?lI* zbm~d=XtrLq_bM=dslHQUjVr#=n?{JX5hA%*{H=b-7sknx^` zV|PUli;KF|_`3ez+1J^V`^A6sn2=M3(tk6CRWp?NzX8llF;v`{%5kq3OAXebzZrZw z-=_2!j-Joq&6Ot#4K`!AU&K%B!jyBO!QhbUMYkbQ@)zREWy(lH>qzDQ|4KMy>wY?uSOz>@TFA1VK*#oIrZ6BBMJ^u0&n8im_r3-MV#`mu_a z*UOgPZ%KLl8Ot~EGwB^Gc9~+NxuV;YC}oLp)3Tr)0l_s}fWX!OoBI~Uxh+!73#DCR zm)RzTiWWY9B|bJ=CB1XN><*tg4~Zy56}F)Sm0a0TDn`o}32*Ey(Um==vo7{uK{W+P z!DfD{Mmb7R@yIRz(b~?f+qtqMj~=Di`Dk7I$h(ryBK}I~v4sarc$Lt{j;*wmFv_Iu zd9Djk?#Jr@I{&WB;zIk@?Irmy+Vd*QU)o~t{AG1VfV8=@W7CVWR3&ESmW#nHcHzsN aC6#yf<^HUT@S;HRWzm`m>|9WsX#GF@Jrybd diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index c24a3769..55de0685 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -727,7 +727,7 @@ Manage Sessions - Gestire le sessioni + Gestione sessioni @@ -737,7 +737,7 @@ New - Nuovo + Nuova @@ -1161,7 +1161,7 @@ The quick brown fox jumps over the lazy dog - La volpe col suo balzo ha raggiunto il quieto fido + Lorem ipsum dolor sit amet, consectetur adipiscing elit. @@ -1858,12 +1858,12 @@ &Replace... - &sostituisci... + &Sostituisci... Ctrl+R - Ctrl + R + Ctrl+R @@ -1883,7 +1883,7 @@ &Spelling... - &ortografia... + &Ortografia... @@ -1903,7 +1903,7 @@ &Settings - &impostazioni + &Impostazioni @@ -1943,7 +1943,7 @@ Ctrl+M - Ctrl + M + Ctrl+M @@ -1983,7 +1983,7 @@ &Help - &aiuto + &Aiuto From d7eb19e04d00788a6fffcf661864b0efa0690313 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 26 Mar 2013 20:37:37 -0400 Subject: [PATCH 113/630] FIXED: Could not end italics before smart quote. --- ChangeLog | 3 +++ src/smart_quotes.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0ffdf308..ac0c0377 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-03-26 Graeme Gott + * FIXED: Could not end italics before smart quote. + 2013-02-26 Graeme Gott * Add small delay before handling changed files. * Add ignoring deleted file message. diff --git a/src/smart_quotes.cpp b/src/smart_quotes.cpp index 5ccbb145..79bd228a 100644 --- a/src/smart_quotes.cpp +++ b/src/smart_quotes.cpp @@ -96,8 +96,11 @@ bool SmartQuotes::insert(QTextEdit* text, QKeyEvent* key) if (key->text().right(1) != m_quotes[quote]) { cursor.beginEditBlock(); + QTextCharFormat format = cursor.charFormat(); cursor.deletePreviousChar(); cursor.insertText(m_quotes[quote]); + cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor); + cursor.mergeCharFormat(format); cursor.endEditBlock(); } From c6b3a3d8bf7157c1165e339df0986085a53492be Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Mar 2013 14:08:36 -0400 Subject: [PATCH 114/630] Update Turkish translation. --- CREDITS | 1 + translations/focuswriter_tr.qm | Bin 26784 -> 31706 bytes translations/focuswriter_tr.ts | 548 ++++++++++++++++----------------- 3 files changed, 275 insertions(+), 274 deletions(-) diff --git a/CREDITS b/CREDITS index 948518b7..bcacc2ea 100644 --- a/CREDITS +++ b/CREDITS @@ -29,6 +29,7 @@ Translators * Jan Gallik (sk) * Daniel Nylander (sv) * Påvel Nicklasson (sv) +* Cüneyt Oktay (tr) * Ülgen (tr) * Sergiy Gavrylov (uk) diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm index 4ad7332a2681403c03b03a2e5d3a453d34813179..2c4b246ed5cefc26244db40a7587054fdb18f6db 100644 GIT binary patch delta 11362 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 delta 6935 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 MQkOrQIXm?K0c}0&+yDRo diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 6c206118..abd99a22 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -6,12 +6,12 @@ Close (%1) - + Kapat (%1) Collapse - Çökme + Daralt @@ -24,7 +24,7 @@ Dismiss Alert - Uyarıyı gizle + Uyarıyı Kapat @@ -35,131 +35,131 @@ Document - - - - + + + + Sorry - Pardon + Üzgünüm - + Unable to save '%1'. - + '%1' kaydedilemedi. - + Save File As - Farklı kaydet + Dosyayı Farklı Kaydet - - + + Unable to overwrite '%1'. - + '%1' üzerine yazılamadı. - + Rename File - Yeniden adlandır + Dosyayı Yeniden Adlandır - + Unable to rename '%1'. - + '%1' yeniden adlandırılamadı. - + Reload File - Dosyayı güncelle + Dosyayı Yeniden Yükle - + Reload the file %1 from disk? - + %1 dosyası diskten yeniden yüklensin mi? - + All unsaved changes will be lost. - Tüm kaydedilmemiş değişiklikler kaybolacaktır. + Tüm kaydedilmemiş değişiklikler kaybedilecektir. - + Reload - Güncelle + Yeniden Yükle - + Plain Text (*.txt) - Düz metin (*.txt) + Düz Metin (*.txt) - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? - Düz metin olarak kaydedildiğinde tüm biçimlendirme kaybolacaktır. Biçimlendirme silinsin mi? + Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? - + OpenDocument Text (*.odt) - Belgeyi metin olarak aç (*.odt) + OpenDocument Metni (*.odt) - + Rich Text (*.rtf) - Zengin metin (*.rtf) + Zengin Metin (*.rtf) - + All Files (*) - Tüm dosyalar (*) + Tüm Dosyalar (*) DocumentWatcher - + File Changed - Dosya değiştirildi + Dosya Değişti - + The file %1 was changed by another program. - + %1 dosyası başka bir program tarafından değiştirildi. - + Do you want to reload the file? Dosyayı yeniden yüklemek ister misiniz? - + Reload - Güncelle + Yeniden Yükle - + Ignore - Gizle + Yoksay - + File Deleted - Dosya silindi + Dosya Silindi - + The file %1 was deleted by another program. - + %1 dosyası başka bir program tarafından silindi. - + Do you want to save or close the file? - Dosyayı kaydetmek veya kapatmak istiyor musunuz? + Dosyayı kaydetmek mi kapatmak mı istiyorsunuz? @@ -177,27 +177,27 @@ Ignore case - Yoksay + Büyük/küçük harf yoksay Whole words only - Yalnızca tam sözcükleri + Yalnızca tam sözcükler Regular expressions - Düzenli ifadeler + Kurallı ifadeler Search up - Yukarı ara + Yukarıya doğru ara Search down - Aşağı ara + Aşağıya doğru ara @@ -212,7 +212,7 @@ Replace &All - &Hepsini değiştir + &Tümünü Değiştir @@ -227,8 +227,8 @@ Replace %n instance(s)? - - + + %n öğe değiştirilsin mi? @@ -240,13 +240,13 @@ Sorry - Pardon + Üzgünüm Phrase not found. - Cümle bulunamadı. + İfade bulunamadı. @@ -259,7 +259,7 @@ Check Spelling... - Yazım denetimi ... + Yazım Denetimi Yap... @@ -272,12 +272,12 @@ Open Image - Resim aç + Resim Aç Images(%1) - + Resimler(%1) @@ -290,7 +290,7 @@ <System Language> - <Sistem dili> + <Sistem Dili> @@ -300,7 +300,7 @@ Please restart this application for the change in language to take effect. - Dil değişikliğinin etkili olması için, Uygulamayı yeniden başlatın. + Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. @@ -323,23 +323,23 @@ Toolbar - Araç çubuğu + Araç Çubuğu Spell Checking - Yazım denetimi + Yazım Denetimi Select Dictionary - Sözlük seç + Sözlük Seçin Sorry - Pardon + Üzgünüm @@ -349,7 +349,7 @@ Unable to read archive metadata. - Arşiv okunamıyor. + Arşiv meta verileri okunamıyor. @@ -359,12 +359,12 @@ Unable to open file '%1'. - + '%1' dosyası açılamadı. Unable to close file '%1'. - + '%1' dosyası kapatılamadı. @@ -380,17 +380,17 @@ One or more shortcuts conflict. Do you wish to proceed? - Bir veya daha fazla kısayol çatışıyor. Devam etmek istiyor musunuz? + Bir ya da daha fazla kısayol çakışıyor. Devam etmek istiyor musunuz? The dictionary "%1" already exists. Do you want to replace it? - + "%1" sözlüğü zaten var. Değiştirmek ister misiniz? Daily Goal - Günlük hedef + Günlük Hedef @@ -411,22 +411,22 @@ Editing - Düzenle + Düzenleme Always vertically center - Daima dikey merkezli + Her zaman dikey ortala Block insertion cursor - İmleci kapat + Ekleme imlecini engelle Smooth fonts - Yazı tipleri + Düzgün yazı tipleri @@ -436,7 +436,7 @@ Smart quotes: - Akıllı alıntı: + Akıllı tırnaklar: @@ -456,17 +456,17 @@ Divider: - Böl: + Bölen: Saving - Kaydediliyor + Kaydetme Automatically save changes - Değişiklikleri otomatik kaydet + Değişiklikleri otomatik olarak kaydet @@ -476,12 +476,12 @@ Contents - İçindekiler + İçerik Word count - Kelime sayımı + Kelime sayısı @@ -496,27 +496,27 @@ Character count - Karakter sayımı + Karakter sayısı Page Size - Sayfa boyutu + Sayfa Boyutu Characters: - Karakterler: + Karakter: Paragraphs: - Paragraflar: + Paragraf: Word Count Algorithm - Sözcük sayımı algoritması + Sözcük Sayım Algoritması @@ -526,37 +526,37 @@ Divide character count by six - Altı ile karakter sayısı bölün + Karakter sayısını altıya böl Style - Tarz + Stil Icons Only - Sadece simgeler + Yalnızca Simgeler Text Only - Sadece metin + Yalnızca Metin Text Alongside Icons - Simgeler yanında metin + Simge Yanında Metin Text Under Icons - Simgeler altında metin + Simge Altında Metin Text Position: - Metin pozisyon: + Metin Pozisyonu: @@ -566,22 +566,22 @@ Move Up - Yukarı taşı + Yukarı Taşı Move Down - Aşağı taşı + Aşağı Taşı Add Separator - Ayırıcı ekle + Ayraç Ekle Command - Yönet + Komut @@ -596,12 +596,12 @@ Check spelling as you type - Yazdığınız yazıyı denetleyin + Yazarken yazım denetimi yap Ignore words in UPPERCASE - BÜYÜK HARFLİ sözcükleri yok say + BÜYÜK HARFLİ sözcükleri yoksay @@ -622,12 +622,12 @@ Remove - Sil + Kaldır Personal Dictionary - Kişisel sözlük + Kişisel Sözlük @@ -636,7 +636,7 @@ Not a supported RTF file. - Desteklenmeyen RTF dosyası. + Desteklenen bir RTF dosyası değil. @@ -646,12 +646,12 @@ Unable to open file '%1'. - + '%1' dosyası açılamadı. Unable to close file '%1'. - + '%1' dosyası kapatılamadı. @@ -659,22 +659,22 @@ Ctrl+Shift+Down - Ctrl+Shift+Down + Ctrl+Shift+Aşağı Ok Move Scenes Up - Sahneyi yukarı taşı + Sahneleri Yukarı Taşı Ctrl+Shift+Up - Ctrl+Shift+Up + Ctrl+Shift+Yukarı Ok Toggle Scene List - Toggle sahne listesi + Sahneler Arasında Geçiş Yap @@ -684,22 +684,22 @@ Show scene list (%1) - + Sahne listesini göster (%1) Hide scene list (%1) - + Sahne listesini gizle (%1) Filter - Filtre + Filtrele Move Scenes Down - Sahneleri aşağı taşı + Sahneleri Aşağı Taşı @@ -718,7 +718,7 @@ Default - Standart + Varsayılan @@ -726,12 +726,12 @@ Manage Sessions - Oturumları yönet + Oturumları Yönet S&essions - Oturumlar + &Oturumlar @@ -741,12 +741,12 @@ Rename - Yeni ad ver + Yeniden adlandır Clone - Kopyala + Klonla @@ -756,22 +756,22 @@ Switch To - Değiştir + Geçiş Yap New Session - Yeni oturum + Yeni Oturum Clone Session - Oturumu kopyala + Oturumu Klonla Rename Session - Oturumu yeniden adlandır + Oturumu Yeniden Adlandır @@ -791,7 +791,7 @@ Sorry - Pardon + Üzgünüm @@ -801,7 +801,7 @@ &New... - Yeni... + &Yeni... @@ -811,7 +811,7 @@ &Manage... - Yönet... + Y&önet... @@ -829,7 +829,7 @@ Reset to Default - Varsayılana sıfırla + Varsayılana Sıfırla @@ -841,14 +841,14 @@ SmartQuote - + Replacing quotation marks... - Seçili bölüm yerine ... + Tırnak işaretleri değiştiriliyor... - + Please Wait - Lütfen bekleyin + Lütfen Bekleyin @@ -856,7 +856,7 @@ Check Spelling - Yazım denetimi + Yazım Denetimi Yap @@ -866,12 +866,12 @@ &Ignore - &Gizle + &Yoksay I&gnore All - &Hepsini gizle + &Tümünü Gizle @@ -881,7 +881,7 @@ C&hange All - &Hepsini değiştir + &Tümünü Değiştir @@ -891,17 +891,17 @@ Change to: - Sözlükte yok: + Değiştir: Checking spelling... - Yazım denetimi ... + Yazım denetimi yapılılıyor... Cancel - İptal + İptal Et @@ -957,7 +957,7 @@ Scripts - Senaryolar + Betikler @@ -965,7 +965,7 @@ Untitled %1 - + Başlıksız %1 @@ -973,33 +973,33 @@ Modify Theme - Tema değiştir + Temayı Düzenle Name: - Adı: + İsim: Background - Arka plan + Arka Plan No Image - Görüntü yok + Resim Yok Tiled - Tuğla + Döşe Centered - Merkezi + Ortala @@ -1010,7 +1010,7 @@ Scaled - Ölçekli + Ölçekle @@ -1020,7 +1020,7 @@ Remove - Sil + Kaldır @@ -1042,12 +1042,12 @@ Foreground - Zemin + Ön Plan Opacity - Opak + Opaklık @@ -1055,7 +1055,7 @@ pixels - Piksel + piksel @@ -1080,12 +1080,12 @@ Rounding: - Yuvarla: + Yuvarlama: Margin: - Kenar: + Kenar Boşluğu: @@ -1100,27 +1100,27 @@ Font: - Yazı tipi: + Yazı Tipi: Misspelled: - Yanlış yazılmış: + İmla Hataları: Spacings - Aralıklar + Boşluklar Line Spacing - Satır aralığı + Satır Aralığı Single - Yalnız + Tek @@ -1130,37 +1130,37 @@ Double - Çifte + Çift Proportional - Orantılı + Orantısal Paragraph Spacing - Paragraf aralığı + Paragraf Boşluğu Indent First Line: - İlk satır girintisi: + Satır Başı Girintisi: Pixels Above: - Piksel yukarıda: + Üstte Piksel: Pixels Below: - Piksel aşağıda: + Altta Piksel: The quick brown fox jumps over the lazy dog - Tembel köpeğin üstünden hızlı kahverengi tilki atlar + Pijamalı hasta yağız şoföre çabucak güvendi @@ -1178,22 +1178,22 @@ Modify - Değiştir + Düzenle Remove - Sil + Kaldır Import - İçe aktar + Al Export - Dışa aktar + Ver @@ -1208,12 +1208,12 @@ Remove selected theme? - Seçili temayı sil? + Seçili temayı silinsin mi? Import Theme - Tema yükle + Temayı Al @@ -1228,17 +1228,17 @@ Sorry - Pardon + Üzgünüm A theme already exists with that name. Please enter a new name: - Bu adla zaten bir tema var. Yeni bir ad girin: + Zaten bu isimde bir tema var. Lütfen yeni bir isim girin: Export Theme - Temayı dışa aktar + Temayı Ver @@ -1246,7 +1246,7 @@ <b>%1</b> - %2 - + <b>%1</b> - %2 @@ -1256,52 +1256,52 @@ Delete timer? - Zamanlayıcıyı sil? + Zamanlayıcı silinsin mi? <b>Words:</b> %L1 - + <b>Kelime:</b> %L1 <b>Pages:</b> %L1 - + <b>Sayfa:</b> %L1 <b>Paragraphs:</b> %L1 - + <b>Paragraf:</b> %L1 <b>Characters:</b> %L1 / %L2 - + <b>Karakter:</b> %L1 / %L2 Set Delay - Gecikmeyi ayarla + Süre Ayarla Set Time - Saati Ayarla + Saat Ayarla Delay: - Gecikme: + Süre: Time: - Zaman: + Saat: HH:mm:ss - HH mm ss + HH:mm:ss @@ -1316,7 +1316,7 @@ Memo: - Memo: + Not: @@ -1334,12 +1334,12 @@ HH:mm:ss - HH mm ss + HH:mm:ss No timers running - Zamanlayıcı çalışmıyor + Çalışan zamanlayıcı yok @@ -1347,7 +1347,7 @@ Timers - Zamanlayıcı + Zamanlayıcılar @@ -1367,17 +1367,17 @@ Cancel editing timers? - Zamanlayıcı iptal edilsin mi? + Zamanlayıcı düzenleme iptal edilsin mi? +HH:mm:ss - +HH mm ss + +HH:mm:ss %1 - %2 - + %1 - %2 @@ -1385,7 +1385,7 @@ Unexpectedly reached end of file. - Beklenmedik dosya sonuna ulaşıldı. + Beklenmedik bir biçimde dosya sonuna ulaşıldı. @@ -1409,7 +1409,7 @@ Open File - Dosyayı aç + Dosyayı Aç @@ -1424,63 +1424,63 @@ A simple fullscreen word processor - + Basit bir tam ekran kelime işlemci Copyright &copy; 2008-%1 Graeme Gott - + Telif hakları saklıdır &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır Uses icons from the <a href=%1>Oxygen</a> icon theme - + <a href=%1>Oxygen</a> simge temasından simgeler kullanılıyor Used under the <a href=%1>LGPL 3</a> license - + <a href=%1>GPL 3</a> lisansı altında kullanılıyor Characters: %L1 / %L2 - + Karakter: %L1 / %L2 Pages: %L1 - + Sayfa: %L1 Paragraphs: %L1 - + Paragraf: %L1 Words: %L1 - + Kelime: %L1 %1% of daily goal - + Günlük hedefin %1% bölümü - + Opening %1 - + %1 açılıyor @@ -1490,38 +1490,38 @@ Save changes? - Değişikleri kaydet? + Değişikler kaydedilsin mi? (Untitled %1) - + (Başlıksız %1) Switch to Next Document - Sonraki belgeye geç + Sonraki Belgeye Geç Switch to Previous Document - Önceki belgeye geç + Önceki Belgeye Geç Switch to First Document - İlk belgeye geç + İlk Belgeye Geç Switch to Last Document - Son belgeye geç + Son Belgeye Geç Switch to Document %1 - + %1. Belgeye Geç @@ -1542,12 +1542,12 @@ FocusWriter was not shut down cleanly. - FocusWriter düzgün bir şekilde kapatılmadı! + FocusWriter temiz bir şekilde kapatılmadı. Restore from the emergency cache? - Acil önbellekten geri yüklensin mi? + Acil önbellekten kurtarılsın mı? @@ -1557,22 +1557,22 @@ Some files were opened Read-Only. - Bazı dosyalar salt okunur açıldı. + Bazı dosyalar salt okunur olarak açıldı. Text Files (%1);;All Files (*) - + Metin Dosyaları (%1);;Tüm Dosyalar (*) '%1' is newer than the cached copy. - + '%1' önbelleğe alınmış kopyadan daha yeni. Overwrite newer file? - Yeni dosya üzerine yazılsın mı? + Daha yeni dosyanın üzerine yazılsın mı? @@ -1582,12 +1582,12 @@ Please make sure that SDL_mixer is installed. - SDL_mixer yüklü olduğundan emin olun. + SDL_mixer'ın yüklü olduğundan emin olun. %1 (Read-Only) - + %1 (Salt Okunur) @@ -1607,7 +1607,7 @@ Reloa&d - &Güncelle + &Yeniden Yükle @@ -1617,37 +1617,37 @@ Save &As... - &Farklı kaydet... + &Farklı Kaydet... &Rename... - &Yeniden adlandır... + Yeni &İsim Ver... Save A&ll - &Hepsini kaydet + &Tümünü Kaydet Manage Sessions - Oturumları yönet + Oturumları Yönet New Session - Yeni oturum + Yeni Oturum &Print... - &Yazdır... + Ya&zdır... &Close - &Kapat + Ka&pat @@ -1662,17 +1662,17 @@ &Edit - &Düzenle + D&üzen &Undo - &Geri + &Geri Al &Redo - &İleri + &Yinele @@ -1682,17 +1682,17 @@ &Copy - &Kopyala + K&opyala &Paste - &Yapıştır + Y&apıştır Paste &Unformatted - &Değiştirmeden yapıştır + &Biçimlendirme Olmadan Yapıştır @@ -1702,12 +1702,12 @@ Select &All - &Hepsini seç + &Tümünü Seç Select &Scene - &Sahneyi seç + &Sahneyi Seç @@ -1717,7 +1717,7 @@ Fo&rmat - &Biçimlendir + &Biçim @@ -1732,12 +1732,12 @@ &Underline - &Altı çizili + &Altı Çizili Stri&kethrough - &Üstü çizili + &Üstü Çizili @@ -1747,7 +1747,7 @@ Sup&erscript - &Üst simge + Ü&st Simge @@ -1757,7 +1757,7 @@ &Subscript - &Simge + A&lt Simge @@ -1767,7 +1767,7 @@ Align &Left - &Sola hizala + So&la Yasla @@ -1777,7 +1777,7 @@ Align &Center - &Ortaya hizala + &Ortala @@ -1787,7 +1787,7 @@ Align &Right - &Sağa hizala + Sa&ğa Yasla @@ -1797,7 +1797,7 @@ Align &Justify - &Yasla hizala + İki &Yana Yasla @@ -1807,7 +1807,7 @@ &Decrease Indent - &Girintiyi azalt + &Girintiyi Azalt @@ -1817,7 +1817,7 @@ I&ncrease Indent - &Girintiyi arttır + Gi&rintiyi Arttır @@ -1827,12 +1827,12 @@ Le&ft to Right Block - &Soldan sağa blok + S&oldan Sağa Blok Ri&ght to Left Block - &Sağdan sola blok + Sa&ğdan Sola Blok @@ -1847,12 +1847,12 @@ Find &Next - &Sonrakini bul + &Sonrakini Bul Find Pre&vious - &Öncekini bul + &Öncekini Bul @@ -1867,22 +1867,22 @@ Smart &Quotes - &Akıllı alıntılar + &Akıllı Tırnaklar Update &Document - &Dökümanı güncelle + &Dökümanı Güncelle Update &Selection - &Seçili olanı güncelle + &Seçilimi Güncelle &Spelling... - &yazım... + &Yazım Denetimi... @@ -1892,7 +1892,7 @@ &Timers... - &Zamanlayıcı... + &Zamanlayıcılar... @@ -1907,22 +1907,22 @@ Show &Toolbar - &Araç çubuğunu göster + &Araç Çubuğunu Göster Show &Menu Icons - &Menü simgelerini göster + &Menü Simgelerini Göster F&ocused Text - Metne odaklan + &Odaklanılan Metin &Fullscreen - &Tam ekran + Tam &Ekran @@ -1957,17 +1957,17 @@ Focus Off - Odaklanma kapalı + Odaklanmayı Kapat Focus One Line - Bir satıra odaklan + Bir Satıra Odaklan Focus Three Lines - Üç satıra odaklan + Üç Satıra Odaklan @@ -1977,7 +1977,7 @@ Focus Paragraph - Paragrafa odaklan + Paragrafa Odaklan @@ -1987,12 +1987,12 @@ Application &Language... - &Uygulama dili ... + &Uygulama Dili ... Some files were unsupported and could not be opened. - Bazı desteklenmeyen dosyalar açılamadı. + Bazı dosyalar desteklenmiyor ve açılamadı. @@ -2002,12 +2002,12 @@ One &Line - &Bir satır + &Bir Satır &Three Lines - &Üç satır + &Üç Satır From e890a278dc1547949f1ff99a4382f19ababf76c4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Mar 2013 14:18:14 -0400 Subject: [PATCH 115/630] Tag version 1.4.2 --- ChangeLog | 3 +++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac0c0377..20773703 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-03-27 Graeme Gott + * Tag version 1.4.2. + 2013-03-26 Graeme Gott * FIXED: Could not end italics before smart quote. diff --git a/focuswriter.pro b/focuswriter.pro index ccf72252..86dba837 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -16,7 +16,7 @@ macx { LIBS += -lz } -VERSION = 1.4.1 +VERSION = 1.4.2 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index ac0497c8..4fbc40a3 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.1' +VERSION='1.4.2' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 2c466404..303605b5 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.1 +SET VERSION=1.4.2 ECHO Copying executable MKDIR %APP% From 25ca62c8ded2e395ffdabeeee0d6951b3d67e207 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 2 Apr 2013 13:25:37 +0100 Subject: [PATCH 116/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 7e664e6c..afafbb20 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.4.2-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Tue, 02 Apr 2013 13:25:25 +0100 + focuswriter (1.4.1-1) unstable; urgency=low * new upstream release From e4c84c9b6cae85dde938b0fb0da0d12f67d94643 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 2 Apr 2013 13:30:11 +0100 Subject: [PATCH 117/630] update copyright dates --- debian/copyright | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/copyright b/debian/copyright index 77120db8..5127db35 100644 --- a/debian/copyright +++ b/debian/copyright @@ -14,7 +14,7 @@ Upstream Author: Copyright: - Copyright (C) 2008, 2009, 2010 Graeme Gott + Copyright (C) 2008-2013 Graeme Gott License: From 314910048fb997a2ac4c59d47bd72eb99738be94 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 2 Apr 2013 13:51:27 +0100 Subject: [PATCH 118/630] update .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c25718ff..4da73294 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ +*.o +moc_*.cpp +qrc_*.cpp /Makefile /build /focuswriter -/resources/images/icons/hicolor/32x32/apps/focuswriter.xpm From 9b84774d9b147222ec70cba6adfd3a0469645b0c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 30 Mar 2013 17:41:58 -0400 Subject: [PATCH 119/630] Migrate data from Qt 4 version. --- ChangeLog | 3 ++ focuswriter.pro | 2 ++ src/main.cpp | 58 +++++++++++++++++---------------- src/paths.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ src/paths.h | 32 ++++++++++++++++++ 5 files changed, 154 insertions(+), 28 deletions(-) create mode 100644 src/paths.cpp create mode 100644 src/paths.h diff --git a/ChangeLog b/ChangeLog index 20773703..9f351fcb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-03-30 Graeme Gott + * Migrate data from Qt 4 version. + 2013-03-27 Graeme Gott * Tag version 1.4.2. diff --git a/focuswriter.pro b/focuswriter.pro index 86dba837..c14a1590 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -95,6 +95,7 @@ HEADERS += src/action_manager.h \ src/load_screen.h \ src/locale_dialog.h \ src/odt_reader.h \ + src/paths.h \ src/preferences.h \ src/preferences_dialog.h \ src/scene_list.h \ @@ -142,6 +143,7 @@ SOURCES += src/action_manager.cpp \ src/locale_dialog.cpp \ src/main.cpp \ src/odt_reader.cpp \ + src/paths.cpp \ src/preferences.cpp \ src/preferences_dialog.cpp \ src/scene_list.cpp \ diff --git a/src/main.cpp b/src/main.cpp index 525b3076..0339aa65 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,16 +21,12 @@ #include "dictionary_manager.h" #include "document.h" #include "locale_dialog.h" +#include "paths.h" #include "session.h" #include "sound.h" #include "symbols_model.h" #include "theme.h" -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) -#include -#else -#include -#endif #include #include #include @@ -99,31 +95,37 @@ int main(int argc, char** argv) // Find user data dir if not in portable mode if (userdir.isEmpty()) { -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) - userdir = QStandardPaths::writableLocation(QStandardPaths::DataLocation); -#else - userdir = QDesktopServices::storageLocation(QDesktopServices::DataLocation); -#endif - - // Move user data to new location + userdir = Paths::dataPath(); if (!QFile::exists(userdir)) { -#if defined(Q_OS_MAC) - QString oldpath = QDir::homePath() + "/Library/Application Support/GottCode/FocusWriter/"; -#elif defined(Q_OS_UNIX) - QString oldpath = QString::fromLocal8Bit(qgetenv("XDG_DATA_HOME")); - if (oldpath.isEmpty()) { - oldpath = QDir::homePath() + "/.local/share"; - } - oldpath += "/focuswriter"; -#else - QString oldpath = QDir::homePath() + "/Application Data/GottCode/FocusWriter/"; -#endif - QDir dir(userdir + "/../"); - if (!dir.exists()) { - dir.mkpath(dir.absolutePath()); - } + QDir dir(userdir); + dir.mkpath(dir.absolutePath()); + + // Migrate data from old location + QString oldpath = Paths::oldDataPath(); if (QFile::exists(oldpath)) { - QFile::rename(oldpath, userdir); + QStringList old_dirs = QStringList() << ""; + + QDir olddir(oldpath); + for (int i = 0; i < old_dirs.count(); ++i) { + QString subpath = old_dirs.at(i); + dir.mkpath(userdir + "/" + subpath); + olddir.setPath(oldpath + "/" + subpath); + + QStringList subdirs = olddir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + foreach (const QString& subdir, subdirs) { + old_dirs.append(subpath + "/" + subdir); + } + + QStringList files = olddir.entryList(QDir::Files); + foreach (const QString& file, files) { + QFile::rename(olddir.absoluteFilePath(file), userdir + "/" + subpath + "/" + file); + } + } + + olddir.setPath(oldpath); + for (int i = old_dirs.count() - 1; i >= 0; --i) { + olddir.rmdir(oldpath + "/" + old_dirs.at(i)); + } } } } diff --git a/src/paths.cpp b/src/paths.cpp new file mode 100644 index 00000000..848ce810 --- /dev/null +++ b/src/paths.cpp @@ -0,0 +1,87 @@ +/*********************************************************************** + * + * Copyright (C) 2013 Graeme Gott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + ***********************************************************************/ + +// Need this to find the old data locations from Qt 4 when using Qt 5. +// QDesktopServices::storageLocation() is deprecated and returns a different +// path than QStandardPaths::writableLocation(). +#define QT_DISABLE_DEPRECATED_BEFORE 0x000000 + +#include "paths.h" + +#include +#include +#include +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) +#include +#endif +#include + +//----------------------------------------------------------------------------- + +QString Paths::dataPath() +{ +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + static QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); +#else + static QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); +#endif + return path; +} + +//----------------------------------------------------------------------------- + +QString Paths::oldDataPath() +{ + QStringList oldpaths; + QString oldpath; + +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + // Data path from Qt 4 version of 1.4 + oldpaths.append(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); +#endif + + // Data path from 1.0 +#if defined(Q_OS_MAC) + oldpath = QDir::homePath() + "/Library/Application Support/GottCode/FocusWriter/"; +#elif defined(Q_OS_UNIX) + oldpath = QString::fromLocal8Bit(qgetenv("XDG_DATA_HOME")); + if (oldpath.isEmpty()) { + oldpath = QDir::homePath() + "/.local/share"; + } + oldpath += "/focuswriter"; +#else + oldpath = QDir::homePath() + "/Application Data/GottCode/FocusWriter/"; +#endif + if (!oldpaths.contains(oldpath)) { + oldpaths.append(oldpath); + } + + // Check if an old data location exists + oldpath.clear(); + foreach (const QString& testpath, oldpaths) { + if (QFile::exists(testpath)) { + oldpath = testpath; + break; + } + } + + return oldpath; +} + +//----------------------------------------------------------------------------- diff --git a/src/paths.h b/src/paths.h new file mode 100644 index 00000000..a3ff808e --- /dev/null +++ b/src/paths.h @@ -0,0 +1,32 @@ +/*********************************************************************** + * + * Copyright (C) 2013 Graeme Gott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + ***********************************************************************/ + +#ifndef PATHS_H +#define PATHS_H + +class QString; + +class Paths +{ +public: + static QString dataPath(); + static QString oldDataPath(); +}; + +#endif From a029daacc91cf914733f70800fe50ae675571bf3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 30 Mar 2013 18:25:14 -0400 Subject: [PATCH 120/630] Add support for Unicode names with Qt 5. --- ChangeLog | 1 + focuswriter.pro | 12 +++++-- resources/symbols/main.cpp | 52 +++++++++++++++++++++---------- resources/symbols/symbols.dat | Bin 135550 -> 0 bytes resources/symbols/symbols510.dat | Bin 0 -> 148036 bytes resources/symbols/symbols620.dat | Bin 0 -> 190724 bytes src/main.cpp | 7 +---- src/symbols_model.cpp | 35 ++++++++++++++++++--- src/symbols_model.h | 4 +-- windows_deploy.bat | 2 +- 10 files changed, 82 insertions(+), 31 deletions(-) delete mode 100644 resources/symbols/symbols.dat create mode 100644 resources/symbols/symbols510.dat create mode 100644 resources/symbols/symbols620.dat diff --git a/ChangeLog b/ChangeLog index 9f351fcb..26d44821 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2013-03-30 Graeme Gott + * Add support for Unicode names with Qt 5. * Migrate data from Qt 4 version. 2013-03-27 Graeme Gott diff --git a/focuswriter.pro b/focuswriter.pro index c14a1590..fddc75ba 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -187,7 +187,11 @@ macx { SOUNDS.files = resources/sounds SOUNDS.path = Contents/Resources - SYMBOLS.files = resources/symbols/symbols.dat + greaterThan(QT_MAJOR_VERSION, 4) { + SYMBOLS.files = resources/symbols/symbols620.dat + } else { + SYMBOLS.files = resources/symbols/symbols510.dat + } SYMBOLS.path = Contents/Resources QMAKE_BUNDLE_DATA += ICONS SOUNDS SYMBOLS @@ -225,7 +229,11 @@ unix: !macx { sounds.files = resources/sounds/* sounds.path = $$DATADIR/focuswriter/sounds - symbols.files = resources/symbols/symbols.dat + greaterThan(QT_MAJOR_VERSION, 4) { + symbols.files = resources/symbols/symbols620.dat + } else { + symbols.files = resources/symbols/symbols510.dat + } symbols.path = $$DATADIR/focuswriter INSTALLS += target icon pixmap desktop icons qm sounds symbols diff --git a/resources/symbols/main.cpp b/resources/symbols/main.cpp index f14a2b87..bbe9e1ab 100644 --- a/resources/symbols/main.cpp +++ b/resources/symbols/main.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -81,28 +82,35 @@ QDataStream& operator<<(QDataStream& stream, const Filter& filter) return stream; } -int main(int argc, char** argv) +int downloadAndParse(const QString& unicode_version, QDataStream::Version data_version) { - QCoreApplication app(argc, argv); + QString path = unicode_version; + path = path.remove('.'); + path = path.prepend("symbols"); + + // Create location for data + { + QDir dir(path); + dir.mkdir(dir.absolutePath()); + } // Download necessary Unicode data files { QScopedPointer manager(new QNetworkAccessManager); - const QStringList filenames = QStringList() << "UnicodeData.txt" << "Blocks.txt" << "Scripts.txt"; + const QStringList filenames = QStringList() + << "UnicodeData.txt" + << "Blocks.txt" + << "Scripts.txt"; foreach (const QString& filename, filenames) { std::cout << "Downloading " << filename.toStdString() << "... " << std::flush; - if (QFile::exists(filename)) { + if (QFile::exists(path + "/" + filename)) { std::cout << "SKIPPED" << std::endl; continue; } // Download file -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) - QUrl url("http://www.unicode.org/Public/6.1.0/ucd/" + filename); -#else - QUrl url("http://www.unicode.org/Public/5.0.0/ucd/" + filename); -#endif + QUrl url("http://www.unicode.org/Public/" + unicode_version + "/ucd/" + filename); QNetworkReply* reply = manager->get(QNetworkRequest(url)); QEventLoop loop; @@ -110,7 +118,7 @@ int main(int argc, char** argv) loop.exec(); // Write file to disk - QFile file(filename); + QFile file(path + "/" + filename); if (!file.open(QFile::WriteOnly | QFile::Text)) { std::cout << "ERROR" << std::endl; return 1; @@ -129,7 +137,7 @@ int main(int argc, char** argv) // Parse names { std::cout << "Parsing names... " << std::flush; - QFile file("UnicodeData.txt"); + QFile file(path + "/UnicodeData.txt"); if (!file.open(QFile::ReadOnly | QFile::Text)) { std::cout << "ERROR" << std::endl; return 1; @@ -157,7 +165,7 @@ int main(int argc, char** argv) FilterGroup blocks; std::cout << "Parsing blocks... " << std::flush; - QFile file("Blocks.txt"); + QFile file(path + "/Blocks.txt"); if (!file.open(QFile::ReadOnly | QFile::Text)) { std::cout << "ERROR" << std::endl; return 1; @@ -204,7 +212,7 @@ int main(int argc, char** argv) FilterGroup scripts; std::cout << "Parsing scripts... " << std::flush; - QFile file("Scripts.txt"); + QFile file(path + "/Scripts.txt"); if (!file.open(QFile::ReadOnly | QFile::Text)) { std::cout << "ERROR" << std::endl; return 1; @@ -267,12 +275,12 @@ int main(int argc, char** argv) } QDataStream stream(&buffer); - stream.setVersion(QDataStream::Qt_4_6); + stream.setVersion(data_version); stream << names; stream << groups; buffer.close(); - QFile file("symbols.dat"); + QFile file(path + ".dat"); if (!file.open(QFile::WriteOnly)) { std::cout << "ERROR" << std::endl; return 1; @@ -282,4 +290,16 @@ int main(int argc, char** argv) std::cout << "DONE" << std::endl; } + + return 0; +} + +int main(int argc, char** argv) +{ + QCoreApplication app(argc, argv); + +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + downloadAndParse("6.2.0", QDataStream::Qt_5_0); +#endif + downloadAndParse("5.1.0", QDataStream::Qt_4_6); } diff --git a/resources/symbols/symbols.dat b/resources/symbols/symbols.dat deleted file mode 100644 index 8c8109a0455efc2ae12c84e2b4c4968eb755e977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135550 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

@y+&hbyU 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 V;8fwYoB?{4Cj<1!{}1uN%CM7tZ@&Nl diff --git a/resources/symbols/symbols510.dat b/resources/symbols/symbols510.dat new file mode 100644 index 0000000000000000000000000000000000000000..1758f7041295919c86f190fd3fcfe8a298e00fef GIT binary patch literal 148036 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 oQ;cL*zv- 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

*BN$9y4%snYge5-fsRcF(Y&bKgZa?* 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

Ve=}gJJ7p& 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

H;>m-`&s452DD)1x@rBO?Ekdf^svu! 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 + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -62,7 +63,20 @@ SymbolsModel::SymbolsModel(QObject* parent) : return; } QDataStream stream(&buffer); - stream.setVersion(QDataStream::Qt_4_6); + + const int unicode_version = m_path.mid(m_path.length() - 7, 3).toInt(); + switch (unicode_version) { +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + case 620: + stream.setVersion(QDataStream::Qt_5_0); + break; +#endif + case 510: + default: + stream.setVersion(QDataStream::Qt_4_6); + break; + } + stream >> m_names; stream >> m_groups; buffer.close(); @@ -290,9 +304,22 @@ int SymbolsModel::rowCount(const QModelIndex& parent) const //----------------------------------------------------------------------------- -void SymbolsModel::setData(const QString& path) +void SymbolsModel::setData(const QStringList& datadirs) { - m_path = path; + QStringList files = QStringList() +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) + << "symbols620.dat" +#endif + << "symbols510.dat"; + foreach (const QString& path, datadirs) { + foreach (const QString& file, files) { + QFileInfo info(path + "/" + file); + if (info.exists()) { + m_path = info.absoluteFilePath(); + break; + } + } + } } //----------------------------------------------------------------------------- diff --git a/src/symbols_model.h b/src/symbols_model.h index 8c50d4b7..05e5ec30 100644 --- a/src/symbols_model.h +++ b/src/symbols_model.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ class SymbolsModel : public QAbstractItemModel QModelIndex parent(const QModelIndex& child) const; int rowCount(const QModelIndex& parent = QModelIndex()) const; - static void setData(const QString& path); + static void setData(const QStringList& datadirs); friend QDataStream& operator>>(QDataStream& stream, SymbolsModel::Filter& filter); friend QDataStream& operator>>(QDataStream& stream, SymbolsModel::Filter::Range& range); diff --git a/windows_deploy.bat b/windows_deploy.bat index 303605b5..50b29015 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -28,7 +28,7 @@ MKDIR %SOUNDS% COPY resources\sounds\* %SOUNDS% >nul ECHO Copying symbols -COPY resources\symbols\symbols.dat %APP% >nul +COPY resources\symbols\symbols510.dat %APP% >nul ECHO Copying enchant library XCOPY /Q /S /Y enchant %APP% >nul From fde4a0693ce3a06ae5a351e13693fc48691db5c8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 5 Apr 2013 11:37:23 -0400 Subject: [PATCH 121/630] Don't distribute static Qt plugins on Windows. --- windows_deploy.bat | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/windows_deploy.bat b/windows_deploy.bat index 50b29015..1585b590 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -54,18 +54,22 @@ COPY %QTDIR%\bin\QtNetwork4.dll %APP% >nul ECHO Copying Qt plugins MKDIR %APP%\accessible XCOPY /Q /S /Y %QTDIR%\plugins\accessible %APP%\accessible >nul +DEL %APP%\accessible\*.a >nul DEL %APP%\accessible\*d4.dll >nul MKDIR %APP%\bearer XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul +DEL %APP%\bearer\*.a >nul DEL %APP%\bearer\*d4.dll >nul MKDIR %APP%\codecs XCOPY /Q /S /Y %QTDIR%\plugins\codecs %APP%\codecs >nul +DEL %APP%\codecs\*.a >nul DEL %APP%\codecs\*d4.dll >nul MKDIR %APP%\imageformats XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul +DEL %APP%\imageformats\*.a >nul DEL %APP%\imageformats\*d4.dll >nul ECHO Creating compressed file From b09d25514b9eb88997a4f943c7d93d5359062b10 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 6 Apr 2013 07:07:06 -0400 Subject: [PATCH 122/630] FIXED: Unsaved new files were not restored from cache. --- ChangeLog | 3 +++ src/document.cpp | 4 ++-- src/window.cpp | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 26d44821..98fbf77c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-04-06 Graeme Gott + * FIXED: Unsaved new files were not restored from cache. + 2013-03-30 Graeme Gott * Add support for Unicode names with Qt 5. * Migrate data from Qt 4 version. diff --git a/src/document.cpp b/src/document.cpp index e114b00b..df4e1525 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -570,7 +570,7 @@ bool Document::loadFile(const QString& filename, int position) document->blockSignals(false); m_text->blockSignals(false); - m_text->setReadOnly(!QFileInfo(m_filename).isWritable()); + m_text->setReadOnly(!m_filename.isEmpty() ? !QFileInfo(m_filename).isWritable() : false); // Restore cursor position scrollBarRangeChanged(m_scrollbar->minimum(), m_scrollbar->maximum()); @@ -596,7 +596,7 @@ bool Document::loadFile(const QString& filename, int position) focusText(); } - if (loaded) { + if (loaded && !m_filename.isEmpty()) { DocumentWatcher::instance()->addWatch(this); } return loaded; diff --git a/src/window.cpp b/src/window.cpp index bebcf3e2..87183b70 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1079,6 +1079,8 @@ bool Window::addDocument(const QString& file, const QString& datafile, int posit position = -1; } } + } else { + path = datafile; } Document* document = new Document(file, m_current_wordcount, m_current_time, this); m_documents->addDocument(document); From 51aaf9890976d1eb74ad5fe12ade340667884a19 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 6 Apr 2013 07:56:23 -0400 Subject: [PATCH 123/630] Tag version 1.4.3 --- ChangeLog | 1 + focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98fbf77c..c99b89be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 2013-04-06 Graeme Gott + * Tag version 1.4.3. * FIXED: Unsaved new files were not restored from cache. 2013-03-30 Graeme Gott diff --git a/focuswriter.pro b/focuswriter.pro index fddc75ba..4a43273c 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -16,7 +16,7 @@ macx { LIBS += -lz } -VERSION = 1.4.2 +VERSION = 1.4.3 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index 4fbc40a3..44e79069 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.2' +VERSION='1.4.3' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 1585b590..33f8fd2e 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.2 +SET VERSION=1.4.3 ECHO Copying executable MKDIR %APP% From a3ea75fcdb666c0b4047f8777227c3315513d013 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 9 Apr 2013 18:01:18 -0400 Subject: [PATCH 124/630] FIXED: Smart quotes were incorrect after opening punctuation. --- ChangeLog | 3 +++ src/smart_quotes.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index c99b89be..33a3aa1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-04-09 Graeme Gott + * FIXED: Smart quotes were incorrect after opening punctuation. + 2013-04-06 Graeme Gott * Tag version 1.4.3. * FIXED: Unsaved new files were not restored from cache. diff --git a/src/smart_quotes.cpp b/src/smart_quotes.cpp index 79bd228a..11777ff9 100644 --- a/src/smart_quotes.cpp +++ b/src/smart_quotes.cpp @@ -86,7 +86,7 @@ bool SmartQuotes::insert(QTextEdit* text, QKeyEvent* key) QTextCursor cursor = text->textCursor(); QChar c = text->document()->characterAt(cursor.selectionStart() - 1); - if (!c.isSpace() && !c.isNull()) { + if (!c.isSpace() && !c.isNull() && (c.category() != QChar::Punctuation_Open)) { quote++; } @@ -134,7 +134,7 @@ void SmartQuotes::replace(QTextEdit* text, int start, int end) continue; } - if (!previous.isSpace() && !previous.isNull()) { + if (!previous.isSpace() && !previous.isNull() && (previous.category() != QChar::Punctuation_Open)) { quote++; } previous = c; @@ -170,7 +170,7 @@ void SmartQuotes::replace(QString& string) continue; } - if (!previous.isSpace() && !previous.isNull()) { + if (!previous.isSpace() && !previous.isNull() && (previous.category() != QChar::Punctuation_Open)) { quote++; } previous = c; From a7bf8fdd058bee76cc2240e6e796d55455e8eb07 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 15 Apr 2013 13:28:33 +0100 Subject: [PATCH 125/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index afafbb20..1124436d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.4.3-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Mon, 15 Apr 2013 13:28:29 +0100 + focuswriter (1.4.2-1) unstable; urgency=low * new upstream release From b9fb039e1018f4ca2025e21ce96c720c081032be Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 15 Apr 2013 07:17:36 -0400 Subject: [PATCH 126/630] Allow margins smaller than 10 pixels. --- ChangeLog | 3 +++ src/theme.cpp | 4 ++-- src/theme_dialog.cpp | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 33a3aa1e..08c75858 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-04-15 Graeme Gott + * Allow margins smaller than 10 pixels. + 2013-04-09 Graeme Gott * FIXED: Smart quotes were incorrect after opening punctuation. diff --git a/src/theme.cpp b/src/theme.cpp index 7b3ce49d..b8e20b4e 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -121,7 +121,7 @@ Theme::Theme(const QString& name) m_foreground_opacity = qBound(0, settings.value("Foreground/Opacity", 100).toInt(), 100); m_foreground_width = qBound(500, settings.value("Foreground/Width", 700).toInt(), 2000); m_foreground_rounding = qBound(0, settings.value("Foreground/Rounding", 0).toInt(), 100); - m_foreground_margin = qBound(0, settings.value("Foreground/Margin", 65).toInt(), 250); + m_foreground_margin = qBound(1, settings.value("Foreground/Margin", 65).toInt(), 250); m_foreground_padding = qBound(0, settings.value("Foreground/Padding", 0).toInt(), 250); m_foreground_position = qBound(0, settings.value("Foreground/Position", 1).toInt(), 3); diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index e9416869..c45b8e55 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -134,7 +134,7 @@ ThemeDialog::ThemeDialog(Theme& theme, QWidget* parent) m_foreground_margin = new QSpinBox(tab); m_foreground_margin->setCorrectionMode(QSpinBox::CorrectToNearestValue); m_foreground_margin->setSuffix(tr(" pixels")); - m_foreground_margin->setRange(10, 250); + m_foreground_margin->setRange(1, 250); m_foreground_margin->setValue(m_theme.foregroundMargin()); m_foreground_padding = new QSpinBox(tab); From 4fd96dc2c7e0d44088c8ab1d1e415ffa1a87d838 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 25 Apr 2013 08:42:00 -0400 Subject: [PATCH 127/630] FIXED: Did not always ignore changes made by program. --- ChangeLog | 3 ++ src/document.cpp | 17 +++--- src/document_watcher.cpp | 110 +++++++++++++++++++++++++++++++++------ src/document_watcher.h | 26 ++++++++- 4 files changed, 131 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08c75858..60400cd9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-04-25 Graeme Gott + * FIXED: Did not always ignore changes made by program. + 2013-04-15 Graeme Gott * Allow margins smaller than 10 pixels. diff --git a/src/document.cpp b/src/document.cpp index df4e1525..9cfb046b 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -276,6 +276,8 @@ Document::Document(const QString& filename, int& current_wordcount, int& current // Make it read-only until content is loaded m_text->setReadOnly(true); + + DocumentWatcher::instance()->addWatch(this); } //----------------------------------------------------------------------------- @@ -325,7 +327,7 @@ bool Document::save() } // Write file to disk - DocumentWatcher::instance()->removeWatch(this); + DocumentWatcher::instance()->pauseWatch(this); DocumentWriter writer; writer.setFileName(m_filename); writer.setType(m_filename.section(QLatin1Char('.'), -1)); @@ -340,7 +342,7 @@ bool Document::save() } else { cache(); } - DocumentWatcher::instance()->addWatch(this); + DocumentWatcher::instance()->resumeWatch(this); if (!saved) { QMessageBox::critical(window(), tr("Sorry"), tr("Unable to save '%1'.").arg(QDir::toNativeSeparators(m_filename))); @@ -397,12 +399,13 @@ bool Document::rename() QMessageBox::critical(window(), tr("Sorry"), tr("Unable to overwrite '%1'.").arg(QDir::toNativeSeparators(filename))); return false; } - DocumentWatcher::instance()->removeWatch(this); + DocumentWatcher::instance()->pauseWatch(this); if (!QFile::rename(m_filename, filename)) { - DocumentWatcher::instance()->addWatch(this); + DocumentWatcher::instance()->resumeWatch(this); QMessageBox::critical(window(), tr("Sorry"), tr("Unable to rename '%1'.").arg(QDir::toNativeSeparators(m_filename))); return false; } + DocumentWatcher::instance()->resumeWatch(this); m_filename = filename; save(); updateSaveLocation(); @@ -479,7 +482,6 @@ void Document::print() bool Document::loadFile(const QString& filename, int position) { bool loaded = true; - DocumentWatcher::instance()->removeWatch(this); if (filename.isEmpty()) { m_text->setReadOnly(false); @@ -597,7 +599,7 @@ bool Document::loadFile(const QString& filename, int position) } if (loaded && !m_filename.isEmpty()) { - DocumentWatcher::instance()->addWatch(this); + DocumentWatcher::instance()->updateWatch(this); } return loaded; } @@ -1045,14 +1047,13 @@ void Document::updateWordCount(int position, int removed, int added) if (m_old_states.contains(steps)) { const QPair& state = m_old_states[steps]; if (m_filename != state.first) { - DocumentWatcher::instance()->removeWatch(this); m_filename = state.first; if (m_filename.isEmpty()) { findIndex(); } else { - DocumentWatcher::instance()->addWatch(this); clearIndex(); } + DocumentWatcher::instance()->updateWatch(this); emit changedName(); } if (m_rich_text != state.second) { diff --git a/src/document_watcher.cpp b/src/document_watcher.cpp index 1d3fc6eb..1fdd8b1f 100644 --- a/src/document_watcher.cpp +++ b/src/document_watcher.cpp @@ -22,6 +22,7 @@ #include "document.h" #include +#include #include #include #include @@ -32,6 +33,16 @@ //----------------------------------------------------------------------------- +DocumentWatcher::Details::Details(const QFileInfo& info) : + path(info.canonicalFilePath()), + modified(info.lastModified()), + permissions(info.permissions()), + ignored(false) +{ +} + +//----------------------------------------------------------------------------- + DocumentWatcher* DocumentWatcher::m_instance = 0; //----------------------------------------------------------------------------- @@ -57,34 +68,93 @@ DocumentWatcher::~DocumentWatcher() bool DocumentWatcher::isWatching(const QString& path) const { - return m_watcher->files().contains(QFileInfo(path).canonicalFilePath()); + return m_paths.contains(QFileInfo(path).canonicalFilePath()); } //----------------------------------------------------------------------------- void DocumentWatcher::addWatch(Document* document) { - QString path = QFileInfo(document->filename()).canonicalFilePath(); - if (isWatching(path)) { + if (m_documents.contains(document)) { return; } - m_paths.insert(path, document); - m_watcher->addPath(path); + + // Store document details + QString path = document->filename(); + if (!path.isEmpty()) { + m_documents.insert(document, QFileInfo(path)); + const Details& details = m_documents[document]; + + // Add path + m_paths.insert(details.path, document); + m_watcher->addPath(details.path); + } else { + m_documents.insert(document, Details()); + } +} + +//----------------------------------------------------------------------------- + +void DocumentWatcher::pauseWatch(Document* document) +{ + m_documents[document].ignored = true; } //----------------------------------------------------------------------------- void DocumentWatcher::removeWatch(Document* document) { - // Find path - QString path = m_paths.key(document); - if (path.isEmpty()) { - return; - } + // Remove document details + Details details = m_documents.take(document); // Remove path - m_paths.remove(path); - m_watcher->removePath(path); + if (!details.path.isEmpty()) { + m_watcher->removePath(details.path); + m_paths.remove(details.path); + } +} + +//----------------------------------------------------------------------------- + +void DocumentWatcher::resumeWatch(Document* document) +{ + m_documents[document].ignored = false; + updateWatch(document); +} + +//----------------------------------------------------------------------------- + +void DocumentWatcher::updateWatch(Document* document) +{ + // Update document details + Details& details = m_documents[document]; + QString oldpath = details.path; + QString path = document->filename(); + if (!path.isEmpty()) { + QFileInfo info(path); + details.path = info.canonicalFilePath(); + details.modified = info.lastModified(); + details.permissions = info.permissions(); + } else { + details.path = path; + details.modified = QDateTime(); + details.permissions = 0; + } + + // Update path + if (details.path != oldpath) { + // Remove old path + if (!oldpath.isEmpty()) { + m_watcher->removePath(oldpath); + m_paths.remove(oldpath); + } + + // Add new path + if (!path.isEmpty()) { + m_paths.insert(details.path, document); + m_watcher->addPath(details.path); + } + } } //----------------------------------------------------------------------------- @@ -93,16 +163,26 @@ void DocumentWatcher::processUpdates() { while (!m_updates.isEmpty()) { QString path = m_updates.takeFirst(); - QString filename = "" + QFileInfo(path).fileName() + ""; + QFileInfo info(path); + QString filename = "" + info.fileName() + ""; // Show document Document* document = m_paths.value(path); if (!document) { continue; } + const Details& details = m_documents[document]; + if (details.ignored) { + continue; + } emit showDocument(document); - if (QFile::exists(path)) { + if (info.exists()) { + // Ignore unchanged files + if ((details.modified == info.lastModified()) && (details.permissions == info.permissions())) { + continue; + } + // Process changed file QMessageBox mbox(document->window()); mbox.setIcon(QMessageBox::Warning); @@ -161,7 +241,7 @@ void DocumentWatcher::documentChanged(const QString& path) } m_updates.append(path); if (parent() && (QApplication::activeWindow() == parent())) { - QTimer::singleShot(50, this, SLOT(processUpdates())); + QTimer::singleShot(200, this, SLOT(processUpdates())); } } diff --git a/src/document_watcher.h b/src/document_watcher.h index 1bb7bff2..4de74f1c 100644 --- a/src/document_watcher.h +++ b/src/document_watcher.h @@ -20,17 +20,35 @@ #ifndef DOCUMENT_WATCHER_H #define DOCUMENT_WATCHER_H -#include -#include class Document; +#include +#include +#include +#include #include +class QFileInfo; class QFileSystemWatcher; class DocumentWatcher : public QObject { Q_OBJECT + struct Details + { + Details() : + permissions(0), + ignored(false) + { } + + Details(const QFileInfo& info); + + QString path; + QDateTime modified; + QFile::Permissions permissions; + bool ignored; + }; + public: DocumentWatcher(QObject* parent = 0); ~DocumentWatcher(); @@ -38,7 +56,10 @@ class DocumentWatcher : public QObject bool isWatching(const QString& path) const; void addWatch(Document* document); + void pauseWatch(Document* document); void removeWatch(Document* document); + void resumeWatch(Document* document); + void updateWatch(Document* document); static DocumentWatcher* instance() { @@ -57,6 +78,7 @@ private slots: private: QFileSystemWatcher* m_watcher; + QHash m_documents; QHash m_paths; QList m_updates; static DocumentWatcher* m_instance; From 28d5683f0ae48874a4cc03e42091e84d0f6e4ba5 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 2 May 2013 14:58:04 +0100 Subject: [PATCH 128/630] log changes --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1124436d..1311b72a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +focuswriter (1.4.3.2013.04.15-1) unstable; urgency=low + + * merge upstream maintenance branch + - FIXED: Smart quotes were incorrect after opening punctuation. + - Allow margins smaller than 10 pixels. + + -- Barak A. Pearlmutter Thu, 02 May 2013 14:57:52 +0100 + focuswriter (1.4.3-1) unstable; urgency=low * new upstream release From c2704846c88bca7deb5f572383a77730d206c518 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 13 May 2013 12:18:26 +0100 Subject: [PATCH 129/630] silence lintian vcs-field-not-canonical --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index 399abe83..9dc34286 100644 --- a/debian/control +++ b/debian/control @@ -10,8 +10,8 @@ Build-Depends: debhelper (>= 9), pkg-config Standards-Version: 3.9.4 Homepage: http://gottcode.org/focuswriter/ -Vcs-Git: git://git.debian.org/collab-maint/focuswriter.git -Vcs-Browser: http://git.debian.org/?p=collab-maint/focuswriter.git;a=summary +Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git Package: focuswriter Architecture: any From 1035a3d18aeff61dbe97137ec04f5b6524c15748 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 13 May 2013 12:30:20 +0100 Subject: [PATCH 130/630] desktop keywords patch --- debian/patches/0001-desktop-keywords.patch | 18 ++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 19 insertions(+) create mode 100644 debian/patches/0001-desktop-keywords.patch create mode 100644 debian/patches/series diff --git a/debian/patches/0001-desktop-keywords.patch b/debian/patches/0001-desktop-keywords.patch new file mode 100644 index 00000000..882765ce --- /dev/null +++ b/debian/patches/0001-desktop-keywords.patch @@ -0,0 +1,18 @@ +From: "Barak A. Pearlmutter" +Date: Mon, 13 May 2013 12:27:06 +0100 +Subject: desktop keywords + +silence lintian desktop-entry-lacks-keywords-entry +--- + resources/unix/focuswriter.desktop | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop +index 8eb0767..5493e83 100644 +--- a/resources/unix/focuswriter.desktop ++++ b/resources/unix/focuswriter.desktop +@@ -10,3 +10,4 @@ Exec=focuswriter %F + Terminal=false + MimeType=application/rtf;application/vnd.oasis.opendocument.text;text/plain;text/rtf; + Categories=Qt;Office;WordProcessor; ++Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000..e138985c --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-desktop-keywords.patch From f12a315ab762bc51ca3630cdee3e99a82bcf8747 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 13 May 2013 08:58:34 +0100 Subject: [PATCH 131/630] log changes --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1311b72a..64d1e4f1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +focuswriter (1.4.3.2013.04.25-1) unstable; urgency=low + + * merge upstream maintenance branch + - FIXED: Did not always ignore changes made by program. + * tweak VCS entry in debian/control to appease lintian + * quilt patch that adds keywords to desktop file to appease lintian + + -- Barak A. Pearlmutter Mon, 13 May 2013 12:31:45 +0100 + focuswriter (1.4.3.2013.04.15-1) unstable; urgency=low * merge upstream maintenance branch From 946528e8e5a533254a5cf29a90530783c24cc12a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 6 May 2013 08:02:08 -0400 Subject: [PATCH 132/630] FIXED: Crashed when opening font dropdown in theme dialog. Closes #97. --- ChangeLog | 3 ++ focuswriter.pro | 2 ++ src/font_combobox.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++ src/font_combobox.h | 64 +++++++++++++++++++++++++++++++++++ src/theme_dialog.cpp | 4 +-- src/theme_dialog.h | 6 ++-- 6 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 src/font_combobox.cpp create mode 100644 src/font_combobox.h diff --git a/ChangeLog b/ChangeLog index 60400cd9..e6d70188 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-05-06 Graeme Gott + * FIXED: Crashed when opening font dropdown in theme dialog. + 2013-04-25 Graeme Gott * FIXED: Did not always ignore changes made by program. diff --git a/focuswriter.pro b/focuswriter.pro index 4a43273c..dab40223 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -89,6 +89,7 @@ HEADERS += src/action_manager.h \ src/document_watcher.h \ src/document_writer.h \ src/find_dialog.h \ + src/font_combobox.h \ src/gzip.h \ src/highlighter.h \ src/image_button.h \ @@ -136,6 +137,7 @@ SOURCES += src/action_manager.cpp \ src/document_watcher.cpp \ src/document_writer.cpp \ src/find_dialog.cpp \ + src/font_combobox.cpp \ src/gzip.cpp \ src/highlighter.cpp \ src/image_button.cpp \ diff --git a/src/font_combobox.cpp b/src/font_combobox.cpp new file mode 100644 index 00000000..5031f301 --- /dev/null +++ b/src/font_combobox.cpp @@ -0,0 +1,79 @@ +/*********************************************************************** + * + * Copyright (C) 2013 Graeme Gott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + ***********************************************************************/ + +#include "font_combobox.h" + +#include + +//----------------------------------------------------------------------------- + +FontComboBox::FontComboBox(QWidget* parent) : + QComboBox(parent), + m_system(QFontDatabase::Any) +{ + setEditable(false); + + m_font_model = new QStringListModel(this); + updateModel(); + setModel(m_font_model); + + connect(this, SIGNAL(currentIndexChanged(QString)), this, SLOT(currentFamilyChanged(QString))); +} + +//----------------------------------------------------------------------------- + +void FontComboBox::setWritingSystem(QFontDatabase::WritingSystem system) +{ + m_system = system; + updateModel(); +} + +//----------------------------------------------------------------------------- + +void FontComboBox::setCurrentFont(const QFont& font) +{ + QString family = font.family(); + QStringList families = m_font_model->stringList(); + for (int i = 0; i < families.size(); ++i) { + if (family == families.at(i)) { + setCurrentIndex(i); + break; + } + } +} + +//----------------------------------------------------------------------------- + +void FontComboBox::currentFamilyChanged(const QString& family) +{ + m_current.setFamily(family); + emit currentFontChanged(m_current); +} + +//----------------------------------------------------------------------------- + +void FontComboBox::updateModel() +{ + QFontDatabase database; + QStringList fonts = database.families(m_system); + fonts.sort(); + m_font_model->setStringList(fonts); +} + +//----------------------------------------------------------------------------- diff --git a/src/font_combobox.h b/src/font_combobox.h new file mode 100644 index 00000000..9ce90536 --- /dev/null +++ b/src/font_combobox.h @@ -0,0 +1,64 @@ +/*********************************************************************** + * + * Copyright (C) 2013 Graeme Gott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + ***********************************************************************/ + +#ifndef FONT_COMBOBOX_H +#define FONT_COMBOBOX_H + +#include +#include +class QStringListModel; + +class FontComboBox : public QComboBox +{ + Q_OBJECT + +public: + FontComboBox(QWidget* parent = 0); + + QFont currentFont() const + { + return m_current; + } + + QFontDatabase::WritingSystem writingSystem() const + { + return m_system; + } + + void setWritingSystem(QFontDatabase::WritingSystem system); + +public slots: + void setCurrentFont(const QFont& font); + +signals: + void currentFontChanged(const QFont& font); + +private slots: + void currentFamilyChanged(const QString& family); + +private: + void updateModel(); + +private: + QFont m_current; + QStringListModel* m_font_model; + QFontDatabase::WritingSystem m_system; +}; + +#endif diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index c45b8e55..3bc323f6 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -20,6 +20,7 @@ #include "theme_dialog.h" #include "color_button.h" +#include "font_combobox.h" #include "image_button.h" #include "theme.h" @@ -30,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -173,7 +173,7 @@ ThemeDialog::ThemeDialog(Theme& theme, QWidget* parent) m_text_color->setColor(m_theme.textColor()); connect(m_text_color, SIGNAL(changed(QColor)), this, SLOT(renderPreview())); - m_font_names = new QFontComboBox(tab); + m_font_names = new FontComboBox(tab); m_font_names->setEditable(false); m_font_names->setCurrentFont(m_theme.textFont()); connect(m_font_names, SIGNAL(activated(int)), this, SLOT(fontChanged())); diff --git a/src/theme_dialog.h b/src/theme_dialog.h index fb6ecfd0..d29a2961 100644 --- a/src/theme_dialog.h +++ b/src/theme_dialog.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,13 +21,13 @@ #define THEME_DIALOG_H class ColorButton; +class FontComboBox; class ImageButton; class Theme; #include class QCheckBox; class QComboBox; -class QFontComboBox; class QFrame; class QLabel; class QLineEdit; @@ -82,7 +82,7 @@ private slots: QComboBox* m_foreground_position; ColorButton* m_text_color; - QFontComboBox* m_font_names; + FontComboBox* m_font_names; QComboBox* m_font_sizes; ColorButton* m_misspelled_color; From 7366ca2ad097ece99ccce3442eb964f7ad7bde33 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 31 May 2013 10:57:09 -0400 Subject: [PATCH 133/630] Sync translations with Transifex. --- CREDITS | 3 +- translations/focuswriter_ca.ts | 254 ++-- translations/focuswriter_cs.ts | 254 ++-- translations/focuswriter_da.ts | 254 ++-- translations/focuswriter_de.qm | Bin 28644 -> 33418 bytes translations/focuswriter_de.ts | 350 ++--- translations/focuswriter_el.qm | Bin 31955 -> 34072 bytes translations/focuswriter_el.ts | 302 ++--- translations/focuswriter_en.ts | 254 ++-- translations/focuswriter_es.ts | 254 ++-- translations/focuswriter_es_MX.ts | 254 ++-- translations/focuswriter_fi.ts | 254 ++-- translations/focuswriter_fr.ts | 254 ++-- translations/focuswriter_he.qm | Bin 29242 -> 28263 bytes translations/focuswriter_he.ts | 300 ++--- translations/focuswriter_hu.ts | 254 ++-- translations/focuswriter_id.qm | Bin 0 -> 23170 bytes translations/focuswriter_id.ts | 2023 +++++++++++++++++++++++++++++ translations/focuswriter_it.ts | 254 ++-- translations/focuswriter_ja.ts | 254 ++-- translations/focuswriter_nl.ts | 254 ++-- translations/focuswriter_pl.ts | 254 ++-- translations/focuswriter_pt.ts | 254 ++-- translations/focuswriter_pt_BR.ts | 254 ++-- translations/focuswriter_ro.ts | 254 ++-- translations/focuswriter_ru.qm | Bin 31550 -> 32876 bytes translations/focuswriter_ru.ts | 364 +++--- translations/focuswriter_sk.ts | 254 ++-- translations/focuswriter_sv.ts | 254 ++-- translations/focuswriter_tr.qm | Bin 31706 -> 31722 bytes translations/focuswriter_tr.ts | 252 ++-- translations/focuswriter_uk.ts | 254 ++-- translations/focuswriter_zh_CN.ts | 254 ++-- 33 files changed, 5349 insertions(+), 3325 deletions(-) create mode 100644 translations/focuswriter_id.qm create mode 100644 translations/focuswriter_id.ts diff --git a/CREDITS b/CREDITS index bcacc2ea..0622907e 100644 --- a/CREDITS +++ b/CREDITS @@ -17,8 +17,9 @@ Translators * Aarni (fi) * Jérôme Borme (fr) * Isratine Citizen (he) -* Andrea Bergamasco (it) * Zoltán Adamek (hu) +* Andrea Bergamasco (it) +* Eka Y Saputra (id) * Robert Borst (nl) * Jakub Kowalski (pl) * Jérôme Borme (pt) diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 192ac06a..2de6efca 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Disculpes - + Unable to save '%1'. No s'ha pogut desar '%1'. - + Save File As Anomena i desa - - + + Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - + Rename File Reanomena el fitxer - + Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - + Reload File Torna a carregar el fitxer - + Reload the file %1 from disk? Voleu tornar a carregar el fitxer %1 des del disc? - + All unsaved changes will be lost. Es perdran tots els canvis. - + Reload Torna a carregar - + Plain Text (*.txt) Text pla (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text enriquit (*.rtf) - + All Files (*) Tots els fitxers (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed S'ha canviat el fitxer - + The file %1 was changed by another program. Un altre programa ha modificat el fitxer %1 - + Do you want to reload the file? Este segur que voleu tornar a carregar el fitxer? - + Reload Torna a carregar - + Ignore Ignora - + File Deleted S'ha esborrat el fitxer - + The file %1 was deleted by another program. Un altre programa ha esborrat el fitxer %1 - + Do you want to save or close the file? Voleu tancar o desar el fitxer? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Reemplaça cometes ... - + Please Wait Espereu siusplau @@ -952,12 +952,12 @@ SymbolsModel - + Blocks Blocs - + Scripts Scripts @@ -1398,13 +1398,13 @@ S'estan carregant els Temes - + Loading sounds S'estan carregant els sons - + Untitled Sense títol @@ -1479,24 +1479,24 @@ %1% de l'objectiu diari - + Opening %1 'està obrint %1 - + Question Pregunta - + Save changes? Voleu desar els canvis? - + (Untitled %1) (Sense títol %1) @@ -1577,417 +1577,417 @@ Voleu sobreescriure el fitxer més nou? - + Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - + Please make sure that SDL_mixer is installed. Assegureu-vos que heu instal·lat SDL_mixer - + %1 (Read-Only) %1 (Només lectura) - + &File &Fitxer - + &New &Nou - + &Open... &Obre - + Reloa&d Torna a carregar - + &Save &Desa - + Save &As... Desa &com... - + &Rename... &Reanomena... - + Save A&ll Desa-ho tot - + Manage Sessions Gestiona les sessions - + New Session Nova sessió - + &Print... Im&primeix - + &Close Tan&ca - + &Quit Surt - + Ctrl+Q Ctrl+Q - + &Edit &Edita - + &Undo Desfés - + &Redo &Refés - + Cu&t Talla - + &Copy &Copia - + &Paste Enganxa - + Paste &Unformatted Enganxa sense format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccion&a tot - + Select &Scene Selecciona l'escena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold Negreta - + &Italic Itàlica - + &Underline S&ubratllat - + Stri&kethrough Ratllat - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndex - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndex - + Ctrl+_ Ctrl+_ - + Align &Left Alinea a l'esquerra - + Ctrl+{ Ctrl+{ - + Align &Center Alinea al &Centre - + Ctrl+| Ctrl+| - + Align &Right Alinea a la dreta - + Ctrl+} Ctrl+} - + Align &Justify &Justifica - + Ctrl+J Ctrl+J - + &Decrease Indent &Disminueix el sagnat - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrementa el sagnat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escriure d'esquerra a dreta - + Ri&ght to Left Block Escriure de dreta a esquerra - + &Tools Eines - + &Find... Cerca... - + Find &Next Cerca el següent - + Find Pre&vious Cerca l'anterior - + &Replace... Reemplaça - + Ctrl+R Ctrl+R - + Smart &Quotes Cometes tipogràfiques - + Update &Document Actualitza el document - + Update &Selection Actualitza la selecció - + &Spelling... Ortografia - + F7 F7 - + &Timers... &Temporitzadors - + S&ymbols... S&ímbols... - + &Settings Configuració - + Show &Toolbar Mostra la barra d'eines - + Show &Menu Icons Mostra les icones del menú - + F&ocused Text Text focalitzat - + &Fullscreen Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimitza - + Ctrl+M Ctrl+M - + &Themes... &Temes... - + &Preferences... &Preferències... - + Focus Off No focalitzis - + Focus One Line Focalitza una línia - + Focus Three Lines Focalitza tres línies - + &Paragraph &Paràgraf - + Focus Paragraph Focalitza un paràgraf - + &Help Ajuda - + Application &Language... Idioma de l'aplicació @@ -1997,27 +1997,27 @@ Alguns fitxers no tenen suport i no es podran obrir - + &Off Tanca - + One &Line Una &Línia - + &Three Lines &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 8dadf613..05f31109 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - + Save File As Uložit soubor jako - - + + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Reload File Nahrát soubor znovu - + Reload the file %1 from disk? Nahrát soubor %1 z disku? - + All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - + Reload Nahrát znovu - + Plain Text (*.txt) Prostý text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Soubor změněn - + The file %1 was changed by another program. Soubor %1 změněn jiným programem. - + Do you want to reload the file? Chcete soubor nahrát znovu? - + Reload Nahrát znovu - + Ignore Přehlížet - + File Deleted Soubor smazán - + The file %1 was deleted by another program. Soubor %1 byl smazán jiným programem. - + Do you want to save or close the file? Chcete soubor uložit nebo zavřít? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Nahrazují se uvozovky... - + Please Wait Počkejte, prosím @@ -952,12 +952,12 @@ SymbolsModel - + Blocks Bloky - + Scripts Skripty @@ -1398,13 +1398,13 @@ Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - + Untitled Bez názvu @@ -1479,24 +1479,24 @@ %1% z denního cíle - + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - + (Untitled %1) (Bez názvu %1) @@ -1577,417 +1577,417 @@ Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit Úp&ravy - + &Undo &Zpět - + &Redo Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... @@ -1997,27 +1997,27 @@ Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index d44cd08d..cb64164c 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - + Save File As Gem fil som - - + + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Reload File Genindlæs fil - + Reload the file %1 from disk? Genindlæs filen %1 fra disk? - + All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - + Reload Genindlæs - + Plain Text (*.txt) Ren tekst (*.txt) - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Fil ændret - + The file %1 was changed by another program. Filen %1 blev ændret af et andet program. - + Do you want to reload the file? Ønsker du at genindlæse filen? - + Reload Genindlæs - + Ignore Ignorer - + File Deleted Fil slettet - + The file %1 was deleted by another program. Filen %1 blev slettet af et andet program. - + Do you want to save or close the file? Ønsker du at gemme eller lukke filen? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Erstatter citatonstegn... - + Please Wait Vent venligst @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blokke - + Scripts Scripts @@ -1397,13 +1397,13 @@ Indlæser temaer - + Loading sounds Indlæser lyde - + Untitled Uden titel @@ -1478,24 +1478,24 @@ %1% af dagligt mål - + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - + (Untitled %1) (Uden titel%1) @@ -1576,417 +1576,417 @@ Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog @@ -1996,27 +1996,27 @@ Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm index 96a50f0092612dc211b89c944dd93aa37cff5a56..c435c8337ecb24ece806008ee5d7073482328147 100644 GIT binary patch delta 6636 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 MLE3V!`YYA{0azrU^8f$< delta 2838 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 Ns9T+5s#$Z3{Xe=LEujDa diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index f92f835b..698189e6 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - + Save File As Datei speichern unter - - + + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Reload File Datei neu laden - + Reload the file %1 from disk? Die Datei %1 von der Festplatte neu laden? - + All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - + Reload Neu laden - + Plain Text (*.txt) nur Text (*.txt) - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) @@ -122,44 +122,44 @@ DocumentWatcher - + File Changed Datei geändert - + The file %1 was changed by another program. - + Die Datei %1 wurde von einem anderen Programm geändert. - + Do you want to reload the file? - + Wollen Sie die Datei neu laden? - + Reload Neu laden - + Ignore - + Ignorieren - + File Deleted - + Die Datei wurde gelöscht - + The file %1 was deleted by another program. - + Die Datei %1 wurde von einem anderen Programm gelöscht. - + Do you want to save or close the file? - + Wollen Sie die Datei speichern oder schliessen? @@ -376,12 +376,12 @@ Shortcuts - + Shortcuts One or more shortcuts conflict. Do you wish to proceed? - + Eine oder mehrere Verknüpfungen Konflikte. Möchten Sie fortfahren? @@ -452,12 +452,12 @@ Scenes - + Szenen Divider: - + Teiler: @@ -582,17 +582,17 @@ Command - + Befehl Shortcut - + Shortcut Action - + Befehl @@ -660,58 +660,58 @@ Ctrl+Shift+Down - + Strg+Shift+Bild nach unten Move Scenes Up - + Szenen nach oben verschieben Ctrl+Shift+Up - + Strg+Shift+Up Toggle Scene List - + Toggle Szene Liste Shift+F4 - + Shift+F4 Show scene list (%1) - + Szeneliste anzeigen (%1) Hide scene list (%1) - + Szeneliste verstecken (%1) Filter - + Filter Move Scenes Down - + Szenen nach unten verschieben Resize scene list - + Größe der Szeneliste ändern Session - + @@ -825,29 +825,29 @@ Clear - + Leeren Reset to Default - + Auf Standard zurücksetzen Shortcut: - + Shortcut: SmartQuote - + Replacing quotation marks... Anführungszeichen werden ersetzt... - + Please Wait Bitte warten @@ -920,22 +920,22 @@ Symbols - + Symbole Recently used symbols - + Zuletzt verwendete Symbole All symbols - + Alle Symbole Details - + Details @@ -945,20 +945,20 @@ Insert - + Einfügen SymbolsModel - + Blocks - + Blöcke - + Scripts - + Skripte @@ -1397,13 +1397,13 @@ Themen werden geladen - + Loading sounds Sounds werden geladen - + Untitled Unbenannt @@ -1478,51 +1478,51 @@ %1% des Tagesziels - + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - + (Untitled %1) (Unbenannt %1) Switch to Next Document - + Ins nächste Dokument übergehen Switch to Previous Document - + Ins vorherige Dokument übergehen Switch to First Document - + Ins erste Dokument übergehen Switch to Last Document - + Ins letzte Dokument übergehen Switch to Document %1 - + Ins Dokument %1 übergehen @@ -1576,447 +1576,447 @@ Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. - + Bitte stellen Sie sicher, dass SDL_mixer installiert ist. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d - + Neuladen - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene - + Szene auswählen - + Ctrl+Shift+A - + Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + S&ymbols... - + Symbole... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off - + Fokus Aus - + Focus One Line - + Fokus EIne Zeile - + Focus Three Lines - + Fokus Drei Zeilen - + &Paragraph &Absatz - + Focus Paragraph - + Fokus Absatz - + &Help &Hilfe - + Application &Language... &Sprache... Some files were unsupported and could not be opened. - + Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm index 95cfd98d9aa78d322b3a59dc32ce81b4a8fb3204..d863e2879f8ed0f4f98dcc4d7cb9c796ea39b1a7 100644 GIT binary patch delta 4573 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 delta 2960 zcmXAreO!+B9>>4e(NkWQ5DO)$Cgh;zPE2XTEJe`UHoyIAgyOt;_4DTz578HZqh!$TU^1rBX!Chi&aUT~({1@#+ zNu|Ws^Z4cr@of=Ak{1a+cs{e6gr$*0u1moqL=LVb9DhnAhXs+TbS%+AZ!#VIJD5+V zp$TGnGPQYuAs{Bw)sX3Tf85_8pS{&Yiwel65aSjlk&m^7C_ajOn(=&z8_jXNG^`+p)z@u&D^6Oq}S z7Vjz`3hGigYdS6KN5r$gqC`79pHoPQnV({zXobd;3O%qC*zDN5z15-qc*%E5(1Qzp~ZFMlH% zIh;DY@`>D!QdjFsqQ4DL?-V1EFot3FZYRn-%lNh5C2~q;{0r9*jh~>)~8Q_ z;40brVg#IQX4_}`5k=RrKb=PaZ{25ab$g;xFWIi~Z$Y@%*vAhM$f^Rizr_*nKj$30 zi%=;O=PO}8-i4c5*^Buva&qwHE|fNxv-}m&er|I$S`oU1d+*sXu!;NNHUbPu<*eKU zB39rk$KQddWUeLw6UH9qYWBeq&X>9Rjw?joo!sSD1_YYH{XFmoQRD~Qode}W)62Pg z1|&4>1otc#&lhBJuR3BN#*buPd-@3?cIUmN1c+lbA6a2X->(P1s65)CHi_~I+?ddH4shvi9Z^ch!(Z+RYkuOEq?_*B1)V9 zLcCM~zQFxb5ZXzUcj2NR7d3pOB{;6yN!KknTM zzcc)CUzB#zeuYuNeC?SOXvvZP`m`5BYf(6p+Y5%f)u>>h5b**D1s)V4t2;2RQ;0ja9R7E)6Ly{`BAR?r z*n4m>L^W3^oVEeI?pLTCEfmgcfoh*9oV`t9WSmg=#x#7FFId}NhaLTdPj}X0U+@$@ zZEnK-8sX4R^xoGhRK%bH9=jFJu?Q891BjN+6izfX!T=6TYAy5hxgI>hI?s4J_?kOt1LX5g4M`7SR(fkrL?+_EegI%28 z7gtrl9<#m_vm6^?zYH>21W3q@6yX zK6|2->8cR@Mobu_TGVzOs&-UmJ;1^vUQ=c3cN2|jP_6qN0SDh!ZIK6w(hsQ0>QG6G zNma$PB7tsIm5BF__f^Ngx4<1Ks`_*e`$3$l+v7K^m!o!8A45qqhO1o%H$xne>VPNk z>HNOpeJW?!tWNKp1c{wgZyS2+c}AT-u#U)>tuA?IG|^fgb(wK0QI=JGG!~voexz=S zFF_bf)EB(aaot_@h4E01{&jV0GmpCUtK07(eE($%Q`W2h9C-~Jb)!Z|+72_jYux*h z)^v-;bBNk$V>MnDXw}$TJWD-J9@nO^nwzn|zR;8>K+6746{g(MG-4-V(Jg{GPD%PM%P-^g-lu%>KzoinH5fs zRT$}_&>W{QT2h#{PWNLk6mA!;>kXTLlk1qScij?n^c~&9MpSrauEdw25~==@(=a3u z^$3)4F@Krl6bdewD7iNyfVi7dU_&i3_LD+iK0-w%N#?Uq-t0S4;tyk?*di&d>Ikg$ zgOnNLflMYy8`6(szrH4IWE*kTH%gT!q1b?6>C7LfY`iQr+(gU5zmRUsb;UfPQs;RN zn-3@5miq^An4gty57DPc`Xe8`89qY#-(&>B Document - - - - + + + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το «%1». - + Save File As Αποθήκευση Αρχείου Ως - - + + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το «%1». - + Rename File Μετονομασία Αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το «%1». - + Reload File Επαναφόρτωση Αρχείου - + Reload the file %1 from disk? Επαναφόρτωση του αρχείου «%1» από τον δίσκο; - + All unsaved changes will be lost. Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. - + Reload Επαναφόρτωση - + Plain Text (*.txt) Απλό Κείμενο (*.txt) - + Question Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; - + OpenDocument Text (*.odt) Κείμενο OpenDocument (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Αρχείο Έχει Αλλάξει - + The file %1 was changed by another program. Το αρχείο %1 έχει αλλαχθεί από άλλο πρόγραμμα. - + Do you want to reload the file? Θέλετε να επαναφορτώσετε το αρχείο; - + Reload Επαναφόρτωση - + Ignore Αγνόηση - + File Deleted Αρχείο Διεγράφει - + The file %1 was deleted by another program. Το αρχείο «%1» διεγράφη από άλλο πρόγραμμα. - + Do you want to save or close the file? Θέλετε να αποθηκεύσετε ή να κλείσετε το αρχείο; @@ -187,7 +187,7 @@ Regular expressions - + Κανονικές εκφράσεις @@ -665,7 +665,7 @@ Move Scenes Up - + Μετακίνηση Σκηνές Up προς τα πάνω @@ -675,7 +675,7 @@ Toggle Scene List - + Εναλλαγή Λίστας Σκηνων @@ -685,12 +685,12 @@ Show scene list (%1) - + Εμφάνιση λίστας σκηνης (%1) Hide scene list (%1) - + Απόκρυψη λίστας σκηνής (%1) @@ -700,18 +700,18 @@ Move Scenes Down - + Μετακίνηση σκηνων προς τα κάτω Resize scene list - + Αλλαγή μεγέθους λίστας σκηνών Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Αντικατάσταση εισαγωγικών... - + Please Wait Περιμένετε @@ -862,27 +862,27 @@ &Add - + Προσθήκη &Ignore - + Αγνόηση I&gnore All - + Παράβλεψη όλων &Change - + Αλλαγή C&hange All - + Αλλαγή όλων @@ -951,14 +951,14 @@ SymbolsModel - + Blocks - + Μπλοκ - + Scripts - + Σκριπτ @@ -1146,7 +1146,7 @@ Indent First Line: - + Εσοχή πρώτης γραμμής: @@ -1397,13 +1397,13 @@ Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - + Untitled Χωρίς τίτλο @@ -1478,24 +1478,24 @@ %1% του ημερήσιου στόχου - + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - + (Untitled %1) (Χωρίς τίτλο %1) @@ -1576,447 +1576,447 @@ Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d Επαναφόρτωσ&η - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + New Session Νέα Περίοδος Λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted - + Επικόλληση χωρίς μορφοποίηση - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Επιλογή όλ&ων - + Select &Scene - + Επιλογή σκηνης - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript Δεί&κτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη γραφή - + Ri&ght to Left Block Αριστερόστρο&φη γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &επόμενου - + Find Pre&vious Εύρεση &προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + S&ymbols... - + Συμβολα... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση γραμμής εργα&λείων - + Show &Menu Icons Εμφάνιση εικονιδίων &μενού - + F&ocused Text - + F&ocused Κείμενο - + &Fullscreen Πλήρης οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off Εστίαση Ανένεργη - + Focus One Line Εστίαση Μίας Γραμμής - + Focus Three Lines Εστίαση Τριών Γραμμών - + &Paragraph - + Παραγραφος - + Focus Paragraph Εστίαση Παραγράφου - + &Help &Βοήθεια - + Application &Language... &Γλώσσα εφαρμογής... Some files were unsupported and could not be opened. - + Ορισμένα αρχεία δεν υποστηρίζονται και δεν θα ανοιχτούν. - + &Off - + Απενεργοποιηση - + One &Line - + Μία Γραμμή - + &Three Lines - + Τρεις Γραμμές - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index aa8690cd..e7b25777 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed - + The file %1 was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... - + Please Wait @@ -951,12 +951,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1397,13 +1397,13 @@ - + Loading sounds - + Untitled @@ -1478,24 +1478,24 @@ - + Opening %1 - + Question - + Save changes? - + (Untitled %1) @@ -1576,417 +1576,417 @@ - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... @@ -1996,27 +1996,27 @@ - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index f3129600..ec8cb055 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Aviso - + Unable to save '%1'. No se puede guardar «%1». - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobrescribir «%1». - + Rename File Renombrar el archivo - + Unable to rename '%1'. No se puede renombrar «%1». - + Reload File Volver a cargar el archivo - + Reload the file %1 from disk? ¿Desea volver a cargar el archivo %1 del disco? - + All unsaved changes will be lost. Se perderán todos los cambios no guardados. - + Reload Volver a cargar - + Plain Text (*.txt) Texto plano (*.txt) - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Archivo modificado - + The file %1 was changed by another program. El archivo %1 ha sido modificado por otro programa. - + Do you want to reload the file? ¿Desea volver a cargarlo? - + Reload Volver a cargar - + Ignore Ignorar - + File Deleted Archivo eliminado - + The file %1 was deleted by another program. El archivo %1 ha sido eliminado por otro programa. - + Do you want to save or close the file? ¿Desea guardar o cerrar el archivo? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Reemplazando comillas... - + Please Wait Espere un momento @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Bloques - + Scripts Secuencias @@ -1397,13 +1397,13 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título @@ -1478,24 +1478,24 @@ %1% del objetivo diario - + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - + (Untitled %1) (Sin título %1) @@ -1576,417 +1576,417 @@ ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close C&errar - + &Quit Sali&r - + Ctrl+Q Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All &Seleccionar todo - + Select &Scene Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl + K - + Sup&erscript Su&períndice - + Ctrl+^ Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block &Escribir de izquierda a derecha - + Ri&ght to Left Block Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + S&ymbols... Símb&olos… - + &Settings &Configuración - + Show &Toolbar Mo&strar barra de herramientas - + Show &Menu Icons M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help &Ayuda - + Application &Language... &Idioma de la aplicación... @@ -1996,27 +1996,27 @@ Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index c1343568..31cc6d37 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Texto Plano (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed - + The file %1 was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Reemplazando comillas... - + Please Wait Por favor espere @@ -951,12 +951,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1397,13 +1397,13 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título @@ -1478,24 +1478,24 @@ %1% de la meta diaria - + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - + (Untitled %1) (Sin título %1) @@ -1576,417 +1576,417 @@ ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleccionar &todo - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + S&ymbols... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help A&yuda - + Application &Language... &Idioma de aplicación... @@ -1996,27 +1996,27 @@ - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 9a5bd7f9..31352e2f 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Pahoittelut - + Unable to save '%1'. %1 - tallentaminen epäonnistui. - + Save File As Tallenna nimellä - - + + Unable to overwrite '%1'. Ei voitu korvata "%1". - + Rename File Uudelleennimeä - + Unable to rename '%1'. Ei voitu nimetä uudelleen "%1". - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Teksti (*.txt) - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed - + The file %1 was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Korvataan lainausmerkkejä... - + Please Wait Odota @@ -951,12 +951,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1397,13 +1397,13 @@ Ladataan teemoja - + Loading sounds Ladataan ääniä - + Untitled Nimetön @@ -1478,24 +1478,24 @@ %1% päivittäisestä tavoiteesta - + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - + (Untitled %1) (Nimetön %1) @@ -1576,417 +1576,417 @@ Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Ei pystytty lataamaan kirjoituskoneääniä. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa... - + Reloa&d - + &Save &Tallenna - + Save &As... Tallenna &nimellä... - + &Rename... &Nimeä uudelleen... - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... &Tulosta... - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t Leik&kaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &Muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse kaikki - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Muo&toile - + &Bold &Lihavoitu - + &Italic &Kursivoitu - + &Underline &Alleviivattu - + Stri&kethrough Yli&viivattu - + Ctrl+K Ctrl+K - + Sup&erscript Ylä&indeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vasemm&alta oikealle - + Ri&ght to Left Block Oike&alta vasemmalle - + &Tools &Työkalut - + &Find... &Etsi... - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa... - + Ctrl+R Ctrl+R - + Smart &Quotes Alykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus... - + F7 F7 - + &Timers... &Ajastimet... - + S&ymbols... - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalut - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen &Koko näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... &Teemat... - + &Preferences... &Asetukset... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph &Kappale - + Focus Paragraph - + &Help &Ohje - + Application &Language... Sovelluksen &kieli... @@ -1996,27 +1996,27 @@ - + &Off P&ois - + One &Line &Yksi rivi - + &Three Lines &Kolme riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 7a93299c..a7d250e7 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - + Save File As Enregistrer sous - - + + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Reload File Recharger le fichier - + Reload the file %1 from disk? Voulez-vous recharger le fichier %1 depuis le disque ? - + All unsaved changes will be lost. Toutes les modifications non sauvegardées seront perdues. - + Reload Rechargement - + Plain Text (*.txt) Texte brut (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? - + OpenDocument Text (*.odt) Texte OpenDocument (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Fichier modifié - + The file %1 was changed by another program. Le fichier %1 a été modifié par un autre programme. - + Do you want to reload the file? Voulez-vous recharger le fichier ? - + Reload Recharger - + Ignore Ignorer - + File Deleted Fichier supprimé - + The file %1 was deleted by another program. Le fichier %1 a été supprimé par un autre programme. - + Do you want to save or close the file? Voulez-vous sauvegarder ou fermer le fichier ? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Remplacement des guillemets... - + Please Wait Veuillez patienter @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blocs - + Scripts Scripts @@ -1397,13 +1397,13 @@ Chargement des thèmes - + Loading sounds Chargement des sons - + Untitled Sans titre @@ -1478,24 +1478,24 @@ %1 % de l'objectif quotidien - + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - + (Untitled %1) (Sans titre %1) @@ -1576,417 +1576,417 @@ Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... @@ -1996,27 +1996,27 @@ Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index 45e4e03896c3da4e00e6781eac525514991ff878..f74b288026a005c62d5769ffce208f3ec7765ef7 100644 GIT binary patch delta 3080 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 diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 512e2395..d38aa91a 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -29,92 +29,92 @@ Ctrl+D - Ctrl+D + Document - - - - + + + + Sorry צר לי - + Unable to save '%1'. לא ניתן לשמור '%1'. - + Save File As שמירת קובץ בשם - - + + Unable to overwrite '%1'. לא ניתן להחליף את '%1'. - + Rename File שינוי שם קובץ - + Unable to rename '%1'. לא ניתן לשנות שם '%1'. - + Reload File טעינת קובץ מחדש - + Reload the file %1 from disk? לטעון את הקובץ %1 מחדש מתוך כונן? - + All unsaved changes will be lost. כל השינויים שלא נשמרו יאבדו. - + Reload טעינה מחדש - + Plain Text (*.txt) תמליל גלוי ‪(*.txt) - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? - + OpenDocument Text (*.odt) תמליל ‫OpenDocument ‫(‭*.odt‬) - + Rich Text (*.rtf) תמליל עשיר ‪(*.rtf) - + All Files (*) כל הקבצים (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed קובץ שונה - + The file %1 was changed by another program. הקובץ %1 שונה על ידי תוכנית אחרת. - + Do you want to reload the file? האם ברצונך להטעין את הקובץ מחדש? - + Reload טעינה מחדש - + Ignore התעלם מן אירוע - + File Deleted קובץ נמחק - + The file %1 was deleted by another program. הקובץ %1 נמחק על ידי תוכנית אחרת. - + Do you want to save or close the file? האם ברצונך לשמור או לסגור את הקובץ? @@ -260,7 +260,7 @@ Check Spelling... - בדוק איות... + בדיקת איות... @@ -711,7 +711,7 @@ Session - + @@ -807,17 +807,17 @@ Ctrl+Shift+N - Ctrl+Shift+N + &Manage... - &נהל... + &ניהול... Ctrl+Shift+M - Ctrl+Shift+M + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... מחליף כעת סימני מרכאות... - + Please Wait נא להמתין @@ -951,12 +951,12 @@ SymbolsModel - + Blocks בלוקים - + Scripts תסריטים @@ -1397,13 +1397,13 @@ מטעין כעת מוטיבים - + Loading sounds מטעין כעת צלילים - + Untitled ללא כותרת @@ -1478,24 +1478,24 @@ %1% מן היעד היומי - + Opening %1 ‫‭%1‬ נפתח כעת - + Question שאלה - + Save changes? לשמור שינויים? - + (Untitled %1) (ללא כותרת %1) @@ -1576,417 +1576,417 @@ להחליף קובץ חדש? - + Unable to load typewriter sounds. לא ניתן לטעון צלילי מכונת כתיבה. - + Please make sure that SDL_mixer is installed. נא לוודא שהרכיב SDL_mixer הינו מותקן. - + %1 (Read-Only) %1 (לקריאה-בלבד) - + &File &קובץ - + &New &חדש - + &Open... &פתיחה... - + Reloa&d &טען מחדש - + &Save &שמור - + Save &As... שמירה &בשם... - + &Rename... - ש&נה שם... + שי&נוי שם... - + Save A&ll שמור ה&כל - + Manage Sessions ניהול סשנים - + New Session סשן חדש - + &Print... ה&דפסה... - + &Close - &סגירה + &סגור - + &Quit י&ציאה - + Ctrl+Q - Ctrl+Q + - + &Edit ע&ריכה - + &Undo בט&ל - + &Redo ב&צע שוב - + Cu&t &גזור - + &Copy הע&תק - + &Paste ה&דבק - + Paste &Unformatted הדבק בלי &עיצוב - + Ctrl+Shift+V - Ctrl+Shift+V + - + Select &All בחר ה&כל - + Select &Scene בחר &מקטע - + Ctrl+Shift+A - Ctrl+Shift+A + - + Fo&rmat עי&צוב - + &Bold &מודגש - + &Italic &נטוי - + &Underline &קו תחתון - + Stri&kethrough קו &חוצה - + Ctrl+K - Ctrl+K + - + Sup&erscript כיתוב &עילי - + Ctrl+^ - Ctrl+^ + - + &Subscript כיתוב &תחתי - + Ctrl+_ - Ctrl+_ + - + Align &Left יישור &שמאל - + Ctrl+{ - Ctrl+{ + - + Align &Center יישור מ&רכז - + Ctrl+| - Ctrl+| + - + Align &Right יישור &ימין - + Ctrl+} - Ctrl+} + - + Align &Justify יישור מ&אוזן - + Ctrl+J - Ctrl+J + - + &Decrease Indent &צמצום שוליים - + Ctrl+< - Ctrl+< + - + I&ncrease Indent &גידול שוליים - + Ctrl+> - Ctrl+> + - + Le&ft to Right Block בלוק שמ&אל אל ימין - + Ri&ght to Left Block בלוק י&מין אל שמאל - + &Tools &כלים - + &Find... - &מצא... + &חיפוש... - + Find &Next מצא את ה&בא - + Find Pre&vious מצא את ה&קודם - + &Replace... - ה&חלף... + &החלפה... - + Ctrl+R - Ctrl+R + - + Smart &Quotes מר&כאות חכמות - + Update &Document עדכן &מסמך - + Update &Selection עדכן &בחירה - + &Spelling... &איות... - + F7 F7 - + &Timers... &שעוני עצר... - + S&ymbols... &סמלים... - + &Settings &הגדרות - + Show &Toolbar הצג &סרגל כלים - + Show &Menu Icons הצג &צלמיות תפריט - + F&ocused Text תמליל ממור&כז - + &Fullscreen &מסך מלא - + F11 F11 - + Esc Esc - + M&inimize מ&זער - + Ctrl+M - Ctrl+M + - + &Themes... מו&טיבים... - + &Preferences... &העדפות... - + Focus Off כיבוי מרכוז - + Focus One Line מרכוז שורה אחת - + Focus Three Lines מרכוז שלוש שורות - + &Paragraph &פסקה - + Focus Paragraph מרכוז פסקה - + &Help &עזרה - + Application &Language... &שפת יישום... @@ -1996,27 +1996,27 @@ קבצים מסוימים לא נתמכו ולא ניתן היה לפתוחם. - + &Off &כבוי - + One &Line שורה &אחת - + &Three Lines &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 3756bf42..4d2cfca2 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - + Save File As Mentés másként - - + + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + Question Kérdés - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed - + The file %1 was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? @@ -710,7 +710,7 @@ Session - + @@ -841,12 +841,12 @@ SmartQuote - + Replacing quotation marks... Idézőjelek cseréje... - + Please Wait Kérlek várj @@ -950,12 +950,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1396,13 +1396,13 @@ Témák betöltése - + Loading sounds Hangok betöltése - + Untitled Névtelen @@ -1477,24 +1477,24 @@ A napi cél %1%-a - + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - + (Untitled %1) (Névtelen %1) @@ -1575,417 +1575,417 @@ Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + S&ymbols... - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... @@ -1995,27 +1995,27 @@ - + &Off - + One &Line - + &Three Lines - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_id.qm b/translations/focuswriter_id.qm new file mode 100644 index 0000000000000000000000000000000000000000..6eb729cbebe4c5f069cac13c9b1abb5021d9a20c GIT binary patch literal 23170 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 + + + + Alert + + + Close (%1) + + + + + Collapse + Tutup + + + + Expand + Buka + + + + AlertLayer + + + Dismiss Alert + + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Maaf + + + + Unable to save '%1'. + Gagal menyimpan '%1'. + + + + Save File As + Simpan File Sebagai + + + + + Unable to overwrite '%1'. + Gagal memperbarui '%1'. + + + + Rename File + Ubah Nama File + + + + Unable to rename '%1'. + Gagal mengubah nama '%1'. + + + + Reload File + + + + + Reload the file %1 from disk? + + + + + All unsaved changes will be lost. + + + + + Reload + + + + + Plain Text (*.txt) + Teks Biasa (*.txt) + + + + Question + Pertanyaan + + + + Saving as plain text will discard all formatting. Discard formatting? + + + + + OpenDocument Text (*.odt) + Teks OpenDocument (*.odt) + + + + Rich Text (*.rtf) + Rich Text (*.rtf) + + + + All Files (*) + Semua File (*) + + + + DocumentWatcher + + + File Changed + + + + + The file %1 was changed by another program. + + + + + Do you want to reload the file? + + + + + Reload + + + + + Ignore + + + + + File Deleted + + + + + The file %1 was deleted by another program. + + + + + Do you want to save or close the file? + + + + + FindDialog + + + Search for: + Cari: + + + + Replace with: + Gantikan dengan: + + + + Ignore case + Abaikan jenis huruf (kapital/kecil) + + + + Whole words only + Hanya keseluruhan kata + + + + Regular expressions + + + + + Search up + Cari ke atas + + + + Search down + Cari ke bawah + + + + &Find + + + + + &Replace + + + + + Replace &All + + + + + Find + Temukan + + + + Replace + Gantikan + + + + Replace %n instance(s)? + + Gantikan %n lainnya? + + + + + Question + Pertanyaan + + + + + Sorry + Maaf + + + + + Phrase not found. + Frase tidak ditemukan. + + + + Highlighter + + + Add + Tambahkan + + + + Check Spelling... + Cek Ejaan... + + + + (No suggestions found) + (Saran tidak ditemukan) + + + + ImageButton + + + Open Image + Buka Gambar + + + + Images(%1) + Gambar(%1) + + + + LocaleDialog + + + Select application language: + Pilih bahasa: + + + + <System Language> + <System Language> + + + + Note + Catatan + + + + Please restart this application for the change in language to take effect. + Silakan tutup dan buka kembali aplikasi ini untuk menerapkan perubahan bahasa. + + + + PreferencesDialog + + + Preferences + Preferensi + + + + General + Umum + + + + Statistics + Statistik + + + + Toolbar + Bilah Peralatan + + + + Spell Checking + Pemeriksaan Ejaan + + + + Select Dictionary + Pilih Kamus + + + + + Sorry + Maaf + + + + Unable to open archive. + Gagal membuka arsip. + + + + Unable to read archive metadata. + Gagal membaca metadata arsip. + + + + The archive does not contain a usable dictionary. + Arsip ini tidak memiliki kamus yang bisa dipergunakan. + + + + Unable to open file '%1'. + Gagal membuka file '%1'. + + + + Unable to close file '%1'. + Gagal menutup file '%1'. + + + + + Question + Pertanyaan + + + + Shortcuts + + + + + One or more shortcuts conflict. Do you wish to proceed? + + + + + The dictionary "%1" already exists. Do you want to replace it? + Kamus "%1" sudah ada. Anda ingin menggantikannya? + + + + Daily Goal + Target Harian + + + + None + Tak satupun + + + + Minutes: + Menit: + + + + + Words: + Kata: + + + + Editing + Mengedit + + + + Always vertically center + Selalu tengah secara vertikal + + + + Block insertion cursor + Blok kursor sisipan + + + + Smooth fonts + Font halus + + + + Typewriter sounds + Suara Mesin Ketik + + + + Smart quotes: + Kutipan cerdas: + + + + Double + Ganda + + + + Single + Tunggal + + + + Scenes + + + + + Divider: + + + + + Saving + Menyimpan + + + + Automatically save changes + Menyimpan perubahan secara otomatis + + + + Remember cursor position + Ingat posisi kursor + + + + Contents + Isi + + + + Word count + Jumlah kata + + + + Page count + Jumlah halaman + + + + Paragraph count + Jumlah paragraf + + + + Character count + Jumlah karakter + + + + Page Size + Ukuran Halaman + + + + Characters: + Karakter: + + + + Paragraphs: + Paragraf: + + + + Word Count Algorithm + Algoritma Penjumlahan Kata + + + + Detect word boundaries + Deteksi batas-batas kata + + + + Divide character count by six + Bagikan jumlah karakter dengan 6 + + + + Style + Gaya + + + + Icons Only + Ikon saja + + + + Text Only + Teks saja + + + + Text Alongside Icons + Teks dan Ikon + + + + Text Under Icons + Teks di bawah Ikon + + + + Text Position: + Posisi Teks: + + + + Actions + Tindakan: + + + + Move Up + Naik + + + + Move Down + Turun + + + + Add Separator + Tambahkan Pemisah + + + + Command + + + + + Shortcut + + + + + Action + + + + + Check spelling as you type + Cek ejaan saat Anda mengetik + + + + Ignore words in UPPERCASE + Abaikan kata dalam huruf KAPITAL + + + + Ignore words with numbers + Abaikan kata dengan angka + + + + Language + Bahasa + + + + + Add + Tambahkan + + + + Remove + Hapus + + + + Personal Dictionary + Kamus Pribadi + + + + Reader + + + + Not a supported RTF file. + Bukan file RTF yng didukung. + + + + Unable to open archive. + Gagal membuka arsip. + + + + Unable to open file '%1'. + Gagal membuka file '%1'. + + + + Unable to close file '%1'. + Gagal menutup file '%1'. + + + + SceneList + + + Ctrl+Shift+Down + + + + + Move Scenes Up + + + + + Ctrl+Shift+Up + + + + + Toggle Scene List + + + + + Shift+F4 + + + + + Show scene list (%1) + + + + + Hide scene list (%1) + + + + + Filter + + + + + Move Scenes Down + + + + + Resize scene list + + + + + Session + + + + + + + + + Default + Setelan Standar + + + + SessionManager + + + Manage Sessions + Kelola Sesi + + + + S&essions + S&esi + + + + New + Baru + + + + Rename + Ubah Nama + + + + Clone + Klon + + + + Delete + Hapus + + + + Switch To + Pindah Ke + + + + New Session + Sesi Baru + + + + Clone Session + Klon Sesi + + + + Rename Session + Ubah Nama Sesi + + + + Question + Pertanyaan + + + + Delete selected session? + Hapus sesi terpilih? + + + + Session name: + Judul sesi: + + + + Sorry + Maaf + + + + The requested session name is already in use. + Nama sesi sudah pernah dipakai. + + + + &New... + &Baru... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Kelola... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + + + + + Reset to Default + + + + + + Shortcut: + + + + + SmartQuote + + + Replacing quotation marks... + Mengganti tanda kutip... + + + + Please Wait + Mohon Tunggu + + + + SpellChecker + + + Check Spelling + Memeriksa Ejaan + + + + &Add + + + + + &Ignore + + + + + I&gnore All + + + + + &Change + + + + + C&hange All + + + + + Not in dictionary: + Tak ada dalam kamus: + + + + Change to: + Ubah menjadi: + + + + Checking spelling... + Memeriksa ejaan... + + + + Cancel + Batalkan + + + + Please wait + Silakan tunggu + + + + Spell check complete. + Ejaan selesai diperiksa. + + + + SymbolsDialog + + + Symbols + + + + + Recently used symbols + + + + + All symbols + + + + + Details + + + + + Name: + Nama: + + + + Insert + + + + + SymbolsModel + + + Blocks + + + + + Scripts + + + + + Theme + + + Untitled %1 + Tanpa Judul %1 + + + + ThemeDialog + + + Modify Theme + Atur Tema + + + + Name: + Nama: + + + + Background + Latarbelakang + + + + No Image + Tanpa gambar + + + + Tiled + Berjajar + + + + + Centered + Terpusat + + + + + Stretched + Terhampar + + + + Scaled + Terskala + + + + Zoomed + Di-zoom + + + + Remove + Buang + + + + Type: + Tipe: + + + + + + Color: + Warna: + + + + Image: + Gambar: + + + + Foreground + Latardepan + + + + Opacity + Transparansi + + + + + + + pixels + piksel + + + + Left + Kiri + + + + Right + Kanan + + + + Position + Posisi + + + + Size: + Ukuran: + + + + Rounding: + Pembulatan: + + + + Margin: + Marjin luar: + + + + Padding: + Marjin dalam: + + + + Text + Teks + + + + Font: + Font: + + + + Misspelled: + Keliru eja: + + + + Spacings + + + + + Line Spacing + + + + + Single + Tunggal + + + + 1.5 Lines + + + + + Double + Ganda + + + + Proportional + + + + + Paragraph Spacing + + + + + Indent First Line: + + + + + Pixels Above: + + + + + Pixels Below: + + + + + The quick brown fox jumps over the lazy dog + The quick brown fox jumps over the lazy dog + + + + ThemeManager + + + Themes + Tema + + + + Add + Tambahkan + + + + Modify + Atur + + + + Remove + Buang + + + + Import + Impor + + + + Export + Ekspor + + + + Close + Tutup + + + + Question + Pertanyaan + + + + Remove selected theme? + Buang tema terpilih? + + + + Import Theme + Impor Tema + + + + Themes (*.fwtz *.theme) + Tema (*.fwtz *.theme) + + + + Themes (*.fwtz) + Tema (*.fwtz) + + + + Sorry + Maaf + + + + A theme already exists with that name. Please enter a new name: + Sudah ada tema dengan nama tersebut. Silakan tulis nama baru: + + + + Export Theme + Ekspor Tema + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Pertanyaan + + + + Delete timer? + Hapus pengukur waktu? + + + + <b>Words:</b> %L1 + <b>Kata:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Halaman:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Paragraf:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Karakter:</b> %L1 / %L2 + + + + Set Delay + Atur Penundaan + + + + Set Time + Atur Waktu + + + + Delay: + Tunda: + + + + Time: + Waktu: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Alarm + + + + Type: + Jenis: + + + + Memo: + Memo: + + + + Edit + Edit + + + + Delete + Hapus + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Tak ada pengukur waktu yang dijalankan + + + + TimerManager + + + Timers + Pengukur Waktu + + + + New + Baru + + + + Recent + Mutakhir + + + + Question + Pertanyaan + + + + Cancel editing timers? + Batalkan pengaturan waktu? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Mencapai akhir file tanpa diduga. + + + + Window + + + Loading themes + Memuat tema + + + + Loading sounds + Memuat suara + + + + + Untitled + Tanpa Judul + + + + Open File + Buka File + + + + About FocusWriter + Tentang FocusWriter + + + + FocusWriter + + + + + A simple fullscreen word processor + + + + + Copyright &copy; 2008-%1 Graeme Gott + + + + + Released under the <a href=%1>GPL 3</a> license + + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + + Used under the <a href=%1>LGPL 3</a> license + + + + + + Characters: %L1 / %L2 + Karakter: %L1 / %L2 + + + + + Pages: %L1 + Halaman: %L1 + + + + + Paragraphs: %L1 + Paragraf: %L1 + + + + + Words: %L1 + Kata: %L1 + + + + + %1% of daily goal + %1% dari target harian + + + + + Opening %1 + Membuka %1 + + + + Question + Pertanyaan + + + + Save changes? + Simpan perubahan? + + + + + (Untitled %1) + (Tanpa Judul %1) + + + + Switch to Next Document + + + + + Switch to Previous Document + + + + + Switch to First Document + + + + + Switch to Last Document + + + + + Switch to Document %1 + + + + + Loading settings + Memuat pengaturan + + + + Emergency cache is not writable. + Penyimpanan darurat tak bisa diedit. + + + + + Warning + Peringatan + + + + FocusWriter was not shut down cleanly. + FocusWriter tidak ditutup dengan baik. + + + + Restore from the emergency cache? + Kembalikan dari penyimpanan darurat? + + + + Some files could not be opened. + Beberapa file tak bisa dibuka. + + + + Some files were opened Read-Only. + Beberapa file dibuka secara Read-Only (tak bisa diedit). + + + + Text Files (%1);;All Files (*) + File Teks (%1);;Semua File (*) + + + + '%1' is newer than the cached copy. + '%1' lebih mutakhir daripada kopian yang tersimpan. + + + + Overwrite newer file? + Timpa file yang lebih baru? + + + + Unable to load typewriter sounds. + Gagal memuat suara mesin ketik. + + + + Please make sure that SDL_mixer is installed. + + + + + %1 (Read-Only) + %1 (Read-Only) + + + + &File + &File + + + + &New + &Baru + + + + &Open... + &Buka... + + + + Reloa&d + + + + + &Save + &Simpan + + + + Save &As... + Simpan &sebagai... + + + + &Rename... + &Ubah Nama... + + + + Save A&ll + Simpan S&emua + + + + Manage Sessions + Kelola Sesi + + + + New Session + Sesi Baru + + + + &Print... + &Cetak... + + + + &Close + &Tutup + + + + &Quit + &Keluar + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Edit + + + + &Undo + &Undo + + + + &Redo + &Redo + + + + Cu&t + Po%tong + + + + &Copy + &Salin + + + + &Paste + &Tempelkan + + + + Paste &Unformatted + + + + + Ctrl+Shift+V + + + + + Select &All + Pilih &Semua + + + + Select &Scene + + + + + Ctrl+Shift+A + + + + + Fo&rmat + Fo&rmat + + + + &Bold + &Tebal + + + + &Italic + &Miring + + + + &Underline + &Garisbawah + + + + Stri&kethrough + Gar&iscoret + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Sup&erscript + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Subscript + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Rata &Kiri + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Rata &Tengah + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Rata &Kanan + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Rata &Sisi + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + %Kurangi Indentasi + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + T&ambahkan Indentasi + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Bl&ok Kiri ke Kanan + + + + Ri&ght to Left Block + Bl&ok Kanan ke Kiri + + + + &Tools + &Peralatan + + + + &Find... + &Temukan... + + + + Find &Next + Temukan &berikutnya + + + + Find Pre&vious + Temukan Seb&elumnya + + + + &Replace... + &Gantikan... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Kutipan &Cerdas + + + + Update &Document + Perbarui &Dokumen + + + + Update &Selection + Perbarui &Seleksi + + + + &Spelling... + %Ejaan... + + + + F7 + F7 + + + + &Timers... + &Pengatur Waktu... + + + + S&ymbols... + + + + + &Settings + &Pengaturan + + + + Show &Toolbar + Tampilkan &Bilah Alat + + + + Show &Menu Icons + Tampilkan &Ikon Menu + + + + F&ocused Text + + + + + &Fullscreen + &Layar Penuh + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + M&inimize + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Tema... + + + + &Preferences... + &Preferensi... + + + + Focus Off + + + + + Focus One Line + + + + + Focus Three Lines + + + + + &Paragraph + + + + + Focus Paragraph + + + + + &Help + &Bantuan + + + + Application &Language... + Bahasa &Aplikasi... + + + + Some files were unsupported and could not be opened. + + + + + &Off + + + + + One &Line + + + + + &Three Lines + + + + + &About + + + + + About &Qt + + + + diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 55de0685..5c14f062 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - + Save File As Salva con nome - - + + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Reload File Ricarica File - + Reload the file %1 from disk? Ricaricare il file %1 dal disco? - + All unsaved changes will be lost. Tutte le modifiche non salvate verranno perse. - + Reload Ricarica - + Plain Text (*.txt) Testo semplice (*.txt) - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? - + OpenDocument Text (*.odt) OpenDocument (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Tutti i file (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed File modificato - + The file %1 was changed by another program. Il file %1 è stato modificato da un altro programma. - + Do you want to reload the file? Vuoi ricaricare il file? - + Reload Ricarica - + Ignore Ignora - + File Deleted File eliminato - + The file %1 was deleted by another program. Il file %1 è stato modificato da un altro programma. - + Do you want to save or close the file? Vuoi salvare o chiudere il file? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Sostituzione virgolette ... - + Please Wait Attendere prego @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blocchi - + Scripts Script @@ -1397,13 +1397,13 @@ Caricamento temi - + Loading sounds Caricamento suoni - + Untitled Senza nome @@ -1478,24 +1478,24 @@ %1% dell' obiettivo giornaliero - + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - + (Untitled %1) (Senza nome %1) @@ -1576,417 +1576,417 @@ Sovrascrivere il file più recente? - + Unable to load typewriter sounds. Impossibile caricare i suoni della macchina per scrivere. - + Please make sure that SDL_mixer is installed. Accertati che SDL_mixer sia installato. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d Ricarica - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted Incolla &non formattato - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene Seleziona &scena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &Sostituisci... - + Ctrl+R Ctrl+R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... &Timer... - + S&ymbols... S&imboli - + &Settings &Impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text Testo a fuoco - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl+M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off Messa a fuoco disattivata - + Focus One Line Metti a fuoco una linea - + Focus Three Lines Metti a fuoco tre linee - + &Paragraph &Paragrafo - + Focus Paragraph Paragrafo a fuoco - + &Help &Aiuto - + Application &Language... Lingua &applicazione... @@ -1996,27 +1996,27 @@ Qualche file non è supportato e non è stato aperto. - + &Off Non attivo - + One &Line Una &Linea - + &Three Lines &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index ecb50bae..1b826729 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry エラー - + Unable to save '%1'. '%1' を保存できませんでした。 - + Save File As 名前を付けて保存 - - + + Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - + Rename File ファイル名の変更 - + Unable to rename '%1'. '%1' の名前を変更できませんでした。 - + Reload File ファイルを再読み込みする - + Reload the file %1 from disk? ファイル %1 を再読み込みしますか? - + All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - + Reload 再読み込み - + Plain Text (*.txt) テキスト文書 (*.txt) - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? - + OpenDocument Text (*.odt) OpenDocument 形式 (*.odt) - + Rich Text (*.rtf) リッチ テキスト形式 (*.rtf) - + All Files (*) すべてのファイル (*.*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed ファイルが変更されています - + The file %1 was changed by another program. 他のプログラムによりファイル %1 は変更されています。 - + Do you want to reload the file? ファイルを読み込み直しますか? - + Reload 再読み込み - + Ignore 無視 - + File Deleted ファイルが削除されました - + The file %1 was deleted by another program. 他のプログラムによりファイル %1 は削除されました。 - + Do you want to save or close the file? ファイルを保存、または閉じますか? @@ -710,7 +710,7 @@ Session - + @@ -841,12 +841,12 @@ SmartQuote - + Replacing quotation marks... 引用符の置換... - + Please Wait お待ちください @@ -950,12 +950,12 @@ SymbolsModel - + Blocks ブロック - + Scripts スクリプト @@ -1396,13 +1396,13 @@ テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - + Untitled 無題 @@ -1477,24 +1477,24 @@ 一日の目標の %1% - + Opening %1 %1 を開いています - + Question 確認 - + Save changes? 変更を保存しますか? - + (Untitled %1) (無題 %1) @@ -1575,417 +1575,417 @@ 新しいファイルを上書きしますか? - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + %1 (Read-Only) %1 (読み込み専用) - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... @@ -1995,27 +1995,27 @@ いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 5f0c7f67..fc3621e9 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - + Save File As Opslaan als - - + + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Reload File Bestand herladen - + Reload the file %1 from disk? Bestand %1 herladen van disk ? - + All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - + Reload Herladen - + Plain Text (*.txt) Platte tekst (*.txt) - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Bestand is gewijzigd - + The file %1 was changed by another program. Bestand %1 is gewijzigd door een andere applicatie - + Do you want to reload the file? Moet het bestand opnieuw geladen worden ? - + Reload Herladen - + Ignore Negeren - + File Deleted Bestand is verwijderd - + The file %1 was deleted by another program. Bestand %1 is verwijderd door een andere applicatie - + Do you want to save or close the file? Bestand opslaan of afsluiten ? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Vervang aanhalingstekens... - + Please Wait Even geduld @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blokken - + Scripts Scripts @@ -1397,13 +1397,13 @@ Thema wordt geladen - + Loading sounds Geluiden worden geladen - + Untitled Unbenannt @@ -1478,24 +1478,24 @@ %1% van het dagdoel - + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - + (Untitled %1) (naamloos %1) @@ -1576,417 +1576,417 @@ Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... @@ -1996,27 +1996,27 @@ Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 0c6c2860..79b5c735 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - + Save File As Zapisz plik jako - - + + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Reload File Wczytaj ponownie - + Reload the file %1 from disk? Wczytaj ponownie plik %1 z dysku? - + All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - + Reload Wczytaj ponownie - + Plain Text (*.txt) Zwykły tekst (*.txt) - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Plik zmieniony - + The file %1 was changed by another program. Plik %1 został zmieniony przez inny program. - + Do you want to reload the file? Czy chcesz wczytać plik ponownie? - + Reload Wczytaj ponownie - + Ignore Ignoruj - + File Deleted Plik usunięty - + The file %1 was deleted by another program. Plik %1 został usunięty przez inny program. - + Do you want to save or close the file? Czy chcesz zapisać, czy zamknąć plik? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Zamienianie cudzysłowów... - + Please Wait Proszę czekać @@ -952,12 +952,12 @@ SymbolsModel - + Blocks Bloki - + Scripts Skrypty @@ -1398,13 +1398,13 @@ Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - + Untitled Bez tytułu @@ -1479,24 +1479,24 @@ %1% dziennego celu - + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - + (Untitled %1) (Bez tytułu %1) @@ -1577,417 +1577,417 @@ Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... @@ -1997,27 +1997,27 @@ Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 5a442418..2703ebf5 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - + Save File As Guardar como - - + + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Reload File Carregar de novo o ficheiro - + Reload the file %1 from disk? Carregar de novo o ficheiro %1 a partir do disco? - + All unsaved changes will be lost. As alterações que não forem gravadas serão perdidas. - + Reload Carregar de novo - + Plain Text (*.txt) Texto simples (*.txt) - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? - + OpenDocument Text (*.odt) Texto OpenDocument (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed O ficheiro mudou - + The file %1 was changed by another program. O ficheiro %1 foi alterado por outro programa. - + Do you want to reload the file? Quer carregar de novo o ficheiro? - + Reload Carregar de novo - + Ignore Ignorar - + File Deleted Ficheiro apagado - + The file %1 was deleted by another program. O ficheiro %1 foi apagado por outro programa. - + Do you want to save or close the file? Quer gravar ou fechar o ficheiro? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... A substituir as aspas... - + Please Wait Espere por favor @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blocos - + Scripts Guiões @@ -1397,13 +1397,13 @@ Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - + Untitled Sem título @@ -1478,24 +1478,24 @@ %1% do objectivo do dia - + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - + (Untitled %1) (Sem título %1) @@ -1576,417 +1576,417 @@ Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... @@ -1996,27 +1996,27 @@ Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 864e813c..90f68f15 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - + Save File As Salvar como - - + + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Reload File Recarregar o arquivo - + Reload the file %1 from disk? Recarregar o arquivo %1 do disco? - + All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - + Reload Recarregar - + Plain Text (*.txt) Texto simples (*.txt) - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? - + OpenDocument Text (*.odt) Texto do OpenDocument (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Arquivo alterado - + The file %1 was changed by another program. O arquivo %1 foi alterado por outro programa. - + Do you want to reload the file? Deseja recarregar o arquivo? - + Reload Recarregar - + Ignore Ignorar - + File Deleted Arquivo apagado - + The file %1 was deleted by another program. O arquivo %1 foi apagado por outro programa - + Do you want to save or close the file? Deseja salvar ou fechar o arquivo? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Substituindo aspas... - + Please Wait Por favor, aguarde @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Blocos - + Scripts Roteiros @@ -1397,13 +1397,13 @@ Carregando temas - + Loading sounds Carregando sons - + Untitled Sem título @@ -1478,24 +1478,24 @@ %1% do objetivo diário - + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - + (Untitled %1) (Sem título %1) @@ -1576,417 +1576,417 @@ Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... @@ -1996,27 +1996,27 @@ Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 40c929b3..a8bdac27 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Scuze - + Unable to save '%1'. Nu se poate salva '%1'. - + Save File As Salvează fişierul ca - - + + Unable to overwrite '%1'. Nu se poate suprascrie'%1'. - + Rename File Redenumire fişier - + Unable to rename '%1'. Nu se poate redenumi '%1'. - + Reload File Reîncarcă fişier - + Reload the file %1 from disk? Reîncarcă fişierul %1? - + All unsaved changes will be lost. Toate modificările nesalvate vor fi pierdute - + Reload Reîncarcă - + Plain Text (*.txt) Text simplu (*.txt) - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text îmbogăţit (*.rtf) - + All Files (*) Toate fişierele (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Fişierul a fost modificat - + The file %1 was changed by another program. Fişierul %1 a fost modificat de un alt program. - + Do you want to reload the file? Doriţi să reîncărcaţi fişierul? - + Reload Reîncarcă - + Ignore Ignoră - + File Deleted Fişier şters - + The file %1 was deleted by another program. Fişierul %1 a fost şters de un alt program. - + Do you want to save or close the file? Doriţi să salvaţi sau închideţi fişierul? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Înlocuire ghilimele... - + Please Wait Vă rugăm aşteptaţi @@ -952,12 +952,12 @@ SymbolsModel - + Blocks Blocuri - + Scripts Script-uri @@ -1398,13 +1398,13 @@ Încărcare teme - + Loading sounds Încărcare sunete - + Untitled FărăTitlu @@ -1479,24 +1479,24 @@ %1% din obiectiv zilnic - + Opening %1 Deschidere %1 - + Question Întrebare - + Save changes? Salvaţi modificările? - + (Untitled %1) (Fără titlu %1) @@ -1577,417 +1577,417 @@ Suprascrie noul fişier? - + Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - + Please make sure that SDL_mixer is installed. Vă rugăm să vă asiguraţi că SDL_mixer este instalat. - + %1 (Read-Only) %1 (Doar-citire) - + &File &Fişier - + &New &Nou - + &Open... &Deschide... - + Reloa&d Reîncarcă - + &Save &Salvare - + Save &As... Salvare c&a... - + &Rename... &Redenumire... - + Save A&ll Salvează tot - + Manage Sessions Gestionare sesiuni - + New Session Sesiune nouă - + &Print... Imprimare... - + &Close Închide - + &Quit &Ieşire - + Ctrl+Q Ctrl+Q - + &Edit &Editare - + &Undo Anulează - + &Redo Reface - + Cu&t &Taie - + &Copy &Copiază - + &Paste &Lipeşte - + Paste &Unformatted Lipire neformatat - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selectează &tot - + Select &Scene Selectare &scenă - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatare - + &Bold Îngroşat - + &Italic &Italic - + &Underline S&ubliniat - + Stri&kethrough &Tăiat - + Ctrl+K Ctrl+K - + Sup&erscript Exponent - + Ctrl+^ Ctrl+^ - + &Subscript Indice - + Ctrl+_ Ctrl+_ - + Align &Left Aliniere la &stînga - + Ctrl+{ Ctrl+{ - + Align &Center Aliniere la &centru - + Ctrl+| Ctrl+| - + Align &Right Aliniere la &dreapta - + Ctrl+} Ctrl+} - + Align &Justify Aliniere stînga-dreapta - + Ctrl+J Ctrl+J - + &Decrease Indent Mărire alineat - + Ctrl+< Ctrl+< - + I&ncrease Indent Micşorare alineat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloc stînga-dreapta - + Ri&ght to Left Block Bloc dreapta-stînga - + &Tools &Unelte - + &Find... &Caută... - + Find &Next Caută &următorul - + Find Pre&vious Caută &precedent - + &Replace... Înlocuire... - + Ctrl+R Ctrl+R - + Smart &Quotes Ghilimele inteligente - + Update &Document Actualizare &document - + Update &Selection Actualizare &selecţie - + &Spelling... &Ortografie... - + F7 F7 - + &Timers... Cronometre... - + S&ymbols... S&imboluri... - + &Settings &Setări - + Show &Toolbar Arată bară de unelte - + Show &Menu Icons Arată iconuri &meniu - + F&ocused Text Text f&ocalizat - + &Fullscreen &Tot ecranul - + F11 F11 - + Esc Esc - + M&inimize M&inimizare - + Ctrl+M Ctrl+M - + &Themes... &Teme... - + &Preferences... &Preferinţe... - + Focus Off Focaliuzare oprită - + Focus One Line Focalizare o linie - + Focus Three Lines Focalizare trei linii - + &Paragraph &Paragraf - + Focus Paragraph Focalizare paragraf - + &Help &Ajutor - + Application &Language... Limbă aplicaţie... @@ -1997,27 +1997,27 @@ Unele fişiere au fost nesuportate şi nu au putut fi deschide. - + &Off &Oprit - + One &Line O &linie - + &Three Lines &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.qm b/translations/focuswriter_ru.qm index f055cf1b36924ed7eb8d5770c426f2da46e75b15..e8dc14bb175ca7f0f04f77449570f3c19bc8e9be 100644 GIT binary patch delta 4798 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 Dismiss Alert - Убрать предупреждение -?- + Убрать предупреждение @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - Простите + Извините - + Unable to save '%1'. Невозможно сохранить '%1'. - + Save File As Сохранить как - - + + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Reload File Открыть файл заново - + Reload the file %1 from disk? Действительно заново открыть файл %1? - + All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - + Reload Открыть заново - + Plain Text (*.txt) Простой текст (*.txt) - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? - Если вы сохраните файл как простой текст, всё форматирование будет убрано. Убрать форматирование? + Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? - + OpenDocument Text (*.odt) - Текст формата OpenDocument (*.odt) + OpenDocument (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Файл изменён - + The file %1 was changed by another program. Файл %1 был изменён другой программой. - + Do you want to reload the file? - Хотите ли вы заново открыть этот файл? + Открыть заново этот файл? - + Reload Открыть заново - + Ignore - Игнорировать + Пропустить - + File Deleted Файл удалён - + The file %1 was deleted by another program. Файл %1 был удалён другой программой. - + Do you want to save or close the file? Хотите ли вы сохранить файл, или же закрыть его? @@ -202,17 +202,17 @@ &Find - + &Найти &Replace - + &Заменить Replace &All - + Заменить &все @@ -242,7 +242,7 @@ Sorry - Простите + Извините @@ -261,7 +261,7 @@ Check Spelling... - Проверить орфографию... + Проверить правописание... @@ -330,7 +330,7 @@ Spell Checking - Проверка орфографии + Проверка правописания @@ -341,7 +341,7 @@ Sorry - Простите + Извините @@ -377,12 +377,12 @@ Shortcuts - Горячие клавиши + Комбинация клавиш One or more shortcuts conflict. Do you wish to proceed? - Некоторые комбинации клавиш совпадают. Вы хотите продолжить? + Некоторые комбинации клавиш совпадают. Продолжить? @@ -453,12 +453,12 @@ Scenes - Сцены -?- + Сцены Divider: - Разделительная линия -?-: + Разделительная линия: @@ -603,7 +603,7 @@ Ignore words in UPPERCASE - Пропускать слова, написанные ПРОПИСНЫМИ буквами + Пропускать слова в ВЕРХНЕМ РЕГИСТРЕ @@ -666,7 +666,7 @@ Move Scenes Up - Передвинуть сцены выше -?- + Передвинуть сцены выше @@ -676,7 +676,7 @@ Toggle Scene List - Открыть/закрыть список сцен -?- + Открыть/закрыть список сцен @@ -696,23 +696,23 @@ Filter - Фильтровать -?- + Фильтровать Move Scenes Down - Передвинуть сцены ниже -?- + Передвинуть сцены ниже Resize scene list - Изменить размер списка сцен -?- + Изменить размер списка сцен Session - + @@ -793,7 +793,7 @@ Sorry - Простите + Извините @@ -837,18 +837,18 @@ Shortcut: - Комбинация клавиш -?-: + Комбинация клавиш: SmartQuote - + Replacing quotation marks... Замена кавычек... - + Please Wait Пожалуйста, подождите @@ -858,32 +858,32 @@ Check Spelling - Проверка орфографии + Проверить орфографию &Add - + &Добавить &Ignore - + &Пропустить I&gnore All - + П&ропустить все &Change - + &Заменить C&hange All - + Заме&нить все @@ -952,14 +952,14 @@ SymbolsModel - + Blocks - Блоки -?- + Блоки - + Scripts - Скрипты -?- + Скрипты @@ -1137,7 +1137,7 @@ Proportional - Пропорциональный -?- + Пропорциональный @@ -1230,7 +1230,7 @@ Sorry - Простите + Извините @@ -1336,7 +1336,7 @@ HH:mm:ss - HH:mm:ss + ЧЧ:мм:сс @@ -1374,7 +1374,7 @@ +HH:mm:ss - +HH:mm:ss + +ЧЧ:мм:сс @@ -1398,13 +1398,13 @@ Загружаются темы - + Loading sounds Загружаются звуки - + Untitled Безымянный @@ -1431,7 +1431,7 @@ Copyright &copy; 2008-%1 Graeme Gott - &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott @@ -1479,24 +1479,24 @@ %1% от дневной задачи - + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - + (Untitled %1) (Безымянный %1) @@ -1539,12 +1539,12 @@ Warning - Внимание + Предупреждение FocusWriter was not shut down cleanly. - Работа приложения не была завершена правильно. + Работа приложения была завершена неправильно. @@ -1577,417 +1577,417 @@ Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. - Пожалуйста, проверьте, установлен ли пакет SDL_mixer. + Проверьте, установлен ли пакет SDL_mixer. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d - + Откр&ыть заново - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll - Сохранить вс&ё + Сохранить вс&е - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted - + Вставить без &форматирования - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene - + Выбрать &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + S&ymbols... - + Сим&волы... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text - + Подсве&тка текста - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off - + Отключена - + Focus One Line - + На одной строке - + Focus Three Lines - + На трёх строках - + &Paragraph - + &На абзаце - + Focus Paragraph - + На абзаце - + &Help Спр&авка - + Application &Language... &Язык приложения... @@ -1997,27 +1997,27 @@ Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off - + &Выключено - + One &Line - + Одна ст&рока - + &Three Lines - + &Три строки - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index fc71a6d5..e705ad05 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Prepáčte - + Unable to save '%1'. Nedá sa uložiť '%1'. - + Save File As Uložiť súbor ako - - + + Unable to overwrite '%1'. Nedá sa prepísať '%1'. - + Rename File Premenovať súbor - + Unable to rename '%1'. Nedá sa premenovať '%1'. - + Reload File Opätovne načítať súbor - + Reload the file %1 from disk? Opätovne načítať súbor %1 z disku? - + All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - + Reload Opätovne načítať - + Plain Text (*.txt) Obyčajný text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Všetky súbory (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Súbor bol zmenený - + The file %1 was changed by another program. Súbor %1 bol zmenený v inom programe. - + Do you want to reload the file? Chcete súbor opätovne načítať? - + Reload Opätovne načítať - + Ignore Ignorovať - + File Deleted Súbor bol vymazaný - + The file %1 was deleted by another program. Súbor %1 bol vymazaný iným programom. - + Do you want to save or close the file? Chcete súbor uložiť alebo zavrieť? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Nahrádzanie úvodzoviek... - + Please Wait Čakajte prosím @@ -952,12 +952,12 @@ SymbolsModel - + Blocks Bloky - + Scripts Skripty @@ -1398,13 +1398,13 @@ Načítavanie tém - + Loading sounds Načítavanie zvukov - + Untitled Bez názvu @@ -1479,24 +1479,24 @@ %1% denného cieľa - + Opening %1 Otváranie %1 - + Question Otázka - + Save changes? Uložiť zmeny? - + (Untitled %1) (Bez názvu %1) @@ -1577,417 +1577,417 @@ Prepísať novší súbor? - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + %1 (Read-Only) %1 (Iba na čítanie) - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... @@ -1997,27 +1997,27 @@ Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index aab61230..e1ac6f46 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - + Save File As Spara fil som - - + + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Reload File Läs om fil - + Reload the file %1 from disk? Läs om filen %1 från disk? - + All unsaved changes will be lost. Alla osparade ändringar kommer att gå förlorade. - + Reload Läs om - + Plain Text (*.txt) Vanlig text (*.txt) - + Question Fråga - + Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Filen ändrad - + The file %1 was changed by another program. Filen %1 ändrades av ett annat program. - + Do you want to reload the file? Vill du läsa om filen? - + Reload Läs om - + Ignore Ignorera - + File Deleted Fil raderad - + The file %1 was deleted by another program. Filen %1 togs bort av ett annat program. - + Do you want to save or close the file? Vill du spara eller stänga filen? @@ -711,7 +711,7 @@ Session - + @@ -842,12 +842,12 @@ SmartQuote - + Replacing quotation marks... Ersätter citationstecken... - + Please Wait Vänta @@ -951,12 +951,12 @@ SymbolsModel - + Blocks Tecken - + Scripts Skriftspråk @@ -1397,13 +1397,13 @@ Läser in teman - + Loading sounds Läser in ljud - + Untitled Namnlös @@ -1478,24 +1478,24 @@ %1 % av dagligt mål - + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - + (Untitled %1) (Namnlös %1) @@ -1576,417 +1576,417 @@ Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. Se till att SDL_mixer är installerat. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d Läs in &igen - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted Klistra in &oformaterat - + Ctrl+Shift+V Ctrl+Skift+V - + Select &All Markera &allt - + Select &Scene Välj &scen - + Ctrl+Shift+A Ctrl+Skift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indrag - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&drag - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + S&ymbols... S&ymboler... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text F&okuserad text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off Fokus av - + Focus One Line Fokusera en rad - + Focus Three Lines Fokusera tre rader - + &Paragraph &Stycke - + Focus Paragraph Fokusera stycke - + &Help &Hjälp - + Application &Language... Programs&pråk... @@ -1996,27 +1996,27 @@ Några filer stöds inte och kunde inte öppnas. - + &Off &Av - + One &Line En &rad - + &Three Lines &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm index 2c4b246ed5cefc26244db40a7587054fdb18f6db..f2f114f611a9f3fbc188875ef3c4998a01a10bb6 100644 GIT binary patch delta 3025 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 delta 3009 zcmX9=dt6lI7F}~*^Exx5h=K%y2#LHzAQJ=>g%S(|U+9PkAt;FCGrOcsVwCtm3FC)m zWDhmOgl=ddUQGp`T^~sWUPBALWrn=T*%cZAd+0h6{sx)cK#w?p>h`q&c4Gh+dldg5-t*1tdG{hh%0&G0Sv0unC6ch5h7 zL|^zm4v@GTzL&g-Tz?WM6ux(Yc+f)lZL9&3XTxt3-%B0^zltVcstUhGu1|Nvc&9c% znTtt2o0-%x#QPNj!9j>0O#%VQ#CKrBg#Tf3@<5>9MkHhv0O4DZwDnsceHW%R`Z9wK zOkcMFc(%ok5tlHlhlIzCfVCgj$K8iDXFCrHu%r2!9X&SLag>)GV;;f!6%!dc4|9Y% zAUYLu#0@rde)tbQOpMU}JnxIYjfY+Zy z8-MtCXp(}9fQUZL(sl-l{kLYtu`hw#ftnBAPXqG4(9}KpoB@J0tu|I>Zl>mzrwrup z)BHA#`~4#{9UV7;u;YSUu>}}bA@qAA6Ywk*oDVTm*DPV0i3E}_2pLUF8Mjo(%4WQ| zkAwnS`z&TKL?}7d3%H#X-l^OTOiU0e!{Y(>>%!jhMrxu`*vDQWp+`7)_(N7AR5-MO z?KtIjD+Xb3eDpJDcDru+Y=;^K25mV?g^x<6WWGn0MDHl?st$#wztsJ zG=Td$(dOV&0;Ihu`l}2m{vn1|-R1$gV%YgMmbgMpdqSvQTvfvsMgA_n*|iUd3K!Sk zAi=S{Vud&Y&~%Aa!+)g6mWZ|RqWZ6jwJD4{B~Yy0yc!skCpNTR0G=K#o_}N};cW4{ z-g`hysZIQ`v=SJ7M7(KcW{yQ-*K%%5Hi(Z}6RFZ7$x#1*%-tl%bTZFbCi$o-bW4L2 zyQ?2CVyl!ezMd`1lC0|-0lyJa-pZ}C*UM5tZ5rUPN3u1Oh<}T;_A!Cvx1_f>><2>U zN@dnzz!=+JX`875$SRjA;*M~mO4>8pN*9chs!Q$wvkHiJiF=8i0LqDf^SPNwvCY;H zdx(Kj^%f0r4pAVkCz=6k2$5p6rW5^$n~DC!!^8mk-}7V}I#PWj;$kR=T(_hD5Wa zi!W3C6FsC$;U`$BcInD3wl4IB)H|~X&`*^$oza+sj5D&hW&?W(S$gt^5?S8KKR)}3 ztj0}biS)Ahry7>@zWh`M=fl`wIp%L>_RJDFwx*Q_{3$0Nn+-UxkqZx$06~%R#+}pI z!aHS)WhdK6dDC-ER7|%WW76bJlb+!m?UXAnJx|jvkhd4saf+16+Z#{v`6K!LLJDF; zq`WJUX}f=F$8k;auKU5jjA8PDlYB2WNUn`2qtpk>wO_0N76-_6UoWFjGUV?Q-e(z0 z$D|0$&Q~wBM!7jQdGEB)E zaFq6RRTh^tv&X}|lmZP)Io?y*(M5F6C9>qf4a%N$9Br>Q@yV&#wCzP9Z$sJ}AmaKin)<-wE zXm=beVGFwbY7HnbPa19Z-YTN9W@?sda&*?LZ3 zlcD$V_eAJ$qgb9v!udwsdIt7gV>A?A;Uq3MTI6B8eFqv}_<)iNa5855uufj-#+-{w zDUp}nGp-6-O9?m{UvbQ3oxF{&dQvhAVvW0hq6so{jJ35|GS?bUx|VWYIUCPaw=vUN zJF0nhbStyt$m4d539w_Fqa7zV*m1tbc=JKMG-p)ztjhH9ia8UhNqZfdri poj8CqA=J|CN#2&bmhKHD^tww9lWqB2P+Lr8e~fqiTyeRX@qhd`VgmpG diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index abd99a22..10cf43d2 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Üzgünüm - + Unable to save '%1'. '%1' kaydedilemedi. - + Save File As Dosyayı Farklı Kaydet - - + + Unable to overwrite '%1'. '%1' üzerine yazılamadı. - + Rename File Dosyayı Yeniden Adlandır - + Unable to rename '%1'. '%1' yeniden adlandırılamadı. - + Reload File Dosyayı Yeniden Yükle - + Reload the file %1 from disk? %1 dosyası diskten yeniden yüklensin mi? - + All unsaved changes will be lost. Tüm kaydedilmemiş değişiklikler kaybedilecektir. - + Reload Yeniden Yükle - + Plain Text (*.txt) Düz Metin (*.txt) - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? - + OpenDocument Text (*.odt) OpenDocument Metni (*.odt) - + Rich Text (*.rtf) Zengin Metin (*.rtf) - + All Files (*) Tüm Dosyalar (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed Dosya Değişti - + The file %1 was changed by another program. %1 dosyası başka bir program tarafından değiştirildi. - + Do you want to reload the file? Dosyayı yeniden yüklemek ister misiniz? - + Reload Yeniden Yükle - + Ignore Yoksay - + File Deleted Dosya Silindi - + The file %1 was deleted by another program. %1 dosyası başka bir program tarafından silindi. - + Do you want to save or close the file? Dosyayı kaydetmek mi kapatmak mı istiyorsunuz? @@ -172,7 +172,7 @@ Replace with: - Değiştir: + Şununla değiştir: @@ -710,7 +710,7 @@ Session - + @@ -950,12 +950,12 @@ SymbolsModel - + Blocks Bloklar - + Scripts Betikler @@ -1396,13 +1396,13 @@ Temalar yükleniyor - + Loading sounds Sesler yükleniyor - + Untitled Başlıksız @@ -1477,24 +1477,24 @@ Günlük hedefin %1% bölümü - + Opening %1 %1 açılıyor - + Question Soru - + Save changes? Değişikler kaydedilsin mi? - + (Untitled %1) (Başlıksız %1) @@ -1575,417 +1575,417 @@ Daha yeni dosyanın üzerine yazılsın mı? - + Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - + Please make sure that SDL_mixer is installed. SDL_mixer'ın yüklü olduğundan emin olun. - + %1 (Read-Only) %1 (Salt Okunur) - + &File &Dosya - + &New &Yeni - + &Open... &Aç... - + Reloa&d &Yeniden Yükle - + &Save &Kaydet - + Save &As... &Farklı Kaydet... - + &Rename... Yeni &İsim Ver... - + Save A&ll &Tümünü Kaydet - + Manage Sessions Oturumları Yönet - + New Session Yeni Oturum - + &Print... Ya&zdır... - + &Close Ka&pat - + &Quit &Çık - + Ctrl+Q Ctrl+Q - + &Edit D&üzen - + &Undo &Geri Al - + &Redo &Yinele - + Cu&t &Kes - + &Copy K&opyala - + &Paste Y&apıştır - + Paste &Unformatted &Biçimlendirme Olmadan Yapıştır - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Tümünü Seç - + Select &Scene &Sahneyi Seç - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Biçim - + &Bold &Kalın - + &Italic &İtalik - + &Underline &Altı Çizili - + Stri&kethrough &Üstü Çizili - + Ctrl+K Ctrl+K - + Sup&erscript Ü&st Simge - + Ctrl+^ Ctrl+^ - + &Subscript A&lt Simge - + Ctrl+_ Ctrl+_ - + Align &Left So&la Yasla - + Ctrl+{ Ctrl+{ - + Align &Center &Ortala - + Ctrl+| Ctrl+| - + Align &Right Sa&ğa Yasla - + Ctrl+} Ctrl+} - + Align &Justify İki &Yana Yasla - + Ctrl+J Ctrl+J - + &Decrease Indent &Girintiyi Azalt - + Ctrl+< Ctrl+< - + I&ncrease Indent Gi&rintiyi Arttır - + Ctrl+> Ctrl+> - + Le&ft to Right Block S&oldan Sağa Blok - + Ri&ght to Left Block Sa&ğdan Sola Blok - + &Tools &Araçlar - + &Find... &Bul... - + Find &Next &Sonrakini Bul - + Find Pre&vious &Öncekini Bul - + &Replace... &Değiştir... - + Ctrl+R Ctrl+R - + Smart &Quotes &Akıllı Tırnaklar - + Update &Document &Dökümanı Güncelle - + Update &Selection &Seçilimi Güncelle - + &Spelling... &Yazım Denetimi... - + F7 F7 - + &Timers... &Zamanlayıcılar... - + S&ymbols... &Simgeler... - + &Settings &Ayarlar - + Show &Toolbar &Araç Çubuğunu Göster - + Show &Menu Icons &Menü Simgelerini Göster - + F&ocused Text &Odaklanılan Metin - + &Fullscreen Tam &Ekran - + F11 F11 - + Esc Esc - + M&inimize &Küçült - + Ctrl+M Ctrl+M - + &Themes... &Temalar... - + &Preferences... &Tercihler... - + Focus Off Odaklanmayı Kapat - + Focus One Line Bir Satıra Odaklan - + Focus Three Lines Üç Satıra Odaklan - + &Paragraph &Paragraf - + Focus Paragraph Paragrafa Odaklan - + &Help &Yardım - + Application &Language... &Uygulama Dili ... @@ -1995,27 +1995,27 @@ Bazı dosyalar desteklenmiyor ve açılamadı. - + &Off &Kapalı - + One &Line &Bir Satır - + &Three Lines &Üç Satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 1f4923c0..37249581 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - + Save File As Зберегти файл як - - + + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed - + The file %1 was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? @@ -712,7 +712,7 @@ Session - + @@ -843,12 +843,12 @@ SmartQuote - + Replacing quotation marks... Заміна лапок... - + Please Wait Будь ласка, зачекайте @@ -952,12 +952,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1398,13 +1398,13 @@ Завантаження тем - + Loading sounds Завантаження звуків - + Untitled Без назви @@ -1479,24 +1479,24 @@ %1% щоденного завдання - + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - + (Untitled %1) (Без назви %1) @@ -1577,417 +1577,417 @@ - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + S&ymbols... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... @@ -1997,27 +1997,27 @@ - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 0ccfdb6b..cdbb40ca 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. 不能保存 '%1'。 - + Save File As 保存文件为 - - + + Unable to overwrite '%1'. 不能覆盖 '%1'。 - + Rename File 重命名文件 - + Unable to rename '%1'. 不能重命名 '%1'。 - + Reload File 重新加载文件 - + Reload the file %1 from disk? 重新从磁盘中加载文件 %1 ? - + All unsaved changes will be lost. 未保存的更改将丢失。 - + Reload 重新加载 - + Plain Text (*.txt) 纯文本 (*.txt) - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) 所有文件 (*) @@ -122,42 +122,42 @@ DocumentWatcher - + File Changed 文件已更改 - + The file %1 was changed by another program. 文件 %1 已由其他程序更改。 - + Do you want to reload the file? 您要重新加载文件吗? - + Reload 重新加载 - + Ignore 忽略 - + File Deleted 文件已删除 - + The file %1 was deleted by another program. 文件 %1 已经由其他程序删除。 - + Do you want to save or close the file? 您要保存或关闭该文件? @@ -710,7 +710,7 @@ Session - + @@ -841,12 +841,12 @@ SmartQuote - + Replacing quotation marks... 更换引号... - + Please Wait 请等待 @@ -950,12 +950,12 @@ SymbolsModel - + Blocks - + Scripts @@ -1396,13 +1396,13 @@ 载入主题 - + Loading sounds 载入声音 - + Untitled 无标题 @@ -1477,24 +1477,24 @@ 每日目标的 %1% - + Opening %1 正在打开 %1 - + Question 询问 - + Save changes? 保存更改? - + (Untitled %1) (无标题 %1) @@ -1575,417 +1575,417 @@ 覆盖较新的文件? - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (只读) - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左至右块(&F) - + Ri&ght to Left Block 右至左块 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + &Timers... 定时器(&T)... - + S&ymbols... - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... @@ -1995,27 +1995,27 @@ - + &Off - + One &Line - + &Three Lines - + &About 关于&About - + About &Qt 关于 &Qt From b0e663a8045bc60685bb9f9bc84c334ef4669e30 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 31 May 2013 10:57:54 -0400 Subject: [PATCH 134/630] Tag version 1.4.4 --- ChangeLog | 3 +++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6d70188..d54ee875 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2013-05-31 Graeme Gott + * Tag version 1.4.4. + 2013-05-06 Graeme Gott * FIXED: Crashed when opening font dropdown in theme dialog. diff --git a/focuswriter.pro b/focuswriter.pro index dab40223..506b4288 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -16,7 +16,7 @@ macx { LIBS += -lz } -VERSION = 1.4.3 +VERSION = 1.4.4 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index 44e79069..8c18b3c7 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.3' +VERSION='1.4.4' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 33f8fd2e..81987732 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.3 +SET VERSION=1.4.4 ECHO Copying executable MKDIR %APP% From 702d9c7d134b88418e2f41785bc5bca8aca1a932 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 7 Jun 2013 19:13:01 +0100 Subject: [PATCH 135/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 64d1e4f1..8092cbf5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.4.4-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Fri, 07 Jun 2013 19:12:56 +0100 + focuswriter (1.4.3.2013.04.25-1) unstable; urgency=low * merge upstream maintenance branch From c0ceb94a35ba3f446b72c2c23f5fde70f3f69999 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Nov 2013 07:07:23 -0500 Subject: [PATCH 136/630] Sync translations with Transifex. --- CREDITS | 131 +- resources/unix/focuswriter.desktop | 50 + translations/focuswriter_el.qm | Bin 34072 -> 34208 bytes translations/focuswriter_el.ts | 196 +-- translations/focuswriter_en_GB.qm | Bin 0 -> 30772 bytes translations/focuswriter_en_GB.ts | 2024 +++++++++++++++++++++++++++ translations/focuswriter_fi.qm | Bin 26435 -> 32832 bytes translations/focuswriter_fi.ts | 310 ++--- translations/focuswriter_ko.qm | Bin 0 -> 26792 bytes translations/focuswriter_ko.ts | 2023 +++++++++++++++++++++++++++ translations/focuswriter_sr.qm | Bin 0 -> 31584 bytes translations/focuswriter_sr.ts | 2025 ++++++++++++++++++++++++++++ translations/focuswriter_vi.qm | Bin 0 -> 33620 bytes translations/focuswriter_vi.ts | 2023 +++++++++++++++++++++++++++ translations/focuswriter_zh_CN.qm | Bin 21722 -> 23150 bytes translations/focuswriter_zh_CN.ts | 64 +- 16 files changed, 8530 insertions(+), 316 deletions(-) create mode 100644 translations/focuswriter_en_GB.qm create mode 100644 translations/focuswriter_en_GB.ts create mode 100644 translations/focuswriter_ko.qm create mode 100644 translations/focuswriter_ko.ts create mode 100644 translations/focuswriter_sr.qm create mode 100644 translations/focuswriter_sr.ts create mode 100644 translations/focuswriter_vi.qm create mode 100644 translations/focuswriter_vi.ts diff --git a/CREDITS b/CREDITS index 0622907e..a8649ea5 100644 --- a/CREDITS +++ b/CREDITS @@ -2,42 +2,111 @@ Developers ---------- * Graeme Gott -Translators ------------ -* Joan Queralt Gil (ca) -* Pavel Fric (cs) -* Ladislav Thon (cs) -* Morten Juhl-Johansen Zölde-Fejér (da) -* Dennis Peteranderl (de) -* Eduard Bruckner (de) -* Epameinondas Soufleros (el) -* Luis Osa (es) -* Verónica Jiménez (es) -* Israel Buitrón (es_MX) -* Aarni (fi) -* Jérôme Borme (fr) -* Isratine Citizen (he) -* Zoltán Adamek (hu) -* Andrea Bergamasco (it) -* Eka Y Saputra (id) -* Robert Borst (nl) -* Jakub Kowalski (pl) -* Jérôme Borme (pt) -* Márcio Massula Jr. (pt_BR) -* Jaff (Oprea Nicolae) (ro) -* Danila Evstifeyev (ru) -* Dmitriy Kodanev (ru) -* Jan Gallik (sk) -* Daniel Nylander (sv) -* Påvel Nicklasson (sv) -* Cüneyt Oktay (tr) -* Ülgen (tr) -* Sergiy Gavrylov (uk) + +Translations +------------ +Catalan: +* Joan Queralt Gil + +Czech: +* Pavel Fric +* Ladislav Thon + +Danish: +* Morten Juhl-Johansen Zölde-Fejér + +Dutch: +* Robert Borst + +German: +* Dennis Peteranderl +* Eduard Bruckner + +Greek: +* Γιάννης Ανθυμίδης +* Epameinondas Soufleros + +Finnish: +* Aarni +* Lasse Liehu + +French: +* Guillaume Gay +* Jérôme Borme + +Hebrew: +* Jacob Paikin + +Hungarian: +* Zoltán Adamek + +Italian: +* Andrea Bergamasco + +Indonesian: +* Eka Y Saputra + +Japanese: +* Kyo Nagashima + +Korean: +* Hwang In Tak + +Polish: +* Jakub Kowalski + +Portuguese: +* Jérôme Borme + +Portuguese (Brazil): +* Enrico Nicoletto +* Márcio Massula Jr. + +Romanian: +* Jaff (Oprea Nicolae) + +Russian: +* Danila Evstifeyev +* Dmitriy Kodanev +* Сергей Миронов + +Slovak: +* Jan Gallik + +Spanish: +* Adolfo Jayme Barrientos +* Freddy Sequera +* Luis Osa +* Verónica Jiménez + +Spanish (Mexico): +* Israel Buitrón + +Swedish: +* Daniel Nylander +* Påvel Nicklasson + +Turkish: +* Cüneyt Oktay +* Ülgen + +Ukrainian: +* Sergiy Gavrylov + +Vietnamese: +* Anh Phan (vi) + +Chinese (China): +* Dianjin Wang +* Jiajun Liu +* 勇 郭 + Icons ----- * Oxygen, http://www.oxygen-icons.org/ + Libraries --------- * Qt, http://qt-project.org/ diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 8eb07670..cf21f8fa 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -1,9 +1,59 @@ [Desktop Entry] Type=Application Name=FocusWriter +Name[cs]=FocusWriter +Name[da]=FocusWriter +Name[de]=FocusWriter +Name[el]=FocusWriter +Name[en_GB]=FocusWriter +Name[es]=FocusWriter +Name[fi]=FocusWriter +Name[fr]=FocusWriter +Name[he]=FocusWriter +Name[ko]=포커스 라이터 +Name[pl]=FocusWriter +Name[pt]=FocusWriter +Name[pt_BR]=FocusWriter +Name[ro]=FocusWriter +Name[sr]=FocusWriter +Name[tr]=FocusWriter +Name[vi]=FocusWriter GenericName=Fullscreen Word Processor +GenericName[cs]=Celoobrazovkový editor textu +GenericName[da]=Tekstbehandlingsprogram i fuld skærm GenericName[de]=Vollbild-Textverarbeitung +GenericName[el]=Επεξεργαστής Κειμένου Πλήρης Οθόνης +GenericName[en_GB]=Full-screen Word Processor +GenericName[es]=Procesador de textos a pantalla completa +GenericName[fi]=Koko näytön tekstinkäsittelyohjelma +GenericName[fr]=Traitement de texte plein écran +GenericName[he]=מעבד תמלילים במסך מלא +GenericName[ko]=풀스크린 워드 프로세서 +GenericName[pl]=Pełnoekranowy edytor tekstów +GenericName[pt]=Processador de textos em ecrã completo +GenericName[pt_BR]=Processador de texto em tela cheia +GenericName[ro]=Procesor de test pe tot ecranul +GenericName[sr]=Обрађивач текста у пуном екрану +GenericName[tr]=Tam Ekran Kelime İşlemci +GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình Comment=Write without distractions +Comment[cs]=Pište bez rozptylování +Comment[da]=Skriv uden at blive distraheret +Comment[de]=Schreibe ohne Ablenkung +Comment[el]=Γράψτε χωρίς ενόχληση +Comment[en_GB]=Write without distractions +Comment[es]=Escriba sin distracciones +Comment[fi]=Kirjoita ilman häiriötekijöitä +Comment[fr]=Écrivez sans distractions +Comment[he]=כתיבה ללא הסחות דעת +Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 +Comment[pl]=Pisz bez zakłóceń +Comment[pt]=Escreva sem distrações +Comment[pt_BR]=Escreva sem distrações +Comment[ro]=Scrieţi fără distrageri +Comment[sr]=Пишите без ометања +Comment[tr]=Dikkat dağıtıcılar olmadan yazın +Comment[vi]=Không tạo sự xao nhãng khi viết Icon=focuswriter TryExec=focuswriter Exec=focuswriter %F diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm index d863e2879f8ed0f4f98dcc4d7cb9c796ea39b1a7..c95d28eca60127bfae9256e64e24d82778c53f01 100644 GIT binary patch delta 4744 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 OpenDocument Text (*.odt) - Κείμενο OpenDocument (*.odt) + Έγγραφο Κειμένου ODF (*.odt) Rich Text (*.rtf) - Εμπλουτισμένο κείμενο (*.rtf) + Εμπλουτισμένο Κείμενο (*.rtf) @@ -124,7 +124,7 @@ File Changed - Αρχείο Έχει Αλλάξει + Το Αρχείο Έχει Αλλάξει @@ -144,12 +144,12 @@ Ignore - Αγνόηση + Παράβλεψη File Deleted - Αρχείο Διεγράφει + Αρχείο Διεγράφη @@ -167,7 +167,7 @@ Search for: - Αναζήτηση του: + Αναζήτηση για: @@ -228,8 +228,8 @@ Replace %n instance(s)? - Αντικατάσταση %n ευρημάτων/-τος; - Αντικατάσταση %n ευρημάτων/-τος; + Αντικατάσταση %n ευρήματος; + Αντικατάσταση %n ευρημάτων; @@ -260,7 +260,7 @@ Check Spelling... - Ορθογραφικός έλεγχος... + Ορθογραφικός Έλεγχος... @@ -273,7 +273,7 @@ Open Image - Άνοιγμα εικόνας + Άνοιγμα Εικόνας @@ -324,17 +324,17 @@ Toolbar - Γραμμή εργαλείων + Γραμμή Εργαλείων Spell Checking - Ορθογραφικός έλεγχος + Ορθογραφικός Έλεγχος Select Dictionary - Επιλογή λεξικού + Επιλογή Λεξικού @@ -360,12 +360,12 @@ Unable to open file '%1'. - Δεν ήταν δυνατό να ανοίξει το αρχείο '%1'. + Δεν ήταν δυνατό να ανοίξει το αρχείο «%1». Unable to close file '%1'. - Δεν ήταν δυνατό να κλείσει το αρχείο '%1'. + Δεν ήταν δυνατό να κλείσει το αρχείο «%1». @@ -386,17 +386,17 @@ The dictionary "%1" already exists. Do you want to replace it? - Το λεξικό '%1' υπάρχει ήδη. Θέλετε να αντικατασταθεί; + Το λεξικό «%1» υπάρχει ήδη. Θέλετε να αντικατασταθεί; Daily Goal - Ημερήσιος στόχος + Ημερήσιος Στόχος None - Κανείς + Κανένας @@ -467,7 +467,7 @@ Automatically save changes - Αποθήκευση αλλαγών αυτόματα + Αυτόματη αποθήκευση αλλαγών @@ -502,7 +502,7 @@ Page Size - Μέγεθος σελίδας + Διαστάσεις Σελίδας @@ -517,12 +517,12 @@ Word Count Algorithm - Αριθμός καταμέτρησης λέξεων + Αλγόριθμος Καταμέτρησης Λέξεων Detect word boundaries - Εντοπισμός ορίων λέξεων + Εντοπισμός Ορίων Λέξεων @@ -537,27 +537,27 @@ Icons Only - Μόνο εικονίδια + Μόνο Εικονίδια Text Only - Μόνο κείμενο + Μόνο Κείμενο Text Alongside Icons - Κείμενο πλάι στα εικονίδια + Κείμενο Πλάι στα Εικονίδια Text Under Icons - Κείμενο κάτω από τα εικονίδια + Κείμενο Κάτω από τα Εικονίδια Text Position: - Θέση κειμένου: + Θέση Κειμένου: @@ -567,17 +567,17 @@ Move Up - Μετακίνηση πάνω + Μετακίνηση Πάνω Move Down - Μετακίνηση κάτω + Μετακίνηση Κάτω Add Separator - Προσθήκη διαχωριστικού + Προσθήκη Διαχωριστικού @@ -592,7 +592,7 @@ Action - Δράση + Ενέργεια @@ -602,7 +602,7 @@ Ignore words in UPPERCASE - Παράβλεψη λέξεων με κεφαλαία + Παράβλεψη λέξεων σε ΚΕΦΑΛΑΙΑ @@ -628,7 +628,7 @@ Personal Dictionary - Προσωπικό λεξικό + Προσωπικό Λεξικό @@ -647,12 +647,12 @@ Unable to open file '%1'. - Δεν ήταν δυνατό να ανοίξει το αρχείο '%1'. + Δεν ήταν δυνατό να ανοίξει το αρχείο «%1». Unable to close file '%1'. - Δεν ήταν δυνατό να κλείσει το αρχείο '%1'. + Δεν ήταν δυνατό να κλείσει το αρχείο «%1». @@ -665,7 +665,7 @@ Move Scenes Up - Μετακίνηση Σκηνές Up προς τα πάνω + Μετακίνηση Σκηνών Πάνω @@ -675,7 +675,7 @@ Toggle Scene List - Εναλλαγή Λίστας Σκηνων + Εναλλαγή Λίστας Σκηνών @@ -685,12 +685,12 @@ Show scene list (%1) - Εμφάνιση λίστας σκηνης (%1) + Εμφάνιση λίστας σκηνών (%1) Hide scene list (%1) - Απόκρυψη λίστας σκηνής (%1) + Απόκρυψη λίστας σκηνών (%1) @@ -700,7 +700,7 @@ Move Scenes Down - Μετακίνηση σκηνων προς τα κάτω + Μετακίνηση Σκηνών Κάτω @@ -727,7 +727,7 @@ Manage Sessions - Διαχείριση περιόδων λειτουργίας + Διαχείριση Περιόδων Λειτουργίας @@ -757,22 +757,22 @@ Switch To - Εναλλαγή σε + Εναλλαγή Σε New Session - Νέα περίοδο λειτουργίας + Νέα Περίοδος Λειτουργίας Clone Session - Κλωνοποίηση περιόδου λειτουργίας + Κλωνοποίηση Περιόδου Λειτουργίας Rename Session - Μετονομασία περιόδου λειτουργίας + Μετονομασία Περιόδου Λειτουργίας @@ -782,7 +782,7 @@ Delete selected session? - Διαγραφή επιλεγμένης περιόδου λειτουργίας; + Να διαγραφή η επιλεγμένη περιόδου λειτουργίας; @@ -849,7 +849,7 @@ Please Wait - Περιμένετε + Παρακαλώ Περιμένετε @@ -857,32 +857,32 @@ Check Spelling - Ορθογραφικός έλεγχος + Ορθογραφικός Έλεγχος &Add - Προσθήκη + &Προσθήκη &Ignore - Αγνόηση + Πα&ράβλεψη I&gnore All - Παράβλεψη όλων + Παράβλε&ψη Όλων &Change - Αλλαγή + &Αλλαγή C&hange All - Αλλαγή όλων + Α&λλαγή Όλων @@ -897,22 +897,22 @@ Checking spelling... - Έλεγχος ορθογραφίας... + Γίνεται έλεγχος ορθογραφίας... Cancel - Άκυρο + Ακύρωση Please wait - Περιμένετε + Παρακαλώ Περιμένετε Spell check complete. - Ολοκληρώθηκε ο ορθογραφικός έλεγχος. + Ο ορθογραφικός έλεγχος ολοκληρώθηκε. @@ -953,12 +953,12 @@ Blocks - Μπλοκ + Κουτάκια Scripts - Σκριπτ + Γραφές @@ -1016,7 +1016,7 @@ Zoomed - Μεγεθυμένη + Μεγεθυσμένη @@ -1056,7 +1056,7 @@ pixels - pixel + pixel @@ -1146,7 +1146,7 @@ Indent First Line: - Εσοχή πρώτης γραμμής: + Εσοχή Πρώτης Γραμμής: @@ -1156,12 +1156,12 @@ Pixels Below: - Pixel Παρακάνω: + Pixel Παρακάτω: The quick brown fox jumps over the lazy dog - Θέλει αρετή και τόλμη η ελευθερία + Ξεσκεπάζω την ψυχοφθόρα βδελυγμία @@ -1234,7 +1234,7 @@ A theme already exists with that name. Please enter a new name: - Υπάρχει ήδη θέμα με αυτό το όνομα. Γράψτε νέο όνομα: + Υπάρχει ήδη θέμα με αυτό το όνομα. Παρακαλώ γράψτε νέο όνομα: @@ -1257,7 +1257,7 @@ Delete timer? - Διαγραφή χρονομέτρου; + Να διαγραφεί το χρονομέτρο; @@ -1368,7 +1368,7 @@ Cancel editing timers? - Ακύρωση επεξεργασίας χρονομέτρων; + Να ακυρωθεί η επεξεργασία χρονομέτρων; @@ -1548,7 +1548,7 @@ Restore from the emergency cache? - Να γίνει επαναφορά από την cache εκτάκτου ανάγκης; + Να γίνει επαναφορά από τη μνήμη εκτάκτου ανάγκης; @@ -1563,12 +1563,12 @@ Text Files (%1);;All Files (*) - Αρχεία κειμένου (%1);;Όλα τα αρχεία (*) + Αρχεία Κειμένου (%1);;Όλα τα αρχεία (*) '%1' is newer than the cached copy. - Το '%1' είναι νεότερο από το αντίγραφο στην cache. + Το «%1» είναι νεότερο από το αντίγραφο στη μνήμη. @@ -1693,7 +1693,7 @@ Paste &Unformatted - Επικόλληση χωρίς μορφοποίηση + Επικόλληση &Χωρίς Μορφοποίηση @@ -1703,12 +1703,12 @@ Select &All - Επιλογή όλ&ων + Επιλογή Όλ&ων Select &Scene - Επιλογή σκηνης + Επιλογή &Σκηνής @@ -1758,7 +1758,7 @@ &Subscript - Δεί&κτης + &Δείκτης @@ -1768,7 +1768,7 @@ Align &Left - Στοίχιση &αριστερά + Στοίχιση &Αριστερά @@ -1778,7 +1778,7 @@ Align &Center - Στοίχιση στο κέν&τρο + Στοίχιση στο Κέν&τρο @@ -1788,7 +1788,7 @@ Align &Right - Στοίχιση &δεξιά + Στοίχιση &Δεξιά @@ -1798,7 +1798,7 @@ Align &Justify - Πλήρης &στοίχιση + Πλήρης &Στοίχιση @@ -1808,7 +1808,7 @@ &Decrease Indent - Μεί&ωση εσοχής + Μεί&ωση Εσοχής @@ -1818,7 +1818,7 @@ I&ncrease Indent - Αύ&ξηση εσοχής + Αύ&ξηση Εσοχής @@ -1828,12 +1828,12 @@ Le&ft to Right Block - Δεξιόστ&ροφη γραφή + Δεξιόστ&ροφη Γραφή Ri&ght to Left Block - Αριστερόστρο&φη γραφή + Αριστερόστρο&φη Γραφή @@ -1848,12 +1848,12 @@ Find &Next - Εύρεση &επόμενου + Εύρεση &Επόμενου Find Pre&vious - Εύρεση &προηγούμενου + Εύρεση &Προηγούμενου @@ -1868,7 +1868,7 @@ Smart &Quotes - Έξυπνα εισαγ&ωγικά + Έξυπνα Εισαγ&ωγικά @@ -1878,7 +1878,7 @@ Update &Selection - Ε&νημέρωση επιλογής + Ε&νημέρωση Επιλογής @@ -1898,7 +1898,7 @@ S&ymbols... - Συμβολα... + Σύμ&βολα... @@ -1908,22 +1908,22 @@ Show &Toolbar - Εμφάνιση γραμμής εργα&λείων + Εμφάνιση Γραμμής Εργα&λείων Show &Menu Icons - Εμφάνιση εικονιδίων &μενού + Εμφάνιση Εικονιδίων &Μενού F&ocused Text - F&ocused Κείμενο + Εστιασμένο &Κείμενο &Fullscreen - Πλήρης οθό&νη + Πλήρης Οθό&νη @@ -1958,7 +1958,7 @@ Focus Off - Εστίαση Ανένεργη + Εστίαση Ανενεργή @@ -1973,7 +1973,7 @@ &Paragraph - Παραγραφος + &Παραγράφου @@ -1988,27 +1988,27 @@ Application &Language... - &Γλώσσα εφαρμογής... + &Γλώσσα Εφαρμογής... Some files were unsupported and could not be opened. - Ορισμένα αρχεία δεν υποστηρίζονται και δεν θα ανοιχτούν. + Ορισμένα αρχεία δεν υποστηρίζονται και δεν ήταν δυνατό να ανοιχτούν. &Off - Απενεργοποιηση + &Απενεργοποίηση One &Line - Μία Γραμμή + &Μία Γραμμή &Three Lines - Τρεις Γραμμές + &Τρεις Γραμμές diff --git a/translations/focuswriter_en_GB.qm b/translations/focuswriter_en_GB.qm new file mode 100644 index 0000000000000000000000000000000000000000..f45e7b63b47ba993d3ac1947b5156bea039e0e5f GIT binary patch literal 30772 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 vqEDw + + + + Alert + + + Close (%1) + Close (%1) + + + + Collapse + Collapse + + + + Expand + Expand + + + + AlertLayer + + + Dismiss Alert + Dismiss Alert + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Sorry + + + + Unable to save '%1'. + Unable to save '%1'. + + + + Save File As + Save File As + + + + + Unable to overwrite '%1'. + Unable to overwrite '%1'. + + + + Rename File + Rename File + + + + Unable to rename '%1'. + Unable to rename '%1'. + + + + Reload File + Reload File + + + + Reload the file %1 from disk? + Reload the file %1 from disk? + + + + All unsaved changes will be lost. + All unsaved changes will be lost. + + + + Reload + Reload + + + + Plain Text (*.txt) + Plain Text (*.txt) + + + + Question + Question + + + + Saving as plain text will discard all formatting. Discard formatting? + Saving as plain-text will discard all formatting. Discard formatting? + + + + OpenDocument Text (*.odt) + OpenDocument Text (*.odt) + + + + Rich Text (*.rtf) + Rich Text (*.rtf) + + + + All Files (*) + All Files (*) + + + + DocumentWatcher + + + File Changed + File Changed + + + + The file %1 was changed by another program. + The file %1 was changed by another programme. + + + + Do you want to reload the file? + Do you want to reload the file? + + + + Reload + Reload + + + + Ignore + Ignore + + + + File Deleted + File Deleted + + + + The file %1 was deleted by another program. + The file %1 was deleted by another programme. + + + + Do you want to save or close the file? + Do you want to save or close the file? + + + + FindDialog + + + Search for: + Search for: + + + + Replace with: + Replace with: + + + + Ignore case + Ignore case: + + + + Whole words only + Whole words only + + + + Regular expressions + Regular expressions + + + + Search up + Search up + + + + Search down + Search down + + + + &Find + &Find + + + + &Replace + &Replace + + + + Replace &All + Replace &All + + + + Find + Find + + + + Replace + Replace + + + + Replace %n instance(s)? + + Replace %n instance? + Replace %n instances? + + + + + Question + Question + + + + + Sorry + Sorry + + + + + Phrase not found. + Phrase not found. + + + + Highlighter + + + Add + Add + + + + Check Spelling... + Check Spelling... + + + + (No suggestions found) + (No suggestions found) + + + + ImageButton + + + Open Image + Open Image + + + + Images(%1) + Images(%1) + + + + LocaleDialog + + + Select application language: + Select application language: + + + + <System Language> + <System Language> + + + + Note + Note + + + + Please restart this application for the change in language to take effect. + Please restart the application for the language change to take effect. + + + + PreferencesDialog + + + Preferences + Preferences + + + + General + General + + + + Statistics + Statistics + + + + Toolbar + Toolbar + + + + Spell Checking + Spell Checking + + + + Select Dictionary + Select Dictionary + + + + + Sorry + Sorry + + + + Unable to open archive. + Unable to open archive. + + + + Unable to read archive metadata. + Unable to read archive metadata. + + + + The archive does not contain a usable dictionary. + The archive does not contain a usable dictionary. + + + + Unable to open file '%1'. + Unable to open file '%1'. + + + + Unable to close file '%1'. + Unable to close file '%1'. + + + + + Question + Question + + + + Shortcuts + Shortcuts + + + + One or more shortcuts conflict. Do you wish to proceed? + One or more shortcuts conflict. Do you wish to proceed? + + + + The dictionary "%1" already exists. Do you want to replace it? + The dictionary "%1" already exists. Do you want to replace it? + + + + Daily Goal + Daily Goal + + + + None + None + + + + Minutes: + Minutes: + + + + + Words: + Words: + + + + Editing + Editing: + + + + Always vertically center + Always centre vertically + + + + Block insertion cursor + Block insertion cursor + + + + Smooth fonts + Smooth fonts + + + + Typewriter sounds + Typewriter sounds + + + + Smart quotes: + Smart quotes: + + + + Double + Double + + + + Single + Single + + + + Scenes + Scenes + + + + Divider: + Divider: + + + + Saving + Saving + + + + Automatically save changes + Automatically save changes + + + + Remember cursor position + Remember cursor position + + + + Contents + Contents + + + + Word count + Word count + + + + Page count + Page count + + + + Paragraph count + Paragraph count + + + + Character count + Character count + + + + Page Size + Page Size + + + + Characters: + Characters: + + + + Paragraphs: + Paragraphs: + + + + Word Count Algorithm + Word Count Algorithm + + + + Detect word boundaries + Detect word boundaries + + + + Divide character count by six + Divide character count by six + + + + Style + Style + + + + Icons Only + Icons Only + + + + Text Only + Text Only + + + + Text Alongside Icons + Text Alongside Icons + + + + Text Under Icons + Text Under Icons + + + + Text Position: + Text Position: + + + + Actions + Actions + + + + Move Up + Move Up + + + + Move Down + Move Down + + + + Add Separator + Add Separator + + + + Command + Command + + + + Shortcut + Shortcut + + + + Action + Action + + + + Check spelling as you type + Check spelling as you type + + + + Ignore words in UPPERCASE + Ignore words in UPPERCASE + + + + Ignore words with numbers + Ignore words with numbers + + + + Language + Language + + + + + Add + Add + + + + Remove + Remove + + + + Personal Dictionary + Personal Dictionary + + + + Reader + + + + Not a supported RTF file. + Not a supported RTF file. + + + + Unable to open archive. + Unable to open archive. + + + + Unable to open file '%1'. + Unable to open file '%1'. + + + + Unable to close file '%1'. + Unable to close file '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + Move Scenes Up + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + Toggle Scene List + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Show scene list (%1) + + + + Hide scene list (%1) + Hide scene list (%1) + + + + Filter + Filter + + + + Move Scenes Down + Move Scenes Down + + + + Resize scene list + Resize scene list + + + + Session + + + + + + + + + Default + Default + + + + SessionManager + + + Manage Sessions + Manage Sessions + + + + S&essions + S&essions + + + + New + New + + + + Rename + Rename + + + + Clone + Clone + + + + Delete + Delete + + + + Switch To + Switch To + + + + New Session + New Session + + + + Clone Session + Clone Session + + + + Rename Session + Rename Session + + + + Question + Question + + + + Delete selected session? + Delete selected session? + + + + Session name: + Session name: + + + + Sorry + Sorry + + + + The requested session name is already in use. + The requested session name is already in use. + + + + &New... + &New... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Manage... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Clear + + + + Reset to Default + Reset to Default + + + + + Shortcut: + Shortcut: + + + + SmartQuote + + + Replacing quotation marks... + Replacing quotation marks... + + + + Please Wait + Please Wait + + + + SpellChecker + + + Check Spelling + Check Spelling + + + + &Add + &Add + + + + &Ignore + &Ignore + + + + I&gnore All + I&gnore All + + + + &Change + &Change + + + + C&hange All + C&hange All + + + + Not in dictionary: + Not in dictionary: + + + + Change to: + Change to: + + + + Checking spelling... + Checking spelling... + + + + Cancel + Cancel + + + + Please wait + Please wait + + + + Spell check complete. + Spell check complete + + + + SymbolsDialog + + + Symbols + Symbols + + + + Recently used symbols + Recently used symbols + + + + All symbols + All symbols + + + + Details + Details + + + + Name: + Name: + + + + Insert + Insert + + + + SymbolsModel + + + Blocks + Blocks + + + + Scripts + Scripts + + + + Theme + + + Untitled %1 + Untitled %1 + + + + ThemeDialog + + + Modify Theme + Modify Theme + + + + Name: + Name: + + + + Background + Background + + + + No Image + No image + + + + Tiled + Tiled + + + + + Centered + Centred + + + + + Stretched + Stretched + + + + Scaled + Scaled + + + + Zoomed + Zoomed + + + + Remove + Remove + + + + Type: + Type: + + + + + + Color: + Colour: + + + + Image: + Image: + + + + Foreground + Foreground + + + + Opacity + Opacity + + + + + + + pixels + pixels + + + + Left + Left + + + + Right + Right + + + + Position + Position + + + + Size: + Size: + + + + Rounding: + Rounding: + + + + Margin: + Margin: + + + + Padding: + Padding: + + + + Text + Text + + + + Font: + Font: + + + + Misspelled: + Misspelt: + + + + Spacings + Spacings + + + + Line Spacing + Line Spacing + + + + Single + Single + + + + 1.5 Lines + 1.5 Lines + + + + Double + Double + + + + Proportional + Proportional + + + + Paragraph Spacing + Paragraph Spacing + + + + Indent First Line: + Indent First Line: + + + + Pixels Above: + Pixels Above: + + + + Pixels Below: + Pixels Below: + + + + The quick brown fox jumps over the lazy dog + The quick brown fox jumps over the lazy dog + + + + ThemeManager + + + Themes + Themes + + + + Add + Add + + + + Modify + Modify + + + + Remove + Remove + + + + Import + Import + + + + Export + Export + + + + Close + Close + + + + Question + Question + + + + Remove selected theme? + Remove selected theme? + + + + Import Theme + Import Theme + + + + Themes (*.fwtz *.theme) + Themes (*.fwtz *.theme) + + + + Themes (*.fwtz) + Themes (*.fwtz) + + + + Sorry + Sorry + + + + A theme already exists with that name. Please enter a new name: + A theme with that name already exists. Please enter a new name: + + + + Export Theme + Export Theme + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Question + + + + Delete timer? + Delete timer? + + + + <b>Words:</b> %L1 + <b>Words:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Pages:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Paragraphs:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Characters:</b> %L1 / %L2 + + + + Set Delay + Set Delay + + + + Set Time + Set Time + + + + Delay: + Delay: + + + + Time: + Time: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Alarm + + + + Type: + Type: + + + + Memo: + Note: + + + + Edit + Edit + + + + Delete + Delete + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + No timers running + + + + TimerManager + + + Timers + Timers + + + + New + New + + + + Recent + Recent + + + + Question + Question + + + + Cancel editing timers? + Cancel editing timers? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Unexpectedly reached end of file + + + + Window + + + Loading themes + Loading themes + + + + Loading sounds + Loading sounds + + + + + Untitled + Untitled + + + + Open File + Open File + + + + About FocusWriter + About FocusWriter + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + A simple full-screen word processor + + + + Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Released under the <a href=%1>GPL 3</a> licence + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + Used under the <a href=%1>LGPL 3</a> license + Used under the <a href=%1>LGPL 3</a> licence + + + + + Characters: %L1 / %L2 + Characters: %L1 / %L2 + + + + + Pages: %L1 + Pages: %L1 + + + + + Paragraphs: %L1 + Paragraphs: %L1 + + + + + Words: %L1 + Words: %L1 + + + + + %1% of daily goal + %1% of daily goal + + + + + Opening %1 + Opening %1 + + + + Question + Question + + + + Save changes? + Save changes? + + + + + (Untitled %1) + (Untitled %1) + + + + Switch to Next Document + Switch to Next Document + + + + Switch to Previous Document + Switch to Previous Document + + + + Switch to First Document + Switch to First Document + + + + Switch to Last Document + Switch to Last Document + + + + Switch to Document %1 + Switch to Document %1 + + + + Loading settings + Loading settings + + + + Emergency cache is not writable. + Emergency cache is not writable. + + + + + Warning + Warning + + + + FocusWriter was not shut down cleanly. + FocusWriter was not shut down cleanly. + + + + Restore from the emergency cache? + Restore from the emergency cache? + + + + Some files could not be opened. + Some files could not be opened. + + + + Some files were opened Read-Only. + Some files were opened as Read-Only. + + + + Text Files (%1);;All Files (*) + Text Files (%1);;All Files (*) + + + + '%1' is newer than the cached copy. + '%1' is newer than the cached copy. + + + + Overwrite newer file? + Overwrite the newer file? + + + + Unable to load typewriter sounds. + Unable to load typewriter sounds. + + + + Please make sure that SDL_mixer is installed. + Please ensure that SDL_mixer is installed. + + + + %1 (Read-Only) + %1 (Read-Only) + + + + &File + &File + + + + &New + &New + + + + &Open... + &Open... + + + + Reloa&d + Reloa&d + + + + &Save + &Save + + + + Save &As... + Save &As... + + + + &Rename... + &Rename... + + + + Save A&ll + Save A&ll + + + + Manage Sessions + Manage Sessions + + + + New Session + New Session + + + + &Print... + &Print... + + + + &Close + &Close + + + + &Quit + &Quit + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Edit + + + + &Undo + &Undo + + + + &Redo + &Redo + + + + Cu&t + Cu&t + + + + &Copy + &Copy + + + + &Paste + &Paste + + + + Paste &Unformatted + Paste &Unformatted + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Select &All + + + + Select &Scene + Select &Scene + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Fo&rmat + + + + &Bold + &Bold + + + + &Italic + &Italic + + + + &Underline + &Underline + + + + Stri&kethrough + Stri&kethough + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Sup&erscript + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Subscript + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Align &Left + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Align &Centre + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Align &Right + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Align &Justify + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Decrease Indent + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + I&ncrease Indent + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Le&ft to Right Block + + + + Ri&ght to Left Block + Ri&ght to Left Block + + + + &Tools + &Tools + + + + &Find... + &Find... + + + + Find &Next + Find &Next + + + + Find Pre&vious + Find Pre&vious + + + + &Replace... + &Replace... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Smart &Quotes + + + + Update &Document + Update &Document + + + + Update &Selection + Update &Selection + + + + &Spelling... + &Spelling... + + + + F7 + F7 + + + + &Timers... + &Timers... + + + + S&ymbols... + S&ymbols... + + + + &Settings + &Settings + + + + Show &Toolbar + Show &Toolbar + + + + Show &Menu Icons + Show &Menu Icons + + + + F&ocused Text + F&ocused Text + + + + &Fullscreen + &Full-screen + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + M&inimise + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Themes... + + + + &Preferences... + &Preferences... + + + + Focus Off + Focus Off + + + + Focus One Line + Focus One Line + + + + Focus Three Lines + Focus Three Lines + + + + &Paragraph + &Paragraph + + + + Focus Paragraph + Focus Paragraph + + + + &Help + &Help + + + + Application &Language... + Application &Language... + + + + Some files were unsupported and could not be opened. + Some files are unsupported and could not be opened. + + + + &Off + &Off + + + + One &Line + One &Line + + + + &Three Lines + &Three Lines + + + + &About + &About + + + + About &Qt + About &Qt + + + diff --git a/translations/focuswriter_fi.qm b/translations/focuswriter_fi.qm index 08a7f25ec0e74a932012655bf5d3d8be42f83b65..70a30f09e0fed14fd8dbb13235f6be2b6da50983 100644 GIT binary patch delta 10300 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 delta 4977 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 diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 31352e2f..03cc85c2 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -6,7 +6,7 @@ Close (%1) - + Sulje (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Kuittaa hälytys @@ -45,7 +45,7 @@ Unable to save '%1'. - %1 - tallentaminen epäonnistui. + Tiedoston %1 tallentaminen epäonnistui. @@ -56,42 +56,42 @@ Unable to overwrite '%1'. - Ei voitu korvata "%1". + Tiedoston ”%1” korvaaminen epäonnistui. Rename File - Uudelleennimeä + Nimeä tiedosto uudelleen Unable to rename '%1'. - Ei voitu nimetä uudelleen "%1". + Tiedoston ”%1” nimen muuttaminen epäonnistui. Reload File - + Lataa tiedosto uudelleen Reload the file %1 from disk? - + Ladataanko tiedosto %1 uudelleen levyltä? All unsaved changes will be lost. - + Kaikki tallentamattomat muutokset menetetään. Reload - + Lataa uudelleen Plain Text (*.txt) - Teksti (*.txt) + Muotoilematon teksti (*.txt) @@ -101,7 +101,7 @@ Saving as plain text will discard all formatting. Discard formatting? - + Muotoilemattomana tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? @@ -124,42 +124,42 @@ File Changed - + Tiedosto muuttui The file %1 was changed by another program. - + Toinen ohjelma on muuttanut tiedostoa %1. Do you want to reload the file? - + Haluatko ladata tiedoston uudelleen? Reload - + Lataa uudelleen Ignore - + Jätä huomiotta File Deleted - + Tiedosto poistettu The file %1 was deleted by another program. - + Toinen ohjelma on poistanut tiedoston %1. Do you want to save or close the file? - + Haluatko tallentaa vai sulkea tiedoston? @@ -177,17 +177,17 @@ Ignore case - Kirjainkoolla väliä + Kirjainkoolla ei väliä Whole words only - Kokonaiset sanat + Vain kokonaiset sanat Regular expressions - + Säännölliset lausekkeet @@ -212,7 +212,7 @@ Replace &All - Korvaa K&aikki + Korvaa k&aikki @@ -228,8 +228,8 @@ Replace %n instance(s)? - Korvataanko %n tapaus? - Korvataanko %n tapausta? + Korvataanko %n esiintymä? + Korvataanko %n esiintymää? @@ -260,7 +260,7 @@ Check Spelling... - Tarkista oikeinkirjoitus... + Tarkista oikeinkirjoitus… @@ -301,7 +301,7 @@ Please restart this application for the change in language to take effect. - Ole hyvä ja käynnistä sovellus uudelleen jotta kielen muutos astuu voimaan. + Ole hyvä ja käynnistä sovellus uudelleen, jotta kielen muutos tulee voimaan. @@ -314,7 +314,7 @@ General - Yleinen + Yleisasetukset @@ -324,7 +324,7 @@ Toolbar - Työkalu + Työkalupalkki @@ -345,12 +345,12 @@ Unable to open archive. - Ei voitu avata arkistoa. + Arkiston avaaminen epäonnistui. Unable to read archive metadata. - Ei voitu lukea arkiston metatietoja. + Arkiston metatietojen lukeminen epäonnistui. @@ -360,12 +360,12 @@ Unable to open file '%1'. - Ei voitu avata tiedostoa "%1". + Tiedoston ”%1” avaaminen epäonnistui. Unable to close file '%1'. - Ei voitu sulkea tiedostoa "%1". + Tiedoston ”%1” sulkeminen epäonnistui. @@ -376,17 +376,17 @@ Shortcuts - + Pikanäppäimet One or more shortcuts conflict. Do you wish to proceed? - + Yksi tai useampi päällekkäinen pikanäppäin. Haluatko jatkaa? The dictionary "%1" already exists. Do you want to replace it? - Sanakirja "%1" on jo olemassa. Haluatko korvata sen? + Sanakirja ”%1” on jo olemassa. Haluatko korvata sen? @@ -396,18 +396,18 @@ None - Tyhjä + Ei tavoitetta Minutes: - Minuutteja: + Minuutteina: Words: - Sanoja: + Sanoina: @@ -442,27 +442,27 @@ Double - Tupla + Kokolainausmerkit Single - Yksi + Puolilainausmerkit Scenes - + Kohtaukset Divider: - + Erotin: Saving - Tallennetaan + Tallennus @@ -507,12 +507,12 @@ Characters: - Kirjainmäärä: + Merkkeinä: Paragraphs: - Kappaleet: + Kappaleina: @@ -547,7 +547,7 @@ Text Alongside Icons - Teksti ja kuvakkeet + Teksti kuvakkeiden vieressä @@ -567,12 +567,12 @@ Move Up - Siirrä ylös + Siirrä ylemmäs Move Down - Siirrä alas + Siirrä alemmas @@ -582,17 +582,17 @@ Command - + Komento Shortcut - + Pikanäppäin Action - + Toiminto @@ -602,7 +602,7 @@ Ignore words in UPPERCASE - Ohita sanat ISOILLA + Ohita SUURAAKKOSIN kirjoitetut sanat @@ -642,17 +642,17 @@ Unable to open archive. - Ei voi avata arkistoa. + Arkiston avaaminen epäonnistui. Unable to open file '%1'. - Ei voitu avata tiedostoa "%1". + Tiedoston ”%1” avaaminen epäonnistui. Unable to close file '%1'. - Ei voitu sulkea tiedostoa "%1". + Tiedoston ”%1” sulkeminen epäonnistui. @@ -660,52 +660,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Down Move Scenes Up - + Siirrä kohtauksia ylemmäs Ctrl+Shift+Up - + Ctrl+Shift+Up Toggle Scene List - + Näytä tai piilota kohtausluettelo Shift+F4 - + Shift+F4 Show scene list (%1) - + Näytä kohtausluettelo (%1) Hide scene list (%1) - + Piilota kohtausluettelo (%1) Filter - + Suodata Move Scenes Down - + Siirrä kohtauksia alemmas Resize scene list - + Muuta kohtausluettelon kokoa @@ -732,7 +732,7 @@ S&essions - I&stunnot + &Istunnot @@ -772,7 +772,7 @@ Rename Session - Uudelleennimeä sessio + Nimeä istunto uudelleen @@ -802,7 +802,7 @@ &New... - &Uusi... + &Uusi… @@ -812,7 +812,7 @@ &Manage... - &Hallinnoi... + &Hallinnoi… @@ -825,18 +825,18 @@ Clear - + Tyhjennä Reset to Default - + Palauta oletusarvoon Shortcut: - + Pikanäppäin: @@ -844,12 +844,12 @@ Replacing quotation marks... - Korvataan lainausmerkkejä... + Korvataan lainausmerkkejä… Please Wait - Odota + Odota hetki @@ -872,7 +872,7 @@ I&gnore All - Jätä kaikki huo&miotta + &Jätä kaikki huomiotta @@ -882,7 +882,7 @@ C&hange All - Muuta kaikk&i + Muuta &kaikki @@ -897,7 +897,7 @@ Checking spelling... - Tarkistetaan oikeinkirjoitusta... + Tarkistetaan oikeinkirjoitusta… @@ -907,7 +907,7 @@ Please wait - Odota + Odota hetki @@ -920,22 +920,22 @@ Symbols - + Symbolit Recently used symbols - + Viimeksi käytetyt symbolit All symbols - + Kaikki symbolit Details - + Tiedot @@ -945,7 +945,7 @@ Insert - + Lisää @@ -953,12 +953,12 @@ Blocks - + Lohkot Scripts - + Kirjoitusjärjestelmät @@ -1056,17 +1056,17 @@ pixels - pikseliä + pikseliä Left - Vasen + Vasemmalla Right - Oikea + Oikealla @@ -1126,7 +1126,7 @@ 1.5 Lines - 1.5-kertainen + 1,5-kertainen @@ -1151,12 +1151,12 @@ Pixels Above: - Pikseleitä yläpuolella + Pikseleitä yläpuolella: Pixels Below: - Pikseleitä alapuolella + Pikseleitä alapuolella: @@ -1262,22 +1262,22 @@ <b>Words:</b> %L1 - <b>Sanat:</b> %L1 + <b>Sanoja:</b> %L1 <b>Pages:</b> %L1 - <b>Sivut:</b> %L1 + <b>Sivuja:</b> %L1 <b>Paragraphs:</b> %L1 - <b>Kappaleet:</b> %L1 + <b>Kappaleita:</b> %L1 <b>Characters:</b> %L1 / %L2 - <b>Kirjaimet:</b> %L1 / %L2 + <b>Merkkejä:</b> %L1 / %L2 @@ -1302,7 +1302,7 @@ HH:mm:ss - TT:mm:ss + HH:mm:ss @@ -1335,7 +1335,7 @@ HH:mm:ss - TT:mm:ss + HH:mm:ss @@ -1358,7 +1358,7 @@ Recent - Viimeisin + Viimeisimmät @@ -1378,7 +1378,7 @@ %1 - %2 - %1 - %2 + %1 – %2 @@ -1425,12 +1425,12 @@ A simple fullscreen word processor - Yksinkertainen kokoruudun tekstinkäsittelyohjelma + Yksinkertainen koko näytön tekstinkäsittelyohjelma Copyright &copy; 2008-%1 Graeme Gott - Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008–%1 Graeme Gott @@ -1451,31 +1451,31 @@ Characters: %L1 / %L2 - Kirjaimet: %L1 / %L2 + Merkkejä: %L1 / %L2 Pages: %L1 - Sivut: %L1 + Sivuja: %L1 Paragraphs: %L1 - Kappaleet: %L1 + Kappaleita: %L1 Words: %L1 - Sanat: %L1 + Sanoja: %L1 %1% of daily goal - %1% päivittäisestä tavoiteesta + %1 % päivittäisestä tavoiteesta @@ -1502,37 +1502,37 @@ Switch to Next Document - + Siirry seuraavaan asiakirjaan Switch to Previous Document - + Siirry edelliseen asiakirjaan Switch to First Document - + Siirry ensimmäiseen asiakirjaan Switch to Last Document - + Siirry viimeiseen asiakirjaan Switch to Document %1 - + Siirry asiakirjaan %1 Loading settings - Ladataan asennuksia + Ladataan asetuksia Emergency cache is not writable. - Hätävälimuistia ei voida kirjoittaa. + Hätävälimuistiin ei voida kirjoittaa. @@ -1558,7 +1558,7 @@ Some files were opened Read-Only. - Osa tiedostoista avattiin Vain Luku -tilassa + Osa tiedostoista avattiin vain luku -tilassa. @@ -1578,12 +1578,12 @@ Unable to load typewriter sounds. - Ei pystytty lataamaan kirjoituskoneääniä. + Kirjoituskoneäänien lataaminen epäonnistui. Please make sure that SDL_mixer is installed. - + Tarkista, että SDL_mixer on asennettu. @@ -1603,12 +1603,12 @@ &Open... - &Avaa... + &Avaa… Reloa&d - + Lataa uu&delleen @@ -1618,12 +1618,12 @@ Save &As... - Tallenna &nimellä... + Tallenna &nimellä… &Rename... - &Nimeä uudelleen... + Ni&meä uudelleen… @@ -1643,7 +1643,7 @@ &Print... - &Tulosta... + Tul&osta… @@ -1678,7 +1678,7 @@ Cu&t - Leik&kaa + L&eikkaa @@ -1693,7 +1693,7 @@ Paste &Unformatted - Liitä &Muotoilematta + Liitä &muotoilematta @@ -1703,42 +1703,42 @@ Select &All - Valitse kaikki + Valitse k&aikki Select &Scene - + &Valitse kohtaus Ctrl+Shift+A - + Ctrl+Shift+A Fo&rmat - Muo&toile + M&uotoile &Bold - &Lihavoitu + Li&havointi &Italic - &Kursivoitu + Ku&rsivointi &Underline - &Alleviivattu + All&eviivaus Stri&kethrough - Yli&viivattu + Yl&iviivaus @@ -1748,7 +1748,7 @@ Sup&erscript - Ylä&indeksi + &Yläindeksi @@ -1828,22 +1828,22 @@ Le&ft to Right Block - Vasemm&alta oikealle + Vase&mmalta oikealle Ri&ght to Left Block - Oike&alta vasemmalle + Oikea&lta vasemmalle &Tools - &Työkalut + T&yökalut &Find... - &Etsi... + &Etsi… @@ -1858,7 +1858,7 @@ &Replace... - &Korvaa... + &Korvaa… @@ -1868,7 +1868,7 @@ Smart &Quotes - Alykkäät &lainausmerkit + Älykkäät &lainausmerkit @@ -1883,7 +1883,7 @@ &Spelling... - &Oikeinkirjoitus... + &Oikeinkirjoitus… @@ -1893,12 +1893,12 @@ &Timers... - &Ajastimet... + &Ajastimet… S&ymbols... - + S&ymbolit… @@ -1908,7 +1908,7 @@ Show &Toolbar - Näytä &työkalut + Näytä &työkalupalkki @@ -1923,7 +1923,7 @@ &Fullscreen - &Koko näyttö + Koko &näyttö @@ -1948,27 +1948,27 @@ &Themes... - &Teemat... + T&eemat… &Preferences... - &Asetukset... + &Asetukset… Focus Off - + Kohdistus pois päältä Focus One Line - + Kohdista yksi rivi Focus Three Lines - + Kohdista kolme riviä @@ -1978,7 +1978,7 @@ Focus Paragraph - + Kohdista kappale @@ -1988,17 +1988,17 @@ Application &Language... - Sovelluksen &kieli... + Sovelluksen &kieli… Some files were unsupported and could not be opened. - + Joidenkin tiedostojen tiedostomuotoja ei tueta; niiden avaaminen epäonnistui. &Off - P&ois + &Pois @@ -2008,7 +2008,7 @@ &Three Lines - &Kolme riviä + Kolme &riviä diff --git a/translations/focuswriter_ko.qm b/translations/focuswriter_ko.qm new file mode 100644 index 0000000000000000000000000000000000000000..36785632bfccf025c527dec370e17193fa2518b5 GIT binary patch literal 26792 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 gp~IoGTRF${m99XvAg!L|h%{2@d{ogrq4iP!KL7 + + + + Alert + + + Close (%1) + (%1) 닫기 + + + + Collapse + 접기 + + + + Expand + 펼치기 + + + + AlertLayer + + + Dismiss Alert + 알림 해제 + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + 죄송합니다 + + + + Unable to save '%1'. + '%1' 파일을 저장할 수 없습니다. + + + + Save File As + 다른 이름으로 저장 + + + + + Unable to overwrite '%1'. + '%1' 파일을 덮어쓸 수 없습니다. + + + + Rename File + 파일 이름 바꾸기 + + + + Unable to rename '%1'. + '%1' 파일의 이름을 바꿀 수 없습니다. + + + + Reload File + 파일 다시 불러오기 + + + + Reload the file %1 from disk? + 디스크에서 %1 파일을 다시 불러올까요? + + + + All unsaved changes will be lost. + 저장하지 않은 바뀐 정보는 사라집니다. + + + + Reload + 새로 고침 + + + + Plain Text (*.txt) + 일반 텍스트 (*.txt) + + + + Question + 물어볼 것이 있습니다. + + + + Saving as plain text will discard all formatting. Discard formatting? + 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? + + + + OpenDocument Text (*.odt) + 오픈 다큐먼트 텍스트 (*.odt) + + + + Rich Text (*.rtf) + 서식 있는 텍스트 (*.rtf) + + + + All Files (*) + 모든 파일 (*) + + + + DocumentWatcher + + + File Changed + 파일 변환 완료 + + + + The file %1 was changed by another program. + %1 파일이 다른 프로그램에 의해서 바뀌었습니다. + + + + Do you want to reload the file? + 파일을 다시 불러올까요? + + + + Reload + 새로 고침 + + + + Ignore + 그대로 둠 + + + + File Deleted + 파일이 지워졌습니다. + + + + The file %1 was deleted by another program. + %1 파일이 다른 프로그램에 의해서 지워졌습니다. + + + + Do you want to save or close the file? + 파일을 저장할까요? 닫을까요? + + + + FindDialog + + + Search for: + 검색 : + + + + Replace with: + 다음과 바꿈 : + + + + Ignore case + 대/소문자 구분 안함 + + + + Whole words only + 단어로 검색 + + + + Regular expressions + 일반적인 표현 + + + + Search up + 위로 검색 + + + + Search down + 아래로 검색 + + + + &Find + &찾기 + + + + &Replace + &바꾸기 + + + + Replace &All + &모두 바꾸기 + + + + Find + 찾기 + + + + Replace + 바꾸기 + + + + Replace %n instance(s)? + + %n 의 사례를 바꿀까요? + + + + + Question + 물어볼 것이 있습니다 + + + + + Sorry + 죄송합니다 + + + + + Phrase not found. + 문장이 없습니다. + + + + Highlighter + + + Add + 더하기 + + + + Check Spelling... + 맞춤법 검사 하기 + + + + (No suggestions found) + (다른 대안을 찾지 못했습니다) + + + + ImageButton + + + Open Image + 이미지 열기 + + + + Images(%1) + 이미지(%1) + + + + LocaleDialog + + + Select application language: + 프로그램 언어 선택: + + + + <System Language> + < 시스템 언어 > + + + + Note + 노트 + + + + Please restart this application for the change in language to take effect. + 바뀐 언어로 적용하기 위해 프로그램을 다시 시작 해주세요. + + + + PreferencesDialog + + + Preferences + 설정 + + + + General + 일반 설정 + + + + Statistics + 통계 + + + + Toolbar + 툴바 + + + + Spell Checking + 맞춤법 검사 + + + + Select Dictionary + 사전 고르기 + + + + + Sorry + 죄송합니다 + + + + Unable to open archive. + 압축파일을 열 수 없습니다. + + + + Unable to read archive metadata. + 압축파일의 메타데이터를 열 수 없습니다. + + + + The archive does not contain a usable dictionary. + 이용할 만 한 사전이 없습니다. + + + + Unable to open file '%1'. + '%1' 파일을 열 수 없습니다. + + + + Unable to close file '%1'. + '%1' 파일을 닫을 수 없습니다. + + + + + Question + 물어볼 것이 있습니다 + + + + Shortcuts + 단축키 + + + + One or more shortcuts conflict. Do you wish to proceed? + 하나 이상의 단축키에서 충돌이 났습니다. 계속할까요? + + + + The dictionary "%1" already exists. Do you want to replace it? + 사전 "%1" 은 이미 있습니다. 바꾸시겠습니까? + + + + Daily Goal + 오늘의 목표 + + + + None + 없음 + + + + Minutes: + 분: + + + + + Words: + 단어: + + + + Editing + 설정하기 + + + + Always vertically center + 항상 세로로 가운데 맞춤 + + + + Block insertion cursor + 블럭 삽입 커서 + + + + Smooth fonts + 부드러운 글꼴 + + + + Typewriter sounds + 타자기 소리 + + + + Smart quotes: + 지능형 따옴표: + + + + Double + 큰 따옴표 + + + + Single + 작은 따옴표 + + + + Scenes + 화면 + + + + Divider: + 구분선: + + + + Saving + 저장하기 + + + + Automatically save changes + 자동으로 저장하기 + + + + Remember cursor position + 커서 위치 저장하기 + + + + Contents + 내용 + + + + Word count + 단어 수 + + + + Page count + 페이지 수 + + + + Paragraph count + 문단 수 + + + + Character count + 글자 수 + + + + Page Size + 페이지 크기 + + + + Characters: + 글자: + + + + Paragraphs: + 문단: + + + + Word Count Algorithm + 단어 수 세는 알고리즘 + + + + Detect word boundaries + 단어의 범위를 감지하기 + + + + Divide character count by six + 글자 수를 여섯 개마다 나누기 + + + + Style + 스타일 + + + + Icons Only + 아이콘만 사용 + + + + Text Only + 텍스트만 사용 + + + + Text Alongside Icons + 아이콘 옆에 글자 표시 + + + + Text Under Icons + 아이콘 아래에 글자 표시 + + + + Text Position: + 텍스트 위치: + + + + Actions + 기능 + + + + Move Up + 위로 옮기기 + + + + Move Down + 아래로 옮기기 + + + + Add Separator + 구분선 더하기 + + + + Command + 명령어 + + + + Shortcut + 단축키 + + + + Action + 기능 + + + + Check spelling as you type + 입력하는 대로 검사하기 + + + + Ignore words in UPPERCASE + 대문자 건너뛰기 + + + + Ignore words with numbers + 숫자 건너뛰기 + + + + Language + 언어 + + + + + Add + 더하기 + + + + Remove + 제거 + + + + Personal Dictionary + 개인 사전 + + + + Reader + + + + Not a supported RTF file. + 지원하는 RTF 파일이 아닙니다. + + + + Unable to open archive. + 압축파일을 열 수 없습니다. + + + + Unable to open file '%1'. + '%1' 파일을 열 수 없습니다. + + + + Unable to close file '%1'. + '%1' 파일을 닫을 수 없습니다. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + 화면을 위로 올리기 + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + 화면 목록 켜고/끄기 + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + (%1) 화면 목록 보이기 + + + + Hide scene list (%1) + (%1) 화면 목록 감추기 + + + + Filter + 필터 + + + + Move Scenes Down + 화면을 아래로 내리기 + + + + Resize scene list + 화면 목록 크기 조절 + + + + Session + + + + + + + + + Default + 기본 세션 + + + + SessionManager + + + Manage Sessions + 세션 관리 + + + + S&essions + &세션 + + + + New + 새로 만들기 + + + + Rename + 이름 바꾸기 + + + + Clone + 복제하기 + + + + Delete + 지우기 + + + + Switch To + 서로 바꾸기 + + + + New Session + 새 세션 + + + + Clone Session + 세션 복제 + + + + Rename Session + 세션 이름 바꾸기 + + + + Question + 물어볼 것이 있습니다 + + + + Delete selected session? + 선택한 세션을 지우시겠습니까? + + + + Session name: + 세션 이름 + + + + Sorry + 죄송합니다. + + + + The requested session name is already in use. + 요청하신 세션 이름은 이미 사용 중입니다. + + + + &New... + &새로 만들기... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &관리하기... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + 지우기 + + + + Reset to Default + 기본 설정으로 되돌리기 + + + + + Shortcut: + 단축키: + + + + SmartQuote + + + Replacing quotation marks... + 따옴표 바꾸기... + + + + Please Wait + 기다려 주세요 + + + + SpellChecker + + + Check Spelling + 맞춤법 검사 + + + + &Add + &더하기 + + + + &Ignore + &그대로 둠 + + + + I&gnore All + &모두 그대로 둠 + + + + &Change + &바꾸기 + + + + C&hange All + &모두 바꿈 + + + + Not in dictionary: + 이 사전엔 없습니다 : + + + + Change to: + 다음으로 바꾸기: + + + + Checking spelling... + 맞춤법 검사 중입니다... + + + + Cancel + 취소하기 + + + + Please wait + 기다려 주세요 + + + + Spell check complete. + 맞춤법 검사를 마쳤습니다. + + + + SymbolsDialog + + + Symbols + 부호 + + + + Recently used symbols + 최근에 사용한 부호들 + + + + All symbols + 모든 부호들 + + + + Details + 크게 보기 + + + + Name: + 이름: + + + + Insert + 적용 + + + + SymbolsModel + + + Blocks + 블록 + + + + Scripts + 스크립트 + + + + Theme + + + Untitled %1 + 제목 없음 %1 + + + + ThemeDialog + + + Modify Theme + 테마 설정 + + + + Name: + 이름: + + + + Background + 바탕화면 + + + + No Image + 이미지 없음 + + + + Tiled + 타일 붙임 + + + + + Centered + 가운데 맞춤 + + + + + Stretched + 늘이기 + + + + Scaled + 비율 맞춤 + + + + Zoomed + 확대 맞춤 + + + + Remove + 지우기 + + + + Type: + 종류 + + + + + + Color: + 색상 + + + + Image: + 이미지 + + + + Foreground + 노트배경 + + + + Opacity + 불투명도 + + + + + + + pixels + pixels + + + + Left + 왼쪽 + + + + Right + 오른쪽 + + + + Position + 위치 + + + + Size: + 크기: + + + + Rounding: + 모서리 둥근 정도: + + + + Margin: + 가장자리와의 폭: + + + + Padding: + 들여쓰는 폭: + + + + Text + 글자 + + + + Font: + 글꼴: + + + + Misspelled: + 오자 표시: + + + + Spacings + 띄우기 + + + + Line Spacing + 줄 띄우기 + + + + Single + 한 줄 + + + + 1.5 Lines + 1.5 줄 + + + + Double + 두 줄 + + + + Proportional + 비율 맞춤 + + + + Paragraph Spacing + 문단 사이 띄기 + + + + Indent First Line: + 한 줄 들여쓰기 + + + + Pixels Above: + 위로 띄울 pixels: + + + + Pixels Below: + 아래로 띄울 pixels: + + + + The quick brown fox jumps over the lazy dog + 이 화면을 보시면서 바탕화면, 노트 배경, 폰트, 글자 크기 등을 설정하세요. + + + + ThemeManager + + + Themes + 테마 + + + + Add + 더하기 + + + + Modify + 설정하기 + + + + Remove + 지우기 + + + + Import + 가져오기 + + + + Export + 내보내기 + + + + Close + 닫기 + + + + Question + 물어볼 것이 있습니다. + + + + Remove selected theme? + 선택하신 테마를 지울까요? + + + + Import Theme + 테마 가져오기 + + + + Themes (*.fwtz *.theme) + 테마 (*.fwtz *.theme) + + + + Themes (*.fwtz) + 테마 (*.fwtz) + + + + Sorry + 죄송합니다 + + + + A theme already exists with that name. Please enter a new name: + 같은 이름의 테마가 이미 있습니다. 다른 이름을 붙여주세요 : + + + + Export Theme + 테마 내보내기 + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + 물어볼 것이 있습니다. + + + + Delete timer? + 타이머를 지울까요? + + + + <b>Words:</b> %L1 + <b>단어:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>페이지:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>문단:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>글자:</b> %L1 / %L2 + + + + Set Delay + 지연 시간 설정 + + + + Set Time + 시간 설정 + + + + Delay: + 지연 시간: + + + + Time: + 시간: + + + + HH:mm:ss + 시:분:초 + + + + Alarm + 알람 + + + + Type: + 종류: + + + + Memo: + 메모: + + + + Edit + 수정 + + + + Delete + 지우기 + + + + TimerDisplay + + + HH:mm:ss + 시:분:초 + + + + No timers running + 타이머 작동 안함 + + + + TimerManager + + + Timers + 타이머 + + + + New + 새로 만들기 + + + + Recent + 최근 설정 + + + + Question + 물어볼 것이 있습니다. + + + + Cancel editing timers? + 타이머 수정을 취소할까요? + + + + +HH:mm:ss + +시:분:초 + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + 예상과 달리 파일끝에 닿았습니다. + + + + Window + + + Loading themes + 테마 불러오는 중 + + + + Loading sounds + 소리 불러오는 중 + + + + + Untitled + 제목 없음 + + + + Open File + 파일 열기 + + + + About FocusWriter + 포커스 라이터 란 + + + + FocusWriter + 포커스 라이터 + + + + A simple fullscreen word processor + 간편한 풀스크린 워드 프로세서 + + + + Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + <a href=%1>GPL 3</a> 라이선스에 따라 배포됩니다. + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + <a href=%1>Oxygen</a>의 아이콘 테마를 이용합니다. + + + + Used under the <a href=%1>LGPL 3</a> license + <a href=%1>LGPL 3</a> 의 라이선스를 준수합니다. + + + + + Characters: %L1 / %L2 + 문자: %L1 / %L2 + + + + + Pages: %L1 + 페이지: %L1 + + + + + Paragraphs: %L1 + 문단: % L1 + + + + + Words: %L1 + 단어: %L1 + + + + + %1% of daily goal + 오늘 목표의 %1% + + + + + Opening %1 + %1 열기 + + + + Question + 물어볼 것이 있습니다 + + + + Save changes? + 바뀐 내용을 저장하시겠습니까? + + + + + (Untitled %1) + (제목없음 %1) + + + + Switch to Next Document + 다음 문서로 이동 + + + + Switch to Previous Document + 이전 문서로 이동 + + + + Switch to First Document + 처음 문서로 이동 + + + + Switch to Last Document + 마지막 문서로 이동 + + + + Switch to Document %1 + %1 문서로 이동 + + + + Loading settings + 설정 불러오는 중 + + + + Emergency cache is not writable. + 비상 캐시가 작성되지 않습니다. + + + + + Warning + 알림 + + + + FocusWriter was not shut down cleanly. + 포커스 라이터가 제대로 꺼지지 않았습니다. + + + + Restore from the emergency cache? + 비상 캐시를 이용해서 복구할까요? + + + + Some files could not be opened. + 몇몇 파일들이 열리지 않습니다. + + + + Some files were opened Read-Only. + 몇몇 파일들이 일기 전용으로 열렸습니다. + + + + Text Files (%1);;All Files (*) + 텍스트 파일 (%1);;모든 파일 (*) + + + + '%1' is newer than the cached copy. + '%1' 이 캐시에 복사된 것보다 새것입니다. + + + + Overwrite newer file? + 새 파일로 덮어쓸까요? + + + + Unable to load typewriter sounds. + 타자기 소리가 나지 않습니다. + + + + Please make sure that SDL_mixer is installed. + SDL_mixer 이 설치되어있나 확인해 주세요 + + + + %1 (Read-Only) + %1 (읽기 전용) + + + + &File + &파일 + + + + &New + &새로 만들기 + + + + &Open... + &열기... + + + + Reloa&d + &새로 고침 + + + + &Save + &저장 + + + + Save &As... + &다른 이름으로 저장... + + + + &Rename... + &이름 바꾸기... + + + + Save A&ll + &모두 저장하기 + + + + Manage Sessions + 세션 관리하기 + + + + New Session + 새 세션 + + + + &Print... + &프린트... + + + + &Close + &닫기 + + + + &Quit + &끝내기 + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &편집 + + + + &Undo + &뒤로 무르기 + + + + &Redo + &다시 적용 + + + + Cu&t + &자르기 + + + + &Copy + &복사 + + + + &Paste + &붙여넣기 + + + + Paste &Unformatted + &서식을 유지한 채 붙여넣기 + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + &모두 선택 + + + + Select &Scene + &화면 선택 + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + &형식 + + + + &Bold + &볼드 + + + + &Italic + &이탤릭 + + + + &Underline + &밑줄 긋기 + + + + Stri&kethrough + &가운데 줄긋기 + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + &위 첨자 + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &아래 첨자 + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + &왼쪽 끝 맞춤 + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + &가운데 줄맞춤 + + + + Ctrl+| + Ctrl+| + + + + Align &Right + &오른쪽 끝 맞춤 + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + &양끝 맞춤 + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &들여 쓰기 + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + &내어 쓰기 + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + &왼쪽에서 오른쪽으로 쓰기 시작 + + + + Ri&ght to Left Block + &오른쪽에서 왼쪽으로 쓰기 시작 + + + + &Tools + &도구 + + + + &Find... + &찾기 + + + + Find &Next + &다음에서 찾기 + + + + Find Pre&vious + &이전에서 찾기 + + + + &Replace... + &바꾸기 + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + &지능형 따옴표 + + + + Update &Document + &문서에 적용 + + + + Update &Selection + &선택한 내용 적용 + + + + &Spelling... + &맞춤법 + + + + F7 + F7 + + + + &Timers... + &타이머 + + + + S&ymbols... + &부호들... + + + + &Settings + &설정 + + + + Show &Toolbar + &툴바 보이기 + + + + Show &Menu Icons + &메뉴 아이콘 보이기 + + + + F&ocused Text + &포커스 텍스트 + + + + &Fullscreen + &전체 화면 + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + &최소화 + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &테마 + + + + &Preferences... + &설정 + + + + Focus Off + 포커스 끔 + + + + Focus One Line + 한 줄 포커스 + + + + Focus Three Lines + 세 줄 포커스 + + + + &Paragraph + &문단 + + + + Focus Paragraph + 문단 포커스 + + + + &Help + &도움말 + + + + Application &Language... + &프로그램 언어 설정 + + + + Some files were unsupported and could not be opened. + 지원되지 않는 파일이 있어서 열 수 없습니다. + + + + &Off + &사용 안함 + + + + One &Line + &한 줄 + + + + &Three Lines + &세 줄 + + + + &About + &FocusWriter 소개 + + + + About &Qt + &Qt 소개 + + + diff --git a/translations/focuswriter_sr.qm b/translations/focuswriter_sr.qm new file mode 100644 index 0000000000000000000000000000000000000000..007a0a079e78109ac2343dd28cab61e488793a6e GIT binary patch literal 31584 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 + + + + Alert + + + Close (%1) + Затвори (%1) + + + + Collapse + Колапс + + + + Expand + Прошири + + + + AlertLayer + + + Dismiss Alert + Одбаци упозорење + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Извините + + + + Unable to save '%1'. + Онемогућено чување '%1'. + + + + Save File As + Сачувај фајл као + + + + + Unable to overwrite '%1'. + Онемогућено да пребрише '%1'. + + + + Rename File + Преименуј фајл + + + + Unable to rename '%1'. + Онемогућено преименовање '%1'. + + + + Reload File + Поново учитај фајл + + + + Reload the file %1 from disk? + Поново учитај фајл %1 са диска? + + + + All unsaved changes will be lost. + Све несачуване промене ће бити изгубљене. + + + + Reload + Поново учитај + + + + Plain Text (*.txt) + Чист текст (*.txt) + + + + Question + Питање + + + + Saving as plain text will discard all formatting. Discard formatting? + Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? + + + + OpenDocument Text (*.odt) + OpenDocument текст (*.odt) + + + + Rich Text (*.rtf) + Обогаћени текст (*.rtf) + + + + All Files (*) + Сви фајлови (*) + + + + DocumentWatcher + + + File Changed + Промењен фајл + + + + The file %1 was changed by another program. + Фајл %1 је промењен у другом програму. + + + + Do you want to reload the file? + Да ли желите да поново учитате фајл? + + + + Reload + Поново учитај + + + + Ignore + Занемари + + + + File Deleted + Обрисан фајл + + + + The file %1 was deleted by another program. + Фајл %1 је обрисао други програм. + + + + Do you want to save or close the file? + Да ли желите да сачувате или затворите фајл? + + + + FindDialog + + + Search for: + Претрага за: + + + + Replace with: + Замени са: + + + + Ignore case + Игнориши случај + + + + Whole words only + Само целе речи + + + + Regular expressions + Регуларни изрази + + + + Search up + Претражи горе + + + + Search down + Претражи доле + + + + &Find + &Пронађи + + + + &Replace + &Замени + + + + Replace &All + Замени &све + + + + Find + Пронађи + + + + Replace + Замени + + + + Replace %n instance(s)? + + Замените %n пример? + Замените %n примера? + Замените %n примера? + + + + + Question + Питање + + + + + Sorry + Извините + + + + + Phrase not found. + Фраза није пронађена. + + + + Highlighter + + + Add + Додај + + + + Check Spelling... + Провери правопис... + + + + (No suggestions found) + (Без пронађене сугестије) + + + + ImageButton + + + Open Image + Отвори слику + + + + Images(%1) + Слике(%1) + + + + LocaleDialog + + + Select application language: + Одабери језик програма: + + + + <System Language> + <Системски језик> + + + + Note + Напомена + + + + Please restart this application for the change in language to take effect. + Молимо рестартујте програм да би се видела промена језика. + + + + PreferencesDialog + + + Preferences + Подешавања + + + + General + Опште + + + + Statistics + Статистика + + + + Toolbar + Трака алата + + + + Spell Checking + Провера правописа + + + + Select Dictionary + Одабери речник + + + + + Sorry + Извините + + + + Unable to open archive. + Онемогућено отварање архиве. + + + + Unable to read archive metadata. + Онемогућено читање метаподатака у архиви. + + + + The archive does not contain a usable dictionary. + Архива не садржи уобичајен речник. + + + + Unable to open file '%1'. + Онемогућено отварање фајла '%1'. + + + + Unable to close file '%1'. + Онемогућено затварање фајла '%1'. + + + + + Question + Питање + + + + Shortcuts + Пречице + + + + One or more shortcuts conflict. Do you wish to proceed? + Један или више кофликт пречица. Да ли желите да наставите? + + + + The dictionary "%1" already exists. Do you want to replace it? + Речник "%1" већ постоји. Да ли желите да га замените? + + + + Daily Goal + Дневни циљ + + + + None + Ниједан + + + + Minutes: + Минути: + + + + + Words: + Речи: + + + + Editing + Измене + + + + Always vertically center + Увек вертикални центар + + + + Block insertion cursor + Блокирај уметање курсора + + + + Smooth fonts + Умекшај фонтове + + + + Typewriter sounds + Звук писаће машине + + + + Smart quotes: + Паметни цитати: + + + + Double + Дупли + + + + Single + Једини + + + + Scenes + Сцене + + + + Divider: + Разделник: + + + + Saving + Чување + + + + Automatically save changes + Аутоматски чувај промене + + + + Remember cursor position + Запамти позицију курсора + + + + Contents + Садржај + + + + Word count + Број речи + + + + Page count + Број страна + + + + Paragraph count + Број параграфа + + + + Character count + Број карактера + + + + Page Size + Величина стране + + + + Characters: + Карактери: + + + + Paragraphs: + Параграфи: + + + + Word Count Algorithm + Број алторитама + + + + Detect word boundaries + Детектовање границе речи + + + + Divide character count by six + Подели број карактера са шест + + + + Style + Изглед + + + + Icons Only + Само иконе + + + + Text Only + Само текст + + + + Text Alongside Icons + Текст поред икона + + + + Text Under Icons + Текст испод икона + + + + Text Position: + Позиција текста: + + + + Actions + Акције + + + + Move Up + Помери горе + + + + Move Down + Помери доле + + + + Add Separator + Додај раздвајач + + + + Command + Команда + + + + Shortcut + Пречица + + + + Action + Акција + + + + Check spelling as you type + Проверите правопис док куцате + + + + Ignore words in UPPERCASE + Занемари речи са ВЕЛИКИМ СЛОВИМА + + + + Ignore words with numbers + Занемари речи са бројевима + + + + Language + Језик + + + + + Add + Додај + + + + Remove + Уклони + + + + Personal Dictionary + Лични речник + + + + Reader + + + + Not a supported RTF file. + Није подржан RTF фајл. + + + + Unable to open archive. + Онемогућено отварање архиве. + + + + Unable to open file '%1'. + Онемогућено отварање фајла '%1'. + + + + Unable to close file '%1'. + Онемогућено затварање фајла '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + Помери сцене горе + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + Укључи/искључи листу сцена + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Покажи листу сцена (%1) + + + + Hide scene list (%1) + Сакриј листу сцена (%1) + + + + Filter + Филтер + + + + Move Scenes Down + Помери сцене доле + + + + Resize scene list + Промени величину листе сцена + + + + Session + + + + + + + + + Default + Подразумевано + + + + SessionManager + + + Manage Sessions + Управљај сесијама + + + + S&essions + С&есије + + + + New + Нови + + + + Rename + Преименуј + + + + Clone + Клонирај + + + + Delete + Избриши + + + + Switch To + Пребаци на + + + + New Session + Нова сесија + + + + Clone Session + Клонирај сесију + + + + Rename Session + Преименуј сесију + + + + Question + Питање + + + + Delete selected session? + Избриши одабрану сесију? + + + + Session name: + Име сесије: + + + + Sorry + Извините + + + + The requested session name is already in use. + Захтевано име сесије је већ у употреби. + + + + &New... + &Нова... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Управљај... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Очисти + + + + Reset to Default + Ресетуј на подразумевано + + + + + Shortcut: + Пречица: + + + + SmartQuote + + + Replacing quotation marks... + Замена наводника... + + + + Please Wait + Молимо сачекајте + + + + SpellChecker + + + Check Spelling + Провери правопис + + + + &Add + &Додај + + + + &Ignore + &Занемари + + + + I&gnore All + З&анемари све + + + + &Change + &Промени + + + + C&hange All + П&ромени све + + + + Not in dictionary: + Није у речнику: + + + + Change to: + Промени на: + + + + Checking spelling... + Провери правопис... + + + + Cancel + Откажи + + + + Please wait + Молимо сачекајте + + + + Spell check complete. + Провера правописа је завршена. + + + + SymbolsDialog + + + Symbols + Симболи + + + + Recently used symbols + Недавно коришћени симболи + + + + All symbols + Сви симболи + + + + Details + Детаљи + + + + Name: + Име: + + + + Insert + Инсерт + + + + SymbolsModel + + + Blocks + Блокови + + + + Scripts + Скрипте + + + + Theme + + + Untitled %1 + Без наслова %1 + + + + ThemeDialog + + + Modify Theme + Измени тему + + + + Name: + Име: + + + + Background + Позадина + + + + No Image + Без слике + + + + Tiled + Поплочано + + + + + Centered + Центрирано + + + + + Stretched + Раширено + + + + Scaled + Скалирано + + + + Zoomed + Зумирано + + + + Remove + Уклони + + + + Type: + Врста: + + + + + + Color: + Боја: + + + + Image: + Слика: + + + + Foreground + Предњи план + + + + Opacity + Непрозирност + + + + + + + pixels + пиксела + + + + Left + Лево + + + + Right + Десно + + + + Position + Позиција + + + + Size: + Величина: + + + + Rounding: + Заокруживање: + + + + Margin: + Ивица: + + + + Padding: + Облагање: + + + + Text + Текст + + + + Font: + Фонт: + + + + Misspelled: + Погрешно написано: + + + + Spacings + Размаци + + + + Line Spacing + Проред + + + + Single + Један + + + + 1.5 Lines + 1.5 линија + + + + Double + Дупли + + + + Proportional + Пропорционалан + + + + Paragraph Spacing + Пасус + + + + Indent First Line: + Увлачење прве линије: + + + + Pixels Above: + Пиксела изнад: + + + + Pixels Below: + Пиксела испод: + + + + The quick brown fox jumps over the lazy dog + Брза смеђа лисица скаче преко лењог пса + + + + ThemeManager + + + Themes + Теме + + + + Add + Додај + + + + Modify + Измени + + + + Remove + Уклони + + + + Import + Увези + + + + Export + Извези + + + + Close + Затвори + + + + Question + Питање + + + + Remove selected theme? + Уклони одабрану тему? + + + + Import Theme + Увези тему + + + + Themes (*.fwtz *.theme) + Теме (*.fwtz *.theme) + + + + Themes (*.fwtz) + Теме (*.fwtz) + + + + Sorry + Извините + + + + A theme already exists with that name. Please enter a new name: + Тема већ постоји са овим именом. Молимо унесите ново име: + + + + Export Theme + Извези тему + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Питање + + + + Delete timer? + Обриши тајмер? + + + + <b>Words:</b> %L1 + <b>Речи:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Стране:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Параграфи:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Карактери:</b> %L1 / %L2 + + + + Set Delay + Подеси кашњење + + + + Set Time + Подеси време + + + + Delay: + Кашњење: + + + + Time: + Време: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Аларм + + + + Type: + Врста: + + + + Memo: + Меморандум: + + + + Edit + Измени + + + + Delete + Избриши + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Без покренутог тајмера + + + + TimerManager + + + Timers + Тајмери + + + + New + Нови + + + + Recent + Скорашње + + + + Question + Питање + + + + Cancel editing timers? + Откажи измене тајмера? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Неочекивано стигао крај фајла. + + + + Window + + + Loading themes + Учитавање тема + + + + Loading sounds + Учитавање звука + + + + + Untitled + Без наслова + + + + Open File + Отвори фајл + + + + About FocusWriter + О програму FocusWriter + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Једноставан обрађивач текста на пуном екрану + + + + Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Реализовано под <a href=%1>GPL 3</a> лиценцом + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Користи иконе из <a href=%1>Oxygen</a> теме икона + + + + Used under the <a href=%1>LGPL 3</a> license + Коришћен под <a href=%1>LGPL 3</a> лиценцом + + + + + Characters: %L1 / %L2 + Карактери: %L1 / %L2 + + + + + Pages: %L1 + Стране: %L1 + + + + + Paragraphs: %L1 + Параграфи: %L1 + + + + + Words: %L1 + Речи: %L1 + + + + + %1% of daily goal + %1% од дневног циља + + + + + Opening %1 + Oтварање %1 + + + + Question + Питање + + + + Save changes? + Сачувај промене? + + + + + (Untitled %1) + (Без наслова %1) + + + + Switch to Next Document + Пређи на следећи документ + + + + Switch to Previous Document + Пређи на претходни документ + + + + Switch to First Document + Пређи на први документ + + + + Switch to Last Document + Пређи на последњи документ + + + + Switch to Document %1 + Пређи на документ %1 + + + + Loading settings + Учитавање подешавања + + + + Emergency cache is not writable. + Ургентни кеш није уписив. + + + + + Warning + Упозорење + + + + FocusWriter was not shut down cleanly. + FocusWriter није затворен чисто. + + + + Restore from the emergency cache? + Враћање из ургентног кеша? + + + + Some files could not be opened. + Неки фајлови нису могли бити отворени. + + + + Some files were opened Read-Only. + Неки фајлови су отворени само за читање. + + + + Text Files (%1);;All Files (*) + Текстуални фајлови (%1);;Сви фајлови (*) + + + + '%1' is newer than the cached copy. + '%1' је новије од кеширане копије. + + + + Overwrite newer file? + Пребиши новији фајл? + + + + Unable to load typewriter sounds. + Онемогућено учитавање звука писаће машине. + + + + Please make sure that SDL_mixer is installed. + Молимо проверите да ли је SDL_миксер инсталиран. + + + + %1 (Read-Only) + %1 (Само за читање) + + + + &File + &Фајл + + + + &New + &Нови + + + + &Open... + &Отвори... + + + + Reloa&d + Поно&во учитај + + + + &Save + &Сачувај + + + + Save &As... + Сачувај &као... + + + + &Rename... + &Преименуј... + + + + Save A&ll + Сачувај с&ве + + + + Manage Sessions + Управљај сесијама + + + + New Session + Нова сесија + + + + &Print... + &Штампај... + + + + &Close + &Затвори + + + + &Quit + &Напусти + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Измени + + + + &Undo + &Опозови + + + + &Redo + &Поново уради + + + + Cu&t + Исе&ци + + + + &Copy + &Копирај + + + + &Paste + &Налепи + + + + Paste &Unformatted + Налепи &неформатирано + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Одабери &све + + + + Select &Scene + Одабери &сцену + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Фо&рмат + + + + &Bold + &Подебљано + + + + &Italic + &Искошено + + + + &Underline + &Подвучено + + + + Stri&kethrough + Пре&цртано + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Екс&понент + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Индекс + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Поравнај &лево + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Поравнај &на центар + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Поравнај &десно + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Поравнај &обострано + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Смањи увлачење + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + П&овећај увлачење + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Ле&во на десно блок + + + + Ri&ght to Left Block + Де&сно на лево блок + + + + &Tools + &Алати + + + + &Find... + &Пронађи... + + + + Find &Next + Пронађи &следеће + + + + Find Pre&vious + Пронађи пре&тходно + + + + &Replace... + &Замени... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Паметни &цитати + + + + Update &Document + Ажурирај &документ + + + + Update &Selection + Ажурирај &одабир + + + + &Spelling... + &Правопис... + + + + F7 + F7 + + + + &Timers... + &Tајмери... + + + + S&ymbols... + С&имболи... + + + + &Settings + &Подешавање + + + + Show &Toolbar + Покажи &траку алата + + + + Show &Menu Icons + Покажи &иконе менија + + + + F&ocused Text + Ф&окусирани текст + + + + &Fullscreen + &Пун екран + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + M&инимизуј + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Tеме... + + + + &Preferences... + &Подешавања... + + + + Focus Off + Фокусирање искључено + + + + Focus One Line + Фокусирање једне линије + + + + Focus Three Lines + Фокусирање три линије + + + + &Paragraph + &Параграф + + + + Focus Paragraph + Фокусирај параграф + + + + &Help + &Помоћ + + + + Application &Language... + Језик &програма... + + + + Some files were unsupported and could not be opened. + Неки фајлови нису подржани и не могу бити отворени. + + + + &Off + &Искључено + + + + One &Line + Једна &линија + + + + &Three Lines + &Три линије + + + + &About + &О програму + + + + About &Qt + О &Qt + + + diff --git a/translations/focuswriter_vi.qm b/translations/focuswriter_vi.qm new file mode 100644 index 0000000000000000000000000000000000000000..832d6d2bb24169296eccdbc944cc4a179baa8882 GIT binary patch literal 33620 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 literal 0 HcmV?d00001 diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts new file mode 100644 index 00000000..a84d7be0 --- /dev/null +++ b/translations/focuswriter_vi.ts @@ -0,0 +1,2023 @@ + + + + + Alert + + + Close (%1) + Đóng lại (%1) + + + + Collapse + Xổ xuống + + + + Expand + Mở rộng + + + + AlertLayer + + + Dismiss Alert + Bỏ qua cảnh báo + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Rất tiếc + + + + Unable to save '%1'. + Không thể lưu '%1'. + + + + Save File As + Lưu tập tin thành + + + + + Unable to overwrite '%1'. + Không thể ghi đè lên '%1'. + + + + Rename File + Đổi tên tập tin + + + + Unable to rename '%1'. + Không thể đổi tên '%1'. + + + + Reload File + Tải lại tập tin + + + + Reload the file %1 from disk? + Tải lại tập tin %1 từ đĩa? + + + + All unsaved changes will be lost. + Tất cả các thay đổi chưa lưu sẽ bị mất. + + + + Reload + Tải lại + + + + Plain Text (*.txt) + Dạng văn bản thường (*.txt) + + + + Question + Câu hỏi + + + + Saving as plain text will discard all formatting. Discard formatting? + Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? + + + + OpenDocument Text (*.odt) + Dạng văn bản mở (*.odt) + + + + Rich Text (*.rtf) + Dạng Rich Text (*.rtf) + + + + All Files (*) + Mọi loại tập tin (*) + + + + DocumentWatcher + + + File Changed + Đã thay đổi tập tin + + + + The file %1 was changed by another program. + Tập tin %1 bị thay đổi bởi một chương trình khác. + + + + Do you want to reload the file? + Bạn có muốn tải lại tập tin? + + + + Reload + Tải lại + + + + Ignore + Bỏ qua + + + + File Deleted + Đã xóa tập tin + + + + The file %1 was deleted by another program. + Tập tin %1 đã bị xóa bởi một ứng dụng khác. + + + + Do you want to save or close the file? + Bạn có muốn lưu hoặc đóng lại tập tin này? + + + + FindDialog + + + Search for: + Tìm kiếm cho: + + + + Replace with: + Thay thế với: + + + + Ignore case + Bỏ qua trường hợp chữ in hoa + + + + Whole words only + Chỉ toàn bộ các từ này + + + + Regular expressions + Phép toán thông thường + + + + Search up + Tìm kiếm phía trên + + + + Search down + Tìm kiếm phía dưới + + + + &Find + &Tìm kiếm + + + + &Replace + Th&ay thế + + + + Replace &All + Tha&y thế tất cả + + + + Find + Tìm + + + + Replace + Thay thế + + + + Replace %n instance(s)? + + Thay thế %n tiến trình? + + + + + Question + Câu hỏi + + + + + Sorry + Rất tiếc + + + + + Phrase not found. + Không tìm thấy cụm từ. + + + + Highlighter + + + Add + Thêm + + + + Check Spelling... + Kiểm tra lỗi chính tả... + + + + (No suggestions found) + (Không tìm thấy lời đề nghị nào) + + + + ImageButton + + + Open Image + Mở hình ảnh + + + + Images(%1) + Hình ảnh(%1) + + + + LocaleDialog + + + Select application language: + Chọn ngôn ngữ của ứng dụng: + + + + <System Language> + <Ngôn ngữ Hệ thống> + + + + Note + Ghi chú + + + + Please restart this application for the change in language to take effect. + Xin vui lòng khởi động lại ứng dụng này để áp dụng thao tác thay đổi ngôn ngữ. + + + + PreferencesDialog + + + Preferences + Tùy biến + + + + General + Tổng quan + + + + Statistics + Thống kê + + + + Toolbar + Thanh công cụ + + + + Spell Checking + Đang kiểm tra lỗi chính tả + + + + Select Dictionary + Chọn Từ Điển + + + + + Sorry + Rất tiếc + + + + Unable to open archive. + Không thể mở phần lưu trữ. + + + + Unable to read archive metadata. + Không thể đọc thông tin chi tiết về phần lưu trữ. + + + + The archive does not contain a usable dictionary. + Phần lưu trữ không chứa từ điển nào có thể sử dụng được. + + + + Unable to open file '%1'. + Không thể mở tập tin '%1'. + + + + Unable to close file '%1'. + Không thể đóng tập tin '%1'. + + + + + Question + Câu hỏi + + + + Shortcuts + Phím tắt + + + + One or more shortcuts conflict. Do you wish to proceed? + Một hoặc nhiều phím tắt hơn bị xung đột. Bạn có muốn tiếp tục? + + + + The dictionary "%1" already exists. Do you want to replace it? + Từ điển "%1" đã có sẵn. Bạn có muốn thay thế từ điển này không? + + + + Daily Goal + Mục tiêu mỗi ngày + + + + None + Không + + + + Minutes: + Phút: + + + + + Words: + Từ: + + + + Editing + Đang chỉnh sửa + + + + Always vertically center + Vị trí luôn thẳng đứng ở giữa + + + + Block insertion cursor + Khóa việc chèn con trỏ + + + + Smooth fonts + Kiểu chữ dễ nhìn + + + + Typewriter sounds + Âm thanh đánh máy khi gõ + + + + Smart quotes: + Trích dẫn thông minh: + + + + Double + Gấp đôi + + + + Single + Đơn lẻ + + + + Scenes + Khung cảnh + + + + Divider: + Người chia cắt: + + + + Saving + Đang lưu + + + + Automatically save changes + Tự động lưu các thay đổi + + + + Remember cursor position + Nhớ vị trí trỏ chuột + + + + Contents + Nội dung + + + + Word count + Tổng số từ + + + + Page count + Tổng số trang + + + + Paragraph count + Tổng số đoạn văn + + + + Character count + Tổng số ký tự + + + + Page Size + Kích thước trang + + + + Characters: + Ký tự: + + + + Paragraphs: + Đoạn văn: + + + + Word Count Algorithm + Thuật toán tính toán tổng số chữ + + + + Detect word boundaries + Phát hiện việc bo tròn các chữ + + + + Divide character count by six + Chia các ký tự bởi nhóm có số lượng sáu + + + + Style + Giao diện + + + + Icons Only + Chỉ hiển thị biểu tượng + + + + Text Only + Chỉ hiển thị chữ + + + + Text Alongside Icons + Chữ kèm theo biểu tượng + + + + Text Under Icons + Chữ dưới biểu tượng + + + + Text Position: + Vị trí chữ: + + + + Actions + Thao tác + + + + Move Up + Di chuyển lên + + + + Move Down + Di chuyển xuống + + + + Add Separator + Thêm dấu phân cách + + + + Command + Lệnh + + + + Shortcut + Phím tắt + + + + Action + Thao tác + + + + Check spelling as you type + Kiểm tra ngữ pháp khi gõ + + + + Ignore words in UPPERCASE + Bỏ qua các từ IN HOA + + + + Ignore words with numbers + Bỏ qua các từ kèm theo số + + + + Language + Ngôn ngữ + + + + + Add + Thêm + + + + Remove + Loại bỏ + + + + Personal Dictionary + Từ điển tự tạo + + + + Reader + + + + Not a supported RTF file. + Tập tin RTF này không được hỗ trợ. + + + + Unable to open archive. + Không thể mở được phần dữ liệu nén. + + + + Unable to open file '%1'. + Không thể mở được tập tin '%1'. + + + + Unable to close file '%1'. + Không thể đóng lại tập tin '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + Chuyển cảnh lên + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + Chuyển đổi danh sách các cảnh + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Hiển thị danh sách cảnh (%1) + + + + Hide scene list (%1) + Ẩn danh sách cảnh (%1) + + + + Filter + Lọc dữ liệu + + + + Move Scenes Down + Chuyển cảnh xuống + + + + Resize scene list + Chỉnh lại kích thước danh sách cảnh + + + + Session + + + + + + + + + Default + Mặc định + + + + SessionManager + + + Manage Sessions + Quản lý phiên làm việc + + + + S&essions + P&hiên làm việc + + + + New + Tạo mới + + + + Rename + Đổi tên + + + + Clone + Sao Y + + + + Delete + Xóa + + + + Switch To + Chuyển sang + + + + New Session + Phiên làm việc mới + + + + Clone Session + Sao y phiên làm việc + + + + Rename Session + Đổi tên phiên làm việc + + + + Question + Câu hỏi + + + + Delete selected session? + Xóa phiên làm việc đã được chọn? + + + + Session name: + Tên phiên làm việc: + + + + Sorry + Rất tiếc + + + + The requested session name is already in use. + Tên của phiên làm việc được yêu cầu hiện đang được sử dụng. + + + + &New... + &Tạo mới... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Quản lý... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Dọn dẹp + + + + Reset to Default + Chuyển về mặc định + + + + + Shortcut: + Phím tắt: + + + + SmartQuote + + + Replacing quotation marks... + Thay đổi các phần đánh dấu trích dẫn.. + + + + Please Wait + Vui lòng đợi + + + + SpellChecker + + + Check Spelling + Kiểm tra ngữ pháp + + + + &Add + &Thêm + + + + &Ignore + &Bỏ qua + + + + I&gnore All + Bỏ q&ua tất cả + + + + &Change + Th&ay đổi + + + + C&hange All + Tha&y đổi tất cả + + + + Not in dictionary: + Không có trong từ điển: + + + + Change to: + Thay đổi sang: + + + + Checking spelling... + Đang thực hiện việc kiểm tra ngữ pháp... + + + + Cancel + Hủy bỏ + + + + Please wait + Vui lòng đợi + + + + Spell check complete. + Đã thực hiện xong thao tác kiểm tra ngữ pháp. + + + + SymbolsDialog + + + Symbols + Biểu tượng + + + + Recently used symbols + Các biểu tượng được dùng gần đây + + + + All symbols + Tất cả biểu tượng + + + + Details + Chi tiết + + + + Name: + Tên: + + + + Insert + Chèn + + + + SymbolsModel + + + Blocks + Khối + + + + Scripts + Kịch bản + + + + Theme + + + Untitled %1 + Chưa đặt tiêu đề %1 + + + + ThemeDialog + + + Modify Theme + Chỉnh sửa giao diện + + + + Name: + Tên: + + + + Background + Nền + + + + No Image + Không có hình ảnh + + + + Tiled + Xếp theo ô + + + + + Centered + Ở giữa + + + + + Stretched + Trải rộng ra + + + + Scaled + Theo tỉ lệ + + + + Zoomed + Phóng to + + + + Remove + Loại bỏ + + + + Type: + Loại: + + + + + + Color: + Màu: + + + + Image: + Hình ảnh: + + + + Foreground + Lớp phủ nền + + + + Opacity + Độ mờ + + + + + + + pixels + điểm ảnh + + + + Left + Bên tay trái + + + + Right + Bên tay phải + + + + Position + Vị trí + + + + Size: + Kích thước: + + + + Rounding: + Rounding: + + + + Margin: + Canh lề: + + + + Padding: + Padding: + + + + Text + Văn bản + + + + Font: + Kiểu chữ: + + + + Misspelled: + Sai ngữ pháp: + + + + Spacings + Khoảng trống + + + + Line Spacing + Khoảng trống giữa các dòng + + + + Single + Đơn lẻ + + + + 1.5 Lines + 1.5 dòng + + + + Double + Gấp đôi + + + + Proportional + Tỉ lệ cân xứng + + + + Paragraph Spacing + Khoảng cách giữa các đoạn văn + + + + Indent First Line: + Lùi vào dòng đầu tiên: + + + + Pixels Above: + Khoảng cách điểm ảnh bên trên: + + + + Pixels Below: + Khoảng cách điểm ảnh bên dưới: + + + + The quick brown fox jumps over the lazy dog + Tôi Yêu Tiếng Nước Tôi Từ Khi Mới Ra Đời + + + + ThemeManager + + + Themes + Giao diện + + + + Add + Thêm + + + + Modify + Chỉnh sửa + + + + Remove + Loại bỏ + + + + Import + Nhập dữ liệu + + + + Export + Xuất dữ liệu + + + + Close + Đóng lại + + + + Question + Câu hỏi + + + + Remove selected theme? + Loại bỏ giao diện đã được chọn? + + + + Import Theme + Nhập dữ liệu về giao diện + + + + Themes (*.fwtz *.theme) + Giao diện (*.fwtz *.theme) + + + + Themes (*.fwtz) + Themes (*.fwtz) + + + + Sorry + Rất tiếc + + + + A theme already exists with that name. Please enter a new name: + Một giao diện với cùng tên như thế đã tồn tại. Vui lòng điền vào một tên khác: + + + + Export Theme + Xuất dữ liệu về giao diện + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Câu hỏi + + + + Delete timer? + Xóa phần đếm thời gian? + + + + <b>Words:</b> %L1 + <b>Số lượng từ:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Số lượng trang:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Số lượng đoạn văn:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Số lượng ký tự:</b> %L1 / %L2 + + + + Set Delay + Đặt độ trễ + + + + Set Time + Đặt thời gian + + + + Delay: + Độ trễ: + + + + Time: + Thời gian: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Hẹn giờ + + + + Type: + Loại: + + + + Memo: + Ghi chú: + + + + Edit + Chỉnh sửa + + + + Delete + Xóa + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Hiện không có phần đếm thời gian nào + + + + TimerManager + + + Timers + Bộ đếm thời gian + + + + New + Tạo mới + + + + Recent + Gần đây + + + + Question + Câu hỏi + + + + Cancel editing timers? + Hủy bỏ việc chỉnh sửa bộ đếm giờ? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Lỗi phần truy cập đến phần cuối của tập tin + + + + Window + + + Loading themes + Đang tải dữ liệu giao diện + + + + Loading sounds + Đang tải dữ liệu âm thanh + + + + + Untitled + Chưa đặt tiêu đề + + + + Open File + Mở tập tin + + + + About FocusWriter + Dịch bởi Phan Anh + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Một phần mềm soạn thảo văn bản toàn màn hình dạng đơn giản + + + + Copyright &copy; 2008-%1 Graeme Gott + Bản quyền &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Phát hành dựa theo giấy phép <a href=%1>GPL 3</a> + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Sử dụng bộ biểu tượng từ <a href=%1>Oxygen</a> + + + + Used under the <a href=%1>LGPL 3</a> license + Sử dụng dựa trên giấy phép <a href=%1>LGPL 3</a> + + + + + Characters: %L1 / %L2 + Số ký tự: %L1 / %L2 + + + + + Pages: %L1 + Số trang: %L1 + + + + + Paragraphs: %L1 + Số đoạn văn: %L1 + + + + + Words: %L1 + Số từ: %L1 + + + + + %1% of daily goal + Đạt đượ %1% mục tiêu trong ngày + + + + + Opening %1 + Đang mở %1 + + + + Question + Câu hỏi + + + + Save changes? + Lưu các thay đổi + + + + + (Untitled %1) + (Chưa đặt tiêu đề %1) + + + + Switch to Next Document + Chuyển sang một tài liệu mới + + + + Switch to Previous Document + Chuyển sang tài liệu trước đó + + + + Switch to First Document + Chuyển sang tài liệu đầu tiên + + + + Switch to Last Document + Chuyển sang tài liệu cuối cùng + + + + Switch to Document %1 + Chuyển sang tài liệu %1 + + + + Loading settings + Đang tải thiết lập + + + + Emergency cache is not writable. + Phần bộ nhớ đệm trong trường hợp khẩn cấp hiện không thể ghi dữ liệu vào. + + + + + Warning + Cảnh báo + + + + FocusWriter was not shut down cleanly. + FocusWriter đã không được tắt theo đúng cách. + + + + Restore from the emergency cache? + Khôi phục dữ liệu từ phần bộ nhớ đệm khẩn cấp? + + + + Some files could not be opened. + Không thể mở một số tập tin. + + + + Some files were opened Read-Only. + Một vài tập tin được mở dưới chế độ Chỉ Được-Đọc + + + + Text Files (%1);;All Files (*) + Tập tin văn bản (%1);;Tất cả các tập tin (*) + + + + '%1' is newer than the cached copy. + '%1' mới hơn bản dữ liệu được sao chép trong bộ nhớ đệm. + + + + Overwrite newer file? + Viết đè dữ liệu lên tập tin mới hơn? + + + + Unable to load typewriter sounds. + Không thể tải âm thanh tạo hiệu ứng gõ chữ. + + + + Please make sure that SDL_mixer is installed. + Xin vui lòng chắc chắn rằng SDL_mixer đã được cài đặt. + + + + %1 (Read-Only) + %1 (Chỉ được-đọc) + + + + &File + &Tập tin + + + + &New + &Tạo mới + + + + &Open... + &Mở... + + + + Reloa&d + Tải l&ại + + + + &Save + &Lưu + + + + Save &As... + Lưu &Dưới Dạng... + + + + &Rename... + &Đổi tên... + + + + Save A&ll + Lưu T&ất Cả + + + + Manage Sessions + Quản lý phiên làm việc + + + + New Session + Phiên làm việc mới + + + + &Print... + &In dữ liệu... + + + + &Close + Đ&óng lại + + + + &Quit + Th&oát + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + C&hỉnh sửa + + + + &Undo + Hủ&y thao tác + + + + &Redo + Lặ&p lại thao tác + + + + Cu&t + Cắ&t + + + + &Copy + S&ao chép + + + + &Paste + D&án + + + + Paste &Unformatted + Dán vào dữ liệu ch&ưa chỉnh sửa + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Chọn tấ&t cả + + + + Select &Scene + Chọn c&ảnh + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Đị&nh dạng + + + + &Bold + &In đậm + + + + &Italic + I&n nghiêng + + + + &Underline + &Gạch dưới + + + + Stri&kethrough + G&ạch xuyên qua + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Chữ t&rồi lên + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + Chữ s&ụp xuống + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Canh lề b&ên trái + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Canh lề c&hính giữa + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Canh lề bên p&hải + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Canh lề đ&ều hai bên + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + Giả&m mức lùi dòng + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Tă&ng mức lùi dòng + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Khối văn bản từ tr&ái sang phải + + + + Ri&ght to Left Block + Khối văn bản từ ph&ải sang trái + + + + &Tools + Cô&ng cụ + + + + &Find... + Tì&m kiếm... + + + + Find &Next + Tìm tiế&p theo + + + + Find Pre&vious + Tìm tr&ước đó + + + + &Replace... + Th&ay thế... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Trích dẫn thô&ng minh: + + + + Update &Document + Cập nhật tà&i liệu + + + + Update &Selection + Cập nhật v&ùng lựa chọn + + + + &Spelling... + Kiểm tr&a lỗi chính tả... + + + + F7 + F7 + + + + &Timers... + B&ộ đếm thời gian + + + + S&ymbols... + Biể&u tượng... + + + + &Settings + Thiế&t lập + + + + Show &Toolbar + Hiển thị th&anh công cụ + + + + Show &Menu Icons + Hiển thị biểu tượng men&u + + + + F&ocused Text + Tập tr&ung vào văn bản + + + + &Fullscreen + Toàn mà&n hình + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + T&hu nhỏ + + + + Ctrl+M + Ctrl+M + + + + &Themes... + G&iao diện... + + + + &Preferences... + Tùy biế&n... + + + + Focus Off + Tắt phần tập trung + + + + Focus One Line + Tập trung vào một dòng văn bản + + + + Focus Three Lines + Tập trung vào ba dòng văn bản + + + + &Paragraph + &Đoạn văn + + + + Focus Paragraph + Tập trung vào đoạn văn + + + + &Help + Dịch bởi P&han Anh + + + + Application &Language... + Ngôn ngữ hiển th&ị... + + + + Some files were unsupported and could not be opened. + Một số tập tin không được hỗ trợ nên sẽ không thể mở được. + + + + &Off + T&ắt + + + + One &Line + Một D&òng + + + + &Three Lines + B&a Dòng + + + + &About + Thô&ng tin + + + + About &Qt + Thô&ng tin về Qt + + + diff --git a/translations/focuswriter_zh_CN.qm b/translations/focuswriter_zh_CN.qm index 04e5fa24ec88a35359be0b981b3e4354d0c8e251..aeb8aea50325958a8cdd12b7969d54fcdad5c67b 100644 GIT binary patch delta 4112 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 diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index cdbb40ca..803ed6b7 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -111,7 +111,7 @@ Rich Text (*.rtf) - Rich Text (*.rtf) + 富文本文件 (*.rtf) @@ -227,8 +227,8 @@ Replace %n instance(s)? - - + + 替换 %n 个实例? @@ -240,7 +240,7 @@ Sorry - Sorry + 对不起 @@ -290,7 +290,7 @@ <System Language> - <System Language> + <系统语言> @@ -339,7 +339,7 @@ Sorry - Sorry + 对不起 @@ -664,7 +664,7 @@ Move Scenes Up - + 向上滚屏 @@ -791,7 +791,7 @@ Sorry - Sorry + 对不起 @@ -939,12 +939,12 @@ Name: - 名称: + 名称: Insert - + 插入 @@ -957,7 +957,7 @@ Scripts - + 脚本 @@ -1110,12 +1110,12 @@ Spacings - + 间隔 Line Spacing - + 行间隔 @@ -1125,12 +1125,12 @@ 1.5 Lines - + 1.5 倍行距 Double - 双引号 + 双倍行距 @@ -1140,12 +1140,12 @@ Paragraph Spacing - + 段间距 Indent First Line: - + 首行缩进 @@ -1228,7 +1228,7 @@ Sorry - Sorry + 对不起 @@ -1385,7 +1385,7 @@ Unexpectedly reached end of file. - Unexpectedly reached end of file. + 意外地跳到了文件末尾 @@ -1419,17 +1419,17 @@ FocusWriter - + 专心写作 A simple fullscreen word processor - + 一个简洁的全屏文字处理软件 Copyright &copy; 2008-%1 Graeme Gott - + 版权 &copy; 2008-%1 Graeme Gott @@ -1501,32 +1501,32 @@ Switch to Next Document - + 跳转到下一文档 Switch to Previous Document - + 跳转到上一文档 Switch to First Document - + 跳转到第一个文档 Switch to Last Document - + 跳转到最后一个文档 Switch to Document %1 - + 跳转到文档 %1 Loading settings - 栽入设置 + 载入设置 @@ -1582,7 +1582,7 @@ Please make sure that SDL_mixer is installed. - + 请确认 SDL_mixer 已被安装 @@ -1692,12 +1692,12 @@ Paste &Unformatted - + 无格式粘贴 Ctrl+Shift+V - + Ctrl+Shift+V @@ -1712,7 +1712,7 @@ Ctrl+Shift+A - + Ctrl+Shift+A From 9b365049377630f795d30de706a79d4bf38a42ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Borme?= Date: Sat, 4 Jan 2014 16:49:56 -0500 Subject: [PATCH 137/630] FIXED: Hyphenated lines were not focused properly. --- src/document.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 9cfb046b..64246fcc 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -930,14 +930,15 @@ void Document::focusText() switch (m_focus_mode) { case 1: // Current line - selection.cursor.movePosition(QTextCursor::EndOfLine); - selection.cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + selection.cursor.movePosition(QTextCursor::StartOfLine); + selection.cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); break; case 2: // Current line and previous two lines - selection.cursor.movePosition(QTextCursor::EndOfLine); - selection.cursor.movePosition(QTextCursor::Up, QTextCursor::KeepAnchor, 2); - selection.cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + selection.cursor.movePosition(QTextCursor::StartOfLine); + selection.cursor.movePosition(QTextCursor::Up); + selection.cursor.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor, 2); + selection.cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); break; case 3: // Current paragraph From ec86fd40e304047f46fec16553e613148b3c641c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 5 Jan 2014 05:45:30 -0500 Subject: [PATCH 138/630] Update translations. --- resources/unix/focuswriter.desktop | 6 + translations/focuswriter_ar.qm | Bin 0 -> 16020 bytes translations/focuswriter_ar.ts | 2028 ++++++++++++++++++++++++++++ translations/focuswriter_ca.ts | 14 +- translations/focuswriter_cs.qm | Bin 32067 -> 32061 bytes translations/focuswriter_cs.ts | 20 +- translations/focuswriter_da.ts | 14 +- translations/focuswriter_de.ts | 14 +- translations/focuswriter_el.ts | 14 +- translations/focuswriter_en.ts | 14 +- translations/focuswriter_en_GB.ts | 14 +- translations/focuswriter_es.ts | 14 +- translations/focuswriter_es_MX.ts | 14 +- translations/focuswriter_fi.ts | 14 +- translations/focuswriter_fr.ts | 14 +- translations/focuswriter_he.ts | 14 +- translations/focuswriter_hu.qm | Bin 24395 -> 33030 bytes translations/focuswriter_hu.ts | 198 +-- translations/focuswriter_id.ts | 14 +- translations/focuswriter_it.ts | 14 +- translations/focuswriter_ja.ts | 14 +- translations/focuswriter_ko.ts | 14 +- translations/focuswriter_nl.ts | 14 +- translations/focuswriter_pl.ts | 14 +- translations/focuswriter_pt.ts | 14 +- translations/focuswriter_pt_BR.ts | 14 +- translations/focuswriter_ro.ts | 14 +- translations/focuswriter_ru.ts | 14 +- translations/focuswriter_sk.ts | 14 +- translations/focuswriter_sr.ts | 14 +- translations/focuswriter_sv.ts | 14 +- translations/focuswriter_tr.ts | 14 +- translations/focuswriter_uk.ts | 14 +- translations/focuswriter_vi.ts | 14 +- translations/focuswriter_zh_CN.ts | 14 +- 35 files changed, 2339 insertions(+), 305 deletions(-) create mode 100644 translations/focuswriter_ar.qm create mode 100644 translations/focuswriter_ar.ts diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index cf21f8fa..1cc8adb8 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -10,6 +10,8 @@ Name[es]=FocusWriter Name[fi]=FocusWriter Name[fr]=FocusWriter Name[he]=FocusWriter +Name[hu]=FocusWriter +Name[ja]=FocusWriter Name[ko]=포커스 라이터 Name[pl]=FocusWriter Name[pt]=FocusWriter @@ -28,6 +30,8 @@ GenericName[es]=Procesador de textos a pantalla completa GenericName[fi]=Koko näytön tekstinkäsittelyohjelma GenericName[fr]=Traitement de texte plein écran GenericName[he]=מעבד תמלילים במסך מלא +GenericName[hu]=Teljesképernyős szövegszerkesztő +GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 GenericName[pl]=Pełnoekranowy edytor tekstów GenericName[pt]=Processador de textos em ecrã completo @@ -46,6 +50,8 @@ Comment[es]=Escriba sin distracciones Comment[fi]=Kirjoita ilman häiriötekijöitä Comment[fr]=Écrivez sans distractions Comment[he]=כתיבה ללא הסחות דעת +Comment[hu]=Írjon zavartalanul +Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 Comment[pl]=Pisz bez zakłóceń Comment[pt]=Escreva sem distrações diff --git a/translations/focuswriter_ar.qm b/translations/focuswriter_ar.qm new file mode 100644 index 0000000000000000000000000000000000000000..4eabd39810a6ee243496e6d081c68878d1fe9be6 GIT binary patch literal 16020 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 TcA}! + + + + Alert + + + Close (%1) + إغـلاق (%1) + + + + Collapse + تجميع + + + + Expand + بسـط + + + + AlertLayer + + + Dismiss Alert + + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + معـذرة! + + + + Unable to save '%1'. + + + + + Save File As + حفظ باسم + + + + + Unable to overwrite '%1'. + لا يمكن الكتابة على '%1'. + + + + Rename File + تسمية الملف مجددا + + + + Unable to rename '%1'. + لا يمكن إعادة تسمية '%1'. + + + + Reload File + تحديـث الملف + + + + Reload the file %1 from disk? + + + + + All unsaved changes will be lost. + + + + + Reload + تحديـث + + + + Plain Text (*.txt) + نص صرف (*.txt) + + + + Question + + + + + Saving as plain text will discard all formatting. Discard formatting? + + + + + OpenDocument Text (*.odt) + نص المستند المفتوح (*.odt). + + + + Rich Text (*.rtf) + نص ثري (*.rtf) + + + + All Files (*) + كل الملفات (*) + + + + DocumentWatcher + + + File Changed + + + + + The file %1 was changed by another program. + + + + + Do you want to reload the file? + تحدِّث هذا الملف؟ + + + + Reload + تحديـث + + + + Ignore + تجاهـل + + + + File Deleted + + + + + The file %1 was deleted by another program. + + + + + Do you want to save or close the file? + تريد إغلاق هذا الملف أم حفظه؟ + + + + FindDialog + + + Search for: + بحث عن: + + + + Replace with: + استبدال: + + + + Ignore case + + + + + Whole words only + + + + + Regular expressions + تعبيرات قياسية + + + + Search up + بحث تجاه فوق + + + + Search down + بحث تجاه تحت + + + + &Find + بحـث + + + + &Replace + استبدال الكل + + + + Replace &All + استبدال بالكل + + + + Find + بحـث + + + + Replace + استبـدال + + + + Replace %n instance(s)? + + + + + + + + + + + + Question + + + + + + Sorry + معذرة! + + + + + Phrase not found. + كلمة غير موجودة. + + + + Highlighter + + + Add + إضافة + + + + Check Spelling... + + + + + (No suggestions found) + + + + + ImageButton + + + Open Image + فتح صورة + + + + Images(%1) + صور(%1) + + + + LocaleDialog + + + Select application language: + اختيار لغة البرنامج + + + + <System Language> + <لغة النظام> + + + + Note + ملاحظة + + + + Please restart this application for the change in language to take effect. + من فضلك، أعد تشغيل البرنامج ليتم تفعيل اللغة المختارة. + + + + PreferencesDialog + + + Preferences + تفضيلات + + + + General + عـام + + + + Statistics + + + + + Toolbar + شريط الأدوات + + + + Spell Checking + + + + + Select Dictionary + اختـر قاموساً + + + + + Sorry + + + + + Unable to open archive. + لا يمكن فتح ملف الأرشيف + + + + Unable to read archive metadata. + + + + + The archive does not contain a usable dictionary. + + + + + Unable to open file '%1'. + لا يمكن فتح الملف '%1'. + + + + Unable to close file '%1'. + لا يمكن إغلاق الملف '%1'. + + + + + Question + + + + + Shortcuts + + + + + One or more shortcuts conflict. Do you wish to proceed? + + + + + The dictionary "%1" already exists. Do you want to replace it? + + + + + Daily Goal + + + + + None + + + + + Minutes: + + + + + + Words: + الكلمـات: + + + + Editing + تحريـر + + + + Always vertically center + + + + + Block insertion cursor + + + + + Smooth fonts + تنعيم الخطوط + + + + Typewriter sounds + أصوات الرقن + + + + Smart quotes: + + + + + Double + + + + + Single + + + + + Scenes + + + + + Divider: + + + + + Saving + حفـظ + + + + Automatically save changes + حفظ تلقائي للتغييرات + + + + Remember cursor position + + + + + Contents + محتويات + + + + Word count + عدد الكلمات + + + + Page count + عدد الصفحات + + + + Paragraph count + عدد الفقرات + + + + Character count + عدد الحروف + + + + Page Size + حجم الصفحة + + + + Characters: + الحروف: + + + + Paragraphs: + الفقرات: + + + + Word Count Algorithm + + + + + Detect word boundaries + + + + + Divide character count by six + + + + + Style + النـمـط + + + + Icons Only + أيقوانات فقط + + + + Text Only + نص فقط + + + + Text Alongside Icons + + + + + Text Under Icons + النص تحت الأيقونة + + + + Text Position: + تموضع النص: + + + + Actions + + + + + Move Up + تحريك إلى أعلى + + + + Move Down + تحريك إلى أسفل + + + + Add Separator + إضافة فاصل + + + + Command + + + + + Shortcut + + + + + Action + + + + + Check spelling as you type + + + + + Ignore words in UPPERCASE + + + + + Ignore words with numbers + + + + + Language + اللغة + + + + + Add + إضافة + + + + Remove + حـذف + + + + Personal Dictionary + قاموس شخصي + + + + Reader + + + + Not a supported RTF file. + + + + + Unable to open archive. + لا يمكن فتح ملف الأرشيف. + + + + Unable to open file '%1'. + لا يمكن فتح الملف '%1'. + + + + Unable to close file '%1'. + لا يمكن إغلاق الملف '%1'. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + + + + + Hide scene list (%1) + + + + + Filter + + + + + Move Scenes Down + + + + + Resize scene list + + + + + Session + + + + + + + + + Default + الافتراضي + + + + SessionManager + + + Manage Sessions + إدارة الجلسات + + + + S&essions + الجلسـات + + + + New + جديد + + + + Rename + التسمية مجددا + + + + Clone + + + + + Delete + حـذف + + + + Switch To + التبديل إلى + + + + New Session + جلسة جديدة + + + + Clone Session + + + + + Rename Session + تسمية الجلسة مجددًا + + + + Question + + + + + Delete selected session? + تحذف الجلسة المحددة؟ + + + + Session name: + اسم الجلسة: + + + + Sorry + + + + + The requested session name is already in use. + + + + + &New... + جديـد... + + + + Ctrl+Shift+N + + + + + &Manage... + إدارة... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + + + + + Reset to Default + + + + + + Shortcut: + + + + + SmartQuote + + + Replacing quotation marks... + + + + + Please Wait + من فضلك، انتظر + + + + SpellChecker + + + Check Spelling + + + + + &Add + إضافة + + + + &Ignore + تجاهـل + + + + I&gnore All + تجاهل الكل + + + + &Change + تغييـر + + + + C&hange All + + + + + Not in dictionary: + + + + + Change to: + + + + + Checking spelling... + + + + + Cancel + إلغـاء + + + + Please wait + + + + + Spell check complete. + + + + + SymbolsDialog + + + Symbols + + + + + Recently used symbols + + + + + All symbols + + + + + Details + تفاصيـل + + + + Name: + الاسـم: + + + + Insert + إدراج + + + + SymbolsModel + + + Blocks + + + + + Scripts + + + + + Theme + + + Untitled %1 + + + + + ThemeDialog + + + Modify Theme + تعديل السمة + + + + Name: + الاسـم: + + + + Background + الخلفيـة + + + + No Image + لا صورة + + + + Tiled + + + + + + Centered + + + + + + Stretched + + + + + Scaled + + + + + Zoomed + + + + + Remove + حـذف + + + + Type: + النـوع: + + + + + + Color: + اللـون: + + + + Image: + الصـورة: + + + + Foreground + الواجـهة + + + + Opacity + العتـامة + + + + + + + pixels + + + + + Left + يسارا + + + + Right + يمينـا + + + + Position + الموضع + + + + Size: + الحجـم: + + + + Rounding: + تحديب الحواف + + + + Margin: + الهامـش: + + + + Padding: + + + + + Text + النص + + + + Font: + الخـط + + + + Misspelled: + + + + + Spacings + مباعـدة + + + + Line Spacing + المباعدة بين الأسطر + + + + Single + + + + + 1.5 Lines + + + + + Double + + + + + Proportional + + + + + Paragraph Spacing + + + + + Indent First Line: + + + + + Pixels Above: + + + + + Pixels Below: + + + + + The quick brown fox jumps over the lazy dog + + + + + ThemeManager + + + Themes + السمـات + + + + Add + إضافة + + + + Modify + تعديـل + + + + Remove + حـذف + + + + Import + تحميـل + + + + Export + تصديـر + + + + Close + إغـلاق + + + + Question + + + + + Remove selected theme? + تحذف السمة المحددة؟ + + + + Import Theme + تحميل سمة + + + + Themes (*.fwtz *.theme) + + + + + Themes (*.fwtz) + + + + + Sorry + + + + + A theme already exists with that name. Please enter a new name: + + + + + Export Theme + تصدير السمة + + + + Timer + + + <b>%1</b> - %2 + + + + + Question + + + + + Delete timer? + + + + + <b>Words:</b> %L1 + + + + + <b>Pages:</b> %L1 + + + + + <b>Paragraphs:</b> %L1 + + + + + <b>Characters:</b> %L1 / %L2 + + + + + Set Delay + + + + + Set Time + + + + + Delay: + + + + + Time: + + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + منبـه + + + + Type: + النـوع: + + + + Memo: + + + + + Edit + + + + + Delete + حـذف + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + + + + + TimerManager + + + Timers + + + + + New + جديـد + + + + Recent + المستندات الأخيرة + + + + Question + + + + + Cancel editing timers? + + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + + + + + Window + + + Loading themes + تحميـل سمـات + + + + Loading sounds + تحميل الأصوات + + + + + Untitled + غير معنون + + + + Open File + فتـح ملف + + + + About FocusWriter + حـول البرنامج FocusWriter + + + + FocusWriter + + + + + A simple fullscreen word processor + + + + + Copyright &copy; 2008-%1 Graeme Gott + + + + + Released under the <a href=%1>GPL 3</a> license + + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + + Used under the <a href=%1>LGPL 3</a> license + + + + + + Characters: %L1 / %L2 + + + + + + Pages: %L1 + + + + + + Paragraphs: %L1 + + + + + + Words: %L1 + + + + + + %1% of daily goal + + + + + + Opening %1 + فتـح %1 + + + + Question + + + + + Save changes? + تحفظ التغييرات؟ + + + + + (Untitled %1) + (%1 غير معنون) + + + + Switch to Next Document + التبديل إلى المستند اللاحق + + + + Switch to Previous Document + التبديل إلى المستند السابق + + + + Switch to First Document + التبديل إلى المستند الأول + + + + Switch to Last Document + التبديل إلى المستند الأخير + + + + Switch to Document %1 + التبديل إلى المستند %1 + + + + Loading settings + تحميل الإعدادات + + + + Emergency cache is not writable. + + + + + + Warning + + + + + FocusWriter was not shut down cleanly. + + + + + Restore from the emergency cache? + + + + + Some files could not be opened. + + + + + Some files were opened Read-Only. + + + + + Text Files (%1);;All Files (*) + + + + + '%1' is newer than the cached copy. + + + + + Overwrite newer file? + + + + + Unable to load typewriter sounds. + لا يمكن تحمل أصوات الرقن. + + + + Please make sure that SDL_mixer is installed. + + + + + %1 (Read-Only) + %1 (للقراءة فقط) + + + + &File + ملـف + + + + &New + جديـد + + + + &Open... + فتـح + + + + Reloa&d + تحديـث + + + + &Save + حفـظ + + + + Save &As... + حفظ باسم + + + + &Rename... + التسمية مجددًا + + + + Save A&ll + حفظ الكل + + + + Manage Sessions + إدارة الجلسات + + + + New Session + جلسة جديدة + + + + &Print... + طباعة + + + + &Close + إغلاق المستند الحالي + + + + &Quit + إغلاق البرنامج + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + تحريـر + + + + &Undo + تراجـع + + + + &Redo + استرجاع + + + + Cu&t + قـص + + + + &Copy + نسـخ + + + + &Paste + لصـق + + + + Paste &Unformatted + + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + تحديـد الكل + + + + Select &Scene + + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + النمـط + + + + &Bold + سمـيك + + + + &Italic + مائـل + + + + &Underline + مسطر تحته + + + + Stri&kethrough + مشـطب + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + محاذاة إلى اليسار + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + محاذاة إلى الوسط + + + + Ctrl+| + Ctrl+| + + + + Align &Right + محاذاة إلى اليمين + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + ضبـط + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + الاتجاه من اليسار إلى اليمين + + + + Ri&ght to Left Block + الاتجاه من اليمين إلى اليسار + + + + &Tools + أدوات + + + + &Find... + بحـث + + + + Find &Next + أوجد اللاحق + + + + Find Pre&vious + أوجد السابق + + + + &Replace... + استبـدال... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + + + + + Update &Document + + + + + Update &Selection + + + + + &Spelling... + + + + + F7 + F7 + + + + &Timers... + + + + + S&ymbols... + + + + + &Settings + إعـدادات + + + + Show &Toolbar + إظهار شريط الأدوات + + + + Show &Menu Icons + + + + + F&ocused Text + النص المركز عليه + + + + &Fullscreen + + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + + + + + Ctrl+M + Ctrl+M + + + + &Themes... + سمـات... + + + + &Preferences... + تفضيلات... + + + + Focus Off + دون تركيز + + + + Focus One Line + تركيز على سطر + + + + Focus Three Lines + تركيز على ثلاثة أسطر + + + + &Paragraph + فقـرة + + + + Focus Paragraph + تركيز على فقرة + + + + &Help + مساعدة + + + + Application &Language... + لغة التطبيق... + + + + Some files were unsupported and could not be opened. + + + + + &Off + دون تركيز + + + + One &Line + تركيز على سطر + + + + &Three Lines + تركيز على ثلاثة أسطر + + + + &About + حـول + + + + About &Qt + حـول "كيوتي" + + + diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 2de6efca..6fae4daa 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Torna a carregar - + Plain Text (*.txt) Text pla (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text enriquit (*.rtf) - + All Files (*) Tots els fitxers (*) diff --git a/translations/focuswriter_cs.qm b/translations/focuswriter_cs.qm index 58c8e637b3ba795d8b42f1477d1188e7d01911e5..b00930103ad07d67d9d463e357d32d921e6b7542 100644 GIT binary patch delta 2974 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 - + Alert @@ -89,32 +89,32 @@ Nahrát znovu - + Plain Text (*.txt) Prostý text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -423,7 +423,7 @@ Block insertion cursor - Ukazovátko vkládání bloku + Ukazatel vkládání bloku @@ -473,7 +473,7 @@ Remember cursor position - Zapamatovat si polohu ukazovátka + Zapamatovat si polohu ukazatele @@ -946,7 +946,7 @@ Insert - Vložka + Vložit diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index cb64164c..80d4198d 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Genindlæs - + Plain Text (*.txt) Ren tekst (*.txt) - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 698189e6..8e5ba9cc 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Neu laden - + Plain Text (*.txt) nur Text (*.txt) - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 4dc7fe68..0e4c3e1d 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Επαναφόρτωση - + Plain Text (*.txt) Απλό Κείμενο (*.txt) - + Question Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; - + OpenDocument Text (*.odt) Έγγραφο Κειμένου ODF (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο Κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index e7b25777..270ed4a0 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 8eb5540d..aff5ae52 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Reload - + Plain Text (*.txt) Plain Text (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? Saving as plain-text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) All Files (*) diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index ec8cb055..8588232f 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Volver a cargar - + Plain Text (*.txt) Texto plano (*.txt) - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 31cc6d37..9eb1c715 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ - + Plain Text (*.txt) Texto Plano (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 03cc85c2..cbfee841 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Lataa uudelleen - + Plain Text (*.txt) Muotoilematon teksti (*.txt) - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? Muotoilemattomana tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index a7d250e7..382ef3f9 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Rechargement - + Plain Text (*.txt) Texte brut (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? - + OpenDocument Text (*.odt) Texte OpenDocument (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index d38aa91a..df38f0dd 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ טעינה מחדש - + Plain Text (*.txt) תמליל גלוי ‪(*.txt) - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? - + OpenDocument Text (*.odt) תמליל ‫OpenDocument ‫(‭*.odt‬) - + Rich Text (*.rtf) תמליל עשיר ‪(*.rtf) - + All Files (*) כל הקבצים (*) diff --git a/translations/focuswriter_hu.qm b/translations/focuswriter_hu.qm index 9fcb8aab011eb3ce736fe9bc2ff425bac8ee5f16..25a29aebe68923a8c3b1b80ccfc0ede8343ec0bb 100644 GIT binary patch delta 10009 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 diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 4d2cfca2..8a60d8d4 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -1,12 +1,12 @@ - + Alert Close (%1) - + Bezárás @@ -16,7 +16,7 @@ Expand - Kinyitás + Kibontás @@ -24,7 +24,7 @@ Dismiss Alert - + Figyelmeztetés bezárása @@ -71,50 +71,50 @@ Reload File - + Fájl újratöltése Reload the file %1 from disk? - + %1 Fájl újratöltése a lemezről All unsaved changes will be lost. - + Minden el nem mentett változtatás el fog veszni Reload - + Újratöltés - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + Question - Kérdés + Kérdés - + Saving as plain text will discard all formatting. Discard formatting? - + Egyszerű szövegként való mentés minden formázást töröl. Töröl minden formázást? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -124,42 +124,42 @@ File Changed - + A fálj megváltozott The file %1 was changed by another program. - + A(z) %1 fájl egy másik program megváltoztatta Do you want to reload the file? - + Újra akarja tölteni a fájlt? Reload - + Újratöltés Ignore - + Figyelmen kívül hagyás File Deleted - + Fájl törölve The file %1 was deleted by another program. - + A()z %1 fájlt egy másik program törölte Do you want to save or close the file? - + El szeretné menteni vagy be szeretné zárni a fájlt? @@ -187,7 +187,7 @@ Regular expressions - + Szabályos kifejezések @@ -202,17 +202,17 @@ &Find - + &Keresés... &Replace - + &Csere Replace &All - + Összes &cseréje @@ -375,12 +375,12 @@ Shortcuts - + Gyorsgombok One or more shortcuts conflict. Do you wish to proceed? - + Egy vagy több gyorsgomb ütközik. Szeretné folytatni? @@ -451,12 +451,12 @@ Scenes - + Jelenetek Divider: - + Elosztó @@ -581,17 +581,17 @@ Command - + Parancs Shortcut - + Gyorsgomb Action - + Akció @@ -659,52 +659,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Le Move Scenes Up - + Jelenetek mozgatása felfelé Ctrl+Shift+Up - + Ctrl+Shift+Fel Toggle Scene List - + Jelenetek átváltása Shift+F4 - + Shift+F4 Show scene list (%1) - + Jelenetek listájának mutatása (%1) Hide scene list (%1) - + Jelenetek listájának elrejtése (%1) Filter - + Szűrő Move Scenes Down - + Jelenetek mozgatása lefelé Resize scene list - + Jelenek listájának átméretezése @@ -824,18 +824,18 @@ Clear - + Törlés Reset to Default - + Visszaállítás alapértelmezettre Shortcut: - + Gyorsgomb: @@ -861,27 +861,27 @@ &Add - + &Hozzáadás &Ignore - + &Figyelmen kívül hagyás I&gnore All - + &Összes figyelmen kívül hagyása &Change - + &Változtatás C&hange All - + Összes változtatása @@ -919,32 +919,32 @@ Symbols - + Szimbólumok Recently used symbols - + Nemrég használt szimbólumok All symbols - + Minden szimbólum Details - + Részletek Name: - Név: + Név: Insert - + Beszúrás @@ -952,12 +952,12 @@ Blocks - + Tömbök Scripts - + Szkriptek @@ -1110,52 +1110,52 @@ Spacings - + Helyközölés Line Spacing - + Sorközök Single - Szimpla + Szimpla 1.5 Lines - + 1.5 Sor Double - Dupla + Dupla Proportional - + Arányos Paragraph Spacing - + Bekezdésközök Indent First Line: - + Első sor bekezdéssel indítása: Pixels Above: - + Pixelek felette: Pixels Below: - + Pixelek alatta: @@ -1419,32 +1419,32 @@ FocusWriter - + FocusWriter A simple fullscreen word processor - + Egy egyszerű teljesképernyős szövegszerkesztő Copyright &copy; 2008-%1 Graeme Gott - + Szerzői jogvédelem alatt &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + <a href=%1>GPL 3</a> licensz alatt kiadva Uses icons from the <a href=%1>Oxygen</a> icon theme - + <a href=%1>Oxygen</a> ikontémából használ ikonokat Used under the <a href=%1>LGPL 3</a> license - + <a href=%1>LGPL 3</a> licensz alatt használva @@ -1501,27 +1501,27 @@ Switch to Next Document - + Váltás a következő dokumentumra Switch to Previous Document - + Váltás az előző dokumentumra Switch to First Document - + Váltás az első dokumentumra Switch to Last Document - + Váltás az utolsó dokumentumra Switch to Document %1 - + Váltás a(z) %1 dokumentumra @@ -1582,7 +1582,7 @@ Please make sure that SDL_mixer is installed. - + Kérem győződjön meg róla, hogy az SDL_mixer telepítve van. @@ -1607,7 +1607,7 @@ Reloa&d - + Újratöltés & @@ -1692,12 +1692,12 @@ Paste &Unformatted - + Beillesztés &Formázatlanul Ctrl+Shift+V - + Ctrl+Shift+V @@ -1707,12 +1707,12 @@ Select &Scene - + &Jelenet kiválasztása Ctrl+Shift+A - + Ctrl+Shift+A @@ -1897,7 +1897,7 @@ S&ymbols... - + &Szimbólumok @@ -1917,7 +1917,7 @@ F&ocused Text - + Fókuszált szöveg @@ -1957,27 +1957,27 @@ Focus Off - + Fókusz kikapcsolása Focus One Line - + Egy sor fókuszálása Focus Three Lines - + Három sor fókuszálása &Paragraph - + &Bekezdés Focus Paragraph - + Bekezdés fókuszálása @@ -1992,22 +1992,22 @@ Some files were unsupported and could not be opened. - + Néhány fájltípus nem támogatott és nem került megnyitásra. &Off - + &Kikapcsolás One &Line - + Egy &Sor &Three Lines - + &Három sor diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 2616ed06..e0c578a9 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ - + Plain Text (*.txt) Teks Biasa (*.txt) - + Question Pertanyaan - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) Teks OpenDocument (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Semua File (*) diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 5c14f062..ca0f5833 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Ricarica - + Plain Text (*.txt) Testo semplice (*.txt) - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? - + OpenDocument Text (*.odt) OpenDocument (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Tutti i file (*) diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 1b826729..1c279135 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ 再読み込み - + Plain Text (*.txt) テキスト文書 (*.txt) - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? - + OpenDocument Text (*.odt) OpenDocument 形式 (*.odt) - + Rich Text (*.rtf) リッチ テキスト形式 (*.rtf) - + All Files (*) すべてのファイル (*.*) diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index ca64ce4c..fb12f0ce 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ 새로 고침 - + Plain Text (*.txt) 일반 텍스트 (*.txt) - + Question 물어볼 것이 있습니다. - + Saving as plain text will discard all formatting. Discard formatting? 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? - + OpenDocument Text (*.odt) 오픈 다큐먼트 텍스트 (*.odt) - + Rich Text (*.rtf) 서식 있는 텍스트 (*.rtf) - + All Files (*) 모든 파일 (*) diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index fc3621e9..700b9e7d 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Herladen - + Plain Text (*.txt) Platte tekst (*.txt) - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 79b5c735..82eecd27 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Wczytaj ponownie - + Plain Text (*.txt) Zwykły tekst (*.txt) - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 2703ebf5..20cb05ec 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Carregar de novo - + Plain Text (*.txt) Texto simples (*.txt) - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? - + OpenDocument Text (*.odt) Texto OpenDocument (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 90f68f15..3eb8a5e2 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Recarregar - + Plain Text (*.txt) Texto simples (*.txt) - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? - + OpenDocument Text (*.odt) Texto do OpenDocument (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index a8bdac27..b6a2b41a 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Reîncarcă - + Plain Text (*.txt) Text simplu (*.txt) - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text îmbogăţit (*.rtf) - + All Files (*) Toate fişierele (*) diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index be25cadb..1af9bdb4 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Открыть заново - + Plain Text (*.txt) Простой текст (*.txt) - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? - + OpenDocument Text (*.odt) OpenDocument (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index e705ad05..e1801e69 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Opätovne načítať - + Plain Text (*.txt) Obyčajný text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Všetky súbory (*) diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 87ce8c0d..948e9701 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Поново учитај - + Plain Text (*.txt) Чист текст (*.txt) - + Question Питање - + Saving as plain text will discard all formatting. Discard formatting? Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? - + OpenDocument Text (*.odt) OpenDocument текст (*.odt) - + Rich Text (*.rtf) Обогаћени текст (*.rtf) - + All Files (*) Сви фајлови (*) diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index e1ac6f46..07c35740 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Läs om - + Plain Text (*.txt) Vanlig text (*.txt) - + Question Fråga - + Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 10cf43d2..7b2e4c32 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Yeniden Yükle - + Plain Text (*.txt) Düz Metin (*.txt) - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? - + OpenDocument Text (*.odt) OpenDocument Metni (*.odt) - + Rich Text (*.rtf) Zengin Metin (*.rtf) - + All Files (*) Tüm Dosyalar (*) diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 37249581..4c4264b4 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index a84d7be0..4ecc5f73 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ Tải lại - + Plain Text (*.txt) Dạng văn bản thường (*.txt) - + Question Câu hỏi - + Saving as plain text will discard all formatting. Discard formatting? Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? - + OpenDocument Text (*.odt) Dạng văn bản mở (*.odt) - + Rich Text (*.rtf) Dạng Rich Text (*.rtf) - + All Files (*) Mọi loại tập tin (*) diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 803ed6b7..0f6bbf61 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -1,6 +1,6 @@ - + Alert @@ -89,32 +89,32 @@ 重新加载 - + Plain Text (*.txt) 纯文本 (*.txt) - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) 富文本文件 (*.rtf) - + All Files (*) 所有文件 (*) From 515f3f5405ae67c210b21d110cdc8bb2c426533c Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 13 Jan 2014 17:00:37 +0000 Subject: [PATCH 139/630] log changes --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 8092cbf5..a1140fe1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +focuswriter (1.4.4+git.3.ec86fd40-1) unstable; urgency=low + + * Track upstream maintenance branch + - c0ceb94a Sync translations with Transifex. + - 9b365049 FIXED: Hyphenated lines were not focused properly. + - ec86fd40 Update translations. + + -- Barak A. Pearlmutter Mon, 13 Jan 2014 17:00:32 +0000 + focuswriter (1.4.4-1) unstable; urgency=low * new upstream release From 148162c00a98fb4b0f3e5f81a5b8672955e6754f Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 15 Jan 2014 10:22:39 +0000 Subject: [PATCH 140/630] bump standards version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 9dc34286..bfe7897d 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Build-Depends: debhelper (>= 9), libenchant-dev, libzip-dev, pkg-config -Standards-Version: 3.9.4 +Standards-Version: 3.9.5 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From cb1961438a8a5f3ae4fed1e74ca2a1fea81acef4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 25 Jan 2014 07:12:36 -0500 Subject: [PATCH 141/630] Fix compilation error with Qt 5 on Windows. --- src/rtf/writer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rtf/writer.cpp b/src/rtf/writer.cpp index 85cad020..540d975f 100644 --- a/src/rtf/writer.cpp +++ b/src/rtf/writer.cpp @@ -202,7 +202,7 @@ QByteArray fetchCodePage() #else QString codepage = QLatin1String("CP") + QString::fromLocal8Bit(buffer); #endif - return codepage.toAscii(); + return codepage.toLatin1(); } #endif From bb69d83cf5729034f1087e12669d17e6293ffc66 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 26 Jan 2014 19:45:39 -0500 Subject: [PATCH 142/630] Update QtSingleApplication. --- src/qtsingleapplication/qtlocalpeer.cpp | 228 +++++++++--------- src/qtsingleapplication/qtlocalpeer.h | 25 +- src/qtsingleapplication/qtlockedfile.cpp | 19 +- src/qtsingleapplication/qtlockedfile.h | 25 +- src/qtsingleapplication/qtlockedfile_unix.cpp | 19 +- src/qtsingleapplication/qtlockedfile_win.cpp | 25 +- .../qtsingleapplication.cpp | 27 ++- src/qtsingleapplication/qtsingleapplication.h | 29 +-- .../qtsinglecoreapplication.cpp | 19 +- .../qtsinglecoreapplication.h | 21 +- 10 files changed, 226 insertions(+), 211 deletions(-) diff --git a/src/qtsingleapplication/qtlocalpeer.cpp b/src/qtsingleapplication/qtlocalpeer.cpp index 529eba09..332b0643 100644 --- a/src/qtsingleapplication/qtlocalpeer.cpp +++ b/src/qtsingleapplication/qtlocalpeer.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,16 +34,18 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #include "qtlocalpeer.h" -#include -#include +#include +#include #if defined(Q_OS_WIN) -#include -#include +#include +#include typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif @@ -66,136 +67,137 @@ namespace QtLP_Private { const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) - : QObject(parent), id(appId) + : QObject(parent), id(appId) { - QString prefix = id; - if (id.isEmpty()) { - id = QCoreApplication::applicationFilePath(); + QString prefix = id; + if (id.isEmpty()) { + id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) - id = id.toLower(); + id = id.toLower(); #endif - prefix = id.section(QLatin1Char('/'), -1); - } - prefix.remove(QRegExp("[^a-zA-Z]")); - prefix.truncate(6); + prefix = id.section(QLatin1Char('/'), -1); + } + prefix.remove(QRegExp("[^a-zA-Z]")); + prefix.truncate(6); - QByteArray idc = id.toUtf8(); - quint16 idNum = qChecksum(idc.constData(), idc.size()); - socketName = QLatin1String("qtsingleapp-") + prefix - + QLatin1Char('-') + QString::number(idNum, 16); + QByteArray idc = id.toUtf8(); + quint16 idNum = qChecksum(idc.constData(), idc.size()); + socketName = QLatin1String("qtsingleapp-") + prefix + + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) - if (!pProcessIdToSessionId) { - QLibrary lib("kernel32"); - pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); - } - if (pProcessIdToSessionId) { - DWORD sessionId = 0; - pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); - socketName += QLatin1Char('-') + QString::number(sessionId, 16); - } + if (!pProcessIdToSessionId) { + QLibrary lib("kernel32"); + pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); + } + if (pProcessIdToSessionId) { + DWORD sessionId = 0; + pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); + socketName += QLatin1Char('-') + QString::number(sessionId, 16); + } #else - socketName += QLatin1Char('-') + QString::number(::getuid(), 16); + socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif - server = new QLocalServer(this); - QString lockName = QDir(QDir::tempPath()).absolutePath() - + QLatin1Char('/') + socketName - + QLatin1String("-lockfile"); - lockFile.setFileName(lockName); - lockFile.open(QIODevice::ReadWrite); + server = new QLocalServer(this); + QString lockName = QDir(QDir::tempPath()).absolutePath() + + QLatin1Char('/') + socketName + + QLatin1String("-lockfile"); + lockFile.setFileName(lockName); + lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { - if (lockFile.isLocked()) - return false; + if (lockFile.isLocked()) + return false; - if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) - return true; + if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) + return true; - bool res = server->listen(socketName); + bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) - // ### Workaround - if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { - QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); - res = server->listen(socketName); - } + // ### Workaround + if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { + QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); + res = server->listen(socketName); + } #endif - if (!res) - qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); - QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); - return false; + if (!res) + qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); + QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); + return false; } bool QtLocalPeer::sendMessage(const QString &message, int timeout) { - if (!isClient()) - return false; - - QLocalSocket socket; - bool connOk = false; - for(int i = 0; i < 2; i++) { - // Try twice, in case the other instance is just starting up - socket.connectToServer(socketName); - connOk = socket.waitForConnected(timeout/2); - if (connOk || i) - break; - int ms = 250; + if (!isClient()) + return false; + + QLocalSocket socket; + bool connOk = false; + for(int i = 0; i < 2; i++) { + // Try twice, in case the other instance is just starting up + socket.connectToServer(socketName); + connOk = socket.waitForConnected(timeout/2); + if (connOk || i) + break; + int ms = 250; #if defined(Q_OS_WIN) - Sleep(DWORD(ms)); + Sleep(DWORD(ms)); #else - struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; - nanosleep(&ts, NULL); + struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; + nanosleep(&ts, NULL); #endif - } - if (!connOk) - return false; - - QByteArray uMsg(message.toUtf8()); - QDataStream ds(&socket); - ds.writeBytes(uMsg.constData(), uMsg.size()); - bool res = socket.waitForBytesWritten(timeout); - if (res) { - res &= socket.waitForReadyRead(timeout); // wait for ack - if (res) - res &= (socket.read(qstrlen(ack)) == ack); - } - return res; + } + if (!connOk) + return false; + + QByteArray uMsg(message.toUtf8()); + QDataStream ds(&socket); + ds.writeBytes(uMsg.constData(), uMsg.size()); + bool res = socket.waitForBytesWritten(timeout); + if (res) { + res &= socket.waitForReadyRead(timeout); // wait for ack + if (res) + res &= (socket.read(qstrlen(ack)) == ack); + } + return res; } void QtLocalPeer::receiveConnection() { - QLocalSocket* socket = server->nextPendingConnection(); - if (!socket) - return; - - while (socket->bytesAvailable() < (int)sizeof(quint32)) - socket->waitForReadyRead(); - QDataStream ds(socket); - QByteArray uMsg; - quint32 remaining; - ds >> remaining; - uMsg.resize(remaining); - int got = 0; - char* uMsgBuf = uMsg.data(); - do { - got = ds.readRawData(uMsgBuf, remaining); - remaining -= got; - uMsgBuf += got; - } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); - if (got < 0) { - qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); - delete socket; - return; - } - QString message(QString::fromUtf8(uMsg)); - socket->write(ack, qstrlen(ack)); - socket->waitForBytesWritten(1000); - delete socket; - emit messageReceived(message); //### (might take a long time to return) + QLocalSocket* socket = server->nextPendingConnection(); + if (!socket) + return; + + while (socket->bytesAvailable() < (int)sizeof(quint32)) + socket->waitForReadyRead(); + QDataStream ds(socket); + QByteArray uMsg; + quint32 remaining; + ds >> remaining; + uMsg.resize(remaining); + int got = 0; + char* uMsgBuf = uMsg.data(); + do { + got = ds.readRawData(uMsgBuf, remaining); + remaining -= got; + uMsgBuf += got; + } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); + if (got < 0) { + qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); + delete socket; + return; + } + QString message(QString::fromUtf8(uMsg)); + socket->write(ack, qstrlen(ack)); + socket->waitForBytesWritten(1000); + socket->waitForDisconnected(1000); // make sure client reads ack + delete socket; + emit messageReceived(message); //### (might take a long time to return) } diff --git a/src/qtsingleapplication/qtlocalpeer.h b/src/qtsingleapplication/qtlocalpeer.h index e834b738..1b533b1a 100644 --- a/src/qtsingleapplication/qtlocalpeer.h +++ b/src/qtsingleapplication/qtlocalpeer.h @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,14 +34,16 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #ifndef QTLOCALPEER_H #define QTLOCALPEER_H -#include -#include -#include +#include +#include +#include #include "qtlockedfile.h" diff --git a/src/qtsingleapplication/qtlockedfile.cpp b/src/qtsingleapplication/qtlockedfile.cpp index 3e73ba65..c142a863 100644 --- a/src/qtsingleapplication/qtlockedfile.cpp +++ b/src/qtsingleapplication/qtlockedfile.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,6 +34,8 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #include "qtlockedfile.h" diff --git a/src/qtsingleapplication/qtlockedfile.h b/src/qtsingleapplication/qtlockedfile.h index 07a42bff..84c18e5c 100644 --- a/src/qtsingleapplication/qtlockedfile.h +++ b/src/qtsingleapplication/qtlockedfile.h @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,17 +34,19 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H -#include +#include #ifdef Q_OS_WIN -#include +#include #endif -#if defined(Q_WS_WIN) +#if defined(Q_OS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) diff --git a/src/qtsingleapplication/qtlockedfile_unix.cpp b/src/qtsingleapplication/qtlockedfile_unix.cpp index 715c7d9b..976c1b9e 100644 --- a/src/qtsingleapplication/qtlockedfile_unix.cpp +++ b/src/qtsingleapplication/qtlockedfile_unix.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,6 +34,8 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #include diff --git a/src/qtsingleapplication/qtlockedfile_win.cpp b/src/qtsingleapplication/qtlockedfile_win.cpp index 4cd20039..5e212620 100644 --- a/src/qtsingleapplication/qtlockedfile_win.cpp +++ b/src/qtsingleapplication/qtlockedfile_win.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,16 +34,22 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #include "qtlockedfile.h" #include -#include +#include #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS +#if QT_VERSION >= 0x050000 +#define QT_WA(unicode, ansi) unicode +#endif + Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { diff --git a/src/qtsingleapplication/qtsingleapplication.cpp b/src/qtsingleapplication/qtsingleapplication.cpp index 4715bb6f..d0fb15d7 100644 --- a/src/qtsingleapplication/qtsingleapplication.cpp +++ b/src/qtsingleapplication/qtsingleapplication.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,6 +34,8 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ @@ -169,8 +170,8 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char * sysInit(appId); } +#if QT_VERSION < 0x050000 -#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a @@ -181,10 +182,9 @@ QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) { sysInit(); } -#endif -#if defined(Q_WS_X11) +# if defined(Q_WS_X11) /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier @@ -222,7 +222,8 @@ QtSingleApplication::QtSingleApplication(Display* dpy, const QString &appId, int { sysInit(appId); } -#endif +# endif // Q_WS_X11 +#endif // QT_VERSION < 0x050000 /*! diff --git a/src/qtsingleapplication/qtsingleapplication.h b/src/qtsingleapplication/qtsingleapplication.h index 6e5e22bd..049406f7 100644 --- a/src/qtsingleapplication/qtsingleapplication.h +++ b/src/qtsingleapplication/qtsingleapplication.h @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,6 +34,8 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #ifndef QTSINGLEAPPLICATION_H @@ -44,7 +45,7 @@ class QtLocalPeer; -#if defined(Q_WS_WIN) +#if defined(Q_OS_WIN) # if !defined(QT_QTSINGLEAPPLICATION_EXPORT) && !defined(QT_QTSINGLEAPPLICATION_IMPORT) # define QT_QTSINGLEAPPLICATION_EXPORT # elif defined(QT_QTSINGLEAPPLICATION_IMPORT) @@ -67,14 +68,14 @@ class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication public: QtSingleApplication(int &argc, char **argv, bool GUIenabled = true); QtSingleApplication(const QString &id, int &argc, char **argv); -#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) +#if QT_VERSION < 0x050000 QtSingleApplication(int &argc, char **argv, Type type); -#endif -#if defined(Q_WS_X11) +# if defined(Q_WS_X11) QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0); QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); -#endif +# endif // Q_WS_X11 +#endif // QT_VERSION < 0x050000 bool isRunning(); QString id() const; diff --git a/src/qtsingleapplication/qtsinglecoreapplication.cpp b/src/qtsingleapplication/qtsinglecoreapplication.cpp index cf607710..56345373 100644 --- a/src/qtsingleapplication/qtsinglecoreapplication.cpp +++ b/src/qtsingleapplication/qtsinglecoreapplication.cpp @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,6 +34,8 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ diff --git a/src/qtsingleapplication/qtsinglecoreapplication.h b/src/qtsingleapplication/qtsinglecoreapplication.h index 7cde4b8c..b87fffe4 100644 --- a/src/qtsingleapplication/qtsinglecoreapplication.h +++ b/src/qtsingleapplication/qtsinglecoreapplication.h @@ -1,12 +1,11 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal ** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. +** This file is part of the Qt Solutions component. ** +** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without @@ -18,10 +17,10 @@ ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -35,12 +34,14 @@ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** +** $QT_END_LICENSE$ +** ****************************************************************************/ #ifndef QTSINGLECOREAPPLICATION_H #define QTSINGLECOREAPPLICATION_H -#include +#include class QtLocalPeer; From 77b3da56dc435906008ddeb63f7bf887448f5dd3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 28 Jan 2014 04:53:26 -0500 Subject: [PATCH 143/630] Fix linker error with Qt 5 on Windows. --- focuswriter.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/focuswriter.pro b/focuswriter.pro index 506b4288..f3132721 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -45,6 +45,9 @@ macx { } else:win32 { INCLUDEPATH += enchant libzip src/enchant LIBS += ./enchant/libenchant.dll ./libzip/libzip0.dll -lOle32 + greaterThan(QT_MAJOR_VERSION, 4) { + LIBS += -lz + } HEADERS += src/enchant/dictionary.h \ src/enchant/dictionary_data.h \ From a51290ebdd3e4e5d11afc802af11cb119177ddb5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 28 Jan 2014 13:14:20 -0500 Subject: [PATCH 144/630] Prevent opening unsupported multimedia files. --- src/window.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 87183b70..50bded0f 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -409,12 +409,10 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles // Skip loading files of unsupported formats static const QStringList suffixes = QStringList() - << "abw" << "awt" << "zabw" - << "doc" << "dot" - << "docx" << "docm" << "dotx" << "dotm" - << "kwd" - << "ott" - << "wpd"; + << "abw" << "awt" << "zabw" << "doc" << "dot" << "docx" << "docm" << "dotx" << "dotm" << "kwd" << "ott" << "wpd" + << "bmp" << "dds" << "gif" << "icns" << "ico" << "jng" << "jp2" << "jpg" << "jpeg" << "jps" << "mng" << "png" << "tga" << "tif" << "tiff" << "xcf" + << "aac" << "aif" << "aifc" << "aiff" << "asf" << "au" << "flac" << "mid" << "midi" << "mod" << "mp2" << "mp3" << "m4a" << "ogg" << "s3m" << "snd" << "spx" << "wav" << "wma" + << "avi" << "m1v" << "m2ts" << "m4v" << "mkv" << "mov" << "mp4" << "mp4v" << "mpa" << "mpe" << "mpg" << "mpeg" << "mpv2" << "wm" << "wmv"; QList skip; for (int i = 0; i < files.count(); ++i) { if (suffixes.contains(QFileInfo(files.at(i)).suffix().toLower())) { From 0c3b3c149694faf39e6167d1d3a7b9f2a3ce5d26 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 28 Jan 2014 13:52:38 -0500 Subject: [PATCH 145/630] FIXED: Selected session was incorrect when switching sessions was canceled. --- src/session_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/session_manager.cpp b/src/session_manager.cpp index c3ce7bed..129baab7 100644 --- a/src/session_manager.cpp +++ b/src/session_manager.cpp @@ -140,6 +140,7 @@ void SessionManager::setCurrent(const QString& session, const QStringList& files { // Close open documents if (!closeCurrent()) { + updateList(m_session->name()); return; } From 5de440fb6479ec416aaf450a0997ea876009f917 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 11 Feb 2014 11:44:50 +0000 Subject: [PATCH 146/630] log changes --- debian/changelog | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/debian/changelog b/debian/changelog index a1140fe1..3524a39b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +focuswriter (1.4.4+git.4.0c3b3c1-1) unstable; urgency=low + + * Track upstream mainenance branch + - 0c3b3c1 FIXED: Selected session was incorrect when switching sessions + was canceled. + - a51290e Prevent opening unsupported multimedia files. + - 77b3da5 Fix linker error with Qt 5 on Windows. + - bb69d83 Update QtSingleApplication. + - cb19614 Fix compilation error with Qt 5 on Windows. + + -- Barak A. Pearlmutter Tue, 11 Feb 2014 11:44:36 +0000 + focuswriter (1.4.4+git.3.ec86fd40-1) unstable; urgency=low * Track upstream maintenance branch From 78225f01b5c33bff25c3a323a24b69708ad1e277 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 11 Feb 2014 11:51:42 +0000 Subject: [PATCH 147/630] refresh quilt patches --- debian/patches/0001-desktop-keywords.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/patches/0001-desktop-keywords.patch b/debian/patches/0001-desktop-keywords.patch index 882765ce..566867e1 100644 --- a/debian/patches/0001-desktop-keywords.patch +++ b/debian/patches/0001-desktop-keywords.patch @@ -8,10 +8,10 @@ silence lintian desktop-entry-lacks-keywords-entry 1 file changed, 1 insertion(+) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop -index 8eb0767..5493e83 100644 +index 1cc8adb..13e8c42 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop -@@ -10,3 +10,4 @@ Exec=focuswriter %F +@@ -66,3 +66,4 @@ Exec=focuswriter %F Terminal=false MimeType=application/rtf;application/vnd.oasis.opendocument.text;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; From e47f5f2889c80b261aeffa699972b0147e456287 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Feb 2014 09:21:09 -0500 Subject: [PATCH 148/630] Sync translations with Transifex. --- CREDITS | 6 + resources/unix/focuswriter.desktop | 6 + translations/focuswriter_ar.qm | Bin 16020 -> 16113 bytes translations/focuswriter_ar.ts | 262 ++-- translations/focuswriter_ca.ts | 260 ++-- translations/focuswriter_cs.ts | 260 ++-- translations/focuswriter_da.ts | 260 ++-- translations/focuswriter_de.ts | 260 ++-- translations/focuswriter_el.ts | 260 ++-- translations/focuswriter_en.ts | 260 ++-- translations/focuswriter_en_GB.ts | 260 ++-- translations/focuswriter_es.ts | 260 ++-- translations/focuswriter_es_MX.ts | 260 ++-- translations/focuswriter_fi.ts | 260 ++-- translations/focuswriter_fr.ts | 260 ++-- translations/focuswriter_he.ts | 260 ++-- translations/focuswriter_hu.ts | 260 ++-- translations/focuswriter_id.qm | Bin 23170 -> 31356 bytes translations/focuswriter_id.ts | 446 +++--- translations/focuswriter_it.ts | 260 ++-- translations/focuswriter_ja.ts | 260 ++-- translations/focuswriter_ko.ts | 260 ++-- translations/focuswriter_nl.ts | 260 ++-- translations/focuswriter_pl.ts | 260 ++-- translations/focuswriter_pt.ts | 260 ++-- translations/focuswriter_pt_BR.ts | 260 ++-- translations/focuswriter_ro.ts | 260 ++-- translations/focuswriter_ru.ts | 260 ++-- translations/focuswriter_sk.ts | 260 ++-- translations/focuswriter_sr.ts | 260 ++-- translations/focuswriter_sv.ts | 260 ++-- translations/focuswriter_tr.ts | 260 ++-- translations/focuswriter_uk.ts | 260 ++-- translations/focuswriter_vi.ts | 260 ++-- translations/focuswriter_zh_CN.qm | Bin 23150 -> 25120 bytes translations/focuswriter_zh_CN.ts | 366 ++--- translations/focuswriter_zh_TW.qm | 1 + translations/focuswriter_zh_TW.ts | 2023 ++++++++++++++++++++++++++++ 38 files changed, 6213 insertions(+), 4177 deletions(-) create mode 100644 translations/focuswriter_zh_TW.qm create mode 100644 translations/focuswriter_zh_TW.ts diff --git a/CREDITS b/CREDITS index a8649ea5..fc83bcf3 100644 --- a/CREDITS +++ b/CREDITS @@ -5,6 +5,9 @@ Developers Translations ------------ +Arabic: +* Qattef + Catalan: * Joan Queralt Gil @@ -70,6 +73,9 @@ Russian: * Dmitriy Kodanev * Сергей Миронов +Serbian: +* miroslav + Slovak: * Jan Gallik diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 1cc8adb8..4dcd5a1a 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -11,6 +11,7 @@ Name[fi]=FocusWriter Name[fr]=FocusWriter Name[he]=FocusWriter Name[hu]=FocusWriter +Name[id]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 Name[pl]=FocusWriter @@ -20,6 +21,7 @@ Name[ro]=FocusWriter Name[sr]=FocusWriter Name[tr]=FocusWriter Name[vi]=FocusWriter +Name[zh_CN]=FocusWriter GenericName=Fullscreen Word Processor GenericName[cs]=Celoobrazovkový editor textu GenericName[da]=Tekstbehandlingsprogram i fuld skærm @@ -31,6 +33,7 @@ GenericName[fi]=Koko näytön tekstinkäsittelyohjelma GenericName[fr]=Traitement de texte plein écran GenericName[he]=מעבד תמלילים במסך מלא GenericName[hu]=Teljesképernyős szövegszerkesztő +GenericName[id]=Layar Penuh GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 GenericName[pl]=Pełnoekranowy edytor tekstów @@ -40,6 +43,7 @@ GenericName[ro]=Procesor de test pe tot ecranul GenericName[sr]=Обрађивач текста у пуном екрану GenericName[tr]=Tam Ekran Kelime İşlemci GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình +GenericName[zh_CN]=全屏文本编辑器 Comment=Write without distractions Comment[cs]=Pište bez rozptylování Comment[da]=Skriv uden at blive distraheret @@ -51,6 +55,7 @@ Comment[fi]=Kirjoita ilman häiriötekijöitä Comment[fr]=Écrivez sans distractions Comment[he]=כתיבה ללא הסחות דעת Comment[hu]=Írjon zavartalanul +Comment[id]=Menulis tanpa gangguan Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 Comment[pl]=Pisz bez zakłóceń @@ -60,6 +65,7 @@ Comment[ro]=Scrieţi fără distrageri Comment[sr]=Пишите без ометања Comment[tr]=Dikkat dağıtıcılar olmadan yazın Comment[vi]=Không tạo sự xao nhãng khi viết +Comment[zh_CN]=专心致志地写作 Icon=focuswriter TryExec=focuswriter Exec=focuswriter %F diff --git a/translations/focuswriter_ar.qm b/translations/focuswriter_ar.qm index 4eabd39810a6ee243496e6d081c68878d1fe9be6..bcee94d1aa087c3db81dbcaff30f0b729e5ae59c 100644 GIT binary patch delta 1881 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 tz-Q*uBVF0ZGxJ|L`E Unable to save '%1'. - + لا يمكن حفظ '%1'. @@ -718,10 +718,10 @@ - - - - + + + + Default الافتراضي @@ -764,62 +764,62 @@ التبديل إلى - + New Session جلسة جديدة - + Clone Session - + Rename Session تسمية الجلسة مجددًا - + Question - + Delete selected session? تحذف الجلسة المحددة؟ - + Session name: اسم الجلسة: - + Sorry - + The requested session name is already in use. - + &New... جديـد... - + Ctrl+Shift+N - + &Manage... إدارة... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1401,105 +1401,105 @@ تحميـل سمـات - + Loading sounds تحميل الأصوات - + Untitled غير معنون - + Open File فتـح ملف - + About FocusWriter حـول البرنامج FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - + Opening %1 فتـح %1 - + Question - + Save changes? تحفظ التغييرات؟ - + (Untitled %1) (%1 غير معنون) @@ -1540,7 +1540,7 @@ - + Warning @@ -1555,472 +1555,472 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. لا يمكن تحمل أصوات الرقن. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (للقراءة فقط) - + &File ملـف - + &New جديـد - + &Open... فتـح - + Reloa&d تحديـث - + &Save حفـظ - + Save &As... حفظ باسم - + &Rename... التسمية مجددًا - + Save A&ll حفظ الكل - + Manage Sessions إدارة الجلسات - + New Session جلسة جديدة - + &Print... طباعة - + &Close إغلاق المستند الحالي - + &Quit إغلاق البرنامج - + Ctrl+Q Ctrl+Q - + &Edit تحريـر - + &Undo تراجـع - + &Redo استرجاع - + Cu&t قـص - + &Copy نسـخ - + &Paste لصـق - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All تحديـد الكل - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat النمـط - + &Bold سمـيك - + &Italic مائـل - + &Underline مسطر تحته - + Stri&kethrough مشـطب - + Ctrl+K Ctrl+K - + Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left محاذاة إلى اليسار - + Ctrl+{ Ctrl+{ - + Align &Center محاذاة إلى الوسط - + Ctrl+| Ctrl+| - + Align &Right محاذاة إلى اليمين - + Ctrl+} Ctrl+} - + Align &Justify ضبـط - + Ctrl+J Ctrl+J - + &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block الاتجاه من اليسار إلى اليمين - + Ri&ght to Left Block الاتجاه من اليمين إلى اليسار - + &Tools أدوات - + &Find... بحـث - + Find &Next أوجد اللاحق - + Find Pre&vious أوجد السابق - + &Replace... استبـدال... - + Ctrl+R Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 F7 - + &Timers... - + S&ymbols... - + &Settings إعـدادات - + Show &Toolbar إظهار شريط الأدوات - + Show &Menu Icons - + F&ocused Text النص المركز عليه - + &Fullscreen - + F11 F11 - + Esc Esc - + M&inimize - + Ctrl+M Ctrl+M - + &Themes... سمـات... - + &Preferences... تفضيلات... - + Focus Off دون تركيز - + Focus One Line تركيز على سطر - + Focus Three Lines تركيز على ثلاثة أسطر - + &Paragraph فقـرة - + Focus Paragraph تركيز على فقرة - + &Help مساعدة - + Application &Language... لغة التطبيق... - + Some files were unsupported and could not be opened. - + &Off دون تركيز - + One &Line تركيز على سطر - + &Three Lines تركيز على ثلاثة أسطر - + &About حـول - + About &Qt حـول "كيوتي" diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 6fae4daa..924dbcec 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Per defecte @@ -761,62 +761,62 @@ Canvia a - + New Session Sessió nova - + Clone Session Clona la sessió - + Rename Session Canvia el nom de la sessió - + Question Pregunta - + Delete selected session? Esteu segur que voleu eliminar la sessió seleccionada? - + Session name: Nom de la sessió: - + Sorry Disculpes - + The requested session name is already in use. El nom de la sessió seleccionat ja està essent utilitzat. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... Administrar - + Ctrl+Shift+M Ctrl+Maj+M @@ -1398,105 +1398,105 @@ S'estan carregant els Temes - + Loading sounds S'estan carregant els sons - + Untitled Sense títol - + Open File bre fitxer - + About FocusWriter Sobre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un processador de text senzill a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa les icones del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilitzades sota llicència <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caràcters: %L1 / %L2 - + Pages: %L1 Pàgines: %L1 - + Paragraphs: %L1 Paràgrafs: %L1 - + Words: %L1 Paraules: %L1 - + %1% of daily goal %1% de l'objectiu diari - + Opening %1 'està obrint %1 - + Question Pregunta - + Save changes? Voleu desar els canvis? - + (Untitled %1) (Sense títol %1) @@ -1537,7 +1537,7 @@ - + Warning Avís @@ -1552,472 +1552,472 @@ Voleu restaurar des de la memòria cau d'emergència? - + Some files could not be opened. No s'han pogut obrir alguns fitxers. - + Some files were opened Read-Only. S'han obert alguns fitxers en mode de Només lectura. - + Text Files (%1);;All Files (*) Fitxers de text (%1);;Tots el fitxers (*) - + '%1' is newer than the cached copy. '%1'és més nou que la còpia de la memòria cau. - + Overwrite newer file? Voleu sobreescriure el fitxer més nou? - + Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - + Please make sure that SDL_mixer is installed. Assegureu-vos que heu instal·lat SDL_mixer - + %1 (Read-Only) %1 (Només lectura) - + &File &Fitxer - + &New &Nou - + &Open... &Obre - + Reloa&d Torna a carregar - + &Save &Desa - + Save &As... Desa &com... - + &Rename... &Reanomena... - + Save A&ll Desa-ho tot - + Manage Sessions Gestiona les sessions - + New Session Nova sessió - + &Print... Im&primeix - + &Close Tan&ca - + &Quit Surt - + Ctrl+Q Ctrl+Q - + &Edit &Edita - + &Undo Desfés - + &Redo &Refés - + Cu&t Talla - + &Copy &Copia - + &Paste Enganxa - + Paste &Unformatted Enganxa sense format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccion&a tot - + Select &Scene Selecciona l'escena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold Negreta - + &Italic Itàlica - + &Underline S&ubratllat - + Stri&kethrough Ratllat - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndex - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndex - + Ctrl+_ Ctrl+_ - + Align &Left Alinea a l'esquerra - + Ctrl+{ Ctrl+{ - + Align &Center Alinea al &Centre - + Ctrl+| Ctrl+| - + Align &Right Alinea a la dreta - + Ctrl+} Ctrl+} - + Align &Justify &Justifica - + Ctrl+J Ctrl+J - + &Decrease Indent &Disminueix el sagnat - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrementa el sagnat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escriure d'esquerra a dreta - + Ri&ght to Left Block Escriure de dreta a esquerra - + &Tools Eines - + &Find... Cerca... - + Find &Next Cerca el següent - + Find Pre&vious Cerca l'anterior - + &Replace... Reemplaça - + Ctrl+R Ctrl+R - + Smart &Quotes Cometes tipogràfiques - + Update &Document Actualitza el document - + Update &Selection Actualitza la selecció - + &Spelling... Ortografia - + F7 F7 - + &Timers... &Temporitzadors - + S&ymbols... S&ímbols... - + &Settings Configuració - + Show &Toolbar Mostra la barra d'eines - + Show &Menu Icons Mostra les icones del menú - + F&ocused Text Text focalitzat - + &Fullscreen Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimitza - + Ctrl+M Ctrl+M - + &Themes... &Temes... - + &Preferences... &Preferències... - + Focus Off No focalitzis - + Focus One Line Focalitza una línia - + Focus Three Lines Focalitza tres línies - + &Paragraph &Paràgraf - + Focus Paragraph Focalitza un paràgraf - + &Help Ajuda - + Application &Language... Idioma de l'aplicació - + Some files were unsupported and could not be opened. Alguns fitxers no tenen suport i no es podran obrir - + &Off Tanca - + One &Line Una &Línia - + &Three Lines &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index f73cc9b8..f22356ee 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Výchozí @@ -761,62 +761,62 @@ Přepnout na - + New Session Nové sezení - + Clone Session Klonovat sezení - + Rename Session Přejmenovat sezení - + Question Otázka - + Delete selected session? Smazat vybrané sezení? - + Session name: Název sezení: - + Sorry Promiňte - + The requested session name is already in use. Požadovaný název sezení se již používá. - + &New... &Nové... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovat... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - + Untitled Bez názvu - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - + Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaky: %L1 / %L2 - + Pages: %L1 Strany: %L1 - + Paragraphs: %L1 Odstavce: %L1 - + Words: %L1 Slova: %L1 - + %1% of daily goal %1% z denního cíle - + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - + (Untitled %1) (Bez názvu %1) @@ -1537,7 +1537,7 @@ - + Warning Varování @@ -1552,472 +1552,472 @@ Obnovit z pohotovostní vyrovnávací paměti? - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + Text Files (%1);;All Files (*) Textové soubory (%1);;Všechny soubory (*) - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit Úp&ravy - + &Undo &Zpět - + &Redo Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... - + Some files were unsupported and could not be opened. Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 80d4198d..10b41378 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Standard @@ -760,62 +760,62 @@ Skift til - + New Session Ny session - + Clone Session Klon session - + Rename Session Omdøb session - + Question Spørgsmål - + Delete selected session? Slet valgte session? - + Session name: Navn på session: - + Sorry Beklager - + The requested session name is already in use. Der gøres allerede brug af det ønskede sessionsnavn. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Administrer - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Indlæser temaer - + Loading sounds Indlæser lyde - + Untitled Uden titel - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - + Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - + Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - + Characters: %L1 / %L2 Tegn: %L1 / %L2 - + Pages: %L1 Sider: %L1 - + Paragraphs: %L1 Afsnit: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1% af dagligt mål - + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - + (Untitled %1) (Uden titel%1) @@ -1536,7 +1536,7 @@ - + Warning Advarsel @@ -1551,472 +1551,472 @@ Gendan fra reservecache? - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + Text Files (%1);;All Files (*) Tekstfiler (%1);;Alle Filer (*) - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog - + Some files were unsupported and could not be opened. Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 8e5ba9cc..a3c9189a 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Standard @@ -760,62 +760,62 @@ Wechseln zu - + New Session Neue Sitzung - + Clone Session Sitzung duplizieren - + Rename Session Sitzung umbenennen - + Question Frage - + Delete selected session? Sitzung löschen? - + Session name: Name der Sitzung: - + Sorry Entschuldigung - + The requested session name is already in use. Die gewünschte Sitzung wird derzeit benutzt. - + &New... &Neu... - + Ctrl+Shift+N Strg+Shift+N - + &Manage... &Verwalten... - + Ctrl+Shift+M Strg+Shift+V @@ -1397,105 +1397,105 @@ Themen werden geladen - + Loading sounds Sounds werden geladen - + Untitled Unbenannt - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Einfache Vollbild Textverarbeitung - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - + Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - + Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - + Pages: %L1 Seiten: %L1 - + Paragraphs: %L1 Absätze: %L1 - + Words: %L1 Wörter: %L1 - + %1% of daily goal %1% des Tagesziels - + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - + (Untitled %1) (Unbenannt %1) @@ -1536,7 +1536,7 @@ - + Warning Warnung @@ -1551,472 +1551,472 @@ Sicherheitskopie wiederherstellen? - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + Text Files (%1);;All Files (*) Text-Dateien (%1);;Alle Dateien (*) - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. Bitte stellen Sie sicher, dass SDL_mixer installiert ist. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d Neuladen - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene Szene auswählen - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + S&ymbols... Symbole... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off Fokus Aus - + Focus One Line Fokus EIne Zeile - + Focus Three Lines Fokus Drei Zeilen - + &Paragraph &Absatz - + Focus Paragraph Fokus Absatz - + &Help &Hilfe - + Application &Language... &Sprache... - + Some files were unsupported and could not be opened. Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 0e4c3e1d..d5772fda 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Προεπιλογή @@ -760,62 +760,62 @@ Εναλλαγή Σε - + New Session Νέα Περίοδος Λειτουργίας - + Clone Session Κλωνοποίηση Περιόδου Λειτουργίας - + Rename Session Μετονομασία Περιόδου Λειτουργίας - + Question Ερώτηση - + Delete selected session? Να διαγραφή η επιλεγμένη περιόδου λειτουργίας; - + Session name: Όνομα περιόδου λειτουργίας: - + Sorry Λυπούμαστε - + The requested session name is already in use. Αυτό το όνομα χρησιμοποιείται ήδη για άλλη περίοδο λειτουργίας. - + &New... &Νέα... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Διαχείριση... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - + Untitled Χωρίς τίτλο - + Open File Άνοιγμα Αρχείου - + About FocusWriter Σχετικά με το FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης - + Copyright &copy; 2008-%1 Graeme Gott Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> - + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - + Pages: %L1 Σελίδες: %L1 - + Paragraphs: %L1 Παράγραφοι: %L1 - + Words: %L1 Λέξεις: %L1 - + %1% of daily goal %1% του ημερήσιου στόχου - + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - + (Untitled %1) (Χωρίς τίτλο %1) @@ -1536,7 +1536,7 @@ - + Warning Προειδοποίηση @@ -1551,472 +1551,472 @@ Να γίνει επαναφορά από τη μνήμη εκτάκτου ανάγκης; - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + Text Files (%1);;All Files (*) Αρχεία Κειμένου (%1);;Όλα τα αρχεία (*) - + '%1' is newer than the cached copy. Το «%1» είναι νεότερο από το αντίγραφο στη μνήμη. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d Επαναφόρτωσ&η - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + New Session Νέα Περίοδος Λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted Επικόλληση &Χωρίς Μορφοποίηση - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Επιλογή Όλ&ων - + Select &Scene Επιλογή &Σκηνής - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript &Δείκτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &Αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο Κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &Δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &Στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση Εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση Εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη Γραφή - + Ri&ght to Left Block Αριστερόστρο&φη Γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &Επόμενου - + Find Pre&vious Εύρεση &Προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα Εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση Επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + S&ymbols... Σύμ&βολα... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση Γραμμής Εργα&λείων - + Show &Menu Icons Εμφάνιση Εικονιδίων &Μενού - + F&ocused Text Εστιασμένο &Κείμενο - + &Fullscreen Πλήρης Οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off Εστίαση Ανενεργή - + Focus One Line Εστίαση Μίας Γραμμής - + Focus Three Lines Εστίαση Τριών Γραμμών - + &Paragraph &Παραγράφου - + Focus Paragraph Εστίαση Παραγράφου - + &Help &Βοήθεια - + Application &Language... &Γλώσσα Εφαρμογής... - + Some files were unsupported and could not be opened. Ορισμένα αρχεία δεν υποστηρίζονται και δεν ήταν δυνατό να ανοιχτούν. - + &Off &Απενεργοποίηση - + One &Line &Μία Γραμμή - + &Three Lines &Τρεις Γραμμές - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 270ed4a0..1d9cdade 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -714,10 +714,10 @@ - - - - + + + + Default @@ -760,62 +760,62 @@ - + New Session - + Clone Session - + Rename Session - + Question - + Delete selected session? - + Session name: - + Sorry - + The requested session name is already in use. - + &New... - + Ctrl+Shift+N - + &Manage... - + Ctrl+Shift+M @@ -1397,105 +1397,105 @@ - + Loading sounds - + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - + Opening %1 - + Question - + Save changes? - + (Untitled %1) @@ -1536,7 +1536,7 @@ - + Warning @@ -1551,472 +1551,472 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index aff5ae52..d6bebce3 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Default @@ -760,62 +760,62 @@ Switch To - + New Session New Session - + Clone Session Clone Session - + Rename Session Rename Session - + Question Question - + Delete selected session? Delete selected session? - + Session name: Session name: - + Sorry Sorry - + The requested session name is already in use. The requested session name is already in use. - + &New... &New... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Manage... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Loading themes - + Loading sounds Loading sounds - + Untitled Untitled - + Open File Open File - + About FocusWriter About FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple full-screen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> licence - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> licence - + Characters: %L1 / %L2 Characters: %L1 / %L2 - + Pages: %L1 Pages: %L1 - + Paragraphs: %L1 Paragraphs: %L1 - + Words: %L1 Words: %L1 - + %1% of daily goal %1% of daily goal - + Opening %1 Opening %1 - + Question Question - + Save changes? Save changes? - + (Untitled %1) (Untitled %1) @@ -1536,7 +1536,7 @@ - + Warning Warning @@ -1551,472 +1551,472 @@ Restore from the emergency cache? - + Some files could not be opened. Some files could not be opened. - + Some files were opened Read-Only. Some files were opened as Read-Only. - + Text Files (%1);;All Files (*) Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. '%1' is newer than the cached copy. - + Overwrite newer file? Overwrite the newer file? - + Unable to load typewriter sounds. Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. Please ensure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Read-Only) - + &File &File - + &New &New - + &Open... &Open... - + Reloa&d Reloa&d - + &Save &Save - + Save &As... Save &As... - + &Rename... &Rename... - + Save A&ll Save A&ll - + Manage Sessions Manage Sessions - + New Session New Session - + &Print... &Print... - + &Close &Close - + &Quit &Quit - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Cu&t - + &Copy &Copy - + &Paste &Paste - + Paste &Unformatted Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Select &All - + Select &Scene Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Bold - + &Italic &Italic - + &Underline &Underline - + Stri&kethrough Stri&kethough - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Align &Left - + Ctrl+{ Ctrl+{ - + Align &Center Align &Centre - + Ctrl+| Ctrl+| - + Align &Right Align &Right - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block Le&ft to Right Block - + Ri&ght to Left Block Ri&ght to Left Block - + &Tools &Tools - + &Find... &Find... - + Find &Next Find &Next - + Find Pre&vious Find Pre&vious - + &Replace... &Replace... - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Update &Document - + Update &Selection Update &Selection - + &Spelling... &Spelling... - + F7 F7 - + &Timers... &Timers... - + S&ymbols... S&ymbols... - + &Settings &Settings - + Show &Toolbar Show &Toolbar - + Show &Menu Icons Show &Menu Icons - + F&ocused Text F&ocused Text - + &Fullscreen &Full-screen - + F11 F11 - + Esc Esc - + M&inimize M&inimise - + Ctrl+M Ctrl+M - + &Themes... &Themes... - + &Preferences... &Preferences... - + Focus Off Focus Off - + Focus One Line Focus One Line - + Focus Three Lines Focus Three Lines - + &Paragraph &Paragraph - + Focus Paragraph Focus Paragraph - + &Help &Help - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. Some files are unsupported and could not be opened. - + &Off &Off - + One &Line One &Line - + &Three Lines &Three Lines - + &About &About - + About &Qt About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 8588232f..5af7b7e2 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Predeterminado @@ -760,62 +760,62 @@ Cambiar a - + New Session Nueva sesión - + Clone Session Duplicar sesión - + Rename Session Renombrar la sesión - + Question Confirmación - + Delete selected session? ¿Quiere eliminar la sesión seleccionada? - + Session name: Nombre de la sesión: - + Sorry Aviso - + The requested session name is already in use. El nombre solicitado ya está en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayús+N - + &Manage... &Gestionar... - + Ctrl+Shift+M Ctrl+Mayús+M @@ -1397,105 +1397,105 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesador de textos simple a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% del objetivo diario - + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - + (Untitled %1) (Sin título %1) @@ -1536,7 +1536,7 @@ - + Warning Advertencia @@ -1551,472 +1551,472 @@ ¿Desea restaurarlo desde la caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + Text Files (%1);;All Files (*) Archivos de texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close C&errar - + &Quit Sali&r - + Ctrl+Q Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All &Seleccionar todo - + Select &Scene Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl + K - + Sup&erscript Su&períndice - + Ctrl+^ Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block &Escribir de izquierda a derecha - + Ri&ght to Left Block Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + S&ymbols... Símb&olos… - + &Settings &Configuración - + Show &Toolbar Mo&strar barra de herramientas - + Show &Menu Icons M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help &Ayuda - + Application &Language... &Idioma de la aplicación... - + Some files were unsupported and could not be opened. Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 9eb1c715..0becf69a 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Por omisión @@ -760,62 +760,62 @@ Cambiar a - + New Session Nueva sesión - + Clone Session Duplicar sessión - + Rename Session Renombrar sesión - + Question Pregunta - + Delete selected session? ¿Borrar sesión seleccionada? - + Session name: Nombre de sesión: - + Sorry Lo siento - + The requested session name is already in use. La sesión solicitada se encuentra en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayus+N - + &Manage... &Administrar... - + Ctrl+Shift+M Ctrl+Mayus+M @@ -1397,105 +1397,105 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% de la meta diaria - + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - + (Untitled %1) (Sin título %1) @@ -1536,7 +1536,7 @@ - + Warning Advertencia @@ -1551,472 +1551,472 @@ ¿Restaurar el caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + Text Files (%1);;All Files (*) Archivos de Texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleccionar &todo - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + S&ymbols... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help A&yuda - + Application &Language... &Idioma de aplicación... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index cbfee841..0f54901f 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Oletus @@ -760,62 +760,62 @@ Siirry - + New Session Uusi istunto - + Clone Session Kopioi sessio - + Rename Session Nimeä istunto uudelleen - + Question Kysymys - + Delete selected session? Poistetaanko valittu istunto? - + Session name: Istunnon nimi: - + Sorry Pahoittelut - + The requested session name is already in use. Pyytämäsi istunnon nimi on jo käytössä. - + &New... &Uusi… - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hallinnoi… - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Ladataan teemoja - + Loading sounds Ladataan ääniä - + Untitled Nimetön - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + FocusWriter FocusWriter - + A simple fullscreen word processor Yksinkertainen koko näytön tekstinkäsittelyohjelma - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008–%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssin alaisena - + Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - + Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin alaisena - + Characters: %L1 / %L2 Merkkejä: %L1 / %L2 - + Pages: %L1 Sivuja: %L1 - + Paragraphs: %L1 Kappaleita: %L1 - + Words: %L1 Sanoja: %L1 - + %1% of daily goal %1 % päivittäisestä tavoiteesta - + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - + (Untitled %1) (Nimetön %1) @@ -1536,7 +1536,7 @@ - + Warning Varoitus @@ -1551,472 +1551,472 @@ Palautetaanko tilanne hätävälimuistista? - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin vain luku -tilassa. - + Text Files (%1);;All Files (*) Tekstitiedostot (%1);;Kaikki tiedostot (*) - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Kirjoituskoneäänien lataaminen epäonnistui. - + Please make sure that SDL_mixer is installed. Tarkista, että SDL_mixer on asennettu. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa… - + Reloa&d Lataa uu&delleen - + &Save &Tallenna - + Save &As... Tallenna &nimellä… - + &Rename... Ni&meä uudelleen… - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... Tul&osta… - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t L&eikkaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse k&aikki - + Select &Scene &Valitse kohtaus - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat M&uotoile - + &Bold Li&havointi - + &Italic Ku&rsivointi - + &Underline All&eviivaus - + Stri&kethrough Yl&iviivaus - + Ctrl+K Ctrl+K - + Sup&erscript &Yläindeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vase&mmalta oikealle - + Ri&ght to Left Block Oikea&lta vasemmalle - + &Tools T&yökalut - + &Find... &Etsi… - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa… - + Ctrl+R Ctrl+R - + Smart &Quotes Älykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus… - + F7 F7 - + &Timers... &Ajastimet… - + S&ymbols... S&ymbolit… - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalupalkki - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen Koko &näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... T&eemat… - + &Preferences... &Asetukset… - + Focus Off Kohdistus pois päältä - + Focus One Line Kohdista yksi rivi - + Focus Three Lines Kohdista kolme riviä - + &Paragraph &Kappale - + Focus Paragraph Kohdista kappale - + &Help &Ohje - + Application &Language... Sovelluksen &kieli… - + Some files were unsupported and could not be opened. Joidenkin tiedostojen tiedostomuotoja ei tueta; niiden avaaminen epäonnistui. - + &Off &Pois - + One &Line &Yksi rivi - + &Three Lines Kolme &riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 382ef3f9..ace0f3b6 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Par défaut @@ -760,62 +760,62 @@ Ouvrir la session - + New Session Nouvelle session - + Clone Session Cloner la session - + Rename Session Renommer la session - + Question Question - + Delete selected session? Effacer la session sélectionnée ? - + Session name: Nom de la session : - + Sorry Désolé - + The requested session name is already in use. Le nom demandé est déjà utilisé. - + &New... &Nouvelle... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... &Gérer... - + Ctrl+Shift+M Ctrl+Maj+M @@ -1397,105 +1397,105 @@ Chargement des thèmes - + Loading sounds Chargement des sons - + Untitled Sans titre - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un traitement de texte plein écran simple - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caractères : %L1 / %L2 - + Pages: %L1 Pages : %L1 - + Paragraphs: %L1 Paragraphes : %L1 - + Words: %L1 Mots : %L1 - + %1% of daily goal %1 % de l'objectif quotidien - + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - + (Untitled %1) (Sans titre %1) @@ -1536,7 +1536,7 @@ - + Warning Avertissement @@ -1551,472 +1551,472 @@ Récupérer les informations depuis le cache d'urgence ? - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + Text Files (%1);;All Files (*) Fichiers texte (%1);;Tous les fichiers (*) - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... - + Some files were unsupported and could not be opened. Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index df38f0dd..403479e5 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -714,10 +714,10 @@ - - - - + + + + Default ברירת מחדל @@ -760,62 +760,62 @@ החלף אל - + New Session סשן חדש - + Clone Session שיבוט סשן - + Rename Session שינוי שם סשן - + Question שאלה - + Delete selected session? למחוק סשן נבחר? - + Session name: שם סשן: - + Sorry צר לי - + The requested session name is already in use. שם הסשן המבוקש כבר מצוי בשימוש. - + &New... &חדש... - + Ctrl+Shift+N - + &Manage... &ניהול... - + Ctrl+Shift+M @@ -1397,105 +1397,105 @@ מטעין כעת מוטיבים - + Loading sounds מטעין כעת צלילים - + Untitled ללא כותרת - + Open File פתיחת קובץ - + About FocusWriter אדות ‫FocusWriter - + FocusWriter ‫FocusWriter - + A simple fullscreen word processor עורך תמלילים פשוט במסך מלא - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license בשימוש תחת הרשיון <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 תווים: %L1 / %L2 - + Pages: %L1 עמודים: %L1 - + Paragraphs: %L1 פסקאות: %L1 - + Words: %L1 מילים: %L1 - + %1% of daily goal %1% מן היעד היומי - + Opening %1 ‫‭%1‬ נפתח כעת - + Question שאלה - + Save changes? לשמור שינויים? - + (Untitled %1) (ללא כותרת %1) @@ -1536,7 +1536,7 @@ - + Warning אזהרה @@ -1551,472 +1551,472 @@ לשחזר מן מטמון חירום? - + Some files could not be opened. קבצים מסוימים לא יכלו להיפתח. - + Some files were opened Read-Only. קבצים מסוימים נפתחו לקריאה-בלבד. - + Text Files (%1);;All Files (*) קבצי תמליל (%1);;כל הקבצים (*) - + '%1' is newer than the cached copy. '%1' הינו חדש יותר מן העותק המוטמן. - + Overwrite newer file? להחליף קובץ חדש? - + Unable to load typewriter sounds. לא ניתן לטעון צלילי מכונת כתיבה. - + Please make sure that SDL_mixer is installed. נא לוודא שהרכיב SDL_mixer הינו מותקן. - + %1 (Read-Only) %1 (לקריאה-בלבד) - + &File &קובץ - + &New &חדש - + &Open... &פתיחה... - + Reloa&d &טען מחדש - + &Save &שמור - + Save &As... שמירה &בשם... - + &Rename... שי&נוי שם... - + Save A&ll שמור ה&כל - + Manage Sessions ניהול סשנים - + New Session סשן חדש - + &Print... ה&דפסה... - + &Close &סגור - + &Quit י&ציאה - + Ctrl+Q - + &Edit ע&ריכה - + &Undo בט&ל - + &Redo ב&צע שוב - + Cu&t &גזור - + &Copy הע&תק - + &Paste ה&דבק - + Paste &Unformatted הדבק בלי &עיצוב - + Ctrl+Shift+V - + Select &All בחר ה&כל - + Select &Scene בחר &מקטע - + Ctrl+Shift+A - + Fo&rmat עי&צוב - + &Bold &מודגש - + &Italic &נטוי - + &Underline &קו תחתון - + Stri&kethrough קו &חוצה - + Ctrl+K - + Sup&erscript כיתוב &עילי - + Ctrl+^ - + &Subscript כיתוב &תחתי - + Ctrl+_ - + Align &Left יישור &שמאל - + Ctrl+{ - + Align &Center יישור מ&רכז - + Ctrl+| - + Align &Right יישור &ימין - + Ctrl+} - + Align &Justify יישור מ&אוזן - + Ctrl+J - + &Decrease Indent &צמצום שוליים - + Ctrl+< - + I&ncrease Indent &גידול שוליים - + Ctrl+> - + Le&ft to Right Block בלוק שמ&אל אל ימין - + Ri&ght to Left Block בלוק י&מין אל שמאל - + &Tools &כלים - + &Find... &חיפוש... - + Find &Next מצא את ה&בא - + Find Pre&vious מצא את ה&קודם - + &Replace... &החלפה... - + Ctrl+R - + Smart &Quotes מר&כאות חכמות - + Update &Document עדכן &מסמך - + Update &Selection עדכן &בחירה - + &Spelling... &איות... - + F7 F7 - + &Timers... &שעוני עצר... - + S&ymbols... &סמלים... - + &Settings &הגדרות - + Show &Toolbar הצג &סרגל כלים - + Show &Menu Icons הצג &צלמיות תפריט - + F&ocused Text תמליל ממור&כז - + &Fullscreen &מסך מלא - + F11 F11 - + Esc Esc - + M&inimize מ&זער - + Ctrl+M - + &Themes... מו&טיבים... - + &Preferences... &העדפות... - + Focus Off כיבוי מרכוז - + Focus One Line מרכוז שורה אחת - + Focus Three Lines מרכוז שלוש שורות - + &Paragraph &פסקה - + Focus Paragraph מרכוז פסקה - + &Help &עזרה - + Application &Language... &שפת יישום... - + Some files were unsupported and could not be opened. קבצים מסוימים לא נתמכו ולא ניתן היה לפתוחם. - + &Off &כבוי - + One &Line שורה &אחת - + &Three Lines &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 8a60d8d4..1885a13d 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -713,10 +713,10 @@ - - - - + + + + Default Alapértelmezett @@ -759,62 +759,62 @@ Váltás - + New Session Új munkamenet - + Clone Session Munkamenet klónozása - + Rename Session Munkamenet átnevezése - + Question Kérdés - + Delete selected session? Töröljük a kijelölt munkamenetet? - + Session name: Munkamenet neve: - + Sorry Elnézést - + The requested session name is already in use. A megadott munkamenet-név már használatban van. - + &New... &Új... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Kezelés... - + Ctrl+Shift+M Ctri+Shift+M @@ -1396,105 +1396,105 @@ Témák betöltése - + Loading sounds Hangok betöltése - + Untitled Névtelen - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + FocusWriter FocusWriter - + A simple fullscreen word processor Egy egyszerű teljesképernyős szövegszerkesztő - + Copyright &copy; 2008-%1 Graeme Gott Szerzői jogvédelem alatt &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> licensz alatt kiadva - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> ikontémából használ ikonokat - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> licensz alatt használva - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Oldal: %L1 - + Paragraphs: %L1 Bekezdés: %L1 - + Words: %L1 Szó: %L1 - + %1% of daily goal A napi cél %1%-a - + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - + (Untitled %1) (Névtelen %1) @@ -1535,7 +1535,7 @@ - + Warning Figyelmeztetés @@ -1550,472 +1550,472 @@ Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + Text Files (%1);;All Files (*) Szövegfájlok (%1);;Minden fájl (*) - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. Kérem győződjön meg róla, hogy az SDL_mixer telepítve van. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d Újratöltés & - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted Beillesztés &Formázatlanul - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene &Jelenet kiválasztása - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + S&ymbols... &Szimbólumok - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text Fókuszált szöveg - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off Fókusz kikapcsolása - + Focus One Line Egy sor fókuszálása - + Focus Three Lines Három sor fókuszálása - + &Paragraph &Bekezdés - + Focus Paragraph Bekezdés fókuszálása - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... - + Some files were unsupported and could not be opened. Néhány fájltípus nem támogatott és nem került megnyitásra. - + &Off &Kikapcsolás - + One &Line Egy &Sor - + &Three Lines &Három sor - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_id.qm b/translations/focuswriter_id.qm index 6eb729cbebe4c5f069cac13c9b1abb5021d9a20c..b654e13774d2198f474ae5ce596f661ea5c1d9ec 100644 GIT binary patch delta 9593 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 TGHc7p-Jm>Q)5zEct;_m9mger_ diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index e0c578a9..6dfe8bf3 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -6,7 +6,7 @@ Close (%1) - + Tutup (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Hilangkan Peringatan @@ -71,22 +71,22 @@ Reload File - + Muat Ulang File Reload the file %1 from disk? - + Muat file %1? All unsaved changes will be lost. - + Semua perubahan yang tidak disimpan akan hilang. Reload - + Muat ulang @@ -96,12 +96,12 @@ Question - Pertanyaan + Pertanyaan Saving as plain text will discard all formatting. Discard formatting? - + Menyimpan sebagai teks polos akan membuang semua format. Buang format? @@ -124,42 +124,42 @@ File Changed - + File Berubah The file %1 was changed by another program. - + File %1 berubah oleh program lain. Do you want to reload the file? - + Apakah Anda ingin memuat file ini? Reload - + Muat ulang Ignore - + Abaikan File Deleted - + File Dihapus The file %1 was deleted by another program. - + File %1 dihapus oleh program lain. Do you want to save or close the file? - + Apakah Anda ingin menyimpan atau menutup file ini? @@ -187,7 +187,7 @@ Regular expressions - + RegEx @@ -202,17 +202,17 @@ &Find - + &Temukan... &Replace - + &Gantikan... Replace &All - + Gantikan &Semua @@ -375,12 +375,12 @@ Shortcuts - + Shortcuts One or more shortcuts conflict. Do you wish to proceed? - + Satu atau lebih shortcuts beradu. Apakah Anda ingin melanjutkan? @@ -451,12 +451,12 @@ Scenes - + Suasana Divider: - + Pembagi: @@ -581,17 +581,17 @@ Command - + Perintah Shortcut - + Shortcut Action - + Tindakan @@ -659,52 +659,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Down Move Scenes Up - + Naikkan Suasana Ctrl+Shift+Up - + Ctrl+Shift+Up Toggle Scene List - + Toggle List Suasana Shift+F4 - + Shift+F4 Show scene list (%1) - + Tampilkan list suasana (%1) Hide scene list (%1) - + Sembunyian list suasana (%1) Filter - + Filter Move Scenes Down - + Turunkan Suasana Resize scene list - + Ubah ukuran list suasana @@ -713,10 +713,10 @@ - - - - + + + + Default Setelan Standar @@ -759,62 +759,62 @@ Pindah Ke - + New Session Sesi Baru - + Clone Session Klon Sesi - + Rename Session Ubah Nama Sesi - + Question Pertanyaan - + Delete selected session? Hapus sesi terpilih? - + Session name: Judul sesi: - + Sorry Maaf - + The requested session name is already in use. Nama sesi sudah pernah dipakai. - + &New... &Baru... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Kelola... - + Ctrl+Shift+M Ctrl+Shift+M @@ -824,18 +824,18 @@ Clear - + Bersihkan Reset to Default - + Setelan Standar Shortcut: - + Shortcut: @@ -861,27 +861,27 @@ &Add - + &Tambahkan &Ignore - + &Abaikan I&gnore All - + Abaikan &Semua &Change - + &Ubah C&hange All - + U&bah Semua @@ -919,32 +919,32 @@ Symbols - + Simbol Recently used symbols - + Simbol baru dipakai All symbols - + Semua simbol Details - + Rincian Name: - Nama: + Nama: Insert - + Sisipkan @@ -952,12 +952,12 @@ Blocks - + Blok Scripts - + Naskah @@ -1110,52 +1110,52 @@ Spacings - + Jarak Line Spacing - + Jarak Baris Single - Tunggal + Tunggal 1.5 Lines - + 1.5 Baris Double - Ganda + Ganda Proportional - + Proporsional Paragraph Spacing - + Jarak Paragraf Indent First Line: - + Indent Baris Pertama: Pixels Above: - + Piksel Di Atas: Pixels Below: - + Piksel Di Bawah: @@ -1396,132 +1396,132 @@ Memuat tema - + Loading sounds Memuat suara - + Untitled Tanpa Judul - + Open File Buka File - + About FocusWriter Tentang FocusWriter - + FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Pengolah kata selayar penuh sederhana - + Copyright &copy; 2008-%1 Graeme Gott - + Hak Cipta &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Dirilis dalam lisensi <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Menggunakan ikon dari tema ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license - + Digunakan dalam lisensi <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Halaman: %L1 - + Paragraphs: %L1 Paragraf: %L1 - + Words: %L1 Kata: %L1 - + %1% of daily goal %1% dari target harian - + Opening %1 Membuka %1 - + Question Pertanyaan - + Save changes? Simpan perubahan? - + (Untitled %1) (Tanpa Judul %1) Switch to Next Document - + Beralih Ke Dokumen Berikutnya Switch to Previous Document - + Beralih Ke Dokumen Sebelumnya Switch to First Document - + Beralih Ke Dokumen Pertama Switch to Last Document - + Beralih Ke Dokumen Terakhir Switch to Document %1 - + Beralih Ke Dokumen %1 @@ -1535,7 +1535,7 @@ - + Warning Peringatan @@ -1550,474 +1550,474 @@ Kembalikan dari penyimpanan darurat? - + Some files could not be opened. Beberapa file tak bisa dibuka. - + Some files were opened Read-Only. Beberapa file dibuka secara Read-Only (tak bisa diedit). - + Text Files (%1);;All Files (*) File Teks (%1);;Semua File (*) - + '%1' is newer than the cached copy. '%1' lebih mutakhir daripada kopian yang tersimpan. - + Overwrite newer file? Timpa file yang lebih baru? - + Unable to load typewriter sounds. Gagal memuat suara mesin ketik. - + Please make sure that SDL_mixer is installed. - + Pastikan SDL_mixer dipasang di komputer Anda. - + %1 (Read-Only) %1 (Read-Only) - + &File &File - + &New &Baru - + &Open... &Buka... - + Reloa&d - + &Muat Ulang - + &Save &Simpan - + Save &As... Simpan &sebagai... - + &Rename... &Ubah Nama... - + Save A&ll Simpan S&emua - + Manage Sessions Kelola Sesi - + New Session Sesi Baru - + &Print... &Cetak... - + &Close &Tutup - + &Quit &Keluar - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Po%tong - + &Copy &Salin - + &Paste &Tempelkan - + Paste &Unformatted - + Paste &Tanpa Format - + Ctrl+Shift+V - + Ctrl+Shift+V - + Select &All Pilih &Semua - + Select &Scene - + Pilih &Suasana - + Ctrl+Shift+A - + Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Tebal - + &Italic &Miring - + &Underline &Garisbawah - + Stri&kethrough Gar&iscoret - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Rata &Kiri - + Ctrl+{ Ctrl+{ - + Align &Center Rata &Tengah - + Ctrl+| Ctrl+| - + Align &Right Rata &Kanan - + Ctrl+} Ctrl+} - + Align &Justify Rata &Sisi - + Ctrl+J Ctrl+J - + &Decrease Indent %Kurangi Indentasi - + Ctrl+< Ctrl+< - + I&ncrease Indent T&ambahkan Indentasi - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok Kiri ke Kanan - + Ri&ght to Left Block Bl&ok Kanan ke Kiri - + &Tools &Peralatan - + &Find... &Temukan... - + Find &Next Temukan &berikutnya - + Find Pre&vious Temukan Seb&elumnya - + &Replace... &Gantikan... - + Ctrl+R Ctrl+R - + Smart &Quotes Kutipan &Cerdas - + Update &Document Perbarui &Dokumen - + Update &Selection Perbarui &Seleksi - + &Spelling... %Ejaan... - + F7 F7 - + &Timers... &Pengatur Waktu... - + S&ymbols... - + S&imbol... - + &Settings &Pengaturan - + Show &Toolbar Tampilkan &Bilah Alat - + Show &Menu Icons Tampilkan &Ikon Menu - + F&ocused Text - + Teks Yang Difokus - + &Fullscreen &Layar Penuh - + F11 F11 - + Esc Esc - + M&inimize M&inimize - + Ctrl+M Ctrl+M - + &Themes... &Tema... - + &Preferences... &Preferensi... - + Focus Off - + Fokus Mati - + Focus One Line - + Fokus Satu Baris - + Focus Three Lines - + Fokus Tiga Baris - + &Paragraph - + &Paragraf - + Focus Paragraph - + Fokus Paragraf - + &Help &Bantuan - + Application &Language... Bahasa &Aplikasi... - + Some files were unsupported and could not be opened. - + Beberapa file tak didukung dan tak bisa dibuka. - + &Off - + &Mati - + One &Line - + Satu &Baris - + &Three Lines - + &Tiga Baris - + &About - + &Tentang - + About &Qt - + Tentang &Qt diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index ca0f5833..fbe4ba02 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Default @@ -760,62 +760,62 @@ Passa a - + New Session Nuova sessione - + Clone Session Clona sessione - + Rename Session Rinomina sessione - + Question Domanda - + Delete selected session? Eliminare sessione selezionata? - + Session name: Nome sessione: - + Sorry Spiacente - + The requested session name is already in use. Il nome di sessione richiesto è già in uso. - + &New... &New... - + Ctrl+Shift+N Ctrl + Maiusc + N - + &Manage... &Gestione... - + Ctrl+Shift+M Ctrl + Maiusc + M @@ -1397,105 +1397,105 @@ Caricamento temi - + Loading sounds Caricamento suoni - + Untitled Senza nome - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un semplice editor di testo a pieno schermo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Rilasciato sotto licenza <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilizza icone del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sotto licenza <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - + Pages: %L1 Pagine: %L1 - + Paragraphs: %L1 Paragrafi: %L1 - + Words: %L1 Parole: %L1 - + %1% of daily goal %1% dell' obiettivo giornaliero - + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - + (Untitled %1) (Senza nome %1) @@ -1536,7 +1536,7 @@ - + Warning Attenzione @@ -1551,472 +1551,472 @@ Ripristinare dalla cache di emergenza? - + Some files could not be opened. Non è stato possibile aprire alcuni file. - + Some files were opened Read-Only. Alcuni file sono stati aperti in sola lettura. - + Text Files (%1);;All Files (*) File di testo (%1);;Tutti i file (*) - + '%1' is newer than the cached copy. '%1' è più recente della copia in cache. - + Overwrite newer file? Sovrascrivere il file più recente? - + Unable to load typewriter sounds. Impossibile caricare i suoni della macchina per scrivere. - + Please make sure that SDL_mixer is installed. Accertati che SDL_mixer sia installato. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d Ricarica - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted Incolla &non formattato - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene Seleziona &scena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &Sostituisci... - + Ctrl+R Ctrl+R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... &Timer... - + S&ymbols... S&imboli - + &Settings &Impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text Testo a fuoco - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl+M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off Messa a fuoco disattivata - + Focus One Line Metti a fuoco una linea - + Focus Three Lines Metti a fuoco tre linee - + &Paragraph &Paragrafo - + Focus Paragraph Paragrafo a fuoco - + &Help &Aiuto - + Application &Language... Lingua &applicazione... - + Some files were unsupported and could not be opened. Qualche file non è supportato e non è stato aperto. - + &Off Non attivo - + One &Line Una &Linea - + &Three Lines &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 1c279135..51a0dcc0 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -713,10 +713,10 @@ - - - - + + + + Default デフォルト @@ -759,62 +759,62 @@ 切り替え - + New Session 新しいセッション - + Clone Session セッションの複製 - + Rename Session セッション名の変更 - + Question 確認 - + Delete selected session? 選択中のセッションを削除しますか? - + Session name: セッション名: - + Sorry エラー - + The requested session name is already in use. 指定したセッション名は既にあります。 - + &New... 新規 (&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理 (&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1396,105 +1396,105 @@ テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - + Untitled 無題 - + Open File 開く - + About FocusWriter FocusWriter について - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 文字数: %L1 / %L2 - + Pages: %L1 ページ数: %L1 - + Paragraphs: %L1 段落数: %L1 - + Words: %L1 単語数: %L1 - + %1% of daily goal 一日の目標の %1% - + Opening %1 %1 を開いています - + Question 確認 - + Save changes? 変更を保存しますか? - + (Untitled %1) (無題 %1) @@ -1535,7 +1535,7 @@ - + Warning 警告 @@ -1550,472 +1550,472 @@ 緊急用のキャッシュから復活させますか? - + Some files could not be opened. いくつかのファイルが開けませんでした。 - + Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - + Text Files (%1);;All Files (*) テキスト文書 (%1);;すべてのファイル (*) - + '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - + Overwrite newer file? 新しいファイルを上書きしますか? - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + %1 (Read-Only) %1 (読み込み専用) - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index fb12f0ce..bfd0113c 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -713,10 +713,10 @@ - - - - + + + + Default 기본 세션 @@ -759,62 +759,62 @@ 서로 바꾸기 - + New Session 새 세션 - + Clone Session 세션 복제 - + Rename Session 세션 이름 바꾸기 - + Question 물어볼 것이 있습니다 - + Delete selected session? 선택한 세션을 지우시겠습니까? - + Session name: 세션 이름 - + Sorry 죄송합니다. - + The requested session name is already in use. 요청하신 세션 이름은 이미 사용 중입니다. - + &New... &새로 만들기... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &관리하기... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1396,105 +1396,105 @@ 테마 불러오는 중 - + Loading sounds 소리 불러오는 중 - + Untitled 제목 없음 - + Open File 파일 열기 - + About FocusWriter 포커스 라이터 란 - + FocusWriter 포커스 라이터 - + A simple fullscreen word processor 간편한 풀스크린 워드 프로세서 - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> 라이선스에 따라 배포됩니다. - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a>의 아이콘 테마를 이용합니다. - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> 의 라이선스를 준수합니다. - + Characters: %L1 / %L2 문자: %L1 / %L2 - + Pages: %L1 페이지: %L1 - + Paragraphs: %L1 문단: % L1 - + Words: %L1 단어: %L1 - + %1% of daily goal 오늘 목표의 %1% - + Opening %1 %1 열기 - + Question 물어볼 것이 있습니다 - + Save changes? 바뀐 내용을 저장하시겠습니까? - + (Untitled %1) (제목없음 %1) @@ -1535,7 +1535,7 @@ - + Warning 알림 @@ -1550,472 +1550,472 @@ 비상 캐시를 이용해서 복구할까요? - + Some files could not be opened. 몇몇 파일들이 열리지 않습니다. - + Some files were opened Read-Only. 몇몇 파일들이 일기 전용으로 열렸습니다. - + Text Files (%1);;All Files (*) 텍스트 파일 (%1);;모든 파일 (*) - + '%1' is newer than the cached copy. '%1' 이 캐시에 복사된 것보다 새것입니다. - + Overwrite newer file? 새 파일로 덮어쓸까요? - + Unable to load typewriter sounds. 타자기 소리가 나지 않습니다. - + Please make sure that SDL_mixer is installed. SDL_mixer 이 설치되어있나 확인해 주세요 - + %1 (Read-Only) %1 (읽기 전용) - + &File &파일 - + &New &새로 만들기 - + &Open... &열기... - + Reloa&d &새로 고침 - + &Save &저장 - + Save &As... &다른 이름으로 저장... - + &Rename... &이름 바꾸기... - + Save A&ll &모두 저장하기 - + Manage Sessions 세션 관리하기 - + New Session 새 세션 - + &Print... &프린트... - + &Close &닫기 - + &Quit &끝내기 - + Ctrl+Q Ctrl+Q - + &Edit &편집 - + &Undo &뒤로 무르기 - + &Redo &다시 적용 - + Cu&t &자르기 - + &Copy &복사 - + &Paste &붙여넣기 - + Paste &Unformatted &서식을 유지한 채 붙여넣기 - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &모두 선택 - + Select &Scene &화면 선택 - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &형식 - + &Bold &볼드 - + &Italic &이탤릭 - + &Underline &밑줄 긋기 - + Stri&kethrough &가운데 줄긋기 - + Ctrl+K Ctrl+K - + Sup&erscript &위 첨자 - + Ctrl+^ Ctrl+^ - + &Subscript &아래 첨자 - + Ctrl+_ Ctrl+_ - + Align &Left &왼쪽 끝 맞춤 - + Ctrl+{ Ctrl+{ - + Align &Center &가운데 줄맞춤 - + Ctrl+| Ctrl+| - + Align &Right &오른쪽 끝 맞춤 - + Ctrl+} Ctrl+} - + Align &Justify &양끝 맞춤 - + Ctrl+J Ctrl+J - + &Decrease Indent &들여 쓰기 - + Ctrl+< Ctrl+< - + I&ncrease Indent &내어 쓰기 - + Ctrl+> Ctrl+> - + Le&ft to Right Block &왼쪽에서 오른쪽으로 쓰기 시작 - + Ri&ght to Left Block &오른쪽에서 왼쪽으로 쓰기 시작 - + &Tools &도구 - + &Find... &찾기 - + Find &Next &다음에서 찾기 - + Find Pre&vious &이전에서 찾기 - + &Replace... &바꾸기 - + Ctrl+R Ctrl+R - + Smart &Quotes &지능형 따옴표 - + Update &Document &문서에 적용 - + Update &Selection &선택한 내용 적용 - + &Spelling... &맞춤법 - + F7 F7 - + &Timers... &타이머 - + S&ymbols... &부호들... - + &Settings &설정 - + Show &Toolbar &툴바 보이기 - + Show &Menu Icons &메뉴 아이콘 보이기 - + F&ocused Text &포커스 텍스트 - + &Fullscreen &전체 화면 - + F11 F11 - + Esc Esc - + M&inimize &최소화 - + Ctrl+M Ctrl+M - + &Themes... &테마 - + &Preferences... &설정 - + Focus Off 포커스 끔 - + Focus One Line 한 줄 포커스 - + Focus Three Lines 세 줄 포커스 - + &Paragraph &문단 - + Focus Paragraph 문단 포커스 - + &Help &도움말 - + Application &Language... &프로그램 언어 설정 - + Some files were unsupported and could not be opened. 지원되지 않는 파일이 있어서 열 수 없습니다. - + &Off &사용 안함 - + One &Line &한 줄 - + &Three Lines &세 줄 - + &About &FocusWriter 소개 - + About &Qt &Qt 소개 diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 700b9e7d..f7222630 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Standaard @@ -760,62 +760,62 @@ Wissel naar - + New Session Nieuwe sessie - + Clone Session Sessie kopieren - + Rename Session Sessie hernoemen - + Question Vraag - + Delete selected session? Sessie verwijderen ? - + Session name: Sessie naam: - + Sorry Sorry - + The requested session name is already in use. De sessie naam is al in gebruik. - + &New... &Nieuw... - + Ctrl+Shift+N Crtl+Shift+N - + &Manage... &Beheren... - + Ctrl+Shift+M Ctrl+Shift+B @@ -1397,105 +1397,105 @@ Thema wordt geladen - + Loading sounds Geluiden worden geladen - + Untitled Unbenannt - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Een simpele schermvullende tekstverwerker - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - + Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - + Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - + Characters: %L1 / %L2 Tekens: %L1 / %L2 - + Pages: %L1 Pagina's: %L1 - + Paragraphs: %L1 Paragrafen: %L1 - + Words: %L1 Woorden: %L1 - + %1% of daily goal %1% van het dagdoel - + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - + (Untitled %1) (naamloos %1) @@ -1536,7 +1536,7 @@ - + Warning Waarschuwing @@ -1551,472 +1551,472 @@ Veiligheidskopie herstellen? - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + Text Files (%1);;All Files (*) Tekst-bestanden (%1);;Alle Bestanden (*) - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... - + Some files were unsupported and could not be opened. Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 82eecd27..ee7928ac 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Domyślna @@ -761,62 +761,62 @@ Przełącz na - + New Session Nowa sesja - + Clone Session Sklonuj sesję - + Rename Session Zmień nazwę sesji - + Question Pytanie - + Delete selected session? Usunąć wybraną sesję? - + Session name: Nazwa sesji: - + Sorry Przepraszam - + The requested session name is already in use. Podana nazwa sesji już jest używana. - + &New... &Nowa... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Za&rządzaj... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - + Untitled Bez tytułu - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaki: %L1 / %L2 - + Pages: %L1 Strony: %L1 - + Paragraphs: %L1 Akapity: %L1 - + Words: %L1 Słowa: %L1 - + %1% of daily goal %1% dziennego celu - + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - + (Untitled %1) (Bez tytułu %1) @@ -1537,7 +1537,7 @@ - + Warning Ostrzeżenie @@ -1552,472 +1552,472 @@ Przywrócić z bufora awaryjnego? - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + Text Files (%1);;All Files (*) Pliki tekstowe (%1);;Wszystkie pliki (*) - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... - + Some files were unsupported and could not be opened. Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 20cb05ec..866ffd4d 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Sessão predefinida @@ -760,62 +760,62 @@ Abrir a sessão - + New Session Nova sessão - + Clone Session Clonar a sessão - + Rename Session Alterar o nome da dessão - + Question Pergunta - + Delete selected session? Apagar a sessão selecionada ? - + Session name: Nome da sessão : - + Sorry Desculpe - + The requested session name is already in use. O nome entrado já está a ser utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerir... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - + Untitled Sem título - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de texto simples em ecrã completo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palávras: %L1 - + %1% of daily goal %1% do objectivo do dia - + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - + (Untitled %1) (Sem título %1) @@ -1536,7 +1536,7 @@ - + Warning Atenção @@ -1551,472 +1551,472 @@ Recuperar dados do cache de emergência? - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + Text Files (%1);;All Files (*) Ficheiros de texto (%1);;Todos os ficheiros (*) - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... - + Some files were unsupported and could not be opened. Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 3eb8a5e2..5a970a85 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Padrão @@ -760,62 +760,62 @@ Mudar para - + New Session Nova sessão - + Clone Session Clonar sessão - + Rename Session Renomear sessão - + Question Pergunta - + Delete selected session? Excluir sessão selecionada? - + Session name: Nome da sessão: - + Sorry Desculpe - + The requested session name is already in use. Este nome de sessão já está sendo utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerenciar... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Carregando temas - + Loading sounds Carregando sons - + Untitled Sem título - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palavras: %L1 - + %1% of daily goal %1% do objetivo diário - + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - + (Untitled %1) (Sem título %1) @@ -1536,7 +1536,7 @@ - + Warning Aviso @@ -1551,472 +1551,472 @@ Restaurar a partir do cache de emergência? - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + Text Files (%1);;All Files (*) Arquivos de texto (%1);;Todos os arquivos (*) - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... - + Some files were unsupported and could not be opened. Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index b6a2b41a..43d66b76 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Iniţial @@ -761,62 +761,62 @@ Comută la - + New Session Sesiune nouă - + Clone Session Clonează sesiune - + Rename Session Redenumire sesiune - + Question Întrebare - + Delete selected session? Şterge sesiunea selectată? - + Session name: Nume sesiune: - + Sorry Scuze - + The requested session name is already in use. Numele solicitat al sesiunii este deja în uz. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Gestionare... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Încărcare teme - + Loading sounds Încărcare sunete - + Untitled FărăTitlu - + Open File Deschide fişier - + About FocusWriter Despre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesor simplu de text pe tot ecranul - + Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Foloseşte iconuri din tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Folosit sub licenţă <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caractere: %L1 / %L2 - + Pages: %L1 Pagini: %L1 - + Paragraphs: %L1 Paragrafe: %L1 - + Words: %L1 Cuvinte: %L1 - + %1% of daily goal %1% din obiectiv zilnic - + Opening %1 Deschidere %1 - + Question Întrebare - + Save changes? Salvaţi modificările? - + (Untitled %1) (Fără titlu %1) @@ -1537,7 +1537,7 @@ - + Warning Avertisment @@ -1552,472 +1552,472 @@ Restaurare din memoria cache de urgenţă? - + Some files could not be opened. Unele fişiere nu au putut fi deschise. - + Some files were opened Read-Only. Unele fişiere au fost deschise în mod doar-citire. - + Text Files (%1);;All Files (*) Fişiere text (%1);;Toate fişierele (*) - + '%1' is newer than the cached copy. '%1' este mai nou decît copia din cache. - + Overwrite newer file? Suprascrie noul fişier? - + Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - + Please make sure that SDL_mixer is installed. Vă rugăm să vă asiguraţi că SDL_mixer este instalat. - + %1 (Read-Only) %1 (Doar-citire) - + &File &Fişier - + &New &Nou - + &Open... &Deschide... - + Reloa&d Reîncarcă - + &Save &Salvare - + Save &As... Salvare c&a... - + &Rename... &Redenumire... - + Save A&ll Salvează tot - + Manage Sessions Gestionare sesiuni - + New Session Sesiune nouă - + &Print... Imprimare... - + &Close Închide - + &Quit &Ieşire - + Ctrl+Q Ctrl+Q - + &Edit &Editare - + &Undo Anulează - + &Redo Reface - + Cu&t &Taie - + &Copy &Copiază - + &Paste &Lipeşte - + Paste &Unformatted Lipire neformatat - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selectează &tot - + Select &Scene Selectare &scenă - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatare - + &Bold Îngroşat - + &Italic &Italic - + &Underline S&ubliniat - + Stri&kethrough &Tăiat - + Ctrl+K Ctrl+K - + Sup&erscript Exponent - + Ctrl+^ Ctrl+^ - + &Subscript Indice - + Ctrl+_ Ctrl+_ - + Align &Left Aliniere la &stînga - + Ctrl+{ Ctrl+{ - + Align &Center Aliniere la &centru - + Ctrl+| Ctrl+| - + Align &Right Aliniere la &dreapta - + Ctrl+} Ctrl+} - + Align &Justify Aliniere stînga-dreapta - + Ctrl+J Ctrl+J - + &Decrease Indent Mărire alineat - + Ctrl+< Ctrl+< - + I&ncrease Indent Micşorare alineat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloc stînga-dreapta - + Ri&ght to Left Block Bloc dreapta-stînga - + &Tools &Unelte - + &Find... &Caută... - + Find &Next Caută &următorul - + Find Pre&vious Caută &precedent - + &Replace... Înlocuire... - + Ctrl+R Ctrl+R - + Smart &Quotes Ghilimele inteligente - + Update &Document Actualizare &document - + Update &Selection Actualizare &selecţie - + &Spelling... &Ortografie... - + F7 F7 - + &Timers... Cronometre... - + S&ymbols... S&imboluri... - + &Settings &Setări - + Show &Toolbar Arată bară de unelte - + Show &Menu Icons Arată iconuri &meniu - + F&ocused Text Text f&ocalizat - + &Fullscreen &Tot ecranul - + F11 F11 - + Esc Esc - + M&inimize M&inimizare - + Ctrl+M Ctrl+M - + &Themes... &Teme... - + &Preferences... &Preferinţe... - + Focus Off Focaliuzare oprită - + Focus One Line Focalizare o linie - + Focus Three Lines Focalizare trei linii - + &Paragraph &Paragraf - + Focus Paragraph Focalizare paragraf - + &Help &Ajutor - + Application &Language... Limbă aplicaţie... - + Some files were unsupported and could not be opened. Unele fişiere au fost nesuportate şi nu au putut fi deschide. - + &Off &Oprit - + One &Line O &linie - + &Three Lines &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 1af9bdb4..03580e92 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -715,10 +715,10 @@ - - - - + + + + Default По умолчанию @@ -761,62 +761,62 @@ Переключиться - + New Session Новый сеанс - + Clone Session Клонировать сеанс - + Rename Session Переименовать сеанс - + Question Вопрос - + Delete selected session? Удалить выбранный сеанс? - + Session name: Название сеанса: - + Sorry Извините - + The requested session name is already in use. Заданное имя сеанса уже используется. - + &New... &Новый... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Управление... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Загружаются темы - + Loading sounds Загружаются звуки - + Untitled Безымянный - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Простой полноэкранный текстовый редактор - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Символов: %L1 / %L2 - + Pages: %L1 Страниц: %L1 - + Paragraphs: %L1 Абзацев: %L1 - + Words: %L1 Слов: %L1 - + %1% of daily goal %1% от дневной задачи - + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - + (Untitled %1) (Безымянный %1) @@ -1537,7 +1537,7 @@ - + Warning Предупреждение @@ -1552,472 +1552,472 @@ Восстановить открытые файлы из резервной памяти? - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + Text Files (%1);;All Files (*) Текстовые файлы (%1);;Все файлы (*) - + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. Проверьте, установлен ли пакет SDL_mixer. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d Откр&ыть заново - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&е - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted Вставить без &форматирования - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene Выбрать &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + S&ymbols... Сим&волы... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text Подсве&тка текста - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off Отключена - + Focus One Line На одной строке - + Focus Three Lines На трёх строках - + &Paragraph &На абзаце - + Focus Paragraph На абзаце - + &Help Спр&авка - + Application &Language... &Язык приложения... - + Some files were unsupported and could not be opened. Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off &Выключено - + One &Line Одна ст&рока - + &Three Lines &Три строки - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index e1801e69..fc79db4d 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Prednastavený @@ -761,62 +761,62 @@ Prepnúť na - + New Session Nová relácia - + Clone Session Duplikovať reláciu - + Rename Session Premenovať reláciu - + Question Otázka - + Delete selected session? Vymazať vybranú reláciu? - + Session name: Názov relácie: - + Sorry Prepáčte - + The requested session name is already in use. Požadovaný názov relácie sa už používa. - + &New... &Nová... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovať... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Načítavanie tém - + Loading sounds Načítavanie zvukov - + Untitled Bez názvu - + Open File Otvoriť súbor - + About FocusWriter O programe FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - + Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaky: %L1 / %L2 - + Pages: %L1 Strany: %L1 - + Paragraphs: %L1 Odstavce: %L1 - + Words: %L1 Slová: %L1 - + %1% of daily goal %1% denného cieľa - + Opening %1 Otváranie %1 - + Question Otázka - + Save changes? Uložiť zmeny? - + (Untitled %1) (Bez názvu %1) @@ -1537,7 +1537,7 @@ - + Warning Upozornenie @@ -1552,472 +1552,472 @@ Obnoviť z vyrovnávacej pamäti. - + Some files could not be opened. Niektoré súbory nemohli byť otvorené. - + Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - + Text Files (%1);;All Files (*) Textové súbory (%1);;Všetky súbory (*) - + '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - + Overwrite newer file? Prepísať novší súbor? - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + %1 (Read-Only) %1 (Iba na čítanie) - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... - + Some files were unsupported and could not be opened. Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 948e9701..998794c4 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Подразумевано @@ -761,62 +761,62 @@ Пребаци на - + New Session Нова сесија - + Clone Session Клонирај сесију - + Rename Session Преименуј сесију - + Question Питање - + Delete selected session? Избриши одабрану сесију? - + Session name: Име сесије: - + Sorry Извините - + The requested session name is already in use. Захтевано име сесије је већ у употреби. - + &New... &Нова... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Управљај... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Учитавање тема - + Loading sounds Учитавање звука - + Untitled Без наслова - + Open File Отвори фајл - + About FocusWriter О програму FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Једноставан обрађивач текста на пуном екрану - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Реализовано под <a href=%1>GPL 3</a> лиценцом - + Uses icons from the <a href=%1>Oxygen</a> icon theme Користи иконе из <a href=%1>Oxygen</a> теме икона - + Used under the <a href=%1>LGPL 3</a> license Коришћен под <a href=%1>LGPL 3</a> лиценцом - + Characters: %L1 / %L2 Карактери: %L1 / %L2 - + Pages: %L1 Стране: %L1 - + Paragraphs: %L1 Параграфи: %L1 - + Words: %L1 Речи: %L1 - + %1% of daily goal %1% од дневног циља - + Opening %1 Oтварање %1 - + Question Питање - + Save changes? Сачувај промене? - + (Untitled %1) (Без наслова %1) @@ -1537,7 +1537,7 @@ - + Warning Упозорење @@ -1552,472 +1552,472 @@ Враћање из ургентног кеша? - + Some files could not be opened. Неки фајлови нису могли бити отворени. - + Some files were opened Read-Only. Неки фајлови су отворени само за читање. - + Text Files (%1);;All Files (*) Текстуални фајлови (%1);;Сви фајлови (*) - + '%1' is newer than the cached copy. '%1' је новије од кеширане копије. - + Overwrite newer file? Пребиши новији фајл? - + Unable to load typewriter sounds. Онемогућено учитавање звука писаће машине. - + Please make sure that SDL_mixer is installed. Молимо проверите да ли је SDL_миксер инсталиран. - + %1 (Read-Only) %1 (Само за читање) - + &File &Фајл - + &New &Нови - + &Open... &Отвори... - + Reloa&d Поно&во учитај - + &Save &Сачувај - + Save &As... Сачувај &као... - + &Rename... &Преименуј... - + Save A&ll Сачувај с&ве - + Manage Sessions Управљај сесијама - + New Session Нова сесија - + &Print... &Штампај... - + &Close &Затвори - + &Quit &Напусти - + Ctrl+Q Ctrl+Q - + &Edit &Измени - + &Undo &Опозови - + &Redo &Поново уради - + Cu&t Исе&ци - + &Copy &Копирај - + &Paste &Налепи - + Paste &Unformatted Налепи &неформатирано - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Одабери &све - + Select &Scene Одабери &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Фо&рмат - + &Bold &Подебљано - + &Italic &Искошено - + &Underline &Подвучено - + Stri&kethrough Пре&цртано - + Ctrl+K Ctrl+K - + Sup&erscript Екс&понент - + Ctrl+^ Ctrl+^ - + &Subscript &Индекс - + Ctrl+_ Ctrl+_ - + Align &Left Поравнај &лево - + Ctrl+{ Ctrl+{ - + Align &Center Поравнај &на центар - + Ctrl+| Ctrl+| - + Align &Right Поравнај &десно - + Ctrl+} Ctrl+} - + Align &Justify Поравнај &обострано - + Ctrl+J Ctrl+J - + &Decrease Indent &Смањи увлачење - + Ctrl+< Ctrl+< - + I&ncrease Indent П&овећај увлачење - + Ctrl+> Ctrl+> - + Le&ft to Right Block Ле&во на десно блок - + Ri&ght to Left Block Де&сно на лево блок - + &Tools &Алати - + &Find... &Пронађи... - + Find &Next Пронађи &следеће - + Find Pre&vious Пронађи пре&тходно - + &Replace... &Замени... - + Ctrl+R Ctrl+R - + Smart &Quotes Паметни &цитати - + Update &Document Ажурирај &документ - + Update &Selection Ажурирај &одабир - + &Spelling... &Правопис... - + F7 F7 - + &Timers... &Tајмери... - + S&ymbols... С&имболи... - + &Settings &Подешавање - + Show &Toolbar Покажи &траку алата - + Show &Menu Icons Покажи &иконе менија - + F&ocused Text Ф&окусирани текст - + &Fullscreen &Пун екран - + F11 F11 - + Esc Esc - + M&inimize M&инимизуј - + Ctrl+M Ctrl+M - + &Themes... &Tеме... - + &Preferences... &Подешавања... - + Focus Off Фокусирање искључено - + Focus One Line Фокусирање једне линије - + Focus Three Lines Фокусирање три линије - + &Paragraph &Параграф - + Focus Paragraph Фокусирај параграф - + &Help &Помоћ - + Application &Language... Језик &програма... - + Some files were unsupported and could not be opened. Неки фајлови нису подржани и не могу бити отворени. - + &Off &Искључено - + One &Line Једна &линија - + &Three Lines &Три линије - + &About &О програму - + About &Qt О &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 07c35740..acbc20a6 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -714,10 +714,10 @@ - - - - + + + + Default Standard @@ -760,62 +760,62 @@ Växla till - + New Session Ny session - + Clone Session Klona session - + Rename Session Byt namn på session - + Question Fråga - + Delete selected session? Ta bort markerad session? - + Session name: Sessionsnamn: - + Sorry Tyvärr - + The requested session name is already in use. Det begärda sessionsnamnet används redan. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hantera... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1397,105 +1397,105 @@ Läser in teman - + Loading sounds Läser in ljud - + Untitled Namnlös - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor En enkel ordbehandlare med helskärmsläge - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Släppt under licensen <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Använder ikoner från ikontemat <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Använda under licensen <a href=%1>GPL 3</a> - + Characters: %L1 / %L2 Tecken: %L1 / %L2 - + Pages: %L1 Sidor: %L1 - + Paragraphs: %L1 Stycken: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1 % av dagligt mål - + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - + (Untitled %1) (Namnlös %1) @@ -1536,7 +1536,7 @@ - + Warning Varning @@ -1551,472 +1551,472 @@ Återställ från nödcachen? - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + Text Files (%1);;All Files (*) Textfiler (%1);;Alla filer (*) - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. Se till att SDL_mixer är installerat. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d Läs in &igen - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted Klistra in &oformaterat - + Ctrl+Shift+V Ctrl+Skift+V - + Select &All Markera &allt - + Select &Scene Välj &scen - + Ctrl+Shift+A Ctrl+Skift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indrag - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&drag - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + S&ymbols... S&ymboler... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text F&okuserad text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off Fokus av - + Focus One Line Fokusera en rad - + Focus Three Lines Fokusera tre rader - + &Paragraph &Stycke - + Focus Paragraph Fokusera stycke - + &Help &Hjälp - + Application &Language... Programs&pråk... - + Some files were unsupported and could not be opened. Några filer stöds inte och kunde inte öppnas. - + &Off &Av - + One &Line En &rad - + &Three Lines &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 7b2e4c32..2ca9b502 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -713,10 +713,10 @@ - - - - + + + + Default Varsayılan @@ -759,62 +759,62 @@ Geçiş Yap - + New Session Yeni Oturum - + Clone Session Oturumu Klonla - + Rename Session Oturumu Yeniden Adlandır - + Question Soru - + Delete selected session? Seçili oturum silinsin mi? - + Session name: Oturum adı: - + Sorry Üzgünüm - + The requested session name is already in use. İstenen oturum adı zaten kullanımda. - + &New... &Yeni... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Y&önet... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1396,105 +1396,105 @@ Temalar yükleniyor - + Loading sounds Sesler yükleniyor - + Untitled Başlıksız - + Open File Dosyayı Aç - + About FocusWriter FocusWriter Hakkında - + FocusWriter FocusWriter - + A simple fullscreen word processor Basit bir tam ekran kelime işlemci - + Copyright &copy; 2008-%1 Graeme Gott Telif hakları saklıdır &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> simge temasından simgeler kullanılıyor - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>GPL 3</a> lisansı altında kullanılıyor - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Sayfa: %L1 - + Paragraphs: %L1 Paragraf: %L1 - + Words: %L1 Kelime: %L1 - + %1% of daily goal Günlük hedefin %1% bölümü - + Opening %1 %1 açılıyor - + Question Soru - + Save changes? Değişikler kaydedilsin mi? - + (Untitled %1) (Başlıksız %1) @@ -1535,7 +1535,7 @@ - + Warning Uyarı @@ -1550,472 +1550,472 @@ Acil önbellekten kurtarılsın mı? - + Some files could not be opened. Bazı dosyalar açılamadı. - + Some files were opened Read-Only. Bazı dosyalar salt okunur olarak açıldı. - + Text Files (%1);;All Files (*) Metin Dosyaları (%1);;Tüm Dosyalar (*) - + '%1' is newer than the cached copy. '%1' önbelleğe alınmış kopyadan daha yeni. - + Overwrite newer file? Daha yeni dosyanın üzerine yazılsın mı? - + Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - + Please make sure that SDL_mixer is installed. SDL_mixer'ın yüklü olduğundan emin olun. - + %1 (Read-Only) %1 (Salt Okunur) - + &File &Dosya - + &New &Yeni - + &Open... &Aç... - + Reloa&d &Yeniden Yükle - + &Save &Kaydet - + Save &As... &Farklı Kaydet... - + &Rename... Yeni &İsim Ver... - + Save A&ll &Tümünü Kaydet - + Manage Sessions Oturumları Yönet - + New Session Yeni Oturum - + &Print... Ya&zdır... - + &Close Ka&pat - + &Quit &Çık - + Ctrl+Q Ctrl+Q - + &Edit D&üzen - + &Undo &Geri Al - + &Redo &Yinele - + Cu&t &Kes - + &Copy K&opyala - + &Paste Y&apıştır - + Paste &Unformatted &Biçimlendirme Olmadan Yapıştır - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Tümünü Seç - + Select &Scene &Sahneyi Seç - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Biçim - + &Bold &Kalın - + &Italic &İtalik - + &Underline &Altı Çizili - + Stri&kethrough &Üstü Çizili - + Ctrl+K Ctrl+K - + Sup&erscript Ü&st Simge - + Ctrl+^ Ctrl+^ - + &Subscript A&lt Simge - + Ctrl+_ Ctrl+_ - + Align &Left So&la Yasla - + Ctrl+{ Ctrl+{ - + Align &Center &Ortala - + Ctrl+| Ctrl+| - + Align &Right Sa&ğa Yasla - + Ctrl+} Ctrl+} - + Align &Justify İki &Yana Yasla - + Ctrl+J Ctrl+J - + &Decrease Indent &Girintiyi Azalt - + Ctrl+< Ctrl+< - + I&ncrease Indent Gi&rintiyi Arttır - + Ctrl+> Ctrl+> - + Le&ft to Right Block S&oldan Sağa Blok - + Ri&ght to Left Block Sa&ğdan Sola Blok - + &Tools &Araçlar - + &Find... &Bul... - + Find &Next &Sonrakini Bul - + Find Pre&vious &Öncekini Bul - + &Replace... &Değiştir... - + Ctrl+R Ctrl+R - + Smart &Quotes &Akıllı Tırnaklar - + Update &Document &Dökümanı Güncelle - + Update &Selection &Seçilimi Güncelle - + &Spelling... &Yazım Denetimi... - + F7 F7 - + &Timers... &Zamanlayıcılar... - + S&ymbols... &Simgeler... - + &Settings &Ayarlar - + Show &Toolbar &Araç Çubuğunu Göster - + Show &Menu Icons &Menü Simgelerini Göster - + F&ocused Text &Odaklanılan Metin - + &Fullscreen Tam &Ekran - + F11 F11 - + Esc Esc - + M&inimize &Küçült - + Ctrl+M Ctrl+M - + &Themes... &Temalar... - + &Preferences... &Tercihler... - + Focus Off Odaklanmayı Kapat - + Focus One Line Bir Satıra Odaklan - + Focus Three Lines Üç Satıra Odaklan - + &Paragraph &Paragraf - + Focus Paragraph Paragrafa Odaklan - + &Help &Yardım - + Application &Language... &Uygulama Dili ... - + Some files were unsupported and could not be opened. Bazı dosyalar desteklenmiyor ve açılamadı. - + &Off &Kapalı - + One &Line &Bir Satır - + &Three Lines &Üç Satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 4c4264b4..6f99790d 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -715,10 +715,10 @@ - - - - + + + + Default Типово @@ -761,62 +761,62 @@ Перейти - + New Session Новий сеанс - + Clone Session Клонувати сеанс - + Rename Session Перейменувати сеанс - + Question Запит - + Delete selected session? Вилучити вибраний сеанс? - + Session name: Назва сеансу: - + Sorry На жаль - + The requested session name is already in use. Така назва сеансу вже є. - + &New... &Новий ... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Керування... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1398,105 +1398,105 @@ Завантаження тем - + Loading sounds Завантаження звуків - + Untitled Без назви - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 Символів: %L1 / %L2 - + Pages: %L1 Сторінок: %L1 - + Paragraphs: %L1 Абзаців: %L1 - + Words: %L1 Слів: %L1 - + %1% of daily goal %1% щоденного завдання - + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - + (Untitled %1) (Без назви %1) @@ -1537,7 +1537,7 @@ - + Warning @@ -1552,472 +1552,472 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + S&ymbols... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 4ecc5f73..a3e77fe2 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -713,10 +713,10 @@ - - - - + + + + Default Mặc định @@ -759,62 +759,62 @@ Chuyển sang - + New Session Phiên làm việc mới - + Clone Session Sao y phiên làm việc - + Rename Session Đổi tên phiên làm việc - + Question Câu hỏi - + Delete selected session? Xóa phiên làm việc đã được chọn? - + Session name: Tên phiên làm việc: - + Sorry Rất tiếc - + The requested session name is already in use. Tên của phiên làm việc được yêu cầu hiện đang được sử dụng. - + &New... &Tạo mới... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Quản lý... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1396,105 +1396,105 @@ Đang tải dữ liệu giao diện - + Loading sounds Đang tải dữ liệu âm thanh - + Untitled Chưa đặt tiêu đề - + Open File Mở tập tin - + About FocusWriter Dịch bởi Phan Anh - + FocusWriter FocusWriter - + A simple fullscreen word processor Một phần mềm soạn thảo văn bản toàn màn hình dạng đơn giản - + Copyright &copy; 2008-%1 Graeme Gott Bản quyền &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Phát hành dựa theo giấy phép <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Sử dụng bộ biểu tượng từ <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sử dụng dựa trên giấy phép <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Số ký tự: %L1 / %L2 - + Pages: %L1 Số trang: %L1 - + Paragraphs: %L1 Số đoạn văn: %L1 - + Words: %L1 Số từ: %L1 - + %1% of daily goal Đạt đượ %1% mục tiêu trong ngày - + Opening %1 Đang mở %1 - + Question Câu hỏi - + Save changes? Lưu các thay đổi - + (Untitled %1) (Chưa đặt tiêu đề %1) @@ -1535,7 +1535,7 @@ - + Warning Cảnh báo @@ -1550,472 +1550,472 @@ Khôi phục dữ liệu từ phần bộ nhớ đệm khẩn cấp? - + Some files could not be opened. Không thể mở một số tập tin. - + Some files were opened Read-Only. Một vài tập tin được mở dưới chế độ Chỉ Được-Đọc - + Text Files (%1);;All Files (*) Tập tin văn bản (%1);;Tất cả các tập tin (*) - + '%1' is newer than the cached copy. '%1' mới hơn bản dữ liệu được sao chép trong bộ nhớ đệm. - + Overwrite newer file? Viết đè dữ liệu lên tập tin mới hơn? - + Unable to load typewriter sounds. Không thể tải âm thanh tạo hiệu ứng gõ chữ. - + Please make sure that SDL_mixer is installed. Xin vui lòng chắc chắn rằng SDL_mixer đã được cài đặt. - + %1 (Read-Only) %1 (Chỉ được-đọc) - + &File &Tập tin - + &New &Tạo mới - + &Open... &Mở... - + Reloa&d Tải l&ại - + &Save &Lưu - + Save &As... Lưu &Dưới Dạng... - + &Rename... &Đổi tên... - + Save A&ll Lưu T&ất Cả - + Manage Sessions Quản lý phiên làm việc - + New Session Phiên làm việc mới - + &Print... &In dữ liệu... - + &Close Đ&óng lại - + &Quit Th&oát - + Ctrl+Q Ctrl+Q - + &Edit C&hỉnh sửa - + &Undo Hủ&y thao tác - + &Redo Lặ&p lại thao tác - + Cu&t Cắ&t - + &Copy S&ao chép - + &Paste D&án - + Paste &Unformatted Dán vào dữ liệu ch&ưa chỉnh sửa - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Chọn tấ&t cả - + Select &Scene Chọn c&ảnh - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Đị&nh dạng - + &Bold &In đậm - + &Italic I&n nghiêng - + &Underline &Gạch dưới - + Stri&kethrough G&ạch xuyên qua - + Ctrl+K Ctrl+K - + Sup&erscript Chữ t&rồi lên - + Ctrl+^ Ctrl+^ - + &Subscript Chữ s&ụp xuống - + Ctrl+_ Ctrl+_ - + Align &Left Canh lề b&ên trái - + Ctrl+{ Ctrl+{ - + Align &Center Canh lề c&hính giữa - + Ctrl+| Ctrl+| - + Align &Right Canh lề bên p&hải - + Ctrl+} Ctrl+} - + Align &Justify Canh lề đ&ều hai bên - + Ctrl+J Ctrl+J - + &Decrease Indent Giả&m mức lùi dòng - + Ctrl+< Ctrl+< - + I&ncrease Indent Tă&ng mức lùi dòng - + Ctrl+> Ctrl+> - + Le&ft to Right Block Khối văn bản từ tr&ái sang phải - + Ri&ght to Left Block Khối văn bản từ ph&ải sang trái - + &Tools Cô&ng cụ - + &Find... Tì&m kiếm... - + Find &Next Tìm tiế&p theo - + Find Pre&vious Tìm tr&ước đó - + &Replace... Th&ay thế... - + Ctrl+R Ctrl+R - + Smart &Quotes Trích dẫn thô&ng minh: - + Update &Document Cập nhật tà&i liệu - + Update &Selection Cập nhật v&ùng lựa chọn - + &Spelling... Kiểm tr&a lỗi chính tả... - + F7 F7 - + &Timers... B&ộ đếm thời gian - + S&ymbols... Biể&u tượng... - + &Settings Thiế&t lập - + Show &Toolbar Hiển thị th&anh công cụ - + Show &Menu Icons Hiển thị biểu tượng men&u - + F&ocused Text Tập tr&ung vào văn bản - + &Fullscreen Toàn mà&n hình - + F11 F11 - + Esc Esc - + M&inimize T&hu nhỏ - + Ctrl+M Ctrl+M - + &Themes... G&iao diện... - + &Preferences... Tùy biế&n... - + Focus Off Tắt phần tập trung - + Focus One Line Tập trung vào một dòng văn bản - + Focus Three Lines Tập trung vào ba dòng văn bản - + &Paragraph &Đoạn văn - + Focus Paragraph Tập trung vào đoạn văn - + &Help Dịch bởi P&han Anh - + Application &Language... Ngôn ngữ hiển th&ị... - + Some files were unsupported and could not be opened. Một số tập tin không được hỗ trợ nên sẽ không thể mở được. - + &Off T&ắt - + One &Line Một D&òng - + &Three Lines B&a Dòng - + &About Thô&ng tin - + About &Qt Thô&ng tin về Qt diff --git a/translations/focuswriter_zh_CN.qm b/translations/focuswriter_zh_CN.qm index aeb8aea50325958a8cdd12b7969d54fcdad5c67b..45e641609af0da93a9db678b2d8207d873d97ae0 100644 GIT binary patch delta 4901 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 delta 3311 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 dnRgr8SDK Sorry - Sorry + 抱歉 @@ -111,7 +111,7 @@ Rich Text (*.rtf) - 富文本文件 (*.rtf) + 多信息文本格式 (*.rtf) @@ -240,7 +240,7 @@ Sorry - 对不起 + 抱歉 @@ -308,12 +308,12 @@ Preferences - 偏好设置 + 首选项 General - 一般 + 常规 @@ -339,7 +339,7 @@ Sorry - 对不起 + 抱歉 @@ -421,7 +421,7 @@ Block insertion cursor - 块插入光标 + 块状光标 @@ -441,22 +441,22 @@ Double - 双引号 + 双倍行距 Single - 单引号 + 单线 Scenes - + 场景 Divider: - + 分隔符: @@ -664,7 +664,7 @@ Move Scenes Up - 向上滚屏 + 向上移动场景 @@ -674,7 +674,7 @@ Toggle Scene List - + 打开/关闭场景列表 @@ -684,12 +684,12 @@ Show scene list (%1) - + 显示场景列表(%1) Hide scene list (%1) - + 隐藏场景列表(%1) @@ -699,12 +699,12 @@ Move Scenes Down - + 向下移动场景 Resize scene list - + 调整场景列表大小 @@ -713,10 +713,10 @@ - - - - + + + + Default 默认 @@ -759,62 +759,62 @@ 切换到 - + New Session 新会话 - + Clone Session 克隆会话 - + Rename Session 重命名会话 - + Question 询问 - + Delete selected session? 删除所选会话? - + Session name: 会话名称: - + Sorry - 对不起 + 抱歉 - + The requested session name is already in use. 请求的会话名称已在使用中。 - + &New... 新建(&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理(&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -871,7 +871,7 @@ I&gnore All - 忽略全部(&G) + 忽略全部(&g) @@ -881,7 +881,7 @@ C&hange All - 更改全部(&H) + 更改全部(&h) @@ -952,12 +952,12 @@ Blocks - + Scripts - 脚本 + 文字 @@ -1115,12 +1115,12 @@ Line Spacing - 行间隔 + 行距 Single - 单引号 + 单线 @@ -1135,7 +1135,7 @@ Proportional - + 成比例 @@ -1145,17 +1145,17 @@ Indent First Line: - 首行缩进 + 首行缩进: Pixels Above: - + 段前像素数: Pixels Below: - + 段后像素数: @@ -1228,7 +1228,7 @@ Sorry - 对不起 + 抱歉 @@ -1385,7 +1385,7 @@ Unexpectedly reached end of file. - 意外地跳到了文件末尾 + 意外地跳到了文件末尾. @@ -1396,105 +1396,105 @@ 载入主题 - + Loading sounds 载入声音 - + Untitled 无标题 - + Open File 打开文件 - + About FocusWriter 关于 FocusWriter - + FocusWriter - 专心写作 + FocusWriter - + A simple fullscreen word processor 一个简洁的全屏文字处理软件 - + Copyright &copy; 2008-%1 Graeme Gott 版权 &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + 以 <a href=%1>GPL 3</a> 许可协议发布 - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + 使用 <a href=%1>Oxygen</a> 图标主题 - + Used under the <a href=%1>LGPL 3</a> license - + 遵照 <a href=%1>LGPL 3</a> 许可使用 - + Characters: %L1 / %L2 字符数:%L1 / %L2 - + Pages: %L1 页数:%L1 - + Paragraphs: %L1 段落数:%L1 - + Words: %L1 单词数:%L1 - + %1% of daily goal 每日目标的 %1% - + Opening %1 正在打开 %1 - + Question 询问 - + Save changes? 保存更改? - + (Untitled %1) (无标题 %1) @@ -1526,7 +1526,7 @@ Loading settings - 载入设置 + 加载设置中 @@ -1535,7 +1535,7 @@ - + Warning 警告 @@ -1550,472 +1550,472 @@ 从紧急缓存中还原? - + Some files could not be opened. 有些文件无法打开。 - + Some files were opened Read-Only. 一些文件以只读方式打开。 - + Text Files (%1);;All Files (*) 文本文件 (%1);;所有文件 (*) - + '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - + Overwrite newer file? 覆盖较新的文件? - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. - 请确认 SDL_mixer 已被安装 + 请确认 SDL_mixer 已被安装. - + %1 (Read-Only) %1 (只读) - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d - + 重新载入(&d) - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted - 无格式粘贴 + 无格式粘贴(&U) - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene - + 选择场景(&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block - 左至右块(&F) + 从左到右(&F) - + Ri&ght to Left Block - 右至左块 (&G) + 从右到左 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + &Timers... 定时器(&T)... - + S&ymbols... - + 符号...(&y) - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text - + 聚焦文本(&F) - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off - + 关闭聚焦 - + Focus One Line - + 聚焦一行 - + Focus Three Lines - + 聚焦三行 - + &Paragraph - + 段落(&P) - + Focus Paragraph - + 聚焦段落 - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... - + Some files were unsupported and could not be opened. - + 某些文件不受支持,不能打开。 - + &Off - + 关闭(&O) - + One &Line - + 单行(&L) - + &Three Lines - + 三行(&T) - + &About - 关于&About + 关于(&A) - + About &Qt 关于 &Qt diff --git a/translations/focuswriter_zh_TW.qm b/translations/focuswriter_zh_TW.qm new file mode 100644 index 00000000..be651eed --- /dev/null +++ b/translations/focuswriter_zh_TW.qm @@ -0,0 +1 @@ +<�d��!�`��� \ No newline at end of file diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts new file mode 100644 index 00000000..b33a02a2 --- /dev/null +++ b/translations/focuswriter_zh_TW.ts @@ -0,0 +1,2023 @@ + + + + + Alert + + + Close (%1) + + + + + Collapse + + + + + Expand + + + + + AlertLayer + + + Dismiss Alert + + + + + Ctrl+D + + + + + Document + + + + + + Sorry + + + + + Unable to save '%1'. + + + + + Save File As + + + + + + Unable to overwrite '%1'. + + + + + Rename File + + + + + Unable to rename '%1'. + + + + + Reload File + + + + + Reload the file %1 from disk? + + + + + All unsaved changes will be lost. + + + + + Reload + + + + + Plain Text (*.txt) + + + + + Question + + + + + Saving as plain text will discard all formatting. Discard formatting? + + + + + OpenDocument Text (*.odt) + + + + + Rich Text (*.rtf) + + + + + All Files (*) + + + + + DocumentWatcher + + + File Changed + + + + + The file %1 was changed by another program. + + + + + Do you want to reload the file? + + + + + Reload + + + + + Ignore + + + + + File Deleted + + + + + The file %1 was deleted by another program. + + + + + Do you want to save or close the file? + + + + + FindDialog + + + Search for: + + + + + Replace with: + + + + + Ignore case + + + + + Whole words only + + + + + Regular expressions + + + + + Search up + + + + + Search down + + + + + &Find + + + + + &Replace + + + + + Replace &All + + + + + Find + + + + + Replace + + + + + Replace %n instance(s)? + + + + + + + Question + + + + + + Sorry + + + + + + Phrase not found. + + + + + Highlighter + + + Add + + + + + Check Spelling... + + + + + (No suggestions found) + + + + + ImageButton + + + Open Image + + + + + Images(%1) + + + + + LocaleDialog + + + Select application language: + + + + + <System Language> + + + + + Note + + + + + Please restart this application for the change in language to take effect. + + + + + PreferencesDialog + + + Preferences + + + + + General + + + + + Statistics + + + + + Toolbar + + + + + Spell Checking + + + + + Select Dictionary + + + + + + Sorry + + + + + Unable to open archive. + + + + + Unable to read archive metadata. + + + + + The archive does not contain a usable dictionary. + + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + + Question + + + + + Shortcuts + + + + + One or more shortcuts conflict. Do you wish to proceed? + + + + + The dictionary "%1" already exists. Do you want to replace it? + + + + + Daily Goal + + + + + None + + + + + Minutes: + + + + + + Words: + + + + + Editing + + + + + Always vertically center + + + + + Block insertion cursor + + + + + Smooth fonts + + + + + Typewriter sounds + + + + + Smart quotes: + + + + + Double + + + + + Single + + + + + Scenes + + + + + Divider: + + + + + Saving + + + + + Automatically save changes + + + + + Remember cursor position + + + + + Contents + + + + + Word count + + + + + Page count + + + + + Paragraph count + + + + + Character count + + + + + Page Size + + + + + Characters: + + + + + Paragraphs: + + + + + Word Count Algorithm + + + + + Detect word boundaries + + + + + Divide character count by six + + + + + Style + + + + + Icons Only + + + + + Text Only + + + + + Text Alongside Icons + + + + + Text Under Icons + + + + + Text Position: + + + + + Actions + + + + + Move Up + + + + + Move Down + + + + + Add Separator + + + + + Command + + + + + Shortcut + + + + + Action + + + + + Check spelling as you type + + + + + Ignore words in UPPERCASE + + + + + Ignore words with numbers + + + + + Language + + + + + + Add + + + + + Remove + + + + + Personal Dictionary + + + + + Reader + + + + Not a supported RTF file. + + + + + Unable to open archive. + + + + + Unable to open file '%1'. + + + + + Unable to close file '%1'. + + + + + SceneList + + + Ctrl+Shift+Down + + + + + Move Scenes Up + + + + + Ctrl+Shift+Up + + + + + Toggle Scene List + + + + + Shift+F4 + + + + + Show scene list (%1) + + + + + Hide scene list (%1) + + + + + Filter + + + + + Move Scenes Down + + + + + Resize scene list + + + + + Session + + + + + + + + + Default + + + + + SessionManager + + + Manage Sessions + + + + + S&essions + + + + + New + + + + + Rename + + + + + Clone + + + + + Delete + + + + + Switch To + + + + + New Session + + + + + Clone Session + + + + + Rename Session + + + + + Question + + + + + Delete selected session? + + + + + Session name: + + + + + Sorry + + + + + The requested session name is already in use. + + + + + &New... + + + + + Ctrl+Shift+N + + + + + &Manage... + + + + + Ctrl+Shift+M + + + + + ShortcutEdit + + + Clear + + + + + Reset to Default + + + + + + Shortcut: + + + + + SmartQuote + + + Replacing quotation marks... + + + + + Please Wait + + + + + SpellChecker + + + Check Spelling + + + + + &Add + + + + + &Ignore + + + + + I&gnore All + + + + + &Change + + + + + C&hange All + + + + + Not in dictionary: + + + + + Change to: + + + + + Checking spelling... + + + + + Cancel + + + + + Please wait + + + + + Spell check complete. + + + + + SymbolsDialog + + + Symbols + + + + + Recently used symbols + + + + + All symbols + + + + + Details + + + + + Name: + + + + + Insert + + + + + SymbolsModel + + + Blocks + + + + + Scripts + + + + + Theme + + + Untitled %1 + + + + + ThemeDialog + + + Modify Theme + + + + + Name: + + + + + Background + + + + + No Image + + + + + Tiled + + + + + + Centered + + + + + + Stretched + + + + + Scaled + + + + + Zoomed + + + + + Remove + + + + + Type: + + + + + + + Color: + + + + + Image: + + + + + Foreground + + + + + Opacity + + + + + + + + pixels + + + + + Left + + + + + Right + + + + + Position + + + + + Size: + + + + + Rounding: + + + + + Margin: + + + + + Padding: + + + + + Text + + + + + Font: + + + + + Misspelled: + + + + + Spacings + + + + + Line Spacing + + + + + Single + + + + + 1.5 Lines + + + + + Double + + + + + Proportional + + + + + Paragraph Spacing + + + + + Indent First Line: + + + + + Pixels Above: + + + + + Pixels Below: + + + + + The quick brown fox jumps over the lazy dog + + + + + ThemeManager + + + Themes + + + + + Add + + + + + Modify + + + + + Remove + + + + + Import + + + + + Export + + + + + Close + + + + + Question + + + + + Remove selected theme? + + + + + Import Theme + + + + + Themes (*.fwtz *.theme) + + + + + Themes (*.fwtz) + + + + + Sorry + + + + + A theme already exists with that name. Please enter a new name: + + + + + Export Theme + + + + + Timer + + + <b>%1</b> - %2 + + + + + Question + + + + + Delete timer? + + + + + <b>Words:</b> %L1 + + + + + <b>Pages:</b> %L1 + + + + + <b>Paragraphs:</b> %L1 + + + + + <b>Characters:</b> %L1 / %L2 + + + + + Set Delay + + + + + Set Time + + + + + Delay: + + + + + Time: + + + + + HH:mm:ss + + + + + Alarm + + + + + Type: + + + + + Memo: + + + + + Edit + + + + + Delete + + + + + TimerDisplay + + + HH:mm:ss + + + + + No timers running + + + + + TimerManager + + + Timers + + + + + New + + + + + Recent + + + + + Question + + + + + Cancel editing timers? + + + + + +HH:mm:ss + + + + + %1 - %2 + + + + + Tokenizer + + + Unexpectedly reached end of file. + + + + + Window + + + Loading themes + + + + + Loading sounds + + + + + + Untitled + + + + + Open File + + + + + About FocusWriter + + + + + FocusWriter + + + + + A simple fullscreen word processor + + + + + Copyright &copy; 2008-%1 Graeme Gott + + + + + Released under the <a href=%1>GPL 3</a> license + + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + + Used under the <a href=%1>LGPL 3</a> license + + + + + + Characters: %L1 / %L2 + + + + + + Pages: %L1 + + + + + + Paragraphs: %L1 + + + + + + Words: %L1 + + + + + + %1% of daily goal + + + + + + Opening %1 + + + + + Question + + + + + Save changes? + + + + + + (Untitled %1) + + + + + Switch to Next Document + + + + + Switch to Previous Document + + + + + Switch to First Document + + + + + Switch to Last Document + + + + + Switch to Document %1 + + + + + Loading settings + + + + + Emergency cache is not writable. + + + + + + Warning + + + + + FocusWriter was not shut down cleanly. + + + + + Restore from the emergency cache? + + + + + Some files could not be opened. + + + + + Some files were opened Read-Only. + + + + + Text Files (%1);;All Files (*) + + + + + '%1' is newer than the cached copy. + + + + + Overwrite newer file? + + + + + Unable to load typewriter sounds. + + + + + Please make sure that SDL_mixer is installed. + + + + + %1 (Read-Only) + + + + + &File + + + + + &New + + + + + &Open... + + + + + Reloa&d + + + + + &Save + + + + + Save &As... + + + + + &Rename... + + + + + Save A&ll + + + + + Manage Sessions + + + + + New Session + + + + + &Print... + + + + + &Close + + + + + &Quit + + + + + Ctrl+Q + + + + + &Edit + + + + + &Undo + + + + + &Redo + + + + + Cu&t + + + + + &Copy + + + + + &Paste + + + + + Paste &Unformatted + + + + + Ctrl+Shift+V + + + + + Select &All + + + + + Select &Scene + + + + + Ctrl+Shift+A + + + + + Fo&rmat + + + + + &Bold + + + + + &Italic + + + + + &Underline + + + + + Stri&kethrough + + + + + Ctrl+K + + + + + Sup&erscript + + + + + Ctrl+^ + + + + + &Subscript + + + + + Ctrl+_ + + + + + Align &Left + + + + + Ctrl+{ + + + + + Align &Center + + + + + Ctrl+| + + + + + Align &Right + + + + + Ctrl+} + + + + + Align &Justify + + + + + Ctrl+J + + + + + &Decrease Indent + + + + + Ctrl+< + + + + + I&ncrease Indent + + + + + Ctrl+> + + + + + Le&ft to Right Block + + + + + Ri&ght to Left Block + + + + + &Tools + + + + + &Find... + + + + + Find &Next + + + + + Find Pre&vious + + + + + &Replace... + + + + + Ctrl+R + + + + + Smart &Quotes + + + + + Update &Document + + + + + Update &Selection + + + + + &Spelling... + + + + + F7 + + + + + &Timers... + + + + + S&ymbols... + + + + + &Settings + + + + + Show &Toolbar + + + + + Show &Menu Icons + + + + + F&ocused Text + + + + + &Fullscreen + + + + + F11 + + + + + Esc + + + + + M&inimize + + + + + Ctrl+M + + + + + &Themes... + + + + + &Preferences... + + + + + Focus Off + + + + + Focus One Line + + + + + Focus Three Lines + + + + + &Paragraph + + + + + Focus Paragraph + + + + + &Help + + + + + Application &Language... + + + + + Some files were unsupported and could not be opened. + + + + + &Off + + + + + One &Line + + + + + &Three Lines + + + + + &About + + + + + About &Qt + + + + From 70ddae72bf8d8b93427dc50fd5960db683f0eb07 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 27 Feb 2014 14:31:59 -0500 Subject: [PATCH 149/630] FIXED: Paragraphs not always focused properly when merged. --- src/document.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/document.cpp b/src/document.cpp index 64246fcc..24036bff 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -755,10 +755,12 @@ void Document::setFocusMode(int focus_mode) if (m_focus_mode) { connect(m_text, SIGNAL(cursorPositionChanged()), this, SLOT(focusText())); connect(m_text, SIGNAL(selectionChanged()), this, SLOT(focusText())); + connect(m_text, SIGNAL(textChanged()), this, SLOT(focusText())); focusText(); } else { disconnect(m_text, SIGNAL(cursorPositionChanged()), this, SLOT(focusText())); disconnect(m_text, SIGNAL(selectionChanged()), this, SLOT(focusText())); + disconnect(m_text, SIGNAL(textChanged()), this, SLOT(focusText())); m_text->setExtraSelections(QList()); } } From 47cd508b01d5401aa540b6d3f0e72f1927dc76f5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 15 Mar 2014 10:23:52 -0400 Subject: [PATCH 150/630] FIXED: Regular expression searches did not ignore whole words option. --- src/find_dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/find_dialog.cpp b/src/find_dialog.cpp index 0f989bd8..e0e4f404 100644 --- a/src/find_dialog.cpp +++ b/src/find_dialog.cpp @@ -307,7 +307,7 @@ void FindDialog::find(bool backwards) if (!m_ignore_case->isChecked()) { flags |= QTextDocument::FindCaseSensitively; } - if (m_whole_words->isChecked()) { + if (m_whole_words->isChecked() && !m_regular_expressions->isChecked()) { flags |= QTextDocument::FindWholeWords; } if (backwards) { From 56edf898e39ae9bc64eb906eed702003083aca9c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 19 Mar 2014 05:24:59 -0400 Subject: [PATCH 151/630] FIXED: Closing last empty document increased untitled count. --- src/document.cpp | 8 ++++++++ src/document.h | 1 + src/stack.cpp | 2 +- src/window.cpp | 12 ++++++------ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 24036bff..cd7fb6fc 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -454,6 +454,14 @@ void Document::reload(bool prompt) //----------------------------------------------------------------------------- +void Document::close() +{ + clearIndex(); + deleteLater(); +} + +//----------------------------------------------------------------------------- + void Document::checkSpelling() { SpellChecker::checkDocument(m_text, m_dictionary); diff --git a/src/document.h b/src/document.h index ab9396ac..fed40dbe 100644 --- a/src/document.h +++ b/src/document.h @@ -65,6 +65,7 @@ class Document : public QWidget bool saveAs(); bool rename(); void reload(bool prompt = true); + void close(); void checkSpelling(); void print(); bool loadFile(const QString& filename, int position); diff --git a/src/stack.cpp b/src/stack.cpp index 18b783c8..bd35031c 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -247,7 +247,7 @@ void Stack::removeDocument(int index) Document* document = m_documents.takeAt(index); m_contents->removeWidget(document); emit documentRemoved(document); - document->deleteLater(); + document->close(); updateMapping(); } diff --git a/src/window.cpp b/src/window.cpp index 50bded0f..e4c63849 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -735,11 +735,11 @@ void Window::closeDocument() return; } - if (m_documents->count() == 1) { - newDocument(); - } m_documents->removeDocument(index); m_tabs->removeTab(index); + if (m_documents->count() == 0) { + newDocument(); + } } //----------------------------------------------------------------------------- @@ -757,11 +757,11 @@ void Window::closeDocument(Document* document) return; } - if (m_documents->count() == 1) { - newDocument(); - } m_documents->removeDocument(index); m_tabs->removeTab(index); + if (m_documents->count() == 0) { + newDocument(); + } } //----------------------------------------------------------------------------- From 3082122c69ae38fa1114eea7ae1944955664e8c4 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 20 Mar 2014 13:59:03 +0000 Subject: [PATCH 152/630] log changes --- debian/changelog | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 3524a39b..a339efe5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,16 @@ +focuswriter (1.4.4+git.5.56edf89-1) unstable; urgency=medium + + * Track upstream maintenance branch + - e47f5f2 Sync translations with Transifex. + - 70ddae7 FIXED: Paragraphs not always focused properly when merged. + - 47cd508 FIXED: Regexp searches did not ignore whole words option. + - 56edf89 FIXED: Closing last empty document increased untitled count. + + -- Barak A. Pearlmutter Thu, 20 Mar 2014 14:03:57 +0000 + focuswriter (1.4.4+git.4.0c3b3c1-1) unstable; urgency=low - * Track upstream mainenance branch + * Track upstream maintenance branch - 0c3b3c1 FIXED: Selected session was incorrect when switching sessions was canceled. - a51290e Prevent opening unsupported multimedia files. From 470afbfa5a9dd94702fb5cd0f20285adca3c433b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 07:46:16 -0400 Subject: [PATCH 153/630] FIXED: Second instance would not open relative paths. --- src/main.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 47a9520d..a5d1963e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -194,8 +194,5 @@ int main(int argc, char** argv) return 0; } - // Browse to documents after command-line specified documents have been loaded - QDir::setCurrent(QSettings().value("Save/Location", QDir::homePath()).toString()); - return app.exec(); } From 3080967a319ed2f99d77a35d7c85114c1ff2997f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 07:53:35 -0400 Subject: [PATCH 154/630] FIXED: Symbols dialog had help titlebar icon. --- src/symbols_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/symbols_dialog.cpp b/src/symbols_dialog.cpp index b44b2db4..57632d89 100644 --- a/src/symbols_dialog.cpp +++ b/src/symbols_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012 Graeme Gott + * Copyright (C) 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -91,7 +91,7 @@ void SymbolsDialog::ElideLabel::paintEvent(QPaintEvent* event) //----------------------------------------------------------------------------- SymbolsDialog::SymbolsDialog(QWidget* parent) : - QDialog(parent) + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) { setWindowTitle(tr("Symbols")); From 9bda9c03538c59d4a5270a58161ca0e67261e6ff Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 07:59:21 -0400 Subject: [PATCH 155/630] FIXED: Locale dialog always prompted users of System Language to restart. --- src/locale_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index d2f84192..df16bf6b 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012, 2013 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ LocaleDialog::LocaleDialog(QWidget* parent) : QLabel* text = new QLabel(tr("Select application language:"), this); m_translations = new QComboBox(this); - m_translations->addItem(tr("")); + m_translations->addItem(tr(""), ""); QString translation; QStringList translations = findTranslations(); foreach (translation, translations) { From f1adc3ae87ebf3437531b2c8459bcccf72c13149 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 08:39:08 -0400 Subject: [PATCH 156/630] FIXED: Discarding a modified file did not reduce daily goal progress. --- src/document.cpp | 6 +++++- src/document.h | 8 +++++++- src/window.cpp | 3 ++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index cd7fb6fc..a1488b07 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -204,6 +204,7 @@ Document::Document(const QString& filename, int& current_wordcount, int& current m_scene_list(0), m_cached_block_count(-1), m_cached_current_block(-1), + m_saved_wordcount(0), m_page_type(0), m_page_amount(0), m_accurate_wordcount(true), @@ -349,6 +350,8 @@ bool Document::save() return false; } + m_saved_wordcount = m_document_stats.wordCount(); + m_text->document()->setModified(false); return true; } @@ -596,6 +599,7 @@ bool Document::loadFile(const QString& filename, int position) // Update details m_cached_stats.clear(); calculateWordCount(); + m_saved_wordcount = m_document_stats.wordCount(); if (enabled) { m_highlighter->setEnabled(true); } diff --git a/src/document.h b/src/document.h index fed40dbe..c9e200bc 100644 --- a/src/document.h +++ b/src/document.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -57,6 +57,7 @@ class Document : public QWidget int pageCount() const; int paragraphCount() const; int wordCount() const; + int wordCountDelta() const; SceneModel* sceneModel() const; QTextEdit* text() const; @@ -156,6 +157,7 @@ private slots: Stats m_cached_stats; int m_cached_block_count; int m_cached_current_block; + int m_saved_wordcount; int m_page_type; float m_page_amount; @@ -206,6 +208,10 @@ inline int Document::wordCount() const { return m_stats->wordCount(); } +inline int Document::wordCountDelta() const { + return m_document_stats.wordCount() - m_saved_wordcount; +} + inline SceneModel* Document::sceneModel() const { return m_scene_model; } diff --git a/src/window.cpp b/src/window.cpp index e4c63849..a6c9c61b 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1148,6 +1148,7 @@ bool Window::saveDocument(int index) return document->save(); case QMessageBox::Discard: document->text()->document()->setModified(false); + m_current_wordcount -= document->wordCountDelta(); return true; case QMessageBox::Cancel: default: From 4e7a15ca9f39d1cef5a4f6d6d951a27c7224dc5d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 08:48:10 -0400 Subject: [PATCH 157/630] FIXED: Unable to overwrite current document. --- src/document.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/document.cpp b/src/document.cpp index a1488b07..852d9423 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -365,6 +365,9 @@ bool Document::saveAs() if (filename.isEmpty()) { return false; } + if (m_filename == filename) { + return save(); + } // Save file as new name if (QFile::exists(filename) && (DocumentWatcher::instance()->isWatching(filename) || !QFile::remove(filename))) { From 7d7222782dc80530ba4486cd1fefefc555405b32 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 10:17:46 -0400 Subject: [PATCH 158/630] FIXED: Reloading a modified file did not reduce daily goal progress. --- src/document.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/document.cpp b/src/document.cpp index 852d9423..96c1a792 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -454,6 +454,8 @@ void Document::reload(bool prompt) m_text->setReadOnly(true); disconnect(m_text->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(updateWordCount(int,int,int))); disconnect(m_text->document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded())); + m_current_wordcount -= wordCountDelta(); + emit changed(); loadFile(m_filename, -1); emit loadFinished(); } From d163e86849de5693a278ca7c0198003ac89dbb05 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 22 Mar 2014 15:18:57 -0400 Subject: [PATCH 159/630] FIXED: Created a new tab for corrupted documents. --- src/document.cpp | 1 + src/window.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 96c1a792..8acfd590 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -580,6 +580,7 @@ bool Document::loadFile(const QString& filename, int position) if (!loaded) { emit alert(new Alert(Alert::Warning, error, QStringList(filename), false)); + findIndex(); } } document->setUndoRedoEnabled(true); diff --git a/src/window.cpp b/src/window.cpp index a6c9c61b..18c11bac 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -439,7 +439,7 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles int current_index = -1; if (m_documents->count()) { current_index = m_documents->currentIndex(); - Document* document = m_documents->count() ? m_documents->currentDocument() : 0; + Document* document = m_documents->currentDocument(); if (document->untitledIndex() && !document->text()->document()->isModified()) { untitled_index = m_documents->currentIndex(); } @@ -447,6 +447,7 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles // Read files QStringList missing; + QStringList errors; QStringList readonly; int open_files = m_documents->count(); for (int i = 0; i < files.count(); ++i) { @@ -461,7 +462,7 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles } else if (!files.at(i).isEmpty() && (m_documents->currentDocument()->untitledIndex() > 0)) { // Track if unable to read file int index = m_documents->currentIndex(); - missing.append(QDir::toNativeSeparators(files.at(i))); + errors.append(QDir::toNativeSeparators(files.at(i))); m_documents->removeDocument(index); m_tabs->removeTab(index); } else if (m_documents->currentDocument()->isReadOnly() && (m_documents->count() > open_files)) { @@ -483,8 +484,8 @@ void Window::addDocuments(const QStringList& files, const QStringList& datafiles } else if (m_documents->currentIndex() == current_index) { m_tabs->setCurrentIndex(m_tabs->count() - 1); } - } else { - // Replace current tab if it is untitled and unmodified + // Replace current tab if it is untitled and unmodified + } else if (files.count() > (missing.count() + errors.count())) { m_tabs->setCurrentIndex(untitled_index); closeDocument(); } From bff55ac1eb9b8026f578855cb16cc333ea6974bc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 23 Mar 2014 05:14:10 -0400 Subject: [PATCH 160/630] FIXED: Did not recreate default theme until program restart. --- src/theme_manager.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/theme_manager.cpp b/src/theme_manager.cpp index 66db6d98..3704ede7 100644 --- a/src/theme_manager.cpp +++ b/src/theme_manager.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2012 Graeme Gott + * Copyright (C) 2009, 2010, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ #include "theme_manager.h" #include "gzip.h" +#include "session.h" #include "theme.h" #include "theme_dialog.h" @@ -184,6 +185,13 @@ void ThemeManager::removeTheme() QFile::remove(Theme::iconPath(item->text())); delete item; item = 0; + + // Create default theme if all themes are removed + if (m_themes->count() == 0) { + Theme theme; + theme.setName(Session::tr("Default")); + addItem(theme.name()); + } } } From 7d95657665506d2369ee137d7a42175420b83597 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 23 Mar 2014 14:40:51 -0400 Subject: [PATCH 161/630] FIXED: Could delete all themes. --- src/theme_manager.cpp | 10 ++++++---- src/theme_manager.h | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/theme_manager.cpp b/src/theme_manager.cpp index 3704ede7..4fc92869 100644 --- a/src/theme_manager.cpp +++ b/src/theme_manager.cpp @@ -78,9 +78,9 @@ ThemeManager::ThemeManager(QSettings& settings, QWidget* parent) edit_button->setAutoDefault(false); connect(edit_button, SIGNAL(clicked()), this, SLOT(modifyTheme())); - QPushButton* remove_button = new QPushButton(tr("Remove"), this); - remove_button->setAutoDefault(false); - connect(remove_button, SIGNAL(clicked()), this, SLOT(removeTheme())); + m_remove_button = new QPushButton(tr("Remove"), this); + m_remove_button->setAutoDefault(false); + connect(m_remove_button, SIGNAL(clicked()), this, SLOT(removeTheme())); QPushButton* import_button = new QPushButton(tr("Import"), this); import_button->setAutoDefault(false); @@ -99,7 +99,7 @@ ThemeManager::ThemeManager(QSettings& settings, QWidget* parent) buttons_layout->setMargin(0); buttons_layout->addWidget(add_button); buttons_layout->addWidget(edit_button); - buttons_layout->addWidget(remove_button); + buttons_layout->addWidget(m_remove_button); buttons_layout->addSpacing(import_button->sizeHint().height()); buttons_layout->addWidget(import_button); buttons_layout->addWidget(export_button); @@ -141,6 +141,7 @@ void ThemeManager::addTheme() name = theme.name(); } addItem(name); + m_remove_button->setEnabled(true); } //----------------------------------------------------------------------------- @@ -191,6 +192,7 @@ void ThemeManager::removeTheme() Theme theme; theme.setName(Session::tr("Default")); addItem(theme.name()); + m_remove_button->setDisabled(true); } } } diff --git a/src/theme_manager.h b/src/theme_manager.h index 6c0e2711..106fbcb0 100644 --- a/src/theme_manager.h +++ b/src/theme_manager.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010 Graeme Gott + * Copyright (C) 2009, 2010, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,6 +54,7 @@ private slots: private: QListWidget* m_themes; QSettings& m_settings; + QPushButton* m_remove_button; }; #endif From ce3e44e377a38a63720939c80e9f526442645dc7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 23 Mar 2014 15:59:17 -0400 Subject: [PATCH 162/630] FIXED: Context menu key did not show spelling menu. --- src/highlighter.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/highlighter.cpp b/src/highlighter.cpp index 8db0e75d..2d27cda2 100644 --- a/src/highlighter.cpp +++ b/src/highlighter.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,6 +47,7 @@ Highlighter::Highlighter(QTextEdit* text, Dictionary& dictionary) m_spell_timer->setSingleShot(true); connect(m_spell_timer, SIGNAL(timeout()), this, SLOT(updateSpelling())); + m_text->installEventFilter(this); m_text->viewport()->installEventFilter(this); m_add_action = new QAction(tr("Add"), this); m_check_action = new QAction(tr("Check Spelling..."), this); @@ -82,7 +83,7 @@ void Highlighter::setMisspelledColor(const QColor& color) bool Highlighter::eventFilter(QObject* watched, QEvent* event) { - if (watched != m_text->viewport() || event->type() != QEvent::ContextMenu || !m_enabled || m_text->isReadOnly()) { + if (event->type() != QEvent::ContextMenu || !m_enabled || m_text->isReadOnly()) { return QSyntaxHighlighter::eventFilter(watched, event); } else { // Check spelling of text block under mouse @@ -111,7 +112,9 @@ bool Highlighter::eventFilter(QObject* watched, QEvent* event) m_cursor.setPosition(word.position() + block.position()); m_cursor.setPosition(m_cursor.position() + word.length(), QTextCursor::KeepAnchor); m_word = m_cursor.selectedText(); + m_text->blockSignals(true); m_text->setTextCursor(m_cursor); + m_text->blockSignals(false); // List suggestions in context menu QMenu* menu = new QMenu; From c59bf51991cd7dc4403228ad0fe67f03963f6a15 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 07:12:58 -0400 Subject: [PATCH 163/630] FIXED: Interpreted images in RTF files as text. --- src/rtf/reader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rtf/reader.cpp b/src/rtf/reader.cpp index 049b3628..b3133705 100644 --- a/src/rtf/reader.cpp +++ b/src/rtf/reader.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2014 Graeme Gott * * Derived in part from KWord's rtfimport.cpp * Copyright (C) 2001 Ewald Snel @@ -163,6 +163,7 @@ RTF::Reader::Reader() functions["fonttbl"] = Function(&Reader::ignoreText); functions["stylesheet"] = Function(&Reader::ignoreGroup); functions["info"] = Function(&Reader::ignoreGroup); + functions["pict"] = Function(&Reader::ignoreGroup); functions["*"] = Function(&Reader::ignoreGroup); } From 56cfb56913337e94383a32e165e84e2607c5f59a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 10:23:03 -0400 Subject: [PATCH 164/630] Add support for more RTF mimetypes. --- src/document.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/document.cpp b/src/document.cpp index 8acfd590..77fea37b 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -111,7 +111,10 @@ namespace QMimeData* TextEdit::createMimeDataFromSelection() const { QMimeData* mime = QTextEdit::createMimeDataFromSelection(); - mime->setData(QLatin1String("text/rtf"), mimeToRtf(mime)); + QByteArray rtf = mimeToRtf(mime); + mime->setData(QLatin1String("text/rtf"), rtf); + mime->setData(QLatin1String("text/richtext"), rtf); + mime->setData(QLatin1String("application/rtf"), rtf); return mime; } @@ -125,6 +128,12 @@ namespace QByteArray richtext; if (source->hasFormat(QLatin1String("text/rtf"))) { richtext = source->data(QLatin1String("text/rtf")); + } else if (source->hasFormat(QLatin1String("text/richtext"))) { + richtext = source->data(QLatin1String("text/richtext")); + } else if (source->hasFormat(QLatin1String("application/rtf"))) { + richtext = source->data(QLatin1String("application/rtf")); + } else if (source->hasFormat(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\""))) { + richtext = source->data(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\"")); } else if (source->hasHtml()) { richtext = mimeToRtf(source); } else { From 6b149bc7dadc9ab8e34e2f7d8c171106f2413634 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 10:23:49 -0400 Subject: [PATCH 165/630] Require Qt 5.2 on the Mac for clipboard handling. --- focuswriter.pro | 22 +++++++++++++++------- src/application.cpp | 18 ++++++++---------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index f3132721..79df603b 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -1,11 +1,17 @@ lessThan(QT_VERSION, 4.6) { error("FocusWriter requires Qt 4.6 or greater") } +macx:greaterThan(QT_MAJOR_VERSION, 4):lessThan(QT_VERSION, 5.2) { + error("FocusWriter requires Qt 5.2 or greater") +} TEMPLATE = app QT += network greaterThan(QT_MAJOR_VERSION, 4) { - QT += widgets printsupport + QT += widgets printsupport multimedia + macx { + QT += macextras + } } CONFIG += warn_on macx { @@ -26,25 +32,25 @@ unix: !macx { } macx { + DEFINES += RTFCLIPBOARD + INCLUDEPATH += src/nsspellchecker /Library/Frameworks/libzip.framework/Headers LIBS += -framework libzip -framework AppKit HEADERS += src/nsspellchecker/dictionary.h \ src/nsspellchecker/dictionary_data.h \ - src/nsspellchecker/dictionary_manager.h + src/nsspellchecker/dictionary_manager.h \ + src/rtf/clipboard_mac.h OBJECTIVE_SOURCES += src/nsspellchecker/dictionary.mm \ src/nsspellchecker/dictionary_data.mm \ src/nsspellchecker/dictionary_manager.mm \ src/nssound/sound.mm - lessThan(QT_MAJOR_VERSION, 5) { - HEADERS += src/rtf/clipboard_mac.h - SOURCES += src/rtf/clipboard_mac.cpp - } + SOURCES += src/rtf/clipboard_mac.cpp } else:win32 { INCLUDEPATH += enchant libzip src/enchant - LIBS += ./enchant/libenchant.dll ./libzip/libzip0.dll -lOle32 + LIBS += ./enchant/libenchant.dll ./libzip/libzip0.dll greaterThan(QT_MAJOR_VERSION, 4) { LIBS += -lz } @@ -59,6 +65,8 @@ macx { src/qsound/sound.cpp lessThan(QT_MAJOR_VERSION, 5) { + DEFINES += RTFCLIPBOARD + LIBS += -lOle32 HEADERS += src/rtf/clipboard_windows.h SOURCES += src/rtf/clipboard_windows.cpp } diff --git a/src/application.cpp b/src/application.cpp index 790ac324..7cedf616 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -24,13 +24,13 @@ #include #include -#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) -#ifdef Q_OS_MAC -#include "rtf/clipboard_mac.h" -#endif -#ifdef Q_OS_WIN32 -#include "rtf/clipboard_windows.h" -#endif +#ifdef RTFCLIPBOARD + #ifdef Q_OS_MAC + #include "clipboard_mac.h" + #endif + #ifdef Q_OS_WIN + #include "clipboard_windows.h" + #endif #endif //----------------------------------------------------------------------------- @@ -65,10 +65,8 @@ Application::Application(int& argc, char** argv) : setAttribute(Qt::AA_DontShowIconsInMenus, true); #endif -#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) -# if defined(Q_OS_MAC) || defined(Q_OS_WIN32) +#ifdef RTFCLIPBOARD new RTF::Clipboard; -#endif #endif qputenv("UNICODEMAP_JP", "cp932"); From 7dd204703eacf6d8b2b31105d5cb61464edaafa3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 12:44:59 -0400 Subject: [PATCH 166/630] FIXED: Regular expression replaces did not ignore whole words option. --- src/find_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/find_dialog.cpp b/src/find_dialog.cpp index e0e4f404..b6ebb543 100644 --- a/src/find_dialog.cpp +++ b/src/find_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -226,7 +226,7 @@ void FindDialog::replaceAll() if (!m_ignore_case->isChecked()) { flags |= QTextDocument::FindCaseSensitively; } - if (m_whole_words->isChecked()) { + if (m_whole_words->isChecked() && !m_regular_expressions->isChecked()) { flags |= QTextDocument::FindWholeWords; } From 5f60d33ab94b35acf2cddda36b29691b4769f77b Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 24 Mar 2014 19:11:23 +0000 Subject: [PATCH 167/630] log changes --- debian/changelog | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/debian/changelog b/debian/changelog index a339efe5..125f61ac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,27 @@ +focuswriter (1.4.4+git.6.7dd2047-1) unstable; urgency=medium + + * Track upstream maintenance branch + - 470afbf FIXED: Second instance would not open relative paths. + - 3080967 FIXED: Symbols dialog had help titlebar icon. + - 9bda9c0 FIXED: Locale dialog always prompted users of System Language to + restart. + - f1adc3a FIXED: Discarding a modified file did not reduce daily goal + progress. + - 4e7a15c FIXED: Unable to overwrite current document. + - 7d72227 FIXED: Reloading a modified file did not reduce daily goal + progress. + - d163e86 FIXED: Created a new tab for corrupted documents. + - bff55ac FIXED: Did not recreate default theme until program restart. + - 7d95657 FIXED: Could delete all themes. + - ce3e44e FIXED: Context menu key did not show spelling menu. + - c59bf51 FIXED: Interpreted images in RTF files as text. + - 56cfb56 Add support for more RTF mimetypes. + - 6b149bc Require Qt 5.2 on the Mac for clipboard handling. + - 7dd2047 FIXED: Regular expression replaces did not ignore whole words + option. + + -- Barak A. Pearlmutter Mon, 24 Mar 2014 19:10:18 +0000 + focuswriter (1.4.4+git.5.56edf89-1) unstable; urgency=medium * Track upstream maintenance branch From 38b146da498992c0e0493039c530035216f930cc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 15:17:40 -0400 Subject: [PATCH 168/630] FIXED: Infinite loop during replace all with regular expressions. --- src/find_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/find_dialog.cpp b/src/find_dialog.cpp index b6ebb543..ea774d2b 100644 --- a/src/find_dialog.cpp +++ b/src/find_dialog.cpp @@ -247,7 +247,7 @@ void FindDialog::replaceAll() } else { forever { cursor = document->document()->find(regex, cursor, flags); - if (!cursor.isNull()) { + if (!cursor.isNull() && cursor.hasSelection()) { found++; } else { break; @@ -279,7 +279,7 @@ void FindDialog::replaceAll() } else { forever { cursor = document->document()->find(regex, cursor, flags); - if (!cursor.isNull()) { + if (!cursor.isNull() && cursor.hasSelection()) { QString match = cursor.selectedText(); match.replace(regex, m_replace_string->text()); cursor.insertText(match); From e55b20f36e9d1b1f116e42a2fae86f629edb8553 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 15:25:57 -0400 Subject: [PATCH 169/630] Add basic program description to readme file. --- README | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README b/README index fe819545..e05bb399 100644 --- a/README +++ b/README @@ -1,3 +1,22 @@ +About +===== + +FocusWriter is a simple, distraction-free word processor. It utilizes a +hide-away interface that you access by moving your mouse to the edges of +the screen, allowing the program to have a familiar look and feel to it +while still getting out of the way so that you can immerse yourself in +your work. + +FocusWriter allows you to customize your environment by creating themes +that control the font, colors, and background image to add ambiance. It +also features on-the-fly updating statistics, daily goals, multiple open +documents, spell-checking, and much more. + +Additionally, when you open the program your current work in progress will +automatically load and position you where you last left off so that you +can immediately jump back in. + + Portable Mode ============= @@ -13,7 +32,7 @@ newly created "Data" folder. The "Themes" folder is located in one of the following places: Linux: - ~/.local/share/focuswriter + ~/.local/share/GottCode/FocusWriter Mac OS X: ~/Library/Application Support/GottCode/FocusWriter From b5cea73a85995946a57f3c8ece711a923b836dd0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 16:46:33 -0400 Subject: [PATCH 170/630] Add AppData file. --- focuswriter.pro | 5 ++++- resources/unix/focuswriter.appdata.xml | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 resources/unix/focuswriter.appdata.xml diff --git a/focuswriter.pro b/focuswriter.pro index 79df603b..6e97063c 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -236,6 +236,9 @@ unix: !macx { desktop.files = resources/unix/focuswriter.desktop desktop.path = $$DATADIR/applications/ + appdata.files = resources/unix/focuswriter.appdata.xml + appdata.path = $$DATADIR/appdata/ + qm.files = translations/*.qm qm.path = $$DATADIR/focuswriter/translations @@ -249,5 +252,5 @@ unix: !macx { } symbols.path = $$DATADIR/focuswriter - INSTALLS += target icon pixmap desktop icons qm sounds symbols + INSTALLS += target icon pixmap desktop appdata icons qm sounds symbols } diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml new file mode 100644 index 00000000..4308b975 --- /dev/null +++ b/resources/unix/focuswriter.appdata.xml @@ -0,0 +1,15 @@ + + + focuswriter.desktop + CC0 +

Fullscreen word processor + +

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

+

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

+

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

+
+ + http://gottcode.org/focuswriter/screenshots/appdata.jpg + + http://gottcode.org/focuswriter/ + From 83dabf9e14bed7f5bfeb4ff580d7a39918c4e3c3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 24 Mar 2014 19:58:40 -0400 Subject: [PATCH 171/630] Add manpage. --- focuswriter.pro | 5 ++++- resources/unix/focuswriter.1 | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 resources/unix/focuswriter.1 diff --git a/focuswriter.pro b/focuswriter.pro index 6e97063c..a4444c08 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -239,6 +239,9 @@ unix: !macx { appdata.files = resources/unix/focuswriter.appdata.xml appdata.path = $$DATADIR/appdata/ + man.files = resources/unix/focuswriter.1 + man.path = $$PREFIX/share/man/man1 + qm.files = translations/*.qm qm.path = $$DATADIR/focuswriter/translations @@ -252,5 +255,5 @@ unix: !macx { } symbols.path = $$DATADIR/focuswriter - INSTALLS += target icon pixmap desktop appdata icons qm sounds symbols + INSTALLS += target icon pixmap desktop appdata man icons qm sounds symbols } diff --git a/resources/unix/focuswriter.1 b/resources/unix/focuswriter.1 new file mode 100644 index 00000000..1b4fd11b --- /dev/null +++ b/resources/unix/focuswriter.1 @@ -0,0 +1,34 @@ +.TH FOCUSWRITER "1" "March 2014" + +.SH "NAME" +focuswriter \- fullscreen word processor + +.SH "SYNOPSIS" +.B focuswriter +[\fIFILENAME...\fR] + +.SH "DESCRIPTION" +FocusWriter is a simple, distraction-free word processor. It utilizes a +hide-away interface that you access by moving your mouse to the edges of +the screen, allowing the program to have a familiar look and feel to it +while still getting out of the way so that you can immerse yourself in +your work. + +.SH "COPYRIGHT" +Copyright \(co 2014 Graeme Gott +.PP +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +.PP +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +.PP +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.SH "AUTHOR" +Graeme Gott . From 9d1cc31cd9d4a24e9a40305b60ab3d84a3f78f57 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 04:26:30 -0400 Subject: [PATCH 172/630] Update AppData to refer to PNG screenshot. --- resources/unix/focuswriter.appdata.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 4308b975..d1e549ca 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -9,7 +9,7 @@

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

- http://gottcode.org/focuswriter/screenshots/appdata.jpg + http://gottcode.org/focuswriter/screenshots/appdata.png http://gottcode.org/focuswriter/ From 48b993d959bd957e6a237eabb0c7da3aff331335 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 06:00:01 -0400 Subject: [PATCH 173/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 9 + resources/unix/focuswriter.desktop | 3 + translations/focuswriter_ar.ts | 309 +++++++++++++------------ translations/focuswriter_ca.ts | 309 +++++++++++++------------ translations/focuswriter_cs.ts | 309 +++++++++++++------------ translations/focuswriter_da.ts | 309 +++++++++++++------------ translations/focuswriter_de.ts | 309 +++++++++++++------------ translations/focuswriter_el.ts | 309 +++++++++++++------------ translations/focuswriter_en.ts | 309 +++++++++++++------------ translations/focuswriter_en_GB.ts | 309 +++++++++++++------------ translations/focuswriter_es.ts | 309 +++++++++++++------------ translations/focuswriter_es_MX.ts | 309 +++++++++++++------------ translations/focuswriter_fi.ts | 309 +++++++++++++------------ translations/focuswriter_fr.ts | 309 +++++++++++++------------ translations/focuswriter_he.ts | 309 +++++++++++++------------ translations/focuswriter_hu.ts | 309 +++++++++++++------------ translations/focuswriter_id.ts | 309 +++++++++++++------------ translations/focuswriter_it.ts | 309 +++++++++++++------------ translations/focuswriter_ja.ts | 309 +++++++++++++------------ translations/focuswriter_ko.ts | 309 +++++++++++++------------ translations/focuswriter_nl.ts | 309 +++++++++++++------------ translations/focuswriter_pl.ts | 309 +++++++++++++------------ translations/focuswriter_pt.ts | 309 +++++++++++++------------ translations/focuswriter_pt_BR.ts | 309 +++++++++++++------------ translations/focuswriter_ro.ts | 309 +++++++++++++------------ translations/focuswriter_ru.ts | 309 +++++++++++++------------ translations/focuswriter_sk.ts | 309 +++++++++++++------------ translations/focuswriter_sr.ts | 309 +++++++++++++------------ translations/focuswriter_sv.ts | 309 +++++++++++++------------ translations/focuswriter_tr.ts | 309 +++++++++++++------------ translations/focuswriter_uk.ts | 309 +++++++++++++------------ translations/focuswriter_vi.ts | 309 +++++++++++++------------ translations/focuswriter_zh_CN.ts | 309 +++++++++++++------------ translations/focuswriter_zh_TW.ts | 309 +++++++++++++------------ 34 files changed, 4972 insertions(+), 4928 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index d1e549ca..4ddca02c 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -3,10 +3,19 @@ focuswriter.desktop CC0 Fullscreen word processor + フルスクリーン・ワードプロセッサ + Processador de textos em ecrã completo + 全屏文字编辑器

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

+

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

+

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

+

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

+

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

+

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

+

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

http://gottcode.org/focuswriter/screenshots/appdata.png diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 4dcd5a1a..c48e1d70 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -14,6 +14,7 @@ Name[hu]=FocusWriter Name[id]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 +Name[nl]=FocusWriter Name[pl]=FocusWriter Name[pt]=FocusWriter Name[pt_BR]=FocusWriter @@ -36,6 +37,7 @@ GenericName[hu]=Teljesképernyős szövegszerkesztő GenericName[id]=Layar Penuh GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 +GenericName[nl]=Volscherm tekstverwerker GenericName[pl]=Pełnoekranowy edytor tekstów GenericName[pt]=Processador de textos em ecrã completo GenericName[pt_BR]=Processador de texto em tela cheia @@ -58,6 +60,7 @@ Comment[hu]=Írjon zavartalanul Comment[id]=Menulis tanpa gangguan Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 +Comment[nl]=Schrijf zonder afleiding Comment[pl]=Pisz bez zakłóceń Comment[pt]=Escreva sem distrações Comment[pt_BR]=Escreva sem distrações diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 96d1e68d..47b233c1 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry معـذرة! - + Unable to save '%1'. لا يمكن حفظ '%1'. - + Save File As حفظ باسم - - + + Unable to overwrite '%1'. لا يمكن الكتابة على '%1'. - + Rename File تسمية الملف مجددا - + Unable to rename '%1'. لا يمكن إعادة تسمية '%1'. - + Reload File تحديـث الملف - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload تحديـث - + Plain Text (*.txt) نص صرف (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) نص المستند المفتوح (*.odt). - + Rich Text (*.rtf) نص ثري (*.rtf) - + All Files (*) كل الملفات (*) @@ -257,17 +257,17 @@ Highlighter - + Add إضافة - + Check Spelling... - + (No suggestions found) @@ -638,8 +638,8 @@ Reader - - + + Not a supported RTF file. @@ -722,6 +722,7 @@ + Default الافتراضي @@ -1171,77 +1172,77 @@ ThemeManager - + Themes السمـات - + Add إضافة - + Modify تعديـل - + Remove حـذف - + Import تحميـل - + Export تصديـر - + Close إغـلاق - + Question - + Remove selected theme? تحذف السمة المحددة؟ - + Import Theme تحميل سمة - + Themes (*.fwtz *.theme) - + Themes (*.fwtz) - + Sorry - + A theme already exists with that name. Please enter a new name: - + Export Theme تصدير السمة @@ -1401,105 +1402,105 @@ تحميـل سمـات - + Loading sounds تحميل الأصوات - + Untitled غير معنون - + Open File فتـح ملف - + About FocusWriter حـول البرنامج FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - - + + Opening %1 فتـح %1 - + Question - + Save changes? تحفظ التغييرات؟ - + (Untitled %1) (%1 غير معنون) @@ -1540,7 +1541,7 @@ - + Warning @@ -1555,442 +1556,442 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. لا يمكن تحمل أصوات الرقن. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (للقراءة فقط) - + &File ملـف - + &New جديـد - + &Open... فتـح - + Reloa&d تحديـث - + &Save حفـظ - + Save &As... حفظ باسم - + &Rename... التسمية مجددًا - + Save A&ll حفظ الكل - + Manage Sessions إدارة الجلسات - + New Session جلسة جديدة - + &Print... طباعة - + &Close إغلاق المستند الحالي - + &Quit إغلاق البرنامج - + Ctrl+Q Ctrl+Q - + &Edit تحريـر - + &Undo تراجـع - + &Redo استرجاع - + Cu&t قـص - + &Copy نسـخ - + &Paste لصـق - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All تحديـد الكل - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat النمـط - + &Bold سمـيك - + &Italic مائـل - + &Underline مسطر تحته - + Stri&kethrough مشـطب - + Ctrl+K Ctrl+K - + Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left محاذاة إلى اليسار - + Ctrl+{ Ctrl+{ - + Align &Center محاذاة إلى الوسط - + Ctrl+| Ctrl+| - + Align &Right محاذاة إلى اليمين - + Ctrl+} Ctrl+} - + Align &Justify ضبـط - + Ctrl+J Ctrl+J - + &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block الاتجاه من اليسار إلى اليمين - + Ri&ght to Left Block الاتجاه من اليمين إلى اليسار - + &Tools أدوات - + &Find... بحـث - + Find &Next أوجد اللاحق - + Find Pre&vious أوجد السابق - + &Replace... استبـدال... - + Ctrl+R Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 F7 - + &Timers... - + S&ymbols... - + &Settings إعـدادات - + Show &Toolbar إظهار شريط الأدوات - + Show &Menu Icons - + F&ocused Text النص المركز عليه - + &Fullscreen - + F11 F11 - + Esc Esc - + M&inimize - + Ctrl+M Ctrl+M - + &Themes... سمـات... - + &Preferences... تفضيلات... - + Focus Off دون تركيز - + Focus One Line تركيز على سطر - + Focus Three Lines تركيز على ثلاثة أسطر - + &Paragraph فقـرة - + Focus Paragraph تركيز على فقرة - + &Help مساعدة - + Application &Language... لغة التطبيق... @@ -2000,27 +2001,27 @@ - + &Off دون تركيز - + One &Line تركيز على سطر - + &Three Lines تركيز على ثلاثة أسطر - + &About حـول - + About &Qt حـول "كيوتي" diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 924dbcec..cc86d76a 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Disculpes - + Unable to save '%1'. No s'ha pogut desar '%1'. - + Save File As Anomena i desa - - + + Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - + Rename File Reanomena el fitxer - + Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - + Reload File Torna a carregar el fitxer - + Reload the file %1 from disk? Voleu tornar a carregar el fitxer %1 des del disc? - + All unsaved changes will be lost. Es perdran tots els canvis. - + Reload Torna a carregar - + Plain Text (*.txt) Text pla (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text enriquit (*.rtf) - + All Files (*) Tots els fitxers (*) @@ -254,17 +254,17 @@ Highlighter - + Add Afegeix - + Check Spelling... Comprova l'ortografia - + (No suggestions found) (No s'han trobat suggeriments) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Fitxer RTF sense suport. @@ -719,6 +719,7 @@ + Default Per defecte @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Temes - + Add Afegeix - + Modify Modifica - + Remove Elimina - + Import Importa - + Export Exporta - + Close Tanca - + Question Pregunta - + Remove selected theme? Esteu segur que voleu eliminar el Tema seleccionat? - + Import Theme Importa Tema - + Themes (*.fwtz *.theme) Temes (*.fwtz *.theme) - + Themes (*.fwtz) Temes (*.fwtz) - + Sorry Disculpes - + A theme already exists with that name. Please enter a new name: Ja existeix un tema amb aquest nom. Poseu-li un altre nom: - + Export Theme Exporta Tema @@ -1398,105 +1399,105 @@ S'estan carregant els Temes - + Loading sounds S'estan carregant els sons - + Untitled Sense títol - + Open File bre fitxer - + About FocusWriter Sobre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un processador de text senzill a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa les icones del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilitzades sota llicència <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caràcters: %L1 / %L2 - + Pages: %L1 Pàgines: %L1 - + Paragraphs: %L1 Paràgrafs: %L1 - + Words: %L1 Paraules: %L1 - + %1% of daily goal %1% de l'objectiu diari - - + + Opening %1 'està obrint %1 - + Question Pregunta - + Save changes? Voleu desar els canvis? - + (Untitled %1) (Sense títol %1) @@ -1537,7 +1538,7 @@ - + Warning Avís @@ -1552,442 +1553,442 @@ Voleu restaurar des de la memòria cau d'emergència? - + Some files could not be opened. No s'han pogut obrir alguns fitxers. - + Some files were opened Read-Only. S'han obert alguns fitxers en mode de Només lectura. - + Text Files (%1);;All Files (*) Fitxers de text (%1);;Tots el fitxers (*) - + '%1' is newer than the cached copy. '%1'és més nou que la còpia de la memòria cau. - + Overwrite newer file? Voleu sobreescriure el fitxer més nou? - + Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - + Please make sure that SDL_mixer is installed. Assegureu-vos que heu instal·lat SDL_mixer - + %1 (Read-Only) %1 (Només lectura) - + &File &Fitxer - + &New &Nou - + &Open... &Obre - + Reloa&d Torna a carregar - + &Save &Desa - + Save &As... Desa &com... - + &Rename... &Reanomena... - + Save A&ll Desa-ho tot - + Manage Sessions Gestiona les sessions - + New Session Nova sessió - + &Print... Im&primeix - + &Close Tan&ca - + &Quit Surt - + Ctrl+Q Ctrl+Q - + &Edit &Edita - + &Undo Desfés - + &Redo &Refés - + Cu&t Talla - + &Copy &Copia - + &Paste Enganxa - + Paste &Unformatted Enganxa sense format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccion&a tot - + Select &Scene Selecciona l'escena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold Negreta - + &Italic Itàlica - + &Underline S&ubratllat - + Stri&kethrough Ratllat - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndex - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndex - + Ctrl+_ Ctrl+_ - + Align &Left Alinea a l'esquerra - + Ctrl+{ Ctrl+{ - + Align &Center Alinea al &Centre - + Ctrl+| Ctrl+| - + Align &Right Alinea a la dreta - + Ctrl+} Ctrl+} - + Align &Justify &Justifica - + Ctrl+J Ctrl+J - + &Decrease Indent &Disminueix el sagnat - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrementa el sagnat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escriure d'esquerra a dreta - + Ri&ght to Left Block Escriure de dreta a esquerra - + &Tools Eines - + &Find... Cerca... - + Find &Next Cerca el següent - + Find Pre&vious Cerca l'anterior - + &Replace... Reemplaça - + Ctrl+R Ctrl+R - + Smart &Quotes Cometes tipogràfiques - + Update &Document Actualitza el document - + Update &Selection Actualitza la selecció - + &Spelling... Ortografia - + F7 F7 - + &Timers... &Temporitzadors - + S&ymbols... S&ímbols... - + &Settings Configuració - + Show &Toolbar Mostra la barra d'eines - + Show &Menu Icons Mostra les icones del menú - + F&ocused Text Text focalitzat - + &Fullscreen Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimitza - + Ctrl+M Ctrl+M - + &Themes... &Temes... - + &Preferences... &Preferències... - + Focus Off No focalitzis - + Focus One Line Focalitza una línia - + Focus Three Lines Focalitza tres línies - + &Paragraph &Paràgraf - + Focus Paragraph Focalitza un paràgraf - + &Help Ajuda - + Application &Language... Idioma de l'aplicació @@ -1997,27 +1998,27 @@ Alguns fitxers no tenen suport i no es podran obrir - + &Off Tanca - + One &Line Una &Línia - + &Three Lines &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index f22356ee..d3b97493 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - + Save File As Uložit soubor jako - - + + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Reload File Nahrát soubor znovu - + Reload the file %1 from disk? Nahrát soubor %1 z disku? - + All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - + Reload Nahrát znovu - + Plain Text (*.txt) Prostý text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Text s formátováním (*.rtf) - + All Files (*) Všechny soubory (*) @@ -254,17 +254,17 @@ Highlighter - + Add Přidat - + Check Spelling... Ověření pravopisu... - + (No suggestions found) (Nebyly nalezeny žádné návrhy) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Toto není podporovaný soubor RTF. @@ -719,6 +719,7 @@ + Default Výchozí @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Vzhled - + Add Přidat - + Modify Pozměnit - + Remove Odstranit - + Import Zavést - + Export Vyvést - + Close Zavřít - + Question Otázka - + Remove selected theme? Odstranit vybranou podobu? - + Import Theme Zavést vzhled - + Themes (*.fwtz *.theme) Podoby (*.fwtz *.theme) - + Themes (*.fwtz) Podoby (*.fwtz) - + Sorry Promiňte - + A theme already exists with that name. Please enter a new name: Podoba s tímto názvem již existuje. Zadejte, prosím, nový název: - + Export Theme Vyvést podobu @@ -1398,105 +1399,105 @@ Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - + Untitled Bez názvu - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - + Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaky: %L1 / %L2 - + Pages: %L1 Strany: %L1 - + Paragraphs: %L1 Odstavce: %L1 - + Words: %L1 Slova: %L1 - + %1% of daily goal %1% z denního cíle - - + + Opening %1 Otevírá se %1 - + Question Otázka - + Save changes? Uložit změny? - + (Untitled %1) (Bez názvu %1) @@ -1537,7 +1538,7 @@ - + Warning Varování @@ -1552,442 +1553,442 @@ Obnovit z pohotovostní vyrovnávací paměti? - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + Text Files (%1);;All Files (*) Textové soubory (%1);;Všechny soubory (*) - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + %1 (Read-Only) %1 (Pouze pro čtení) - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit Úp&ravy - + &Undo &Zpět - + &Redo Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... @@ -1997,27 +1998,27 @@ Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 10b41378..73b6bf96 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - + Save File As Gem fil som - - + + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Reload File Genindlæs fil - + Reload the file %1 from disk? Genindlæs filen %1 fra disk? - + All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - + Reload Genindlæs - + Plain Text (*.txt) Ren tekst (*.txt) - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? - + OpenDocument Text (*.odt) OpenDocument-tekst (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alle filer (*) @@ -253,17 +253,17 @@ Highlighter - + Add Tilføj - + Check Spelling... Stavekontrol... - + (No suggestions found) (Der er ikke fundet forslag) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Ikke en understøttet RTF-fil @@ -718,6 +718,7 @@ + Default Standard @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temaer - + Add Tilføj - + Modify Tilpas - + Remove Fjern - + Import Importer - + Export Eksport - + Close Luk - + Question Spørgsmål - + Remove selected theme? Fjern valgte tema? - + Import Theme Importer tema - + Themes (*.fwtz *.theme) Temaer (*.fwtz *.theme) - + Themes (*.fwtz) Temaer(*.fwtz) - + Sorry Beklager - + A theme already exists with that name. Please enter a new name: Der findes allerede et tema med det navn. Indtast venligst et nyt: - + Export Theme Eksporter tema @@ -1397,105 +1398,105 @@ Indlæser temaer - + Loading sounds Indlæser lyde - + Untitled Uden titel - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - + Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - + Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - + Characters: %L1 / %L2 Tegn: %L1 / %L2 - + Pages: %L1 Sider: %L1 - + Paragraphs: %L1 Afsnit: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1% af dagligt mål - - + + Opening %1 Åbner %1 - + Question Spørgsmål - + Save changes? Gem ændringer - + (Untitled %1) (Uden titel%1) @@ -1536,7 +1537,7 @@ - + Warning Advarsel @@ -1551,442 +1552,442 @@ Gendan fra reservecache? - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + Text Files (%1);;All Files (*) Tekstfiler (%1);;Alle Filer (*) - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + %1 (Read-Only) %1 (Skrivebeskyttet) - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog @@ -1996,27 +1997,27 @@ Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index a3c9189a..fe377425 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - + Save File As Datei speichern unter - - + + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Reload File Datei neu laden - + Reload the file %1 from disk? Die Datei %1 von der Festplatte neu laden? - + All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - + Reload Neu laden - + Plain Text (*.txt) nur Text (*.txt) - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle Dateien (*) @@ -253,17 +253,17 @@ Highlighter - + Add Hinzufügen - + Check Spelling... Rechtschreibung prüfen ... - + (No suggestions found) (keine Vorschläge gefunden) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Keine unterstützte RTF-Datei. @@ -718,6 +718,7 @@ + Default Standard @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Themen - + Add Hinzufügen - + Modify Ändern - + Remove Entfernen - + Import Importieren - + Export Exportieren - + Close Schließen - + Question Frage - + Remove selected theme? Gewähltes Thema entfernen? - + Import Theme Thema importieren - + Themes (*.fwtz *.theme) Thema (*.fwtz *.theme) - + Themes (*.fwtz) Thema (*.fwtz) - + Sorry Entschuldigung - + A theme already exists with that name. Please enter a new name: Ein Thema mit diesem Namen existiert bereits. Bitte geben Sie einen anderen Namen ein: - + Export Theme Thema exportieren @@ -1397,105 +1398,105 @@ Themen werden geladen - + Loading sounds Sounds werden geladen - + Untitled Unbenannt - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Einfache Vollbild Textverarbeitung - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - + Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - + Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - + Pages: %L1 Seiten: %L1 - + Paragraphs: %L1 Absätze: %L1 - + Words: %L1 Wörter: %L1 - + %1% of daily goal %1% des Tagesziels - - + + Opening %1 Datei %1 wird geöffnet - + Question Frage - + Save changes? Änderungen speichern? - + (Untitled %1) (Unbenannt %1) @@ -1536,7 +1537,7 @@ - + Warning Warnung @@ -1551,442 +1552,442 @@ Sicherheitskopie wiederherstellen? - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + Text Files (%1);;All Files (*) Text-Dateien (%1);;Alle Dateien (*) - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. Bitte stellen Sie sicher, dass SDL_mixer installiert ist. - + %1 (Read-Only) %1 (Schreibgeschützt) - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d Neuladen - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene Szene auswählen - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + &Timers... &Wecker... - + S&ymbols... Symbole... - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off Fokus Aus - + Focus One Line Fokus EIne Zeile - + Focus Three Lines Fokus Drei Zeilen - + &Paragraph &Absatz - + Focus Paragraph Fokus Absatz - + &Help &Hilfe - + Application &Language... &Sprache... @@ -1996,27 +1997,27 @@ Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index d5772fda..2012c35a 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το «%1». - + Save File As Αποθήκευση Αρχείου Ως - - + + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το «%1». - + Rename File Μετονομασία Αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το «%1». - + Reload File Επαναφόρτωση Αρχείου - + Reload the file %1 from disk? Επαναφόρτωση του αρχείου «%1» από τον δίσκο; - + All unsaved changes will be lost. Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. - + Reload Επαναφόρτωση - + Plain Text (*.txt) Απλό Κείμενο (*.txt) - + Question Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; - + OpenDocument Text (*.odt) Έγγραφο Κειμένου ODF (*.odt) - + Rich Text (*.rtf) Εμπλουτισμένο Κείμενο (*.rtf) - + All Files (*) Όλα τα αρχεία (*) @@ -253,17 +253,17 @@ Highlighter - + Add Προσθήκη - + Check Spelling... Ορθογραφικός Έλεγχος... - + (No suggestions found) (Δεν βρέθηκαν προτάσεις) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Μη υποστηριζόμενο αρχείο RTF. @@ -718,6 +718,7 @@ + Default Προεπιλογή @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Θέματα - + Add Προσθήκη - + Modify Τροποποίηση - + Remove Αφαίρεση - + Import Εισαγωγή - + Export Εξαγωγή - + Close Κλείσιμο - + Question Ερώτηση - + Remove selected theme? Να αφαιρεθεί το επιλεγμένο θέμα; - + Import Theme Εισαγωγή Θέματος - + Themes (*.fwtz *.theme) Θέματα (*.fwtz *.theme) - + Themes (*.fwtz) Θέματα (*.fwtz) - + Sorry Λυπούμαστε - + A theme already exists with that name. Please enter a new name: Υπάρχει ήδη θέμα με αυτό το όνομα. Παρακαλώ γράψτε νέο όνομα: - + Export Theme Εξαγωγή Θέματος @@ -1397,105 +1398,105 @@ Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - + Untitled Χωρίς τίτλο - + Open File Άνοιγμα Αρχείου - + About FocusWriter Σχετικά με το FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης - + Copyright &copy; 2008-%1 Graeme Gott Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> - + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - + Pages: %L1 Σελίδες: %L1 - + Paragraphs: %L1 Παράγραφοι: %L1 - + Words: %L1 Λέξεις: %L1 - + %1% of daily goal %1% του ημερήσιου στόχου - - + + Opening %1 Ανοίγει το %1 - + Question Ερώτηση - + Save changes? Να αποθηκευτούν οι αλλαγές; - + (Untitled %1) (Χωρίς τίτλο %1) @@ -1536,7 +1537,7 @@ - + Warning Προειδοποίηση @@ -1551,442 +1552,442 @@ Να γίνει επαναφορά από τη μνήμη εκτάκτου ανάγκης; - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + Text Files (%1);;All Files (*) Αρχεία Κειμένου (%1);;Όλα τα αρχεία (*) - + '%1' is newer than the cached copy. Το «%1» είναι νεότερο από το αντίγραφο στη μνήμη. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. - + %1 (Read-Only) %1 (μόνο για ανάγνωση) - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d Επαναφόρτωσ&η - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + New Session Νέα Περίοδος Λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted Επικόλληση &Χωρίς Μορφοποίηση - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Επιλογή Όλ&ων - + Select &Scene Επιλογή &Σκηνής - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript &Δείκτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &Αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο Κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &Δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &Στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση Εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση Εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη Γραφή - + Ri&ght to Left Block Αριστερόστρο&φη Γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &Επόμενου - + Find Pre&vious Εύρεση &Προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα Εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση Επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + &Timers... Χρονόμε&τρα... - + S&ymbols... Σύμ&βολα... - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση Γραμμής Εργα&λείων - + Show &Menu Icons Εμφάνιση Εικονιδίων &Μενού - + F&ocused Text Εστιασμένο &Κείμενο - + &Fullscreen Πλήρης Οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off Εστίαση Ανενεργή - + Focus One Line Εστίαση Μίας Γραμμής - + Focus Three Lines Εστίαση Τριών Γραμμών - + &Paragraph &Παραγράφου - + Focus Paragraph Εστίαση Παραγράφου - + &Help &Βοήθεια - + Application &Language... &Γλώσσα Εφαρμογής... @@ -1996,27 +1997,27 @@ Ορισμένα αρχεία δεν υποστηρίζονται και δεν ήταν δυνατό να ανοιχτούν. - + &Off &Απενεργοποίηση - + One &Line &Μία Γραμμή - + &Three Lines &Τρεις Γραμμές - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 1d9cdade..706d2e91 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -253,17 +253,17 @@ Highlighter - + Add - + Check Spelling... - + (No suggestions found) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. @@ -718,6 +718,7 @@ + Default @@ -1167,77 +1168,77 @@ ThemeManager - + Themes - + Add - + Modify - + Remove - + Import - + Export - + Close - + Question - + Remove selected theme? - + Import Theme - + Themes (*.fwtz *.theme) - + Themes (*.fwtz) - + Sorry - + A theme already exists with that name. Please enter a new name: - + Export Theme @@ -1397,105 +1398,105 @@ - + Loading sounds - + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - - + + Opening %1 - + Question - + Save changes? - + (Untitled %1) @@ -1536,7 +1537,7 @@ - + Warning @@ -1551,442 +1552,442 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... @@ -1996,27 +1997,27 @@ - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index d6bebce3..07d86240 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. Unable to save '%1'. - + Save File As Save File As - - + + Unable to overwrite '%1'. Unable to overwrite '%1'. - + Rename File Rename File - + Unable to rename '%1'. Unable to rename '%1'. - + Reload File Reload File - + Reload the file %1 from disk? Reload the file %1 from disk? - + All unsaved changes will be lost. All unsaved changes will be lost. - + Reload Reload - + Plain Text (*.txt) Plain Text (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? Saving as plain-text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) All Files (*) @@ -253,17 +253,17 @@ Highlighter - + Add Add - + Check Spelling... Check Spelling... - + (No suggestions found) (No suggestions found) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Not a supported RTF file. @@ -718,6 +718,7 @@ + Default Default @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Themes - + Add Add - + Modify Modify - + Remove Remove - + Import Import - + Export Export - + Close Close - + Question Question - + Remove selected theme? Remove selected theme? - + Import Theme Import Theme - + Themes (*.fwtz *.theme) Themes (*.fwtz *.theme) - + Themes (*.fwtz) Themes (*.fwtz) - + Sorry Sorry - + A theme already exists with that name. Please enter a new name: A theme with that name already exists. Please enter a new name: - + Export Theme Export Theme @@ -1397,105 +1398,105 @@ Loading themes - + Loading sounds Loading sounds - + Untitled Untitled - + Open File Open File - + About FocusWriter About FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple full-screen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> licence - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> licence - + Characters: %L1 / %L2 Characters: %L1 / %L2 - + Pages: %L1 Pages: %L1 - + Paragraphs: %L1 Paragraphs: %L1 - + Words: %L1 Words: %L1 - + %1% of daily goal %1% of daily goal - - + + Opening %1 Opening %1 - + Question Question - + Save changes? Save changes? - + (Untitled %1) (Untitled %1) @@ -1536,7 +1537,7 @@ - + Warning Warning @@ -1551,442 +1552,442 @@ Restore from the emergency cache? - + Some files could not be opened. Some files could not be opened. - + Some files were opened Read-Only. Some files were opened as Read-Only. - + Text Files (%1);;All Files (*) Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. '%1' is newer than the cached copy. - + Overwrite newer file? Overwrite the newer file? - + Unable to load typewriter sounds. Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. Please ensure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Read-Only) - + &File &File - + &New &New - + &Open... &Open... - + Reloa&d Reloa&d - + &Save &Save - + Save &As... Save &As... - + &Rename... &Rename... - + Save A&ll Save A&ll - + Manage Sessions Manage Sessions - + New Session New Session - + &Print... &Print... - + &Close &Close - + &Quit &Quit - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Cu&t - + &Copy &Copy - + &Paste &Paste - + Paste &Unformatted Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Select &All - + Select &Scene Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Bold - + &Italic &Italic - + &Underline &Underline - + Stri&kethrough Stri&kethough - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Align &Left - + Ctrl+{ Ctrl+{ - + Align &Center Align &Centre - + Ctrl+| Ctrl+| - + Align &Right Align &Right - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block Le&ft to Right Block - + Ri&ght to Left Block Ri&ght to Left Block - + &Tools &Tools - + &Find... &Find... - + Find &Next Find &Next - + Find Pre&vious Find Pre&vious - + &Replace... &Replace... - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Update &Document - + Update &Selection Update &Selection - + &Spelling... &Spelling... - + F7 F7 - + &Timers... &Timers... - + S&ymbols... S&ymbols... - + &Settings &Settings - + Show &Toolbar Show &Toolbar - + Show &Menu Icons Show &Menu Icons - + F&ocused Text F&ocused Text - + &Fullscreen &Full-screen - + F11 F11 - + Esc Esc - + M&inimize M&inimise - + Ctrl+M Ctrl+M - + &Themes... &Themes... - + &Preferences... &Preferences... - + Focus Off Focus Off - + Focus One Line Focus One Line - + Focus Three Lines Focus Three Lines - + &Paragraph &Paragraph - + Focus Paragraph Focus Paragraph - + &Help &Help - + Application &Language... Application &Language... @@ -1996,27 +1997,27 @@ Some files are unsupported and could not be opened. - + &Off &Off - + One &Line One &Line - + &Three Lines &Three Lines - + &About &About - + About &Qt About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 5af7b7e2..0229d69c 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Aviso - + Unable to save '%1'. No se puede guardar «%1». - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobrescribir «%1». - + Rename File Renombrar el archivo - + Unable to rename '%1'. No se puede renombrar «%1». - + Reload File Volver a cargar el archivo - + Reload the file %1 from disk? ¿Desea volver a cargar el archivo %1 del disco? - + All unsaved changes will be lost. Se perderán todos los cambios no guardados. - + Reload Volver a cargar - + Plain Text (*.txt) Texto plano (*.txt) - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? - + OpenDocument Text (*.odt) Texto de OpenDocument (*.odt) - + Rich Text (*.rtf) Texto enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -253,17 +253,17 @@ Highlighter - + Add Añadir - + Check Spelling... Revisar la ortografía… - + (No suggestions found) (No se encontraron sugerencias) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. No es un archivo RTF compatible. @@ -718,6 +718,7 @@ + Default Predeterminado @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temas - + Add Añadir - + Modify Modificar - + Remove Eliminar - + Import Importar - + Export Exportar - + Close Cerrar - + Question Confirmación - + Remove selected theme? ¿Quiere eliminar el tema seleccionado? - + Import Theme Importar tema - + Themes (*.fwtz *.theme) Temas (*.fwtz, *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - + Sorry Aviso - + A theme already exists with that name. Please enter a new name: Ya existe un tema con ese nombre. Escriba un nombre nuevo: - + Export Theme Exportar tema @@ -1397,105 +1398,105 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesador de textos simple a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% del objetivo diario - - + + Opening %1 Abriendo %1 - + Question Confirmación - + Save changes? ¿Desea guardar los cambios? - + (Untitled %1) (Sin título %1) @@ -1536,7 +1537,7 @@ - + Warning Advertencia @@ -1551,442 +1552,442 @@ ¿Desea restaurarlo desde la caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + Text Files (%1);;All Files (*) Archivos de texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close C&errar - + &Quit Sali&r - + Ctrl+Q Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All &Seleccionar todo - + Select &Scene Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl + K - + Sup&erscript Su&períndice - + Ctrl+^ Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block &Escribir de izquierda a derecha - + Ri&ght to Left Block Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... &Alarmas... - + S&ymbols... Símb&olos… - + &Settings &Configuración - + Show &Toolbar Mo&strar barra de herramientas - + Show &Menu Icons M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help &Ayuda - + Application &Language... &Idioma de la aplicación... @@ -1996,27 +1997,27 @@ Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 0becf69a..6fc98309 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) Texto Plano (*.txt) - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Texto Enriquecido (*.rtf) - + All Files (*) Todos los archivos (*) @@ -253,17 +253,17 @@ Highlighter - + Add Agregar - + Check Spelling... Checar ortografía... - + (No suggestions found) (No se encontraron sugerencias) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Archivo RTF no soportado. @@ -718,6 +718,7 @@ + Default Por omisión @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temas - + Add Agregar - + Modify Modificar - + Remove Remover - + Import Importar - + Export Exportar - + Close Cerrar - + Question Pregunta - + Remove selected theme? ¿Desea eliminar el tema seleccionado? - + Import Theme Importar tema - + Themes (*.fwtz *.theme) Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - + Sorry Lo siento - + A theme already exists with that name. Please enter a new name: Ya existe un tema con este nombre. Por favor escriba un nombre nuevo: - + Export Theme Exportar tema @@ -1397,105 +1398,105 @@ Cargando temas - + Loading sounds Cargando sonidos - + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Párrafos: %L1 - + Words: %L1 Palabras: %L1 - + %1% of daily goal %1% de la meta diaria - - + + Opening %1 Abriendo %1 - + Question Pregunta - + Save changes? ¿Desea guardar cambios? - + (Untitled %1) (Sin título %1) @@ -1536,7 +1537,7 @@ - + Warning Advertencia @@ -1551,442 +1552,442 @@ ¿Restaurar el caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + Text Files (%1);;All Files (*) Archivos de Texto (%1);;Todos los archivos (*) - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Solo lectura) - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Seleccionar &todo - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + &Timers... Contador de &tiempo... - + S&ymbols... - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help A&yuda - + Application &Language... &Idioma de aplicación... @@ -1996,27 +1997,27 @@ - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 0f54901f..2029c5b6 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Pahoittelut - + Unable to save '%1'. Tiedoston %1 tallentaminen epäonnistui. - + Save File As Tallenna nimellä - - + + Unable to overwrite '%1'. Tiedoston ”%1” korvaaminen epäonnistui. - + Rename File Nimeä tiedosto uudelleen - + Unable to rename '%1'. Tiedoston ”%1” nimen muuttaminen epäonnistui. - + Reload File Lataa tiedosto uudelleen - + Reload the file %1 from disk? Ladataanko tiedosto %1 uudelleen levyltä? - + All unsaved changes will be lost. Kaikki tallentamattomat muutokset menetetään. - + Reload Lataa uudelleen - + Plain Text (*.txt) Muotoilematon teksti (*.txt) - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? Muotoilemattomana tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? - + OpenDocument Text (*.odt) OpenDocument-teksti (*.odt) - + Rich Text (*.rtf) Muotoiltu teksti (*.rtf) - + All Files (*) Kaikki tiedostot @@ -253,17 +253,17 @@ Highlighter - + Add Lisää - + Check Spelling... Tarkista oikeinkirjoitus… - + (No suggestions found) (Ei ehdotuksia) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Ei tuettu RTF-tiedosto. @@ -718,6 +718,7 @@ + Default Oletus @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Teemat - + Add Lisää - + Modify Muokkaa - + Remove Poista - + Import Tuo - + Export Vie - + Close Sulje - + Question Kysymys - + Remove selected theme? Poistetaanko valittu teema? - + Import Theme Tuo teema - + Themes (*.fwtz *.theme) Teemat (*.fwtz *.theme) - + Themes (*.fwtz) Teemat (*.fwtz) - + Sorry Pahoittelut - + A theme already exists with that name. Please enter a new name: Samanniminen teema on jo olemassa. Anna uusi nimi: - + Export Theme Vie teema @@ -1397,105 +1398,105 @@ Ladataan teemoja - + Loading sounds Ladataan ääniä - + Untitled Nimetön - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + FocusWriter FocusWriter - + A simple fullscreen word processor Yksinkertainen koko näytön tekstinkäsittelyohjelma - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008–%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssin alaisena - + Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - + Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin alaisena - + Characters: %L1 / %L2 Merkkejä: %L1 / %L2 - + Pages: %L1 Sivuja: %L1 - + Paragraphs: %L1 Kappaleita: %L1 - + Words: %L1 Sanoja: %L1 - + %1% of daily goal %1 % päivittäisestä tavoiteesta - - + + Opening %1 Avataan %1 - + Question Kysymys - + Save changes? Tallennetaanko muutokset? - + (Untitled %1) (Nimetön %1) @@ -1536,7 +1537,7 @@ - + Warning Varoitus @@ -1551,442 +1552,442 @@ Palautetaanko tilanne hätävälimuistista? - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin vain luku -tilassa. - + Text Files (%1);;All Files (*) Tekstitiedostot (%1);;Kaikki tiedostot (*) - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Unable to load typewriter sounds. Kirjoituskoneäänien lataaminen epäonnistui. - + Please make sure that SDL_mixer is installed. Tarkista, että SDL_mixer on asennettu. - + %1 (Read-Only) %1 (vain luku) - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa… - + Reloa&d Lataa uu&delleen - + &Save &Tallenna - + Save &As... Tallenna &nimellä… - + &Rename... Ni&meä uudelleen… - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallinnoi istuntoja - + New Session Uusi istunto - + &Print... Tul&osta… - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t L&eikkaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse k&aikki - + Select &Scene &Valitse kohtaus - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat M&uotoile - + &Bold Li&havointi - + &Italic Ku&rsivointi - + &Underline All&eviivaus - + Stri&kethrough Yl&iviivaus - + Ctrl+K Ctrl+K - + Sup&erscript &Yläindeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vase&mmalta oikealle - + Ri&ght to Left Block Oikea&lta vasemmalle - + &Tools T&yökalut - + &Find... &Etsi… - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa… - + Ctrl+R Ctrl+R - + Smart &Quotes Älykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus… - + F7 F7 - + &Timers... &Ajastimet… - + S&ymbols... S&ymbolit… - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalupalkki - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen Koko &näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... T&eemat… - + &Preferences... &Asetukset… - + Focus Off Kohdistus pois päältä - + Focus One Line Kohdista yksi rivi - + Focus Three Lines Kohdista kolme riviä - + &Paragraph &Kappale - + Focus Paragraph Kohdista kappale - + &Help &Ohje - + Application &Language... Sovelluksen &kieli… @@ -1996,27 +1997,27 @@ Joidenkin tiedostojen tiedostomuotoja ei tueta; niiden avaaminen epäonnistui. - + &Off &Pois - + One &Line &Yksi rivi - + &Three Lines Kolme &riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index ace0f3b6..67257c86 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - + Save File As Enregistrer sous - - + + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Reload File Recharger le fichier - + Reload the file %1 from disk? Voulez-vous recharger le fichier %1 depuis le disque ? - + All unsaved changes will be lost. Toutes les modifications non sauvegardées seront perdues. - + Reload Rechargement - + Plain Text (*.txt) Texte brut (*.txt) - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? - + OpenDocument Text (*.odt) Texte OpenDocument (*.odt) - + Rich Text (*.rtf) Texte enrichi (*.rtf) - + All Files (*) Tous les fichiers (*) @@ -253,17 +253,17 @@ Highlighter - + Add Ajouter - + Check Spelling... Vérification de l'orthographe... - + (No suggestions found) (Pas de suggestion trouvée) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Format de texte enrichi RTF non reconnu. @@ -718,6 +718,7 @@ + Default Par défaut @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Thèmes - + Add Ajouter - + Modify Modifier - + Remove Supprimer - + Import Importer - + Export Exporter - + Close Fermer - + Question Question - + Remove selected theme? Supprimer le thème sélectionne ? - + Import Theme Importer un thème - + Themes (*.fwtz *.theme) Thèmes (*.fwtz *.theme) - + Themes (*.fwtz) Thèmes (*.fwtz) - + Sorry Désolé - + A theme already exists with that name. Please enter a new name: Un thème du même nom existe déjà. Veuillez entrer un autre nom : - + Export Theme Exporter le thème @@ -1397,105 +1398,105 @@ Chargement des thèmes - + Loading sounds Chargement des sons - + Untitled Sans titre - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un traitement de texte plein écran simple - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caractères : %L1 / %L2 - + Pages: %L1 Pages : %L1 - + Paragraphs: %L1 Paragraphes : %L1 - + Words: %L1 Mots : %L1 - + %1% of daily goal %1 % de l'objectif quotidien - - + + Opening %1 Ouverture de %1 - + Question Question - + Save changes? Enregistrer les changements ? - + (Untitled %1) (Sans titre %1) @@ -1536,7 +1537,7 @@ - + Warning Avertissement @@ -1551,442 +1552,442 @@ Récupérer les informations depuis le cache d'urgence ? - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + Text Files (%1);;All Files (*) Fichiers texte (%1);;Tous les fichiers (*) - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + %1 (Read-Only) %1 (lecture seule) - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... @@ -1996,27 +1997,27 @@ Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 403479e5..2825ce94 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry צר לי - + Unable to save '%1'. לא ניתן לשמור '%1'. - + Save File As שמירת קובץ בשם - - + + Unable to overwrite '%1'. לא ניתן להחליף את '%1'. - + Rename File שינוי שם קובץ - + Unable to rename '%1'. לא ניתן לשנות שם '%1'. - + Reload File טעינת קובץ מחדש - + Reload the file %1 from disk? לטעון את הקובץ %1 מחדש מתוך כונן? - + All unsaved changes will be lost. כל השינויים שלא נשמרו יאבדו. - + Reload טעינה מחדש - + Plain Text (*.txt) תמליל גלוי ‪(*.txt) - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? - + OpenDocument Text (*.odt) תמליל ‫OpenDocument ‫(‭*.odt‬) - + Rich Text (*.rtf) תמליל עשיר ‪(*.rtf) - + All Files (*) כל הקבצים (*) @@ -253,17 +253,17 @@ Highlighter - + Add הוסף - + Check Spelling... בדיקת איות... - + (No suggestions found) (לא נמצאו הצעות) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. קובץ RTF שלא נתמך. @@ -718,6 +718,7 @@ + Default ברירת מחדל @@ -1167,77 +1168,77 @@ ThemeManager - + Themes מוטיבים - + Add הוספה - + Modify התאמה - + Remove הסרה - + Import ייבוא - + Export ייצוא - + Close סגירה - + Question שאלה - + Remove selected theme? להסיר מוטיב נבחר? - + Import Theme ייבוא מוטיב - + Themes (*.fwtz *.theme) מוטיבים ‪(*.fwtz *.theme) - + Themes (*.fwtz) מוטיבים ‪(*.fwtz) - + Sorry צר לי - + A theme already exists with that name. Please enter a new name: כבר קיים מוטיב עם שם זה. נא להזין שם חדש: - + Export Theme ייצוא מוטיב @@ -1397,105 +1398,105 @@ מטעין כעת מוטיבים - + Loading sounds מטעין כעת צלילים - + Untitled ללא כותרת - + Open File פתיחת קובץ - + About FocusWriter אדות ‫FocusWriter - + FocusWriter ‫FocusWriter - + A simple fullscreen word processor עורך תמלילים פשוט במסך מלא - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license בשימוש תחת הרשיון <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 תווים: %L1 / %L2 - + Pages: %L1 עמודים: %L1 - + Paragraphs: %L1 פסקאות: %L1 - + Words: %L1 מילים: %L1 - + %1% of daily goal %1% מן היעד היומי - - + + Opening %1 ‫‭%1‬ נפתח כעת - + Question שאלה - + Save changes? לשמור שינויים? - + (Untitled %1) (ללא כותרת %1) @@ -1536,7 +1537,7 @@ - + Warning אזהרה @@ -1551,442 +1552,442 @@ לשחזר מן מטמון חירום? - + Some files could not be opened. קבצים מסוימים לא יכלו להיפתח. - + Some files were opened Read-Only. קבצים מסוימים נפתחו לקריאה-בלבד. - + Text Files (%1);;All Files (*) קבצי תמליל (%1);;כל הקבצים (*) - + '%1' is newer than the cached copy. '%1' הינו חדש יותר מן העותק המוטמן. - + Overwrite newer file? להחליף קובץ חדש? - + Unable to load typewriter sounds. לא ניתן לטעון צלילי מכונת כתיבה. - + Please make sure that SDL_mixer is installed. נא לוודא שהרכיב SDL_mixer הינו מותקן. - + %1 (Read-Only) %1 (לקריאה-בלבד) - + &File &קובץ - + &New &חדש - + &Open... &פתיחה... - + Reloa&d &טען מחדש - + &Save &שמור - + Save &As... שמירה &בשם... - + &Rename... שי&נוי שם... - + Save A&ll שמור ה&כל - + Manage Sessions ניהול סשנים - + New Session סשן חדש - + &Print... ה&דפסה... - + &Close &סגור - + &Quit י&ציאה - + Ctrl+Q - + &Edit ע&ריכה - + &Undo בט&ל - + &Redo ב&צע שוב - + Cu&t &גזור - + &Copy הע&תק - + &Paste ה&דבק - + Paste &Unformatted הדבק בלי &עיצוב - + Ctrl+Shift+V - + Select &All בחר ה&כל - + Select &Scene בחר &מקטע - + Ctrl+Shift+A - + Fo&rmat עי&צוב - + &Bold &מודגש - + &Italic &נטוי - + &Underline &קו תחתון - + Stri&kethrough קו &חוצה - + Ctrl+K - + Sup&erscript כיתוב &עילי - + Ctrl+^ - + &Subscript כיתוב &תחתי - + Ctrl+_ - + Align &Left יישור &שמאל - + Ctrl+{ - + Align &Center יישור מ&רכז - + Ctrl+| - + Align &Right יישור &ימין - + Ctrl+} - + Align &Justify יישור מ&אוזן - + Ctrl+J - + &Decrease Indent &צמצום שוליים - + Ctrl+< - + I&ncrease Indent &גידול שוליים - + Ctrl+> - + Le&ft to Right Block בלוק שמ&אל אל ימין - + Ri&ght to Left Block בלוק י&מין אל שמאל - + &Tools &כלים - + &Find... &חיפוש... - + Find &Next מצא את ה&בא - + Find Pre&vious מצא את ה&קודם - + &Replace... &החלפה... - + Ctrl+R - + Smart &Quotes מר&כאות חכמות - + Update &Document עדכן &מסמך - + Update &Selection עדכן &בחירה - + &Spelling... &איות... - + F7 F7 - + &Timers... &שעוני עצר... - + S&ymbols... &סמלים... - + &Settings &הגדרות - + Show &Toolbar הצג &סרגל כלים - + Show &Menu Icons הצג &צלמיות תפריט - + F&ocused Text תמליל ממור&כז - + &Fullscreen &מסך מלא - + F11 F11 - + Esc Esc - + M&inimize מ&זער - + Ctrl+M - + &Themes... מו&טיבים... - + &Preferences... &העדפות... - + Focus Off כיבוי מרכוז - + Focus One Line מרכוז שורה אחת - + Focus Three Lines מרכוז שלוש שורות - + &Paragraph &פסקה - + Focus Paragraph מרכוז פסקה - + &Help &עזרה - + Application &Language... &שפת יישום... @@ -1996,27 +1997,27 @@ קבצים מסוימים לא נתמכו ולא ניתן היה לפתוחם. - + &Off &כבוי - + One &Line שורה &אחת - + &Three Lines &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 1885a13d..4e910599 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - + Save File As Mentés másként - - + + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Reload File Fájl újratöltése - + Reload the file %1 from disk? %1 Fájl újratöltése a lemezről - + All unsaved changes will be lost. Minden el nem mentett változtatás el fog veszni - + Reload Újratöltés - + Plain Text (*.txt) Egyszerű szövegfájl (*.txt) - + Question Kérdés - + Saving as plain text will discard all formatting. Discard formatting? Egyszerű szövegként való mentés minden formázást töröl. Töröl minden formázást? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Formázott szöveg (*.rtf) - + All Files (*) Minden fájl (*) @@ -252,17 +252,17 @@ Highlighter - + Add Hozzáadás - + Check Spelling... Helyesírás-ellenőrzés... - + (No suggestions found) (Nincsenek javaslatok) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. Nem támogatott RTF fájl. @@ -717,6 +717,7 @@ + Default Alapértelmezett @@ -1166,77 +1167,77 @@ ThemeManager - + Themes Témák - + Add Hozzáadás - + Modify Módosítás - + Remove Eltávolítás - + Import Importálás - + Export Exportálás - + Close Bezárás - + Question Kérdés - + Remove selected theme? Töröljük a kijelölt témát? - + Import Theme Téma importálása - + Themes (*.fwtz *.theme) Témák (*.fwtz *.theme) - + Themes (*.fwtz) Témák (*.fwtz) - + Sorry Elnézést - + A theme already exists with that name. Please enter a new name: Ilyen nevű téma már létezik. Kérlek, adj meg egy új nevet: - + Export Theme Téma exportálása @@ -1396,105 +1397,105 @@ Témák betöltése - + Loading sounds Hangok betöltése - + Untitled Névtelen - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + FocusWriter FocusWriter - + A simple fullscreen word processor Egy egyszerű teljesképernyős szövegszerkesztő - + Copyright &copy; 2008-%1 Graeme Gott Szerzői jogvédelem alatt &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> licensz alatt kiadva - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> ikontémából használ ikonokat - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> licensz alatt használva - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Oldal: %L1 - + Paragraphs: %L1 Bekezdés: %L1 - + Words: %L1 Szó: %L1 - + %1% of daily goal A napi cél %1%-a - - + + Opening %1 %1 megnyitása - + Question Kérdés - + Save changes? Mentsük a változtatásokat? - + (Untitled %1) (Névtelen %1) @@ -1535,7 +1536,7 @@ - + Warning Figyelmeztetés @@ -1550,442 +1551,442 @@ Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + Text Files (%1);;All Files (*) Szövegfájlok (%1);;Minden fájl (*) - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. Kérem győződjön meg róla, hogy az SDL_mixer telepítve van. - + %1 (Read-Only) %1 (Csak olvasható) - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d Újratöltés & - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted Beillesztés &Formázatlanul - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene &Jelenet kiválasztása - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + &Timers... &Stopperek... - + S&ymbols... &Szimbólumok - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text Fókuszált szöveg - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off Fókusz kikapcsolása - + Focus One Line Egy sor fókuszálása - + Focus Three Lines Három sor fókuszálása - + &Paragraph &Bekezdés - + Focus Paragraph Bekezdés fókuszálása - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... @@ -1995,27 +1996,27 @@ Néhány fájltípus nem támogatott és nem került megnyitásra. - + &Off &Kikapcsolás - + One &Line Egy &Sor - + &Three Lines &Három sor - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 6dfe8bf3..5f49b9fd 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Maaf - + Unable to save '%1'. Gagal menyimpan '%1'. - + Save File As Simpan File Sebagai - - + + Unable to overwrite '%1'. Gagal memperbarui '%1'. - + Rename File Ubah Nama File - + Unable to rename '%1'. Gagal mengubah nama '%1'. - + Reload File Muat Ulang File - + Reload the file %1 from disk? Muat file %1? - + All unsaved changes will be lost. Semua perubahan yang tidak disimpan akan hilang. - + Reload Muat ulang - + Plain Text (*.txt) Teks Biasa (*.txt) - + Question Pertanyaan - + Saving as plain text will discard all formatting. Discard formatting? Menyimpan sebagai teks polos akan membuang semua format. Buang format? - + OpenDocument Text (*.odt) Teks OpenDocument (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Semua File (*) @@ -252,17 +252,17 @@ Highlighter - + Add Tambahkan - + Check Spelling... Cek Ejaan... - + (No suggestions found) (Saran tidak ditemukan) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. Bukan file RTF yng didukung. @@ -717,6 +717,7 @@ + Default Setelan Standar @@ -1166,77 +1167,77 @@ ThemeManager - + Themes Tema - + Add Tambahkan - + Modify Atur - + Remove Buang - + Import Impor - + Export Ekspor - + Close Tutup - + Question Pertanyaan - + Remove selected theme? Buang tema terpilih? - + Import Theme Impor Tema - + Themes (*.fwtz *.theme) Tema (*.fwtz *.theme) - + Themes (*.fwtz) Tema (*.fwtz) - + Sorry Maaf - + A theme already exists with that name. Please enter a new name: Sudah ada tema dengan nama tersebut. Silakan tulis nama baru: - + Export Theme Ekspor Tema @@ -1396,105 +1397,105 @@ Memuat tema - + Loading sounds Memuat suara - + Untitled Tanpa Judul - + Open File Buka File - + About FocusWriter Tentang FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Pengolah kata selayar penuh sederhana - + Copyright &copy; 2008-%1 Graeme Gott Hak Cipta &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Dirilis dalam lisensi <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Menggunakan ikon dari tema ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Digunakan dalam lisensi <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Halaman: %L1 - + Paragraphs: %L1 Paragraf: %L1 - + Words: %L1 Kata: %L1 - + %1% of daily goal %1% dari target harian - - + + Opening %1 Membuka %1 - + Question Pertanyaan - + Save changes? Simpan perubahan? - + (Untitled %1) (Tanpa Judul %1) @@ -1535,7 +1536,7 @@ - + Warning Peringatan @@ -1550,442 +1551,442 @@ Kembalikan dari penyimpanan darurat? - + Some files could not be opened. Beberapa file tak bisa dibuka. - + Some files were opened Read-Only. Beberapa file dibuka secara Read-Only (tak bisa diedit). - + Text Files (%1);;All Files (*) File Teks (%1);;Semua File (*) - + '%1' is newer than the cached copy. '%1' lebih mutakhir daripada kopian yang tersimpan. - + Overwrite newer file? Timpa file yang lebih baru? - + Unable to load typewriter sounds. Gagal memuat suara mesin ketik. - + Please make sure that SDL_mixer is installed. Pastikan SDL_mixer dipasang di komputer Anda. - + %1 (Read-Only) %1 (Read-Only) - + &File &File - + &New &Baru - + &Open... &Buka... - + Reloa&d &Muat Ulang - + &Save &Simpan - + Save &As... Simpan &sebagai... - + &Rename... &Ubah Nama... - + Save A&ll Simpan S&emua - + Manage Sessions Kelola Sesi - + New Session Sesi Baru - + &Print... &Cetak... - + &Close &Tutup - + &Quit &Keluar - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Po%tong - + &Copy &Salin - + &Paste &Tempelkan - + Paste &Unformatted Paste &Tanpa Format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Pilih &Semua - + Select &Scene Pilih &Suasana - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Tebal - + &Italic &Miring - + &Underline &Garisbawah - + Stri&kethrough Gar&iscoret - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Rata &Kiri - + Ctrl+{ Ctrl+{ - + Align &Center Rata &Tengah - + Ctrl+| Ctrl+| - + Align &Right Rata &Kanan - + Ctrl+} Ctrl+} - + Align &Justify Rata &Sisi - + Ctrl+J Ctrl+J - + &Decrease Indent %Kurangi Indentasi - + Ctrl+< Ctrl+< - + I&ncrease Indent T&ambahkan Indentasi - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok Kiri ke Kanan - + Ri&ght to Left Block Bl&ok Kanan ke Kiri - + &Tools &Peralatan - + &Find... &Temukan... - + Find &Next Temukan &berikutnya - + Find Pre&vious Temukan Seb&elumnya - + &Replace... &Gantikan... - + Ctrl+R Ctrl+R - + Smart &Quotes Kutipan &Cerdas - + Update &Document Perbarui &Dokumen - + Update &Selection Perbarui &Seleksi - + &Spelling... %Ejaan... - + F7 F7 - + &Timers... &Pengatur Waktu... - + S&ymbols... S&imbol... - + &Settings &Pengaturan - + Show &Toolbar Tampilkan &Bilah Alat - + Show &Menu Icons Tampilkan &Ikon Menu - + F&ocused Text Teks Yang Difokus - + &Fullscreen &Layar Penuh - + F11 F11 - + Esc Esc - + M&inimize M&inimize - + Ctrl+M Ctrl+M - + &Themes... &Tema... - + &Preferences... &Preferensi... - + Focus Off Fokus Mati - + Focus One Line Fokus Satu Baris - + Focus Three Lines Fokus Tiga Baris - + &Paragraph &Paragraf - + Focus Paragraph Fokus Paragraf - + &Help &Bantuan - + Application &Language... Bahasa &Aplikasi... @@ -1995,27 +1996,27 @@ Beberapa file tak didukung dan tak bisa dibuka. - + &Off &Mati - + One &Line Satu &Baris - + &Three Lines &Tiga Baris - + &About &Tentang - + About &Qt Tentang &Qt diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index fbe4ba02..699f4905 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - + Save File As Salva con nome - - + + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Reload File Ricarica File - + Reload the file %1 from disk? Ricaricare il file %1 dal disco? - + All unsaved changes will be lost. Tutte le modifiche non salvate verranno perse. - + Reload Ricarica - + Plain Text (*.txt) Testo semplice (*.txt) - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? - + OpenDocument Text (*.odt) OpenDocument (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Tutti i file (*) @@ -253,17 +253,17 @@ Highlighter - + Add Aggiungi - + Check Spelling... Controllo ortografico... - + (No suggestions found) (Nessun suggerimento trovato) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Non è un file RTF supportato. @@ -718,6 +718,7 @@ + Default Default @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temi - + Add Aggiungi - + Modify Modifica - + Remove Rimuovi - + Import Importa - + Export Export - + Close Chiudi - + Question Domanda - + Remove selected theme? Rimuovere il tema scelto? - + Import Theme Importa Tema - + Themes (*.fwtz *.theme) I temi (*.fwtz *.theme) - + Themes (*.fwtz) I temi (*.fwtz) - + Sorry Spiacente - + A theme already exists with that name. Please enter a new name: Esiste già un tema con quel nome. Si prega di inserire un nuovo nome: - + Export Theme Esporta Tema @@ -1397,105 +1398,105 @@ Caricamento temi - + Loading sounds Caricamento suoni - + Untitled Senza nome - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un semplice editor di testo a pieno schermo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Rilasciato sotto licenza <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilizza icone del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sotto licenza <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - + Pages: %L1 Pagine: %L1 - + Paragraphs: %L1 Paragrafi: %L1 - + Words: %L1 Parole: %L1 - + %1% of daily goal %1% dell' obiettivo giornaliero - - + + Opening %1 Apertura %1 - + Question Domanda - + Save changes? Salvare le modifiche? - + (Untitled %1) (Senza nome %1) @@ -1536,7 +1537,7 @@ - + Warning Attenzione @@ -1551,442 +1552,442 @@ Ripristinare dalla cache di emergenza? - + Some files could not be opened. Non è stato possibile aprire alcuni file. - + Some files were opened Read-Only. Alcuni file sono stati aperti in sola lettura. - + Text Files (%1);;All Files (*) File di testo (%1);;Tutti i file (*) - + '%1' is newer than the cached copy. '%1' è più recente della copia in cache. - + Overwrite newer file? Sovrascrivere il file più recente? - + Unable to load typewriter sounds. Impossibile caricare i suoni della macchina per scrivere. - + Please make sure that SDL_mixer is installed. Accertati che SDL_mixer sia installato. - + %1 (Read-Only) %1 (sola lettura) - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d Ricarica - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted Incolla &non formattato - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene Seleziona &scena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &Sostituisci... - + Ctrl+R Ctrl+R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... &Timer... - + S&ymbols... S&imboli - + &Settings &Impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text Testo a fuoco - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl+M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off Messa a fuoco disattivata - + Focus One Line Metti a fuoco una linea - + Focus Three Lines Metti a fuoco tre linee - + &Paragraph &Paragrafo - + Focus Paragraph Paragrafo a fuoco - + &Help &Aiuto - + Application &Language... Lingua &applicazione... @@ -1996,27 +1997,27 @@ Qualche file non è supportato e non è stato aperto. - + &Off Non attivo - + One &Line Una &Linea - + &Three Lines &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 51a0dcc0..f887e23f 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry エラー - + Unable to save '%1'. '%1' を保存できませんでした。 - + Save File As 名前を付けて保存 - - + + Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - + Rename File ファイル名の変更 - + Unable to rename '%1'. '%1' の名前を変更できませんでした。 - + Reload File ファイルを再読み込みする - + Reload the file %1 from disk? ファイル %1 を再読み込みしますか? - + All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - + Reload 再読み込み - + Plain Text (*.txt) テキスト文書 (*.txt) - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? - + OpenDocument Text (*.odt) OpenDocument 形式 (*.odt) - + Rich Text (*.rtf) リッチ テキスト形式 (*.rtf) - + All Files (*) すべてのファイル (*.*) @@ -252,17 +252,17 @@ Highlighter - + Add 追加 - + Check Spelling... スペルチェック... - + (No suggestions found) (修正候補は見つかりませんでした) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. サポートしていないリッチ テキスト形式です。 @@ -717,6 +717,7 @@ + Default デフォルト @@ -1166,77 +1167,77 @@ ThemeManager - + Themes テーマ - + Add 追加 - + Modify 編集 - + Remove 削除 - + Import インポート - + Export エクスポート - + Close 閉じる - + Question 確認 - + Remove selected theme? 選択中のテーマを削除しますか? - + Import Theme テーマのインポート - + Themes (*.fwtz *.theme) テーマ (*.fwtz *.theme) - + Themes (*.fwtz) テーマ (*.fwtz) - + Sorry エラー - + A theme already exists with that name. Please enter a new name: その名前のテーマは既にあります。他の名前を指定してください。 - + Export Theme テーマのエクスポート @@ -1396,105 +1397,105 @@ テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - + Untitled 無題 - + Open File 開く - + About FocusWriter FocusWriter について - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 文字数: %L1 / %L2 - + Pages: %L1 ページ数: %L1 - + Paragraphs: %L1 段落数: %L1 - + Words: %L1 単語数: %L1 - + %1% of daily goal 一日の目標の %1% - - + + Opening %1 %1 を開いています - + Question 確認 - + Save changes? 変更を保存しますか? - + (Untitled %1) (無題 %1) @@ -1535,7 +1536,7 @@ - + Warning 警告 @@ -1550,442 +1551,442 @@ 緊急用のキャッシュから復活させますか? - + Some files could not be opened. いくつかのファイルが開けませんでした。 - + Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - + Text Files (%1);;All Files (*) テキスト文書 (%1);;すべてのファイル (*) - + '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - + Overwrite newer file? 新しいファイルを上書きしますか? - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + %1 (Read-Only) %1 (読み込み専用) - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... @@ -1995,27 +1996,27 @@ いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index bfd0113c..e3b1858d 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry 죄송합니다 - + Unable to save '%1'. '%1' 파일을 저장할 수 없습니다. - + Save File As 다른 이름으로 저장 - - + + Unable to overwrite '%1'. '%1' 파일을 덮어쓸 수 없습니다. - + Rename File 파일 이름 바꾸기 - + Unable to rename '%1'. '%1' 파일의 이름을 바꿀 수 없습니다. - + Reload File 파일 다시 불러오기 - + Reload the file %1 from disk? 디스크에서 %1 파일을 다시 불러올까요? - + All unsaved changes will be lost. 저장하지 않은 바뀐 정보는 사라집니다. - + Reload 새로 고침 - + Plain Text (*.txt) 일반 텍스트 (*.txt) - + Question 물어볼 것이 있습니다. - + Saving as plain text will discard all formatting. Discard formatting? 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? - + OpenDocument Text (*.odt) 오픈 다큐먼트 텍스트 (*.odt) - + Rich Text (*.rtf) 서식 있는 텍스트 (*.rtf) - + All Files (*) 모든 파일 (*) @@ -252,17 +252,17 @@ Highlighter - + Add 더하기 - + Check Spelling... 맞춤법 검사 하기 - + (No suggestions found) (다른 대안을 찾지 못했습니다) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. 지원하는 RTF 파일이 아닙니다. @@ -717,6 +717,7 @@ + Default 기본 세션 @@ -1166,77 +1167,77 @@ ThemeManager - + Themes 테마 - + Add 더하기 - + Modify 설정하기 - + Remove 지우기 - + Import 가져오기 - + Export 내보내기 - + Close 닫기 - + Question 물어볼 것이 있습니다. - + Remove selected theme? 선택하신 테마를 지울까요? - + Import Theme 테마 가져오기 - + Themes (*.fwtz *.theme) 테마 (*.fwtz *.theme) - + Themes (*.fwtz) 테마 (*.fwtz) - + Sorry 죄송합니다 - + A theme already exists with that name. Please enter a new name: 같은 이름의 테마가 이미 있습니다. 다른 이름을 붙여주세요 : - + Export Theme 테마 내보내기 @@ -1396,105 +1397,105 @@ 테마 불러오는 중 - + Loading sounds 소리 불러오는 중 - + Untitled 제목 없음 - + Open File 파일 열기 - + About FocusWriter 포커스 라이터 란 - + FocusWriter 포커스 라이터 - + A simple fullscreen word processor 간편한 풀스크린 워드 프로세서 - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> 라이선스에 따라 배포됩니다. - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a>의 아이콘 테마를 이용합니다. - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> 의 라이선스를 준수합니다. - + Characters: %L1 / %L2 문자: %L1 / %L2 - + Pages: %L1 페이지: %L1 - + Paragraphs: %L1 문단: % L1 - + Words: %L1 단어: %L1 - + %1% of daily goal 오늘 목표의 %1% - - + + Opening %1 %1 열기 - + Question 물어볼 것이 있습니다 - + Save changes? 바뀐 내용을 저장하시겠습니까? - + (Untitled %1) (제목없음 %1) @@ -1535,7 +1536,7 @@ - + Warning 알림 @@ -1550,442 +1551,442 @@ 비상 캐시를 이용해서 복구할까요? - + Some files could not be opened. 몇몇 파일들이 열리지 않습니다. - + Some files were opened Read-Only. 몇몇 파일들이 일기 전용으로 열렸습니다. - + Text Files (%1);;All Files (*) 텍스트 파일 (%1);;모든 파일 (*) - + '%1' is newer than the cached copy. '%1' 이 캐시에 복사된 것보다 새것입니다. - + Overwrite newer file? 새 파일로 덮어쓸까요? - + Unable to load typewriter sounds. 타자기 소리가 나지 않습니다. - + Please make sure that SDL_mixer is installed. SDL_mixer 이 설치되어있나 확인해 주세요 - + %1 (Read-Only) %1 (읽기 전용) - + &File &파일 - + &New &새로 만들기 - + &Open... &열기... - + Reloa&d &새로 고침 - + &Save &저장 - + Save &As... &다른 이름으로 저장... - + &Rename... &이름 바꾸기... - + Save A&ll &모두 저장하기 - + Manage Sessions 세션 관리하기 - + New Session 새 세션 - + &Print... &프린트... - + &Close &닫기 - + &Quit &끝내기 - + Ctrl+Q Ctrl+Q - + &Edit &편집 - + &Undo &뒤로 무르기 - + &Redo &다시 적용 - + Cu&t &자르기 - + &Copy &복사 - + &Paste &붙여넣기 - + Paste &Unformatted &서식을 유지한 채 붙여넣기 - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &모두 선택 - + Select &Scene &화면 선택 - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &형식 - + &Bold &볼드 - + &Italic &이탤릭 - + &Underline &밑줄 긋기 - + Stri&kethrough &가운데 줄긋기 - + Ctrl+K Ctrl+K - + Sup&erscript &위 첨자 - + Ctrl+^ Ctrl+^ - + &Subscript &아래 첨자 - + Ctrl+_ Ctrl+_ - + Align &Left &왼쪽 끝 맞춤 - + Ctrl+{ Ctrl+{ - + Align &Center &가운데 줄맞춤 - + Ctrl+| Ctrl+| - + Align &Right &오른쪽 끝 맞춤 - + Ctrl+} Ctrl+} - + Align &Justify &양끝 맞춤 - + Ctrl+J Ctrl+J - + &Decrease Indent &들여 쓰기 - + Ctrl+< Ctrl+< - + I&ncrease Indent &내어 쓰기 - + Ctrl+> Ctrl+> - + Le&ft to Right Block &왼쪽에서 오른쪽으로 쓰기 시작 - + Ri&ght to Left Block &오른쪽에서 왼쪽으로 쓰기 시작 - + &Tools &도구 - + &Find... &찾기 - + Find &Next &다음에서 찾기 - + Find Pre&vious &이전에서 찾기 - + &Replace... &바꾸기 - + Ctrl+R Ctrl+R - + Smart &Quotes &지능형 따옴표 - + Update &Document &문서에 적용 - + Update &Selection &선택한 내용 적용 - + &Spelling... &맞춤법 - + F7 F7 - + &Timers... &타이머 - + S&ymbols... &부호들... - + &Settings &설정 - + Show &Toolbar &툴바 보이기 - + Show &Menu Icons &메뉴 아이콘 보이기 - + F&ocused Text &포커스 텍스트 - + &Fullscreen &전체 화면 - + F11 F11 - + Esc Esc - + M&inimize &최소화 - + Ctrl+M Ctrl+M - + &Themes... &테마 - + &Preferences... &설정 - + Focus Off 포커스 끔 - + Focus One Line 한 줄 포커스 - + Focus Three Lines 세 줄 포커스 - + &Paragraph &문단 - + Focus Paragraph 문단 포커스 - + &Help &도움말 - + Application &Language... &프로그램 언어 설정 @@ -1995,27 +1996,27 @@ 지원되지 않는 파일이 있어서 열 수 없습니다. - + &Off &사용 안함 - + One &Line &한 줄 - + &Three Lines &세 줄 - + &About &FocusWriter 소개 - + About &Qt &Qt 소개 diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index f7222630..24c37f24 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - + Save File As Opslaan als - - + + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Reload File Bestand herladen - + Reload the file %1 from disk? Bestand %1 herladen van disk ? - + All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - + Reload Herladen - + Plain Text (*.txt) Platte tekst (*.txt) - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? - + OpenDocument Text (*.odt) OpenDocument Tekst (*.odt) - + Rich Text (*.rtf) Rich Text(*.rtf) - + All Files (*) Alle bestanden (*) @@ -253,17 +253,17 @@ Highlighter - + Add Toevoegen - + Check Spelling... Spelling controleren ... - + (No suggestions found) (geen suggestie gevonden) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Geen odnersteund RTF bestand. @@ -718,6 +718,7 @@ + Default Standaard @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Thema's - + Add Toevoegen - + Modify Aanpassen - + Remove Verwijderen - + Import Importeren - + Export Exporteren - + Close Afsluiten - + Question Vraag - + Remove selected theme? Geselecteerde thema verwijderen? - + Import Theme Thema importeren - + Themes (*.fwtz *.theme) Thema's (*.fwtz *.theme) - + Themes (*.fwtz) Thema's (*.fwtz) - + Sorry Sorry - + A theme already exists with that name. Please enter a new name: Deze naam wordt al voor een thema gebruikt. Kies een andere naam - + Export Theme Thema exporteren @@ -1397,105 +1398,105 @@ Thema wordt geladen - + Loading sounds Geluiden worden geladen - + Untitled Unbenannt - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Een simpele schermvullende tekstverwerker - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - + Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - + Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - + Characters: %L1 / %L2 Tekens: %L1 / %L2 - + Pages: %L1 Pagina's: %L1 - + Paragraphs: %L1 Paragrafen: %L1 - + Words: %L1 Woorden: %L1 - + %1% of daily goal %1% van het dagdoel - - + + Opening %1 Bestand %1 wordt geopend - + Question Vraag - + Save changes? Wijzigingen opslaan? - + (Untitled %1) (naamloos %1) @@ -1536,7 +1537,7 @@ - + Warning Waarschuwing @@ -1551,442 +1552,442 @@ Veiligheidskopie herstellen? - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + Text Files (%1);;All Files (*) Tekst-bestanden (%1);;Alle Bestanden (*) - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + %1 (Read-Only) %1 (schrijfbeveiligd) - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... @@ -1996,27 +1997,27 @@ Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index ee7928ac..bfdcd86a 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - + Save File As Zapisz plik jako - - + + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Reload File Wczytaj ponownie - + Reload the file %1 from disk? Wczytaj ponownie plik %1 z dysku? - + All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - + Reload Wczytaj ponownie - + Plain Text (*.txt) Zwykły tekst (*.txt) - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? - + OpenDocument Text (*.odt) Dokument tekstowy OpenDocument (*.odt) - + Rich Text (*.rtf) Tekst z formatowaniem (*.rtf) - + All Files (*) Wszystkie pliki (*) @@ -254,17 +254,17 @@ Highlighter - + Add Dodaj - + Check Spelling... Sprawdź pisownię... - + (No suggestions found) (Nie znaleziono propozycji) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. To nie jest obsługiwany plik RTF. @@ -719,6 +719,7 @@ + Default Domyślna @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Motywy - + Add Dodaj - + Modify Modyfikuj - + Remove Usuń - + Import Importuj - + Export Eksportuj - + Close Zamknij - + Question Pytanie - + Remove selected theme? Usunąć wybrany motyw? - + Import Theme Importuj motyw - + Themes (*.fwtz *.theme) Motywy (*.fwtz *.theme) - + Themes (*.fwtz) Motywy (*.fwtz) - + Sorry Przepraszam - + A theme already exists with that name. Please enter a new name: Motyw z podaną nazwą już istnieje. Proszę wybrać inną nazwę: - + Export Theme Eksportuj motyw @@ -1398,105 +1399,105 @@ Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - + Untitled Bez tytułu - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaki: %L1 / %L2 - + Pages: %L1 Strony: %L1 - + Paragraphs: %L1 Akapity: %L1 - + Words: %L1 Słowa: %L1 - + %1% of daily goal %1% dziennego celu - - + + Opening %1 Otwieranie %1 - + Question Pytanie - + Save changes? Zapisać zmiany? - + (Untitled %1) (Bez tytułu %1) @@ -1537,7 +1538,7 @@ - + Warning Ostrzeżenie @@ -1552,442 +1553,442 @@ Przywrócić z bufora awaryjnego? - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + Text Files (%1);;All Files (*) Pliki tekstowe (%1);;Wszystkie pliki (*) - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + %1 (Read-Only) %1 (Tylko-do-odczytu) - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... @@ -1997,27 +1998,27 @@ Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 866ffd4d..3663c9a8 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - + Save File As Guardar como - - + + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Reload File Carregar de novo o ficheiro - + Reload the file %1 from disk? Carregar de novo o ficheiro %1 a partir do disco? - + All unsaved changes will be lost. As alterações que não forem gravadas serão perdidas. - + Reload Carregar de novo - + Plain Text (*.txt) Texto simples (*.txt) - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? - + OpenDocument Text (*.odt) Texto OpenDocument (*.odt) - + Rich Text (*.rtf) Texto rico (*.rtf) - + All Files (*) Todos os ficheiros (*) @@ -253,17 +253,17 @@ Highlighter - + Add Adicionar - + Check Spelling... Verificação ortográfica... - + (No suggestions found) (Nenhuma sugestão encontrada) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Formato de texto rico RTF não reconhecido. @@ -718,6 +718,7 @@ + Default Sessão predefinida @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temas - + Add Adicionar - + Modify Alterar - + Remove Eliminar - + Import Importar - + Export Exportar - + Close Fechar - + Question Pergunta - + Remove selected theme? Eliminar o tema seleccionado? - + Import Theme Importar um tema - + Themes (*.fwtz *.theme) Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - + Sorry Desculpe - + A theme already exists with that name. Please enter a new name: Um outro tema com o mesmo nome já existe. Entre por favor um outro nome : - + Export Theme Exportar o tema @@ -1397,105 +1398,105 @@ Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - + Untitled Sem título - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de texto simples em ecrã completo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palávras: %L1 - + %1% of daily goal %1% do objectivo do dia - - + + Opening %1 A abrir %1 - + Question Pergunta - + Save changes? Guardar alterações? - + (Untitled %1) (Sem título %1) @@ -1536,7 +1537,7 @@ - + Warning Atenção @@ -1551,442 +1552,442 @@ Recuperar dados do cache de emergência? - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + Text Files (%1);;All Files (*) Ficheiros de texto (%1);;Todos os ficheiros (*) - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + %1 (Read-Only) %1 (apenas para leitura) - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... @@ -1996,27 +1997,27 @@ Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 5a970a85..e75672e1 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - + Save File As Salvar como - - + + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Reload File Recarregar o arquivo - + Reload the file %1 from disk? Recarregar o arquivo %1 do disco? - + All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - + Reload Recarregar - + Plain Text (*.txt) Texto simples (*.txt) - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? - + OpenDocument Text (*.odt) Texto do OpenDocument (*.odt) - + Rich Text (*.rtf) Texto formatado (*.rtf) - + All Files (*) Todos os arquivos (*) @@ -253,17 +253,17 @@ Highlighter - + Add Adicionar - + Check Spelling... Verificação ortográfica... - + (No suggestions found) (Sem sugestões) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. Não é um arquivo RTF suportado. @@ -718,6 +718,7 @@ + Default Padrão @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Temas - + Add Adicionar - + Modify Alterar - + Remove Remover - + Import Importar - + Export Exportar - + Close Fechar - + Question Pergunta - + Remove selected theme? Remover tema selecionado? - + Import Theme Importar tema - + Themes (*.fwtz *.theme) Temas (*.fwtz *.theme) - + Themes (*.fwtz) Temas (*.fwtz) - + Sorry Desculpe - + A theme already exists with that name. Please enter a new name: Já existe um tema com este nome. Por favor, digite um novo nome: - + Export Theme Exportar tema @@ -1397,105 +1398,105 @@ Carregando temas - + Loading sounds Carregando sons - + Untitled Sem título - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - + Pages: %L1 Páginas: %L1 - + Paragraphs: %L1 Parágrafos: %L1 - + Words: %L1 Palavras: %L1 - + %1% of daily goal %1% do objetivo diário - - + + Opening %1 Abrindo %1 - + Question Pergunta - + Save changes? Salvar alterações? - + (Untitled %1) (Sem título %1) @@ -1536,7 +1537,7 @@ - + Warning Aviso @@ -1551,442 +1552,442 @@ Restaurar a partir do cache de emergência? - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + Text Files (%1);;All Files (*) Arquivos de texto (%1);;Todos os arquivos (*) - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + %1 (Read-Only) %1 (Somente leitura) - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... @@ -1996,27 +1997,27 @@ Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 43d66b76..ae4019ba 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Scuze - + Unable to save '%1'. Nu se poate salva '%1'. - + Save File As Salvează fişierul ca - - + + Unable to overwrite '%1'. Nu se poate suprascrie'%1'. - + Rename File Redenumire fişier - + Unable to rename '%1'. Nu se poate redenumi '%1'. - + Reload File Reîncarcă fişier - + Reload the file %1 from disk? Reîncarcă fişierul %1? - + All unsaved changes will be lost. Toate modificările nesalvate vor fi pierdute - + Reload Reîncarcă - + Plain Text (*.txt) Text simplu (*.txt) - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? - + OpenDocument Text (*.odt) Text OpenDocument (*.odt) - + Rich Text (*.rtf) Text îmbogăţit (*.rtf) - + All Files (*) Toate fişierele (*) @@ -254,17 +254,17 @@ Highlighter - + Add Adaugă - + Check Spelling... Verificare ortografică... - + (No suggestions found) (Nu s-au găsit sugestii) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Fişier RTF nesuportat. @@ -719,6 +719,7 @@ + Default Iniţial @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Teme - + Add Adăugare - + Modify Modificare - + Remove Înlăturare - + Import Import - + Export Export - + Close Închide - + Question Întrebare - + Remove selected theme? Înlătură tema selectată? - + Import Theme Importare temă - + Themes (*.fwtz *.theme) Teme (*.fwtz *.theme) - + Themes (*.fwtz) Teme (*.fwtz) - + Sorry Scuze - + A theme already exists with that name. Please enter a new name: Există deja o temă cu acest nume. Vă rugăm tastaţi un alt nume: - + Export Theme Exportare temă @@ -1398,105 +1399,105 @@ Încărcare teme - + Loading sounds Încărcare sunete - + Untitled FărăTitlu - + Open File Deschide fişier - + About FocusWriter Despre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesor simplu de text pe tot ecranul - + Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Foloseşte iconuri din tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Folosit sub licenţă <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Caractere: %L1 / %L2 - + Pages: %L1 Pagini: %L1 - + Paragraphs: %L1 Paragrafe: %L1 - + Words: %L1 Cuvinte: %L1 - + %1% of daily goal %1% din obiectiv zilnic - - + + Opening %1 Deschidere %1 - + Question Întrebare - + Save changes? Salvaţi modificările? - + (Untitled %1) (Fără titlu %1) @@ -1537,7 +1538,7 @@ - + Warning Avertisment @@ -1552,442 +1553,442 @@ Restaurare din memoria cache de urgenţă? - + Some files could not be opened. Unele fişiere nu au putut fi deschise. - + Some files were opened Read-Only. Unele fişiere au fost deschise în mod doar-citire. - + Text Files (%1);;All Files (*) Fişiere text (%1);;Toate fişierele (*) - + '%1' is newer than the cached copy. '%1' este mai nou decît copia din cache. - + Overwrite newer file? Suprascrie noul fişier? - + Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - + Please make sure that SDL_mixer is installed. Vă rugăm să vă asiguraţi că SDL_mixer este instalat. - + %1 (Read-Only) %1 (Doar-citire) - + &File &Fişier - + &New &Nou - + &Open... &Deschide... - + Reloa&d Reîncarcă - + &Save &Salvare - + Save &As... Salvare c&a... - + &Rename... &Redenumire... - + Save A&ll Salvează tot - + Manage Sessions Gestionare sesiuni - + New Session Sesiune nouă - + &Print... Imprimare... - + &Close Închide - + &Quit &Ieşire - + Ctrl+Q Ctrl+Q - + &Edit &Editare - + &Undo Anulează - + &Redo Reface - + Cu&t &Taie - + &Copy &Copiază - + &Paste &Lipeşte - + Paste &Unformatted Lipire neformatat - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selectează &tot - + Select &Scene Selectare &scenă - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatare - + &Bold Îngroşat - + &Italic &Italic - + &Underline S&ubliniat - + Stri&kethrough &Tăiat - + Ctrl+K Ctrl+K - + Sup&erscript Exponent - + Ctrl+^ Ctrl+^ - + &Subscript Indice - + Ctrl+_ Ctrl+_ - + Align &Left Aliniere la &stînga - + Ctrl+{ Ctrl+{ - + Align &Center Aliniere la &centru - + Ctrl+| Ctrl+| - + Align &Right Aliniere la &dreapta - + Ctrl+} Ctrl+} - + Align &Justify Aliniere stînga-dreapta - + Ctrl+J Ctrl+J - + &Decrease Indent Mărire alineat - + Ctrl+< Ctrl+< - + I&ncrease Indent Micşorare alineat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloc stînga-dreapta - + Ri&ght to Left Block Bloc dreapta-stînga - + &Tools &Unelte - + &Find... &Caută... - + Find &Next Caută &următorul - + Find Pre&vious Caută &precedent - + &Replace... Înlocuire... - + Ctrl+R Ctrl+R - + Smart &Quotes Ghilimele inteligente - + Update &Document Actualizare &document - + Update &Selection Actualizare &selecţie - + &Spelling... &Ortografie... - + F7 F7 - + &Timers... Cronometre... - + S&ymbols... S&imboluri... - + &Settings &Setări - + Show &Toolbar Arată bară de unelte - + Show &Menu Icons Arată iconuri &meniu - + F&ocused Text Text f&ocalizat - + &Fullscreen &Tot ecranul - + F11 F11 - + Esc Esc - + M&inimize M&inimizare - + Ctrl+M Ctrl+M - + &Themes... &Teme... - + &Preferences... &Preferinţe... - + Focus Off Focaliuzare oprită - + Focus One Line Focalizare o linie - + Focus Three Lines Focalizare trei linii - + &Paragraph &Paragraf - + Focus Paragraph Focalizare paragraf - + &Help &Ajutor - + Application &Language... Limbă aplicaţie... @@ -1997,27 +1998,27 @@ Unele fişiere au fost nesuportate şi nu au putut fi deschide. - + &Off &Oprit - + One &Line O &linie - + &Three Lines &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 03580e92..01232a84 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Извините - + Unable to save '%1'. Невозможно сохранить '%1'. - + Save File As Сохранить как - - + + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Reload File Открыть файл заново - + Reload the file %1 from disk? Действительно заново открыть файл %1? - + All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - + Reload Открыть заново - + Plain Text (*.txt) Простой текст (*.txt) - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? - + OpenDocument Text (*.odt) OpenDocument (*.odt) - + Rich Text (*.rtf) Текст с форматированием (*.rtf) - + All Files (*) Все файлы (*) @@ -254,17 +254,17 @@ Highlighter - + Add Добавить - + Check Spelling... Проверить правописание... - + (No suggestions found) (Нет вариантов) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Неподдерживаемый файл RTF. @@ -719,6 +719,7 @@ + Default По умолчанию @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Темы - + Add Добавить - + Modify Изменить - + Remove Удалить - + Import Импорт - + Export Экспорт - + Close Закрыть - + Question Вопрос - + Remove selected theme? Удалить выбранную тему? - + Import Theme Импортировать тему - + Themes (*.fwtz *.theme) Темы (*.fwtz *.theme) - + Themes (*.fwtz) Темы (*.fwtz) - + Sorry Извините - + A theme already exists with that name. Please enter a new name: Тема с таким названием уже существует. Выберите другое название: - + Export Theme Экспортировать тему @@ -1398,105 +1399,105 @@ Загружаются темы - + Loading sounds Загружаются звуки - + Untitled Безымянный - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Простой полноэкранный текстовый редактор - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Символов: %L1 / %L2 - + Pages: %L1 Страниц: %L1 - + Paragraphs: %L1 Абзацев: %L1 - + Words: %L1 Слов: %L1 - + %1% of daily goal %1% от дневной задачи - - + + Opening %1 Открывается %1 - + Question Вопрос - + Save changes? Сохранить изменения? - + (Untitled %1) (Безымянный %1) @@ -1537,7 +1538,7 @@ - + Warning Предупреждение @@ -1552,442 +1553,442 @@ Восстановить открытые файлы из резервной памяти? - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + Text Files (%1);;All Files (*) Текстовые файлы (%1);;Все файлы (*) - + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. Проверьте, установлен ли пакет SDL_mixer. - + %1 (Read-Only) %1 (Только для чтения) - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d Откр&ыть заново - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&е - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted Вставить без &форматирования - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene Выбрать &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + &Timers... &Таймеры... - + S&ymbols... Сим&волы... - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text Подсве&тка текста - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off Отключена - + Focus One Line На одной строке - + Focus Three Lines На трёх строках - + &Paragraph &На абзаце - + Focus Paragraph На абзаце - + &Help Спр&авка - + Application &Language... &Язык приложения... @@ -1997,27 +1998,27 @@ Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off &Выключено - + One &Line Одна ст&рока - + &Three Lines &Три строки - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index fc79db4d..c5695671 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Prepáčte - + Unable to save '%1'. Nedá sa uložiť '%1'. - + Save File As Uložiť súbor ako - - + + Unable to overwrite '%1'. Nedá sa prepísať '%1'. - + Rename File Premenovať súbor - + Unable to rename '%1'. Nedá sa premenovať '%1'. - + Reload File Opätovne načítať súbor - + Reload the file %1 from disk? Opätovne načítať súbor %1 z disku? - + All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - + Reload Opätovne načítať - + Plain Text (*.txt) Obyčajný text (*.txt) - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Všetky súbory (*) @@ -254,17 +254,17 @@ Highlighter - + Add Pridať - + Check Spelling... Kontrola pravopisu... - + (No suggestions found) (Žiadne návrhy neboli nájdené) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Nepodporovaný súbor RTF. @@ -719,6 +719,7 @@ + Default Prednastavený @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Témy - + Add Pridať - + Modify Upraviť - + Remove Odstrániť - + Import Importovať - + Export Exportovať - + Close Zavrieť - + Question Otázka - + Remove selected theme? Odstrániť vybranú tému? - + Import Theme Importovať tému - + Themes (*.fwtz *.theme) Témy (*.fwtz *.theme) - + Themes (*.fwtz) Témy (*.fwtz) - + Sorry Prepáčte - + A theme already exists with that name. Please enter a new name: Téma s týmto názvom už existuje. Prosím, zadajte nový názov: - + Export Theme Exportovať tému @@ -1398,105 +1399,105 @@ Načítavanie tém - + Loading sounds Načítavanie zvukov - + Untitled Bez názvu - + Open File Otvoriť súbor - + About FocusWriter O programe FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - + Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Znaky: %L1 / %L2 - + Pages: %L1 Strany: %L1 - + Paragraphs: %L1 Odstavce: %L1 - + Words: %L1 Slová: %L1 - + %1% of daily goal %1% denného cieľa - - + + Opening %1 Otváranie %1 - + Question Otázka - + Save changes? Uložiť zmeny? - + (Untitled %1) (Bez názvu %1) @@ -1537,7 +1538,7 @@ - + Warning Upozornenie @@ -1552,442 +1553,442 @@ Obnoviť z vyrovnávacej pamäti. - + Some files could not be opened. Niektoré súbory nemohli byť otvorené. - + Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - + Text Files (%1);;All Files (*) Textové súbory (%1);;Všetky súbory (*) - + '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - + Overwrite newer file? Prepísať novší súbor? - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + %1 (Read-Only) %1 (Iba na čítanie) - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... @@ -1997,27 +1998,27 @@ Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 998794c4..65d579eb 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Извините - + Unable to save '%1'. Онемогућено чување '%1'. - + Save File As Сачувај фајл као - - + + Unable to overwrite '%1'. Онемогућено да пребрише '%1'. - + Rename File Преименуј фајл - + Unable to rename '%1'. Онемогућено преименовање '%1'. - + Reload File Поново учитај фајл - + Reload the file %1 from disk? Поново учитај фајл %1 са диска? - + All unsaved changes will be lost. Све несачуване промене ће бити изгубљене. - + Reload Поново учитај - + Plain Text (*.txt) Чист текст (*.txt) - + Question Питање - + Saving as plain text will discard all formatting. Discard formatting? Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? - + OpenDocument Text (*.odt) OpenDocument текст (*.odt) - + Rich Text (*.rtf) Обогаћени текст (*.rtf) - + All Files (*) Сви фајлови (*) @@ -254,17 +254,17 @@ Highlighter - + Add Додај - + Check Spelling... Провери правопис... - + (No suggestions found) (Без пронађене сугестије) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Није подржан RTF фајл. @@ -719,6 +719,7 @@ + Default Подразумевано @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Теме - + Add Додај - + Modify Измени - + Remove Уклони - + Import Увези - + Export Извези - + Close Затвори - + Question Питање - + Remove selected theme? Уклони одабрану тему? - + Import Theme Увези тему - + Themes (*.fwtz *.theme) Теме (*.fwtz *.theme) - + Themes (*.fwtz) Теме (*.fwtz) - + Sorry Извините - + A theme already exists with that name. Please enter a new name: Тема већ постоји са овим именом. Молимо унесите ново име: - + Export Theme Извези тему @@ -1398,105 +1399,105 @@ Учитавање тема - + Loading sounds Учитавање звука - + Untitled Без наслова - + Open File Отвори фајл - + About FocusWriter О програму FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Једноставан обрађивач текста на пуном екрану - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Реализовано под <a href=%1>GPL 3</a> лиценцом - + Uses icons from the <a href=%1>Oxygen</a> icon theme Користи иконе из <a href=%1>Oxygen</a> теме икона - + Used under the <a href=%1>LGPL 3</a> license Коришћен под <a href=%1>LGPL 3</a> лиценцом - + Characters: %L1 / %L2 Карактери: %L1 / %L2 - + Pages: %L1 Стране: %L1 - + Paragraphs: %L1 Параграфи: %L1 - + Words: %L1 Речи: %L1 - + %1% of daily goal %1% од дневног циља - - + + Opening %1 Oтварање %1 - + Question Питање - + Save changes? Сачувај промене? - + (Untitled %1) (Без наслова %1) @@ -1537,7 +1538,7 @@ - + Warning Упозорење @@ -1552,442 +1553,442 @@ Враћање из ургентног кеша? - + Some files could not be opened. Неки фајлови нису могли бити отворени. - + Some files were opened Read-Only. Неки фајлови су отворени само за читање. - + Text Files (%1);;All Files (*) Текстуални фајлови (%1);;Сви фајлови (*) - + '%1' is newer than the cached copy. '%1' је новије од кеширане копије. - + Overwrite newer file? Пребиши новији фајл? - + Unable to load typewriter sounds. Онемогућено учитавање звука писаће машине. - + Please make sure that SDL_mixer is installed. Молимо проверите да ли је SDL_миксер инсталиран. - + %1 (Read-Only) %1 (Само за читање) - + &File &Фајл - + &New &Нови - + &Open... &Отвори... - + Reloa&d Поно&во учитај - + &Save &Сачувај - + Save &As... Сачувај &као... - + &Rename... &Преименуј... - + Save A&ll Сачувај с&ве - + Manage Sessions Управљај сесијама - + New Session Нова сесија - + &Print... &Штампај... - + &Close &Затвори - + &Quit &Напусти - + Ctrl+Q Ctrl+Q - + &Edit &Измени - + &Undo &Опозови - + &Redo &Поново уради - + Cu&t Исе&ци - + &Copy &Копирај - + &Paste &Налепи - + Paste &Unformatted Налепи &неформатирано - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Одабери &све - + Select &Scene Одабери &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Фо&рмат - + &Bold &Подебљано - + &Italic &Искошено - + &Underline &Подвучено - + Stri&kethrough Пре&цртано - + Ctrl+K Ctrl+K - + Sup&erscript Екс&понент - + Ctrl+^ Ctrl+^ - + &Subscript &Индекс - + Ctrl+_ Ctrl+_ - + Align &Left Поравнај &лево - + Ctrl+{ Ctrl+{ - + Align &Center Поравнај &на центар - + Ctrl+| Ctrl+| - + Align &Right Поравнај &десно - + Ctrl+} Ctrl+} - + Align &Justify Поравнај &обострано - + Ctrl+J Ctrl+J - + &Decrease Indent &Смањи увлачење - + Ctrl+< Ctrl+< - + I&ncrease Indent П&овећај увлачење - + Ctrl+> Ctrl+> - + Le&ft to Right Block Ле&во на десно блок - + Ri&ght to Left Block Де&сно на лево блок - + &Tools &Алати - + &Find... &Пронађи... - + Find &Next Пронађи &следеће - + Find Pre&vious Пронађи пре&тходно - + &Replace... &Замени... - + Ctrl+R Ctrl+R - + Smart &Quotes Паметни &цитати - + Update &Document Ажурирај &документ - + Update &Selection Ажурирај &одабир - + &Spelling... &Правопис... - + F7 F7 - + &Timers... &Tајмери... - + S&ymbols... С&имболи... - + &Settings &Подешавање - + Show &Toolbar Покажи &траку алата - + Show &Menu Icons Покажи &иконе менија - + F&ocused Text Ф&окусирани текст - + &Fullscreen &Пун екран - + F11 F11 - + Esc Esc - + M&inimize M&инимизуј - + Ctrl+M Ctrl+M - + &Themes... &Tеме... - + &Preferences... &Подешавања... - + Focus Off Фокусирање искључено - + Focus One Line Фокусирање једне линије - + Focus Three Lines Фокусирање три линије - + &Paragraph &Параграф - + Focus Paragraph Фокусирај параграф - + &Help &Помоћ - + Application &Language... Језик &програма... @@ -1997,27 +1998,27 @@ Неки фајлови нису подржани и не могу бити отворени. - + &Off &Искључено - + One &Line Једна &линија - + &Three Lines &Три линије - + &About &О програму - + About &Qt О &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index acbc20a6..6d726b6e 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - + Save File As Spara fil som - - + + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Reload File Läs om fil - + Reload the file %1 from disk? Läs om filen %1 från disk? - + All unsaved changes will be lost. Alla osparade ändringar kommer att gå förlorade. - + Reload Läs om - + Plain Text (*.txt) Vanlig text (*.txt) - + Question Fråga - + Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? - + OpenDocument Text (*.odt) OpenDocument-text (*.odt) - + Rich Text (*.rtf) Rich Text (*.rtf) - + All Files (*) Alla filer (*) @@ -253,17 +253,17 @@ Highlighter - + Add Lägg till - + Check Spelling... Kontrollera stavning... - + (No suggestions found) (Inga förslag hittades) @@ -634,8 +634,8 @@ Reader - - + + Not a supported RTF file. RTF-filen stöds inte. @@ -718,6 +718,7 @@ + Default Standard @@ -1167,77 +1168,77 @@ ThemeManager - + Themes Teman - + Add Lägg till - + Modify Ändra - + Remove Ta bort - + Import Importera - + Export Exportera - + Close Stäng - + Question Fråga - + Remove selected theme? Ta bort markerat tema? - + Import Theme Importera tema - + Themes (*.fwtz *.theme) Teman (*.fwtz *.theme) - + Themes (*.fwtz) Teman (*.fwtz) - + Sorry Tyvärr - + A theme already exists with that name. Please enter a new name: Ett tema finns redan med det namnet. Ange ett nytt namn: - + Export Theme Exportera tema @@ -1397,105 +1398,105 @@ Läser in teman - + Loading sounds Läser in ljud - + Untitled Namnlös - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor En enkel ordbehandlare med helskärmsläge - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Släppt under licensen <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Använder ikoner från ikontemat <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Använda under licensen <a href=%1>GPL 3</a> - + Characters: %L1 / %L2 Tecken: %L1 / %L2 - + Pages: %L1 Sidor: %L1 - + Paragraphs: %L1 Stycken: %L1 - + Words: %L1 Ord: %L1 - + %1% of daily goal %1 % av dagligt mål - - + + Opening %1 Öppnar %1 - + Question Fråga - + Save changes? Spara ändringar? - + (Untitled %1) (Namnlös %1) @@ -1536,7 +1537,7 @@ - + Warning Varning @@ -1551,442 +1552,442 @@ Återställ från nödcachen? - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + Text Files (%1);;All Files (*) Textfiler (%1);;Alla filer (*) - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. Se till att SDL_mixer är installerat. - + %1 (Read-Only) %1 (skrivskyddad) - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d Läs in &igen - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted Klistra in &oformaterat - + Ctrl+Shift+V Ctrl+Skift+V - + Select &All Markera &allt - + Select &Scene Välj &scen - + Ctrl+Shift+A Ctrl+Skift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indrag - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&drag - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + &Timers... &Tidtagare... - + S&ymbols... S&ymboler... - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text F&okuserad text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off Fokus av - + Focus One Line Fokusera en rad - + Focus Three Lines Fokusera tre rader - + &Paragraph &Stycke - + Focus Paragraph Fokusera stycke - + &Help &Hjälp - + Application &Language... Programs&pråk... @@ -1996,27 +1997,27 @@ Några filer stöds inte och kunde inte öppnas. - + &Off &Av - + One &Line En &rad - + &Three Lines &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 2ca9b502..c943e659 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Üzgünüm - + Unable to save '%1'. '%1' kaydedilemedi. - + Save File As Dosyayı Farklı Kaydet - - + + Unable to overwrite '%1'. '%1' üzerine yazılamadı. - + Rename File Dosyayı Yeniden Adlandır - + Unable to rename '%1'. '%1' yeniden adlandırılamadı. - + Reload File Dosyayı Yeniden Yükle - + Reload the file %1 from disk? %1 dosyası diskten yeniden yüklensin mi? - + All unsaved changes will be lost. Tüm kaydedilmemiş değişiklikler kaybedilecektir. - + Reload Yeniden Yükle - + Plain Text (*.txt) Düz Metin (*.txt) - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? - + OpenDocument Text (*.odt) OpenDocument Metni (*.odt) - + Rich Text (*.rtf) Zengin Metin (*.rtf) - + All Files (*) Tüm Dosyalar (*) @@ -252,17 +252,17 @@ Highlighter - + Add Ekle - + Check Spelling... Yazım Denetimi Yap... - + (No suggestions found) (Öneri bulunamadı) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. Desteklenen bir RTF dosyası değil. @@ -717,6 +717,7 @@ + Default Varsayılan @@ -1166,77 +1167,77 @@ ThemeManager - + Themes Temalar - + Add Ekle - + Modify Düzenle - + Remove Kaldır - + Import Al - + Export Ver - + Close Kapat - + Question Soru - + Remove selected theme? Seçili temayı silinsin mi? - + Import Theme Temayı Al - + Themes (*.fwtz *.theme) Temalar (*.fwtz *.theme) - + Themes (*.fwtz) Temalar (*.fwtz) - + Sorry Üzgünüm - + A theme already exists with that name. Please enter a new name: Zaten bu isimde bir tema var. Lütfen yeni bir isim girin: - + Export Theme Temayı Ver @@ -1396,105 +1397,105 @@ Temalar yükleniyor - + Loading sounds Sesler yükleniyor - + Untitled Başlıksız - + Open File Dosyayı Aç - + About FocusWriter FocusWriter Hakkında - + FocusWriter FocusWriter - + A simple fullscreen word processor Basit bir tam ekran kelime işlemci - + Copyright &copy; 2008-%1 Graeme Gott Telif hakları saklıdır &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> simge temasından simgeler kullanılıyor - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>GPL 3</a> lisansı altında kullanılıyor - + Characters: %L1 / %L2 Karakter: %L1 / %L2 - + Pages: %L1 Sayfa: %L1 - + Paragraphs: %L1 Paragraf: %L1 - + Words: %L1 Kelime: %L1 - + %1% of daily goal Günlük hedefin %1% bölümü - - + + Opening %1 %1 açılıyor - + Question Soru - + Save changes? Değişikler kaydedilsin mi? - + (Untitled %1) (Başlıksız %1) @@ -1535,7 +1536,7 @@ - + Warning Uyarı @@ -1550,442 +1551,442 @@ Acil önbellekten kurtarılsın mı? - + Some files could not be opened. Bazı dosyalar açılamadı. - + Some files were opened Read-Only. Bazı dosyalar salt okunur olarak açıldı. - + Text Files (%1);;All Files (*) Metin Dosyaları (%1);;Tüm Dosyalar (*) - + '%1' is newer than the cached copy. '%1' önbelleğe alınmış kopyadan daha yeni. - + Overwrite newer file? Daha yeni dosyanın üzerine yazılsın mı? - + Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - + Please make sure that SDL_mixer is installed. SDL_mixer'ın yüklü olduğundan emin olun. - + %1 (Read-Only) %1 (Salt Okunur) - + &File &Dosya - + &New &Yeni - + &Open... &Aç... - + Reloa&d &Yeniden Yükle - + &Save &Kaydet - + Save &As... &Farklı Kaydet... - + &Rename... Yeni &İsim Ver... - + Save A&ll &Tümünü Kaydet - + Manage Sessions Oturumları Yönet - + New Session Yeni Oturum - + &Print... Ya&zdır... - + &Close Ka&pat - + &Quit &Çık - + Ctrl+Q Ctrl+Q - + &Edit D&üzen - + &Undo &Geri Al - + &Redo &Yinele - + Cu&t &Kes - + &Copy K&opyala - + &Paste Y&apıştır - + Paste &Unformatted &Biçimlendirme Olmadan Yapıştır - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Tümünü Seç - + Select &Scene &Sahneyi Seç - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Biçim - + &Bold &Kalın - + &Italic &İtalik - + &Underline &Altı Çizili - + Stri&kethrough &Üstü Çizili - + Ctrl+K Ctrl+K - + Sup&erscript Ü&st Simge - + Ctrl+^ Ctrl+^ - + &Subscript A&lt Simge - + Ctrl+_ Ctrl+_ - + Align &Left So&la Yasla - + Ctrl+{ Ctrl+{ - + Align &Center &Ortala - + Ctrl+| Ctrl+| - + Align &Right Sa&ğa Yasla - + Ctrl+} Ctrl+} - + Align &Justify İki &Yana Yasla - + Ctrl+J Ctrl+J - + &Decrease Indent &Girintiyi Azalt - + Ctrl+< Ctrl+< - + I&ncrease Indent Gi&rintiyi Arttır - + Ctrl+> Ctrl+> - + Le&ft to Right Block S&oldan Sağa Blok - + Ri&ght to Left Block Sa&ğdan Sola Blok - + &Tools &Araçlar - + &Find... &Bul... - + Find &Next &Sonrakini Bul - + Find Pre&vious &Öncekini Bul - + &Replace... &Değiştir... - + Ctrl+R Ctrl+R - + Smart &Quotes &Akıllı Tırnaklar - + Update &Document &Dökümanı Güncelle - + Update &Selection &Seçilimi Güncelle - + &Spelling... &Yazım Denetimi... - + F7 F7 - + &Timers... &Zamanlayıcılar... - + S&ymbols... &Simgeler... - + &Settings &Ayarlar - + Show &Toolbar &Araç Çubuğunu Göster - + Show &Menu Icons &Menü Simgelerini Göster - + F&ocused Text &Odaklanılan Metin - + &Fullscreen Tam &Ekran - + F11 F11 - + Esc Esc - + M&inimize &Küçült - + Ctrl+M Ctrl+M - + &Themes... &Temalar... - + &Preferences... &Tercihler... - + Focus Off Odaklanmayı Kapat - + Focus One Line Bir Satıra Odaklan - + Focus Three Lines Üç Satıra Odaklan - + &Paragraph &Paragraf - + Focus Paragraph Paragrafa Odaklan - + &Help &Yardım - + Application &Language... &Uygulama Dili ... @@ -1995,27 +1996,27 @@ Bazı dosyalar desteklenmiyor ve açılamadı. - + &Off &Kapalı - + One &Line &Bir Satır - + &Three Lines &Üç Satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 6f99790d..59e1ad03 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - + Save File As Зберегти файл як - - + + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) Форматований текст (*.rtf) - + All Files (*) Всі файли (*) @@ -254,17 +254,17 @@ Highlighter - + Add Додати - + Check Spelling... Перевірка правопису... - + (No suggestions found) (Пропозицій не знайдено) @@ -635,8 +635,8 @@ Reader - - + + Not a supported RTF file. Не підтримуваний файл RTF. @@ -719,6 +719,7 @@ + Default Типово @@ -1168,77 +1169,77 @@ ThemeManager - + Themes Теми - + Add Додати - + Modify Змінити - + Remove Вилучити - + Import Імпортувати - + Export Експортувати - + Close Закрити - + Question Запитання - + Remove selected theme? Вилучити вибрану тему? - + Import Theme Імпортувати тему - + Themes (*.fwtz *.theme) Теми (*.fwtz *.theme) - + Themes (*.fwtz) Теми (*.fwtz) - + Sorry На жаль - + A theme already exists with that name. Please enter a new name: Тема з такою назвою вже є. Введіть нову назву: - + Export Theme Експортувати тему @@ -1398,105 +1399,105 @@ Завантаження тем - + Loading sounds Завантаження звуків - + Untitled Без назви - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 Символів: %L1 / %L2 - + Pages: %L1 Сторінок: %L1 - + Paragraphs: %L1 Абзаців: %L1 - + Words: %L1 Слів: %L1 - + %1% of daily goal %1% щоденного завдання - - + + Opening %1 Відкривання %1 - + Question Запитання - + Save changes? Зберегти зміни? - + (Untitled %1) (Без назви %1) @@ -1537,7 +1538,7 @@ - + Warning @@ -1552,442 +1553,442 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) %1 (Лише для читання) - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + &Timers... &Таймери... - + S&ymbols... - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... @@ -1997,27 +1998,27 @@ - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index a3e77fe2..0bd6e6e2 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry Rất tiếc - + Unable to save '%1'. Không thể lưu '%1'. - + Save File As Lưu tập tin thành - - + + Unable to overwrite '%1'. Không thể ghi đè lên '%1'. - + Rename File Đổi tên tập tin - + Unable to rename '%1'. Không thể đổi tên '%1'. - + Reload File Tải lại tập tin - + Reload the file %1 from disk? Tải lại tập tin %1 từ đĩa? - + All unsaved changes will be lost. Tất cả các thay đổi chưa lưu sẽ bị mất. - + Reload Tải lại - + Plain Text (*.txt) Dạng văn bản thường (*.txt) - + Question Câu hỏi - + Saving as plain text will discard all formatting. Discard formatting? Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? - + OpenDocument Text (*.odt) Dạng văn bản mở (*.odt) - + Rich Text (*.rtf) Dạng Rich Text (*.rtf) - + All Files (*) Mọi loại tập tin (*) @@ -252,17 +252,17 @@ Highlighter - + Add Thêm - + Check Spelling... Kiểm tra lỗi chính tả... - + (No suggestions found) (Không tìm thấy lời đề nghị nào) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. Tập tin RTF này không được hỗ trợ. @@ -717,6 +717,7 @@ + Default Mặc định @@ -1166,77 +1167,77 @@ ThemeManager - + Themes Giao diện - + Add Thêm - + Modify Chỉnh sửa - + Remove Loại bỏ - + Import Nhập dữ liệu - + Export Xuất dữ liệu - + Close Đóng lại - + Question Câu hỏi - + Remove selected theme? Loại bỏ giao diện đã được chọn? - + Import Theme Nhập dữ liệu về giao diện - + Themes (*.fwtz *.theme) Giao diện (*.fwtz *.theme) - + Themes (*.fwtz) Themes (*.fwtz) - + Sorry Rất tiếc - + A theme already exists with that name. Please enter a new name: Một giao diện với cùng tên như thế đã tồn tại. Vui lòng điền vào một tên khác: - + Export Theme Xuất dữ liệu về giao diện @@ -1396,105 +1397,105 @@ Đang tải dữ liệu giao diện - + Loading sounds Đang tải dữ liệu âm thanh - + Untitled Chưa đặt tiêu đề - + Open File Mở tập tin - + About FocusWriter Dịch bởi Phan Anh - + FocusWriter FocusWriter - + A simple fullscreen word processor Một phần mềm soạn thảo văn bản toàn màn hình dạng đơn giản - + Copyright &copy; 2008-%1 Graeme Gott Bản quyền &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Phát hành dựa theo giấy phép <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Sử dụng bộ biểu tượng từ <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sử dụng dựa trên giấy phép <a href=%1>LGPL 3</a> - + Characters: %L1 / %L2 Số ký tự: %L1 / %L2 - + Pages: %L1 Số trang: %L1 - + Paragraphs: %L1 Số đoạn văn: %L1 - + Words: %L1 Số từ: %L1 - + %1% of daily goal Đạt đượ %1% mục tiêu trong ngày - - + + Opening %1 Đang mở %1 - + Question Câu hỏi - + Save changes? Lưu các thay đổi - + (Untitled %1) (Chưa đặt tiêu đề %1) @@ -1535,7 +1536,7 @@ - + Warning Cảnh báo @@ -1550,442 +1551,442 @@ Khôi phục dữ liệu từ phần bộ nhớ đệm khẩn cấp? - + Some files could not be opened. Không thể mở một số tập tin. - + Some files were opened Read-Only. Một vài tập tin được mở dưới chế độ Chỉ Được-Đọc - + Text Files (%1);;All Files (*) Tập tin văn bản (%1);;Tất cả các tập tin (*) - + '%1' is newer than the cached copy. '%1' mới hơn bản dữ liệu được sao chép trong bộ nhớ đệm. - + Overwrite newer file? Viết đè dữ liệu lên tập tin mới hơn? - + Unable to load typewriter sounds. Không thể tải âm thanh tạo hiệu ứng gõ chữ. - + Please make sure that SDL_mixer is installed. Xin vui lòng chắc chắn rằng SDL_mixer đã được cài đặt. - + %1 (Read-Only) %1 (Chỉ được-đọc) - + &File &Tập tin - + &New &Tạo mới - + &Open... &Mở... - + Reloa&d Tải l&ại - + &Save &Lưu - + Save &As... Lưu &Dưới Dạng... - + &Rename... &Đổi tên... - + Save A&ll Lưu T&ất Cả - + Manage Sessions Quản lý phiên làm việc - + New Session Phiên làm việc mới - + &Print... &In dữ liệu... - + &Close Đ&óng lại - + &Quit Th&oát - + Ctrl+Q Ctrl+Q - + &Edit C&hỉnh sửa - + &Undo Hủ&y thao tác - + &Redo Lặ&p lại thao tác - + Cu&t Cắ&t - + &Copy S&ao chép - + &Paste D&án - + Paste &Unformatted Dán vào dữ liệu ch&ưa chỉnh sửa - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Chọn tấ&t cả - + Select &Scene Chọn c&ảnh - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Đị&nh dạng - + &Bold &In đậm - + &Italic I&n nghiêng - + &Underline &Gạch dưới - + Stri&kethrough G&ạch xuyên qua - + Ctrl+K Ctrl+K - + Sup&erscript Chữ t&rồi lên - + Ctrl+^ Ctrl+^ - + &Subscript Chữ s&ụp xuống - + Ctrl+_ Ctrl+_ - + Align &Left Canh lề b&ên trái - + Ctrl+{ Ctrl+{ - + Align &Center Canh lề c&hính giữa - + Ctrl+| Ctrl+| - + Align &Right Canh lề bên p&hải - + Ctrl+} Ctrl+} - + Align &Justify Canh lề đ&ều hai bên - + Ctrl+J Ctrl+J - + &Decrease Indent Giả&m mức lùi dòng - + Ctrl+< Ctrl+< - + I&ncrease Indent Tă&ng mức lùi dòng - + Ctrl+> Ctrl+> - + Le&ft to Right Block Khối văn bản từ tr&ái sang phải - + Ri&ght to Left Block Khối văn bản từ ph&ải sang trái - + &Tools Cô&ng cụ - + &Find... Tì&m kiếm... - + Find &Next Tìm tiế&p theo - + Find Pre&vious Tìm tr&ước đó - + &Replace... Th&ay thế... - + Ctrl+R Ctrl+R - + Smart &Quotes Trích dẫn thô&ng minh: - + Update &Document Cập nhật tà&i liệu - + Update &Selection Cập nhật v&ùng lựa chọn - + &Spelling... Kiểm tr&a lỗi chính tả... - + F7 F7 - + &Timers... B&ộ đếm thời gian - + S&ymbols... Biể&u tượng... - + &Settings Thiế&t lập - + Show &Toolbar Hiển thị th&anh công cụ - + Show &Menu Icons Hiển thị biểu tượng men&u - + F&ocused Text Tập tr&ung vào văn bản - + &Fullscreen Toàn mà&n hình - + F11 F11 - + Esc Esc - + M&inimize T&hu nhỏ - + Ctrl+M Ctrl+M - + &Themes... G&iao diện... - + &Preferences... Tùy biế&n... - + Focus Off Tắt phần tập trung - + Focus One Line Tập trung vào một dòng văn bản - + Focus Three Lines Tập trung vào ba dòng văn bản - + &Paragraph &Đoạn văn - + Focus Paragraph Tập trung vào đoạn văn - + &Help Dịch bởi P&han Anh - + Application &Language... Ngôn ngữ hiển th&ị... @@ -1995,27 +1996,27 @@ Một số tập tin không được hỗ trợ nên sẽ không thể mở được. - + &Off T&ắt - + One &Line Một D&òng - + &Three Lines B&a Dòng - + &About Thô&ng tin - + About &Qt Thô&ng tin về Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 01e6a122..4f8964e3 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry 抱歉 - + Unable to save '%1'. 不能保存 '%1'。 - + Save File As 保存文件为 - - + + Unable to overwrite '%1'. 不能覆盖 '%1'。 - + Rename File 重命名文件 - + Unable to rename '%1'. 不能重命名 '%1'。 - + Reload File 重新加载文件 - + Reload the file %1 from disk? 重新从磁盘中加载文件 %1 ? - + All unsaved changes will be lost. 未保存的更改将丢失。 - + Reload 重新加载 - + Plain Text (*.txt) 纯文本 (*.txt) - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? - + OpenDocument Text (*.odt) OpenDocument Text (*.odt) - + Rich Text (*.rtf) 多信息文本格式 (*.rtf) - + All Files (*) 所有文件 (*) @@ -252,17 +252,17 @@ Highlighter - + Add 添加 - + Check Spelling... 检查拼写... - + (No suggestions found) (找不到建议) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. 不支持的RTF文件。 @@ -717,6 +717,7 @@ + Default 默认 @@ -1166,77 +1167,77 @@ ThemeManager - + Themes 主题 - + Add 添加 - + Modify 修改 - + Remove 移除 - + Import 导入 - + Export 导出 - + Close 关闭 - + Question 询问 - + Remove selected theme? 移除所选主题? - + Import Theme 导入主题 - + Themes (*.fwtz *.theme) 主题 (*.fwtz *.theme) - + Themes (*.fwtz) 主题 (*.fwtz) - + Sorry 抱歉 - + A theme already exists with that name. Please enter a new name: 已经存在同名的一个主题。请输入新的名称: - + Export Theme 导出主题 @@ -1396,105 +1397,105 @@ 载入主题 - + Loading sounds 载入声音 - + Untitled 无标题 - + Open File 打开文件 - + About FocusWriter 关于 FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor 一个简洁的全屏文字处理软件 - + Copyright &copy; 2008-%1 Graeme Gott 版权 &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license 以 <a href=%1>GPL 3</a> 许可协议发布 - + Uses icons from the <a href=%1>Oxygen</a> icon theme 使用 <a href=%1>Oxygen</a> 图标主题 - + Used under the <a href=%1>LGPL 3</a> license 遵照 <a href=%1>LGPL 3</a> 许可使用 - + Characters: %L1 / %L2 字符数:%L1 / %L2 - + Pages: %L1 页数:%L1 - + Paragraphs: %L1 段落数:%L1 - + Words: %L1 单词数:%L1 - + %1% of daily goal 每日目标的 %1% - - + + Opening %1 正在打开 %1 - + Question 询问 - + Save changes? 保存更改? - + (Untitled %1) (无标题 %1) @@ -1535,7 +1536,7 @@ - + Warning 警告 @@ -1550,442 +1551,442 @@ 从紧急缓存中还原? - + Some files could not be opened. 有些文件无法打开。 - + Some files were opened Read-Only. 一些文件以只读方式打开。 - + Text Files (%1);;All Files (*) 文本文件 (%1);;所有文件 (*) - + '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - + Overwrite newer file? 覆盖较新的文件? - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. 请确认 SDL_mixer 已被安装. - + %1 (Read-Only) %1 (只读) - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d 重新载入(&d) - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted 无格式粘贴(&U) - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene 选择场景(&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 从左到右(&F) - + Ri&ght to Left Block 从右到左 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + &Timers... 定时器(&T)... - + S&ymbols... 符号...(&y) - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text 聚焦文本(&F) - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off 关闭聚焦 - + Focus One Line 聚焦一行 - + Focus Three Lines 聚焦三行 - + &Paragraph 段落(&P) - + Focus Paragraph 聚焦段落 - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... @@ -1995,27 +1996,27 @@ 某些文件不受支持,不能打开。 - + &Off 关闭(&O) - + One &Line 单行(&L) - + &Three Lines 三行(&T) - + &About 关于(&A) - + About &Qt 关于 &Qt diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index b33a02a2..bf5dbe49 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -35,86 +35,86 @@ Document - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File - + Reload the file %1 from disk? - + All unsaved changes will be lost. - + Reload - + Plain Text (*.txt) - + Question - + Saving as plain text will discard all formatting. Discard formatting? - + OpenDocument Text (*.odt) - + Rich Text (*.rtf) - + All Files (*) @@ -252,17 +252,17 @@ Highlighter - + Add - + Check Spelling... - + (No suggestions found) @@ -633,8 +633,8 @@ Reader - - + + Not a supported RTF file. @@ -717,6 +717,7 @@ + Default @@ -1166,77 +1167,77 @@ ThemeManager - + Themes - + Add - + Modify - + Remove - + Import - + Export - + Close - + Question - + Remove selected theme? - + Import Theme - + Themes (*.fwtz *.theme) - + Themes (*.fwtz) - + Sorry - + A theme already exists with that name. Please enter a new name: - + Export Theme @@ -1396,105 +1397,105 @@ - + Loading sounds - + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - + Characters: %L1 / %L2 - + Pages: %L1 - + Paragraphs: %L1 - + Words: %L1 - + %1% of daily goal - - + + Opening %1 - + Question - + Save changes? - + (Untitled %1) @@ -1535,7 +1536,7 @@ - + Warning @@ -1550,442 +1551,442 @@ - + Some files could not be opened. - + Some files were opened Read-Only. - + Text Files (%1);;All Files (*) - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + %1 (Read-Only) - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + &Timers... - + S&ymbols... - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... @@ -1995,27 +1996,27 @@ - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt From 0b0dcd1bf9bb5d83cdab4c7a3a6a6955b960075d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 12:49:30 -0400 Subject: [PATCH 174/630] Replace ChangeLog with NEWS file. --- ChangeLog | 1104 ----------------------------------------------------- NEWS | 288 ++++++++++++++ 2 files changed, 288 insertions(+), 1104 deletions(-) delete mode 100644 ChangeLog create mode 100644 NEWS diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index d54ee875..00000000 --- a/ChangeLog +++ /dev/null @@ -1,1104 +0,0 @@ -2013-05-31 Graeme Gott - * Tag version 1.4.4. - -2013-05-06 Graeme Gott - * FIXED: Crashed when opening font dropdown in theme dialog. - -2013-04-25 Graeme Gott - * FIXED: Did not always ignore changes made by program. - -2013-04-15 Graeme Gott - * Allow margins smaller than 10 pixels. - -2013-04-09 Graeme Gott - * FIXED: Smart quotes were incorrect after opening punctuation. - -2013-04-06 Graeme Gott - * Tag version 1.4.3. - * FIXED: Unsaved new files were not restored from cache. - -2013-03-30 Graeme Gott - * Add support for Unicode names with Qt 5. - * Migrate data from Qt 4 version. - -2013-03-27 Graeme Gott - * Tag version 1.4.2. - -2013-03-26 Graeme Gott - * FIXED: Could not end italics before smart quote. - -2013-02-26 Graeme Gott - * Add small delay before handling changed files. - * Add ignoring deleted file message. - -2013-02-25 Graeme Gott - * FIXED: Did not play key press sound for non-Latin languages. - * FIXED: Crash when ignoring words in spelling dialog. - -2012-12-21 Graeme Gott - * Add support for compiling with Qt 5.0.0. - -2012-11-28 Graeme Gott - * Tag version 1.4.1. - -2012-11-27 Graeme Gott - * FIXED: High CPU use in Ubuntu 10.04. - -2012-11-26 Graeme Gott - * Use QSound on Windows because SDL doesn't always work. - * FIXED: Crashed when typing circumflex with focused text. - -2012-11-20 Graeme Gott - * FIXED: Showing scene list moved cursor to start of document. - -2012-11-18 Graeme Gott - * Sync translations with Transifex. - -2012-11-04 Graeme Gott - * FIXED: Played sounds constantly in Ubuntu 10.04. - -2012-10-14 Graeme Gott - * FIXED: Could drag scenes in Read-Only files. - * FIXED: Could insert symbols in Read-Only files. - * FIXED: Could paste unformatted in Read-Only files. - * FIXED: Could check spelling of Read-Only files. - * FIXED: Cleared keyboard shortcuts not saved. - -2012-10-12 Graeme Gott - * FIXED: Cannot add new keyboard shortcuts with the Shift key. - -2012-09-22 Graeme Gott - * Tag version 1.4.0. - -2012-09-18 Graeme Gott - * FIXED: Could not save to WebDAV. - -2012-09-16 Graeme Gott - * FIXED: Insert key did not switch to overwrite mode. - -2012-09-13 Graeme Gott - * FIXED: Regression - keyboard shortcut for scenes did not work. - * FIXED: Did not show scene list if mouse was over interface. - * FIXED: Hiding toolbar did not shrink header. - -2012-08-27 Graeme Gott - * Only add dictionaries in locally installed path. - -2012-08-26 Graeme Gott - * FIXED: Regression - SDL_mixer was not loaded in Debian. - -2012-08-24 Graeme Gott - * Add installing Voikko data files in Windows. - * Remove uninstalling dictionary files. - -2012-08-20 Graeme Gott - * FIXED: Scene list was visually corrupted when footer was shown. - * FIXED: Could save over files open on other tabs. - -2012-08-19 Graeme Gott - * FIXED: Switching themes still wasn't properly focusing text. - * FIXED: Did not stop watching files when they were closed. - * FIXED: Theme previews did not scale tiled or centered images. - * FIXED: Theme previews did not show line spacing. - -2012-08-16 Graeme Gott - * Stop distributing dictionaries on Windows. - -2012-08-15 Graeme Gott - * Base maximum width of alerts on pixel density. - * Close alert under mouse first. - * Move code for configuring alert into alert class. - * Use alerts for warnings when loading files. - * FIXED: Warned user twice about every malformed file. - * FIXED: Could not interact with dialogs during load. - * FIXED: Did not check spelling of pasted paragraphs. - -2012-08-14 Graeme Gott - * Stop faking drag-and-drop for moving scenes. - * FIXED: Dragging last scene deleted it. - * FIXED: Dragging top scene merged it with other scenes. - -2012-08-13 Graeme Gott - * FIXED: Regression - Windows did not load SDL. - * Use built-in Voikko support for finding dictionaries. - -2012-08-12 Graeme Gott - * Use NSSound on the Mac. - * FIXED: Regression - fallback icons were not used. - * Use file contents to determine format when loading. - * Don't allow rename on Read-Only files. - -2012-08-11 Graeme Gott - * FIXED: File rename did not change formats. - * Check spelling in background. - -2012-08-09 Graeme Gott - * Only check spelling in highlighter. - * FIXED: Default shortcuts conflicted on the Mac. - * Queue simultaneous requests to add documents. - * Stop grabbing keyboard during load. - -2012-08-07 Graeme Gott - * Update Oxygen icons. - -2012-08-04 Graeme Gott - * Change how data paths are handled. - -2012-08-03 Graeme Gott - * Split symbol shortcuts out of dialog. - * FIXED: Restoring from cache treated all files as plain text. - * Clear cache on successful exit. - -2012-08-02 Graeme Gott - * FIXED: Line spacing combo was incorrect for non-default sizes. - * Reduce minimum line spacing. - * Stop cache thread while window is visible. - -2012-07-31 Graeme Gott - * Switch to rich text if saving as ODT or RTF. - * FIXED: Filenames were incorrect after undo and redo. - -2012-07-27 Graeme Gott - * FIXED: Formatting of first paragraph was lost on reload. - -2012-07-26 Graeme Gott - * Warn when trying to save rich text in plain text file. - * Allow any file to be saved in any format. - * Remove menu action for toggling rich text. - * Remove setting for defaulting to rich text. - * Use file extension to determine format when loading. - * Use file extension to determine format when saving. - * Always allow rich text. - -2012-07-25 Graeme Gott - * Add editable keyboard shortcuts. - -2012-07-20 Graeme Gott - * Make it compile with Qt 5. - * Use alerts for errors when loading files. - * Warn about missing SDL_mixer. - * Remove use of QSound as fallback. - -2012-07-19 Graeme Gott - * FIXED: Switching themes wasn't properly focusing text. - * FIXED: Line spacings were ignored on reload. - * Use ODT as default format. - -2012-07-18 Graeme Gott - * Monitor files for changes. - * Add option to reload files. - -2012-07-14 Graeme Gott - * Auto-hide scene list when document is clicked on. - * Only update scene list when visible. - -2012-07-13 Graeme Gott - * Always select current scene in list. - -2012-07-11 Graeme Gott - * Add preview to symbols dialog. - -2012-07-10 Graeme Gott - * Add keyboard shortcuts to symbols dialog. - -2012-07-08 Graeme Gott - * Add a dialog to insert Unicode symbols. - -2012-07-06 Graeme Gott - * Add a model for looking up Unicode symbols. - -2012-07-03 Graeme Gott - * Add widget to edit a shortcut. - -2012-07-01 Graeme Gott - * Move selecting scenes into scene model. - -2012-06-29 Graeme Gott - * Add keyboard shortcuts for moving scenes. - * FIXED: Scene dividers did not update until program restart. - * Make first paragraph always be a scene. - * Move detecting scenes into scene model. - -2012-06-28 Graeme Gott - * Show multiple lines from each scene. - -2012-06-24 Graeme Gott - * Allow resizing scene list. - -2012-06-22 Graeme Gott - * Auto-hide scene list. - -2012-06-20 Graeme Gott - * Add scene list. - -2012-06-19 Graeme Gott - * Add dragging scenes. - -2012-06-18 Graeme Gott - * Add scene model. - -2012-06-15 Graeme Gott - * Remember find dialog position while program is running. - * FIXED: Line spacings were broken at first on Windows. - -2012-06-14 Graeme Gott - * FIXED: Text brought onto current line was not focused. - * FIXED: Replace all could not be reverted with a single undo. - -2012-06-13 Graeme Gott - * Only allow a single instance to run. - * Add support for finding regular expressions. - -2012-06-11 Graeme Gott - * Add background thread for caching files. - * Move writing file out of document class. - * FIXED: Saved cache files more frequently than necessary. - * FIXED: Displayed paths did not use native separators. - -2012-06-10 Graeme Gott - * Increase cache interval to 10 minutes. - * Load original file when unable to load cached file. - * FIXED: Crashed when loading empty RTF files. - * FIXED: Emergency cache files could have broken names. - * FIXED: Was not loading data from emergency cache files. - * FIXED: Emergency cache was not working for rich text. - * FIXED: Data was not always written to disk. - * FIXED: Was adding spaces before pasted rich text. - -2012-06-09 Graeme Gott - * Allow changing scene dividers. - -2012-06-03 Graeme Gott - * Add tab navigation by keyboard. - -2012-06-01 Graeme Gott - * Make spacings take effect immediately. - * Add selecting scenes. - * Add detecting scenes. - -2012-05-26 Morten Juhl-Johansen Zölde-Fejér - * Add Danish translation. - -2012-05-23 Graeme Gott - * FIXED: New documents were always modified. - -2012-05-18 Graeme Gott - * FIXED: Inserting text resets alignment. - * Add option to paste text without formatting. - * Add focused text options. - * Add options to theme dialog for setting spacings. - * Use theme spacings when creating document instances. - * Add line spacing and paragraph margins to theme. - -2012-05-17 Graeme Gott - * Add reading and writing soft returns. - -2012-05-16 Graeme Gott - * FIXED: No suggestions for misspelled words on 10.5. - -2012-05-15 Graeme Gott - * Use modified voikko provider for enchant on Windows. - -2012-05-12 Graeme Gott - * Install dictionaries to shared folder on the Mac. - -2012-05-11 Graeme Gott - * Use NSSpellChecker directly on the Mac. - * Use translated names for dictionaries. - * Remove dictionary data files. - -2012-05-10 Graeme Gott - * Switch to enchant from hunspell. - * Add a wrapper class for the dictionary. - -2012-05-09 Graeme Gott - * Add dictionary manager. - -2012-01-16 Graeme Gott - * Tag version 1.3.5.2. - -2012-01-09 Verónica Jiménez - * Update Spanish translation. - -2011-12-21 Aarni - * Update Finnish translation. - -2011-12-18 Graeme Gott - * Only start monitoring word count changes after loading contents. - * Sync translations with Transifex. - * Add Hungarian dictionary. - -2011-12-17 Zoltán Adamek - * Add Hungarian translation. - -2011-12-15 Graeme Gott - * FIXED: Did not handle loading menu icons correctly. - -2011-12-04 Graeme Gott - * Tag version 1.3.5.1. - * Add Greek dictionary. - -2011-12-01 Graeme Gott - * Don't grab keyboard. - -2011-11-30 Graeme Gott - * FIXED: Did not correctly handle multi-byte characters in RTF. - -2011-11-27 Graeme Gott - * FIXED: Interface was incorrectly hidden while fullscreen. - -2011-11-16 Dennis Peteranderl - * Update German translation. - -2011-11-15 Graeme Gott - * Add Dutch dictionary. - -2011-11-15 Robert Borst - * Add Dutch translation. - -2011-11-12 Graeme Gott - * Add scalable icon. - -2011-11-09 Graeme Gott - * Tag version 1.3.5. - * FIXED: Sometimes did not display opened documents immediately. - * Update translations. - -2011-11-05 Graeme Gott - * FIXED: ODT block settings were not respected. - * FIXED: RTF block settings were not respected. - -2011-11-04 Graeme Gott - * Change file extension of exported themes. - -2011-10-29 Graeme Gott - * Use gzip compression for exported themes. - -2011-10-17 Graeme Gott - * Tag version 1.3.4.1. - * Improve deploying mac resources. - -2011-10-16 Graeme Gott - * Tag version 1.3.4. - -2011-10-13 Graeme Gott - * FIXED: Regression - changing dictionary required restart. - -2011-10-09 Graeme Gott - * Add Swedish translation. - -2011-10-08 Graeme Gott - * Pass pasted HTML through RTF parser. - * Remove extra newlines from RTF. - -2011-10-06 Graeme Gott - * Add Windows support for copying RTF. - -2011-10-05 Graeme Gott - * Add support for copying RTF. - -2011-10-04 Graeme Gott - * FIXED: Always vertically center did not work with new documents. - * Create default theme when launched. - * Improve open dialog start location. - -2011-10-03 Graeme Gott - * FIXED: Printed spellchecking highlights. - * FIXED: Did not load file stats when loading file. - -2011-08-19 Graeme Gott - * Speed up file loading. - -2011-08-06 Graeme Gott - * Add basic OpenDocument text support. - * Switch to a 96 DPI indent. - -2011-07-28 Graeme Gott - * Make sound effects play immediately. - -2011-07-25 Graeme Gott - * FIXED: Font names were sometimes inserted at head of document. - * Remember code page when reading RTF. - * Redesign detection of code page for writing RTF. - -2011-07-06 Epameinondas Soufleros - * Add Greek translation. - -2011-07-02 Graeme Gott - * FIXED: Crashed when typing after alert for no sound effects. - -2011-06-27 Graeme Gott - * Tag version 1.3.3. - -2011-06-15 Márcio Massula Jr. - * Update Brazilian Portuguese translation. - -2011-06-12 Danila Evstifeyev - * Update Russian translation. - -2011-06-11 Israel Buitrón - * Update Mexican Spanish translation. - -2011-06-08 Jérôme Borme - * Update French translation. - * Update Portuguese translation. - -2011-06-08 Dennis Peteranderl - * Update German translation. - -2011-06-07 Graeme Gott - * FIXED: Timers action didn't always use theme icon. - -2011-06-06 Graeme Gott - * FIXED: Did not follow toolbar style by default. - * Move background caching into background loading thread. - * Allow users to always set background image. - -2011-06-04 Jakub Kowalski - * Update Polish translation. - -2011-06-04 Graeme Gott - * FIXED: Did not raise to front in GNOME2. - * FIXED: Cancelling adding a theme did not work. - * Use smooth font sizes list. - * FIXED: Font size always show decimal. - * Set default font to Times New Roman. - -2011-06-03 Graeme Gott - * FIXED: Incorrectly handled paragraph end in RTF. - -2011-06-02 Graeme Gott - * Handle drag-and-drop RTF on the Mac. - * Read from and write to QIODevices. - -2011-06-02 Pavel Fric - * Update Czech translation. - -2011-06-01 Graeme Gott - * Remove menu icons option on the Mac. - * Only load typewriter sounds if they are enabled. - * Remember size of preferences dialog. - * FIXED: Played sound effects when text was removed. - * FIXED: Could not type in timer time edit. - -2011-05-31 Graeme Gott - * FIXED: Incorrect background color for preferences tabs. - * FIXED: Document details were visible through load screen. - * FIXED: Load screen text was not always monospaced. - * FIXED: Replacing quotes with LaTex quotes did not update all quotes. - * Rename translation files. - * FIXED: Could not scroll over background in Qt/Cocoa. - -2011-05-30 Graeme Gott - * FIXED: Regression where text did not fill text area. - * FIXED: Scrollbar did not disappear when mousing into header. - * FIXED: Could not interact with tabs in Qt/Cocoa. - * FIXED: Masked scrollbars still showed a pixel. - * FIXED: SDL_mixer was not loaded in most Linux distros. - -2011-05-29 Graeme Gott - * Update locale dialog. - * Disable auto-save by default and rely on temporary cache instead. - -2011-05-28 Graeme Gott - * FIXED: Documents were visible when resizing window. - * Warn user if emergency cache is not writable. - -2011-05-27 Graeme Gott - * Improve dialogs that list files. - -2011-05-26 Graeme Gott - * Add restoring files from temporary cache. - * Store map of temporary file cache filenames. - -2011-05-25 Graeme Gott - * Copy files to temporary file cache. - * Move file loading out of document constructor. - * FIXED: No sound on characters inserted with "compose" key. - -2011-05-24 Graeme Gott - * Add support for LaTeX smart quotes. - * Prevent interaction while loading documents. - * FIXED: Large documents were not centered. - * FIXED: Documents were sometimes displayed truncated. - -2011-05-23 Graeme Gott - * Allow user to enter custom font sizes. - * FIXED: Could not access menubar while fullscreen in Unity. - * FIXED: Could not leave fullscreen in Unity. - -2011-05-22 Graeme Gott - * FIXED: Closing the color picker does not return focus to theme dialogs. - * Replace icon and load image. - -2011-04-16 Graeme Gott - * Unset fullscreen when minimizing on the mac. - -2011-04-08 Graeme Gott - * Rename base translation file. - -2011-04-02 Graeme Gott - * Use SDL_mixer instead of libao. - -2011-03-25 Graeme Gott - * FIXED: Wasn't switching to already opened document. - -2011-03-24 Graeme Gott - * FIXED: Dropping files on main window pasted URLs in KDE. - * Always close unchanged empty file when opening a new file. - * Specify supported MIME types on Linux and the Mac. - -2011-03-23 Graeme Gott - * FIXED: Qt translations were not deployed on the Mac. - * FIXED: Word count issue with Persian/Farsi. - * Update Spanish translation. - * Change the way language names are loaded. - -2011-03-03 Graeme Gott - * Only rehighlight when highlighter is enabled. - -2011-03-02 Dmitriy Kodanev - * Add Russian translation. - -2011-02-19 Graeme Gott - * FIXED: Forgot new documents saved when closed. - -2011-01-29 Graeme Gott - * Allow for multiple dictionaries to be loaded. - * Leave misspelled highlight when only moving cursor. - * Always ignore smart apostrophes when spellchecking. - -2011-01-05 Graeme Gott - * Add German dictionary. - * Add German translation. - -2010-12-29 Graeme Gott - * Tag version 1.3.2.1. - * FIXED: Crashed when typing. - -2010-12-29 Israel Buitrón - * Add Mexican Spanish translation. - -2010-12-28 Graeme Gott - * Tag version 1.3.2. - -2010-12-26 Graeme Gott - * FIXED: Ubuntu panels appeared when find dialog was shown. - -2010-12-17 Graeme Gott - * FIXED: Jumped while selecting text and scrolling. - -2010-12-16 Graeme Gott - * FIXED: Statistics and centering were broken for large documents. - -2010-12-16 Jérôme Borme - * Update French translation. - * Update Portuguese translation. - -2010-12-16 Pavel Fric - * Update Czech translation. - -2010-12-14 Jakub Kowalski - * Update Polish translation. - -2010-12-14 Márcio Massula Jr. - * Update Brazilian Portuguese translation. - -2010-12-14 Graeme Gott - * Fixed regression where it no longer centered opened documents. - * Fixed incorrect error string. - -2010-12-12 Graeme Gott - * Add changing the program language. - -2010-12-07 Graeme Gott - * FIXED: Was recentering when backspacing at end of document. - * Always bring interface to front. - -2010-12-05 Graeme Gott - * FIXED: Header stayed visible when menus closed. - * FIXED: Could not select text where header is shown. - * Only apply mask to stack and not to documents. - * FIXED: Header wasn't shown when menus were shown by keyboard shortcuts. - * FIXED: Toolbar outline stayed visible when it was expanded. - -2010-12-04 Graeme Gott - * FIXED: Automatic spellchecking highlighted current word. - -2010-12-02 Jakub Kowalski - * Update Polish translation. - -2010-12-01 Graeme Gott - * Add Czech dictionary. - -2010-12-01 Pavel Fric - * Add Czech translation. - -2010-11-26 Graeme Gott - * FIXED: Did not inform user when archives have no dictionaries. - -2010-11-25 Graeme Gott - * FIXED: Brazilian Portuguese translation could not open all files. - * FIXED: Portuguese translation had incorrect file extension. - -2010-11-21 Graeme Gott - * Rearrange theme foreground options. - * Use contrast color for highlighted text. - -2010-11-09 Graeme Gott - * Add rounded corners to themes. - -2010-11-08 Graeme Gott - * FIXED: Could not scroll over padding. - -2010-11-04 Jakub Kowalski - * Update Polish translation. - -2010-11-02 Graeme Gott - * Allow text to use full width. - * Use nearest spinbox values. - -2010-10-31 Graeme Gott - * Add minimize window action. - * FIXED: Could not add words with smart quotes to personal dictionary. - * FIXED: Could add word to personal dictionary multiple times. - * FIXED: Played typewriter sounds for non-printing keys. - * FIXED: Did not center for themes with padding. - -2010-10-29 Graeme Gott - * Use compressed dictionaries. - -2010-10-28 Graeme Gott - * Tag version 1.3.1. - -2010-10-26 Márcio Massula Jr. - * Add Brazilian Portuguese translation. - -2010-10-24 Luis Osa - * Update Spanish translation. - -2010-10-24 Jérôme Borme - * Update French translation. - * Update Portuguese translation. - -2010-10-22 Graeme Gott - * Add selectively disabling smart quotes by pressing Control. - -2010-10-21 Jakub Kowalski - * Add Polish translation. - -2010-10-21 Graeme Gott - * FIXED: Could not update smart quotes for plain text files. - -2010-10-20 Graeme Gott - * Add typewriter sound effects. - * FIXED: Could not switch to rich text. - -2010-10-19 Graeme Gott - * FIXED: Informed user of Read-Only status of already open files. - -2010-10-18 Graeme Gott - * FIXED: Crashed if preview image was not created. - * FIXED: Font size was not always listed. - * FIXED: Panels were visible when mouse was over padding. - -2010-10-17 Graeme Gott - * Prevent opening unsupported files. - * FIXED: Save As completed even if saving failed. - -2010-10-16 Graeme Gott - * Open files dropped on main window. - -2010-10-15 Graeme Gott - * FIXED: Preferences dialog was too big for small screens. - -2010-10-14 Graeme Gott - * Prevent modifying Read-Only files. - * FIXED: Closed even when unable to save files. - -2010-10-12 Luis Osa - * Add Spanish translation. - -2010-10-07 Graeme Gott - * FIXED: Did not handle opening Read-Only files. - * FIXED: Did not prompt when there was an error saving files. - -2010-10-06 Graeme Gott - * FIXED: Replace required clicking twice. - * FIXED: Text indents were different sizes. - -2010-10-05 Graeme Gott - * FIXED: Sometimes segfaulted when scrolling. - * FIXED: The C locale was assumed to be UTF-8. - * FIXED: New documents were always centered. - -2010-09-22 Graeme Gott - * Tag version 1.3.0. - * Add dictionaries for supported languages. - -2010-09-12 Jérôme Borme - * Update French translation. - * Update Portuguese translation. - -2010-09-12 Graeme Gott - * FIXED: Tab focus was incorrect in some dialogs. - -2010-09-10 Graeme Gott - * FIXED: Text direction was broken with Qt 4.7. - * Work around QToolBar bug on the Mac. - -2010-09-08 Graeme Gott - * Unify coding style. - * FIXED: Smart quotes didn't work with selections. - -2010-09-07 Graeme Gott - * Fallback to closest dictionary. - * FIXED: Default theme font was incorrect. - * Refactor code for enabling formatting actions. - -2010-09-06 Graeme Gott - * Track filenames separately from save location. - * FIXED: Created empty tabs for unreadable files. - * Improve RTF conversion from unicode. - -2010-09-05 Graeme Gott - * FIXED: Warned about losing formatting of empty files. - * Show selected statistics. - * Speed up word count. - -2010-09-04 Graeme Gott - * FIXED: Could not open symlinked files. - -2010-09-02 Graeme Gott - * FIXED: Could always change background image. - -2010-09-01 Graeme Gott - * FIXED: Could open empty recent timers menu. - -2010-08-29 Graeme Gott - * Only save preferences and themes when they change. - * Add smart quotes. - * Replace provided English dictionary. - * FIXED: Window background was visible during resize. - * FIXED: Window could be made smaller than theme. - -2010-08-26 Graeme Gott - * Switch to using RTF for rich text files. - -2010-08-23 Graeme Gott - * Add text margin to themes. - * Add text padding to themes. - -2010-08-17 Graeme Gott - * Replace minizip with libzip. - * Make hunspell an external dependency. - -2010-08-14 Graeme Gott - * Inform user when unable to open files. - * Prompt for filename when changing file type. - -2010-08-08 Graeme Gott - * Add RTL support. - -2010-08-07 Graeme Gott - * Add importing themes. - * Add exporting themes. - -2010-08-06 Graeme Gott - * Store images with themes. - -2010-08-04 Graeme Gott - * Share rendering theme background. - * Allow opening multiple files. - * Add new session menu and toolbar actions. - -2010-08-03 Graeme Gott - * FIXED: Default session was ignored. - -2010-08-02 Graeme Gott - * Add option for icons in menus. - * Move icons out of executable. - -2010-08-01 Graeme Gott - * Improve handling of fullscreen. - * Add load screen. - -2010-07-31 Graeme Gott - * Add session management. - -2010-07-19 Graeme Gott - * Remember cursor position for open files. - -2010-07-18 Graeme Gott - * FIXED: File name was not updated in interface when changed. - -2010-07-17 Graeme Gott - * FIXED: Allowed opening the same document twice. - * FIXED: Save dialog was permanently stealing mouse focus. - -2010-07-16 Graeme Gott - * Allow undo across text mode changes. - * Add file extension to filtered files. - * Improve handling of untitled documents. - -2010-07-15 Graeme Gott - * Add rich text support. - -2010-07-13 Graeme Gott - * Switch to QTextEdit. - -2010-07-12 Graeme Gott - * Rewrite find support. - -2010-07-09 Graeme Gott - * Remove icons from menus. - * Add timers. - * Add alerts. - * Switch to using Qt 4.6. - -2010-07-02 Graeme Gott - * Make documents overlay main window. - -2010-07-01 Graeme Gott - * Tag version 1.2.2. - -2010-06-30 Graeme Gott - * Use native icons in Linux. - -2010-06-29 Graeme Gott - * Use standard keyboard shortcuts. - * Add keyboard navigation for tabs. - * Use Qt file dialog for selecting backgrounds. - * Add support for storing data with executable. - -2010-06-12 Graeme Gott - * Update included minizip version to 1.01h. - * Update included hunspell version to 1.2.11. - -2010-01-22 Graeme Gott - * Tag version 1.2.1. - -2010-01-21 Graeme Gott - * FIXED: Scrolling to top didn't work properly in Linux. - -2010-01-19 Graeme Gott - * FIXED: Scrollbar wasn't tracking properly. - * FIXED: Highlight was removed when right-clicking. - * FIXED: Only focused document was centered on launch. - -2010-01-17 Jérôme Borme - * Add French translation. - * Add Portuguese translation. - -2010-01-14 Graeme Gott - * FIXED: Program would crash if dictionary couldn't be found. - -2010-01-11 Graeme Gott - * FIXED: Prompted user about replacing a removed dictionary. - * FIXED: Dictionary added most recently was not selected. - * FIXED: Dictionaries couldn't be used immediately. - -2010-01-08 Graeme Gott - * Include minizip for extracting dictionaries. - -2010-01-02 Graeme Gott - * FIXED: Dictionary was assumed to use UTF-8 encoding. - -2009-12-08 Graeme Gott - * FIXED: Mouse cursor sometimes disappeared when opening files. - -2009-12-05 Graeme Gott - * FIXED: Interface was not hidden when mouse left window. - -2009-12-03 Graeme Gott - * FIXED: Margins were not correct when using Qt 4.6.0. - -2009-12-02 Graeme Gott - * Allow user to change text area position. - -2009-09-12 Graeme Gott - * FIXED: Clock did not respect user's locale. - * FIXED: Time daily goal increased when preferences changed. - -2009-08-29 Graeme Gott - * Allow user to disable antialiasing. - -2009-07-12 Graeme Gott - * Tag version 1.2.0. - -2009-07-11 Graeme Gott - * FIXED: Was not properly centering opened documents. - -2009-07-10 Graeme Gott - * Add estimated word count algorithm. - * Allow any character in theme names. - * Make page size adjustable. - -2009-07-09 Graeme Gott - * Reduce text jittering when scrolling. - * Use threaded file saving. - * FIXED: Changing themes increased progress on daily goals. - * FIXED: Newly created themes were not loaded. - -2009-07-06 Graeme Gott - * Add option to use a block insertion cursor. - -2009-07-05 Graeme Gott - * Split preferences loading out of preferences dialog. - -2009-07-04 Graeme Gott - * Improve document saving. - -2009-07-01 Graeme Gott - * Add menubar. - * Add toolbar customization. - -2009-06-29 Graeme Gott - * Add unsaved changes indicator. - -2009-06-28 Graeme Gott - * Move background loading to separate thread. - -2009-06-27 Graeme Gott - * Add document tabs. - * Store open documents across runs. - -2009-06-25 Graeme Gott - * Add document statistics. - -2009-06-18 Graeme Gott - * Speed up spell checking. - -2009-06-17 Graeme Gott - * FIXED: Changing all misspelled words didn't start at beginning. - -2009-06-16 Graeme Gott - * Add spell checking. - -2009-06-14 Graeme Gott - * FIXED: Infinite loop when replacing all instances of a word. - -2009-05-31 Graeme Gott - * Tag version 1.1.2. - * Use UTF-8 character encoding for files. - -2009-05-10 Graeme Gott - * Tag version 1.1.1. - * FIXED: Was always launching with time based goals. - -2009-04-19 Graeme Gott - * Tag version 1.1.0. - -2009-04-18 Graeme Gott - * Add find dialog. - -2009-04-17 Graeme Gott - * Cache theme backgrounds. - * Change theme immediately. - -2009-04-16 Graeme Gott - * Show progress on daily goals. - -2009-04-15 Graeme Gott - * Track daily progress. - -2009-04-14 Graeme Gott - * FIXED: Crashed when first sentence was deleted. - -2009-04-13 Graeme Gott - * Add interface for goals. - -2009-04-12 Graeme Gott - * Allow user to disable always center on type. - * Load theme in window class. - -2009-04-11 Graeme Gott - * Create default theme from old settings. - * Add theme manager class. - * Add drop shadow to theme previews. - * Save theme previews to disk. - -2009-04-10 Graeme Gott - * Allow user to rename themes. - * Read and write themes to disk. - * Add theme editor dialog. - * Add theme class. - -2009-02-27 Graeme Gott - * Refactor preferences code. - * Allow file extensions other than txt. - -2008-11-03 Graeme Gott - * Add double click support to image selection dialog. - * FIXED: Image selection dialog was not showing last visited path. - -2008-10-29 Graeme Gott - * FIXED: Highlighted text used page alpha. - -2008-10-23 Graeme Gott - * Tag version 1.0.0. - -2008-10-22 Graeme Gott - * Add application icon. - -2008-10-18 Graeme Gott - * Arrange preferences dialog. - -2008-10-17 Graeme Gott - * Add toolbar icons. - * Add support for changing page opacity. - -2008-10-16 Graeme Gott - * Add clock to details. - * Add filename to details. - -2008-10-13 Graeme Gott - * Add image selection dialog. - -2008-10-12 Graeme Gott - * Add setting background image. - * Add background image. - -2008-10-11 Graeme Gott - * Add intelligent word count algorithm. - -2008-10-10 Graeme Gott - * Store non-fullscreen size. - * Add closing files. - * Store fullscreen status across runs. - * Fullscreen applies to all windows. - * Save changes on program close. - * Add auto save. - -2008-10-08 Graeme Gott - * Center cursor when entering text. - * Store active document across runs. - * Add renaming files. - * Add saving files. - * Add opening files. - * Add creating files. - * Add support for multiple windows. - -2008-10-04 Graeme Gott - * Store preferences across runs. - -2008-10-03 Graeme Gott - * Add toggling auto-save. - * Add setting default file path. - * Add changing page width. - * Add changing font. - * Add changing colors. - * Add color button class. - -2008-10-02 Graeme Gott - * Hide mouse over text edit. - * Add printing support. - * Set text area colors. - * Autohide toolbar, scrollbar, and wordcount. - * Add toolbar. - -2008-10-01 Graeme Gott - * Add dynamic wordcount. - * Move scrollbar out of text edit. - * Add text edit to window. - * Add window class. diff --git a/NEWS b/NEWS new file mode 100644 index 00000000..40c72479 --- /dev/null +++ b/NEWS @@ -0,0 +1,288 @@ +1.4.4 +----- +* FIXED: Crashed when opening font dropdown in theme dialog. +* FIXED: Did not always ignore changes made by program. +* FIXED: Smart quotes were incorrect after opening punctuation. +* Translation updates: German, Greek, Hebrew, Indonesian, Russian, Turkish. + +1.4.3 +----- +* FIXED: Unsaved new files were not restored from cache. + +1.4.2 +----- +* Added support for Qt 5. +* FIXED: Did not play key press sound for non-Latin languages. +* FIXED: Crash when ignoring words in spelling dialog. +* FIXED: Could not end italics before smart quote. +* Translation updates: Catalan, Hebrew, Italian, Turkish. + +1.4.1 +----- +* FIXED: High CPU use in Ubuntu 10.04. +* FIXED: Crashed when typing circumflex with focused text. +* FIXED: Showing scene list moved cursor to start of document. +* FIXED: Played sounds constantly in Ubuntu 10.04. +* FIXED: Could drag scenes in Read-Only files. +* FIXED: Could insert symbols in Read-Only files. +* FIXED: Could paste unformatted in Read-Only files. +* FIXED: Could check spelling of Read-Only files. +* FIXED: Cleared keyboard shortcuts not saved. +* FIXED: Cannot add new keyboard shortcuts with the Shift key. +* Translation updates: Chinese (China), Czech, Greek, Hebrew, Romanian, Swedish, Spanish. + +1.4.0 +----- +* Added scene list sidebar. +* Added focusing text. +* Added line spacing in themes. +* Added symbols dialog. +* Added monitoring files for changes. +* Added editable keyboard shorcuts. +* Allow changing formats in save dialogs. +* Switched to enchant for spell checking. +* Check spelling in background. +* Removed included dictionaries. +* FIXED: Could not save to WebDAV. +* FIXED: Insert key did not switch to overwrite mode. +* FIXED: Hiding toolbar did not shrink header. +* FIXED: Regression - SDL_mixer was not loaded in Debian. +* FIXED: Could save over files open on other tabs. +* FIXED: Switching themes still wasn't properly focusing text. +* FIXED: Theme previews did not scale tiled or centered images. +* FIXED: Warned user twice about every malformed file. +* FIXED: Could not interact with dialogs during load. +* FIXED: Did not check spelling of pasted paragraphs. +* FIXED: Regression - Windows did not load SDL. +* FIXED: Regression - fallback icons were not used. +* FIXED: File rename did not change formats. +* FIXED: Default shortcuts conflicted on the Mac. +* FIXED: Restoring from cache treated all files as plain text. +* FIXED: Filenames were incorrect after undo and redo. +* FIXED: Formatting of first paragraph was lost on reload. +* FIXED: Switching themes wasn't properly focusing text. +* FIXED: Text brought onto current line was not focused. +* FIXED: Replace all could not be reverted with a single undo. +* Translation updates: Chinese (China), Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak, Spanish, Spanish (Mexico), Swedish, Ukrainian. + +1.3.6 +----- +* FIXED: Saved cache files more frequently than necessary. +* FIXED: Displayed paths did not use native separators. +* FIXED: Crashed when loading empty RTF files. +* FIXED: Emergency cache files could have broken names. +* FIXED: Was not loading data from emergency cache files. +* FIXED: Emergency cache was not working for rich text. +* FIXED: Data was not always written to disk. +* FIXED: Was adding spaces before pasted rich text. +* FIXED: Inserting text resets alignment. +* Translation updates: Danish, Spanish. + +1.3.5.2 +------- +* FIXED: Did not handle loading menu icons correctly. +* Translation updates: Dutch, Finnish, Greek, Hungarian, Spanish. + +1.3.5.1 +------- +* Added scalable icon. +* FIXED: Did not correctly handle multi-byte characters in RTF. +* FIXED: Interface was incorrectly hidden while fullscreen. +* Translation updates: Dutch, German. + +1.3.5 +----- +* Compress exported themes. +* FIXED: ODT block settings were not respected. +* FIXED: RTF block settings were not respected. +* FIXED: Sometimes did not display opened documents immediately. +* Translation updates: Czech, German, Italian, Polish. + +1.3.4.1 +------- +* FIXED: Missing Qt translations on the Mac. + +1.3.4 +----- +* Added support for copying RTF. +* Added basic ODT support +* FIXED: Regression - changing dictionary required restart. +* FIXED: Always vertically center did not work with new documents. +* FIXED: Printed spellchecking highlights. +* FIXED: Did not load file stats when loading file. +* FIXED: Font names were sometimes inserted at head of document. +* FIXED: Crashed when typing after alert for no sound effects. +* Translation updates: Czech, Finnish, French, German, Greek, Italian, Polish, Portuguese (Brazil), Russian, Spanish, Spanish (Mexico), Swedish, Ukrainian. + +1.3.3 +----- +* Added emergency file cache. +* Replaced icon and load image. +* Improved Mac integration. +* Switched to SDL_mixer instead of libao. +* FIXED: Timers action didn't always use theme icon. +* FIXED: Did not follow toolbar style by default. +* FIXED: Did not raise to front in GNOME2. +* FIXED: Cancelling adding a theme did not work. +* FIXED: Font size always show decimal. +* FIXED: Incorrectly handled paragraph end in RTF. +* FIXED: Played sound effects when text was removed. +* FIXED: Could not type in timer time edit. +* FIXED: Incorrect background color for preferences tabs. +* FIXED: Document details were visible through load screen. +* FIXED: Load screen text was not always monospaced. +* FIXED: Replacing quotes with LaTex quotes did not update all quotes. +* FIXED: Could not scroll over background in Qt/Cocoa. +* FIXED: Regression where text did not fill text area. +* FIXED: Scrollbar did not disappear when mousing into header. +* FIXED: Could not interact with tabs in Qt/Cocoa. +* FIXED: Masked scrollbars still showed a pixel. +* FIXED: SDL_mixer was not loaded in most Linux distros. +* FIXED: Documents were visible when resizing window. +* FIXED: No sound on characters inserted with "compose" key. +* FIXED: Large documents were not centered. +* FIXED: Documents were sometimes displayed truncated. +* FIXED: Could not access menubar while fullscreen in Unity. +* FIXED: Could not leave fullscreen in Unity. +* FIXED: Closing the color picker does not return focus to theme dialogs. +* FIXED: Wasn't switching to already opened document. +* FIXED: Dropping files on main window pasted URLs in KDE. +* FIXED: Qt translations were not deployed on the Mac. +* FIXED: Word count issue with Persian/Farsi. +* FIXED: Forgot new documents saved when closed. +* Translation updates: Czech, French, German, Polish, Portuguese, Portuguese (Brazil), Russian, Spanish, Spanish (Mexico). + +1.3.2.1 +------- +* FIXED: Crashed when typing. +* Translation updates: Spanish (Mexico). + +1.3.2 +----- +* Added rounded corners to themes. +* FIXED: Ubuntu panels appeared when find dialog was shown. +* FIXED: Jumped while selecting text and scrolling. +* FIXED: Statistics and centering were broken for large documents. +* FIXED: Was recentering when backspacing at end of document. +* FIXED: Header stayed visible when menus closed. +* FIXED: Could not select text where header is shown. +* FIXED: Header wasn't shown when menus were shown by keyboard shortcuts. +* FIXED: Toolbar outline stayed visible when it was expanded. +* FIXED: Automatic spellchecking highlighted current word. +* FIXED: Did not inform user when archives have no dictionaries. +* FIXED: Brazilian Portuguese translation could not open all files. +* FIXED: Portuguese translation had incorrect file extension. +* FIXED: Could not scroll over padding. +* FIXED: Could not add words with smart quotes to personal dictionary. +* FIXED: Could add word to personal dictionary multiple times. +* FIXED: Played typewriter sounds for non-printing keys. +* FIXED: Did not center for themes with padding. +* Translation updates: Czech, French, Polish, Portuguese, Portuguese (Brazil), Spanish. + +1.3.1 +----- +* Added typewriter sound effects. +* FIXED: Sometimes segfaulted when scrolling. +* FIXED: The C locale was assumed to be UTF-8. +* FIXED: New documents were always centered. +* FIXED: Replace required clicking twice. +* FIXED: Text indents were different sizes. +* FIXED: Did not handle opening Read-Only files. +* FIXED: Did not prompt when there was an error saving files. +* FIXED: Closed even when unable to save files. +* FIXED: Preferences dialog was too big for small screens. +* FIXED: Save As completed even if saving failed. +* FIXED: Crashed if preview image was not created. +* FIXED: Font size was not always listed. +* FIXED: Panels were visible when mouse was over padding. +* FIXED: Informed user of Read-Only status of already open files. +* FIXED: Could not switch to rich text. +* FIXED: Could not update smart quotes for plain text files. +* Translation updates: French, Polish, Portuguese, Portuguese (Brazil), Spanish. + +1.3.0 +----- +* Added text formatting. +* Added smart quotes. +* Added session management. +* Added timers and alarms. +* Added importing and exporting themes. +* Added selected text statistics. +* Added dictionaries for supported languages. +* FIXED: Tab focus incorrect in some dialogs. +* FIXED: Text direction broken with Qt 4.7. +* FIXED: Default theme font incorrect. +* FIXED: Created empty tabs for unreadable files. +* FIXED: Warned about losing formatting of empty files. +* FIXED: Could not open symlinked files. +* FIXED: Could always change background image. +* FIXED: Could open empty recent timers menu. +* FIXED: Window background visible during resize. +* FIXED: Window could be made smaller than theme. +* FIXED: Default session was ignored. +* FIXED: File name not updated in interface when changed. +* FIXED: Allowed opening the same document twice. +* FIXED: Save dialog permanently stealing mouse focus. +* Translation updates: French, Portuguese. + +1.2.2 +----- +* Added portability support. +* Switched to native file dialogs. +* Updated keyboard shortcuts. +* Updated included libraries. +* Translation updates: French, Portuguese. + +1.2.1 +----- +* Added changing text area's horizontal position. +* Added disabling antialiasing. +* FIXED: Scrolling to top didn't work properly in Linux. +* FIXED: Scrollbar wasn't tracking properly. +* FIXED: Highlight was removed when right-clicking. +* FIXED: Only focused document was centered on launch. +* FIXED: Program would crash if dictionary couldn't be found. +* FIXED: Prompted user about replacing a removed dictionary. +* FIXED: Dictionary added most recently was not selected. +* FIXED: Dictionaries couldn't be used immediately. +* FIXED: Dictionary was assumed to use UTF-8 encoding. +* FIXED: Mouse cursor sometimes disappeared when opening files. +* FIXED: Interface was not hidden when mouse left window. +* FIXED: Margins were not correct when using Qt 4.6.0. +* FIXED: Clock did not respect user's locale. +* FIXED: Time daily goal increased when preferences changed. +* Translation updates: French, Portuguese. + +1.2.0 +----- +* Added spell checking. +* Added document tabs. +* Added menubar. +* Added toolbar customization. +* Added document statistics. +* Added second wordcount algorithm. +* Added option to use block cursor. +* Improved file saving. +* FIXED: Infinite loop when replacing all instances of a word. +* FIXED: Changing all misspelled words didn't start at beginning. +* FIXED: Changing themes increased progress on daily goals. +* FIXED: Newly created themes were not loaded. +* FIXED: Not properly centering opened documents. + +1.1.2 +----- +* Use UTF-8 character encoding for files. + +1.1.1 +----- +* FIXED: Was always launching with time based goals. + +1.1.0 +----- +* Added daily goals. +* Added support for themes. +* Added find and replace. +* Changed default centering. +* FIXED: Crash when first sentence was deleted. +* FIXED: Image selection dialog not showing last visited path. +* FIXED: Highlighted text using page alpha. From b2f370371a92005243f406b4108499f4b8349e05 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 13:09:06 -0400 Subject: [PATCH 175/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 4ddca02c..00f8fd65 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -3,6 +3,7 @@ focuswriter.desktop CC0 Fullscreen word processor + Vollbild-Textverarbeitungsprogramm フルスクリーン・ワードプロセッサ Processador de textos em ecrã completo 全屏文字编辑器 @@ -10,6 +11,9 @@

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

+

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

+

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

+

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

From 0c5aaf9862802ca64c38bebed96569809db08566 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 13:35:19 -0400 Subject: [PATCH 176/630] Bump version number. --- NEWS | 23 +++++++++++++++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 40c72479..902588fc 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,26 @@ +1.4.5 +----- +* FIXED: Infinite loop during replace all with regular expressions. +* FIXED: Regular expression replaces did not ignore whole words option. +* FIXED: Interpreted images in RTF files as text. +* FIXED: Context menu key did not show spelling menu. +* FIXED: Could delete all themes. +* FIXED: Did not recreate default theme until program restart. +* FIXED: Created a new tab for corrupted documents. +* FIXED: Reloading a modified file did not reduce daily goal progress. +* FIXED: Unable to overwrite current document. +* FIXED: Discarding a modified file did not reduce daily goal progress. +* FIXED: Locale dialog always prompted users of System Language to restart. +* FIXED: Symbols dialog had help titlebar icon. +* FIXED: Second instance would not open relative paths. +* FIXED: Closing last empty document increased untitled count. +* FIXED: Regular expression searches did not ignore whole words option. +* FIXED: Paragraphs not always focused properly when merged. +* FIXED: Selected session was incorrect when switching sessions was canceled. +* FIXED: Could open unsupported multimedia files. +* FIXED: Hyphenated lines were not focused properly. +* Translation updates: Arabic, Chinese (China), Czech, English (United Kingdom), Finnish, Greek, Hungarian, Korean, Indonesian, Serbian, Vietnamese. + 1.4.4 ----- * FIXED: Crashed when opening font dropdown in theme dialog. diff --git a/focuswriter.pro b/focuswriter.pro index a4444c08..3497dc2e 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -22,7 +22,7 @@ macx { LIBS += -lz } -VERSION = 1.4.4 +VERSION = 1.4.5 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index 8c18b3c7..69eb7f30 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.4' +VERSION='1.4.5' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 81987732..4309853f 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.4 +SET VERSION=1.4.5 ECHO Copying executable MKDIR %APP% From b7be44ae30e1d4859b73e0184e949f73a52de8ef Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 25 Mar 2014 13:59:23 -0400 Subject: [PATCH 177/630] Fix compiler errors. --- focuswriter.pro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index 3497dc2e..55e4e278 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -34,7 +34,7 @@ unix: !macx { macx { DEFINES += RTFCLIPBOARD - INCLUDEPATH += src/nsspellchecker /Library/Frameworks/libzip.framework/Headers + INCLUDEPATH += src/nsspellchecker src/rtf /Library/Frameworks/libzip.framework/Headers LIBS += -framework libzip -framework AppKit HEADERS += src/nsspellchecker/dictionary.h \ @@ -49,7 +49,7 @@ macx { SOURCES += src/rtf/clipboard_mac.cpp } else:win32 { - INCLUDEPATH += enchant libzip src/enchant + INCLUDEPATH += enchant libzip src/enchant src/rtf LIBS += ./enchant/libenchant.dll ./libzip/libzip0.dll greaterThan(QT_MAJOR_VERSION, 4) { LIBS += -lz From da6b829cc85da1931fcec3b2ad8a4c1a96f9c5e1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 26 Mar 2014 05:37:13 -0400 Subject: [PATCH 178/630] FIXED: Long session names made session menu unworkable. --- src/session_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/session_manager.cpp b/src/session_manager.cpp index 129baab7..287725f2 100644 --- a/src/session_manager.cpp +++ b/src/session_manager.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -381,7 +381,7 @@ void SessionManager::updateList(const QString& selected) continue; } - QAction* action = m_sessions_menu->addAction(name); + QAction* action = m_sessions_menu->addAction(fontMetrics().elidedText(name, Qt::ElideRight, 3 * logicalDpiX())); action->setData(name); action->setCheckable(true); m_sessions_actions->addAction(action); From d3d8119f510b009ab91ec7fc050af8a95dc5f313 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 26 Mar 2014 10:35:28 -0400 Subject: [PATCH 179/630] FIXED: Theme names could not contain periods. --- src/theme_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/theme_manager.cpp b/src/theme_manager.cpp index 4fc92869..f751111f 100644 --- a/src/theme_manager.cpp +++ b/src/theme_manager.cpp @@ -60,7 +60,7 @@ ThemeManager::ThemeManager(QSettings& settings, QWidget* parent) m_themes->setWordWrap(true); QStringList themes = QDir(Theme::path(), "*.theme").entryList(QDir::Files, QDir::Name | QDir::IgnoreCase); foreach (const QString& theme, themes) { - addItem(QUrl::fromPercentEncoding(QFileInfo(theme).baseName().toUtf8())); + addItem(QUrl::fromPercentEncoding(QFileInfo(theme).completeBaseName().toUtf8())); } QList items = m_themes->findItems(m_settings.value("ThemeManager/Theme").toString(), Qt::MatchExactly); if (!items.isEmpty()) { @@ -208,7 +208,7 @@ void ThemeManager::importTheme() } // Find theme name - QString name = QUrl::fromPercentEncoding(QFileInfo(filename).baseName().toUtf8()); + QString name = QUrl::fromPercentEncoding(QFileInfo(filename).completeBaseName().toUtf8()); while (QFile::exists(Theme::filePath(name))) { bool ok; name = QInputDialog::getText(this, tr("Sorry"), tr("A theme already exists with that name. Please enter a new name:"), QLineEdit::Normal, name, &ok); From bb84e4e57dc10ce61ba397f75382f78d13678924 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 26 Mar 2014 10:35:42 -0400 Subject: [PATCH 180/630] FIXED: Session names could not contain periods. --- src/session.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/session.cpp b/src/session.cpp index 24e62563..7b70d802 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -139,7 +139,7 @@ QString Session::pathFromName(const QString& name) QString Session::pathToName(const QString& path) { - return QUrl::fromPercentEncoding(QFileInfo(path).baseName().toUtf8()); + return QUrl::fromPercentEncoding(QFileInfo(path).completeBaseName().toUtf8()); } //----------------------------------------------------------------------------- From 1669817ea87aff0380f5393e3038606fc0826e3e Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 26 Mar 2014 20:45:54 +0000 Subject: [PATCH 181/630] log changes --- debian/changelog | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/debian/changelog b/debian/changelog index 125f61ac..9a1bf586 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,26 +1,12 @@ -focuswriter (1.4.4+git.6.7dd2047-1) unstable; urgency=medium - - * Track upstream maintenance branch - - 470afbf FIXED: Second instance would not open relative paths. - - 3080967 FIXED: Symbols dialog had help titlebar icon. - - 9bda9c0 FIXED: Locale dialog always prompted users of System Language to - restart. - - f1adc3a FIXED: Discarding a modified file did not reduce daily goal - progress. - - 4e7a15c FIXED: Unable to overwrite current document. - - 7d72227 FIXED: Reloading a modified file did not reduce daily goal - progress. - - d163e86 FIXED: Created a new tab for corrupted documents. - - bff55ac FIXED: Did not recreate default theme until program restart. - - 7d95657 FIXED: Could delete all themes. - - ce3e44e FIXED: Context menu key did not show spelling menu. - - c59bf51 FIXED: Interpreted images in RTF files as text. - - 56cfb56 Add support for more RTF mimetypes. - - 6b149bc Require Qt 5.2 on the Mac for clipboard handling. - - 7dd2047 FIXED: Regular expression replaces did not ignore whole words - option. - - -- Barak A. Pearlmutter Mon, 24 Mar 2014 19:10:18 +0000 +focuswriter (1.4.5-1) unstable; urgency=medium + + * New upstream release + * Track upstream maintenance branch + - da6b829 FIXED: Long session names made session menu unworkable. + - d3d8119 FIXED: Theme names could not contain periods. + - bb84e4e FIXED: Session names could not contain periods. + + -- Barak A. Pearlmutter Wed, 26 Mar 2014 20:45:31 +0000 focuswriter (1.4.4+git.5.56edf89-1) unstable; urgency=medium From c3c600daefb9f40c2e150813e00240bab2a20675 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 27 Mar 2014 10:28:17 -0400 Subject: [PATCH 182/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 43 +- resources/unix/focuswriter.desktop | 8 +- translations/focuswriter_he.qm | Bin 28263 -> 28207 bytes translations/focuswriter_he.ts | 60 +- translations/focuswriter_hy.qm | Bin 0 -> 32976 bytes translations/focuswriter_hy.ts | 2024 ++++++++++++++++++++++++ 6 files changed, 2094 insertions(+), 41 deletions(-) create mode 100644 translations/focuswriter_hy.qm create mode 100644 translations/focuswriter_hy.ts diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 00f8fd65..166cb41f 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -3,23 +3,46 @@ focuswriter.desktop CC0 Fullscreen word processor + Textový procesor v režimu na celou obrazovku Vollbild-Textverarbeitungsprogramm + Koko näytön tekstinkäsittelyohjelma + מעבד תמלילים במסך מלא + Լիէկրան տեքստային խմբագրիչ フルスクリーン・ワードプロセッサ Processador de textos em ecrã completo - 全屏文字编辑器 + Procesor de text pe tot ecranul + Обрађивач текста у пуном екрану + Ordbehandlare med helskärmsläge + 全屏文字编辑器

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

+

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

+

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

+

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

+

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

+

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

+

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

+

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

+

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

+

FocusWriter 是个简洁的,专注于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

+

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

+

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka säätävät fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

+

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանելու աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

+

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

+

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

+

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

+

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

+

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

-

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

-

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

-

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

-

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

-

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

-

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

-

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

-

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

-

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

+

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

+

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

+

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

+

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

+

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

+

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

+

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

+

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

http://gottcode.org/focuswriter/screenshots/appdata.png diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index c48e1d70..e9bb6bb7 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -11,6 +11,7 @@ Name[fi]=FocusWriter Name[fr]=FocusWriter Name[he]=FocusWriter Name[hu]=FocusWriter +Name[hy]=FocusWriter Name[id]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 @@ -20,6 +21,7 @@ Name[pt]=FocusWriter Name[pt_BR]=FocusWriter Name[ro]=FocusWriter Name[sr]=FocusWriter +Name[sv]=FocusWriter Name[tr]=FocusWriter Name[vi]=FocusWriter Name[zh_CN]=FocusWriter @@ -34,6 +36,7 @@ GenericName[fi]=Koko näytön tekstinkäsittelyohjelma GenericName[fr]=Traitement de texte plein écran GenericName[he]=מעבד תמלילים במסך מלא GenericName[hu]=Teljesképernyős szövegszerkesztő +GenericName[hy]=Լիէկրան տեքստային խմբագրիչ GenericName[id]=Layar Penuh GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 @@ -41,8 +44,9 @@ GenericName[nl]=Volscherm tekstverwerker GenericName[pl]=Pełnoekranowy edytor tekstów GenericName[pt]=Processador de textos em ecrã completo GenericName[pt_BR]=Processador de texto em tela cheia -GenericName[ro]=Procesor de test pe tot ecranul +GenericName[ro]=Procesor de text pe tot ecranul GenericName[sr]=Обрађивач текста у пуном екрану +GenericName[sv]=Ordbehandlare med helskärmsläge GenericName[tr]=Tam Ekran Kelime İşlemci GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình GenericName[zh_CN]=全屏文本编辑器 @@ -57,6 +61,7 @@ Comment[fi]=Kirjoita ilman häiriötekijöitä Comment[fr]=Écrivez sans distractions Comment[he]=כתיבה ללא הסחות דעת Comment[hu]=Írjon zavartalanul +Comment[hy]=Գրիր առանց ուշադրության շեղման Comment[id]=Menulis tanpa gangguan Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 @@ -66,6 +71,7 @@ Comment[pt]=Escreva sem distrações Comment[pt_BR]=Escreva sem distrações Comment[ro]=Scrieţi fără distrageri Comment[sr]=Пишите без ометања +Comment[sv]=Skriv utan distraktioner Comment[tr]=Dikkat dağıtıcılar olmadan yazın Comment[vi]=Không tạo sự xao nhãng khi viết Comment[zh_CN]=专心致志地写作 diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index f74b288026a005c62d5769ffce208f3ec7765ef7..44a4669aa5615cc4fcd347ffef1d9f4b124f3aa4 100644 GIT binary patch delta 3326 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 RQ5U5!C*bdy`D#u9|9|?r%|-wK delta 3343 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 Save File As - שמירת קובץ בשם + שמור קובץ בשם @@ -334,7 +334,7 @@ Select Dictionary - בחר מילון + בחירת מילון @@ -482,22 +482,22 @@ Word count - ספירת מילים + ספור מילים Page count - ספירת עמודים + ספור עמודים Paragraph count - ספירת פסקאות + ספור פסקאות Character count - ספירת תווים + ספור תווים @@ -567,12 +567,12 @@ Move Up - הזזה מעלה + הזז מעלה Move Down - הזזה מטה + הזז מטה @@ -618,12 +618,12 @@ Add - הוספה + הוסף Remove - הסרה + הסר @@ -826,12 +826,12 @@ Clear - טיהור + טהר Reset to Default - איפוס + אפס @@ -1022,7 +1022,7 @@ Remove - הסרה + הסר @@ -1175,32 +1175,32 @@ Add - הוספה + הוסף Modify - התאמה + התאם Remove - הסרה + הסר Import - ייבוא + יבא Export - ייצוא + יצא Close - סגירה + סגור @@ -1503,27 +1503,27 @@ Switch to Next Document - מעבר אל מסמך בא + עבור אל מסמך בא Switch to Previous Document - מעבר אל מסמך קודם + עבור אל מסמך קודם Switch to First Document - מעבר אל מסמך ראשון + עבור אל מסמך ראשון Switch to Last Document - מעבר אל מסמך אחרון + עבור אל מסמך אחרון Switch to Document %1 - מעבר אל מסמך %1 + עבור אל מסמך %1 @@ -1634,7 +1634,7 @@ Manage Sessions - ניהול סשנים + נהל סשנים @@ -1809,7 +1809,7 @@ &Decrease Indent - &צמצום שוליים + &צמצם שוליים @@ -1959,17 +1959,17 @@ Focus Off - כיבוי מרכוז + בטל מרכוז Focus One Line - מרכוז שורה אחת + מרכז שורה אחת Focus Three Lines - מרכוז שלוש שורות + מרכז שלוש שורות @@ -1979,7 +1979,7 @@ Focus Paragraph - מרכוז פסקה + מרכז פסקה diff --git a/translations/focuswriter_hy.qm b/translations/focuswriter_hy.qm new file mode 100644 index 0000000000000000000000000000000000000000..315e93a5a9ac213817eafae2949cdc6deb084787 GIT binary patch literal 32976 zcmbV#4}4rzmH%xrZ<0(VlQe`4C%knmeQ6`3Te~7q;1-?R0o_o%@=l?zTX8G6qr#}6=Pu==&r%Zq3!=L%rmsSc<|KCD{J|V=1mk6=; zpM+=}me1y&$mi;B3$eZvzi$?z`(`07`8y%DJtf3~Tjg`pe~PLvVBDEYMAZZMymvrU zef3E^KPp0BcwUHIKN6vbLqeSYJrR1YONhu@!kCNC&$&k!7pxXy+W+GDIU$;UB8+?9 z7Gl*6V$N-|gxGSXnDhB@JdcPuG=A%8V$O4|cwU4j!MR4vd1C>7J}TzkaGwy{PY`o& z#CzLb5p$0`fuElgb05d&JAN(BJK<#^!gXR@+ed}i@Rryx_evqoxJGPPg8AD=@B}TZ z|0K@eay;-jS8TNQ3bFhvqUZ0xgZ?{2@8feo`)sl8s_TU~>p}TEw^@AfUEtgK3$e2a zpRfF>*qQpI5XQgBXKasrp3*Fziw5L#-7K;5+n{5nAug(VK!~o3#YNQ^zp+|e9LBTj zR{7kxKwNy+9PnqUxTIl)5EpcaWN5JvJFgY{epoF;v|ilx-ew^d{j+%XpI;Z^gr~#{ zt=9>0@(0ArPya=T=9|9~;_NR~8Am=Q#H?jiO^1_0oVu`T>Vu$j`dC$O1Log; zO;zHF%Y?`_R9ORnmw3Hu?<*e!{ykMUJ#titlisVk^^VU8vF4JhJ32N9VOmvRxb1Nv zdj4GXMOvpVR@GO(@mV1*{CU-b*Wq8I0Ngvuj=8Ofp6lrs^`yb7h?0HRX=$Y z^Y?GBdhwN+LR@rF)ytPk*g$Zo5f{zTMUHqJUTZ-_?un zdJTM@Q+?L=Uj~2wt9lpX^GfyDeORCK_Elf=$1mdfv+9rh9QdtRTz#Z^wh&d5s_#1O z7m%;dSKlvYK~Em2zJCYcZv95}{U5zth$)AwAAaE(Ax?``fB&yB;Jc*y-;e$dI`&xg zFaG`xA(ri_{#6WgwIr(ln8)Xv`l|o>!Y0V)mqL+;eh<92gjzlfyhol1wMBP8PaX=b zzOzY)Igf`np7)Rt>pmIUc~y%L^DYdfi_p<&Uk~lQf0q!=D?;{F0rJ|Fc7P-}HtM7cax}w|H83 zzAc2f4bMO0=a1tFIlK4~Jm1ChjnLg6nLpe%me>V|Ac&=zb*8@H~JuN&7lV$Y87H?gM2O@4m~t!Bl!4@ z&_h=YVjZT29{oQvu)g8Yckjpm-n*e^hq{30Q0Up+koz_9&~qJ+3NiQO(2rlmx-Hom zI(os?Le&1snDjR6n)M^2djIvXM{y&>?|;!SK80~-U2a6zufp?9BlgStg!sU0;{yrU zg>$wUU4I5$OC!eW`(D8M%`>((0cu4&%skYw`Qf7@xfI0oarE#wQBdik zuTL8<^`9(6&35CZFN2=wmyG|q;Zh;m3gMdMH0bY3;o9kW*qL|3Q<9j!>+$djzkohp zba!~_cE~}`9pTeIh0i~{BfRJ;;47Aem;HGY4|v53YwkE!`LX+2*4{#BY_)*?$bb{59Zv z#@EB|obn>{@=*A%U&eFhuWPF3{85PGlQrRgfS!#0zNYz|$wCY~Su=O9f%WgNS>8|t z{AD#;pZhWF*QGV--vEy(FV>7S9EROmSTp(t=s0_6&7K4AK~HAY-2T;@!G|L?cTaj6 z^!%Xa?l6Ae{E?b_p4q?o4$;nPkgU-;I-3%-*L5%BtMU0k=j9`cUw_I~9t_?LrqSM7ZU`0uZ~zWogNleKk6HareFy1MR; z9Wl)J9r?84b$8Xg0(MAC_in;^H5`qYPh15) zTpyYHJ;+g2D$;Q>)_wHG$k_v*5@PtINdGd>bNqV|>)F+K?}W%5hrzcqvylfb1DsQD zjePUQ0_5$X$P-g^@3=qm{cnN~%ifN>viB0`!;_I$SAx#0 z75U9Toe+~wjU1(Tj&Dv$60@>Pdy92R=Bl(?5sl=ceH*_3-oL0Q}z31LcWF*^`HCYCivm8`up#%fxTE; z|Jd}uhrc+l{^`442Aw~W&-(u>pC^4!J{Q)==h}pPb`Qzt<~sQtIPMGFJ)BbV-r z7OTDmf0K{i^)ENWjy)Is#_z!I?f(<~=FhO6T}PuoT{RtgJQ#iH(Q4p#IQsKIGP9+R@sqyK&}aG!%b|b@;%a z8uon~>(KVahUi^nFV8b#H{96|z5GM$ zqu1SnxaH~CZLeMp{p^apM0%V3ZtUe>PlJ7VG4|?{@J|=s6npp55XL>w*m*1DFtnht z``WYc^XrW}UI3owyx3@+{J+5GvyG|yw!u!0Hs+7q1-w4lc;yk`Kll8`hv)AF-})NA zx9T|fiLW=lGZT0>-r4xh^*6!JT$2K^&tL^ai_vQ&jI3c9X<>>s(JB^-*|qqE0N+Gp zRXUru%(m8rvmvI!=uBI=!Xz3OGZq>J<0@khzA#pes9lv!rxT-j%lH0f%yST5nUeRz ztM`m1GX0*nqhggPh@41^xuQ$K4zDWY(sR4$-3VjSofx-rjLrgM6TlMqL&k1N44w&N z1YZM25@=p&jPY;jyMi&KfHric@*}By-eibDuxA>JFg}g1gTe&VVL&>}vkfuJ=4cFS z=uD^0HL0|fH{0eg&uY7}$>NBWk!;&$tT*-ok5T@Aw{Zo&&j4zlHiKm99^g*6ri>y# zcQaiF4a|w<$`UrlII!4lT&HL`g=Q~i@`>G6znL6LWCnr9SPCEZSteGp&`$J~VzfwX z7Nf!v8PO%OA}NYugnuf4wr%)s4;F$1V~%LY@B8tSD;_6q9;q*g0e7zhxHHe&;r?x+J>A*Eu( zSrYTTSd#q;zi2PSo3S%H^L|2aKXy3-@GCHdu8+2Lz^7U0rfX4L3B7_*vfneV!<(g+ zXBQb#Tbe!ZDiT(Mgj8nGOytc`mgoYh4l62_FPX^on+YiGKsGm$C=~E!y9q1BpSzz0 zEb=sn65+hZ$l*)39j=Wqdb7FQxSww;6dg%GNMI2TF$~yB&@+mkrRFkC_+;D|gb19* z4&yXUFi+f`N%TP;3t2O}+scjQQU%LAt##pP0k&tkn$r1F-N{{9b39u##}b(WF)+u*$8>a@SG>`& zw>uJry1&}SKgRFD)ACQ9Sp+-;hMiUiF9_5!@U-~-^*MiqcrRpR~z4I!LBBGWxYcq0TYGF&9lPj!pdZ@ z76>9;%%jGndMRmUG9d$FFH%GeN$5c-Al6nSNevFVqPlA@A$UjB`N(g)(I89Xn4%5s{<#D&o6R zzd{RkP%YSTTdl!jI*~K2J)=1*pGU~W9@;xobA`pLsjzm7eB;>LLbWJ{CJf=NfIUUW z9OY{)JHdu)wr0#!CSOQol2%)OHrrG$elvaZKq(<|DoWS#ho}QLj^LY2kQZ265HKKX zftlBWr3p?gt}s5N*x2BJ97`33I)Y%%08A+_PQ*lR|1e7*2v?Bmd#ywcF<5_gjDue< zZc!bMZxmvUz}ctkqri9>D3RprbJy8(7e|9Acz>aa7w>t{%V8GC-I$-2ot7pCGezDF zLX1x-n7_P4Jezh5W#N3rvbp}ena!j*3i5)UCE5&`s`k-f2FOwlkmELRHzS$Swkd1o zi-SnCD8a}}ZR9w&eqCyCD2=az?WCLGhNL2^ELE|*y0f4Cmv2zJvC&q#B+wz>KwQq@ zpW`3&FwaeEC$Ac^lEY^2sFhAr0NKtK!UvvQoHSgLMqdG7{YV0|IR$`v{&8ioP{?N3 z5KlpFZ0AfsjWmz!g^NanGDMR{krepG&l1ZyUN118X>5|sUK+#>FsZx63dN<#%X`Q3 z1#86YMrvCGVk-z}v^$$jq%F-oL_pP;M;t?&vITYs{?{|ca-QxAp4#=$j;WLKM5K|n z9)h&VPo%*C(jeXO*uz9VewI2xYeX3gd60u(4kf&9D88X5ZIKm+sVpRNi1>z5c{4FO znocDXBu$h6aPTL+Jj|Avwh5=`u#gzGOlx4kO3J+6Pgt9=ti((>NWx_TMUBUb!_#}M zG~ktB;mpalz(2_}I8;faFYQoZ!<|Vd|DN2Fvj!{#>PaiFEty#!3P{kMOpS!aj-?E+ zW6`uSL#G>yc|OuKvLKhzTH_01X=D^V4NzCJ*BVXa5`}Dzgs=>_^Vm?083zE4mR}le z^03lFQQ$B{H4r>q#U{a$qBg9ioZ6WlON{4D;)jCQ((gD$U--u1AKOjxf_x zuO+3~NTzwdA{)-q^ueu#OzSKbvPekn**QzFi%b(%f)>qZ$FxY$@%$z%gFs(}$d91|~jb$~IZB!CSLn-ysjlN{xwK#yDG znkEf?-ZuDDTcA|3Fh0swuMBQcSYPsSJcHs(&8qCkh+UN}GjImy(v+W&IFZ+-?^Ll; zfkHhPLYgU5QrEb#osl35OP-sGgrhdmiGXE`bR|*{|Fzi!2V7+^>|n<-21`tfPq6^m z5l62%GT`6nv$3Vo+}D&YB$hCT6f&576lf=MDXS7KPA2XXI$l24qDV~0OB^y>B|oVv zwL8^sQCg?VCFN52)Se3BIhFmeG*-jLI0)X&nzY+p2nkw7bY)l;GtR_9WFdzc2)nB% z;jU~EHJu9cHyh_*!H7JWwCaIi&FcOX6|pJ~Cr8!KA-pt=Zc9oI(>)n! z!fkKw=~=yXRcG(&3Orcin=%F2CGSHf(J|SwWI6GqlscH1;z*yBt0b-wJM@9_Dh|~; z(NzUxW1xQz7iLSHbM3}drdY5l+QTUvUpvYuRSv0(n!j!%3WsKwowAf!pq3IKb_SwA z)G&zcoOzT15XMf-uyI%oL4260B;liw09m9VGle}7$h+%R=sPDI>^G!YRK`&KPUfbz z@5iSo5#ax|fTtT$F4<{e;?m6-%S0qNf?AcCAIjzm$zlPepKN9TkzxV0VY_OW$`4Uo zhyqa3vido*Ekk_NSjxE)Z?`BG)b${wHhWWhEAe3p5A~Th1th{iCUU3kw)>DdR*CC? zsF#P{*aO3e^493kgdW?RXbOdLy#iWMZcSFu%YdIZ$)xpziYkD|^+4;gnM4|8dk%aP zvf^H5HCj}dPI`V=GC%>V*8=7W8aY9+r_9uCaFQ~tA;+l4Uhn|;q#wVf!h)O8P2FmZ zSY%f00L&cC=3(CD=31FqnlOt62kg&#!+-{DuRvF`zi6*m6PEiZ6-GB9oR>wlq=&8H zUWCsTUHJ^PEJ)kH3u$!iwbnQ?+0L1cX|3mRK5rp^cg4J{;ZTIu_S$M+fz(Cs2eOA5 zbq@SWz9MFOSzmO}3+G-jIxt~t<+cOW5+&i3B+JYMp^zf9p?8Eb;me9h)+;KbEYgrj z(Ka&0a9NJ9h?fVcN{hIPCUQYXdq=XUkRz$C9F4xe%2XMNpI0X4hk}D{H{K`9=a%bY zT&}_H2ue4V1Ev|+IU6?eOtu?yDUYN08R;z`VMA>yS!rcMz&5YO7`=t@ip#kezSr5h zrvx@I;9~PZSwRlw0~LA&zJ>b)I@8(AV4h-Kj>js<^^}s}PBjfEcy$bKf_RQ%4hLn; zt|=ff2GV1jvP#)py9TK;@l-W;W9TNHVSA<@mUAMKyP?WtA_^P;Qf=GWEo6DY&u&?X z+i95DCH4vL$ZDlqZdyp2M^p|@A-w9(qBVrJ4-iHasHq}h7W2Gu+pk;}mki4Y_)bnZ zNdMUNkywkFyvH>YQ`4vYAc2IP!X*lGeET*0o-8>~NJJsfE)eV@yn+yR(J^PXE}V&t z@tl?DA2+Q%5bL}f{HQHc-uW?8g-Y?yELCkn2xuE55(|pA$%3$pSHe-VEt^gEB`Q@~ zsC-3?pnWvz4I%(VUX{!EJ6HTCZ$n1TyW%-BPZ?z;#q6-F4sgK0PVL>|`(xi8pXTma z%MD#_7g1Z}W!Cq+vLZ;BkfOu2n`4jp*_Lcc_e5&NSWe1ftR#D{(-EV_gv}z2ERItRd z$lz8^)VvB}gdt88{6}oe!7Vj1Od~6L{B{n%omffw9BL?|7C*8+ThWiSMkrIMAfJfB zKdf86I68{d35{`Ex2<7mVCEtKO~54cW(JiiWj7S9w$!!>)-q7^CeS#2%C3q6CnbLZ z6pm5V^jS*@J*HU#3DtXj{5q!3xIk;@>_zif3XNg~G1nGTsXQ<#VEcX+R5veg;Q-SOBg1H5v8(Q$cNZ9EK@<-= zfhTAoV?m0T#MdDbQyHZC+H70aQ6QA3gv3mPD%Ei7nPHAMn_(j(jSwm*n2}&W zgeF4J`Nc}tktdOytXUi|YO%3}Epw5@j2K1U>zJ1a8Pb@BR=FkW2$hM*|f_iTdq73phnkYv@>NnC=*oA zf{<+SHLvQ149<_bsLRdQ7Bo0$krWj%yDfVHF`iWa02borRr4nN~UMrR@1I2-(ktrP7w&db?$2Mv>$xvr`Oe zbd`k=U4U!i=p?{l9l6xBgRhTi;>pOEQ=zkToZG?dp9^hzYzjES0zb(sI&E@pJ->cc zoaaUc$h+x&I8ERwRij9VsE5V%*5OsuMOkLp`|o>@@v$tiUCw? zaCaDGZbwlTl>i(K8&u}2nUZ4|C%4L0hV_4&nvU6O>L-3p8Eyl4R(+=-hEcZdvW!`& z`XUd_=^fU`%hGw0yB?F-kx@Dl!1mTZ_jE8zKhUS|uWO0{g)sBuBYoL42PzG{@_Vgm zjY`wRZQ?m~(Co+ey0b+jj@oM3;mrtLC~R_Cqe@h3JvTa$s0K{j1nX0BWJWEhvB~kn z0mByAPJ`mggM135)WJ!%mNXnFz{hX3sNW2IH*jPK5Gyh!2Ff(9Dj+pB56h4h!@|%x zOUe**K8CsXi&r6PL)e(bIRiHNEq3WO810(gWG*!-+mC|A5+5Cfp(+wi*(q%6w`U5e zLK@VzE+mW%`1%p)XQJ>;R66$9V{r!o;nM~9lR zZejbGNcil1Ngs$7_(}@x68e^l8XQ@fNDdF?sHRNV`bM`Qd-8Q4GCI<_%fJdUpdi++ z;toT3w8jUIPEwG1qJ*zTgmL`W?i%;KKT~CIWRJ)zmuH05apZ&3%&i|KTYqYPV-2=5 z*n|ZPTgZut>=CCGa5vr}YtUO!fpxWzXO5!OL}Bh}4xWjUV^T1xkIG6cZQ(e?CRxO< zG)5Gx=JnVWLJf9JDu>z+Eq^fFh|vj%BM>~d?Jv}A4R9pnqqm*+&GxBzu^qv7lqw%2 zLK$8>|CV8t5J2O2B57|y`XE#6a}aPTVwEsSX|IGbkR~0%r={v!voVnyOl5+JnvM!6 zm2jy%O&y=qOif;k%gl;J^&4?So5BIBKN!pm6yGd1!gAZ?Dquuk@({JV(oq$Z|-DJwA4NhGOr+!`gbrQ*VYn*xXq930yS_EpnhykxhXV>TVAuColgeJ4Jusk;xl zq~-SX)j45uAAc@wYdd~RZ;>+~OG|qOPN8tv zxX3uD6$R(QNFg6iq3gachi*)C&g?NSEsl)h@DxrV@X3^PV(&P53Ane{$CDPAc4^q< zZe1xijBPjxT!|Ch)T20I(7t)_3d*o(41A|mJmleecxN^{Qf8t)D2KNOBv+62a-phV z4|z*ZF9SYx57v;O_a2{B5v9h?b32J+xLCod3CRuy9Q#L8Qeh}j;G$8xX;(Nn^1{Al z#u{^LYf<(adMW-`j=K0qMNotw1EgmhRC<@EQ~mGLEYjo4?g)Jx-QWVdMMCNy=(=UH z1jI^m9)2KE3B+~Feo&ROrIGSDOt;;lmSzDLdx4dFMb|TkN*Khn<1{54kTFFt2PUX2 z`{@iU{kv_F{sD6)DE!-$Lhs$ynkf>XTkvPm?*z&#=tqYf*-nYV>Z?-NX(Sbc2 zv8#mhBn-%{edGu~JCIsMHxfw`KNG}m4d!&f)J`NZ@Ye2y=ILf@w|9ma_6*bpj#R}9 zU*S0!FsY$C-{FAspt{5cw1JhoY&&<^38wG_c29TNSxkEtI&8{`L0Nc&uxuqMgK#r; z^vMpT;4ZF&v%qN?MJ?{PO60f$Mq7+#w)Oq6@xx#i*Q3+`+LB9*vscna1ZuFmd8fTO z%cHt-zs9Ky05v#gS7{sUUAh7Z3hSx{s;T4zj&7bpv}xd3wkEL-|2m*KBltfr-0siX zb?Z7tMmqAWmKuDM<2$-nhTLJLo>OBZdb+(lnZOKc6IJ3j&XgBS=DCNSX+{TdqS#ty z4)ncTE;nnarNN|Rp0Tmgv1)M{Codf`NGlhbXk;`2YKQ0mw+`a}E3_g{35TPs^|;*! zZHwdf7KS|AZpSfjRX(Y}XWr({$w)6*F7jrsn910wyB~Ut4U^v>)!_ap#}dg=B~b=i zb;^-bH&>S!|JXI2?E|?x?V||`M>P{F3yom$s05&nl9gz|6uIeOTJltxO||X1NHcWA z%k3ol(VRd){R3uBTufD>6qdzP563pwTIF|Jt#P3dj=PGa039!yl6J1{bqK+?U<|EmL0Y-NT*~k z$YNWd+F0W_1;PZf>53Ngkkm?i=Ctk|6s}K=LG0S71#dnzaI;Gd@4#Iz*)i6I1;=(W zlqhC2S{279w=QfYwEOv}=%9U6REIqcn=dPXpp-M>icHPH69pw4M~R`x##0|kJ91}X zASE;u&t9$u81a?aG$%Fs`^|V?1>Bwuqi|fs-QFP^7cDBkv-}B9Bks5ueM|&n z?1oB>KXm_-7dr7rUH{|ZPc2^pWN)JB;AdbE-9c$@X@agnWHhv%B=c^Wpgz8)m`>+G zo|W-VJOwbe!_G)8@t50-_&O`irwH|#Y5CV;MW}{fy8Jcq^@Riu<$33+#RzUwQH%&t ztCaUOLWh)@O4Qmmmo{kgz<_rUF^}S+LnI?U=F$Bd0nDRTFcPnWcCCQI8bA4wxT@rN zXC)p;k+vmGAsNOX^g?(C(2P#fOiN@Ji9HB6#6yIWeZOLie!uY z=Oap+>*_I_&o%^%CmEpS)b3H#2*fEl-*S-loXY~>?F%V&J#}$JO>}yjy^l`xEI_Dm zv4Lk{qj6{VJplcw0Cgs0g6iL{xf<5m!z1zDVjpxETX|l=BBd!!6-)URiOak#U|wPy zop_h$`*>!>wkU?dWVpL=I_-2BloN1zoVJH<%+9_$V0MyA+Ce*rtr&F-Ma>_M)2S05 z*9m2LR-TUGl~&XuaXwyz`+j`OO~cA{aTqkrC(|pPyB)=RZhoNff-bG1CJ0$Sq>7GK zcLWWG@Clhxsx0c8^QWGM`yZ(t3dJlg940dIUK<%7befZ4M zND%aBmm_&JdTOV3LsQ(jD5*oixwWC!T@H;c9>`lNLEh?ld8_y3a-HU#YM|a}-g&IUF9;ldfp@sh z-d$>lWWugWFJIz$`I1U6@AJI8uhPqI`Xte~ywc0=MbPr){l1r}Pz4PpBkzWJp;g7W zPl!Kg2TfkDHVU&w+ezMAlxaVjiV_sRx_K>WBSkLQ|Htn=2mDqeaUaBGXSl74oEN~*H7EmtjWgd zf^9GEEfsUHI(D{ZKq5xB5b1l?lxmk-f|v~joi@~N<3(XkU~&ers{pc5f-IY{&GLr2 z6=h_ygjOL2o)R3ZD5QK~vI1zMe8*Ok|^r^bRd0U+L@^C>X(Vimwo+0CVMux?{Kl}U}* zcNOWA&tbN?N02z~g%y;EmUE_s=yMHG(7_}f=KDWnq>pZL3TZ@@5WHrPKin|Rfgln&B^-P)D+z~eZPn53mZd6NaGeSfDIod3 zfIJYa#l;Qyoou+H1b_<5V7#WR$8T1D4M1jrbReIr_WIn->UJp=F}ofrS&cFFb=+wT*3K+SosG_q+{WYCxvJ;7r;!U)%IU&kliOb zojcJQL!uz>d_2q-^mE>fqpe-o)x8A!aw+`v6H5N1`J-L@6t4gUHdK0~e#4?H0pOi9 z^L$w2_G+E$ zRH5$2U$~)5RA4d8_(`}xy{Pe^MoS;Udy6j}pv2=7e4o1=X$)gdv zO~KXU_+u||U-^EMD((@>owHVQA1go|0J~fOiJ7$pItAyhaD6N)3-pIuh#q8HdbH?M z4{8(L2RW1!aEgrCs37C5R)0N;-@sp0cN06zMLU z=3iCUW+uVxYfI3;kdyLHB?YkCsaUfUVFREx95iE!Yu5SJWakQa9m8p=>g~XA`t02x zABQOAcs}v%HEvx2N6N_`4G*Pdy2w@AgX#*Csy59^YtXitar`I>O7#Oy_t| zRjOpSPTDTpx!6G{8`vPH(QeMs=Xl>2f}u!HH-dRtvl3+=x;JPHTA)QP_$laC8fiAk zQ7PTmMB(IKvbL~X% zWX=OOM>UL2(J(^Y)WO75`=vgky}K+wGMLTY>0})EPlo|7XH!;+jk-^TT@zh$Ne!aT zyJY={+vJio8a0d;dojizBUAUT;6mYJVr+|SieYW@7rA3-qD{qzt-=sax(p6^C1Q%S z)fnss^!i3Zw6{1K$6k8iR)VZJACkrtL{i!z>)k1M+!T3O*g5@((DC-sV;EZJ@A3ph zR0}wxbm7V{g16s;XHjZ2)rBulhd8r%>Gn>c?eI@9#R={d-PpKObWAh@NsgV;ANvfH z>L2qA6bINj{{%C9z@-7j0Img;ou$WZvj%+UR7{EWK&v4YPG_T-dba1Rpp3&gdw?iV zOQPG%FoVh|{Flk_*Z=S*6VE=Iju29euKpUJZUlQ!s3Hbp1>BqWjH9s05jVX=@vCgD)A`+kZcE~F$zR`8(p9q~k#kzrN=H!& QD=!-JCvJSnm_KLx|2`3lkN^Mx literal 0 HcmV?d00001 diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts new file mode 100644 index 00000000..06377c6f --- /dev/null +++ b/translations/focuswriter_hy.ts @@ -0,0 +1,2024 @@ + + + + + Alert + + + Close (%1) + Փակել (%1) + + + + Collapse + Ամփոփել + + + + Expand + Տարածել + + + + AlertLayer + + + Dismiss Alert + Վերացնել նախազգուշացումը + + + + Ctrl+D + Ctrl+D + + + + Document + + + + + + Sorry + Ներողություն։ + + + + Unable to save '%1'. + Պահպանումը հնարավոր չէ '%1'։ + + + + Save File As + Պահպանել նիշքը որպես + + + + + Unable to overwrite '%1'. + Վերագրանցումը հնարավոր չէ '%1'։ + + + + Rename File + Վերանվանել նիշքը + + + + Unable to rename '%1'. + Վերանվանումը հնարավոր չէ '%1'։ + + + + Reload File + Նիշքը նորից բացել + + + + Reload the file %1 from disk? + Նիշքը նորի՞ց բացել %1։ + + + + All unsaved changes will be lost. + Չպահպանված բոլոր փոփոխությունները կկորչեն։ + + + + Reload + Նորից բացել + + + + Plain Text (*.txt) + Հասարակ տեքստի ձևաչափ (*.txt) + + + + Question + Հարց + + + + Saving as plain text will discard all formatting. Discard formatting? + Հասարակ տեքստի ձևաչափով պահպանումը կվերացնի ձևավորումը։ Վերացնե՞լ ձևավորումը։ + + + + OpenDocument Text (*.odt) + OpenDocument Text (*.odt) + + + + Rich Text (*.rtf) + Rich Text (*.rtf) + + + + All Files (*) + Բոլոր նիշքերը (*) + + + + DocumentWatcher + + + File Changed + Նիշքը փոփոխված է։ + + + + The file %1 was changed by another program. + Նիշքը %1 փոփոխվել է մեկ այլ ծրագրով։ + + + + Do you want to reload the file? + Նորի՞ց բացել այս նիշքը։ + + + + Reload + Նորից բացել + + + + Ignore + Անտեսել + + + + File Deleted + Նիշքը ջնջված է։ + + + + The file %1 was deleted by another program. + Նիշքը %1 մեկ այլ ծրագրով ջնջվել է։ + + + + Do you want to save or close the file? + Նիշքը պահպանե՞լ, թե փակել։ + + + + FindDialog + + + Search for: + Փնտրել + + + + Replace with: + Փոխարինել հետևյալով՝ + + + + Ignore case + Մեծատառ թե փոքրատառ՝ կարևոր չէ։ + + + + Whole words only + Միայն ամբողջական բառեր + + + + Regular expressions + Կանոնավոր արտահայտություններ + + + + Search up + Փնտրել վերևում + + + + Search down + Փնտրել ներքևում + + + + &Find + &Գտնել + + + + &Replace + &Փոխարինել + + + + Replace &All + Փոխարինել &բոլորը + + + + Find + Գտնել + + + + Replace + Փոխարինել + + + + Replace %n instance(s)? + + Փոխարինե՞լ %n համընկումը։ + + + + + Question + Հարց + + + + + Sorry + Ներողություն։ + + + + + Phrase not found. + Փնտրվածը չի գտնվել։ + + + + Highlighter + + + Add + Ավելացնել + + + + Check Spelling... + Ստուգել ուղղագրությունը + + + + (No suggestions found) + (Տարբերակներ չկան) + + + + ImageButton + + + Open Image + Բացել նկարը + + + + Images(%1) + Նկարներ(%1) + + + + LocaleDialog + + + Select application language: + Ընտրել ծրագրի լեզուն + + + + <System Language> + <Համակարգի լեզուն> + + + + Note + Նշում + + + + Please restart this application for the change in language to take effect. + Լեզվի փոփոխության կայացման համար ծրագիրը վերագործարկեք։ + + + + PreferencesDialog + + + Preferences + Ընտրանքներ + + + + General + Ընդհանուր + + + + Statistics + Վիճակագրություն + + + + Toolbar + Գործիքների վահանակ + + + + Spell Checking + Ուղղագրության ստուգում + + + + Select Dictionary + Ընտրեք բառարանը + + + + + Sorry + Ներողություն։ + + + + Unable to open archive. + Սեղմված նիշքը բացել հնարավոր չէ։ + + + + Unable to read archive metadata. + Սեղմված նիշքի անդրտվյալների ընթերցումը հնարավոր չէ։ + + + + The archive does not contain a usable dictionary. + Սեղմված նիշքում գործածելի բառարան չկա։ + + + + Unable to open file '%1'. + Նիշքը բացել հնարավոր չէ '%1'։ + + + + Unable to close file '%1'. + Նիշքը փակել հնարավոր չէ '%1'։ + + + + + Question + Հարց + + + + Shortcuts + Ստեղների համադրություններ + + + + One or more shortcuts conflict. Do you wish to proceed? + Մեկ կամ մի քանի համադրություն համընկնում է։ Շարունակե՞լ։ + + + + The dictionary "%1" already exists. Do you want to replace it? + Բառարանն "%1" արդեն կա։ Փոխարինել այն նորո՞վ։ + + + + Daily Goal + Օրական սահմանաքանակ + + + + None + Չիք + + + + Minutes: + Րոպեներ + + + + + Words: + Բառեր + + + + Editing + Խմբագրում + + + + Always vertically center + Միշտ կենտրոնում՝ ըստ ուղղահայացի + + + + Block insertion cursor + Ներմուծման ուղղանկյուն շարժագիծ + + + + Smooth fonts + Տառատեսակը հարթեցնել + + + + Typewriter sounds + Գրամեքենայի ձայն + + + + Smart quotes: + Չակերտները փոխել + + + + Double + Երկգծիկ + + + + Single + Միագծիկ + + + + Scenes + Դրվագներ + + + + Divider: + Բաժանիչ նշան + + + + Saving + Պահպանում + + + + Automatically save changes + Փոփոխությունները լռելյայն պահպանել + + + + Remember cursor position + Հիշել շարժագծի դիրքը + + + + Contents + Պարունակություն + + + + Word count + Բառերի քանակ + + + + Page count + Էջերի քանակ + + + + Paragraph count + Պարբերությունների քանակ + + + + Character count + Նիշերի քանակ + + + + Page Size + Էջաչափ + + + + Characters: + Նիշեր + + + + Paragraphs: + Պարբերություններ + + + + Word Count Algorithm + Բառաքանակի հաշվարկի քայլաշար + + + + Detect word boundaries + Հաշվի առնել բառերի սահմանները + + + + Divide character count by six + Նիշերի քանակը բաժանել վեցի + + + + Style + Ոճ + + + + Icons Only + Միայն պատկերակներ + + + + Text Only + Միայն տեքստ + + + + Text Alongside Icons + Տեքստ՝ պատկերակների կողքին + + + + Text Under Icons + Տեքստ՝ պատկերակների տակ + + + + Text Position: + Տեքստի դիրք + + + + Actions + Գործողություններ + + + + Move Up + Տանել վերև + + + + Move Down + Տանել ներքև + + + + Add Separator + Դնել բաժանագիծ + + + + Command + Հրաման + + + + Shortcut + Ստեղների համադրություն + + + + Action + Գործողություն + + + + Check spelling as you type + Ուղղագրությունը ստուգել մուտքագրմանը զուգընթաց + + + + Ignore words in UPPERCASE + Անտեսել ՄԵԾԱՏԱՌԵՐՈՎ բառերը + + + + Ignore words with numbers + Անտեսել թվանշաններով բառերը + + + + Language + Լեզու + + + + + Add + Ավելացնել + + + + Remove + Հեռացնել + + + + Personal Dictionary + Անձնական բառարան + + + + Reader + + + + Not a supported RTF file. + Անհամապատասխան RTF նիշք + + + + Unable to open archive. + Սեղմված նիշքի բացումը հնարավոր չէ։ + + + + Unable to open file '%1'. + Նիշքի բացումը հնարավոր չէ '%1'։ + + + + Unable to close file '%1'. + Նիշքի փակումը հնարավոր չէ '%1'։ + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+վարընթաց սլաք + + + + Move Scenes Up + Դրվագները վերև տանել + + + + Ctrl+Shift+Up + Ctrl+Shift+վերընթաց սլաք + + + + Toggle Scene List + Ցույց տալ/թաքցնել դրվագացանկը + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Ցույց տալ դրվագացանկը (%1) + + + + Hide scene list (%1) + Թաքցնել դրվագացանկը (%1) + + + + Filter + Զտել + + + + Move Scenes Down + Դրվագները ներքև տանել + + + + Resize scene list + Դրվագացանկի չափը փոխել + + + + Session + + + + + + + + + + Default + Լռելյայն + + + + SessionManager + + + Manage Sessions + Գործաժամերի կառավարում + + + + S&essions + Գ&ործաժամեր + + + + New + Նոր + + + + Rename + Վերանվանել + + + + Clone + Կրկնօրինակել + + + + Delete + Ջնջել + + + + Switch To + Փոխադրվել + + + + New Session + Նոր գործաժամ + + + + Clone Session + Կրկնօրինակել գործաժամը + + + + Rename Session + Վերանվանել գործաժամը + + + + Question + Հարց + + + + Delete selected session? + Ջնջե՞լ ընտրված գործաժամը։ + + + + Session name: + Գործաժամի անվանում + + + + Sorry + Ներողություն։ + + + + The requested session name is already in use. + Գործաժամի այդ անունն արդեն գործածվում է։ + + + + &New... + &Նոր... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Կառավարում... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Մաքրել + + + + Reset to Default + Վերականգնել լռելյայն կարգավորումը + + + + + Shortcut: + Ստեղների համադրություն + + + + SmartQuote + + + Replacing quotation marks... + Չակերտների փոփոխում... + + + + Please Wait + Խնդրում ենք սպասել + + + + SpellChecker + + + Check Spelling + Ստուգել ուղղագրությունը + + + + &Add + &Ավելացնել + + + + &Ignore + &Անտեսել + + + + I&gnore All + Ա&նտեսել ամբողջը + + + + &Change + &Փոխել + + + + C&hange All + Փ&ոխել ամբողջը + + + + Not in dictionary: + Բառարանում բացակայում է + + + + Change to: + Փոխարինել հետևյալով՝ + + + + Checking spelling... + Ուղղագրությունը ստուգվում է... + + + + Cancel + Չեղարկել + + + + Please wait + Խնդրում ենք սպասել + + + + Spell check complete. + Ուղղագրության ստուգումն ավարտված է։ + + + + SymbolsDialog + + + Symbols + Նշաններ + + + + Recently used symbols + Վերջերս գործածված նշաններ + + + + All symbols + Բոլոր նշանները + + + + Details + Մանրամասներ + + + + Name: + Անվանում + + + + Insert + Ներմուծել + + + + SymbolsModel + + + Blocks + Բլոկներ + + + + Scripts + Գրանշաններ + + + + Theme + + + Untitled %1 + Անանուն %1 + + + + ThemeDialog + + + Modify Theme + Թեմայի փոփոխում + + + + Name: + Անվանում + + + + Background + Խորապատկեր + + + + No Image + Նկար պետք չէ + + + + Tiled + Սալապատված + + + + + Centered + Կենտրոնում տեղադրված + + + + + Stretched + Լայնքով ձգված + + + + Scaled + Համաչափորեն տարածված + + + + Zoomed + Խոշորացված + + + + Remove + Հեռացնել + + + + Type: + Տեսակ + + + + + + Color: + Գույն + + + + Image: + Նկար + + + + Foreground + Առաջակողմ + + + + Opacity + Անթափանցություն + + + + + + + pixels + պիքսել + + + + Left + Ձախից + + + + Right + Աջից + + + + Position + Դիրք + + + + Size: + Չափ + + + + Rounding: + Կլորացում + + + + Margin: + Արտաքին լուսանցքներ + + + + Padding: + Ներքին լուսանցքներ + + + + Text + Տեքստ + + + + Font: + Տառատեսակ + + + + Misspelled: + Սխալագիր բառեր + + + + Spacings + Տարածություններ + + + + Line Spacing + Միջտողային տարածություն + + + + Single + Մեկ տողաչափով + + + + 1.5 Lines + 1.5 տողաչափով + + + + Double + Կրկնակի տողաչափով + + + + Proportional + Համամասնական + + + + Paragraph Spacing + Պարբերության տարածություն + + + + Indent First Line: + Ներքաշված տողագլուխ + + + + Pixels Above: + Պիքսելների քանակը վերևից + + + + Pixels Below: + Պիքսելների քանակը ներքևից + + + + The quick brown fox jumps over the lazy dog + Որպես օրինակ բերված բնագիր. նայիր և ընտրի՛ր։ + + + + ThemeManager + + + Themes + Թեմաներ + + + + Add + Ավելացնել + + + + Modify + Փոփոխել + + + + Remove + Ջնջել + + + + Import + Ներմուծել + + + + Export + Արտահանել + + + + Close + Փակել + + + + Question + Հարց + + + + Remove selected theme? + Ջնջե՞լ ընտրված թեման։ + + + + Import Theme + Ներմուծել թեմա + + + + Themes (*.fwtz *.theme) + Թեմաներ (*.fwtz *.theme) + + + + Themes (*.fwtz) + Թեմաներ (*.fwtz) + + + + Sorry + Ներողություն։ + + + + A theme already exists with that name. Please enter a new name: + Այդ անունով թեմա արդեն կա։ Ընտրեք մեկ այլ անուն։ + + + + Export Theme + Թեման արտահանել + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Հարց + + + + Delete timer? + Ջնջե՞լ ժամաչափիչը։ + + + + <b>Words:</b> %L1 + <b>Բառեր</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Էջեր</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Պարբերություններ</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Նիշեր</b> %L1 / %L2 + + + + Set Delay + Ընդմիջում + + + + Set Time + Ժամանակամիջոց + + + + Delay: + Ընդմիջում + + + + Time: + Ժամանակ + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Զարթուցիչ + + + + Type: + Տեսակ + + + + Memo: + Հաղորդագրություն + + + + Edit + Խմբագրել + + + + Delete + Ջնջել + + + + TimerDisplay + + + HH:mm:ss + ԺԺ:րր:վվ + + + + No timers running + Միացված ժամաչափիչ չկա։ + + + + TimerManager + + + Timers + Ժամաչափիչներ + + + + New + Նոր + + + + Recent + Վերջերս գործածված + + + + Question + Հարց + + + + Cancel editing timers? + Չեղարկե՞լ ժամաչափիչների խմբագրումը։ + + + + +HH:mm:ss + +ԺԺ:րր:վվ + + + + %1 - %2 + %1 - %2 + + + + Tokenizer + + + Unexpectedly reached end of file. + Անսպասելի ժամանում նիշքի վերջին։ + + + + Window + + + Loading themes + Թեմաների բեռնում + + + + Loading sounds + Ձայնային նիշքերի բեռնում + + + + + Untitled + Անանուն + + + + Open File + Բացել նիշքը + + + + About FocusWriter + FocusWriter-ի մասին + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Լիէկրան պարզ տեքստային խմբագրիչ + + + + Copyright &copy; 2008-%1 Graeme Gott + Պատճենաշնորհ &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Թողարկված է <a href=%1>GPL 3</a>-ի արտոնագրով։ + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Գործածված են <a href=%1>Oxygen</a> թեմայի պատկերակները։ + + + + Used under the <a href=%1>LGPL 3</a> license + Դրանք գործածված են <a href=%1>LGPL 3</a>-ի արտոնագրով։ + + + + + Characters: %L1 / %L2 + Նիշեր՝ %L1 / %L2 + + + + + Pages: %L1 + Էջեր՝ %L1 + + + + + Paragraphs: %L1 + Պարբերություններ՝ %L1 + + + + + Words: %L1 + Բառեր՝ %L1 + + + + + %1% of daily goal + Օրական սահմանաքանակի %1% + + + + + Opening %1 + Բացվում է %1-ը + + + + Question + Հարց + + + + Save changes? + Պահպանե՞լ փոփոխությունները։ + + + + + (Untitled %1) + (Անանուն %1) + + + + Switch to Next Document + Անցնել հաջորդ փաստաթղթին + + + + Switch to Previous Document + Անցնել նախորդ փաստաթղթին + + + + Switch to First Document + Անցնել առաջին փաստաթղթին + + + + Switch to Last Document + Անցնել վերջին փաստաթղթին + + + + Switch to Document %1 + Անցնել փաստաթղթին %1 + + + + Loading settings + Կարգավորումները բեռնվում են + + + + Emergency cache is not writable. + Պահեստային հիշողությունը գրանցման ենթակա չէ։ + + + + + Warning + Զգուշացում + + + + FocusWriter was not shut down cleanly. + FocusWriter-ը ճիշտ չէր փակվել։ + + + + Restore from the emergency cache? + Վերականգնե՞լ պահեստային հիշողությունից։ + + + + Some files could not be opened. + Որոշ նիշքեր հնարավոր չեղավ բացել։ + + + + Some files were opened Read-Only. + Որոշ նիշքեր բացվել են միայն ընթերցման համար։ + + + + Text Files (%1);;All Files (*) + Տեքստային նիշքեր (%1);;Բոլոր նիշքերը (*) + + + + '%1' is newer than the cached copy. + '%1'-ը պահեստային օրինակից նոր է։ + + + + Overwrite newer file? + Նոր տարբերակը պահեստայինո՞վ փոխարինել։ + + + + Unable to load typewriter sounds. + Հնարավոր չեղավ գրամեքենայի ձայնը բեռնել։ + + + + Please make sure that SDL_mixer is installed. + Ստուգեք, որ SDL_mixer փաթեթը տեղակայված լինի։ + + + + %1 (Read-Only) + %1 (միայն ընթերցման համար) + + + + &File + &Նիշք + + + + &New + &Նոր + + + + &Open... + &Բացել... + + + + Reloa&d + Նոր&ից բացել + + + + &Save + &Պահպանել + + + + Save &As... + Պահպանել &որպես + + + + &Rename... + &Վերանվանել... + + + + Save A&ll + Պահպանել բո&լորը + + + + Manage Sessions + Կառավարել գործաժամերը + + + + New Session + Նոր գործաժամ + + + + &Print... + &Տպել... + + + + &Close + &Փակել... + + + + &Quit + &Դուրս գալ + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Խմբագրում + + + + &Undo + &Չեղարկել + + + + &Redo + &Կրկնել + + + + Cu&t + Հա&տել + + + + &Copy + &Պատճենել + + + + &Paste + &Փակցնել + + + + Paste &Unformatted + Փակցնել &առանց ձևավորման + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Ընտրել &ամբողջը + + + + Select &Scene + Ընտրել &դրվագ + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Ձևա&վորում + + + + &Bold + &Թավատառ + + + + &Italic + &Շեղատառ + + + + &Underline + &Ընդգծված + + + + Stri&kethrough + Ջնջ&ագծված + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Վեր&տողագիր + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + &Ենթատողագիր + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Ուղղել &ձախից + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Ուղղել &կենտրոնով + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Ուղղել &աջից + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Երկու կողմից &հավասարեցնել + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Փոքրացնել տողագլխի խորքը + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Մ&եծացնել տողագլխի խորքը + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Ձա&խից աջ տանել + + + + Ri&ght to Left Block + Աջ&ից ձախ տանել + + + + &Tools + &Գործիքներ + + + + &Find... + &Գտնել... + + + + Find &Next + Գտնել հա&ջորդը + + + + Find Pre&vious + Գտնել նա&խորդը + + + + &Replace... + &Փոխարինել... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Չակերտները փոխել + + + + Update &Document + Թարմացնել &փաստաթուղթը + + + + Update &Selection + Թարմացնել &ընտրված հատվածը + + + + &Spelling... + &Ուղղագրություն... + + + + F7 + F7 + + + + &Timers... + &Ժամաչափիչներ... + + + + S&ymbols... + Ն&շաններ... + + + + &Settings + &Կարգավորումներ + + + + Show &Toolbar + Ցույց տալ &գործիքների վահանակը + + + + Show &Menu Icons + Ցույց տալ &ընտրացանկի պատկերակները + + + + F&ocused Text + Տ&եքստային հատվածի ընդգծում + + + + &Fullscreen + &Ամբողջ էկրանով + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + Ամ&փոփել + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Թեմաներ... + + + + &Preferences... + &Ընտրանքներ... + + + + Focus Off + Անջատված է + + + + Focus One Line + Մեկ տողի ընդգծում + + + + Focus Three Lines + Երեք տողի ընդգծում + + + + &Paragraph + &Պարբերություն + + + + Focus Paragraph + Պարբերության ընդգծում + + + + &Help + &Օգնություն + + + + Application &Language... + Ծրագրի &լեզուն... + + + + Some files were unsupported and could not be opened. + Որոշ նիշքեր ծրագրին չեն համապատասխանում և չեն կարող բացվել։ + + + + &Off + &Անջատված է + + + + One &Line + Մեկ &տող + + + + &Three Lines + &Երեք տող + + + + &About + &Ծրագրի մասին + + + + About &Qt + Qt-ի &մասին + + + From 789ba33fe5ed03a65fb1727a04d94fa17e3f364b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Nov 2013 10:23:18 -0500 Subject: [PATCH 183/630] FIXED: Did not respect default cursor width. --- src/document.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 77fea37b..ed1e862c 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -693,7 +693,7 @@ void Document::loadTheme(const Theme& theme) QEvent e(QEvent::FontChange); QApplication::sendEvent(m_text, &e); } - m_text->setCursorWidth(!m_block_cursor ? 1 : m_text->fontMetrics().averageCharWidth()); + m_text->setCursorWidth(!m_block_cursor ? style()->pixelMetric(QStyle::PM_TextCursorWidth) : m_text->fontMetrics().averageCharWidth()); int margin = theme.foregroundMargin(); m_layout->setColumnMinimumWidth(0, margin); @@ -759,7 +759,7 @@ void Document::loadPreferences(const Preferences& preferences) } m_block_cursor = preferences.blockCursor(); - m_text->setCursorWidth(!m_block_cursor ? 1 : m_text->fontMetrics().averageCharWidth()); + m_text->setCursorWidth(!m_block_cursor ? style()->pixelMetric(QStyle::PM_TextCursorWidth) : m_text->fontMetrics().averageCharWidth()); QFont font = m_text->font(); font.setStyleStrategy(preferences.smoothFonts() ? QFont::PreferAntialias : QFont::NoAntialias); m_text->setFont(font); From 07bef3ace61e6e5f09777395c5be42fcd81ba8d3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 5 Apr 2014 07:41:05 -0400 Subject: [PATCH 184/630] FIXED: Theme names did not trim whitespace. --- src/theme_dialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index 3bc323f6..3d26bcd6 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -317,7 +317,7 @@ void ThemeDialog::createPreview(const QString& name) void ThemeDialog::accept() { - m_theme.setName(m_name->text()); + m_theme.setName(m_name->text().simplified()); m_theme.setBackgroundType(m_background_type->currentIndex()); m_theme.setBackgroundColor(m_background_color->color()); @@ -351,7 +351,7 @@ void ThemeDialog::accept() void ThemeDialog::checkNameAvailable() { - QString name = m_name->text(); + QString name = m_name->text().simplified(); bool empty = name.isEmpty(); bool changed = (name != m_theme.name()); bool exists = QFile::exists(Theme::filePath(name)); From 072456eac29519181764e94815477245c3909a62 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 5 Apr 2014 07:47:30 -0400 Subject: [PATCH 185/630] FIXED: Session names did not trim whitespace. --- src/session_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/session_manager.cpp b/src/session_manager.cpp index 287725f2..f64223aa 100644 --- a/src/session_manager.cpp +++ b/src/session_manager.cpp @@ -352,12 +352,12 @@ QString SessionManager::getSessionName(const QString& title, const QString& sess QString name = session; forever { bool ok; - name = QInputDialog::getText(window, title, tr("Session name:"), QLineEdit::Normal, name, &ok); + name = QInputDialog::getText(window, title, tr("Session name:"), QLineEdit::Normal, name, &ok).simplified(); if (!ok) { return QString(); } - if (name != Session::tr("Default") && !QFile::exists(Session::pathFromName(name))) { + if (!name.isEmpty() && name != Session::tr("Default") && !QFile::exists(Session::pathFromName(name))) { break; } else { QMessageBox::information(window, tr("Sorry"), tr("The requested session name is already in use.")); From a83942ee5e4ff62014d3d3e46562ca8a2540111c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 5 Apr 2014 08:02:11 -0400 Subject: [PATCH 186/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 10 ++++++++-- translations/focuswriter_hy.qm | Bin 32976 -> 32982 bytes translations/focuswriter_hy.ts | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 166cb41f..d58605a3 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -9,6 +9,7 @@ מעבד תמלילים במסך מלא Լիէկրան տեքստային խմբագրիչ フルスクリーン・ワードプロセッサ + Schermvullende tekstverwerker Processador de textos em ecrã completo Procesor de text pe tot ecranul Обрађивач текста у пуном екрану @@ -20,29 +21,34 @@

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

+

Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersinterface totdat de muis naar de rand van het scherm geschoven wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in staan om complete focus te hebben op het werk

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

-

FocusWriter 是个简洁的,专注于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作

+

FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka säätävät fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

-

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանելու աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

+

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

+

Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, meerdere open documenten, spellingscorrectie en nog veel meer.

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

+

FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功能,如动态更新统计,每日计划,多标签页,拼写检查等。

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

+

Daar bovenop laadt het programma je huidige onderhande werk en laat het zien op de locatie waar je gebleven bent zodat je direct verder kunt

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

+

另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作

http://gottcode.org/focuswriter/screenshots/appdata.png diff --git a/translations/focuswriter_hy.qm b/translations/focuswriter_hy.qm index 315e93a5a9ac213817eafae2949cdc6deb084787..a93ba292cc2c5aeb5563e7f3c643c6ab8ea7fe44 100644 GIT binary patch delta 3120 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 SK|5Nu;w|}u()+1Ty8a&~z;?y} delta 3114 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 OqrYrBaxdj+hyMdrc6xLG diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 06377c6f..31f24262 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -16,7 +16,7 @@ Expand - Տարածել + Ընդարձակել
@@ -1678,7 +1678,7 @@ Cu&t - Հա&տել + Կտ&րել From 6a229a210b91d4137acbc9669f08a1a3aa909db5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 6 Apr 2014 05:56:27 -0400 Subject: [PATCH 187/630] FIXED: Could not change built-in Qt textedit shortcuts. --- src/document.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/document.cpp b/src/document.cpp index ed1e862c..cbb6a7c6 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -96,6 +96,7 @@ namespace virtual bool canInsertFromMimeData(const QMimeData* source) const; virtual QMimeData* createMimeDataFromSelection() const; virtual void insertFromMimeData(const QMimeData* source); + virtual bool event(QEvent* event); virtual void keyPressEvent(QKeyEvent* event); virtual void inputMethodEvent(QInputMethodEvent* event); @@ -151,8 +152,35 @@ namespace } } + bool TextEdit::event(QEvent* event) + { + if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent* ke = static_cast(event); + if (ke == QKeySequence::Cut + || ke == QKeySequence::Copy + || ke == QKeySequence::Paste + || ke == QKeySequence::Redo + || ke == QKeySequence::Undo + || ke == QKeySequence::SelectAll) { + event->ignore(); + return true; + } + } + return QTextEdit::event(event); + } + void TextEdit::keyPressEvent(QKeyEvent* event) { + if (event == QKeySequence::Cut + || event == QKeySequence::Copy + || event == QKeySequence::Paste + || event == QKeySequence::Redo + || event == QKeySequence::Undo + || event == QKeySequence::SelectAll) { + event->ignore(); + return; + } + QTextEdit::keyPressEvent(event); if (event->key() == Qt::Key_Insert) { From 886291619da5f153f214f2707b16c4efdb03e8e2 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 6 Apr 2014 10:53:52 -0400 Subject: [PATCH 188/630] FIXED: Formatting was lost when saving pasted text in new document. --- src/document.cpp | 22 +++++++++++++++++++--- src/rtf/reader.cpp | 1 - 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index cbb6a7c6..6d6c1355 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -87,8 +88,9 @@ namespace class TextEdit : public QTextEdit { public: - TextEdit(QWidget* parent = 0) - : QTextEdit(parent) + TextEdit(Document* document) : + QTextEdit(document), + m_document(document) { } @@ -102,6 +104,9 @@ namespace private: QByteArray mimeToRtf(const QMimeData* source) const; + + private: + Document* m_document; }; bool TextEdit::canInsertFromMimeData(const QMimeData* source) const @@ -126,6 +131,10 @@ namespace } if (acceptRichText()) { + QTextDocument document; + int formats = document.allFormats().size(); + QTextCursor cursor = m_document->isRichText() ? textCursor() : QTextCursor(&document); + QByteArray richtext; if (source->hasFormat(QLatin1String("text/rtf"))) { richtext = source->data(QLatin1String("text/rtf")); @@ -145,8 +154,15 @@ namespace RTF::Reader reader; QBuffer buffer(&richtext); buffer.open(QIODevice::ReadOnly); - reader.read(&buffer, textCursor()); + reader.read(&buffer, cursor); buffer.close(); + + if (!m_document->isRichText()) { + if (document.allFormats().size() > formats) { + m_document->setRichText(true); + } + textCursor().insertFragment(QTextDocumentFragment(&document)); + } } else { QTextEdit::insertFromMimeData(source); } diff --git a/src/rtf/reader.cpp b/src/rtf/reader.cpp index b3133705..dd3edb07 100644 --- a/src/rtf/reader.cpp +++ b/src/rtf/reader.cpp @@ -216,7 +216,6 @@ void RTF::Reader::read(QIODevice* device, const QTextCursor& cursor) m_cursor = cursor; m_cursor.beginEditBlock(); m_token.setDevice(device); - setBlockDirection(Qt::LeftToRight); // Check file type m_token.readNext(); From 5b59b535353786652c68e45c711a3cbba6cf0b37 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 10 Apr 2014 09:13:19 -0400 Subject: [PATCH 189/630] Bump version number. --- NEWS | 12 ++++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 902588fc..2b32180d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +1.4.6 +----- +* FIXED: Formatting was lost when saving pasted text in new document. +* FIXED: Could not change built-in Qt textedit shortcuts. +* FIXED: Session names did not trim whitespace. +* FIXED: Theme names did not trim whitespace. +* FIXED: Did not respect default cursor width. +* FIXED: Session names could not contain periods. +* FIXED: Theme names could not contain periods. +* FIXED: Long session names made session menu unworkable. +* Translation updates: Armenian, Hebrew. + 1.4.5 ----- * FIXED: Infinite loop during replace all with regular expressions. diff --git a/focuswriter.pro b/focuswriter.pro index 55e4e278..90803021 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -22,7 +22,7 @@ macx { LIBS += -lz } -VERSION = 1.4.5 +VERSION = 1.4.6 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" unix: !macx { diff --git a/mac_deploy.sh b/mac_deploy.sh index 69eb7f30..b1ed9491 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.4.5' +VERSION='1.4.6' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/windows_deploy.bat b/windows_deploy.bat index 4309853f..a734258a 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.4.5 +SET VERSION=1.4.6 ECHO Copying executable MKDIR %APP% From 1cc0f5a01d57998c9ca226760045a09eba51fd48 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 15 Apr 2014 09:11:59 +0100 Subject: [PATCH 190/630] refresh quilt patches gbp-pq import/export --- debian/patches/0001-desktop-keywords.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/patches/0001-desktop-keywords.patch b/debian/patches/0001-desktop-keywords.patch index 566867e1..84cc3bfe 100644 --- a/debian/patches/0001-desktop-keywords.patch +++ b/debian/patches/0001-desktop-keywords.patch @@ -8,10 +8,10 @@ silence lintian desktop-entry-lacks-keywords-entry 1 file changed, 1 insertion(+) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop -index 1cc8adb..13e8c42 100644 +index e9bb6bb..5aa0c1e 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop -@@ -66,3 +66,4 @@ Exec=focuswriter %F +@@ -81,3 +81,4 @@ Exec=focuswriter %F Terminal=false MimeType=application/rtf;application/vnd.oasis.opendocument.text;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; From cbe4909a4c7392afb67971605cd15acbc3e09780 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 15 Apr 2014 09:13:02 +0100 Subject: [PATCH 191/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9a1bf586..3c198fe6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.4.6-1) unstable; urgency=medium + + * New upstream release + + -- Barak A. Pearlmutter Tue, 15 Apr 2014 09:12:39 +0100 + focuswriter (1.4.5-1) unstable; urgency=medium * New upstream release From 2a14309680e1ddd01c68a1f130fb5e2401be2e86 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 18 Jun 2014 07:57:48 -0400 Subject: [PATCH 192/630] FIXED: Regression where menubar was not shown in Ubuntu. --- src/window.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/window.cpp b/src/window.cpp index 59452418..9c703d49 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -115,7 +115,11 @@ Window::Window(const QStringList& command_line_files) : new ActionManager(this); // Create window contents first so they stack behind documents +#ifndef Q_OS_MAC + menuBar()->setNativeMenuBar(false); +#else menuBar(); +#endif m_toolbar = new QToolBar(this); m_toolbar->setFloatable(false); m_toolbar->setMovable(false); From 120d9af18b0fdd7bf98590ec9b5016382246ee5b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 19 Jun 2014 05:37:42 -0400 Subject: [PATCH 193/630] FIXED: Regression with default cursor width on Windows. --- src/document.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index bfdde946..2ed75bb3 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -69,6 +69,23 @@ #include #include +#ifdef Q_OS_WIN +#include +#endif + +//----------------------------------------------------------------------------- + +static inline int cursorWidth() +{ +#ifdef Q_OS_WIN + DWORD width = 1; + if (SystemParametersInfo(SPI_GETCARETWIDTH, 0, &width, 0)) + return int(width); + else +#endif + return -1; +} + //----------------------------------------------------------------------------- namespace @@ -733,7 +750,7 @@ void Document::loadTheme(const Theme& theme, const QBrush& foreground) QEvent e(QEvent::FontChange); QApplication::sendEvent(m_text, &e); } - m_text->setCursorWidth(!m_block_cursor ? style()->pixelMetric(QStyle::PM_TextCursorWidth) : m_text->fontMetrics().averageCharWidth()); + m_text->setCursorWidth(!m_block_cursor ? cursorWidth() : m_text->fontMetrics().averageCharWidth()); int padding = theme.foregroundPadding(); m_layout->setRowMinimumHeight(0, padding); @@ -797,7 +814,7 @@ void Document::loadPreferences() } m_block_cursor = Preferences::instance().blockCursor(); - m_text->setCursorWidth(!m_block_cursor ? style()->pixelMetric(QStyle::PM_TextCursorWidth) : m_text->fontMetrics().averageCharWidth()); + m_text->setCursorWidth(!m_block_cursor ? cursorWidth() : m_text->fontMetrics().averageCharWidth()); QFont font = m_text->font(); font.setStyleStrategy(Preferences::instance().smoothFonts() ? QFont::PreferAntialias : QFont::NoAntialias); m_text->setFont(font); From 7a80d49e46a87e259f16e26849ec60fd363302be Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 19 Jun 2014 05:45:34 -0400 Subject: [PATCH 194/630] FIXED: Missing libraries on Windows. --- resources/windows/installer.nsi | 16 ++++++++++++++++ windows_deploy.bat | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index ca9a5faf..cf76eea0 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -184,6 +184,9 @@ Section "install" SetOutPath $INSTDIR\accessible File $%QTDIR%\plugins\accessible\qtaccessiblewidgets.dll + SetOutPath $INSTDIR\audio + File $%QTDIR%\plugins\audio\qtaudio_windows.dll + SetOutPath $INSTDIR\bearer File $%QTDIR%\plugins\bearer\qgenericbearer.dll File $%QTDIR%\plugins\bearer\qnativewifibearer.dll @@ -209,9 +212,16 @@ Section "install" File $%QTDIR%\plugins\imageformats\qwbmp.dll File $%QTDIR%\plugins\imageformats\qwebp.dll + SetOutPath $INSTDIR\mediaservice + File $%QTDIR%\plugins\mediaservice\dsengine.dll + File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll + SetOutPath $INSTDIR\platforms File $%QTDIR%\plugins\platforms\qwindows.dll + SetOutPath $INSTDIR\printsupport + File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll + SetOutPath $INSTDIR\sounds File ..\sounds\*.wav @@ -295,11 +305,14 @@ Section "Uninstall" Delete $INSTDIR\ReadMe.txt Delete $INSTDIR\*.dll Delete $INSTDIR\accessible\*.dll + Delete $INSTDIR\audio\*.dll Delete $INSTDIR\bearer\*.dll Delete $INSTDIR\dictionaries\*\*\* Delete $INSTDIR\icons\hicolor\*\* Delete $INSTDIR\imageformats\*.dll + Delete $INSTDIR\mediaservice\*.dll Delete $INSTDIR\platforms\qwindows.dll + Delete $INSTDIR\printsupport\*.dll Delete $INSTDIR\sounds\*.wav Delete $INSTDIR\themes\*\* Delete $INSTDIR\translations\*.qm @@ -310,9 +323,12 @@ Section "Uninstall" RMDir /r $INSTDIR\icons RMDir /r $INSTDIR\themes RMDir $INSTDIR\accessible + RMDir $INSTDIR\audio RMDir $INSTDIR\bearer RMDir $INSTDIR\imageformats + RMDir $INSTDIR\mediaservice RMDir $INSTDIR\platforms + RMDir $INSTDIR\printsupport RMDir $INSTDIR\sounds RMDir $INSTDIR\translations RMDir $INSTDIR diff --git a/windows_deploy.bat b/windows_deploy.bat index cd7cf85e..935b338d 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -57,6 +57,9 @@ MKDIR %APP%\accessible XCOPY /Q /S /Y %QTDIR%\plugins\accessible %APP%\accessible >nul DEL %APP%\accessible\*d.dll >nul +MKDIR %APP%\audio +COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul + MKDIR %APP%\bearer XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul DEL %APP%\bearer\*d.dll >nul @@ -68,6 +71,13 @@ MKDIR %APP%\imageformats XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul DEL %APP%\imageformats\*d.dll >nul +MKDIR %APP%\mediaservice +XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul +DEL %APP%\mediaservice\*d.dll >nul + +MKDIR %APP%\printsupport +COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul + ECHO Making portable MKDIR %APP%\Data From 392c386143eb335683b141aa66eafc56c75a1648 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 19 Jun 2014 17:35:47 -0400 Subject: [PATCH 195/630] FIXED: Compile issues with Qt 4.6. --- src/locale_dialog.cpp | 2 ++ src/session_manager.cpp | 2 ++ src/stack.cpp | 2 +- src/theme.cpp | 4 ++-- src/theme_dialog.cpp | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index 3b0d5c16..d8afb6dc 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -125,8 +125,10 @@ void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadi translator.load(m_appname + current, m_path); QCoreApplication::installTranslator(&translator); +#if (QT_VERSION >= (QT_VERSION_CHECK(5,0,0))) // Work around bug in Qt 5 where text direction is not loaded QApplication::setLayoutDirection(QLocale(current).textDirection()); +#endif } //----------------------------------------------------------------------------- diff --git a/src/session_manager.cpp b/src/session_manager.cpp index cbd34a79..4a93fc24 100644 --- a/src/session_manager.cpp +++ b/src/session_manager.cpp @@ -40,6 +40,8 @@ #include #include +#include + //----------------------------------------------------------------------------- SessionManager::SessionManager(Window* parent) diff --git a/src/stack.cpp b/src/stack.cpp index 43a4fa7a..4b266949 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -696,7 +696,7 @@ void Stack::updateBackground() QRect foreground = m_theme.foregroundRect(size()); QImage image(size(), QImage::Format_ARGB32_Premultiplied); - image.fill(m_theme.loadColor()); + image.fill(m_theme.loadColor().rgb()); { QPainter painter(&image); QColor color = m_theme.foregroundColor(); diff --git a/src/theme.cpp b/src/theme.cpp index 9c5e27e3..2cd850d1 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -259,7 +259,7 @@ QImage Theme::render(const QSize& background, QRect& foreground) const { // Create image QImage image(background, QImage::Format_ARGB32_Premultiplied); - image.fill(backgroundColor()); + image.fill(backgroundColor().rgb()); QPainter painter(&image); painter.setPen(Qt::NoPen); @@ -321,7 +321,7 @@ QImage Theme::render(const QSize& background, QRect& foreground) const QImage copy = image.copy(foreground); QImage shadow(background, QImage::Format_ARGB32_Premultiplied); - shadow.fill(Qt::transparent); + shadow.fill(0); QPainter shadow_painter(&shadow); shadow_painter.setRenderHint(QPainter::Antialiasing); diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index 950f1390..74988c8e 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -56,7 +56,7 @@ static QColor averageImage(const QString& filename, const QColor& color) } QImage image(reader.size(), QImage::Format_ARGB32_Premultiplied); - image.fill(color); + image.fill(color.rgb()); { QPainter painter(&image); painter.drawImage(0, 0, reader.read()); From f28da3975534969a4cb1438edaf9ea76245d8670 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 10:40:54 +0200 Subject: [PATCH 196/630] update debian/control for qt5 and new libraries --- debian/control | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/debian/control b/debian/control index bfe7897d..1a389fab 100644 --- a/debian/control +++ b/debian/control @@ -4,10 +4,12 @@ Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: debhelper (>= 9), - libqt4-dev, - libenchant-dev, - libzip-dev, - pkg-config + qt5-default, + qtbase5-dev, + qtmultimedia5-dev, + libhunspell-dev, + pkg-config, + zlib1g-dev Standards-Version: 3.9.5 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git From 9dbadb4674a9033195df0e69386e275268b07785 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 10:41:58 +0200 Subject: [PATCH 197/630] log changes --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 3c198fe6..e1e5bf6f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +focuswriter (1.4.6-2) unstable; urgency=medium + + * New upstream release + - switched some libraries + - supports qt5 + * Compile against qt5 + + -- Barak A. Pearlmutter Fri, 20 Jun 2014 10:41:54 +0200 + focuswriter (1.4.6-1) unstable; urgency=medium * New upstream release From b3f653c60450a8eb1bae0709835b4025d349a614 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 11:08:10 +0200 Subject: [PATCH 198/630] log changes --- debian/changelog | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index e1e5bf6f..755bfa36 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,18 @@ -focuswriter (1.4.6-2) unstable; urgency=medium +focuswriter (1.5.0-1) unstable; urgency=medium * New upstream release - switched some libraries - supports qt5 * Compile against qt5 - - -- Barak A. Pearlmutter Fri, 20 Jun 2014 10:41:54 +0200 + * Track upstream maintenance branch + git merge --no-edit upstream/release-1.5 + git log --oneline -4 upstream/release-1.5 | tac + - 2a14309 FIXED: Regression where menubar was not shown in Ubuntu. + - 120d9af FIXED: Regression with default cursor width on Windows. + - 7a80d49 FIXED: Missing libraries on Windows. + - 392c386 FIXED: Compile issues with Qt 4.6. + + -- Barak A. Pearlmutter Fri, 20 Jun 2014 11:07:50 +0200 focuswriter (1.4.6-1) unstable; urgency=medium From 87e4e7ddccd136f68c9b0872e5160b9cc48eef34 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 11:11:32 +0200 Subject: [PATCH 199/630] refresh quilt patches --- debian/patches/0001-desktop-keywords.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/patches/0001-desktop-keywords.patch b/debian/patches/0001-desktop-keywords.patch index 84cc3bfe..d4531e34 100644 --- a/debian/patches/0001-desktop-keywords.patch +++ b/debian/patches/0001-desktop-keywords.patch @@ -8,11 +8,11 @@ silence lintian desktop-entry-lacks-keywords-entry 1 file changed, 1 insertion(+) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop -index e9bb6bb..5aa0c1e 100644 +index d27d6bb..dcdaa97 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -81,3 +81,4 @@ Exec=focuswriter %F Terminal=false - MimeType=application/rtf;application/vnd.oasis.opendocument.text;text/plain;text/rtf; + MimeType=application/rtf;application/vnd.oasis.opendocument.text;vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; +Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing From 837c73cad2ccb952bdf4cf6c710b296de76711d8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 20 Jun 2014 05:48:27 -0400 Subject: [PATCH 200/630] FIXED: Incorrect version number string. --- focuswriter.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/focuswriter.pro b/focuswriter.pro index e00d6803..5c9947b6 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -27,7 +27,7 @@ macx { # Set program version VERSION = 1.5.0 -DEFINES += VERSIONSTR=\\\"git.$${VERSION}\\\" +DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name unix: !macx { From 4dd7e7823a869b6a00bdf4707400e94e155b72ff Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 20 Jun 2014 05:49:46 -0400 Subject: [PATCH 201/630] Add keywords to .desktop file. --- resources/unix/focuswriter.desktop | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index d27d6bbc..dcdaa97d 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -81,3 +81,4 @@ Exec=focuswriter %F Terminal=false MimeType=application/rtf;application/vnd.oasis.opendocument.text;vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; +Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing From 3e3c3bf37aa38d9e866fb0b6006ba1e918152e54 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 20 Jun 2014 10:44:49 -0400 Subject: [PATCH 202/630] Add Debian packaging. --- debian/.gitignore | 7 + debian/README.source | 10 ++ debian/changelog | 269 ++++++++++++++++++++++++++++++++++++ debian/compat | 1 + debian/control | 30 ++++ debian/copyright | 30 ++++ debian/focuswriter.docs | 2 + debian/install | 0 debian/menu | 7 + debian/rules | 4 + debian/source/format | 1 + debian/source/local-options | 1 + debian/watch | 3 + 13 files changed, 365 insertions(+) create mode 100644 debian/.gitignore create mode 100644 debian/README.source create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/focuswriter.docs create mode 100644 debian/install create mode 100644 debian/menu create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/source/local-options create mode 100644 debian/watch diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 00000000..7f0158c2 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,7 @@ +/*.debhelper +/*.log +/*.substvars +/files +/focuswriter/ +/stamp-makefile-build +/stamp-makefile-install diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 00000000..24bef6a4 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,10 @@ +Un-official upstream releases created with, eg + +u=1.3.5 +r=$(git show-ref upstream/master | head -c8) +v=$u+git.$r +p=focuswriter +git tag -s -u -m 'unofficial upstream release' upstream/$v +git archive --format tar --prefix $p/ $r | gzip -9 > ../$p_$v.orig.tar.gz + + -- Barak A. Pearlmutter , Sun, 4 Dec 2011 11:45:01 +0000 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 00000000..755bfa36 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,269 @@ +focuswriter (1.5.0-1) unstable; urgency=medium + + * New upstream release + - switched some libraries + - supports qt5 + * Compile against qt5 + * Track upstream maintenance branch + git merge --no-edit upstream/release-1.5 + git log --oneline -4 upstream/release-1.5 | tac + - 2a14309 FIXED: Regression where menubar was not shown in Ubuntu. + - 120d9af FIXED: Regression with default cursor width on Windows. + - 7a80d49 FIXED: Missing libraries on Windows. + - 392c386 FIXED: Compile issues with Qt 4.6. + + -- Barak A. Pearlmutter Fri, 20 Jun 2014 11:07:50 +0200 + +focuswriter (1.4.6-1) unstable; urgency=medium + + * New upstream release + + -- Barak A. Pearlmutter Tue, 15 Apr 2014 09:12:39 +0100 + +focuswriter (1.4.5-1) unstable; urgency=medium + + * New upstream release + * Track upstream maintenance branch + - da6b829 FIXED: Long session names made session menu unworkable. + - d3d8119 FIXED: Theme names could not contain periods. + - bb84e4e FIXED: Session names could not contain periods. + + -- Barak A. Pearlmutter Wed, 26 Mar 2014 20:45:31 +0000 + +focuswriter (1.4.4+git.5.56edf89-1) unstable; urgency=medium + + * Track upstream maintenance branch + - e47f5f2 Sync translations with Transifex. + - 70ddae7 FIXED: Paragraphs not always focused properly when merged. + - 47cd508 FIXED: Regexp searches did not ignore whole words option. + - 56edf89 FIXED: Closing last empty document increased untitled count. + + -- Barak A. Pearlmutter Thu, 20 Mar 2014 14:03:57 +0000 + +focuswriter (1.4.4+git.4.0c3b3c1-1) unstable; urgency=low + + * Track upstream maintenance branch + - 0c3b3c1 FIXED: Selected session was incorrect when switching sessions + was canceled. + - a51290e Prevent opening unsupported multimedia files. + - 77b3da5 Fix linker error with Qt 5 on Windows. + - bb69d83 Update QtSingleApplication. + - cb19614 Fix compilation error with Qt 5 on Windows. + + -- Barak A. Pearlmutter Tue, 11 Feb 2014 11:44:36 +0000 + +focuswriter (1.4.4+git.3.ec86fd40-1) unstable; urgency=low + + * Track upstream maintenance branch + - c0ceb94a Sync translations with Transifex. + - 9b365049 FIXED: Hyphenated lines were not focused properly. + - ec86fd40 Update translations. + + -- Barak A. Pearlmutter Mon, 13 Jan 2014 17:00:32 +0000 + +focuswriter (1.4.4-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Fri, 07 Jun 2013 19:12:56 +0100 + +focuswriter (1.4.3.2013.04.25-1) unstable; urgency=low + + * merge upstream maintenance branch + - FIXED: Did not always ignore changes made by program. + * tweak VCS entry in debian/control to appease lintian + * quilt patch that adds keywords to desktop file to appease lintian + + -- Barak A. Pearlmutter Mon, 13 May 2013 12:31:45 +0100 + +focuswriter (1.4.3.2013.04.15-1) unstable; urgency=low + + * merge upstream maintenance branch + - FIXED: Smart quotes were incorrect after opening punctuation. + - Allow margins smaller than 10 pixels. + + -- Barak A. Pearlmutter Thu, 02 May 2013 14:57:52 +0100 + +focuswriter (1.4.3-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Mon, 15 Apr 2013 13:28:29 +0100 + +focuswriter (1.4.2-1) unstable; urgency=low + + * new upstream release + + -- Barak A. Pearlmutter Tue, 02 Apr 2013 13:25:25 +0100 + +focuswriter (1.4.1-1) unstable; urgency=low + + * new upstream release + * fix debian/watch file + + -- Barak A. Pearlmutter Fri, 30 Nov 2012 23:03:48 +0000 + +focuswriter (1.4.0.2012.11.18-1) unstable; urgency=low + + * merge upstream changes on branch release-1.4 + - Sync translations with Transifex. + + -- Barak A. Pearlmutter Mon, 19 Nov 2012 19:52:37 +0000 + +focuswriter (1.4.0.2012.11.04-1) unstable; urgency=low + + * merge upstream bug fixes on branch release-1.4 + - FIXED: Played sounds constantly in Ubuntu 10.04. + + -- Barak A. Pearlmutter Sat, 17 Nov 2012 18:17:59 +0000 + +focuswriter (1.4.0.2012.10.15-1) unstable; urgency=low + + * merge upstream bug fixes on branch release-1.4 + - FIXED: Could drag scenes in Read-Only files. + - FIXED: Could insert symbols in Read-Only files. + - FIXED: Could paste unformatted in Read-Only files. + - FIXED: Could check spelling of Read-Only files. + - FIXED: Cleared keyboard shortcuts not saved. + - FIXED: Cannot add new keyboard shortcuts with the Shift key. + * bump debian standards version, no changes needed + + -- Barak A. Pearlmutter Fri, 09 Nov 2012 13:38:35 +0000 + +focuswriter (1.4.0-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Tue, 25 Sep 2012 15:05:55 +0100 + +focuswriter (1.3.90-2) unstable; urgency=low + + * merge upstream proper sound fix + * remove corresponding quilt patch 0001-revert-SDL-load-fix.patch + + -- Barak A. Pearlmutter Fri, 31 Aug 2012 09:44:20 +0200 + +focuswriter (1.3.90-1) unstable; urgency=low + + * New upstream release + * Quilt patch reverting 3da303ed which broke typewriter sounds + + -- Barak A. Pearlmutter Sun, 26 Aug 2012 15:01:16 +0200 + +focuswriter (1.3.80-1) unstable; urgency=low + + * New upstream release + - uses libenchant for spell checking + - includes translation patches, no need to represent binary changes + - renamed bitmap icon, no longer need to rename + + -- Barak A. Pearlmutter Sun, 19 Aug 2012 11:19:41 +0200 + +focuswriter (1.3.6-2) unstable; urgency=low + + * Stop using cdbs in debian/rules to fix hardening flags pass-through issue + * Merge post-release upstream translations + * Include documentation file CREDITS, and continue to include README + + -- Barak A. Pearlmutter Tue, 17 Jul 2012 11:32:40 +0200 + +focuswriter (1.3.6-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Sun, 24 Jun 2012 00:25:52 +0100 + +focuswriter (1.3.5.2-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Wed, 18 Jan 2012 14:02:40 +0000 + +focuswriter (1.3.5.1-1) unstable; urgency=low + + * Document vcs snapshot tarball creation procedure + * New upstream release + + -- Barak A. Pearlmutter Sun, 04 Dec 2011 22:30:26 +0000 + +focuswriter (1.3.5+git.a0b47c53-1) unstable; urgency=low + + * use new upstream scalable icon + + -- Barak A. Pearlmutter Sat, 12 Nov 2011 22:40:14 +0000 + +focuswriter (1.3.5-2) unstable; urgency=low + + * use upstream xpm icon + + -- Barak A. Pearlmutter Thu, 10 Nov 2011 16:41:54 +0000 + +focuswriter (1.3.5-1) unstable; urgency=low + + * New upstream release + + -- Barak A. Pearlmutter Thu, 10 Nov 2011 12:34:53 +0000 + +focuswriter (1.3.4.1-2) unstable; urgency=low + + * Build no longer depends upon libao-dev + * Suggest libsdl-mixer1.2 which is dynamically loaded if available + + -- Barak A. Pearlmutter Fri, 28 Oct 2011 09:30:16 +0100 + +focuswriter (1.3.4.1-1) unstable; urgency=low + + * New upstream version + + -- Barak A. Pearlmutter Tue, 18 Oct 2011 10:22:21 +0100 + +focuswriter (1.3.4-1) unstable; urgency=low + + * New upstream version + + -- Barak A. Pearlmutter Sun, 16 Oct 2011 18:11:31 +0100 + +focuswriter (1.3.3-2) unstable; urgency=low + + * single debian patch source option (closes: #643117) + * silence lintian: rephrase description and add minimal man page + + -- Barak A. Pearlmutter Sun, 02 Oct 2011 22:53:46 +0100 + +focuswriter (1.3.3-1) unstable; urgency=low + + * update debian/watch for uscan to github redir + * New upstream version + * merge post-release fixes: icon location, no-sound crash + + -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:14:38 +0200 + +focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low + + * Merge many upstream enhancements and bug fixes + * Bump debian standards version + * Account for shifted upstream icon file directory (rules, install) + + -- Barak A. Pearlmutter Fri, 10 Jun 2011 09:51:13 +0100 + +focuswriter (1.3.2.1-1) unstable; urgency=low + + * New upstream version (same as 1.3.2.git.69e4975b but bumps version) + + -- Barak A. Pearlmutter Wed, 29 Dec 2010 21:28:37 -0500 + +focuswriter (1.3.2.git.69e4975b-1) unstable; urgency=low + + * New upstream version + * Include post-release upstream mods + - crash fix + - es_MX (Mexican spanish) translation + + -- Barak A. Pearlmutter Wed, 29 Dec 2010 12:15:47 -0500 + +focuswriter (1.3.1-1) unstable; urgency=low + + * Initial release for Debian, based on Ubuntu packaging (closes: #580763) + * Packaging updated from Ubuntu debian, thanks to Graeme Gott + + -- Barak A. Pearlmutter Sun, 14 Nov 2010 15:53:39 +0000 diff --git a/debian/compat b/debian/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 00000000..dfaa40c4 --- /dev/null +++ b/debian/control @@ -0,0 +1,30 @@ +Source: focuswriter +Section: editors +Priority: optional +Maintainer: Barak A. Pearlmutter +Uploaders: Graeme Gott +Build-Depends: debhelper (>= 9), + qt5-default, + qtbase5-dev, + qtmultimedia5-dev, + libhunspell-dev, + pkg-config, + zlib1g-dev +Standards-Version: 3.9.5 +Homepage: http://gottcode.org/focuswriter/ +Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git + +Package: focuswriter +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Suggests: hunspell-dictionary, myspell-dictionary +Description: Fullscreen distraction-free writing program + Focuswriter is a fullscreen writing program designed to be + distraction free. You can customize your environment by changing the + font, colors, and background image to add ambiance. FocusWriter + features an on-the-fly updating wordcount, optional auto-save, + optional daily goals, and toolbars that hide away to allow you to + focus more clearly. Additionally, when you open the program your + current work in progress will automatically load and position you at + the end of your document, so that you can immediately jump back in. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 00000000..f92d4881 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,30 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: FocusWriter +Upstream-Contact: Graeme Gott +Source: http://gottcode.org/focuswriter/ + +Files: * +Copyright: 2008-2014, Graeme Gott +License: GPL-3+ + +Files: debian/* +Copyright: 2010-2014, Graeme Gott + 2010-2014, Barak A. Pearlmutter +License: GPL-3+ + +License: GPL-3+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the full text of the GNU General Public License + version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. diff --git a/debian/focuswriter.docs b/debian/focuswriter.docs new file mode 100644 index 00000000..297170db --- /dev/null +++ b/debian/focuswriter.docs @@ -0,0 +1,2 @@ +README +CREDITS diff --git a/debian/install b/debian/install new file mode 100644 index 00000000..e69de29b diff --git a/debian/menu b/debian/menu new file mode 100644 index 00000000..5367bcdb --- /dev/null +++ b/debian/menu @@ -0,0 +1,7 @@ +?package(focuswriter):\ + needs="x11"\ + section="Applications/Editors"\ + title="Focuswriter"\ + longtitle="Fullscreen word processor"\ + icon="/usr/share/pixmaps/focuswriter.xpm"\ + command="/usr/bin/focuswriter" diff --git a/debian/rules b/debian/rules new file mode 100755 index 00000000..ce2eb52b --- /dev/null +++ b/debian/rules @@ -0,0 +1,4 @@ +#!/usr/bin/make -f + +%: + dh $@ --parallel diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/local-options b/debian/source/local-options new file mode 100644 index 00000000..7423a2df --- /dev/null +++ b/debian/source/local-options @@ -0,0 +1 @@ +single-debian-patch diff --git a/debian/watch b/debian/watch new file mode 100644 index 00000000..d7dcd282 --- /dev/null +++ b/debian/watch @@ -0,0 +1,3 @@ +version=3 +# http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 +http://githubredir.debian.net/github/gottcode/focuswriter/ .*/v(.*)\.tar\.gz From 9fea398254c0e9ec0a3832233e8b10c3711858bf Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 18:11:16 +0200 Subject: [PATCH 203/630] remove quilt patch - applied upstream --- debian/patches/0001-desktop-keywords.patch | 18 ------------------ debian/patches/series | 1 - 2 files changed, 19 deletions(-) delete mode 100644 debian/patches/0001-desktop-keywords.patch delete mode 100644 debian/patches/series diff --git a/debian/patches/0001-desktop-keywords.patch b/debian/patches/0001-desktop-keywords.patch deleted file mode 100644 index d4531e34..00000000 --- a/debian/patches/0001-desktop-keywords.patch +++ /dev/null @@ -1,18 +0,0 @@ -From: "Barak A. Pearlmutter" -Date: Mon, 13 May 2013 12:27:06 +0100 -Subject: desktop keywords - -silence lintian desktop-entry-lacks-keywords-entry ---- - resources/unix/focuswriter.desktop | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop -index d27d6bb..dcdaa97 100644 ---- a/resources/unix/focuswriter.desktop -+++ b/resources/unix/focuswriter.desktop -@@ -81,3 +81,4 @@ Exec=focuswriter %F - Terminal=false - MimeType=application/rtf;application/vnd.oasis.opendocument.text;vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; - Categories=Qt;Office;WordProcessor; -+Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index e138985c..00000000 --- a/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -0001-desktop-keywords.patch From c542b7afdb62aeb3065e4de37c8021f26067c95f Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 18:21:09 +0200 Subject: [PATCH 204/630] rm debian/README.source --- debian/README.source | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 debian/README.source diff --git a/debian/README.source b/debian/README.source deleted file mode 100644 index 24bef6a4..00000000 --- a/debian/README.source +++ /dev/null @@ -1,10 +0,0 @@ -Un-official upstream releases created with, eg - -u=1.3.5 -r=$(git show-ref upstream/master | head -c8) -v=$u+git.$r -p=focuswriter -git tag -s -u -m 'unofficial upstream release' upstream/$v -git archive --format tar --prefix $p/ $r | gzip -9 > ../$p_$v.orig.tar.gz - - -- Barak A. Pearlmutter , Sun, 4 Dec 2011 11:45:01 +0000 From 049b982d8b56569415f6f4bb02c9f86cc847bf3c Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 19:30:28 +0200 Subject: [PATCH 205/630] rm debian/man/focuswriter.1, swizzle to point to resources/unix/focuswriter.1 --- debian/focuswriter.manpages | 2 +- debian/man/focuswriter.1 | 24 ------------------------ 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 debian/man/focuswriter.1 diff --git a/debian/focuswriter.manpages b/debian/focuswriter.manpages index a7e95cdc..4aa139c5 100644 --- a/debian/focuswriter.manpages +++ b/debian/focuswriter.manpages @@ -1 +1 @@ -debian/man/focuswriter.1 +resources/unix/focuswriter.1 diff --git a/debian/man/focuswriter.1 b/debian/man/focuswriter.1 deleted file mode 100644 index f9230b14..00000000 --- a/debian/man/focuswriter.1 +++ /dev/null @@ -1,24 +0,0 @@ -.TH FOCUSWRITER "1" "Oct 2011" "User Commands" -.SH NAME -focuswriter \- editor allowing monomaniacal writing -.SH SYNOPSIS -.B focuswriter -[\fIfile...\fR] -.SH DESCRIPTION -Qt editing application that takes over the entire screen and provides -a focused monomaniacal writing experience. -Makes the computer into a typewriter, complete with sound effects. -.PP -If in full screen mode, move the mouse to the top of the screen to -activate the menu. -Usage should be self explanatory. -Many configuration options are available. -.SH AUTHOR -Graeme Gott -.SH "REPORTING BUGS" -See http://gottcode.org/focuswriter/ -.SH COPYRIGHT -Licensed under the GNU GPL3+. -.SH "SEE ALSO" -No, do not look at anything else. -Get back to writing! From 5ea1be44d282a76bab96d386132e3f3aa6b3d28a Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Jun 2014 19:41:09 +0200 Subject: [PATCH 206/630] rm debian/focuswriter.manpages debian/install, installed by upstream --- debian/focuswriter.manpages | 1 - debian/install | 1 - 2 files changed, 2 deletions(-) delete mode 100644 debian/focuswriter.manpages delete mode 100644 debian/install diff --git a/debian/focuswriter.manpages b/debian/focuswriter.manpages deleted file mode 100644 index 4aa139c5..00000000 --- a/debian/focuswriter.manpages +++ /dev/null @@ -1 +0,0 @@ -resources/unix/focuswriter.1 diff --git a/debian/install b/debian/install deleted file mode 100644 index 0ab83626..00000000 --- a/debian/install +++ /dev/null @@ -1 +0,0 @@ -resources/images/icons/hicolor/scalable/apps/focuswriter.svg usr/share/icons/hicolor/scalable/apps/ From dfbef2ac5261822e8e69492ee57be1f544378a7f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 21 Jun 2014 10:36:16 -0400 Subject: [PATCH 207/630] FIXED: Incorrect MIME type for Office Open XML. --- resources/unix/focuswriter.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index dcdaa97d..30185057 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -79,6 +79,6 @@ Icon=focuswriter TryExec=focuswriter Exec=focuswriter %F Terminal=false -MimeType=application/rtf;application/vnd.oasis.opendocument.text;vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; +MimeType=application/rtf;application/vnd.oasis.opendocument.text;application/vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing From c88996fb5729ac8664e4c11b24317a8b1a5acf15 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 22 Jun 2014 04:22:36 -0400 Subject: [PATCH 208/630] FIXED: Spelling underline is broken with Qt 5, work around. --- src/spelling/highlighter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/spelling/highlighter.cpp b/src/spelling/highlighter.cpp index 6085c8b7..a6efe171 100644 --- a/src/spelling/highlighter.cpp +++ b/src/spelling/highlighter.cpp @@ -24,9 +24,11 @@ #include "spell_checker.h" #include +#include #include #include #include +#include #include #include @@ -165,7 +167,7 @@ void Highlighter::highlightBlock(const QString& text) QTextCharFormat error; error.setUnderlineColor(m_misspelled); - error.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline); + error.setUnderlineStyle((QTextCharFormat::UnderlineStyle)QApplication::style()->styleHint(QStyle::SH_SpellCheckUnderlineStyle)); int cursor = m_text->textCursor().position() - currentBlock().position(); QVector words = stats->misspelled(); From 2c3a5bb5b23c21c2847209402a853769b002847a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 24 Jun 2014 07:50:54 -0400 Subject: [PATCH 209/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 4 + resources/unix/focuswriter.desktop | 3 + resources/unix/po/es_MX.po | 25 +- translations/focuswriter_ar.ts | 360 ++++++++--------- translations/focuswriter_ca.ts | 360 ++++++++--------- translations/focuswriter_cs.ts | 360 ++++++++--------- translations/focuswriter_da.ts | 360 ++++++++--------- translations/focuswriter_de.ts | 360 ++++++++--------- translations/focuswriter_el.ts | 360 ++++++++--------- translations/focuswriter_en.ts | 360 ++++++++--------- translations/focuswriter_en_GB.ts | 360 ++++++++--------- translations/focuswriter_es.ts | 360 ++++++++--------- translations/focuswriter_es_MX.qm | Bin 21298 -> 28651 bytes translations/focuswriter_es_MX.ts | 520 ++++++++++++------------- translations/focuswriter_fi.ts | 360 ++++++++--------- translations/focuswriter_fr.ts | 360 ++++++++--------- translations/focuswriter_he.ts | 360 ++++++++--------- translations/focuswriter_hu.ts | 360 ++++++++--------- translations/focuswriter_hy.ts | 360 ++++++++--------- translations/focuswriter_id.ts | 360 ++++++++--------- translations/focuswriter_it.ts | 360 ++++++++--------- translations/focuswriter_ja.ts | 360 ++++++++--------- translations/focuswriter_ko.qm | Bin 23498 -> 26270 bytes translations/focuswriter_ko.ts | 448 ++++++++++----------- translations/focuswriter_nl.ts | 360 ++++++++--------- translations/focuswriter_pl.ts | 360 ++++++++--------- translations/focuswriter_pt.ts | 360 ++++++++--------- translations/focuswriter_pt_BR.ts | 360 ++++++++--------- translations/focuswriter_ro.ts | 360 ++++++++--------- translations/focuswriter_ru.ts | 360 ++++++++--------- translations/focuswriter_sk.ts | 360 ++++++++--------- translations/focuswriter_sr.ts | 360 ++++++++--------- translations/focuswriter_sv.qm | Bin 33455 -> 34044 bytes translations/focuswriter_sv.ts | 378 +++++++++--------- translations/focuswriter_tr.ts | 360 ++++++++--------- translations/focuswriter_uk.ts | 360 ++++++++--------- translations/focuswriter_vi.ts | 360 ++++++++--------- translations/focuswriter_zh_CN.ts | 360 ++++++++--------- translations/focuswriter_zh_TW.ts | 360 ++++++++--------- 39 files changed, 6099 insertions(+), 6079 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 57d812e8..b8e66854 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -6,6 +6,7 @@ Textový procesor v režimu na celou obrazovku Vollbild-Textverarbeitungsprogramm Επεξεργαστής κειμένου σε πλήρης οθόνη + Procesador de palabras en pantalla completa Koko näytön tekstinkäsittelyohjelma מעבד תמלילים במסך מלא Լիէկրան տեքստային խմբագրիչ @@ -21,6 +22,7 @@

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

FocusWriter je jednoduchý, nerozptylující zpracovatel textu. Používá schovávající se rozhraní, ke kterému se dostanete pohybem ukazovátka vaší myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce.

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

+

FocusWriter es un procesador de palabras simple y sin distractores. Éste utiliza una interfaz aislada que puede ser accedida moviendo el ratón a las esquinas de la pantalla, permitiendo que el programa tener una apariencia similar a cuando uno se aparta de todo y se puede concentrar sólo en su trabajo.

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

@@ -33,6 +35,7 @@

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

+

FocusWriter permite personalizar su ambiente creado temas que controlan la fuente, los colores y la imagen de fondo para crear un ambiente. Otras características son que actualiza en tiempo real estadísticas, metas diarias, abre múltiples documentos, verifica ortografía y mucho más.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka vaihtavat fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

@@ -45,6 +48,7 @@

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

Navíc, když otevřete program, vaše rozdělaná práce se automaticky nahraje a otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase budete moci okamžitě dát.

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

+

Además, cuando se abre el programa, su trabajo actual se cargará y la posición en la que dejó la última vez para que pueda continuar inmediatamente.

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 30185057..ece071c4 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -7,6 +7,7 @@ Name[de]=FocusWriter Name[el]=FocusWriter Name[en_GB]=FocusWriter Name[es]=FocusWriter +Name[es_MX]=FocusWriter Name[fi]=FocusWriter Name[fr]=FocusWriter Name[he]=FocusWriter @@ -32,6 +33,7 @@ GenericName[de]=Vollbild-Textverarbeitung GenericName[el]=Επεξεργαστής Κειμένου σε Πλήρης Οθόνη GenericName[en_GB]=Full-screen Word Processor GenericName[es]=Procesador de textos a pantalla completa +GenericName[es_MX]=Procesador de palabras en pantalla completa GenericName[fi]=Koko näytön tekstinkäsittelyohjelma GenericName[fr]=Traitement de texte plein écran GenericName[he]=מעבד תמלילים במסך מלא @@ -57,6 +59,7 @@ Comment[de]=Schreibe ohne Ablenkung Comment[el]=Γράψτε χωρίς ενόχληση Comment[en_GB]=Write without distractions Comment[es]=Escriba sin distracciones +Comment[es_MX]=Escriba sin distractores Comment[fi]=Kirjoita ilman häiriötekijöitä Comment[fr]=Écrivez sans distractions Comment[he]=כתיבה ללא הסחות דעת diff --git a/resources/unix/po/es_MX.po b/resources/unix/po/es_MX.po index 7442a3bf..adc3c575 100644 --- a/resources/unix/po/es_MX.po +++ b/resources/unix/po/es_MX.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# neoriddle , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" -"Last-Translator: Graeme Gott \n" +"PO-Revision-Date: 2014-06-20 04:26+0000\n" +"Last-Translator: neoriddle \n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/" "focuswriter/language/es_MX/)\n" "Language: es_MX\n" @@ -20,7 +21,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 msgid "Fullscreen word processor" -msgstr "" +msgstr "Procesador de palabras en pantalla completa" #: ../focuswriter.appdata.xml.in.h:2 msgid "" @@ -29,6 +30,11 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter es un procesador de palabras simple y sin distractores. Éste " +"utiliza una interfaz aislada que puede ser accedida moviendo el ratón a las " +"esquinas de la pantalla, permitiendo que el programa tener una apariencia " +"similar a cuando uno se aparta de todo y se puede concentrar sólo en su " +"trabajo." #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -37,6 +43,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter permite personalizar su ambiente creado temas que controlan la " +"fuente, los colores y la imagen de fondo para crear un ambiente. Otras " +"características son que actualiza en tiempo real estadísticas, metas " +"diarias, abre múltiples documentos, verifica ortografía y mucho más." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -44,15 +54,18 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Además, cuando se abre el programa, su trabajo actual se cargará y la " +"posición en la que dejó la última vez para que pueda continuar " +"inmediatamente." #: ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "" +msgstr "FocusWriter" #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "" +msgstr "Procesador de palabras en pantalla completa" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "" +msgstr "Escriba sin distractores" diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index da6ad69c..4b144df0 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -148,81 +148,81 @@ Document - + (Untitled %1) (%1 غير معنون) - + %1 (Read-Only) - - - - + + + + Sorry معـذرة! - + Unable to save '%1'. لا يمكن حفظ '%1'. - + Save File As حفظ باسم - - + + Unable to overwrite '%1'. لا يمكن الكتابة على '%1'. - + Rename File تسمية الملف مجددا - + Unable to rename '%1'. لا يمكن إعادة تسمية '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload تحديـث - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -406,17 +406,17 @@ Highlighter - + Add إضافة - + Check Spelling... - + (No suggestions found) @@ -447,12 +447,12 @@ <لغة النظام>
- + Note ملاحظة - + Please restart this application for the change in language to take effect. من فضلك، أعد تشغيل البرنامج ليتم تفعيل اللغة المختارة. @@ -892,11 +892,11 @@ Session - - - - - + + + + + Default الافتراضي @@ -904,97 +904,97 @@ SessionManager - + Manage Sessions إدارة الجلسات - + S&essions الجلسـات - + New جديد - + Duplicate - + Rename التسمية مجددا - + Delete حـذف - + Switch To التبديل إلى - + New Session جلسة جديدة - + Duplicate Session - + Rename Session تسمية الجلسة مجددًا - + Question - + Delete selected session? تحذف الجلسة المحددة؟ - + Session name: اسم الجلسة: - + Sorry - + The requested session name is already in use. - + &New... جديـد... - + Ctrl+Shift+N - + &Manage... إدارة... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1626,634 +1626,634 @@ Window - + Loading themes تحميـل سمـات - + Loading sounds تحميل الأصوات - - + + Untitled غير معنون - + Open File فتـح ملف - + About FocusWriter حـول البرنامج FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + Opening %1 فتـح %1 - + (Untitled %1) (%1 غير معنون) - + List all documents - + Switch to Next Document التبديل إلى المستند اللاحق - + Switch to Previous Document التبديل إلى المستند السابق - + Switch to First Document التبديل إلى المستند الأول - + Switch to Last Document التبديل إلى المستند الأخير - + Switch to Document %1 التبديل إلى المستند %1 - + Loading settings تحميل الإعدادات - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. لا يمكن تحمل أصوات الرقن. - + Please make sure that SDL_mixer is installed. - + &File ملـف - + &New جديـد - + &Open... فتـح - + Reloa&d تحديـث - + &Save حفـظ - + Save &As... حفظ باسم - + &Rename... التسمية مجددًا - + Save A&ll حفظ الكل - + Manage Sessions إدارة الجلسات - + New Session جلسة جديدة - + &Print... طباعة - + &Close إغلاق المستند الحالي - + &Quit إغلاق البرنامج - + Ctrl+Q Ctrl+Q - + &Edit تحريـر - + &Undo تراجـع - + &Redo استرجاع - + Cu&t قـص - + &Copy نسـخ - + &Paste لصـق - + Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All تحديـد الكل - + Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat النمـط - + &Bold سمـيك - + &Italic مائـل - + &Underline مسطر تحته - + Stri&kethrough مشـطب - + Ctrl+K Ctrl+K - + Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left محاذاة إلى اليسار - + Ctrl+{ Ctrl+{ - + Align &Center محاذاة إلى الوسط - + Ctrl+| Ctrl+| - + Align &Right محاذاة إلى اليمين - + Ctrl+} Ctrl+} - + Align &Justify ضبـط - + Ctrl+J Ctrl+J - + &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block الاتجاه من اليسار إلى اليمين - + Ri&ght to Left Block الاتجاه من اليمين إلى اليسار - + &Tools أدوات - + &Find... بحـث - + Find &Next أوجد اللاحق - + Find Pre&vious أوجد السابق - + &Replace... استبـدال... - + Ctrl+R Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 F7 - + Set &Language... - + &Timers... - + S&ymbols... - + &Daily Progress - + &Settings إعـدادات - + Show &Toolbar إظهار شريط الأدوات - + Show &Menu Icons - + F&ocused Text النص المركز عليه - + &Fullscreen - + F11 F11 - + Esc Esc - + M&inimize - + Ctrl+M Ctrl+M - + &Themes... سمـات... - + &Preferences... تفضيلات... - + Focus Off دون تركيز - + Focus One Line تركيز على سطر - + Focus Three Lines تركيز على ثلاثة أسطر - + &Paragraph فقـرة - + Focus Paragraph تركيز على فقرة - + &Help مساعدة - + Application &Language... لغة التطبيق... - + Some files were unsupported and could not be opened. - + &Off دون تركيز - + One &Line تركيز على سطر - + &Three Lines تركيز على ثلاثة أسطر - + &About حـول - + About &Qt حـول "كيوتي" diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 4d99541c..fb44f629 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Sense títol %1) - + %1 (Read-Only) %! (Només lectura) - - - - + + + + Sorry Disculpes - + Unable to save '%1'. No s'ha pogut desar '%1'. - + Save File As Anomena i desa - - + + Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - + Rename File Reanomena el fitxer - + Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - + Reload File? Voleu recarregar el fitxer? - + Reload the file '%1' from disk? Voleu recarregar el fitxer '%1' des del disc? - + All unsaved changes will be lost. Es perdran tots els canvis. - + Reload Torna a carregar - + Untitled %1 Sense títol %1 - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? @@ -388,17 +388,17 @@ Highlighter - + Add Afegeix - + Check Spelling... Comprova l'ortografia - + (No suggestions found) (No s'han trobat suggeriments) @@ -429,12 +429,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Call que reinicieu l'aplicació perquè tingui efecte el canvi d'idioma @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Per defecte @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Gestiona les sessions - + S&essions S&essions - + New Nou - + Duplicate - + Rename Canvia el nom - + Delete Elimina - + Switch To Canvia a - + New Session Sessió nova - + Duplicate Session - + Rename Session Canvia el nom de la sessió - + Question Pregunta - + Delete selected session? Esteu segur que voleu eliminar la sessió seleccionada? - + Session name: Nom de la sessió: - + Sorry Disculpes - + The requested session name is already in use. El nom de la sessió seleccionat ja està essent utilitzat. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... Administrar - + Ctrl+Shift+M Ctrl+Maj+M @@ -1608,634 +1608,634 @@ Window - + Loading themes S'estan carregant els Temes - + Loading sounds S'estan carregant els sons - - + + Untitled Sense títol - + Open File bre fitxer - + About FocusWriter Sobre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un processador de text senzill a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa les icones del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilitzades sota llicència <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caràcters: %L1 / %L2 - - + + Pages: %L1 Pàgines: %L1 - - + + Paragraphs: %L1 Paràgrafs: %L1 - - + + Words: %L1 Paraules: %L1 - - + + Opening %1 'està obrint %1 - + (Untitled %1) (Sense títol %1) - + List all documents Llista tots els documents - + Switch to Next Document Canvia a un document nou - + Switch to Previous Document Canvia al document anterior - + Switch to First Document Canvia al primer document - + Switch to Last Document Canvia al darrer document - + Switch to Document %1 Canvia al document %1 - + Loading settings S'estan carregant els ajustos - + Emergency cache is not writable. No es pot escriure a la memòria cau d'emergència. - - + + Warning Avís - + FocusWriter was not shut down cleanly. FocusWriter no es va tancat correctament. - + Restore from the emergency cache? Voleu restaurar des de la memòria cau d'emergència? - + Some files could not be opened. No s'han pogut obrir alguns fitxers. - + Some files were opened Read-Only. S'han obert alguns fitxers en mode de Només lectura. - + '%1' is newer than the cached copy. '%1'és més nou que la còpia de la memòria cau. - + Overwrite newer file? Voleu sobreescriure el fitxer més nou? - + Save Changes? Voleu desar els canvis? - + Save changes to the file '%1' before closing? Voleu desar els canvis efectuats a '%1' abans de tancar? - + Your changes will be lost if you don't save them. Es perdran els canvis si no els deseu. - + Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - + Please make sure that SDL_mixer is installed. Assegureu-vos que heu instal·lat SDL_mixer - + &File &Fitxer - + &New &Nou - + &Open... &Obre - + Reloa&d Torna a carregar - + &Save &Desa - + Save &As... Desa &com... - + &Rename... &Reanomena... - + Save A&ll Desa-ho tot - + Manage Sessions Gestiona les sessions - + New Session Nova sessió - + &Print... Im&primeix - + &Close Tan&ca - + &Quit Surt - + Ctrl+Q Ctrl+Q - + &Edit &Edita - + &Undo Desfés - + &Redo &Refés - + Cu&t Talla - + &Copy &Copia - + &Paste Enganxa - + Paste &Unformatted Enganxa sense format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccion&a tot - + Select &Scene Selecciona l'escena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold Negreta - + &Italic Itàlica - + &Underline S&ubratllat - + Stri&kethrough Ratllat - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndex - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndex - + Ctrl+_ Ctrl+_ - + Align &Left Alinea a l'esquerra - + Ctrl+{ Ctrl+{ - + Align &Center Alinea al &Centre - + Ctrl+| Ctrl+| - + Align &Right Alinea a la dreta - + Ctrl+} Ctrl+} - + Align &Justify &Justifica - + Ctrl+J Ctrl+J - + &Decrease Indent &Disminueix el sagnat - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrementa el sagnat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Escriure d'esquerra a dreta - + Ri&ght to Left Block Escriure de dreta a esquerra - + &Tools Eines - + &Find... Cerca... - + Find &Next Cerca el següent - + Find Pre&vious Cerca l'anterior - + &Replace... Reemplaça - + Ctrl+R Ctrl+R - + Smart &Quotes Cometes tipogràfiques - + Update &Document Actualitza el document - + Update &Selection Actualitza la selecció - + &Spelling... Ortografia - + F7 F7 - + Set &Language... Configuració i Idioma - + &Timers... &Temporitzadors - + S&ymbols... S&ímbols... - + &Daily Progress &Progrés diari - + &Settings Configuració - + Show &Toolbar Mostra la barra d'eines - + Show &Menu Icons Mostra les icones del menú - + F&ocused Text Text focalitzat - + &Fullscreen Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimitza - + Ctrl+M Ctrl+M - + &Themes... &Temes... - + &Preferences... &Preferències... - + Focus Off No focalitzis - + Focus One Line Focalitza una línia - + Focus Three Lines Focalitza tres línies - + &Paragraph &Paràgraf - + Focus Paragraph Focalitza un paràgraf - + &Help Ajuda - + Application &Language... Idioma de l'aplicació - + Some files were unsupported and could not be opened. Alguns fitxers no tenen suport i no es podran obrir - + &Off Tanca - + One &Line Una &Línia - + &Three Lines &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 4ebfbfce..d2dbdfc1 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez názvu %1) - + %1 (Read-Only) %1 (pouze pro čtení) - - - - + + + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - + Save File As Uložit soubor jako - - + + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Reload File? Nahrát soubor znovu? - + Reload the file '%1' from disk? Nahrát soubor '%1' znovu z disku? - + All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - + Reload Nahrát znovu - + Untitled %1 Bez názvu %1 - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? @@ -388,17 +388,17 @@ Highlighter - + Add Přidat - + Check Spelling... Ověření pravopisu... - + (No suggestions found) (Nebyly nalezeny žádné návrhy) @@ -429,12 +429,12 @@ <Jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. Spusťte program znovu, aby se změna jazyka projevila. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Výchozí @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Spravovat sezení - + S&essions S&ezení - + New Nové - + Duplicate Zdvojit - + Rename Přejmenovat - + Delete Smazat - + Switch To Přepnout na - + New Session Nové sezení - + Duplicate Session Zdvojit sezení - + Rename Session Přejmenovat sezení - + Question Otázka - + Delete selected session? Smazat vybrané sezení? - + Session name: Název sezení: - + Sorry Promiňte - + The requested session name is already in use. Požadovaný název sezení se již používá. - + &New... &Nové... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovat... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Nahrávají se podoby - + Loading sounds Nahrávají se zvuky - - + + Untitled Bez názvu - + Open File Otevřít soubor - + About FocusWriter O programu FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - + Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slova: %L1 - - + + Opening %1 Otevírá se %1 - + (Untitled %1) (Bez názvu %1) - + List all documents Vypsat všechny dokumenty - + Switch to Next Document Přepnout na další dokument - + Switch to Previous Document Přepnout na předchozí dokument - + Switch to First Document Přepnout na první dokument - + Switch to Last Document Přepnout na poslední dokument - + Switch to Document %1 Přepnout na dokument %1 - + Loading settings Nahrávají se nastavení - + Emergency cache is not writable. Pohotovostní vyrovnávací paměť není zapisovatelná - - + + Warning Varování - + FocusWriter was not shut down cleanly. FocusWriter nebyl vypnut čistě. - + Restore from the emergency cache? Obnovit z pohotovostní vyrovnávací paměti? - + Some files could not be opened. Některé soubory se nepodařilo otevřít. - + Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - + '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - + Overwrite newer file? Přepsat novější soubor? - + Save Changes? Uložit změny? - + Save changes to the file '%1' before closing? Uložit změny do souboru '%1' před zavřením? - + Your changes will be lost if you don't save them. Vaše změny budou ztraceny, pokud je neuložíte. - + Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - + Please make sure that SDL_mixer is installed. Ujistěte se, prosím, že je nainstalován SDL_mixer. - + &File &Soubor - + &New &Nový - + &Open... &Otevřít... - + Reloa&d Nahrát z&novu - + &Save &Uložit - + Save &As... Uložit &jako... - + &Rename... Pře&jmenovat... - + Save A&ll U&ložit vše - + Manage Sessions Spravovat sezení - + New Session Nové sezení - + &Print... &Tisk... - + &Close &Zavřít - + &Quit &Ukončit - + Ctrl+Q Ctrl+Q - + &Edit Úp&ravy - + &Undo &Zpět - + &Redo Zn&ovu - + Cu&t Vyj&mout - + &Copy &Kopírovat - + &Paste &Vložit - + Paste &Unformatted Vložit ne&formátované - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrat &vše - + Select &Scene Vybrat &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formát - + &Bold &Tučné - + &Italic &Kurzíva - + &Underline &Podtržení - + Stri&kethrough Přeškr&tnutí - + Ctrl+K Ctrl+K - + Sup&erscript &Horní index - + Ctrl+^ Ctrl+^ - + &Subscript &Dolní index - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnat &vlevo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnat na &střed - + Ctrl+| Ctrl+| - + Align &Right Zarovnat vp&ravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnat do &bloku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšit odsazení - + Ctrl+< Ctrl+< - + I&ncrease Indent Zvětš&it odsazení - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok zl&eva doprava - + Ri&ght to Left Block Blok z&prava doleva - + &Tools &Nástroje - + &Find... &Hledat... - + Find &Next Najít &další - + Find Pre&vious Najít &předchozí - + &Replace... &Nahradit... - + Ctrl+R Ctrl+R - + Smart &Quotes Chytré &uvozovky - + Update &Document Obnovit &dokument - + Update &Selection Obnovit &výběr - + &Spelling... &Pravopis... - + F7 F7 - + Set &Language... Nastavit &jazyk... - + &Timers... Časo&míry... - + S&ymbols... S&ymboly... - + &Daily Progress &Denní postup - + &Settings &Nastavení - + Show &Toolbar Ukázat ná&strojový pruh - + Show &Menu Icons Ukázat &nabídkové ikony - + F&ocused Text Zao&střený text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize Z&menšit na panel - + Ctrl+M Ctrl+M - + &Themes... &Vzhled... - + &Preferences... &Nastavení... - + Focus Off Zaměření vypnuto - + Focus One Line Zaměření na jeden řádek - + Focus Three Lines Zaměření na tři řádky - + &Paragraph &Odstavec - + Focus Paragraph Zaměření na odstavec - + &Help &Nápověda - + Application &Language... Jazyk &programu... - + Some files were unsupported and could not be opened. Některé soubory nebyly podporovány a nepodařilo se je otevřít. - + &Off &Vypnuto - + One &Line Jeden řá&dek - + &Three Lines &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 79aeb7e6..a7f8f799 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Uden titel%1) - + %1 (Read-Only) - - - - + + + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - + Save File As Gem fil som - - + + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - + Reload Genindlæs - + Untitled %1 Uden titel %1 - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? @@ -382,17 +382,17 @@ Highlighter - + Add Tilføj - + Check Spelling... Stavekontrol... - + (No suggestions found) (Der er ikke fundet forslag) @@ -423,12 +423,12 @@ <Systemsprog> - + Note Note - + Please restart this application for the change in language to take effect. Genstart programmet for at skifte til det valgte sprog. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Standard @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Administrer sessioner - + S&essions S&essioner - + New Ny - + Duplicate - + Rename Omdøb - + Delete Slet - + Switch To Skift til - + New Session Ny session - + Duplicate Session - + Rename Session Omdøb session - + Question Spørgsmål - + Delete selected session? Slet valgte session? - + Session name: Navn på session: - + Sorry Beklager - + The requested session name is already in use. Der gøres allerede brug af det ønskede sessionsnavn. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Administrer - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Indlæser temaer - + Loading sounds Indlæser lyde - - + + Untitled Uden titel - + Open File Åbn fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - + Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - + Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - - + + Characters: %L1 / %L2 Tegn: %L1 / %L2 - - + + Pages: %L1 Sider: %L1 - - + + Paragraphs: %L1 Afsnit: %L1 - - + + Words: %L1 Ord: %L1 - - + + Opening %1 Åbner %1 - + (Untitled %1) (Uden titel%1) - + List all documents - + Switch to Next Document Skift til næste dokument - + Switch to Previous Document Skift til tidligere dokument - + Switch to First Document Skift til første dokument - + Switch to Last Document Skift til sidste dokument - + Switch to Document %1 Skift til dokument %1 - + Loading settings Indlæser indstillinger - + Emergency cache is not writable. Der kan ikke skrives til reservecachen. - - + + Warning Advarsel - + FocusWriter was not shut down cleanly. FocusWriter blev ikke lukket korrekt. - + Restore from the emergency cache? Gendan fra reservecache? - + Some files could not be opened. Visse filer kunne ikke åbnes. - + Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - + '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - + Overwrite newer file? Overskriv nyere fil? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - + Please make sure that SDL_mixer is installed. Sørg for, at SDL_mixer er installeret. - + &File &Fil - + &New &Ny - + &Open... &Åbn... - + Reloa&d Genind&læs - + &Save &Gem - + Save &As... Gem &som - + &Rename... &Omdøb... - + Save A&ll Gem &alle - + Manage Sessions Administrer sessioner - + New Session Ny session - + &Print... &Udskrift... - + &Close &Luk - + &Quit &Afslut - + Ctrl+Q Ctrl+Q - + &Edit &Rediger - + &Undo &Fortryd - + &Redo &Gendan - + Cu&t K&lip - + &Copy &Kopier - + &Paste &Indsæt - + Paste &Unformatted Indsæt &uformatteret - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vælg &alle - + Select &Scene Vælg &scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Fed - + &Italic &Kursiv - + &Underline &Understreg - + Stri&kethrough &Gennemstreg - + Ctrl+K Ctrl+K - + Sup&erscript &Hævet skrift - + Ctrl+^ Ctrl+^ - + &Subscript &Sænket skrift - + Ctrl+_ Ctrl+_ - + Align &Left &Venstrestil - + Ctrl+{ Ctrl+{ - + Align &Center &Centrer - + Ctrl+| Ctrl+| - + Align &Right &Højrestil - + Ctrl+} Ctrl+} - + Align &Justify &Tilpasset - + Ctrl+J Ctrl+J - + &Decrease Indent &Forminds indrykning - + Ctrl+< Ctrl+< - + I&ncrease Indent Fo&røg indrykning - + Ctrl+> Ctrl+> - + Le&ft to Right Block Tekstblok med Ve&nstre til højre - + Ri&ght to Left Block Tekstblok med Hø&jre til venstre - + &Tools &Værktøjer - + &Find... &Find... - + Find &Next Find &næste - + Find Pre&vious Find &tidligere - + &Replace... &Erstat - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Opdater &dokument - + Update &Selection Opdater &markering - + &Spelling... &Stavning... - + F7 F7 - + Set &Language... - + &Timers... &Tællere... - + S&ymbols... S&ymboler... - + &Daily Progress - + &Settings &Indstillinger - + Show &Toolbar Vis &værktøjslinie - + Show &Menu Icons Vis &menuikoner - + F&ocused Text F&okuseret tekst - + &Fullscreen &Fuld skærm - + F11 F11 - + Esc Esc - + M&inimize M&inimer - + Ctrl+M Ctrl+M - + &Themes... &Temaer... - + &Preferences... &Indstillinger... - + Focus Off Fokus fra - + Focus One Line Fokus én linie - + Focus Three Lines Fokus tre linier - + &Paragraph A&fsnit - + Focus Paragraph Fokus afsnit - + &Help &Hjælp - + Application &Language... Programmets &sprog - + Some files were unsupported and could not be opened. Nogle filer var ikke understøttede og kunne ikke åbnes. - + &Off &Fra - + One &Line En &linie - + &Three Lines &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 647facdb..e8a55f6e 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Unbenannt %1) - + %1 (Read-Only) %1 (Schreibgeschützt) - - - - + + + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - + Save File As Datei speichern unter - - + + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Reload File? Datei neu laden? - + Reload the file '%1' from disk? Datei '%1' von der Festplatte neu laden? - + All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - + Reload Neu laden - + Untitled %1 Unbenannt %1 - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? @@ -382,17 +382,17 @@ Highlighter - + Add Hinzufügen - + Check Spelling... Rechtschreibung prüfen ... - + (No suggestions found) (keine Vorschläge gefunden) @@ -423,12 +423,12 @@ <Systemsprache> - + Note Beachte - + Please restart this application for the change in language to take effect. Damit Änderungen an der Programmsprache in Kraft treten können, muss das Programm neu gestartet werden. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Standard @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Sitzungen verwalten - + S&essions S&itzungen - + New Neu - + Duplicate - + Rename Umbenennen - + Delete Löschen - + Switch To Wechseln zu - + New Session Neue Sitzung - + Duplicate Session - + Rename Session Sitzung umbenennen - + Question Frage - + Delete selected session? Sitzung löschen? - + Session name: Name der Sitzung: - + Sorry Entschuldigung - + The requested session name is already in use. Die gewünschte Sitzung wird derzeit benutzt. - + &New... &Neu... - + Ctrl+Shift+N Strg+Shift+N - + &Manage... &Verwalten... - + Ctrl+Shift+M Strg+Shift+V @@ -1602,634 +1602,634 @@ Window - + Loading themes Themen werden geladen - + Loading sounds Sounds werden geladen - - + + Untitled Unbenannt - + Open File Datei öffnen - + About FocusWriter Über FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Einfache Vollbild Textverarbeitung - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - + Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - + Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - - + + Characters: %L1 / %L2 Zeichen: %L1 / %L2 - - + + Pages: %L1 Seiten: %L1 - - + + Paragraphs: %L1 Absätze: %L1 - - + + Words: %L1 Wörter: %L1 - - + + Opening %1 Datei %1 wird geöffnet - + (Untitled %1) (Unbenannt %1) - + List all documents Alle Dokumente auflisten - + Switch to Next Document Ins nächste Dokument übergehen - + Switch to Previous Document Ins vorherige Dokument übergehen - + Switch to First Document Ins erste Dokument übergehen - + Switch to Last Document Ins letzte Dokument übergehen - + Switch to Document %1 Ins Dokument %1 übergehen - + Loading settings Einstellungen werden geladen - + Emergency cache is not writable. Der Sicherheitsspeicher ist nicht beschreibbar. - - + + Warning Warnung - + FocusWriter was not shut down cleanly. FocusWriter wurde nicht ordnungsgemäß beendet. - + Restore from the emergency cache? Sicherheitskopie wiederherstellen? - + Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - + Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - + '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - + Overwrite newer file? Neuere Datei überschreiben? - + Save Changes? Änderungen speichern? - + Save changes to the file '%1' before closing? Änderungen an der Datei '%1' vor dem Schließen speichern? - + Your changes will be lost if you don't save them. Alle Änderungen gehen verloren, wenn diese nicht gespeichert werden. - + Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - + Please make sure that SDL_mixer is installed. Bitte stellen Sie sicher, dass SDL_mixer installiert ist. - + &File &Datei - + &New &Neu - + &Open... &Öffnen... - + Reloa&d Neuladen - + &Save &Speichern - + Save &As... Speichern &unter... - + &Rename... &Umbenennen... - + Save A&ll &Alles speichern - + Manage Sessions Sitzungen verwalten - + New Session Neue Sitzung - + &Print... &Drucken... - + &Close &Schließen - + &Quit &Beenden - + Ctrl+Q Strg+Q - + &Edit &Bearbeiten - + &Undo &Rückgängig - + &Redo &Wiederholen - + Cu&t A&usschneiden - + &Copy K&opieren - + &Paste Einf&ügen - + Paste &Unformatted &Rohtext einfügen - + Ctrl+Shift+V Strg+Shift+V - + Select &All Alles Ausw&ählen - + Select &Scene Szene auswählen - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatieren - + &Bold &Fett - + &Italic &Kursiv - + &Underline &Unterstrichen - + Stri&kethrough Durch&gestrichen - + Ctrl+K Strg+G - + Sup&erscript &Hochgestellt - + Ctrl+^ Strg+^ - + &Subscript &Tiefgestellt - + Ctrl+_ Strg+_ - + Align &Left &Linksbündig - + Ctrl+{ Strg+{ - + Align &Center &Zentrieren - + Ctrl+| Strg+| - + Align &Right &Rechtsbündig - + Ctrl+} Strg+} - + Align &Justify &Blocksatz - + Ctrl+J Strg+J - + &Decrease Indent Zeileneinzug &verringern - + Ctrl+< Strg+< - + I&ncrease Indent &Zeile einrücken - + Ctrl+> Strg+> - + Le&ft to Right Block Block &linksbündig ausrichten - + Ri&ght to Left Block Block &rechtbündig ausrichten - + &Tools &Werkzeuge - + &Find... &Suchen... - + Find &Next &Weitersuchen - + Find Pre&vious &Rückwärts suchen - + &Replace... &Ersetzen... - + Ctrl+R Strg+R - + Smart &Quotes &Anführungszeichen - + Update &Document &Dokument aktualisieren - + Update &Selection Aus&wahl aktualisieren - + &Spelling... &Rechtschreibung... - + F7 F7 - + Set &Language... - + &Timers... &Wecker... - + S&ymbols... Symbole... - + &Daily Progress &Täglicher Fortschritt - + &Settings &Einstellungen - + Show &Toolbar &Symbolleiste zeigen - + Show &Menu Icons &Menu Icons anzeigen - + F&ocused Text &Hervorgehobener Text - + &Fullscreen &Vollbild - + F11 F11 - + Esc Esc - + M&inimize M&inimieren - + Ctrl+M Strg+M - + &Themes... &Designs... - + &Preferences... &Voreinstellungen... - + Focus Off Fokus Aus - + Focus One Line Fokus EIne Zeile - + Focus Three Lines Fokus Drei Zeilen - + &Paragraph &Absatz - + Focus Paragraph Fokus Absatz - + &Help &Hilfe - + Application &Language... &Sprache... - + Some files were unsupported and could not be opened. Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - + &Off &Aus - + One &Line Eine Zeile - + &Three Lines Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 5b5dcc68..6ad9a92d 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Χωρίς τίτλο %1) - + %1 (Read-Only) - - - - + + + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το «%1». - + Save File As Αποθήκευση Αρχείου Ως - - + + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το «%1». - + Rename File Μετονομασία Αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το «%1». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. - + Reload Επαναφόρτωση - + Untitled %1 Χωρίς τίτλο %1 - + Question Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; @@ -382,17 +382,17 @@ Highlighter - + Add Προσθήκη - + Check Spelling... Ορθογραφικός Έλεγχος... - + (No suggestions found) (Δεν βρέθηκαν προτάσεις) @@ -423,12 +423,12 @@ <Γλώσσα Συστήματος> - + Note Σημείωση - + Please restart this application for the change in language to take effect. Επανεκκινήστε την εφαρμογή για να ισχύσει η αλλαγή γλώσσας. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Προεπιλογή @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + S&essions Π&ερίοδοι λειτουργίας - + New Νέα - + Duplicate - + Rename Μετονομασία - + Delete Διαγραφή - + Switch To Εναλλαγή Σε - + New Session Νέα Περίοδος Λειτουργίας - + Duplicate Session - + Rename Session Μετονομασία Περιόδου Λειτουργίας - + Question Ερώτηση - + Delete selected session? Να διαγραφή η επιλεγμένη περιόδου λειτουργίας; - + Session name: Όνομα περιόδου λειτουργίας: - + Sorry Λυπούμαστε - + The requested session name is already in use. Αυτό το όνομα χρησιμοποιείται ήδη για άλλη περίοδο λειτουργίας. - + &New... &Νέα... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Διαχείριση... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Φορτώνουν θέματα - + Loading sounds Φορτώνουν ήχοι - - + + Untitled Χωρίς τίτλο - + Open File Άνοιγμα Αρχείου - + About FocusWriter Σχετικά με το FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης - + Copyright &copy; 2008-%1 Graeme Gott Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> - - + + Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - - + + Pages: %L1 Σελίδες: %L1 - - + + Paragraphs: %L1 Παράγραφοι: %L1 - - + + Words: %L1 Λέξεις: %L1 - - + + Opening %1 Ανοίγει το %1 - + (Untitled %1) (Χωρίς τίτλο %1) - + List all documents - + Switch to Next Document Μετάβαση στο Επόμενο Έγγραφο - + Switch to Previous Document Μετάβαση στο Προηγούμενο Έγγραφο - + Switch to First Document Μετάβαση στο Πρώτο Έγγραφο - + Switch to Last Document Μετάβαση στο Τελευταίο Έγγραφο - + Switch to Document %1 Μετάβαση στο Έγγραφο %1 - + Loading settings Φορτώνουν ρυθμίσεις - + Emergency cache is not writable. Δεν μπορεί να γίνει εγγραφή στην κρυφή μνήμη εκτάκτου ανάγκης. - - + + Warning Προειδοποίηση - + FocusWriter was not shut down cleanly. Το FocusWriter δεν τερματίστηκε σωστά. - + Restore from the emergency cache? Να γίνει επαναφορά από τη μνήμη εκτάκτου ανάγκης; - + Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - + Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - + '%1' is newer than the cached copy. Το «%1» είναι νεότερο από το αντίγραφο στη μνήμη. - + Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - + Please make sure that SDL_mixer is installed. Παρακαλούμε βεβαιωθείτε ότι το SDL_mixer είναι εγκατεστημένο. - + &File &Αρχείο - + &New &Νέο - + &Open... Άν&οιγμα... - + Reloa&d Επαναφόρτωσ&η - + &Save Αποθήκευ&ση - + Save &As... Αποθήκευση &ως... - + &Rename... &Μετονομασία... - + Save A&ll Αποθήκευση ό&λων - + Manage Sessions Διαχείριση Περιόδων Λειτουργίας - + New Session Νέα Περίοδος Λειτουργίας - + &Print... Εκτύ&πωση... - + &Close &Κλείσιμο - + &Quit Έξο&δος - + Ctrl+Q Ctrl+Q - + &Edit &Επεξεργασία - + &Undo &Αναίρεση - + &Redo Ε&πανάληψη - + Cu&t Απο&κοπή - + &Copy Αν&τιγραφή - + &Paste Επικό&λληση - + Paste &Unformatted Επικόλληση &Χωρίς Μορφοποίηση - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Επιλογή Όλ&ων - + Select &Scene Επιλογή &Σκηνής - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Μορφοποίηση - + &Bold Έντ&ονα - + &Italic &Πλάγια - + &Underline &Υπογραμμισμένα - + Stri&kethrough Διαγραμμέ&να - + Ctrl+K Ctrl+K - + Sup&erscript &Εκθέτης - + Ctrl+^ Ctrl+^ - + &Subscript &Δείκτης - + Ctrl+_ Ctrl+_ - + Align &Left Στοίχιση &Αριστερά - + Ctrl+{ Ctrl+{ - + Align &Center Στοίχιση στο Κέν&τρο - + Ctrl+| Ctrl+| - + Align &Right Στοίχιση &Δεξιά - + Ctrl+} Ctrl+} - + Align &Justify Πλήρης &Στοίχιση - + Ctrl+J Ctrl+J - + &Decrease Indent Μεί&ωση Εσοχής - + Ctrl+< Ctrl+< - + I&ncrease Indent Αύ&ξηση Εσοχής - + Ctrl+> Ctrl+> - + Le&ft to Right Block Δεξιόστ&ροφη Γραφή - + Ri&ght to Left Block Αριστερόστρο&φη Γραφή - + &Tools Εργα&λεία - + &Find... Εύρε&ση... - + Find &Next Εύρεση &Επόμενου - + Find Pre&vious Εύρεση &Προηγούμενου - + &Replace... &Αντικατάσταση... - + Ctrl+R Ctrl+R - + Smart &Quotes Έξυπνα Εισαγ&ωγικά - + Update &Document Ενη&μέρωση εγγράφου - + Update &Selection Ε&νημέρωση Επιλογής - + &Spelling... Ορ&θογραφία... - + F7 F7 - + Set &Language... - + &Timers... Χρονόμε&τρα... - + S&ymbols... Σύμ&βολα... - + &Daily Progress - + &Settings &Ρυθμίσεις - + Show &Toolbar Εμφάνιση Γραμμής Εργα&λείων - + Show &Menu Icons Εμφάνιση Εικονιδίων &Μενού - + F&ocused Text Εστιασμένο &Κείμενο - + &Fullscreen Πλήρης Οθό&νη - + F11 F11 - + Esc Esc - + M&inimize Ελαχι&στοποίηση - + Ctrl+M Ctrl+M - + &Themes... &Θέματα... - + &Preferences... Προ&τιμήσεις... - + Focus Off Εστίαση Ανενεργή - + Focus One Line Εστίαση Μίας Γραμμής - + Focus Three Lines Εστίαση Τριών Γραμμών - + &Paragraph &Παραγράφου - + Focus Paragraph Εστίαση Παραγράφου - + &Help &Βοήθεια - + Application &Language... &Γλώσσα Εφαρμογής... - + Some files were unsupported and could not be opened. Ορισμένα αρχεία δεν υποστηρίζονται και δεν ήταν δυνατό να ανοιχτούν. - + &Off &Απενεργοποίηση - + One &Line &Μία Γραμμή - + &Three Lines &Τρεις Γραμμές - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index fa8415b6..7fd77d11 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) - + %1 (Read-Only) - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -382,17 +382,17 @@ Highlighter - + Add - + Check Spelling... - + (No suggestions found) @@ -423,12 +423,12 @@ - + Note - + Please restart this application for the change in language to take effect. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions - + S&essions - + New - + Duplicate - + Rename - + Delete - + Switch To - + New Session - + Duplicate Session - + Rename Session - + Question - + Delete selected session? - + Session name: - + Sorry - + The requested session name is already in use. - + &New... - + Ctrl+Shift+N - + &Manage... - + Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes - + Loading sounds - - + + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + Opening %1 - + (Untitled %1) - + List all documents - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + Set &Language... - + &Timers... - + S&ymbols... - + &Daily Progress - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index d2a5bbbd..4950f374 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Untitled %1) - + %1 (Read-Only) - - - - + + + + Sorry Sorry - + Unable to save '%1'. Unable to save '%1'. - + Save File As Save File As - - + + Unable to overwrite '%1'. Unable to overwrite '%1'. - + Rename File Rename File - + Unable to rename '%1'. Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. All unsaved changes will be lost. - + Reload Reload - + Untitled %1 Untitled %1 - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? Saving as plain-text will discard all formatting. Discard formatting? @@ -382,17 +382,17 @@ Highlighter - + Add Add - + Check Spelling... Check Spelling... - + (No suggestions found) (No suggestions found) @@ -423,12 +423,12 @@ <System Language> - + Note Note - + Please restart this application for the change in language to take effect. Please restart the application for the language change to take effect. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Default @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Manage Sessions - + S&essions S&essions - + New New - + Duplicate - + Rename Rename - + Delete Delete - + Switch To Switch To - + New Session New Session - + Duplicate Session - + Rename Session Rename Session - + Question Question - + Delete selected session? Delete selected session? - + Session name: Session name: - + Sorry Sorry - + The requested session name is already in use. The requested session name is already in use. - + &New... &New... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Manage... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Loading themes - + Loading sounds Loading sounds - - + + Untitled Untitled - + Open File Open File - + About FocusWriter About FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple full-screen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> licence - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> licence - - + + Characters: %L1 / %L2 Characters: %L1 / %L2 - - + + Pages: %L1 Pages: %L1 - - + + Paragraphs: %L1 Paragraphs: %L1 - - + + Words: %L1 Words: %L1 - - + + Opening %1 Opening %1 - + (Untitled %1) (Untitled %1) - + List all documents - + Switch to Next Document Switch to Next Document - + Switch to Previous Document Switch to Previous Document - + Switch to First Document Switch to First Document - + Switch to Last Document Switch to Last Document - + Switch to Document %1 Switch to Document %1 - + Loading settings Loading settings - + Emergency cache is not writable. Emergency cache is not writable. - - + + Warning Warning - + FocusWriter was not shut down cleanly. FocusWriter was not shut down cleanly. - + Restore from the emergency cache? Restore from the emergency cache? - + Some files could not be opened. Some files could not be opened. - + Some files were opened Read-Only. Some files were opened as Read-Only. - + '%1' is newer than the cached copy. '%1' is newer than the cached copy. - + Overwrite newer file? Overwrite the newer file? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. Please ensure that SDL_mixer is installed. - + &File &File - + &New &New - + &Open... &Open... - + Reloa&d Reloa&d - + &Save &Save - + Save &As... Save &As... - + &Rename... &Rename... - + Save A&ll Save A&ll - + Manage Sessions Manage Sessions - + New Session New Session - + &Print... &Print... - + &Close &Close - + &Quit &Quit - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Cu&t - + &Copy &Copy - + &Paste &Paste - + Paste &Unformatted Paste &Unformatted - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Select &All - + Select &Scene Select &Scene - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Bold - + &Italic &Italic - + &Underline &Underline - + Stri&kethrough Stri&kethough - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Align &Left - + Ctrl+{ Ctrl+{ - + Align &Center Align &Centre - + Ctrl+| Ctrl+| - + Align &Right Align &Right - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrease Indent - + Ctrl+< Ctrl+< - + I&ncrease Indent I&ncrease Indent - + Ctrl+> Ctrl+> - + Le&ft to Right Block Le&ft to Right Block - + Ri&ght to Left Block Ri&ght to Left Block - + &Tools &Tools - + &Find... &Find... - + Find &Next Find &Next - + Find Pre&vious Find Pre&vious - + &Replace... &Replace... - + Ctrl+R Ctrl+R - + Smart &Quotes Smart &Quotes - + Update &Document Update &Document - + Update &Selection Update &Selection - + &Spelling... &Spelling... - + F7 F7 - + Set &Language... - + &Timers... &Timers... - + S&ymbols... S&ymbols... - + &Daily Progress - + &Settings &Settings - + Show &Toolbar Show &Toolbar - + Show &Menu Icons Show &Menu Icons - + F&ocused Text F&ocused Text - + &Fullscreen &Full-screen - + F11 F11 - + Esc Esc - + M&inimize M&inimise - + Ctrl+M Ctrl+M - + &Themes... &Themes... - + &Preferences... &Preferences... - + Focus Off Focus Off - + Focus One Line Focus One Line - + Focus Three Lines Focus Three Lines - + &Paragraph &Paragraph - + Focus Paragraph Focus Paragraph - + &Help &Help - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. Some files are unsupported and could not be opened. - + &Off &Off - + One &Line One &Line - + &Three Lines &Three Lines - + &About &About - + About &Qt About &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index f231a0f2..a2274ee3 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sin título %1) - + %1 (Read-Only) - - - - + + + + Sorry Aviso - + Unable to save '%1'. No se puede guardar «%1». - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobrescribir «%1». - + Rename File Renombrar el archivo - + Unable to rename '%1'. No se puede renombrar «%1». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Se perderán todos los cambios no guardados. - + Reload Volver a cargar - + Untitled %1 Sin título %1 - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? @@ -382,17 +382,17 @@ Highlighter - + Add Añadir - + Check Spelling... Revisar la ortografía… - + (No suggestions found) (No se encontraron sugerencias) @@ -423,12 +423,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Reinicie la aplicación para que el cambio de idioma tenga efecto. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Predeterminado @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Gestionar sesiones - + S&essions &Sesiones - + New Nueva - + Duplicate - + Rename Renombrar - + Delete Eliminar - + Switch To Cambiar a - + New Session Nueva sesión - + Duplicate Session - + Rename Session Renombrar la sesión - + Question Confirmación - + Delete selected session? ¿Quiere eliminar la sesión seleccionada? - + Session name: Nombre de la sesión: - + Sorry Aviso - + The requested session name is already in use. El nombre solicitado ya está en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayús+N - + &Manage... &Gestionar... - + Ctrl+Shift+M Ctrl+Mayús+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesador de textos simple a pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + Opening %1 Abriendo %1 - + (Untitled %1) (Sin título %1) - + List all documents - + Switch to Next Document Cambiar al documento siguiente - + Switch to Previous Document Cambiar al documento anterior - + Switch to First Document Cambiar al primer documento - + Switch to Last Document Cambiar al último documento - + Switch to Document %1 Cambiar al documento %1 - + Loading settings Cargando configuración - + Emergency cache is not writable. No se puede escribir en la caché de emergencia. - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no se cerró correctamente. - + Restore from the emergency cache? ¿Desea restaurarlo desde la caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - + '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - + Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - + Please make sure that SDL_mixer is installed. Asegúrese de que SDL_mixer está instalado. - + &File &Archivo - + &New &Nuevo - + &Open... A&brir... - + Reloa&d Vol&ver a cargar - + &Save &Guardar - + Save &As... G&uardar como... - + &Rename... &Cambiar nombre... - + Save A&ll Guardar &todo - + Manage Sessions Gestionar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close C&errar - + &Quit Sali&r - + Ctrl+Q Ctrl + Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t C&ortar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted Pegar sin &formato - + Ctrl+Shift+V Ctrl + Mayús + V - + Select &All &Seleccionar todo - + Select &Scene Seleccionar &escena - + Ctrl+Shift+A Ctrl + Mayús + A - + Fo&rmat &Formato - + &Bold &Negrita - + &Italic &Cursiva - + &Underline &Subrayado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl + K - + Sup&erscript Su&períndice - + Ctrl+^ Ctrl + ^ - + &Subscript Su&bíndice - + Ctrl+_ Ctrl + _ - + Align &Left Alinear a la i&zquierda - + Ctrl+{ Caracteres: 0 - + Align &Center Centra&r - + Ctrl+| Ctrl + | - + Align &Right Alinear a la &derecha - + Ctrl+} Ctrl + } - + Align &Justify &Justificar - + Ctrl+J Ctrl + J - + &Decrease Indent &Disminuir sangría - + Ctrl+< Ctrl + < - + I&ncrease Indent &Aumentar sangría - + Ctrl+> Ctrl + > - + Le&ft to Right Block &Escribir de izquierda a derecha - + Ri&ght to Left Block Escribir de derec&ha a izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next Buscar &siguiente - + Find Pre&vious Buscar &anterior - + &Replace... &Reemplazar... - + Ctrl+R Ctrl + R - + Smart &Quotes &Comillas tipográficas - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + Set &Language... - + &Timers... &Alarmas... - + S&ymbols... Símb&olos… - + &Daily Progress - + &Settings &Configuración - + Show &Toolbar Mo&strar barra de herramientas - + Show &Menu Icons M&ostrar iconos del menú - + F&ocused Text En&focar el texto - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize &Minimizar - + Ctrl+M Ctrl + M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off Desactivar foco - + Focus One Line Enfocar una línea - + Focus Three Lines Enfocar tres líneas - + &Paragraph &Párrafo - + Focus Paragraph Enfocar un párrafo - + &Help &Ayuda - + Application &Language... &Idioma de la aplicación... - + Some files were unsupported and could not be opened. Algunos archivos no son compatibles y no pueden abrirse. - + &Off &Desactivar - + One &Line Una &línea - + &Three Lines &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.qm b/translations/focuswriter_es_MX.qm index 47683c7563a303563d36cdf126ac09df3701f16f..4466c828ec47812a9ab48e6cbbc3947837df2ade 100644 GIT binary patch delta 8733 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 ZQR&x}q<7p{IU-}5(v-P{kvFW*{y)Torq=)f diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 3e40b026..788efcac 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -6,7 +6,7 @@ Close (%1) - + Cerrar (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Descartar alerta @@ -128,83 +128,83 @@ Document - + (Untitled %1) (Sin título %1) - + %1 (Read-Only) - - - - + + + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - + Save File As Guardar archivo como - - + + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Todos los cambios se perderán. - + Reload - + Volver a cargar - + Untitled %1 Sin título %1 - + Question - Pregunta + Pregunta - + Saving as plain text will discard all formatting. Discard formatting? - + Guardar como texto plano descartará cualquier formato, ¿descartar formato? @@ -212,7 +212,7 @@ File Changed - + Archivo alterado @@ -222,32 +222,32 @@ Do you want to reload the file? - + ¿Desea volver a cargar el archivo? Reload - + Volver a cargar Ignore - + Ignorar File Deleted - + Archivo eliminado The file %1 was deleted by another program. - + El archivo %1 fue eliminado por otro programa. Do you want to save or close the file? - + ¿Desea guardar o cerrar el archivo? @@ -283,7 +283,7 @@ Regular expressions - + Expresiones regulares @@ -298,17 +298,17 @@ &Find - + &Buscar &Replace - + &Reemplazar Replace &All - + Reemplazar %todo @@ -382,17 +382,17 @@ Highlighter - + Add Agregar - + Check Spelling... Checar ortografía... - + (No suggestions found) (No se encontraron sugerencias) @@ -423,12 +423,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie esta aplicación para que los cambios de idioma se realicen. @@ -499,12 +499,12 @@ Shortcuts - + Atajos One or more shortcuts conflict. Do you wish to proceed? - + Uno o más atajos están en conflicto. ¿Desea continuar? @@ -575,12 +575,12 @@ Scenes - + Escenas Divider: - + Separador: @@ -745,17 +745,17 @@ Command - + Comando Shortcut - + Atajo Action - + Acción @@ -816,17 +816,17 @@ Ctrl+Shift+Down - + Ctrl+Mayus+Abajo Move Scenes Up - + Mover escenas arriba Ctrl+Shift+Up - + Ctrl+Mayus+Arriba @@ -836,43 +836,43 @@ Shift+F4 - + Mayus+F4 Show scene list (%1) - + Mostrar lista de escenas (%1) Hide scene list (%1) - + Ocultar lista de escenas (%1) Filter - + Filtro Move Scenes Down - + Mover escenas abajo Resize scene list - + Redimensionar lista de escenas Session - - - - - + + + + + Default Por omisión @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Administrar sesiones - + S&essions S&esiones - + New Nueva - + Duplicate - + Rename Renombrar - + Delete Borrar - + Switch To Cambiar a - + New Session Nueva sesión - + Duplicate Session - + Rename Session Renombrar sesión - + Question Pregunta - + Delete selected session? ¿Borrar sesión seleccionada? - + Session name: Nombre de sesión: - + Sorry Lo siento - + The requested session name is already in use. La sesión solicitada se encuentra en uso. - + &New... &Nueva... - + Ctrl+Shift+N Ctrl+Mayus+N - + &Manage... &Administrar... - + Ctrl+Shift+M Ctrl+Mayus+M @@ -980,18 +980,18 @@ Clear - + Limpiar Reset to Default - + Revertir a predeterminado Shortcut: - + Atajo: @@ -1017,27 +1017,27 @@ &Add - + &Agregar &Ignore - + &Ignorar I&gnore All - + I&gnorar todo &Change - + &Cambiar C&hange All - + Ca&mbiar todo @@ -1080,32 +1080,32 @@ Symbols - + Símbolos Recently used symbols - + Símbolos usados recientemente All symbols - + Todos los símbolos Details - + Detalles Name: - Nombre: + Nombre: Insert - + Insertar @@ -1113,12 +1113,12 @@ Blocks - + Bloques Scripts - + Scripts @@ -1321,27 +1321,27 @@ Line Spacing - + Linea de espaciado Single - Sencillas + Simple 1.5 Lines - + 1.5 líneas Double - Dobles + Doble Proportional - + Propocional @@ -1351,7 +1351,7 @@ Paragraph Spacing - + Espaciado de párrafo @@ -1602,634 +1602,634 @@ Window - + Loading themes Cargando temas - + Loading sounds Cargando sonidos - - + + Untitled Sin título - + Open File Abrir archivo - + About FocusWriter Acerca de FocusWriter - + FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Un simple procesador de palabras en pantalla completa - + Copyright &copy; 2008-%1 Graeme Gott - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Liberado bajo la licencia <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Usa íconos del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license - + Usado bajo la licencia <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Párrafos: %L1 - - + + Words: %L1 Palabras: %L1 - - + + Opening %1 Abriendo %1 - + (Untitled %1) (Sin título %1) - + List all documents - + Switch to Next Document - + Cambiar al siguiente documento - + Switch to Previous Document - + Cambiar al documento previo - + Switch to First Document - + Cambiar al primer documento - + Switch to Last Document - + Cambiar al último documento - + Switch to Document %1 - + Cambiar al documento %1 - + Loading settings Cargando preferencias - + Emergency cache is not writable. No se puede escribir el caché de emergencia - - + + Warning Advertencia - + FocusWriter was not shut down cleanly. FocusWriter no fue cerrado correctamente - + Restore from the emergency cache? ¿Restaurar el caché de emergencia? - + Some files could not be opened. Algunos archivos no se pueden abrir. - + Some files were opened Read-Only. Algunos archivos son de sólo lectura. - + '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - + Overwrite newer file? ¿Sobreescribir el archivo nuevo? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - + Please make sure that SDL_mixer is installed. - + Por favor asegúrese de que SDL_mixer está instalado. - + &File &Archivo - + &New &Nuevo - + &Open... &Abrir... - + Reloa&d - + Volver a car&gar - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Renombrar... - + Save A&ll Guardar To&do - + Manage Sessions Administrar sesiones - + New Session Nueva sesión - + &Print... &Imprimir... - + &Close &Cerrar - + &Quit &Salir - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo &Deshacer - + &Redo &Rehacer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste &Pegar - + Paste &Unformatted - + Pegar &sin formato - + Ctrl+Shift+V - + Ctrl+Mayus+V - + Select &All Seleccionar &todo - + Select &Scene - + Seleccionar e&scena - + Ctrl+Shift+A - + Ctrl+Mayus+A - + Fo&rmat Fo&rmato - + &Bold &Negrita - + &Italic &Itálica - + &Underline &Subrayado - + Stri&kethrough Ta&chado - + Ctrl+K Ctrl+K - + Sup&erscript Sup&eríndice - + Ctrl+^ Ctrl+^ - + &Subscript &Subíndice - + Ctrl+_ Ctrl+_ - + Align &Left Alinear a &Izquierda - + Ctrl+{ Ctrl+{ - + Align &Center &Centrar - + Ctrl+| Ctrl+| - + Align &Right Alinear a &Derecha - + Ctrl+} Ctrl+} - + Align &Justify &Justificar - + Ctrl+J Ctrl+J - + &Decrease Indent &Decrementar Indentación - + Ctrl+< Ctrl+< - + I&ncrease Indent A&umentar Indentación - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloque &Izquierda a Derecha - + Ri&ght to Left Block Bloque &Derecha a Izquierda - + &Tools &Herramientas - + &Find... &Buscar... - + Find &Next &Buscar siguiente - + Find Pre&vious &Buscar previo - + &Replace... &Reemplazar... - + Ctrl+R Ctrl+R - + Smart &Quotes Comillas &inteligentes - + Update &Document Actualizar &documento - + Update &Selection Actualizar &selección - + &Spelling... &Ortografía... - + F7 F7 - + Set &Language... - + &Timers... Contador de &tiempo... - + S&ymbols... - + S&ímbolos... - + &Daily Progress - + &Settings &Configuración - + Show &Toolbar Mostrar &barra de herramientas - + Show &Menu Icons Mostrar &menú de íconos - + F&ocused Text - + Texto enf&ocado - + &Fullscreen &Pantalla completa - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferencias... - + Focus Off - + Enfoque deshabilitado - + Focus One Line - + Enfocar una línea - + Focus Three Lines - + Enfocar tres líneas - + &Paragraph - + &Párrafo - + Focus Paragraph - + Enfocar párrafo - + &Help A&yuda - + Application &Language... &Idioma de aplicación... - + Some files were unsupported and could not be opened. - + Algunos archivos no está soportados y no podrán ser abiertos. - + &Off - + One &Line - + &Three Lines - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 01e8d717..b183e6d9 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Nimetön %1) - + %1 (Read-Only) %1 (vain luku) - - - - + + + + Sorry Virhe - + Unable to save '%1'. Tiedoston ”%1” tallentaminen epäonnistui. - + Save File As Tallenna tiedosto nimellä - - + + Unable to overwrite '%1'. Tiedoston ”%1” korvaaminen epäonnistui. - + Rename File Nimeä tiedosto uudelleen - + Unable to rename '%1'. Tiedoston ”%1” uudelleennimeäminen epäonnistui. - + Reload File? Ladataanko tiedosto uudelleen? - + Reload the file '%1' from disk? Ladataanko tiedosto ”%1” uudelleen levyltä? - + All unsaved changes will be lost. Kaikki tallentamattomat muutokset menetetään. - + Reload Lataa uudelleen - + Untitled %1 Nimetön %1 - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? Pelkkänä tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? @@ -382,17 +382,17 @@ Highlighter - + Add Lisää - + Check Spelling... Tarkista oikeinkirjoitus… - + (No suggestions found) (Ei ehdotuksia) @@ -423,12 +423,12 @@ <Järjestelmän kieli> - + Note Huomaa - + Please restart this application for the change in language to take effect. Ole hyvä ja käynnistä ohjelma uudelleen, jotta kielen muutos tulee voimaan. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Oletus @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Hallitse istuntoja - + S&essions &Istunnot - + New Uusi - + Duplicate Kopioi - + Rename Nimeä uudelleen - + Delete Poista - + Switch To Siirry - + New Session Uusi istunto - + Duplicate Session Kopioi istunto - + Rename Session Nimeä istunto uudelleen - + Question Kysymys - + Delete selected session? Poistetaanko valittu istunto? - + Session name: Istunnon nimi: - + Sorry Virhe - + The requested session name is already in use. Pyytämäsi istunnon nimi on jo käytössä. - + &New... &Uusi… - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hallitse… - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Ladataan teemoja - + Loading sounds Ladataan ääniä - - + + Untitled Nimetön - + Open File Avaa tiedosto - + About FocusWriter Tietoja FocusWriterista - + FocusWriter FocusWriter - + A simple fullscreen word processor Yksinkertainen koko näytön tekstinkäsittelyohjelma - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008–%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssillä - + Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - + Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin mukaisesti - - + + Characters: %L1 / %L2 Merkkejä: %L1 / %L2 - - + + Pages: %L1 Sivuja: %L1 - - + + Paragraphs: %L1 Kappaleita: %L1 - - + + Words: %L1 Sanoja: %L1 - - + + Opening %1 Avataan %1 - + (Untitled %1) (Nimetön %1) - + List all documents Luettele kaikki asiakirjat - + Switch to Next Document Siirry seuraavaan asiakirjaan - + Switch to Previous Document Siirry edelliseen asiakirjaan - + Switch to First Document Siirry ensimmäiseen asiakirjaan - + Switch to Last Document Siirry viimeiseen asiakirjaan - + Switch to Document %1 Siirry asiakirjaan %1 - + Loading settings Ladataan asetuksia - + Emergency cache is not writable. Varavälimuistiin ei voida kirjoittaa. - - + + Warning Varoitus - + FocusWriter was not shut down cleanly. FocusWriter ei sulkeutunut oikein. - + Restore from the emergency cache? Palautetaanko tilanne varavälimuistista? - + Some files could not be opened. Joitain tiedostoja ei saatu avattua. - + Some files were opened Read-Only. Osa tiedostoista avattiin vain luku -tilassa. - + '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - + Overwrite newer file? Korvataanko uudempi tiedosto? - + Save Changes? Tallennetaanko muutokset? - + Save changes to the file '%1' before closing? Tallennetaanko muutokset tiedostoon ”%1” ennen sulkemista? - + Your changes will be lost if you don't save them. Muutoksesi häviävät, jollet tallenna niitä. - + Unable to load typewriter sounds. Kirjoituskoneäänien lataaminen epäonnistui. - + Please make sure that SDL_mixer is installed. Tarkista, että SDL_mixer on asennettu. - + &File &Tiedosto - + &New &Uusi - + &Open... &Avaa… - + Reloa&d Lataa uu&delleen - + &Save &Tallenna - + Save &As... Tallenna &nimellä… - + &Rename... Ni&meä uudelleen… - + Save A&ll Tallenna &kaikki - + Manage Sessions Hallitse istuntoja - + New Session Uusi istunto - + &Print... Tul&osta… - + &Close &Sulje - + &Quit &Lopeta - + Ctrl+Q Ctrl+Q - + &Edit &Muokkaa - + &Undo &Peru - + &Redo &Tee uudelleen - + Cu&t L&eikkaa - + &Copy &Kopioi - + &Paste &Liitä - + Paste &Unformatted Liitä &muotoilematta - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Valitse k&aikki - + Select &Scene &Valitse kohtaus - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat M&uotoilu - + &Bold Li&havointi - + &Italic Ku&rsivointi - + &Underline All&eviivaus - + Stri&kethrough Yl&iviivaus - + Ctrl+K Ctrl+K - + Sup&erscript &Yläindeksi - + Ctrl+^ Ctrl+^ - + &Subscript &Alaindeksi - + Ctrl+_ Ctrl+_ - + Align &Left Tasaa &vasemmalle - + Ctrl+{ Ctrl+{ - + Align &Center Tasaa &keskelle - + Ctrl+| Ctrl+| - + Align &Right Tasaa &oikealle - + Ctrl+} Ctrl+} - + Align &Justify &Tasaa molemmat reunat - + Ctrl+J Ctrl+J - + &Decrease Indent &Ulonna - + Ctrl+< Ctrl+< - + I&ncrease Indent &Sisennä - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vase&mmalta oikealle - + Ri&ght to Left Block Oikea&lta vasemmalle - + &Tools T&yökalut - + &Find... &Etsi… - + Find &Next Etsi &seuraava - + Find Pre&vious Etsi edelli&nen - + &Replace... &Korvaa… - + Ctrl+R Ctrl+R - + Smart &Quotes Älykkäät &lainausmerkit - + Update &Document Päivitä &asiakirja - + Update &Selection Päivitä &valinta - + &Spelling... &Oikeinkirjoitus… - + F7 F7 - + Set &Language... Ase&ta kieli… - + &Timers... &Ajastimet… - + S&ymbols... S&ymbolit… - + &Daily Progress &Päivittäinen eteneminen - + &Settings &Asetukset - + Show &Toolbar Näytä &työkalupalkki - + Show &Menu Icons Näytä &valikkokuvakkeet - + F&ocused Text K&ohdistettu teksti - + &Fullscreen Koko &näyttö - + F11 F11 - + Esc Esc - + M&inimize P&ienennä - + Ctrl+M Ctrl+M - + &Themes... T&eemat… - + &Preferences... &Asetukset… - + Focus Off Kohdistus pois päältä - + Focus One Line Kohdista yksi rivi - + Focus Three Lines Kohdista kolme riviä - + &Paragraph &Kappale - + Focus Paragraph Kohdista kappale - + &Help &Ohje - + Application &Language... Ohjelman &kieli… - + Some files were unsupported and could not be opened. Joidenkin tiedostojen tiedostomuotoja ei tueta; niiden avaaminen epäonnistui. - + &Off &Ei kohdistusta - + One &Line &Yksi rivi - + &Three Lines Kolme &riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 132c8e00..4d618de2 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sans titre %1) - + %1 (Read-Only) - - - - + + + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - + Save File As Enregistrer sous - - + + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Toutes les modifications non sauvegardées seront perdues. - + Reload Rechargement - + Untitled %1 Sans titre %1 - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? @@ -382,17 +382,17 @@ Highlighter - + Add Ajouter - + Check Spelling... Vérification de l'orthographe... - + (No suggestions found) (Pas de suggestion trouvée) @@ -423,12 +423,12 @@ <Langue du système> - + Note Note - + Please restart this application for the change in language to take effect. Veuillez redémarrer le programme pour que le changement de langue prenne effet. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Par défaut @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Gérer les sessions - + S&essions S&essions - + New Nouveau - + Duplicate - + Rename Renommer - + Delete Supprimer - + Switch To Ouvrir la session - + New Session Nouvelle session - + Duplicate Session - + Rename Session Renommer la session - + Question Question - + Delete selected session? Effacer la session sélectionnée ? - + Session name: Nom de la session : - + Sorry Désolé - + The requested session name is already in use. Le nom demandé est déjà utilisé. - + &New... &Nouvelle... - + Ctrl+Shift+N Ctrl+Maj+N - + &Manage... &Gérer... - + Ctrl+Shift+M Ctrl+Maj+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Chargement des thèmes - + Loading sounds Chargement des sons - - + + Untitled Sans titre - + Open File Ouvrir un fichier - + About FocusWriter À propos de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un traitement de texte plein écran simple - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caractères : %L1 / %L2 - - + + Pages: %L1 Pages : %L1 - - + + Paragraphs: %L1 Paragraphes : %L1 - - + + Words: %L1 Mots : %L1 - - + + Opening %1 Ouverture de %1 - + (Untitled %1) (Sans titre %1) - + List all documents - + Switch to Next Document Basculer vers le document suivant - + Switch to Previous Document Basculer vers le document précédent - + Switch to First Document Basculer vers le premier document - + Switch to Last Document Basculer vers le dernier document - + Switch to Document %1 Basculer vers le document %1 - + Loading settings Chargement des préférences - + Emergency cache is not writable. Le cache d'urgence n'est pas accessible en écriture. - - + + Warning Avertissement - + FocusWriter was not shut down cleanly. FocusWriter ne s'est pas fermé correctement. - + Restore from the emergency cache? Récupérer les informations depuis le cache d'urgence ? - + Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - + Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - + '%1' is newer than the cached copy. '%1' est plus récent que la copie présente en cache. - + Overwrite newer file? Ouvrir le fichier plus récent ? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - + Please make sure that SDL_mixer is installed. Veuillez vous assurer que SDL_mixer est installé. - + &File &Fichier - + &New &Nouveau - + &Open... &Ouvrir... - + Reloa&d Rechar&ger - + &Save &Enregistrer - + Save &As... Enregistrer &sous... - + &Rename... &Renommer... - + Save A&ll Enregistrer &tout - + Manage Sessions Gérer les sessions - + New Session Nouvelle session - + &Print... Im&primer... - + &Close Fer&mer - + &Quit &Quitter - + Ctrl+Q Ctrl+Q - + &Edit &Édition - + &Undo Annu&ler - + &Redo Re&faire - + Cu&t Co&uper - + &Copy &Copier - + &Paste C&oller - + Paste &Unformatted Collage sans &formatage - + Ctrl+Shift+V Ctrl+Maj+V - + Select &All Tout &sélectionner - + Select &Scene Sélectionner la &scène - + Ctrl+Shift+A Ctrl+Maj+A - + Fo&rmat Fo&rmat - + &Bold &Gras - + &Italic &Italique - + &Underline &Souligner - + Stri&kethrough &Barrer - + Ctrl+K Ctrl+K - + Sup&erscript &Exposant - + Ctrl+^ Ctrl+^ - + &Subscript I&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Aligner à gauche - + Ctrl+{ Ctrl+{ - + Align &Center Aligner au &centre - + Ctrl+| Ctrl+| - + Align &Right Aligner à &droite - + Ctrl+} Ctrl+} - + Align &Justify &Justifier - + Ctrl+J Ctrl+J - + &Decrease Indent D&ésindenter - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&ter - + Ctrl+> Ctrl+> - + Le&ft to Right Block B&loc d'écriture de gauche à droite - + Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - + &Tools O&utils - + &Find... &Chercher... - + Find &Next Occurrence &suivante - + Find Pre&vious Occurrence &précédente - + &Replace... &Remplacer... - + Ctrl+R Ctrl+R - + Smart &Quotes &Apostrophes typographiques - + Update &Document Mettre à jour le &document - + Update &Selection Mettre à jour la &sélection - + &Spelling... Ortho&graphe... - + F7 F7 - + Set &Language... - + &Timers... C&hronomètres... - + S&ymbols... S&ymboles... - + &Daily Progress - + &Settings &Configuration - + Show &Toolbar Afficher la barre d'&outils - + Show &Menu Icons &Montrer les icônes dans le menu - + F&ocused Text Texte en é&vidence - + &Fullscreen Pl&ein écran - + F11 F11 - + Esc Esc - + M&inimize M&inimiser - + Ctrl+M Ctrl+M - + &Themes... &Thèmes... - + &Preferences... &Préférences... - + Focus Off Zoom désactivé - + Focus One Line Zoom sur une ligne - + Focus Three Lines Zoom sur trois lignes - + &Paragraph &Paragraphe - + Focus Paragraph Zoom sur paragraphe - + &Help &Aide - + Application &Language... &Langue de l'application... - + Some files were unsupported and could not be opened. Certains fichiers non pris en charge n'ont pas pu être ouverts. - + &Off &HF - + One &Line Une &ligne - + &Three Lines &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 974128e4..745de283 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (ללא כותרת %1) - + %1 (Read-Only) %1 (קריאה-בלבד) - - - - + + + + Sorry צר לי - + Unable to save '%1'. אין אפשרות לשמור '%1'. - + Save File As שמירת קובץ בשם - - + + Unable to overwrite '%1'. אין אפשרות להחליף את '%1'. - + Rename File שינוי שם קובץ - + Unable to rename '%1'. אין אפשרות לשנות שם '%1'. - + Reload File? לטעון מחדש קובץ? - + Reload the file '%1' from disk? לטעון מחדש קובץ '%1' מתוך כונן? - + All unsaved changes will be lost. כל השינויים שלא נשמרו יאבדו. - + Reload טעינה מחדש - + Untitled %1 ללא כותרת %1 - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? @@ -382,17 +382,17 @@ Highlighter - + Add הוסף - + Check Spelling... בדיקת איות... - + (No suggestions found) (לא נמצאו הצעות) @@ -423,12 +423,12 @@ <שפת מערכת> - + Note הערה - + Please restart this application for the change in language to take effect. נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default ברירת מחדל @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions ניהול סשנים - + S&essions ס&שנים - + New חדש - + Duplicate שכפול - + Rename שנה שם - + Delete מחק - + Switch To החלף אל - + New Session סשן חדש - + Duplicate Session שכפול סשן - + Rename Session שינוי שם סשן - + Question שאלה - + Delete selected session? למחוק סשן נבחר? - + Session name: שם סשן: - + Sorry צר לי - + The requested session name is already in use. שם הסשן המבוקש כבר מצוי בשימוש. - + &New... &חדש... - + Ctrl+Shift+N - + &Manage... &ניהול... - + Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes מטעין כעת מוטיבים - + Loading sounds מטעין כעת צלילים - - + + Untitled ללא כותרת - + Open File פתיחת קובץ - + About FocusWriter אדות ‫FocusWriter - + FocusWriter ‫FocusWriter - + A simple fullscreen word processor עורך תמלילים פשוט במסך מלא - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license בשימוש תחת הרשיון <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 תווים: %L1 / %L2 - - + + Pages: %L1 עמודים: %L1 - - + + Paragraphs: %L1 פסקאות: %L1 - - + + Words: %L1 מילים: %L1 - - + + Opening %1 ‫‭%1‬ נפתח כעת - + (Untitled %1) (ללא כותרת %1) - + List all documents מנה את כל המסמכים - + Switch to Next Document עבור אל מסמך בא - + Switch to Previous Document עבור אל מסמך קודם - + Switch to First Document עבור אל מסמך ראשון - + Switch to Last Document עבור אל מסמך אחרון - + Switch to Document %1 עבור אל מסמך %1 - + Loading settings טוען כעת הגדרות - + Emergency cache is not writable. מטמון חירום אינו בר כתיבה. - - + + Warning אזהרה - + FocusWriter was not shut down cleanly. ‫FocusWriter לא סוים באופן מוסדר. - + Restore from the emergency cache? לשחזר מן מטמון חירום? - + Some files could not be opened. קבצים מסוימים לא יכלו להיפתח. - + Some files were opened Read-Only. קבצים מסוימים נפתחו לקריאה-בלבד. - + '%1' is newer than the cached copy. '%1' הינו חדש יותר מן העותק המוטמן. - + Overwrite newer file? להחליף קובץ חדש? - + Save Changes? לשמור שינויים? - + Save changes to the file '%1' before closing? לשמור שינויים לתוך הקובץ '%1' טרם סגירה? - + Your changes will be lost if you don't save them. השינויים שלך יאבדו אם תא תשמור אותם. - + Unable to load typewriter sounds. אין אפשרות לטעון צלילי מכונת כתיבה. - + Please make sure that SDL_mixer is installed. נא לוודא שהרכיב SDL_mixer הינו מותקן. - + &File &קובץ - + &New &חדש - + &Open... &פתיחה... - + Reloa&d &טען מחדש - + &Save &שמור - + Save &As... שמירה &בשם... - + &Rename... שי&נוי שם... - + Save A&ll שמור ה&כל - + Manage Sessions נהל סשנים - + New Session סשן חדש - + &Print... ה&דפסה... - + &Close &סגור - + &Quit י&ציאה - + Ctrl+Q - + &Edit ע&ריכה - + &Undo בט&ל - + &Redo ב&צע שוב - + Cu&t &גזור - + &Copy הע&תק - + &Paste ה&דבק - + Paste &Unformatted הדבק בלי &עיצוב - + Ctrl+Shift+V - + Select &All בחר ה&כל - + Select &Scene בחר &מקטע - + Ctrl+Shift+A - + Fo&rmat עי&צוב - + &Bold &מודגש - + &Italic &נטוי - + &Underline &קו תחתון - + Stri&kethrough קו &חוצה - + Ctrl+K - + Sup&erscript כיתוב &עילי - + Ctrl+^ - + &Subscript כיתוב &תחתי - + Ctrl+_ - + Align &Left יישור &שמאל - + Ctrl+{ - + Align &Center יישור מ&רכז - + Ctrl+| - + Align &Right יישור &ימין - + Ctrl+} - + Align &Justify יישור מ&אוזן - + Ctrl+J - + &Decrease Indent &צמצם שוליים - + Ctrl+< - + I&ncrease Indent &גידול שוליים - + Ctrl+> - + Le&ft to Right Block בלוק שמ&אל אל ימין - + Ri&ght to Left Block בלוק י&מין אל שמאל - + &Tools &כלים - + &Find... &חיפוש... - + Find &Next מצא את ה&בא - + Find Pre&vious מצא את ה&קודם - + &Replace... &החלפה... - + Ctrl+R - + Smart &Quotes מר&כאות חכמות - + Update &Document עדכן &מסמך - + Update &Selection עדכן &בחירה - + &Spelling... &איות... - + F7 F7 - + Set &Language... קביעת &שפה... - + &Timers... &שעוני עצר... - + S&ymbols... &סמלים... - + &Daily Progress התקדמות &יומית - + &Settings &הגדרות - + Show &Toolbar הצג &סרגל כלים - + Show &Menu Icons הצג &צלמיות תפריט - + F&ocused Text תמליל ממור&כז - + &Fullscreen &מסך מלא - + F11 F11 - + Esc Esc - + M&inimize מ&זער - + Ctrl+M - + &Themes... מו&טיבים... - + &Preferences... &העדפות... - + Focus Off בטל מרכוז - + Focus One Line מרכז שורה אחת - + Focus Three Lines מרכז שלוש שורות - + &Paragraph &פסקה - + Focus Paragraph מרכז פסקה - + &Help &עזרה - + Application &Language... &שפת יישום... - + Some files were unsupported and could not be opened. קבצים מסוימים לא נתמכו ולא היתה אפשרות לפתוח אותם. - + &Off &כבוי - + One &Line שורה &אחת - + &Three Lines &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 118d7a85..7e6243dc 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Névtelen %1) - + %1 (Read-Only) - - - - + + + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - + Save File As Mentés másként - - + + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Minden el nem mentett változtatás el fog veszni - + Reload Újratöltés - + Untitled %1 Névtelen %1 - + Question Kérdés - + Saving as plain text will discard all formatting. Discard formatting? Egyszerű szövegként való mentés minden formázást töröl. Töröl minden formázást? @@ -376,17 +376,17 @@ Highlighter - + Add Hozzáadás - + Check Spelling... Helyesírás-ellenőrzés... - + (No suggestions found) (Nincsenek javaslatok) @@ -417,12 +417,12 @@ <A rendszer nyelve> - + Note Megjegyzés - + Please restart this application for the change in language to take effect. Indítsd újra az alkalmazást, hogy a változtatások érvénybe lépjenek. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default Alapértelmezett @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions Munkamenetek kezelése - + S&essions Munkam&enetek - + New Új - + Duplicate - + Rename Átnevezés - + Delete Törlés - + Switch To Váltás - + New Session Új munkamenet - + Duplicate Session - + Rename Session Munkamenet átnevezése - + Question Kérdés - + Delete selected session? Töröljük a kijelölt munkamenetet? - + Session name: Munkamenet neve: - + Sorry Elnézést - + The requested session name is already in use. A megadott munkamenet-név már használatban van. - + &New... &Új... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Kezelés... - + Ctrl+Shift+M Ctri+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes Témák betöltése - + Loading sounds Hangok betöltése - - + + Untitled Névtelen - + Open File Fájl megnyitása - + About FocusWriter A FocusWriter-ről - + FocusWriter FocusWriter - + A simple fullscreen word processor Egy egyszerű teljesképernyős szövegszerkesztő - + Copyright &copy; 2008-%1 Graeme Gott Szerzői jogvédelem alatt &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> licensz alatt kiadva - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> ikontémából használ ikonokat - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> licensz alatt használva - - + + Characters: %L1 / %L2 Karakter: %L1 / %L2 - - + + Pages: %L1 Oldal: %L1 - - + + Paragraphs: %L1 Bekezdés: %L1 - - + + Words: %L1 Szó: %L1 - - + + Opening %1 %1 megnyitása - + (Untitled %1) (Névtelen %1) - + List all documents - + Switch to Next Document Váltás a következő dokumentumra - + Switch to Previous Document Váltás az előző dokumentumra - + Switch to First Document Váltás az első dokumentumra - + Switch to Last Document Váltás az utolsó dokumentumra - + Switch to Document %1 Váltás a(z) %1 dokumentumra - + Loading settings Beállítások betöltése - + Emergency cache is not writable. A vész-gyorsítótár nem írható. - - + + Warning Figyelmeztetés - + FocusWriter was not shut down cleanly. A FocusWriter hibásan lett leállítva. - + Restore from the emergency cache? Visszaállítsuk az adatokat a vész-gyorsítótárból? - + Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - + Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - + '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - + Overwrite newer file? Felülírjuk az újabb fájlt? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - + Please make sure that SDL_mixer is installed. Kérem győződjön meg róla, hogy az SDL_mixer telepítve van. - + &File &Fájl - + &New &Új - + &Open... M&egnyitás... - + Reloa&d Újratöltés & - + &Save &Mentés - + Save &As... Mentés m&ásként... - + &Rename... Á&tnevezés... - + Save A&ll &Összes mentése - + Manage Sessions Munkamenetek kezelése - + New Session Új munkamenet - + &Print... &Nyomtatás... - + &Close Be&zárás - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Edit &Szerkesztés - + &Undo &Visszavonás - + &Redo &Újra - + Cu&t &Kivágás - + &Copy &Másolás - + &Paste &Beillesztés - + Paste &Unformatted Beillesztés &Formázatlanul - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Összes kijelölése - + Select &Scene &Jelenet kiválasztása - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmázás - + &Bold &Vastag - + &Italic &Dőlt - + &Underline &Aláhúzott - + Stri&kethrough &Áthúzott - + Ctrl+K Ctrl+K - + Sup&erscript &Felső index - + Ctrl+^ Ctrl+^ - + &Subscript A&lsó index - + Ctrl+_ Ctrl+_ - + Align &Left &Balra igazítás - + Ctrl+{ Ctrl+{ - + Align &Center &Középre igazítás - + Ctrl+| Ctrl+| - + Align &Right &Jobbra igazítás - + Ctrl+} Ctrl+} - + Align &Justify &Sorkizárt - + Ctrl+J Ctrl+J - + &Decrease Indent Behúzás &csökkentése - + Ctrl+< Ctrl+< - + I&ncrease Indent Behúzás &növelése - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bal&ról jobbra blokk - + Ri&ght to Left Block Jobbr&ól balra blokk - + &Tools &Eszközök - + &Find... &Keresés... - + Find &Next K&övetkező keresése - + Find Pre&vious &Előző keresése - + &Replace... &Csere... - + Ctrl+R Ctrl+R - + Smart &Quotes Intelligens &idézőjelek - + Update &Document &Dokumentum frissítése - + Update &Selection &Kijelölés frissítése - + &Spelling... &Helyesírás... - + F7 F7 - + Set &Language... - + &Timers... &Stopperek... - + S&ymbols... &Szimbólumok - + &Daily Progress - + &Settings &Beállítások - + Show &Toolbar &Eszköztár mutatása - + Show &Menu Icons &Menü ikonok mutatása - + F&ocused Text Fókuszált szöveg - + &Fullscreen Teljes &képernyő - + F11 F11 - + Esc Esc - + M&inimize M&inimalizálás - + Ctrl+M Ctrl+M - + &Themes... &Témák... - + &Preferences... &Beállítások... - + Focus Off Fókusz kikapcsolása - + Focus One Line Egy sor fókuszálása - + Focus Three Lines Három sor fókuszálása - + &Paragraph &Bekezdés - + Focus Paragraph Bekezdés fókuszálása - + &Help &Segítség - + Application &Language... Alkalmazás &nyelve... - + Some files were unsupported and could not be opened. Néhány fájltípus nem támogatott és nem került megnyitásra. - + &Off &Kikapcsolás - + One &Line Egy &Sor - + &Three Lines &Három sor - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 1f47d270..31b0bfd1 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Անանուն %1) - + %1 (Read-Only) %1% (միայն ընթերցման համար) - - - - + + + + Sorry Ներողություն։ - + Unable to save '%1'. «%1» նիշքի պահպանումը հնարավոր չէ։ - + Save File As Պահպանել նիշքը որպես - - + + Unable to overwrite '%1'. «%1» նիշքի վերագրանցումը հնարավոր չէ։ - + Rename File Վերանվանել նիշքը - + Unable to rename '%1'. «%1» նիշքի վերանվանումը հնարավոր չէ։ - + Reload File? Նիշքը նորի՞ց բացել։ - + Reload the file '%1' from disk? «%1» նիշքը նորի՞ց բացել սկավառակից։ - + All unsaved changes will be lost. Չպահպանված բոլոր փոփոխությունները կկորչեն։ - + Reload Նորից բացել - + Untitled %1 Անանուն %1 - + Question Հարց - + Saving as plain text will discard all formatting. Discard formatting? Հասարակ տեքստի ձևաչափով պահպանումը կվերացնի ձևավորումը։ Վերացնե՞լ ձևավորումը։ @@ -376,17 +376,17 @@ Highlighter - + Add Ավելացնել - + Check Spelling... Ստուգել ուղղագրությունը... - + (No suggestions found) (Տարբերակներ չկան) @@ -417,12 +417,12 @@ <Համակարգի լեզուն> - + Note Նշում - + Please restart this application for the change in language to take effect. Լեզվի փոփոխության կայացման համար ծրագիրը վերագործարկել @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default Լռելյայն @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions Գործաժամերի կառավարում - + S&essions &Գործաժամեր - + New Նոր - + Duplicate Կրկնօրինակել - + Rename Վերանվանել - + Delete Ջնջել - + Switch To Փոխադրվել - + New Session Նոր գործաժամ - + Duplicate Session Կրկնօրինակել գործաժամը - + Rename Session Վերանվանել գործաժամը - + Question Հարց - + Delete selected session? Ջնջե՞լ ընտրված գործաժամը։ - + Session name: Գործաժամի անվանում - + Sorry Ներողություն։ - + The requested session name is already in use. Գործաժամի այդ անունն արդեն գործածվում է։ - + &New... Ն&որ... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Կառավարում... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes Թեմաների բեռնում - + Loading sounds Ձայնային նիշքերի բեռնում - - + + Untitled Անանուն - + Open File Բացել նիշքը - + About FocusWriter FocusWriter-ի մասին - + FocusWriter FocusWriter - + A simple fullscreen word processor Լիէկրան պարզ տեքստային խմբագրիչ - + Copyright &copy; 2008-%1 Graeme Gott Պատճենաշնորհ &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Թողարկված է <a href=%1>GPL 3</a>-ի արտոնագրով։ - + Uses icons from the <a href=%1>Oxygen</a> icon theme Գործածված են <a href=%1>Oxygen</a> թեմայի պատկերակները։ - + Used under the <a href=%1>LGPL 3</a> license Պատկերակները գործածված են <a href=%1>LGPL 3</a>-ի արտոնագրով։ - - + + Characters: %L1 / %L2 Նիշեր՝ %L1 / %L2 - - + + Pages: %L1 Էջեր՝ %L1 - - + + Paragraphs: %L1 Պարբերություններ՝ %L1 - - + + Words: %L1 Բառեր՝ %L1 - - + + Opening %1 Բացվում է %1-ը - + (Untitled %1) (Անանուն %1) - + List all documents Բոլոր փաստաթղթերը - + Switch to Next Document Անցնել հաջորդ փաստաթղթին - + Switch to Previous Document Անցնել նախորդ փաստաթղթին - + Switch to First Document Անցնել առաջին փաստաթղթին - + Switch to Last Document Անցնել վերջին փաստաթղթին - + Switch to Document %1 Անցնել %1 փաստաթղթին - + Loading settings Կարգավորումները բեռնվում են - + Emergency cache is not writable. Պահեստային հիշողությունը գրանցման ենթակա չէ։ - - + + Warning Զգուշացում - + FocusWriter was not shut down cleanly. FocusWriter-ը ճիշտ չէր փակվել։ - + Restore from the emergency cache? Վերականգնե՞լ պահեստային հիշողությունից։ - + Some files could not be opened. Որոշ նիշքեր հնարավոր չեղավ բացել։ - + Some files were opened Read-Only. Որոշ նիշքեր բացվել են միայն ընթերցման համար։ - + '%1' is newer than the cached copy. «%1» նիշքը պահեստային օրինակից նոր է։ - + Overwrite newer file? Նոր տարբերակը պահեստայինո՞վ փոխարինել։ - + Save Changes? Պահպանե՞լ փոփոխությունները։ - + Save changes to the file '%1' before closing? Փակելուց առաջ «%1» նիշքի փոփոխությունները պահպանե՞լ։ - + Your changes will be lost if you don't save them. Փոփոխությունները կկորչեն, եթե դրանք չպահպանեք։ - + Unable to load typewriter sounds. Հնարավոր չեղավ գրամեքենայի ձայնը բեռնել։ - + Please make sure that SDL_mixer is installed. Ստուգեք, որ SDL_mixer փաթեթը տեղակայված լինի։ - + &File &Նիշք - + &New Ն&որ - + &Open... &Բացել... - + Reloa&d Նոր&ից բացել - + &Save Պահպանել - + Save &As... &Պահպանել որպես - + &Rename... &Վերանվանել... - + Save A&ll Պա&հպանել բոլորը - + Manage Sessions Կա&ռավարել գործաժամերը - + New Session Նոր գո&րծաժամ - + &Print... &Տպել... - + &Close &Փակել - + &Quit &Դուրս գալ - + Ctrl+Q Ctrl+Q - + &Edit &Խմբագրում - + &Undo &Չեղարկել - + &Redo &Կրկնել - + Cu&t Կ&տրել - + &Copy &Պատճենել - + &Paste &Փակցնել - + Paste &Unformatted Փակցնել &առանց ձևավորման - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Ընտրել ամբողջը - + Select &Scene Ընտրել &դրվագ - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ձևավորում - + &Bold &Թավատառ - + &Italic &Շեղատառ - + &Underline &Ընդգծված - + Stri&kethrough &Ջնջագծված - + Ctrl+K Ctrl+K - + Sup&erscript &Վերտողագիր - + Ctrl+^ Ctrl+^ - + &Subscript &Ենթատողագիր - + Ctrl+_ Ctrl+_ - + Align &Left Ուղղել ձա&խից - + Ctrl+{ Ctrl+{ - + Align &Center Ուղղել &կենտրոնով - + Ctrl+| Ctrl+| - + Align &Right Ուղղել աջ&ից - + Ctrl+} Ctrl+} - + Align &Justify Երկու կողմից &հավասարեցնել - + Ctrl+J Ctrl+J - + &Decrease Indent &Փոքրացնել տողագլխի խորքը - + Ctrl+< Ctrl+< - + I&ncrease Indent Մե&ծացնել տողագլխի խորքը - + Ctrl+> Ctrl+> - + Le&ft to Right Block Ձախից աջ &տանել - + Ri&ght to Left Block Աջից ձախ տա&նել - + &Tools &Գործիքներ - + &Find... Գ&տնել... - + Find &Next Գտնել &հաջորդը - + Find Pre&vious Գտնել &նախորդը - + &Replace... &Փոխարինել... - + Ctrl+R Ctrl+R - + Smart &Quotes &Չակերտները փոխել - + Update &Document &Թարմացնել փաստաթուղթը - + Update &Selection Թարմացնել &ընտրված հատվածը - + &Spelling... Ու&ղղագրություն... - + F7 F7 - + Set &Language... Ընտրել &լեզուն... - + &Timers... &Ժամաչափիչներ... - + S&ymbols... Ն&շաններ... - + &Daily Progress &Օրական առաջընթաց - + &Settings &Կարգավորումներ - + Show &Toolbar Ցույց տալ &գործիքների վահանակը - + Show &Menu Icons Ցույց տալ &ընտրացանկի պատկերակները - + F&ocused Text &Տեքստային հատվածի ընդգծում - + &Fullscreen Ամբողջ &էկրանով - + F11 F11 - + Esc Esc - + M&inimize &Ամփոփել - + Ctrl+M Ctrl+M - + &Themes... &Թեմաներ... - + &Preferences... &Նախընտրանքներ... - + Focus Off Անջատված է - + Focus One Line Մեկ տողի ընդգծում - + Focus Three Lines Երեք տողի ընդգծում - + &Paragraph &Պարբերություն - + Focus Paragraph Պարբերության ընդգծում - + &Help &Օգնություն - + Application &Language... Ծրագրի &լեզուն... - + Some files were unsupported and could not be opened. Որոշ նիշքեր ծրագրին չեն համապատասխանում և չեն կարող բացվել։ - + &Off Ան&ջատված է - + One &Line &Մեկ տող - + &Three Lines &Երեք տող - + &About &Ծրագրի մասին - + About &Qt Qt-ի &մասին diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index f1ce202a..88a8e039 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Tanpa Judul %1) - + %1 (Read-Only) - - - - + + + + Sorry Maaf - + Unable to save '%1'. Gagal menyimpan '%1'. - + Save File As Simpan File Sebagai - - + + Unable to overwrite '%1'. Gagal memperbarui '%1'. - + Rename File Ubah Nama File - + Unable to rename '%1'. Gagal mengubah nama '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Semua perubahan yang tidak disimpan akan hilang. - + Reload Muat ulang - + Untitled %1 Tanpa Judul %1 - + Question Pertanyaan - + Saving as plain text will discard all formatting. Discard formatting? Menyimpan sebagai teks polos akan membuang semua format. Buang format? @@ -376,17 +376,17 @@ Highlighter - + Add Tambahkan - + Check Spelling... Cek Ejaan... - + (No suggestions found) (Saran tidak ditemukan) @@ -417,12 +417,12 @@ <System Language> - + Note Catatan - + Please restart this application for the change in language to take effect. Silakan tutup dan buka kembali aplikasi ini untuk menerapkan perubahan bahasa. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default Setelan Standar @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions Kelola Sesi - + S&essions S&esi - + New Baru - + Duplicate - + Rename Ubah Nama - + Delete Hapus - + Switch To Pindah Ke - + New Session Sesi Baru - + Duplicate Session - + Rename Session Ubah Nama Sesi - + Question Pertanyaan - + Delete selected session? Hapus sesi terpilih? - + Session name: Judul sesi: - + Sorry Maaf - + The requested session name is already in use. Nama sesi sudah pernah dipakai. - + &New... &Baru... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Kelola... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes Memuat tema - + Loading sounds Memuat suara - - + + Untitled Tanpa Judul - + Open File Buka File - + About FocusWriter Tentang FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Pengolah kata selayar penuh sederhana - + Copyright &copy; 2008-%1 Graeme Gott Hak Cipta &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Dirilis dalam lisensi <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Menggunakan ikon dari tema ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Digunakan dalam lisensi <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Karakter: %L1 / %L2 - - + + Pages: %L1 Halaman: %L1 - - + + Paragraphs: %L1 Paragraf: %L1 - - + + Words: %L1 Kata: %L1 - - + + Opening %1 Membuka %1 - + (Untitled %1) (Tanpa Judul %1) - + List all documents - + Switch to Next Document Beralih Ke Dokumen Berikutnya - + Switch to Previous Document Beralih Ke Dokumen Sebelumnya - + Switch to First Document Beralih Ke Dokumen Pertama - + Switch to Last Document Beralih Ke Dokumen Terakhir - + Switch to Document %1 Beralih Ke Dokumen %1 - + Loading settings Memuat pengaturan - + Emergency cache is not writable. Penyimpanan darurat tak bisa diedit. - - + + Warning Peringatan - + FocusWriter was not shut down cleanly. FocusWriter tidak ditutup dengan baik. - + Restore from the emergency cache? Kembalikan dari penyimpanan darurat? - + Some files could not be opened. Beberapa file tak bisa dibuka. - + Some files were opened Read-Only. Beberapa file dibuka secara Read-Only (tak bisa diedit). - + '%1' is newer than the cached copy. '%1' lebih mutakhir daripada kopian yang tersimpan. - + Overwrite newer file? Timpa file yang lebih baru? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Gagal memuat suara mesin ketik. - + Please make sure that SDL_mixer is installed. Pastikan SDL_mixer dipasang di komputer Anda. - + &File &File - + &New &Baru - + &Open... &Buka... - + Reloa&d &Muat Ulang - + &Save &Simpan - + Save &As... Simpan &sebagai... - + &Rename... &Ubah Nama... - + Save A&ll Simpan S&emua - + Manage Sessions Kelola Sesi - + New Session Sesi Baru - + &Print... &Cetak... - + &Close &Tutup - + &Quit &Keluar - + Ctrl+Q Ctrl+Q - + &Edit &Edit - + &Undo &Undo - + &Redo &Redo - + Cu&t Po%tong - + &Copy &Salin - + &Paste &Tempelkan - + Paste &Unformatted Paste &Tanpa Format - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Pilih &Semua - + Select &Scene Pilih &Suasana - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmat - + &Bold &Tebal - + &Italic &Miring - + &Underline &Garisbawah - + Stri&kethrough Gar&iscoret - + Ctrl+K Ctrl+K - + Sup&erscript Sup&erscript - + Ctrl+^ Ctrl+^ - + &Subscript &Subscript - + Ctrl+_ Ctrl+_ - + Align &Left Rata &Kiri - + Ctrl+{ Ctrl+{ - + Align &Center Rata &Tengah - + Ctrl+| Ctrl+| - + Align &Right Rata &Kanan - + Ctrl+} Ctrl+} - + Align &Justify Rata &Sisi - + Ctrl+J Ctrl+J - + &Decrease Indent %Kurangi Indentasi - + Ctrl+< Ctrl+< - + I&ncrease Indent T&ambahkan Indentasi - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok Kiri ke Kanan - + Ri&ght to Left Block Bl&ok Kanan ke Kiri - + &Tools &Peralatan - + &Find... &Temukan... - + Find &Next Temukan &berikutnya - + Find Pre&vious Temukan Seb&elumnya - + &Replace... &Gantikan... - + Ctrl+R Ctrl+R - + Smart &Quotes Kutipan &Cerdas - + Update &Document Perbarui &Dokumen - + Update &Selection Perbarui &Seleksi - + &Spelling... %Ejaan... - + F7 F7 - + Set &Language... - + &Timers... &Pengatur Waktu... - + S&ymbols... S&imbol... - + &Daily Progress - + &Settings &Pengaturan - + Show &Toolbar Tampilkan &Bilah Alat - + Show &Menu Icons Tampilkan &Ikon Menu - + F&ocused Text Teks Yang Difokus - + &Fullscreen &Layar Penuh - + F11 F11 - + Esc Esc - + M&inimize M&inimize - + Ctrl+M Ctrl+M - + &Themes... &Tema... - + &Preferences... &Preferensi... - + Focus Off Fokus Mati - + Focus One Line Fokus Satu Baris - + Focus Three Lines Fokus Tiga Baris - + &Paragraph &Paragraf - + Focus Paragraph Fokus Paragraf - + &Help &Bantuan - + Application &Language... Bahasa &Aplikasi... - + Some files were unsupported and could not be opened. Beberapa file tak didukung dan tak bisa dibuka. - + &Off &Mati - + One &Line Satu &Baris - + &Three Lines &Tiga Baris - + &About &Tentang - + About &Qt Tentang &Qt diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 03369b93..53f9242f 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Senza nome %1) - + %1 (Read-Only) - - - - + + + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - + Save File As Salva con nome - - + + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Tutte le modifiche non salvate verranno perse. - + Reload Ricarica - + Untitled %1 Senza titolo %1 - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? @@ -382,17 +382,17 @@ Highlighter - + Add Aggiungi - + Check Spelling... Controllo ortografico... - + (No suggestions found) (Nessun suggerimento trovato) @@ -423,12 +423,12 @@ <Lingua di sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Per modificare la lingua riavviare l'applicazione. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Default @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Gestione sessioni - + S&essions S&essioni - + New Nuova - + Duplicate - + Rename Rinomina - + Delete Elimina - + Switch To Passa a - + New Session Nuova sessione - + Duplicate Session - + Rename Session Rinomina sessione - + Question Domanda - + Delete selected session? Eliminare sessione selezionata? - + Session name: Nome sessione: - + Sorry Spiacente - + The requested session name is already in use. Il nome di sessione richiesto è già in uso. - + &New... &New... - + Ctrl+Shift+N Ctrl + Maiusc + N - + &Manage... &Gestione... - + Ctrl+Shift+M Ctrl + Maiusc + M @@ -1602,634 +1602,634 @@ Window - + Loading themes Caricamento temi - + Loading sounds Caricamento suoni - - + + Untitled Senza nome - + Open File Apri file - + About FocusWriter A proposito di FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un semplice editor di testo a pieno schermo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Rilasciato sotto licenza <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utilizza icone del tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sotto licenza <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caratteri:%L1 / %L2 - - + + Pages: %L1 Pagine: %L1 - - + + Paragraphs: %L1 Paragrafi: %L1 - - + + Words: %L1 Parole: %L1 - - + + Opening %1 Apertura %1 - + (Untitled %1) (Senza nome %1) - + List all documents - + Switch to Next Document Passa al documento successivo - + Switch to Previous Document Passa al documento precedente - + Switch to First Document Passa al primo documento - + Switch to Last Document Passa all'ultimo documento - + Switch to Document %1 Passa al documento %1 - + Loading settings Caricamento impostazioni - + Emergency cache is not writable. La cache di emergenza non è scrivibile - - + + Warning Attenzione - + FocusWriter was not shut down cleanly. FocusWriter non è stato chiuso correttamente. - + Restore from the emergency cache? Ripristinare dalla cache di emergenza? - + Some files could not be opened. Non è stato possibile aprire alcuni file. - + Some files were opened Read-Only. Alcuni file sono stati aperti in sola lettura. - + '%1' is newer than the cached copy. '%1' è più recente della copia in cache. - + Overwrite newer file? Sovrascrivere il file più recente? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Impossibile caricare i suoni della macchina per scrivere. - + Please make sure that SDL_mixer is installed. Accertati che SDL_mixer sia installato. - + &File &File - + &New &Nuovo - + &Open... &Apri... - + Reloa&d Ricarica - + &Save &Salva - + Save &As... Salva &con nome... - + &Rename... &Rinomina... - + Save A&ll Salva - + Manage Sessions Gestione sessioni - + New Session Nuova sessione - + &Print... &Stampa... - + &Close &Chiudi - + &Quit &Esci - + Ctrl+Q Ctrl + Q - + &Edit &Modifica - + &Undo &Annulla - + &Redo &Ripeti - + Cu&t Ta&glia - + &Copy &Copia - + &Paste &Incolla - + Paste &Unformatted Incolla &non formattato - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleziona &tutto - + Select &Scene Seleziona &scena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat For&matta - + &Bold &Grassetto - + &Italic &Corsivo - + &Underline &Sottolineato - + Stri&kethrough Bar&rato - + Ctrl+K Ctrl + K - + Sup&erscript Ap&ice - + Ctrl+^ Ctrl + ^ - + &Subscript &Pedice - + Ctrl+_ Ctrl + _ - + Align &Left Allinea &Sinistra - + Ctrl+{ Ctrl + { - + Align &Center Allinea &Cenro - + Ctrl+| Ctrl + | - + Align &Right Allinea &Right - + Ctrl+} Ctrl + } - + Align &Justify Allineare &p;Giustificato - + Ctrl+J Ctrl + J - + &Decrease Indent & Riduci rientro - + Ctrl+< Ctrl + < - + I&ncrease Indent A&umentare rientro - + Ctrl+> Ctrl + > - + Le&ft to Right Block Blocco da sinistra a destra - + Ri&ght to Left Block Blocco da destra a sinistra - + &Tools &Strumenti - + &Find... &Trova... - + Find &Next Trova &successivo - + Find Pre&vious Trova Pre&cedente - + &Replace... &Sostituisci... - + Ctrl+R Ctrl+R - + Smart &Quotes &Citazioni - + Update &Document Aggiorna &document - + Update &Selection Aggiorna &selezione - + &Spelling... &Ortografia... - + F7 F7 - + Set &Language... - + &Timers... &Timer... - + S&ymbols... S&imboli - + &Daily Progress - + &Settings &Impostazioni - + Show &Toolbar Mostra &barra degli strumenti - + Show &Menu Icons Mostra &icone del menu - + F&ocused Text Testo a fuoco - + &Fullscreen &Schermo intero - + F11 F11 - + Esc Esc - + M&inimize M&inimizza - + Ctrl+M Ctrl+M - + &Themes... &Temi... - + &Preferences... &Preferenze... - + Focus Off Messa a fuoco disattivata - + Focus One Line Metti a fuoco una linea - + Focus Three Lines Metti a fuoco tre linee - + &Paragraph &Paragrafo - + Focus Paragraph Paragrafo a fuoco - + &Help &Aiuto - + Application &Language... Lingua &applicazione... - + Some files were unsupported and could not be opened. Qualche file non è supportato e non è stato aperto. - + &Off Non attivo - + One &Line Una &Linea - + &Three Lines &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index c75a08b8..b4e1700e 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (無題 %1) - + %1 (Read-Only) %1 (読み込み専用) - - - - + + + + Sorry エラー - + Unable to save '%1'. '%1' を保存できませんでした。 - + Save File As 名前を付けて保存 - - + + Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - + Rename File ファイル名の変更 - + Unable to rename '%1'. '%1' の名前を変更できませんでした。 - + Reload File? ファイルを再読み込みしますか? - + Reload the file '%1' from disk? ファイル %1 を再読み込みしますか? - + All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - + Reload 再読み込み - + Untitled %1 無題 %1 - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? @@ -376,17 +376,17 @@ Highlighter - + Add 追加 - + Check Spelling... スペルチェック... - + (No suggestions found) (修正候補は見つかりませんでした) @@ -417,12 +417,12 @@ <システムの言語> - + Note 注意 - + Please restart this application for the change in language to take effect. 言語の変更を反映させるためにアプリケーションを再起動してください。 @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default デフォルト @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions セッションの管理 - + S&essions セッション (&S) - + New 新規 - + Duplicate 複製 - + Rename 名前の変更 - + Delete 削除 - + Switch To 切り替え - + New Session 新しいセッション - + Duplicate Session セッションの複製 - + Rename Session セッション名の変更 - + Question 確認 - + Delete selected session? 選択中のセッションを削除しますか? - + Session name: セッション名: - + Sorry エラー - + The requested session name is already in use. 指定したセッション名は既にあります。 - + &New... 新規 (&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理 (&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes テーマを読み込んでいます - + Loading sounds 音声を読み込んでいます - - + + Untitled 無題 - + Open File 開く - + About FocusWriter FocusWriter について - + FocusWriter FocusWriter - + A simple fullscreen word processor A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 文字数: %L1 / %L2 - - + + Pages: %L1 ページ数: %L1 - - + + Paragraphs: %L1 段落数: %L1 - - + + Words: %L1 単語数: %L1 - - + + Opening %1 %1 を開いています - + (Untitled %1) (無題 %1) - + List all documents 全文書の表示 - + Switch to Next Document 次のドキュメントへ切り替える - + Switch to Previous Document 前のドキュメントへ切り替える - + Switch to First Document 最初のドキュメントへ切り替える - + Switch to Last Document 最後のドキュメントへ切り替える - + Switch to Document %1 %1 へ切り替える - + Loading settings 設定を読み込んでいます - + Emergency cache is not writable. 緊急用のキャッシュに書き込むことができませんでした。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter は正常に終了できませんでした。 - + Restore from the emergency cache? 緊急用のキャッシュから復活させますか? - + Some files could not be opened. いくつかのファイルが開けませんでした。 - + Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - + '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - + Overwrite newer file? 新しいファイルを上書きしますか? - + Save Changes? 変更を保存しますか? - + Save changes to the file '%1' before closing? 閉じる前にファイル %1 へ加えた変更を保存しますか? - + Your changes will be lost if you don't save them. 保存しない場合、加えた変更は失われます。 - + Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - + Please make sure that SDL_mixer is installed. SDL_mixer がインストールされていることを確認してください。 - + &File ファイル (&F) - + &New 新規作成 (&N) - + &Open... 開く (&O)... - + Reloa&d 再読み込み (&D) - + &Save 保存 (&S)... - + Save &As... 名前を付けて保存 (&A)... - + &Rename... 名前の変更 (&R)... - + Save A&ll すべて保存 (&L) - + Manage Sessions セッションの管理 - + New Session 新規セッション - + &Print... 印刷 (&P)... - + &Close 閉じる (&C) - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Edit 編集 (&E) - + &Undo 元に戻す (&U) - + &Redo やり直し (&R) - + Cu&t 切り取り (&T) - + &Copy コピー (&C) - + &Paste 貼り付け (&P) - + Paste &Unformatted 書式を無視して貼り付け - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All すべて選択 (&A) - + Select &Scene シーンの選択 (&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 書式 (&R) - + &Bold 太字 (&B) - + &Italic 斜体 (&I) - + &Underline 下線 (&U) - + Stri&kethrough 取り消し線 (&K) - + Ctrl+K Ctrl+K - + Sup&erscript 下付き文字 (&E) - + Ctrl+^ Ctrl+^ - + &Subscript 上付き文字 (&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左揃え (&L) - + Ctrl+{ Ctrl+{ - + Align &Center 中央揃え (&C) - + Ctrl+| Ctrl+| - + Align &Right 右揃え (&R) - + Ctrl+} Ctrl+} - + Align &Justify 均等割付 (&J) - + Ctrl+J Ctrl+J - + &Decrease Indent インデントを減らす (&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent インデントを増やす (&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 左から右へ (&F) - + Ri&ght to Left Block 右から左へ (&G) - + &Tools ツール (&T) - + &Find... 検索 (&F)... - + Find &Next 次を検索 (&N) - + Find Pre&vious 前を検索 (&V) - + &Replace... 置換 (&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes スマート引用符 (&Q) - + Update &Document 文書全体に適用 (&D) - + Update &Selection 選択範囲に適用 (&S) - + &Spelling... スペルチェック (&S)... - + F7 F7 - + Set &Language... 言語の変更 (&S) - + &Timers... タイマー (&T)... - + S&ymbols... シンボル (&Y)... - + &Daily Progress 日毎の進捗 (&D) - + &Settings 設定 (&S) - + Show &Toolbar ツール バーを表示 (&T) - + Show &Menu Icons メニュー項目のアイコンを表示 (&M) - + F&ocused Text フォーカスされた文字 (&O) - + &Fullscreen 全画面表示 (&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化 (&I) - + Ctrl+M Ctrl+M - + &Themes... テーマ (&T)... - + &Preferences... 設定 (&P)... - + Focus Off フォーカスの無効 - + Focus One Line 一行フォーカス - + Focus Three Lines 三行フォーカス - + &Paragraph 段落 (&P) - + Focus Paragraph 段落フォーカス - + &Help ヘルプ (&H) - + Application &Language... Application &Language... - + Some files were unsupported and could not be opened. いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - + &Off オフ (&O) - + One &Line 一行 (&L) - + &Three Lines 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_ko.qm b/translations/focuswriter_ko.qm index 2b8b5f7b946d4f65f72f4b068cb0a27e2ab7d4cf..c95f4856ee11d69b4b9de6c27b2b96746f299e06 100644 GIT binary patch delta 5199 zcma)8cU)9w7QOT4z3D{+6$QgXL68nA0wNa18d?yQU>#w=iNg%SU?J)l%O;j+k})pf zr^f8636UUSumLutiAJ%lYgUPgx~qvvRu^Lu+n(VmYId`~{f9H}z3;Yj@3|i>dqrEm z5ZPk)Wx2Qfxas{bygd)i{OG{tkwnU7BC#(KBPC-0Nc8egL}RuQby+N+>jI*2Bk=wV zQGy*fkLZJCVy~;>y~IB9BqPMjxVKb_&?B z5O{?GoPLH6rGQoxGCULL^y5PTx5DszjRM!~A{x1wY=LWWaAY9`7B>*Zhf!cXKIjh7 z@E&bMk{TN8|2EN(aWp<~8Bx%Bdij-Z2<%NS@0&r?dmbekiiid@Qp!8$iITHvLVW;H z>=;U0zM3d}vw#CDDgB`{QCG?^egMDg1=I|*2|v7Q1q|Fy8HbTEZ=fkm6%20E6fqnP z7bOy{Swb{1ToiKd8zR?_MJW+0LHT9Tw4nv) z?QD_t&_1F`^F$wgIGrdxT2%GGf&Ts?x@be?34aq^@52$j+9JBH`;@5rJkhtJFVLzx zqVFc)yh|g)6|X1i6UKB|kxAs8!?^E3fi{n&%mg(8$1{w+VJ-q(VGP-DoS48AT}?;k zN@m@mM?{_#%==rmV>VVZTVlo&c||iHZ>&eJ)0j^q-v{nzc31xi49sHotj4(!H<+62 z0cd3oQ)5TsiEhlfVIf3570mfMB#<1)e0jAG*=Wq0Oq-vcC?=P={XG(yu!DKn;0lWV zDemgO4u-YjAQc>PGsOc-Zz4d6c<`fR=shEjKHi3za1l@MNUU94>i0Efg%MYf4^&Yi zu9yt_;g#Zww-vy*hg*n96G^oJsJ@MUw zABo~3SjGN3MA64tx0y(6;$3#s)-FW8dNyOZ8&SWltf}xF%s@L^R52Yb>%rR2A)w#i z*f%bo#84k&-&A)X= zD}n7qv;_Doo-2VEnz3I2A42;ocISE#FdE1Jvw^5+ybBORH9ig)2%G~90u}>h}YBuyu>FlX_80M%cY->y%nA*Xfy^diF+08zhw30|Zi4(PB zaiyek;>D{`_-)R{b{I5p+$I=?&*fC(;(;xk=9^uZ-YJ~!S5y`n%)N5xRU-F=+_Lg@ z*l<5_Yc{2!ML%(C2U*e66#~jvb8AO8U^YezIOreT+OdOh{s>pxItK4=a~~|Lf~@1X z59*IXj=nbT!)55bZ+C8M5-Ro*2^eYSw%(2)8udr6{3s4aZ{;dt?U-^uu3|3&roYcs zoyf<~YPk!E9}@L<mieT@7Z(aerU)8m7LlM4H))sOwyb%(DQ) zr<8QhL?VN2g_0g$Ujvn=CGHb31I$H9FA9OfEt1epIFQgo60sZ=P=qAv*CY(#+maY@ zJI-^GabJ$Z@McNI-v`F-kW6WZ9Q}+Elj}jqZ=ED}-8r=EJ4ulSEg0k?DY*+~UpfH< z^}(#<6FV5SF`<%1lN%~+mz-D)nS}mR(zX`~1=UFId4Guo^t$9hCD7YfDh{|y)Gbxo z^_~lQ_(&R9#6ibDOGD2Zkg!?6C|0U_3+f47B28^Qiylj*rtc8A`(A0TdIgckXldRp z$UEYkbb;+L^q+b}TCy9|CL~CAO7OvTjI^u~atby}YqG`I0}km`?{5*st|3D-yk|kB*x#t8~_RUZv_=apz+zl{sK(@$f=XG1Q>QNq% zhLLSpjNwhcFDubv|I_5pWIIwIqr|slM`gIZM1y5VCu|@}wac1(F%!xpS(9G_dirNs zOFfI>DUqGKhKl-M5-|Ba*}ry3d#M z55Yj#LU|u221m+$r`s;#z%2PZC3*pY6giG!)0N1V7o9{!J>{!I24H93mluz($BN!1 z-!fT)X&x_Na*MoFdKFY!o;If$`|Ka4DU}l;8aR?Yxm&hNlL+jM73WcKxGq6m- zH!KH35=D#`T0Z%c-4lDr1el_MWMoOpDGNeMnP_S6=hQnhjYc?*82{%-Q%t7>Oud4KOJ9-5gfM)*tK53zHzD_SD{sIZK|Kck%;&!)uX>m#VmNM*@AN1imTL$zv`g> z^g4BKdp&x%QXTbLJ9^cs*1dWgmx>*T%f^2a5CQx*t92O?yg#F!zI^~34_BLivfwf~ zsDAx0DEFDDUX{`VEy`5y{p%@E-L5{o6N{9EN00?-Bzr@h#yqn%K$_CMorf* zPeT8??=@~VGyX%FtQk226pNZQ2`yKlip`oN6Dpux8e@DKhI6JS|9d1T@1n8cA680R zrdcD$b=+^JX3f?t?1@0l+p9L9GKps6^_7@`$C}c!u-AUA`7AOTey(dSYX@Qob2M%L z=!I4u&|Gho9-#ll&nz1Qa?7}%k`w|X7+$TjV+s{JT% zy%99kqIsktd#mEA&9j+3QAIrYQUaNYKd^%MV=f)f;p8jBIRf$I<{R$ITe5lI1T&v& zG#6S8{ssLpDcE*k7b@s>BLvwXh4+z^lYQ9&$*s&$Gbfw1G5zN92ZQO@9$JDLmY6}wCJgKlKYzZEd9bK zHMzb(md>a*S!_8SoGF?XH7x=^_2*Z0+G;vZ^G~^T#{4f11bYc3Q7Db*v=t|Xj`*Jj z?n1z7Tj{x}dyoCM&XCKK#$-7=%;#A2Ca1@)FVv8rpJgx!6*TN~cKC=-bGObcR1*wV zK0$BJDb(i}oW@;r#!RcxV%Fy`?5I9R6z7~6H}DpYne%U2TpmVzGuv27{X4yAe8YMF zRD(V%IN5Ak*fDi7oh7p{*I>3f%9XAnyGiR4sY*4NEcz^dw9#Z3=8V;OrX#(u-EMW; zT1^eDM?4Y8uOpxz@%CJ;kJl4R>udv`4Qt-dH{6fU&bQ?9S;m4n!yLO*D;ZAH>{(rE zpF6OxW4d-MBaeOR!`{!uC%pD>*?}tehUU86mCcpcD5Nv@;ItQ<&es?4nX^HNW4_A+ zu}x9^N!1nN&#IoEm=PvZM-c_iBGjWT`MG*)qTUP!^E)bW6O4`>Zfvb`uiWq(b62PN zgu=W$OTN`0u<^T&Y>htWW9zmN50rtGbV{Uz&eXNZ+1bWS1D~8{F!Sk&3BQw0cfq*w zT5C#m?3sPUpH8gXc4l9v8yBbj({}M`h6UD6N46IW0}Hk8|6#94G3kxw7Y$#u>w3hq z?lM&OmXnO%MDLPn%$(g}%nM9*28R!cz^cRC?Ep8@vrJSba&D@csHS)JLyOLhwQnjW zI;uRZvl@?hOQG4y8}#sMGFYvKd>$>;ckBFj9D;;Yruv+ZH`}TJH?75JU_BvbKWIcA+uJC(_ zO~Dk{gZu&=bG>Rsej2A8@#SF+yU(XTmt>bzL#`or7IK^Y)RjHhJ8Wi1qfceAv&1Lb z?~s0z4xJBciglLyg{(a6FKOpzmM1iBpkbYv`=uHRAY@?=(r`kJWs1PH~GRI&xq7X-|-!#^pt-X7=tdjz{t}xGJ%+y;Ac2SU5j~BkV zJo~mehXnZA=Y~v{oTtw;S{KIH z!y~)dFGY^%C23+$rayN=o?HfC983qE#7z4KzZ P&r=cI-Jy&AL!W;G#ZbQ@ delta 2891 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 diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 963c786a..85d2505d 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -37,35 +37,35 @@ %1% of %Ln minute(s) - - + + 전체 %Ln 분 중 %1% %1% of %Ln word(s) - - + + 전체 %Ln 개의 단어 중 %1% %Ln word(s) - - + + %Ln 개의 단어 %Ln minute(s) - - + + %Ln 분 0% - + 0% @@ -73,7 +73,7 @@ Daily Progress - + 일일 진행 @@ -88,13 +88,13 @@ N/A - + N/A %n day(s) - - + + %n 일 @@ -109,7 +109,7 @@ %1% of daily goal - + 일일 목표량 중 %1% @@ -117,87 +117,87 @@ Set Language - + 언어 설정 Document - + (Untitled %1) - (제목없음 %1) + (제목없음 %1) - + %1 (Read-Only) - + %1 (읽기 전용) - - - - + + + + Sorry 죄송합니다 - + Unable to save '%1'. '%1' 파일을 저장할 수 없습니다. - + Save File As 다른 이름으로 저장 - - + + Unable to overwrite '%1'. '%1' 파일을 덮어쓸 수 없습니다. - + Rename File 파일 이름 바꾸기 - + Unable to rename '%1'. '%1' 파일의 이름을 바꿀 수 없습니다. - + Reload File? - + 파일을 다시 불러올까요? - + Reload the file '%1' from disk? - + 디스크에서 '%1' 파일을 다시 불러올까요? - + All unsaved changes will be lost. 저장하지 않은 바뀐 정보는 사라집니다. - + Reload 새로 고침 - + Untitled %1 - 제목 없음 %1 + 제목없음 %1 - + Question 물어볼 것이 있습니다. - + Saving as plain text will discard all formatting. Discard formatting? 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? @@ -212,7 +212,7 @@ The file '%1' was changed by another program. - + '%1' 파일이 다른 프로그램에 의해서 변경되었습니다. @@ -250,7 +250,7 @@ Unable to open archive. - 압축파일을 열 수 없습니다. + 압축파일을 열 수 없습니다. @@ -345,48 +345,48 @@ OpenDocument Text - + 오픈 다큐먼트 텍스트 Office Open XML - + 오피스 오픈 XML Rich Text Format - + 서식 있는 텍스트 Plain Text - + 일반 텍스트 All Files - + 모든 파일 All Supported Files - + 모든 지원되는 파일 Highlighter - + Add 더하기 - + Check Spelling... 맞춤법 검사 하기 - + (No suggestions found) (다른 대안을 찾지 못했습니다) @@ -417,12 +417,12 @@ < 시스템 언어 > - + Note 노트 - + Please restart this application for the change in language to take effect. 바뀐 언어로 적용하기 위해 프로그램을 다시 시작 해주세요. @@ -432,7 +432,7 @@ Unable to open archive. - 압축파일을 열 수 없습니다. + 압축파일을 열 수 없습니다. @@ -629,7 +629,7 @@ Reset daily progress for today to zero? - + 오늘의 일일 목표량을 0으로 초기화할까요? @@ -639,7 +639,7 @@ Default format: - + 기본 포맷: @@ -649,12 +649,12 @@ History - + 이력 Remember history - + 이력 기억하기 @@ -679,12 +679,12 @@ Count each letter as a word - + 각각의 문자를 단어로 세기 Page Count Algorithm - + 페이지 수 세는 알고리즘 @@ -794,7 +794,7 @@ Not a supported RTF file. - + 지원하는 RTF 파일이 아닙니다. @@ -802,7 +802,7 @@ Unexpectedly reached end of file. - + 예상과 달리 파일끝에 닿았습니다. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default 기본 세션 @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions 세션 관리 - + S&essions &세션 - + New 새로 만들기 - + Duplicate - + 복사 - + Rename 이름 바꾸기 - + Delete 지우기 - + Switch To 서로 바꾸기 - + New Session 새 세션 - + Duplicate Session - + 세션 복사 - + Rename Session 세션 이름 바꾸기 - + Question 물어볼 것이 있습니다 - + Delete selected session? 선택한 세션을 지우시겠습니까? - + Session name: 세션 이름 - + Sorry 죄송합니다. - + The requested session name is already in use. 요청하신 세션 이름은 이미 사용 중입니다. - + &New... &새로 만들기... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &관리하기... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1061,7 +1061,7 @@ Continue checking at beginning of file? - + 파일의 처음부터 다시 체크하시겠습니까? @@ -1165,17 +1165,17 @@ Opacity: - + 투명도: Position: - + 위치: Width: - + 너비: @@ -1400,7 +1400,7 @@ Duplicate - + 복사 @@ -1596,634 +1596,634 @@ Window - + Loading themes 테마 불러오는 중 - + Loading sounds 소리 불러오는 중 - - + + Untitled 제목 없음 - + Open File 파일 열기 - + About FocusWriter 포커스 라이터 란 - + FocusWriter 포커스 라이터 - + A simple fullscreen word processor 간편한 풀스크린 워드 프로세서 - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> 라이선스에 따라 배포됩니다. - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a>의 아이콘 테마를 이용합니다. - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> 의 라이선스를 준수합니다. - - + + Characters: %L1 / %L2 문자: %L1 / %L2 - - + + Pages: %L1 페이지: %L1 - - + + Paragraphs: %L1 문단: % L1 - - + + Words: %L1 단어: %L1 - - + + Opening %1 %1 열기 - + (Untitled %1) (제목없음 %1) - + List all documents - + Switch to Next Document 다음 문서로 이동 - + Switch to Previous Document 이전 문서로 이동 - + Switch to First Document 처음 문서로 이동 - + Switch to Last Document 마지막 문서로 이동 - + Switch to Document %1 %1 문서로 이동 - + Loading settings 설정 불러오는 중 - + Emergency cache is not writable. 비상 캐시가 작성되지 않습니다. - - + + Warning 알림 - + FocusWriter was not shut down cleanly. 포커스 라이터가 제대로 꺼지지 않았습니다. - + Restore from the emergency cache? 비상 캐시를 이용해서 복구할까요? - + Some files could not be opened. 몇몇 파일들이 열리지 않습니다. - + Some files were opened Read-Only. 몇몇 파일들이 일기 전용으로 열렸습니다. - + '%1' is newer than the cached copy. '%1' 이 캐시에 복사된 것보다 새것입니다. - + Overwrite newer file? 새 파일로 덮어쓸까요? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. 타자기 소리가 나지 않습니다. - + Please make sure that SDL_mixer is installed. SDL_mixer 이 설치되어있나 확인해 주세요 - + &File &파일 - + &New &새로 만들기 - + &Open... &열기... - + Reloa&d &새로 고침 - + &Save &저장 - + Save &As... &다른 이름으로 저장... - + &Rename... &이름 바꾸기... - + Save A&ll &모두 저장하기 - + Manage Sessions 세션 관리하기 - + New Session 새 세션 - + &Print... &프린트... - + &Close &닫기 - + &Quit &끝내기 - + Ctrl+Q Ctrl+Q - + &Edit &편집 - + &Undo &뒤로 무르기 - + &Redo &다시 적용 - + Cu&t &자르기 - + &Copy &복사 - + &Paste &붙여넣기 - + Paste &Unformatted &서식을 유지한 채 붙여넣기 - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &모두 선택 - + Select &Scene &화면 선택 - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &형식 - + &Bold &볼드 - + &Italic &이탤릭 - + &Underline &밑줄 긋기 - + Stri&kethrough &가운데 줄긋기 - + Ctrl+K Ctrl+K - + Sup&erscript &위 첨자 - + Ctrl+^ Ctrl+^ - + &Subscript &아래 첨자 - + Ctrl+_ Ctrl+_ - + Align &Left &왼쪽 끝 맞춤 - + Ctrl+{ Ctrl+{ - + Align &Center &가운데 줄맞춤 - + Ctrl+| Ctrl+| - + Align &Right &오른쪽 끝 맞춤 - + Ctrl+} Ctrl+} - + Align &Justify &양끝 맞춤 - + Ctrl+J Ctrl+J - + &Decrease Indent &들여 쓰기 - + Ctrl+< Ctrl+< - + I&ncrease Indent &내어 쓰기 - + Ctrl+> Ctrl+> - + Le&ft to Right Block &왼쪽에서 오른쪽으로 쓰기 시작 - + Ri&ght to Left Block &오른쪽에서 왼쪽으로 쓰기 시작 - + &Tools &도구 - + &Find... &찾기 - + Find &Next &다음에서 찾기 - + Find Pre&vious &이전에서 찾기 - + &Replace... &바꾸기 - + Ctrl+R Ctrl+R - + Smart &Quotes &지능형 따옴표 - + Update &Document &문서에 적용 - + Update &Selection &선택한 내용 적용 - + &Spelling... &맞춤법 - + F7 F7 - + Set &Language... - + &Timers... &타이머 - + S&ymbols... &부호들... - + &Daily Progress - + &Settings &설정 - + Show &Toolbar &툴바 보이기 - + Show &Menu Icons &메뉴 아이콘 보이기 - + F&ocused Text &포커스 텍스트 - + &Fullscreen &전체 화면 - + F11 F11 - + Esc Esc - + M&inimize &최소화 - + Ctrl+M Ctrl+M - + &Themes... &테마 - + &Preferences... &설정 - + Focus Off 포커스 끔 - + Focus One Line 한 줄 포커스 - + Focus Three Lines 세 줄 포커스 - + &Paragraph &문단 - + Focus Paragraph 문단 포커스 - + &Help &도움말 - + Application &Language... &프로그램 언어 설정 - + Some files were unsupported and could not be opened. 지원되지 않는 파일이 있어서 열 수 없습니다. - + &Off &사용 안함 - + One &Line &한 줄 - + &Three Lines &세 줄 - + &About &FocusWriter 소개 - + About &Qt &Qt 소개 diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 1872b92f..2223b00b 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (naamloos %1) - + %1 (Read-Only) %1 (Alleen lezen) - - - - + + + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - + Save File As Opslaan als - - + + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Reload File? Herladen bestamd - + Reload the file '%1' from disk? Bestand '%1' herladen van disk - + All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - + Reload Herladen - + Untitled %1 Geen naam %1 - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? @@ -382,17 +382,17 @@ Highlighter - + Add Toevoegen - + Check Spelling... Spelling controleren ... - + (No suggestions found) (geen suggestie gevonden) @@ -423,12 +423,12 @@ <Systeemtaal> - + Note Let op - + Please restart this application for the change in language to take effect. Graag de applicatie herstarten om de taalverandering door te voeren. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Standaard @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Sessies beheren - + S&essions S&essies - + New Nieuw - + Duplicate Kopiëren - + Rename Hernoemen - + Delete Verwijderen - + Switch To Wissel naar - + New Session Nieuwe sessie - + Duplicate Session Kopieer sessie - + Rename Session Sessie hernoemen - + Question Vraag - + Delete selected session? Sessie verwijderen ? - + Session name: Sessie naam: - + Sorry Sorry - + The requested session name is already in use. De sessie naam is al in gebruik. - + &New... &Nieuw... - + Ctrl+Shift+N Crtl+Shift+N - + &Manage... &Beheren... - + Ctrl+Shift+M Ctrl+Shift+B @@ -1602,634 +1602,634 @@ Window - + Loading themes Thema wordt geladen - + Loading sounds Geluiden worden geladen - - + + Untitled Unbenannt - + Open File Bestand openen - + About FocusWriter Over FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Een simpele schermvullende tekstverwerker - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - + Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - + Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - - + + Characters: %L1 / %L2 Tekens: %L1 / %L2 - - + + Pages: %L1 Pagina's: %L1 - - + + Paragraphs: %L1 Paragrafen: %L1 - - + + Words: %L1 Woorden: %L1 - - + + Opening %1 Bestand %1 wordt geopend - + (Untitled %1) (naamloos %1) - + List all documents Laat alle documenten zien - + Switch to Next Document Schakel naar volgend document - + Switch to Previous Document Schakel naar vorig document - + Switch to First Document Schakel naar eerste document - + Switch to Last Document Schakel naar laatste document - + Switch to Document %1 Schakel naar document %1 - + Loading settings Instellingen inladen - + Emergency cache is not writable. De noodopslag is niet beschrijfbaar. - - + + Warning Waarschuwing - + FocusWriter was not shut down cleanly. FocusWriter is niet netjes afgesloten. - + Restore from the emergency cache? Veiligheidskopie herstellen? - + Some files could not be opened. Enkele bestanden konden niet geopend worden. - + Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - + '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - + Overwrite newer file? Nieuwer bestand overschrijven ? - + Save Changes? Veranderingen opslaan ? - + Save changes to the file '%1' before closing? Veranderingen in bestand '%1' opslaan voor het afsluiten - + Your changes will be lost if you don't save them. De veranderingen zullen verloren gaan als ze niet opgeslagen worden - + Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - + Please make sure that SDL_mixer is installed. Graag er voor zorgen dat SDL_mixer geïnstalleerd is - + &File &Bestand - + &New &Nieuw - + &Open... &Openen... - + Reloa&d Her&laden - + &Save Op&slaan - + Save &As... Opslaan &als... - + &Rename... &Hernoemen... - + Save A&ll &Alles opslaan - + Manage Sessions Beheer sessies - + New Session Nieuwe sessie - + &Print... A&fdrukken... - + &Close Afsl&uiten - + &Quit S&toppen - + Ctrl+Q Ctrl+Q - + &Edit &Bewerken - + &Undo &Ongedaan maken - + &Redo &Herhalen - + Cu&t K&nippen - + &Copy K&opieren - + &Paste Pl&akken - + Paste &Unformatted Plak &zonder formattering - + Ctrl+Shift+V Ctrl-Shift-V - + Select &All Alles &Selecteren - + Select &Scene Selecteer &scene - + Ctrl+Shift+A Ctrl-Shift-A - + Fo&rmat O&pmaken - + &Bold &Dik - + &Italic &Schuin - + &Underline &Onderlijnen - + Stri&kethrough &Doorhalen - + Ctrl+K Strg+G - + Sup&erscript Sup&erscript - + Ctrl+^ Strg+^ - + &Subscript Su&bscript - + Ctrl+_ Ctrl+_ - + Align &Left &Links uitlijnen - + Ctrl+{ Ctrl+{ - + Align &Center &Centreren - + Ctrl+| Ctrl+| - + Align &Right &Rechts uitlijnen - + Ctrl+} Ctrl+} - + Align &Justify Align &Justify - + Ctrl+J Ctrl+J - + &Decrease Indent Minder inspringen - + Ctrl+< Ctrl+< - + I&ncrease Indent &Meer inspringen - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok &links uitlijnen - + Ri&ght to Left Block Blok &rechts uitlijnen - + &Tools &Gereedschappen - + &Find... &Vinden... - + Find &Next Volge&nde - + Find Pre&vious &Achteruit zoeken - + &Replace... Ve&rvang... - + Ctrl+R Ctrl+R - + Smart &Quotes &Slimme aanhalingstekens - + Update &Document &Dokument bijwerken - + Update &Selection Selecti&e bijwerken - + &Spelling... Spellings&controle... - + F7 F7 - + Set &Language... Taal instellen - + &Timers... &Stopwatch... - + S&ymbols... S&ymbolen - + &Daily Progress &Dagelijkse voortgang - + &Settings &Instellingen - + Show &Toolbar &Gereedschapsbalk tonen - + Show &Menu Icons &Menu Iconen tonen - + F&ocused Text Tekst in focus - + &Fullscreen &Schermvullend - + F11 F11 - + Esc Esc - + M&inimize Mi&nimaliseren - + Ctrl+M Ctrl+M - + &Themes... &Thema's... - + &Preferences... &Instellingen... - + Focus Off Focus uit - + Focus One Line Focus op een lijn - + Focus Three Lines Focus op 3 lijnen - + &Paragraph &Paragraaf - + Focus Paragraph Focus op paragraaf - + &Help &Help - + Application &Language... &Taal... - + Some files were unsupported and could not be opened. Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - + &Off &Uit - + One &Line Een &lijn - + &Three Lines &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index a030a335..7e307c68 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez tytułu %1) - + %1 (Read-Only) - - - - + + + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - + Save File As Zapisz plik jako - - + + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - + Reload Wczytaj ponownie - + Untitled %1 Bez nazwy %1 - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? @@ -388,17 +388,17 @@ Highlighter - + Add Dodaj - + Check Spelling... Sprawdź pisownię... - + (No suggestions found) (Nie znaleziono propozycji) @@ -429,12 +429,12 @@ <Język systemowy> - + Note Informacja - + Please restart this application for the change in language to take effect. Zmiany zostaną uwzględnione przy następnym uruchomieniu programu. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Domyślna @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Zarządzanie sesjami - + S&essions S&esje - + New Nowa - + Duplicate - + Rename Zmień nazwę - + Delete Usuń - + Switch To Przełącz na - + New Session Nowa sesja - + Duplicate Session - + Rename Session Zmień nazwę sesji - + Question Pytanie - + Delete selected session? Usunąć wybraną sesję? - + Session name: Nazwa sesji: - + Sorry Przepraszam - + The requested session name is already in use. Podana nazwa sesji już jest używana. - + &New... &Nowa... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Za&rządzaj... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Wczytywanie motywów - + Loading sounds Wczytywanie dźwięków - - + + Untitled Bez tytułu - + Open File Otwórz plik - + About FocusWriter O programie FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaki: %L1 / %L2 - - + + Pages: %L1 Strony: %L1 - - + + Paragraphs: %L1 Akapity: %L1 - - + + Words: %L1 Słowa: %L1 - - + + Opening %1 Otwieranie %1 - + (Untitled %1) (Bez tytułu %1) - + List all documents - + Switch to Next Document Przełącz do następnego dokumentu - + Switch to Previous Document Przełącz do poprzedniego dokumentu - + Switch to First Document Przełącz do pierwszego dokumentu - + Switch to Last Document Przełącz do ostatniego dokumentu - + Switch to Document %1 Przełącz do dokumentu %1 - + Loading settings Wczytywanie ustawień - + Emergency cache is not writable. Bufor awaryjny nie jest zapisywalny. - - + + Warning Ostrzeżenie - + FocusWriter was not shut down cleanly. Program FocusWriter nie został zamknięty prawidłowo. - + Restore from the emergency cache? Przywrócić z bufora awaryjnego? - + Some files could not be opened. Niektórych plików nie można otworzyć. - + Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - + '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - + Overwrite newer file? Nadpisać nowszy plik? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - + Please make sure that SDL_mixer is installed. Upewnij się, że SDL_mixer jest zainstalowany. - + &File &Plik - + &New &Nowy - + &Open... &Otwórz... - + Reloa&d &Przeładuj - + &Save &Zapisz - + Save &As... Zapisz &jako... - + &Rename... Z&mień nazwę... - + Save A&ll Zapisz &wszystko - + Manage Sessions Zarządzanie sesjami - + New Session Nowa sesja - + &Print... &Drukuj... - + &Close Z&amknij - + &Quit Za&kończ - + Ctrl+Q Ctrl+Q - + &Edit &Edycja - + &Undo &Cofnij - + &Redo Przyw&róć - + Cu&t Wy&tnij - + &Copy &Kopiuj - + &Paste &Wklej - + Paste &Unformatted Wklej &bez formatowania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Zaznacz wszystko - + Select &Scene Zaznacz &scenę - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Format - + &Bold Pogru&bienie - + &Italic &Kursywa - + &Underline P&odkreślenie - + Stri&kethrough Przek&reślenie - + Ctrl+K Ctrl+K - + Sup&erscript Indeks &górny - + Ctrl+^ Ctrl+^ - + &Subscript Indeks &dolny - + Ctrl+_ Ctrl+_ - + Align &Left Wyrównaj do &lewej - + Ctrl+{ Ctrl+{ - + Align &Center Wyrównaj do środk&a - + Ctrl+| Ctrl+| - + Align &Right Wyrównaj do &prawej - + Ctrl+} Ctrl+} - + Align &Justify Wyrównaj do ob&u stron - + Ctrl+J Ctrl+J - + &Decrease Indent Z&mniejsz wcięcie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&większ wcięcie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Blok od l&ewej do prawej - + Ri&ght to Left Block Blok od prawe&j do lewej - + &Tools &Narzędzia - + &Find... &Znajdź... - + Find &Next Znajdź &następny - + Find Pre&vious Znajdź &poprzedni - + &Replace... Za&stąp... - + Ctrl+R Ctrl+R - + Smart &Quotes Eleganckie &cudzysłowy - + Update &Document Aktualizuj &dokument - + Update &Selection Aktualizuj z&aznaczenie - + &Spelling... Sp&rawdzanie pisowni... - + F7 F7 - + Set &Language... - + &Timers... &Odliczanie... - + S&ymbols... S&ymbole... - + &Daily Progress - + &Settings &Ustawienia - + Show &Toolbar Wyświetlaj pasek &narzędzi - + Show &Menu Icons Wyświetlaj &ikony w menu - + F&ocused Text P&odświetlanie tekstu - + &Fullscreen Tryb pełno&ekranowy - + F11 F11 - + Esc Esc - + M&inimize Minimalizu&j - + Ctrl+M Ctrl+M - + &Themes... &Motywy... - + &Preferences... &Preferencje... - + Focus Off Wyłącz podświetlanie - + Focus One Line Podświetl jeden wiersz - + Focus Three Lines Podświetl trzy wiersze - + &Paragraph &Akapit - + Focus Paragraph Podświetl akapit - + &Help P&omoc - + Application &Language... &Zmiana języka aplikacji... - + Some files were unsupported and could not be opened. Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - + &Off &Wyłączone - + One &Line &Jeden wiersz - + &Three Lines &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index a900118a..ba2731b8 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sem título %1) - + %1 (Read-Only) - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - + Save File As Guardar como - - + + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. As alterações que não forem gravadas serão perdidas. - + Reload Carregar de novo - + Untitled %1 Sem título %1 - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? @@ -382,17 +382,17 @@ Highlighter - + Add Adicionar - + Check Spelling... Verificação ortográfica... - + (No suggestions found) (Nenhuma sugestão encontrada) @@ -423,12 +423,12 @@ <Idioma do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie o programa para a mudança da língua do programa ser aplicada. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Sessão predefinida @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Organizar as sessões - + S&essions S&essões - + New Novo - + Duplicate - + Rename Alterar o nome - + Delete Apagar - + Switch To Abrir a sessão - + New Session Nova sessão - + Duplicate Session - + Rename Session Alterar o nome da dessão - + Question Pergunta - + Delete selected session? Apagar a sessão selecionada ? - + Session name: Nome da sessão : - + Sorry Desculpe - + The requested session name is already in use. O nome entrado já está a ser utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerir... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Carregamento dos temas - + Loading sounds Carregamentos dos efeitos sonoros - - + + Untitled Sem título - + Open File Abrir um ficheiro - + About FocusWriter Acerca de FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de texto simples em ecrã completo - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palávras: %L1 - - + + Opening %1 A abrir %1 - + (Untitled %1) (Sem título %1) - + List all documents - + Switch to Next Document Passar ao documento seguinte - + Switch to Previous Document Passar ao documento anterior - + Switch to First Document Passar ao primeiro documento - + Switch to Last Document Passar ao último documento - + Switch to Document %1 Passar ao dicumento %1 - + Loading settings A carregar definições - + Emergency cache is not writable. Não foi possível escrever o cache de emergência. - - + + Warning Atenção - + FocusWriter was not shut down cleanly. FocusWriter não fechou correctamente. - + Restore from the emergency cache? Recuperar dados do cache de emergência? - + Some files could not be opened. Alguns ficheiros não puderam ser abertos. - + Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de apenas leitura. - + '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente no cache. - + Overwrite newer file? Sobrepor o ficheiro mais recente? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Não foi possível carregar os sons de máquina de escrever. - + Please make sure that SDL_mixer is installed. Por favor verifique que SDL_mixer está instalado no computador. - + &File &Ficheiro - + &New &Novo - + &Open... &Abrir... - + Reloa&d Carre&gar de novo - + &Save &Guardar - + Save &As... Guardar &como... - + &Rename... &Mudar o nome... - + Save A&ll Gravar tud&o - + Manage Sessions Organizar as sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit &Sair - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo A&nular - + &Redo &Restaurar - + Cu&t C&ortar - + &Copy &Copiar - + &Paste Co&lar - + Paste &Unformatted Colar co&mo texto - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Seleccionar &tudo - + Select &Scene Seleccionar &Cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmato - + &Bold Ne&grito - + &Italic &Itálico - + &Underline &Sublinhar - + Stri&kethrough &Rasurar - + Ctrl+K Ctrl+K - + Sup&erscript &Expoente - + Ctrl+^ Ctrl+^ - + &Subscript Í&ndice - + Ctrl+_ Ctrl+_ - + Align &Left &Alinhar à esquerda - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &direita - + Ctrl+} Ctrl+} - + Align &Justify &Justificado - + Ctrl+J Ctrl+J - + &Decrease Indent Rem&over a indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent Inden&tar - + Ctrl+> Ctrl+> - + Le&ft to Right Block &Bloco de escrita da esquerda para a direita - + Ri&ght to Left Block B&loco de escrita da direita para a esquerda - + &Tools Ferra&mentas - + &Find... &Procurar... - + Find &Next Procurar se&guinte - + Find Pre&vious Procurar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+S - + Smart &Quotes &Aspas curvas e angulares - + Update &Document Actualizar &documento - + Update &Selection Actualizar a &selecção - + &Spelling... &Ortografia... - + F7 F7 - + Set &Language... - + &Timers... C&ronómetros... - + S&ymbols... Sí&mbolos... - + &Daily Progress - + &Settings &Configuração - + Show &Toolbar Mostrar a &barra de ferramentas - + Show &Menu Icons &Mostrar os ícones no menu - + F&ocused Text Texto f&ocado - + &Fullscreen &Ecrã completo - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Definições... - + Focus Off Desligar o foco - + Focus One Line Focar uma linha - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar um parágrafo - + &Help A&juda - + Application &Language... &Língua do programa... - + Some files were unsupported and could not be opened. Alguns ficheiros não são suportados e não puderam ser abertos - + &Off &Desligado - + One &Line Uma l&inha - + &Three Lines &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index dc9e4041..2e5f262e 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sem título %1) - + %1 (Read-Only) - - - - + + + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - + Save File As Salvar como - - + + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - + Reload Recarregar - + Untitled %1 Sem título %1 - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? @@ -382,17 +382,17 @@ Highlighter - + Add Adicionar - + Check Spelling... Verificação ortográfica... - + (No suggestions found) (Sem sugestões) @@ -423,12 +423,12 @@ <Linguagem do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor, reinicie o programa para que as alterações no idioma tenham efeito. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Padrão @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Gerenciar Sessões - + S&essions S&essões - + New Nova - + Duplicate - + Rename Renomear - + Delete Excluir - + Switch To Mudar para - + New Session Nova sessão - + Duplicate Session - + Rename Session Renomear sessão - + Question Pergunta - + Delete selected session? Excluir sessão selecionada? - + Session name: Nome da sessão: - + Sorry Desculpe - + The requested session name is already in use. Este nome de sessão já está sendo utilizado. - + &New... &Nova... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Gerenciar... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1602,634 +1602,634 @@ Window - + Loading themes Carregando temas - + Loading sounds Carregando sons - - + + Untitled Sem título - + Open File Abrir arquivo - + About FocusWriter Sobre o FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - + + Pages: %L1 Páginas: %L1 - - + + Paragraphs: %L1 Parágrafos: %L1 - - + + Words: %L1 Palavras: %L1 - - + + Opening %1 Abrindo %1 - + (Untitled %1) (Sem título %1) - + List all documents - + Switch to Next Document Ir para próximo documento - + Switch to Previous Document Ir para documento anterior - + Switch to First Document Ir para o primeiro documento - + Switch to Last Document Ir para o último documento - + Switch to Document %1 Ir para o documento %1 - + Loading settings Carregando configurações - + Emergency cache is not writable. Não é possível escrever no cache de emergência. - - + + Warning Aviso - + FocusWriter was not shut down cleanly. O FocusWriter não foi fechado corretamente. - + Restore from the emergency cache? Restaurar a partir do cache de emergência? - + Some files could not be opened. Alguns arquivos não puderam ser abertos. - + Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - + '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - + Overwrite newer file? Sobrescrever o novo arquivo? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - + Please make sure that SDL_mixer is installed. Certifique-se de que o SDL_mixer está instalado. - + &File &Arquivo - + &New &Novo - + &Open... &Abrir... - + Reloa&d Recarrega&r - + &Save &Salvar - + Save &As... Salvar &como... - + &Rename... &Renomear... - + Save A&ll Salvar Tod&os - + Manage Sessions Gerenciar Sessões - + New Session Nova sessão - + &Print... Im&primir... - + &Close Fec&har - + &Quit Sai&r - + Ctrl+Q Ctrl+Q - + &Edit &Editar - + &Undo Desfa&zer - + &Redo &Refazer - + Cu&t Cor&tar - + &Copy &Copiar - + &Paste C&olar - + Paste &Unformatted Colar sem &Formatação - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selecionar t&udo - + Select &Scene Selecionar cena - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Formatar - + &Bold &Negrito - + &Italic &Itálico - + &Underline &Sublinhado - + Stri&kethrough &Tachado - + Ctrl+K Ctrl+K - + Sup&erscript S&obrescrito - + Ctrl+^ Ctrl+^ - + &Subscript S&ubscrito - + Ctrl+_ Ctrl+_ - + Align &Left Alinhar à &direita - + Ctrl+{ Ctrl+{ - + Align &Center Alinhar ao &centro - + Ctrl+| Ctrl+| - + Align &Right Alinhar à &esquerda - + Ctrl+} Ctrl+} - + Align &Justify Alinhar e &justificar - + Ctrl+J Ctrl+J - + &Decrease Indent Di&minuir indentação - + Ctrl+< Ctrl+< - + I&ncrease Indent &Aumentar indentação - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloco de texto da es&querda para a direita - + Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - + &Tools Ferra&mentas - + &Find... &Localizar... - + Find &Next Localizar &próximo - + Find Pre&vious Localizar &anterior - + &Replace... &Substituir... - + Ctrl+R Ctrl+R - + Smart &Quotes Aspas &Inteligentes - + Update &Document Atualizar &documento - + Update &Selection Atualizar &seleção - + &Spelling... &Verificação ortográfica... - + F7 F7 - + Set &Language... - + &Timers... &Cronômetros... - + S&ymbols... S&ímbolos... - + &Daily Progress - + &Settings &Configurações - + Show &Toolbar Exibir &barra de ferramentas - + Show &Menu Icons Exibir &ícones do menu - + F&ocused Text Texto focado - + &Fullscreen Tela &cheia - + F11 F11 - + Esc Esc - + M&inimize M&inimizar - + Ctrl+M Ctrl+M - + &Themes... &Temas... - + &Preferences... &Preferências... - + Focus Off Desligar foco - + Focus One Line Focar uma linha& - + Focus Three Lines Focar três linhas - + &Paragraph &Parágrafo - + Focus Paragraph Focar parágrafo - + &Help A&juda - + Application &Language... &Idioma do programa... - + Some files were unsupported and could not be opened. Alguns arquivos não são suportados e não podem ser abertos. - + &Off &Desligar - + One &Line Uma &Linha - + &Three Lines &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index b627be88..d2b3677f 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Fără titlu %1) - + %1 (Read-Only) %1 (Doar-citire) - - - - + + + + Sorry Scuze - + Unable to save '%1'. Nu se poate salva '%1'. - + Save File As Salvează fişierul ca - - + + Unable to overwrite '%1'. Nu se poate suprascrie'%1'. - + Rename File Redenumire fişier - + Unable to rename '%1'. Nu se poate redenumi '%1'. - + Reload File? Reîncarcă fişier? - + Reload the file '%1' from disk? Reîncarcă fişierul '%1' de pe disc? - + All unsaved changes will be lost. Toate modificările nesalvate vor fi pierdute. - + Reload Reîncarcă - + Untitled %1 FărăTitlu %1 - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? @@ -388,17 +388,17 @@ Highlighter - + Add Adaugă - + Check Spelling... Verificare ortografică... - + (No suggestions found) (Nu s-au găsit sugestii) @@ -429,12 +429,12 @@ <Limbaj Sistem> - + Note Notă - + Please restart this application for the change in language to take effect. Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Iniţial @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Gestionare sesiuni - + S&essions S&esiuni - + New Nou - + Duplicate Duplicat - + Rename Redenumire - + Delete Ştergere - + Switch To Comută la - + New Session Sesiune nouă - + Duplicate Session Duplică sesiune - + Rename Session Redenumire sesiune - + Question Întrebare - + Delete selected session? Şterge sesiunea selectată? - + Session name: Nume sesiune: - + Sorry Scuze - + The requested session name is already in use. Numele solicitat al sesiunii este deja în uz. - + &New... &Nou... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Gestionare... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Încărcare teme - + Loading sounds Încărcare sunete - - + + Untitled FărăTitlu - + Open File Deschide fişier - + About FocusWriter Despre FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Un procesor simplu de text pe tot ecranul - + Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Foloseşte iconuri din tema <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Folosit sub licenţă <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Caractere: %L1 / %L2 - - + + Pages: %L1 Pagini: %L1 - - + + Paragraphs: %L1 Paragrafe: %L1 - - + + Words: %L1 Cuvinte: %L1 - - + + Opening %1 Deschidere %1 - + (Untitled %1) (Fără titlu %1) - + List all documents Listă toate documentele - + Switch to Next Document Comutare la următorul document - + Switch to Previous Document Comutare la documentul precedent - + Switch to First Document Comutare la primul document - + Switch to Last Document Comutare la ultimul document - + Switch to Document %1 Comutare la document %1 - + Loading settings Încărcare setări - + Emergency cache is not writable. Cache-ul de urgenţă nu poate fi scris. - - + + Warning Avertisment - + FocusWriter was not shut down cleanly. FocusWriter nu a fost oprit corect. - + Restore from the emergency cache? Restaurare din memoria cache de urgenţă? - + Some files could not be opened. Unele fişiere nu au putut fi deschise. - + Some files were opened Read-Only. Unele fişiere au fost deschise în mod doar-citire. - + '%1' is newer than the cached copy. '%1' este mai nou decît copia din cache. - + Overwrite newer file? Suprascrie noul fişier? - + Save Changes? Salvaţi modificările? - + Save changes to the file '%1' before closing? Salvează modificările în fişierul '%1' înainte de închidere? - + Your changes will be lost if you don't save them. Modificările dvs. vor fi pierdure dacă nu le salvaţi. - + Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - + Please make sure that SDL_mixer is installed. Vă rugăm să vă asiguraţi că SDL_mixer este instalat. - + &File &Fişier - + &New &Nou - + &Open... &Deschide... - + Reloa&d Reîncarcă - + &Save &Salvare - + Save &As... Salvare c&a... - + &Rename... &Redenumire... - + Save A&ll Sa&lvează tot - + Manage Sessions Gestionare sesiuni - + New Session Sesiune nouă - + &Print... Imprimare... - + &Close Închide - + &Quit &Ieşire - + Ctrl+Q Ctrl+Q - + &Edit &Editare - + &Undo Anulează - + &Redo Reface - + Cu&t &Taie - + &Copy &Copiază - + &Paste &Lipeşte - + Paste &Unformatted Lipire neformatat - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Selectează &tot - + Select &Scene Selectare &scenă - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmatare - + &Bold Îngroşat - + &Italic &Italic - + &Underline S&ubliniat - + Stri&kethrough &Tăiat - + Ctrl+K Ctrl+K - + Sup&erscript Exponent - + Ctrl+^ Ctrl+^ - + &Subscript Indice - + Ctrl+_ Ctrl+_ - + Align &Left Aliniere la &stînga - + Ctrl+{ Ctrl+{ - + Align &Center Aliniere la &centru - + Ctrl+| Ctrl+| - + Align &Right Aliniere la &dreapta - + Ctrl+} Ctrl+} - + Align &Justify Aliniere stînga-dreapta - + Ctrl+J Ctrl+J - + &Decrease Indent Mărire alineat - + Ctrl+< Ctrl+< - + I&ncrease Indent Micşorare alineat - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bloc stînga-dreapta - + Ri&ght to Left Block Bloc dreapta-stînga - + &Tools &Unelte - + &Find... &Caută... - + Find &Next Caută &următorul - + Find Pre&vious Caută &precedent - + &Replace... Înlocuire... - + Ctrl+R Ctrl+R - + Smart &Quotes Ghilimele inteligente - + Update &Document Actualizare &document - + Update &Selection Actualizare &selecţie - + &Spelling... &Ortografie... - + F7 F7 - + Set &Language... Setare &limbă... - + &Timers... Cronometre... - + S&ymbols... S&imboluri... - + &Daily Progress Progres zilnic - + &Settings &Setări - + Show &Toolbar Arată bară de unelte - + Show &Menu Icons Arată iconuri &meniu - + F&ocused Text Text f&ocalizat - + &Fullscreen &Tot ecranul - + F11 F11 - + Esc Esc - + M&inimize M&inimizare - + Ctrl+M Ctrl+M - + &Themes... &Teme... - + &Preferences... &Preferinţe... - + Focus Off Focaliuzare oprită - + Focus One Line Focalizare o linie - + Focus Three Lines Focalizare trei linii - + &Paragraph &Paragraf - + Focus Paragraph Focalizare paragraf - + &Help &Ajutor - + Application &Language... Limbă aplicaţie... - + Some files were unsupported and could not be opened. Unele fişiere au fost nesuportate şi nu au putut fi deschide. - + &Off &Oprit - + One &Line O &linie - + &Three Lines &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 4cc5a4ea..b5198d03 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Безымянный %1) - + %1 (Read-Only) - - - - + + + + Sorry Извините - + Unable to save '%1'. Невозможно сохранить '%1'. - + Save File As Сохранить как - - + + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - + Reload Открыть заново - + Untitled %1 Безымянная %1 - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? @@ -388,17 +388,17 @@ Highlighter - + Add Добавить - + Check Spelling... Проверить правописание... - + (No suggestions found) (Нет вариантов) @@ -429,12 +429,12 @@ <Язык системы> - + Note Информация - + Please restart this application for the change in language to take effect. Перезапустите программу, чтобы применить изменение языка. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default По умолчанию @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Управление сеансами - + S&essions С&еансы - + New Новый - + Duplicate - + Rename Переименовать - + Delete Удалить - + Switch To Переключиться - + New Session Новый сеанс - + Duplicate Session - + Rename Session Переименовать сеанс - + Question Вопрос - + Delete selected session? Удалить выбранный сеанс? - + Session name: Название сеанса: - + Sorry Извините - + The requested session name is already in use. Заданное имя сеанса уже используется. - + &New... &Новый... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Управление... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Загружаются темы - + Loading sounds Загружаются звуки - - + + Untitled Безымянный - + Open File Открыть файл - + About FocusWriter О программе FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Простой полноэкранный текстовый редактор - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Символов: %L1 / %L2 - - + + Pages: %L1 Страниц: %L1 - - + + Paragraphs: %L1 Абзацев: %L1 - - + + Words: %L1 Слов: %L1 - - + + Opening %1 Открывается %1 - + (Untitled %1) (Безымянный %1) - + List all documents - + Switch to Next Document Перейти к следующему документу - + Switch to Previous Document Перейти к предыдущему документу - + Switch to First Document Перейти к первому документу - + Switch to Last Document Перейти к последнему документу - + Switch to Document %1 Перейти к документу %1 - + Loading settings Загружаются настройки - + Emergency cache is not writable. Резервная память недоступна для записи. - - + + Warning Предупреждение - + FocusWriter was not shut down cleanly. Работа приложения была завершена неправильно. - + Restore from the emergency cache? Восстановить открытые файлы из резервной памяти? - + Some files could not be opened. Не удалось открыть некоторые файлы. - + Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - + '%1' is newer than the cached copy. '%1' новее резервной копии. - + Overwrite newer file? Заменить новую версию резервной копией? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - + Please make sure that SDL_mixer is installed. Проверьте, установлен ли пакет SDL_mixer. - + &File &Файл - + &New &Новый - + &Open... &Открыть... - + Reloa&d Откр&ыть заново - + &Save &Сохранить - + Save &As... Сохранить &как... - + &Rename... П&ереименовать... - + Save A&ll Сохранить вс&е - + Manage Sessions Управление сеансами - + New Session Новый сеанс - + &Print... &Печать... - + &Close З&акрыть - + &Quit В&ыход - + Ctrl+Q Ctrl+Q - + &Edit &Правка - + &Undo &Отменить - + &Redo Пов&торить - + Cu&t Вы&резать - + &Copy &Копировать - + &Paste Вс&тавить - + Paste &Unformatted Вставить без &форматирования - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Выбрать всё - + Select &Scene Выбрать &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Ф&ормат - + &Bold Полу&жирный - + &Italic &Курсив - + &Underline Под&чёркнутый - + Stri&kethrough &Зачёркнутый - + Ctrl+K Ctrl+K - + Sup&erscript &Надстрочный индекс - + Ctrl+^ Ctrl+^ - + &Subscript П&одстрочный индекс - + Ctrl+_ Ctrl+_ - + Align &Left По &левому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По &правому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширине - + Ctrl+J Ctrl+J - + &Decrease Indent У&меньшить отступ - + Ctrl+< Ctrl+< - + I&ncrease Indent У&величить отступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент слева напр&аво - + Ri&ght to Left Block Фрагмент справа нал&ево - + &Tools &Инструменты - + &Find... &Найти... - + Find &Next Найти следующ&ий - + Find Pre&vious Найти пред&ыдущий - + &Replace... За&менить... - + Ctrl+R Ctrl+R - + Smart &Quotes Заменить кавы&чки - + Update &Document Во всём &документе - + Update &Selection В &выделенном - + &Spelling... Ор&фография... - + F7 F7 - + Set &Language... - + &Timers... &Таймеры... - + S&ymbols... Сим&волы... - + &Daily Progress - + &Settings &Параметры - + Show &Toolbar Показать панель &инструментов - + Show &Menu Icons Показать значки мен&ю - + F&ocused Text Подсве&тка текста - + &Fullscreen Полно&экранный режим - + F11 F11 - + Esc Esc - + M&inimize Сверн&уть - + Ctrl+M Ctrl+M - + &Themes... &Темы... - + &Preferences... Пара&метры... - + Focus Off Отключена - + Focus One Line На одной строке - + Focus Three Lines На трёх строках - + &Paragraph &На абзаце - + Focus Paragraph На абзаце - + &Help Спр&авка - + Application &Language... &Язык приложения... - + Some files were unsupported and could not be opened. Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - + &Off &Выключено - + One &Line Одна ст&рока - + &Three Lines &Три строки - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 9e8e1bf4..2f516a4b 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez názvu %1) - + %1 (Read-Only) - - - - + + + + Sorry Prepáčte - + Unable to save '%1'. Nedá sa uložiť '%1'. - + Save File As Uložiť súbor ako - - + + Unable to overwrite '%1'. Nedá sa prepísať '%1'. - + Rename File Premenovať súbor - + Unable to rename '%1'. Nedá sa premenovať '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - + Reload Opätovne načítať - + Untitled %1 Bez názvu %1 - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? @@ -388,17 +388,17 @@ Highlighter - + Add Pridať - + Check Spelling... Kontrola pravopisu... - + (No suggestions found) (Žiadne návrhy neboli nájdené) @@ -429,12 +429,12 @@ <Predvolený jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. K zmene jazyka dôjde po reštarte programu. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Prednastavený @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Spravovať relácie - + S&essions R&elácie - + New Nová - + Duplicate - + Rename Premenovať - + Delete Zmazať - + Switch To Prepnúť na - + New Session Nová relácia - + Duplicate Session - + Rename Session Premenovať reláciu - + Question Otázka - + Delete selected session? Vymazať vybranú reláciu? - + Session name: Názov relácie: - + Sorry Prepáčte - + The requested session name is already in use. Požadovaný názov relácie sa už používa. - + &New... &Nová... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Spravovať... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Načítavanie tém - + Loading sounds Načítavanie zvukov - - + + Untitled Bez názvu - + Open File Otvoriť súbor - + About FocusWriter O programe FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - + Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Znaky: %L1 / %L2 - - + + Pages: %L1 Strany: %L1 - - + + Paragraphs: %L1 Odstavce: %L1 - - + + Words: %L1 Slová: %L1 - - + + Opening %1 Otváranie %1 - + (Untitled %1) (Bez názvu %1) - + List all documents - + Switch to Next Document Prepnúť na ďalší dokument - + Switch to Previous Document Prepnúť na predchádzajúci dokument - + Switch to First Document Prepnúť na prvý dokument - + Switch to Last Document Prepnúť na posledný dokument - + Switch to Document %1 Prepnúť na dokument %1 - + Loading settings Načítavanie nastavení - + Emergency cache is not writable. Nie je možné zapisovať do pohotovostnej vyrovnávacej pamäti. - - + + Warning Upozornenie - + FocusWriter was not shut down cleanly. Program FocusWriter nebol riadne ukončený. - + Restore from the emergency cache? Obnoviť z vyrovnávacej pamäti. - + Some files could not be opened. Niektoré súbory nemohli byť otvorené. - + Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - + '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - + Overwrite newer file? Prepísať novší súbor? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - + Please make sure that SDL_mixer is installed. Uistite sa, že komponent SDL_mixer je nainštalovaný. - + &File &Súbor - + &New &Nový - + &Open... &Otvoriť... - + Reloa&d Opätovne &načítať - + &Save &Uložiť - + Save &As... Uložiť &ako... - + &Rename... &Premenovať... - + Save A&ll U&ložiť všetko - + Manage Sessions Spravovať relácie - + New Session Nová relácia - + &Print... &Tlač... - + &Close &Zavrieť - + &Quit S&končiť - + Ctrl+Q Ctrl+Q - + &Edit Upra&viť - + &Undo &Späť - + &Redo &Opakovať - + Cu&t Vys&trihnúť - + &Copy &Kopírovať - + &Paste &Prilepiť - + Paste &Unformatted Prilepiť &bez formátovania - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Vybrať &všetko - + Select &Scene Vybrať &scénu - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Fo&rmátovanie - + &Bold Tu&čné - + &Italic K&urzivá - + &Underline Po&dčiarknuté - + Stri&kethrough Pr&ečiarknuté - + Ctrl+K Ctrl+K - + Sup&erscript Horný inde&x - + Ctrl+^ Ctrl+^ - + &Subscript Dolný i&ndex - + Ctrl+_ Ctrl+_ - + Align &Left Zarovnať &vľavo - + Ctrl+{ Ctrl+{ - + Align &Center Zarovnať na st&red - + Ctrl+| Ctrl+| - + Align &Right Zarovnať v&pravo - + Ctrl+} Ctrl+} - + Align &Justify Zarovnať do bl&oku - + Ctrl+J Ctrl+J - + &Decrease Indent Z&menšiť odsadenie - + Ctrl+< Ctrl+< - + I&ncrease Indent Z&väčšiť odsadenie - + Ctrl+> Ctrl+> - + Le&ft to Right Block Bl&ok zľava doprava - + Ri&ght to Left Block B&lok sprava doľava - + &Tools &Nástroje - + &Find... Ná&jsť... - + Find &Next Nájsť &ďalší - + Find Pre&vious Nájsť &predchádzajúci - + &Replace... Na&hradiť... - + Ctrl+R Ctrl+R - + Smart &Quotes Inteligentné ú&vodzovky - + Update &Document Aktualizovať &dokument - + Update &Selection Aktualizovať &výber - + &Spelling... &Pravopis... - + F7 F7 - + Set &Language... - + &Timers... Čas&ovače... - + S&ymbols... S&ymboly... - + &Daily Progress - + &Settings &Nastavenia - + Show &Toolbar Zobraziť p&anel nástrojov - + Show &Menu Icons Zobraziť &ikony ponuky - + F&ocused Text Za&meraný text - + &Fullscreen &Celá obrazovka - + F11 F11 - + Esc Esc - + M&inimize M&inimalizovať - + Ctrl+M Ctrl+M - + &Themes... &Témy... - + &Preferences... &Predvoľby... - + Focus Off Vypnúť zameranie - + Focus One Line Zamerať jeden riadok - + Focus Three Lines Zamerať tri riadky - + &Paragraph O&dstavec - + Focus Paragraph Zamerať odstavec - + &Help &Nápoveda - + Application &Language... Jazyk p&rogramu... - + Some files were unsupported and could not be opened. Niektoré súbory neboli podporované a nemohli byť otvorené. - + &Off &Vypnuté - + One &Line Jeden &riadok - + &Three Lines &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 2e56fb81..8b4ca8a8 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Без наслова %1) - + %1 (Read-Only) %1 (Само за читање) - - - - + + + + Sorry Извините - + Unable to save '%1'. Онемогућено чување '%1'. - + Save File As Сачувај фајл као - - + + Unable to overwrite '%1'. Онемогућено да пребрише '%1'. - + Rename File Преименуј фајл - + Unable to rename '%1'. Онемогућено преименовање '%1'. - + Reload File? Поново учитај фајл? - + Reload the file '%1' from disk? Поново учитај фајл '%1' са диска? - + All unsaved changes will be lost. Све несачуване промене ће бити изгубљене. - + Reload Поново учитај - + Untitled %1 Без наслова %1 - + Question Питање - + Saving as plain text will discard all formatting. Discard formatting? Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? @@ -388,17 +388,17 @@ Highlighter - + Add Додај - + Check Spelling... Провери правопис... - + (No suggestions found) (Без пронађене сугестије) @@ -429,12 +429,12 @@ <Системски језик> - + Note Напомена - + Please restart this application for the change in language to take effect. Молимо рестартујте програм да би се видела промена језика. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Подразумевано @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Управљај сесијама - + S&essions С&есије - + New Нови - + Duplicate Дупликат - + Rename Преименуј - + Delete Избриши - + Switch To Пребаци на - + New Session Нова сесија - + Duplicate Session Дупликат сесија - + Rename Session Преименуј сесију - + Question Питање - + Delete selected session? Избриши одабрану сесију? - + Session name: Име сесије: - + Sorry Извините - + The requested session name is already in use. Захтевано име сесије је већ у употреби. - + &New... &Нова... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Управљај... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Учитавање тема - + Loading sounds Учитавање звука - - + + Untitled Без наслова - + Open File Отвори фајл - + About FocusWriter О програму FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor Једноставан обрађивач текста на пуном екрану - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Реализовано под <a href=%1>GPL 3</a> лиценцом - + Uses icons from the <a href=%1>Oxygen</a> icon theme Користи иконе из <a href=%1>Oxygen</a> теме икона - + Used under the <a href=%1>LGPL 3</a> license Коришћен под <a href=%1>LGPL 3</a> лиценцом - - + + Characters: %L1 / %L2 Карактери: %L1 / %L2 - - + + Pages: %L1 Стране: %L1 - - + + Paragraphs: %L1 Параграфи: %L1 - - + + Words: %L1 Речи: %L1 - - + + Opening %1 Oтварање %1 - + (Untitled %1) (Без наслова %1) - + List all documents Листа свих докумената - + Switch to Next Document Пређи на следећи документ - + Switch to Previous Document Пређи на претходни документ - + Switch to First Document Пређи на први документ - + Switch to Last Document Пређи на последњи документ - + Switch to Document %1 Пређи на документ %1 - + Loading settings Учитавање подешавања - + Emergency cache is not writable. Ургентни кеш није уписив. - - + + Warning Упозорење - + FocusWriter was not shut down cleanly. FocusWriter није затворен чисто. - + Restore from the emergency cache? Враћање из ургентног кеша? - + Some files could not be opened. Неки фајлови нису могли бити отворени. - + Some files were opened Read-Only. Неки фајлови су отворени само за читање. - + '%1' is newer than the cached copy. '%1' је новије од кеширане копије. - + Overwrite newer file? Пребиши новији фајл? - + Save Changes? Сачувај промене? - + Save changes to the file '%1' before closing? Сачувајте промене фајла '%1' пре затварања? - + Your changes will be lost if you don't save them. Ваше промене ће бити изгубљене, ако их не сачувате. - + Unable to load typewriter sounds. Онемогућено учитавање звука писаће машине. - + Please make sure that SDL_mixer is installed. Молимо проверите да ли је SDL_миксер инсталиран. - + &File &Фајл - + &New &Нови - + &Open... &Отвори... - + Reloa&d Поно&во учитај - + &Save &Сачувај - + Save &As... Сачувај &као... - + &Rename... &Преименуј... - + Save A&ll Сачувај с&ве - + Manage Sessions Управљај сесијама - + New Session Нова сесија - + &Print... &Штампај... - + &Close &Затвори - + &Quit &Напусти - + Ctrl+Q Ctrl+Q - + &Edit &Измени - + &Undo &Опозови - + &Redo &Поново уради - + Cu&t Исе&ци - + &Copy &Копирај - + &Paste &Налепи - + Paste &Unformatted Налепи &неформатирано - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Одабери &све - + Select &Scene Одабери &сцену - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Фо&рмат - + &Bold &Подебљано - + &Italic &Искошено - + &Underline &Подвучено - + Stri&kethrough Пре&цртано - + Ctrl+K Ctrl+K - + Sup&erscript Екс&понент - + Ctrl+^ Ctrl+^ - + &Subscript &Индекс - + Ctrl+_ Ctrl+_ - + Align &Left Поравнај &лево - + Ctrl+{ Ctrl+{ - + Align &Center Поравнај &на центар - + Ctrl+| Ctrl+| - + Align &Right Поравнај &десно - + Ctrl+} Ctrl+} - + Align &Justify Поравнај &обострано - + Ctrl+J Ctrl+J - + &Decrease Indent &Смањи увлачење - + Ctrl+< Ctrl+< - + I&ncrease Indent П&овећај увлачење - + Ctrl+> Ctrl+> - + Le&ft to Right Block Ле&во на десно блок - + Ri&ght to Left Block Де&сно на лево блок - + &Tools &Алати - + &Find... &Пронађи... - + Find &Next Пронађи &следеће - + Find Pre&vious Пронађи пре&тходно - + &Replace... &Замени... - + Ctrl+R Ctrl+R - + Smart &Quotes Паметни &цитати - + Update &Document Ажурирај &документ - + Update &Selection Ажурирај &одабир - + &Spelling... &Правопис... - + F7 F7 - + Set &Language... Подеси &језик... - + &Timers... &Tајмери... - + S&ymbols... С&имболи... - + &Daily Progress &Дневни напредак - + &Settings &Подешавање - + Show &Toolbar Покажи &траку алата - + Show &Menu Icons Покажи &иконе менија - + F&ocused Text Ф&окусирани текст - + &Fullscreen &Пун екран - + F11 F11 - + Esc Esc - + M&inimize M&инимизуј - + Ctrl+M Ctrl+M - + &Themes... &Tеме... - + &Preferences... &Подешавања... - + Focus Off Фокусирање искључено - + Focus One Line Фокусирање једне линије - + Focus Three Lines Фокусирање три линије - + &Paragraph &Параграф - + Focus Paragraph Фокусирај параграф - + &Help &Помоћ - + Application &Language... Језик &програма... - + Some files were unsupported and could not be opened. Неки фајлови нису подржани и не могу бити отворени. - + &Off &Искључено - + One &Line Једна &линија - + &Three Lines &Три линије - + &About &О програму - + About &Qt О &Qt diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm index 02e20a0e3c0b32ce51a9c50bddca62a8d477802f..3b2c528c138dfd2409952cd056d434932a2648dc 100644 GIT binary patch delta 3361 zcma)8X;c(v7QJ0v)m^SQJD#eagUjCV=neN=EwY*(?4#1Ro{Exeed1(zS_B1 zc(zPf^E?_5A!gEwREkBN(x10iGVIQlZ;7jSLagT&{g_jXq#XRZh2KkexF)Q-wRI1YVf!qfw z{k`izc7>{E^AKRHRWYnYU!;PvdHfAb4S=H((0mY6=wh&@VauiY<=K%R#1ZxJjrMC$s zHxtRzNhm-10_YPhtl6{`h&mu_3W@~!{UU5%+rav67QXObL%bvGIrw+R9V_fz&V32{ zghLtRo7^HCQb;HLGvU(6fq-AIaQS!|3sojuz3B<0)Cev8Qene*LAd`r1J1f2Ja6pG z4UuZ`6p0KRs&?vM4p@uSuN&!DJ6}Dts*MM&Q@{D*TN2x^4m{Js#FnX3ItWIWsF(i4 z#E(u;ubF<6YeBs}oc`VpS6B7>nY!7ku0e{mTHlT;2y8efDK=ZBo z%ri5YZ&qKp@CRGyzWV3Yn}8AS>RV<;*!8mdkAk~E+%!>t-~khyC^}Ck@w^A(m@SRs8AO4o5E)=<2$7OYoh??|R&sEpR`S8?#73eo@qt*=zX^zO6>DB+ zYKL5~W8@+`#*7zhs;2^xPGa4`8I;xpaqj^yYNpYSq3?hVkJg{h%*T?tqnk&?OJavzbf_e4B!)Oj#)#3xV#$1CCsV&tvOHm=!^5Q5qnwaE_eu-D zDhK=nq|%KODOx{i#jrw_e1oz^avjhrtq32+S=laCo)2Sd`b+B<)=@dTrS%ObxXzL` zRtEF5yUKTxtF2Yqa(^%|C0hFG1mBL`A=L&e^qC>m?xWAbO;X+2e9B{^^uyTAz)+oZ z^)*%}Y=U$x-5tjw{VdiR(9Svre)heoYL0A7(AZCW?V#Zx2qD4-nE zH7;pn6Y-PA_2*lhI4LhQZj&ejagC-MtuVAs3YnjK0KJ67FOb27`B8MvZ3yL>(nJWA8DkIVulYyRwYl^yu8=GiWycZgQ) z%|`0htabX+5y-69_HHX=B*|Kz5{cC;*ZN(wGJs+`MmcCLOW9z#VTqF(#1tsR(sO1ohXQ=e9)t=4qrZ0w<}Imu27^wb{8P;<6E z)ZXm%D+#QUb8Et+f z>?_YR1_5Js$@4>gVTL}E=eOJFp#M2}*^4~D@t9nCV-qmfSFTt+YOe z!UUD++6SgE&M;kjIV?#x)&P74P&V2dZTR7(e8@T zxeLj~JhtP67^8Ct*Kxg#9u4%HaL4F>xQ=&qi!tEoCcrep81j??O!hS7HT%8 ze5waL+>F+0MjLzDm^rQ&6}iM%n8B+e+sRlY9O3(BW7XFR3%AmE@Gi5LG}rjU=pHQ4 zEaf|Wh%G+Yr2o;vnbd50O=)1G+%pBtdcm0K5sWg z?5^O=RAWjE<^T^@nNqe6;T1T|l=C>3aV;>-t7rBGUNJ3;apkwfY16(Rn|Vjeruu4* zm@XDm!|7ls%MIOhRc5EF=UC4Y`SPzw{4e2bs)Aud@|L^)p}V=&<~Mm|OnUjTP`Sx1Qw9F;%CG zFuDhxb%D?Cs@ zqXPaik&B#HrjD;nJ>skd1(~@y9WHiTLgg;Koe+u~9+~>mE*0spzOvJdE-EO@%~rln za8WWw_Eq*II4K{+ujupt&{RH)cT+kg9Pk>8S&V5mW-zK&6r%8zdt;b2r!dRvF)FJ_ zIhN?AoJ#o0*9~E$lFhxTFTTN$IUrCU)|5!34ZV z%XI$o@tFUzX_x=kX>oa}X;u$QzBM(w;HBk`#5n_;5JztLOjt1)=JH?qUls}ZnT44- S?|4|O1+zOWc6Uu$JK(<$kf=of delta 2870 zcmX9=dt6mz7G3u|?mhS12Z^YZ2uQvHl>|aS1bG;Oh>##~QA|-1#lpmF@NrGYQ9&_1 zL}-T2{8B?KN$`O8TK^PTV8XYaN5THk%PSvb5w zc;Cfd1&G4|;Q%0g2+WNHVm<*}xZa1Z=|F4**WH154S2l=Bh z64zSuf&M2LlIMeZA=Gd!xf8`xFIqL z^32J=&Qv2E0}a@BM!PW?13f7ih*+cwb>5$s(~YP8_`Nz0Bt_ z_!J!mX6}T~7Vevw1D~=+AT$*Vmjg$A=)gd} zKg%><%0`AzLyj*YL*)7Ck1%@Xf%8Pte-b1D%SmdPbToTMOX8z zngO=yZraJrylJ|2FB!;}wADhGJyjCsHZBG76k$O&x6S*HP|%jfyqtyNGd;ktc;SQc zeL!55P#zKojQm+RP};zL?hp`7_{YM7-&o+HMxnd0KQ~Mir3*}CY=G!Isu;*x zD2_HWuwj)LP|?8;6^i3~zGh-4#NdmqB=U)v*_Yr{KXKC!Bs#KQ+&P7DCfA4+BX4s) z%ET%R;{<;zR;4mt^6O&N)>VL8Kk@80y`g~qYw_YUD>L39Uc2^~Qh6ZW-d+xb7KwMQ ztnB$4;^SraDWlgUwe}%pHC1wXoe96$u62v<_V6mHpehp>bXT&sFuvbK>AjnmIk*?3 zErADt@E@feg@=IP{gP&T5eQo+m00Rn?)t49Po08biJKSgbbE?W^Mq?W2N4y;q<9r zWnCw|D!W4#`!pGGPL}?E?ujh#=J|=MWpiv4@s4c0bC}k$O^$xb0z<0hq%-t6_ha(9 z&n?BkE1$?kyOTMKUfO4}hdoK&GUXMnE|$x##86p*^3HWNbRrLVXG1-obLBnj*k9j+ z^4TotM@YPwu?JfA|^F4tUooBiJ=e=}_lt<)&r z8p6iBdRqQ&z6YT0lfOH{G}Y()VnbcFNYDGx&^GiJe(-%o`IHPU4p-cISFq8u6u*a5VB!x-@MV)jwJm;&X+vz?1UDWwOtZQ(Jx}bS7G@DV)2~um8GL-jS_0$%Y)jov;&jwo33{7u5gJrbws=byqIU|$V*}0-!MzN zCUb(T%}TV9QZ|`g1~9pV4hJSinO(y8oHWqv*}%9dx6Og4YIv7kH3xN-1D1*Aur3Z@ zny1-zX&4nVslc51u?l#)nio{E+Ua%XoP?pA$O3bIHcfxAY+f#$=KE%I#TObqsmpxw zKG{oMWd0_~jSc#@W-*1?lYK4fx6!nibCw}m1BKFN30l-iGWS}d(;v{NlO_JZE5%_6k3z%1>*p#^R3J5=MwEVQ=l#PskO-X95Bw=TC{gQ74pcs zbu+&-qtLqbI4h4CVJ&Unz`oqER$R~LBt5l$78pzgS*&NirxYVJ>vw$$%WJl_{`3Mn z;A?F^&%40(Oj~XC2o7?J-^ktL9yui)8^GNUolIY8C z$|`7qMGj2w)oz&mh2^c)s-+;H+BH%cpzRMIq1jW*we+-FEh+twHp%9%9kVU1&dw-( F>3{r#K~ew! diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 821ec270..d990b7d6 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Namnlös %1) - + %1 (Read-Only) %1 (Skrivskyddad) - - - - + + + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - + Save File As Spara fil som - - + + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Reload File? Läs om fil? - + Reload the file '%1' from disk? Läs om filen "%1" från disk? - + All unsaved changes will be lost. Alla osparade ändringar kommer att gå förlorade. - + Reload Läs om - + Untitled %1 Namnlös %1 - + Question Fråga - + Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? @@ -382,17 +382,17 @@ Highlighter - + Add Lägg till - + Check Spelling... Kontrollera stavning... - + (No suggestions found) (Inga förslag hittades) @@ -423,12 +423,12 @@ <Systemspråk> - + Note Observera - + Please restart this application for the change in language to take effect. Starta om programmet för att språkändringen ska aktiveras. @@ -868,11 +868,11 @@ Session - - - - - + + + + + Default Standard @@ -880,97 +880,97 @@ SessionManager - + Manage Sessions Hantera sessioner - + S&essions S&essioner - + New Ny - + Duplicate - + Duplicera - + Rename Byt namn - + Delete Ta bort - + Switch To Växla till - + New Session Ny session - + Duplicate Session - + Duplicera session - + Rename Session Byt namn på session - + Question Fråga - + Delete selected session? Ta bort markerad session? - + Session name: Sessionsnamn: - + Sorry Tyvärr - + The requested session name is already in use. Det begärda sessionsnamnet används redan. - + &New... &Ny... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Hantera... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1374,27 +1374,27 @@ Default - Standard + Standard Gentle Blues - + Mjukblått Old School - + Gamla skolan Space Dreams - + Rymddrömmar Writing Desk - + Skrivbord @@ -1406,12 +1406,12 @@ Duplicate - + Duplicera Custom - + Anpassade @@ -1602,634 +1602,634 @@ Window - + Loading themes Läser in teman - + Loading sounds Läser in ljud - - + + Untitled Namnlös - + Open File Öppna fil - + About FocusWriter Om FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor En enkel ordbehandlare med helskärmsläge - + Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Släppt under licensen <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Använder ikoner från ikontemat <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Använda under licensen <a href=%1>GPL 3</a> - - + + Characters: %L1 / %L2 Tecken: %L1 / %L2 - - + + Pages: %L1 Sidor: %L1 - - + + Paragraphs: %L1 Stycken: %L1 - - + + Words: %L1 Ord: %L1 - - + + Opening %1 Öppnar %1 - + (Untitled %1) (Namnlös %1) - + List all documents Lista alla dokument - + Switch to Next Document Växla till nästa dokument - + Switch to Previous Document Växla till föregående dokument - + Switch to First Document Växla till första dokumentet - + Switch to Last Document Växla till sista dokumentet - + Switch to Document %1 Växla till dokument %1 - + Loading settings Läser in inställningar - + Emergency cache is not writable. Nödcachen är inte skrivbar. - - + + Warning Varning - + FocusWriter was not shut down cleanly. FocusWriter stängdes inte av korrekt. - + Restore from the emergency cache? Återställ från nödcachen? - + Some files could not be opened. Några filer kunde inte öppnas. - + Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - + '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - + Overwrite newer file? Skriv över nyare fil? - + Save Changes? Spara ändringar? - + Save changes to the file '%1' before closing? Spara ändringar till filen "%1" innan stängning? - + Your changes will be lost if you don't save them. Dina ändringar kommer att förloras om du inte sparar dem. - + Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - + Please make sure that SDL_mixer is installed. Se till att SDL_mixer är installerat. - + &File &Arkiv - + &New &Nytt - + &Open... &Öppna... - + Reloa&d Läs in &igen - + &Save &Spara - + Save &As... Spara so&m... - + &Rename... &Byt namn... - + Save A&ll Spara a&lla - + Manage Sessions Hantera sessioner - + New Session Ny session - + &Print... Skriv &ut... - + &Close S&täng - + &Quit A&vsluta - + Ctrl+Q Ctrl+Q - + &Edit R&edigera - + &Undo &Ångra - + &Redo &Gör om - + Cu&t Klipp &ut - + &Copy &Kopiera - + &Paste Klistra &in - + Paste &Unformatted Klistra in &oformaterat - + Ctrl+Shift+V Ctrl+Skift+V - + Select &All Markera &allt - + Select &Scene Välj &scen - + Ctrl+Shift+A Ctrl+Skift+A - + Fo&rmat Fo&rmatera - + &Bold &Fet - + &Italic &Kursiv - + &Underline &Understruken - + Stri&kethrough G&enomstruken - + Ctrl+K Ctrl+K - + Sup&erscript Upphö&jd - + Ctrl+^ Ctrl+^ - + &Subscript Nedsän&kt - + Ctrl+_ Ctrl+_ - + Align &Left Justera &vänster - + Ctrl+{ Ctrl+{ - + Align &Center Justera &mitten - + Ctrl+| Ctrl+| - + Align &Right Justera &höger - + Ctrl+} Ctrl+} - + Align &Justify &Justera - + Ctrl+J Ctrl+J - + &Decrease Indent &Minska indrag - + Ctrl+< Ctrl+< - + I&ncrease Indent Öka in&drag - + Ctrl+> Ctrl+> - + Le&ft to Right Block Vänster till &högerblock - + Ri&ght to Left Block Höger till &vänsterblock - + &Tools Ver&ktyg - + &Find... &Sök... - + Find &Next Sök &nästa - + Find Pre&vious Sök &föregående - + &Replace... &Ersätt... - + Ctrl+R Ctrl+R - + Smart &Quotes Smarta &citationstecken - + Update &Document Uppdatera &dokument - + Update &Selection Uppdatera &markering - + &Spelling... Sta&vning... - + F7 F7 - + Set &Language... Ställ in &Språk... - + &Timers... &Tidtagare... - + S&ymbols... S&ymboler... - + &Daily Progress &Dagliga framsteg - + &Settings &Inställningar - + Show &Toolbar Visa &verktygsrad - + Show &Menu Icons Visa &menyikoner - + F&ocused Text F&okuserad text - + &Fullscreen &Helskärm - + F11 F11 - + Esc Esc - + M&inimize Mi&nimera - + Ctrl+M Ctrl+M - + &Themes... &Teman... - + &Preferences... &Inställningar... - + Focus Off Fokus av - + Focus One Line Fokusera en rad - + Focus Three Lines Fokusera tre rader - + &Paragraph &Stycke - + Focus Paragraph Fokusera stycke - + &Help &Hjälp - + Application &Language... Programs&pråk... - + Some files were unsupported and could not be opened. Några filer stöds inte och kunde inte öppnas. - + &Off &Av - + One &Line En &rad - + &Three Lines &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 1ba71cd1..f2e8cf66 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Başlıksız %1) - + %1 (Read-Only) %1 (Salt Okunur) - - - - + + + + Sorry Üzgünüm - + Unable to save '%1'. '%1' kaydedilemedi. - + Save File As Dosyayı Farklı Kaydet - - + + Unable to overwrite '%1'. '%1' üzerine yazılamadı. - + Rename File Dosyayı Yeniden Adlandır - + Unable to rename '%1'. '%1' yeniden adlandırılamadı. - + Reload File? Dosya Yeniden Yüklensin mi? - + Reload the file '%1' from disk? '%1' dosyası diskten yeniden yüklensin mi? - + All unsaved changes will be lost. Tüm kaydedilmemiş değişiklikler kaybedilecektir. - + Reload Yeniden Yükle - + Untitled %1 Başlıksız %1 - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? @@ -376,17 +376,17 @@ Highlighter - + Add Ekle - + Check Spelling... Yazım Denetimi Yap... - + (No suggestions found) (Öneri bulunamadı) @@ -417,12 +417,12 @@ <Sistem Dili> - + Note Not - + Please restart this application for the change in language to take effect. Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default Varsayılan @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions Oturumları Yönet - + S&essions &Oturumlar - + New Yeni - + Duplicate - + Rename Yeniden adlandır - + Delete Sil - + Switch To Geçiş Yap - + New Session Yeni Oturum - + Duplicate Session - + Rename Session Oturumu Yeniden Adlandır - + Question Soru - + Delete selected session? Seçili oturum silinsin mi? - + Session name: Oturum adı: - + Sorry Üzgünüm - + The requested session name is already in use. İstenen oturum adı zaten kullanımda. - + &New... &Yeni... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... Y&önet... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes Temalar yükleniyor - + Loading sounds Sesler yükleniyor - - + + Untitled Başlıksız - + Open File Dosyayı Aç - + About FocusWriter FocusWriter Hakkında - + FocusWriter FocusWriter - + A simple fullscreen word processor Basit bir tam ekran kelime işlemci - + Copyright &copy; 2008-%1 Graeme Gott Telif hakları saklıdır &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır - + Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> simge temasından simgeler kullanılıyor - + Used under the <a href=%1>LGPL 3</a> license <a href=%1>GPL 3</a> lisansı altında kullanılıyor - - + + Characters: %L1 / %L2 Karakter: %L1 / %L2 - - + + Pages: %L1 Sayfa: %L1 - - + + Paragraphs: %L1 Paragraf: %L1 - - + + Words: %L1 Kelime: %L1 - - + + Opening %1 %1 açılıyor - + (Untitled %1) (Başlıksız %1) - + List all documents Tüm dokümanları listele - + Switch to Next Document Sonraki Belgeye Geç - + Switch to Previous Document Önceki Belgeye Geç - + Switch to First Document İlk Belgeye Geç - + Switch to Last Document Son Belgeye Geç - + Switch to Document %1 %1. Belgeye Geç - + Loading settings Ayarlar yükleniyor - + Emergency cache is not writable. Acil önbellek yazılabilir değil. - - + + Warning Uyarı - + FocusWriter was not shut down cleanly. FocusWriter temiz bir şekilde kapatılmadı. - + Restore from the emergency cache? Acil önbellekten kurtarılsın mı? - + Some files could not be opened. Bazı dosyalar açılamadı. - + Some files were opened Read-Only. Bazı dosyalar salt okunur olarak açıldı. - + '%1' is newer than the cached copy. '%1' önbelleğe alınmış kopyadan daha yeni. - + Overwrite newer file? Daha yeni dosyanın üzerine yazılsın mı? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - + Please make sure that SDL_mixer is installed. SDL_mixer'ın yüklü olduğundan emin olun. - + &File &Dosya - + &New &Yeni - + &Open... &Aç... - + Reloa&d &Yeniden Yükle - + &Save &Kaydet - + Save &As... &Farklı Kaydet... - + &Rename... Yeni &İsim Ver... - + Save A&ll &Tümünü Kaydet - + Manage Sessions Oturumları Yönet - + New Session Yeni Oturum - + &Print... Ya&zdır... - + &Close Ka&pat - + &Quit &Çık - + Ctrl+Q Ctrl+Q - + &Edit D&üzen - + &Undo &Geri Al - + &Redo &Yinele - + Cu&t &Kes - + &Copy K&opyala - + &Paste Y&apıştır - + Paste &Unformatted &Biçimlendirme Olmadan Yapıştır - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All &Tümünü Seç - + Select &Scene &Sahneyi Seç - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat &Biçim - + &Bold &Kalın - + &Italic &İtalik - + &Underline &Altı Çizili - + Stri&kethrough &Üstü Çizili - + Ctrl+K Ctrl+K - + Sup&erscript Ü&st Simge - + Ctrl+^ Ctrl+^ - + &Subscript A&lt Simge - + Ctrl+_ Ctrl+_ - + Align &Left So&la Yasla - + Ctrl+{ Ctrl+{ - + Align &Center &Ortala - + Ctrl+| Ctrl+| - + Align &Right Sa&ğa Yasla - + Ctrl+} Ctrl+} - + Align &Justify İki &Yana Yasla - + Ctrl+J Ctrl+J - + &Decrease Indent &Girintiyi Azalt - + Ctrl+< Ctrl+< - + I&ncrease Indent Gi&rintiyi Arttır - + Ctrl+> Ctrl+> - + Le&ft to Right Block S&oldan Sağa Blok - + Ri&ght to Left Block Sa&ğdan Sola Blok - + &Tools &Araçlar - + &Find... &Bul... - + Find &Next &Sonrakini Bul - + Find Pre&vious &Öncekini Bul - + &Replace... &Değiştir... - + Ctrl+R Ctrl+R - + Smart &Quotes &Akıllı Tırnaklar - + Update &Document &Dökümanı Güncelle - + Update &Selection &Seçilimi Güncelle - + &Spelling... &Yazım Denetimi... - + F7 F7 - + Set &Language... Dili &Ayarla... - + &Timers... &Zamanlayıcılar... - + S&ymbols... &Simgeler... - + &Daily Progress &Günlük İlerleme - + &Settings &Ayarlar - + Show &Toolbar &Araç Çubuğunu Göster - + Show &Menu Icons &Menü Simgelerini Göster - + F&ocused Text &Odaklanılan Metin - + &Fullscreen Tam &Ekran - + F11 F11 - + Esc Esc - + M&inimize &Küçült - + Ctrl+M Ctrl+M - + &Themes... &Temalar... - + &Preferences... &Tercihler... - + Focus Off Odaklanmayı Kapat - + Focus One Line Bir Satıra Odaklan - + Focus Three Lines Üç Satıra Odaklan - + &Paragraph &Paragraf - + Focus Paragraph Paragrafa Odaklan - + &Help &Yardım - + Application &Language... &Uygulama Dili ... - + Some files were unsupported and could not be opened. Bazı dosyalar desteklenmiyor ve açılamadı. - + &Off &Kapalı - + One &Line &Bir Satır - + &Three Lines &Üç Satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 4634e526..6b856e68 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Без назви %1) - + %1 (Read-Only) - - - - + + + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - + Save File As Зберегти файл як - - + + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 Без назви %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -388,17 +388,17 @@ Highlighter - + Add Додати - + Check Spelling... Перевірка правопису... - + (No suggestions found) (Пропозицій не знайдено) @@ -429,12 +429,12 @@ - + Note Примітка - + Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набрала чинності. @@ -874,11 +874,11 @@ Session - - - - - + + + + + Default Типово @@ -886,97 +886,97 @@ SessionManager - + Manage Sessions Керування сеансами - + S&essions С&анси - + New Новий - + Duplicate - + Rename Перейменувати - + Delete Вилучити - + Switch To Перейти - + New Session Новий сеанс - + Duplicate Session - + Rename Session Перейменувати сеанс - + Question Запит - + Delete selected session? Вилучити вибраний сеанс? - + Session name: Назва сеансу: - + Sorry На жаль - + The requested session name is already in use. Така назва сеансу вже є. - + &New... &Новий ... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Керування... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1608,634 +1608,634 @@ Window - + Loading themes Завантаження тем - + Loading sounds Завантаження звуків - - + + Untitled Без назви - + Open File Відкрити файл - + About FocusWriter Про FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 Символів: %L1 / %L2 - - + + Pages: %L1 Сторінок: %L1 - - + + Paragraphs: %L1 Абзаців: %L1 - - + + Words: %L1 Слів: %L1 - - + + Opening %1 Відкривання %1 - + (Untitled %1) (Без назви %1) - + List all documents - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + &File &Файл - + &New &Новий - + &Open... &Відкрити... - + Reloa&d - + &Save &Зберегти - + Save &As... Зберегти &як... - + &Rename... &Перейменувати... - + Save A&ll Зберегти вс&е - + Manage Sessions Керування сеансами - + New Session Новий сеанс - + &Print... &Друк... - + &Close За&крити - + &Quit В&ийти - + Ctrl+Q Ctrl+Q - + &Edit &Змінити - + &Undo &Повернути - + &Redo Пов&торити - + Cu&t Виріза&ти - + &Copy Копі&ювати - + &Paste В&ставити - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All Вибрати &все - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat &Формат - + &Bold &Напівжирний - + &Italic &Курсив - + &Underline &Підкреслений - + Stri&kethrough &Закреслений - + Ctrl+K Ctrl+K - + Sup&erscript Верхній &індекс - + Ctrl+^ Ctrl+^ - + &Subscript Ни&жній індекс - + Ctrl+_ Ctrl+_ - + Align &Left По &лівому краю - + Ctrl+{ Ctrl+{ - + Align &Center По &центру - + Ctrl+| Ctrl+| - + Align &Right По пр&авому краю - + Ctrl+} Ctrl+} - + Align &Justify По &ширині - + Ctrl+J Ctrl+J - + &Decrease Indent &Зменшити відступ - + Ctrl+< Ctrl+< - + I&ncrease Indent З&більшити відступ - + Ctrl+> Ctrl+> - + Le&ft to Right Block Фрагмент зліва напр&аво - + Ri&ght to Left Block Фрагмент справа нал&іво - + &Tools &Інструменти - + &Find... &Знайти... - + Find &Next Знайти нас&тупний - + Find Pre&vious Знайти п&опередній - + &Replace... За&мінити... - + Ctrl+R Ctrl+R - + Smart &Quotes Прямі &лапки - + Update &Document Оновити &документ - + Update &Selection Оновити &виділене - + &Spelling... &Перевірка правопису... - + F7 F7 - + Set &Language... - + &Timers... &Таймери... - + S&ymbols... - + &Daily Progress - + &Settings &Налаштування - + Show &Toolbar Показати панель &інструментів - + Show &Menu Icons Показати значки мен&ю - + F&ocused Text - + &Fullscreen Н&а повний екран - + F11 F11 - + Esc Esc - + M&inimize &Згорнути - + Ctrl+M Ctrl+M - + &Themes... &Теми... - + &Preferences... Пара&метри... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help &Довідка - + Application &Language... Мова &програми... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index f48c5022..cf59f6b1 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Chưa đặt tiêu đề %1) - + %1 (Read-Only) - - - - + + + + Sorry Rất tiếc - + Unable to save '%1'. Không thể lưu '%1'. - + Save File As Lưu tập tin thành - - + + Unable to overwrite '%1'. Không thể ghi đè lên '%1'. - + Rename File Đổi tên tập tin - + Unable to rename '%1'. Không thể đổi tên '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Tất cả các thay đổi chưa lưu sẽ bị mất. - + Reload Tải lại - + Untitled %1 Chưa đặt tiêu đề %1 - + Question Câu hỏi - + Saving as plain text will discard all formatting. Discard formatting? Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? @@ -376,17 +376,17 @@ Highlighter - + Add Thêm - + Check Spelling... Kiểm tra lỗi chính tả... - + (No suggestions found) (Không tìm thấy lời đề nghị nào) @@ -417,12 +417,12 @@ <Ngôn ngữ Hệ thống> - + Note Ghi chú - + Please restart this application for the change in language to take effect. Xin vui lòng khởi động lại ứng dụng này để áp dụng thao tác thay đổi ngôn ngữ. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default Mặc định @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions Quản lý phiên làm việc - + S&essions P&hiên làm việc - + New Tạo mới - + Duplicate - + Rename Đổi tên - + Delete Xóa - + Switch To Chuyển sang - + New Session Phiên làm việc mới - + Duplicate Session - + Rename Session Đổi tên phiên làm việc - + Question Câu hỏi - + Delete selected session? Xóa phiên làm việc đã được chọn? - + Session name: Tên phiên làm việc: - + Sorry Rất tiếc - + The requested session name is already in use. Tên của phiên làm việc được yêu cầu hiện đang được sử dụng. - + &New... &Tạo mới... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... &Quản lý... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes Đang tải dữ liệu giao diện - + Loading sounds Đang tải dữ liệu âm thanh - - + + Untitled Chưa đặt tiêu đề - + Open File Mở tập tin - + About FocusWriter Dịch bởi Phan Anh - + FocusWriter FocusWriter - + A simple fullscreen word processor Một phần mềm soạn thảo văn bản toàn màn hình dạng đơn giản - + Copyright &copy; 2008-%1 Graeme Gott Bản quyền &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license Phát hành dựa theo giấy phép <a href=%1>GPL 3</a> - + Uses icons from the <a href=%1>Oxygen</a> icon theme Sử dụng bộ biểu tượng từ <a href=%1>Oxygen</a> - + Used under the <a href=%1>LGPL 3</a> license Sử dụng dựa trên giấy phép <a href=%1>LGPL 3</a> - - + + Characters: %L1 / %L2 Số ký tự: %L1 / %L2 - - + + Pages: %L1 Số trang: %L1 - - + + Paragraphs: %L1 Số đoạn văn: %L1 - - + + Words: %L1 Số từ: %L1 - - + + Opening %1 Đang mở %1 - + (Untitled %1) (Chưa đặt tiêu đề %1) - + List all documents - + Switch to Next Document Chuyển sang một tài liệu mới - + Switch to Previous Document Chuyển sang tài liệu trước đó - + Switch to First Document Chuyển sang tài liệu đầu tiên - + Switch to Last Document Chuyển sang tài liệu cuối cùng - + Switch to Document %1 Chuyển sang tài liệu %1 - + Loading settings Đang tải thiết lập - + Emergency cache is not writable. Phần bộ nhớ đệm trong trường hợp khẩn cấp hiện không thể ghi dữ liệu vào. - - + + Warning Cảnh báo - + FocusWriter was not shut down cleanly. FocusWriter đã không được tắt theo đúng cách. - + Restore from the emergency cache? Khôi phục dữ liệu từ phần bộ nhớ đệm khẩn cấp? - + Some files could not be opened. Không thể mở một số tập tin. - + Some files were opened Read-Only. Một vài tập tin được mở dưới chế độ Chỉ Được-Đọc - + '%1' is newer than the cached copy. '%1' mới hơn bản dữ liệu được sao chép trong bộ nhớ đệm. - + Overwrite newer file? Viết đè dữ liệu lên tập tin mới hơn? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. Không thể tải âm thanh tạo hiệu ứng gõ chữ. - + Please make sure that SDL_mixer is installed. Xin vui lòng chắc chắn rằng SDL_mixer đã được cài đặt. - + &File &Tập tin - + &New &Tạo mới - + &Open... &Mở... - + Reloa&d Tải l&ại - + &Save &Lưu - + Save &As... Lưu &Dưới Dạng... - + &Rename... &Đổi tên... - + Save A&ll Lưu T&ất Cả - + Manage Sessions Quản lý phiên làm việc - + New Session Phiên làm việc mới - + &Print... &In dữ liệu... - + &Close Đ&óng lại - + &Quit Th&oát - + Ctrl+Q Ctrl+Q - + &Edit C&hỉnh sửa - + &Undo Hủ&y thao tác - + &Redo Lặ&p lại thao tác - + Cu&t Cắ&t - + &Copy S&ao chép - + &Paste D&án - + Paste &Unformatted Dán vào dữ liệu ch&ưa chỉnh sửa - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All Chọn tấ&t cả - + Select &Scene Chọn c&ảnh - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat Đị&nh dạng - + &Bold &In đậm - + &Italic I&n nghiêng - + &Underline &Gạch dưới - + Stri&kethrough G&ạch xuyên qua - + Ctrl+K Ctrl+K - + Sup&erscript Chữ t&rồi lên - + Ctrl+^ Ctrl+^ - + &Subscript Chữ s&ụp xuống - + Ctrl+_ Ctrl+_ - + Align &Left Canh lề b&ên trái - + Ctrl+{ Ctrl+{ - + Align &Center Canh lề c&hính giữa - + Ctrl+| Ctrl+| - + Align &Right Canh lề bên p&hải - + Ctrl+} Ctrl+} - + Align &Justify Canh lề đ&ều hai bên - + Ctrl+J Ctrl+J - + &Decrease Indent Giả&m mức lùi dòng - + Ctrl+< Ctrl+< - + I&ncrease Indent Tă&ng mức lùi dòng - + Ctrl+> Ctrl+> - + Le&ft to Right Block Khối văn bản từ tr&ái sang phải - + Ri&ght to Left Block Khối văn bản từ ph&ải sang trái - + &Tools Cô&ng cụ - + &Find... Tì&m kiếm... - + Find &Next Tìm tiế&p theo - + Find Pre&vious Tìm tr&ước đó - + &Replace... Th&ay thế... - + Ctrl+R Ctrl+R - + Smart &Quotes Trích dẫn thô&ng minh: - + Update &Document Cập nhật tà&i liệu - + Update &Selection Cập nhật v&ùng lựa chọn - + &Spelling... Kiểm tr&a lỗi chính tả... - + F7 F7 - + Set &Language... - + &Timers... B&ộ đếm thời gian - + S&ymbols... Biể&u tượng... - + &Daily Progress - + &Settings Thiế&t lập - + Show &Toolbar Hiển thị th&anh công cụ - + Show &Menu Icons Hiển thị biểu tượng men&u - + F&ocused Text Tập tr&ung vào văn bản - + &Fullscreen Toàn mà&n hình - + F11 F11 - + Esc Esc - + M&inimize T&hu nhỏ - + Ctrl+M Ctrl+M - + &Themes... G&iao diện... - + &Preferences... Tùy biế&n... - + Focus Off Tắt phần tập trung - + Focus One Line Tập trung vào một dòng văn bản - + Focus Three Lines Tập trung vào ba dòng văn bản - + &Paragraph &Đoạn văn - + Focus Paragraph Tập trung vào đoạn văn - + &Help Dịch bởi P&han Anh - + Application &Language... Ngôn ngữ hiển th&ị... - + Some files were unsupported and could not be opened. Một số tập tin không được hỗ trợ nên sẽ không thể mở được. - + &Off T&ắt - + One &Line Một D&òng - + &Three Lines B&a Dòng - + &About Thô&ng tin - + About &Qt Thô&ng tin về Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index d41f9658..b8184522 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (无标题 %1) - + %1 (Read-Only) %1 (只读) - - - - + + + + Sorry 抱歉 - + Unable to save '%1'. 不能保存 '%1'。 - + Save File As 保存文件为 - - + + Unable to overwrite '%1'. 不能覆盖 '%1'。 - + Rename File 重命名文件 - + Unable to rename '%1'. 不能重命名 '%1'。 - + Reload File? 重新加载文件? - + Reload the file '%1' from disk? 重新从磁盘中加载文件 '%1' ? - + All unsaved changes will be lost. 未保存的更改将丢失。 - + Reload 重新加载 - + Untitled %1 无标题 %1 - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? @@ -376,17 +376,17 @@ Highlighter - + Add 添加 - + Check Spelling... 检查拼写... - + (No suggestions found) (找不到建议) @@ -417,12 +417,12 @@ <系统语言> - + Note 注意 - + Please restart this application for the change in language to take effect. 要使语言的变化生效,请重新启动该应用程序。 @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default 默认 @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions 管理会话 - + S&essions 会话(&E) - + New 新建 - + Duplicate 副本 - + Rename 重命名 - + Delete 删除 - + Switch To 切换到 - + New Session 新会话 - + Duplicate Session 复制会话 - + Rename Session 重命名会话 - + Question 询问 - + Delete selected session? 删除所选会话? - + Session name: 会话名称: - + Sorry 抱歉 - + The requested session name is already in use. 请求的会话名称已在使用中。 - + &New... 新建(&N)... - + Ctrl+Shift+N Ctrl+Shift+N - + &Manage... 管理(&M)... - + Ctrl+Shift+M Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes 载入主题 - + Loading sounds 载入声音 - - + + Untitled 无标题 - + Open File 打开文件 - + About FocusWriter 关于 FocusWriter - + FocusWriter FocusWriter - + A simple fullscreen word processor 一个简洁的全屏文字处理软件 - + Copyright &copy; 2008-%1 Graeme Gott 版权 &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license 以 <a href=%1>GPL 3</a> 许可协议发布 - + Uses icons from the <a href=%1>Oxygen</a> icon theme 使用 <a href=%1>Oxygen</a> 图标主题 - + Used under the <a href=%1>LGPL 3</a> license 遵照 <a href=%1>LGPL 3</a> 许可使用 - - + + Characters: %L1 / %L2 字符数:%L1 / %L2 - - + + Pages: %L1 页数:%L1 - - + + Paragraphs: %L1 段落数:%L1 - - + + Words: %L1 单词数:%L1 - - + + Opening %1 正在打开 %1 - + (Untitled %1) (无标题 %1) - + List all documents 列出所有文档 - + Switch to Next Document 跳转到下一文档 - + Switch to Previous Document 跳转到上一文档 - + Switch to First Document 跳转到第一个文档 - + Switch to Last Document 跳转到最后一个文档 - + Switch to Document %1 跳转到文档 %1 - + Loading settings 加载设置中 - + Emergency cache is not writable. 紧急缓存是不可写的。 - - + + Warning 警告 - + FocusWriter was not shut down cleanly. FocusWriter 没有完全关闭。 - + Restore from the emergency cache? 从紧急缓存中还原? - + Some files could not be opened. 有些文件无法打开。 - + Some files were opened Read-Only. 一些文件以只读方式打开。 - + '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - + Overwrite newer file? 覆盖较新的文件? - + Save Changes? 保存更改? - + Save changes to the file '%1' before closing? 在关闭之前保存文件 '%1' ? - + Your changes will be lost if you don't save them. 如果你选择不保存,所有更改都会丢失。 - + Unable to load typewriter sounds. 无法加载打字机声音。 - + Please make sure that SDL_mixer is installed. 请确认 SDL_mixer 已被安装. - + &File 文件(&F) - + &New 新建(&N) - + &Open... 打开(&O)... - + Reloa&d 重新载入(&d) - + &Save 保存(&S) - + Save &As... 另存为(&A)... - + &Rename... 重命名(&R)... - + Save A&ll 全部保存(&L) - + Manage Sessions 管理会话 - + New Session 新会话 - + &Print... 打印(&P)... - + &Close 关闭(&C) - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Edit 编辑(&E) - + &Undo 撤销(&U) - + &Redo 重做(&R) - + Cu&t 剪切(&T) - + &Copy 复制(&C) - + &Paste 粘贴(&P) - + Paste &Unformatted 无格式粘贴(&U) - + Ctrl+Shift+V Ctrl+Shift+V - + Select &All 全选(&A) - + Select &Scene 选择场景(&S) - + Ctrl+Shift+A Ctrl+Shift+A - + Fo&rmat 格式(&R) - + &Bold 粗体(&B) - + &Italic 斜体(&I) - + &Underline 下划线(&U) - + Stri&kethrough 删除线(&K) - + Ctrl+K Ctrl+K - + Sup&erscript 上标(&E) - + Ctrl+^ Ctrl+^ - + &Subscript 下标(&S) - + Ctrl+_ Ctrl+_ - + Align &Left 左对齐(&L) - + Ctrl+{ Ctrl+{ - + Align &Center 居中(&C) - + Ctrl+| Ctrl+| - + Align &Right 右对齐(&R) - + Ctrl+} Ctrl+} - + Align &Justify 两端对齐(&J) - + Ctrl+J Ctrl+J - + &Decrease Indent 减少缩进(&D) - + Ctrl+< Ctrl+< - + I&ncrease Indent 增加缩进(&N) - + Ctrl+> Ctrl+> - + Le&ft to Right Block 从左到右(&F) - + Ri&ght to Left Block 从右到左 (&G) - + &Tools 工具(&T) - + &Find... 查找(&F)... - + Find &Next 查找下一个(&N) - + Find Pre&vious 查找上一个(&V) - + &Replace... 替换(&R)... - + Ctrl+R Ctrl+R - + Smart &Quotes 智能引号(&Q) - + Update &Document 更新文档(&D) - + Update &Selection 更新所选(&S) - + &Spelling... 拼写(&S)... - + F7 F7 - + Set &Language... 设置语言(&L) - + &Timers... 定时器(&T)... - + S&ymbols... 符号...(&y) - + &Daily Progress 每日进度(&D) - + &Settings 设置(&S) - + Show &Toolbar 显示工具栏(&T) - + Show &Menu Icons 显示菜单图标(&M) - + F&ocused Text 聚焦文本(&F) - + &Fullscreen 全屏(&F) - + F11 F11 - + Esc Esc - + M&inimize 最小化(&I) - + Ctrl+M Ctrl+M - + &Themes... 主题(&T)... - + &Preferences... 偏好设置(&P)... - + Focus Off 关闭聚焦 - + Focus One Line 聚焦一行 - + Focus Three Lines 聚焦三行 - + &Paragraph 段落(&P) - + Focus Paragraph 聚焦段落 - + &Help 帮助(&H) - + Application &Language... 程序语言(&L)... - + Some files were unsupported and could not be opened. 某些文件不受支持,不能打开。 - + &Off 关闭(&O) - + One &Line 单行(&L) - + &Three Lines 三行(&T) - + &About 关于(&A) - + About &Qt 关于 &Qt diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index f757ded6..f986017c 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) - + %1 (Read-Only) - - - - + + + + Sorry - + Unable to save '%1'. - + Save File As - - + + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -376,17 +376,17 @@ Highlighter - + Add - + Check Spelling... - + (No suggestions found) @@ -417,12 +417,12 @@ - + Note - + Please restart this application for the change in language to take effect. @@ -862,11 +862,11 @@ Session - - - - - + + + + + Default @@ -874,97 +874,97 @@ SessionManager - + Manage Sessions - + S&essions - + New - + Duplicate - + Rename - + Delete - + Switch To - + New Session - + Duplicate Session - + Rename Session - + Question - + Delete selected session? - + Session name: - + Sorry - + The requested session name is already in use. - + &New... - + Ctrl+Shift+N - + &Manage... - + Ctrl+Shift+M @@ -1596,634 +1596,634 @@ Window - + Loading themes - + Loading sounds - - + + Untitled - + Open File - + About FocusWriter - + FocusWriter - + A simple fullscreen word processor - + Copyright &copy; 2008-%1 Graeme Gott - + Released under the <a href=%1>GPL 3</a> license - + Uses icons from the <a href=%1>Oxygen</a> icon theme - + Used under the <a href=%1>LGPL 3</a> license - - + + Characters: %L1 / %L2 - - + + Pages: %L1 - - + + Paragraphs: %L1 - - + + Words: %L1 - - + + Opening %1 - + (Untitled %1) - + List all documents - + Switch to Next Document - + Switch to Previous Document - + Switch to First Document - + Switch to Last Document - + Switch to Document %1 - + Loading settings - + Emergency cache is not writable. - - + + Warning - + FocusWriter was not shut down cleanly. - + Restore from the emergency cache? - + Some files could not be opened. - + Some files were opened Read-Only. - + '%1' is newer than the cached copy. - + Overwrite newer file? - + Save Changes? - + Save changes to the file '%1' before closing? - + Your changes will be lost if you don't save them. - + Unable to load typewriter sounds. - + Please make sure that SDL_mixer is installed. - + &File - + &New - + &Open... - + Reloa&d - + &Save - + Save &As... - + &Rename... - + Save A&ll - + Manage Sessions - + New Session - + &Print... - + &Close - + &Quit - + Ctrl+Q - + &Edit - + &Undo - + &Redo - + Cu&t - + &Copy - + &Paste - + Paste &Unformatted - + Ctrl+Shift+V - + Select &All - + Select &Scene - + Ctrl+Shift+A - + Fo&rmat - + &Bold - + &Italic - + &Underline - + Stri&kethrough - + Ctrl+K - + Sup&erscript - + Ctrl+^ - + &Subscript - + Ctrl+_ - + Align &Left - + Ctrl+{ - + Align &Center - + Ctrl+| - + Align &Right - + Ctrl+} - + Align &Justify - + Ctrl+J - + &Decrease Indent - + Ctrl+< - + I&ncrease Indent - + Ctrl+> - + Le&ft to Right Block - + Ri&ght to Left Block - + &Tools - + &Find... - + Find &Next - + Find Pre&vious - + &Replace... - + Ctrl+R - + Smart &Quotes - + Update &Document - + Update &Selection - + &Spelling... - + F7 - + Set &Language... - + &Timers... - + S&ymbols... - + &Daily Progress - + &Settings - + Show &Toolbar - + Show &Menu Icons - + F&ocused Text - + &Fullscreen - + F11 - + Esc - + M&inimize - + Ctrl+M - + &Themes... - + &Preferences... - + Focus Off - + Focus One Line - + Focus Three Lines - + &Paragraph - + Focus Paragraph - + &Help - + Application &Language... - + Some files were unsupported and could not be opened. - + &Off - + One &Line - + &Three Lines - + &About - + About &Qt From b03301ef070dd4fce03f3785dc9a1866c5e548a0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 24 Jun 2014 08:31:51 -0400 Subject: [PATCH 210/630] Bump version number. --- NEWS | 13 +++++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index ee2623b3..f7b1b45b 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +1.5.1 +----- +* Added keywords to .desktop file. +* FIXED: Spelling underline was broken. +* FIXED: Incorrect MIME type for Office Open XML. +* FIXED: Incorrect version number string. +* FIXED: Compile issues with Qt 4.6. +* FIXED: Regression with sound effects on Windows. +* FIXED: Regression with default cursor width on Windows. +* FIXED: Regression where menubar was not shown in Ubuntu. +* Translation updates: Spanish (Mexico), Korean, Swedish + 1.5.0 ----- * Added daily progress dialog. @@ -19,6 +31,7 @@ * Refactored daily progress. * Refactored document cache. * Refactored spell checking code. +* Translation updates: Armenian, Czech, Dutch, Greek, Finnish, Hebrew, Hungarian, Japanese, Romanian, Serbian, Turkish, Chinese (China) 1.4.6 ----- diff --git a/focuswriter.pro b/focuswriter.pro index 5c9947b6..a3742f01 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.5.0 +VERSION = 1.5.1 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 65c0a7db..e151d416 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.0' +VERSION='1.5.1' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index cf76eea0..03dd6bcd 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 0 +!define VERSIONPATCH 1 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 935b338d..e454e481 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.0 +SET VERSION=1.5.1 ECHO Copying executable MKDIR %APP% From f78836a84b3a8e289f3ab87316d4aa39e3492c14 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 24 Jun 2014 09:39:24 -0400 Subject: [PATCH 211/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 755bfa36..ad40dea2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.1-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Tue, 24 Jun 2014 12:40:50 +0000 + focuswriter (1.5.0-1) unstable; urgency=medium * New upstream release From 15967df85b36053cff7ece7e443bf521bf47887c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 24 Jun 2014 10:01:26 -0400 Subject: [PATCH 212/630] FIXED: Keywords in .desktop file should be separated by semicolons. --- resources/unix/focuswriter.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index ece071c4..e488c9e9 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -84,4 +84,4 @@ Exec=focuswriter %F Terminal=false MimeType=application/rtf;application/vnd.oasis.opendocument.text;application/vnd.openxmlformats-officedocument.wordprocessingml.document;text/plain;text/rtf; Categories=Qt;Office;WordProcessor; -Keywords=fullscreen editor typewriter keyclick distraction concentration focused monomaniacal writing +Keywords=fullscreen;editor;typewriter;keyclick;distraction;concentration;focused;monomaniacal;writing; From a5a7f39f5cb6e34f93e2e03c04c98c9f92e8a5fc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 29 Jun 2014 07:41:41 -0400 Subject: [PATCH 213/630] Share API for file writers. --- src/document_writer.cpp | 52 +++++++++++++++++---------------- src/fileformats/docx_writer.cpp | 6 ++-- src/fileformats/docx_writer.h | 6 ++-- src/fileformats/odt_writer.cpp | 10 +++---- src/fileformats/odt_writer.h | 10 +++---- src/fileformats/rtf_writer.cpp | 2 +- src/fileformats/rtf_writer.h | 2 +- 7 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/document_writer.cpp b/src/document_writer.cpp index 5d44065c..fb1c6b4e 100644 --- a/src/document_writer.cpp +++ b/src/document_writer.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013 Graeme Gott + * Copyright (C) 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,41 +61,43 @@ bool DocumentWriter::write() bool saved = false; + QFile file(m_filename); + if (!file.open(QFile::WriteOnly | QFile::Truncate)) { + return false; + } + if (m_type == "odt") { OdtWriter writer; - saved = writer.write(m_filename, m_document); + saved = writer.write(&file, m_document); } else if (m_type == "docx") { DocxWriter writer; - saved = writer.write(m_filename, m_document); + saved = writer.write(&file, m_document); } else { - QFile file(m_filename); - if (file.open(QFile::WriteOnly | QFile::Truncate)) { - if (m_type == "rtf") { - RtfWriter writer(m_encoding); - if (m_encoding.isEmpty()) { - m_encoding = writer.encoding(); - } - saved = writer.write(&file, m_document); - } else { - QTextStream stream(&file); - QByteArray encoding = !m_encoding.isEmpty() ? m_encoding : "UTF-8"; - stream.setCodec(encoding); - if (m_write_bom || (encoding != "UTF-8")) { - stream.setGenerateByteOrderMark(true); - } - stream << m_document->toPlainText(); - saved = true; + if (m_type == "rtf") { + RtfWriter writer(m_encoding); + if (m_encoding.isEmpty()) { + m_encoding = writer.encoding(); + } + saved = writer.write(&file, m_document); + } else { + QTextStream stream(&file); + QByteArray encoding = !m_encoding.isEmpty() ? m_encoding : "UTF-8"; + stream.setCodec(encoding); + if (m_write_bom || (encoding != "UTF-8")) { + stream.setGenerateByteOrderMark(true); } + stream << m_document->toPlainText(); + saved = true; + } #if defined(Q_OS_UNIX) - saved &= (fsync(file.handle()) == 0); + saved &= (fsync(file.handle()) == 0); #elif defined(Q_OS_WIN) - saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); + saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); #endif - saved &= (file.error() == QFile::NoError); - file.close(); - } + saved &= (file.error() == QFile::NoError); } + file.close(); return saved; } diff --git a/src/fileformats/docx_writer.cpp b/src/fileformats/docx_writer.cpp index 49111687..c9676892 100644 --- a/src/fileformats/docx_writer.cpp +++ b/src/fileformats/docx_writer.cpp @@ -42,9 +42,9 @@ void DocxWriter::setStrict(bool strict) //----------------------------------------------------------------------------- -bool DocxWriter::write(const QString& filename, QTextDocument* document) +bool DocxWriter::write(QIODevice* device, const QTextDocument* document) { - QtZipWriter zip(filename); + QtZipWriter zip(device); if (zip.status() != QtZipWriter::NoError) { return false; } @@ -83,7 +83,7 @@ bool DocxWriter::write(const QString& filename, QTextDocument* document) //----------------------------------------------------------------------------- -QByteArray DocxWriter::writeDocument(QTextDocument* document) +QByteArray DocxWriter::writeDocument(const QTextDocument* document) { QByteArray data; QBuffer buffer(&data); diff --git a/src/fileformats/docx_writer.h b/src/fileformats/docx_writer.h index e6cc1394..dc6d6c9e 100644 --- a/src/fileformats/docx_writer.h +++ b/src/fileformats/docx_writer.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013 Graeme Gott + * Copyright (C) 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,10 +42,10 @@ class DocxWriter } void setStrict(bool strict); - bool write(const QString& filename, QTextDocument* document); + bool write(QIODevice* device, const QTextDocument* document); private: - QByteArray writeDocument(QTextDocument* document); + QByteArray writeDocument(const QTextDocument* document); void writeParagraph(const QTextBlock& block); void writeText(const QString& text, int start, int end); void writeParagraphProperties(const QTextBlockFormat& block_format, const QTextCharFormat& char_format); diff --git a/src/fileformats/odt_writer.cpp b/src/fileformats/odt_writer.cpp index ddfa238d..d59283ed 100644 --- a/src/fileformats/odt_writer.cpp +++ b/src/fileformats/odt_writer.cpp @@ -35,9 +35,9 @@ OdtWriter::OdtWriter() //----------------------------------------------------------------------------- -bool OdtWriter::write(const QString& filename, QTextDocument* document) +bool OdtWriter::write(QIODevice* device, const QTextDocument* document) { - QtZipWriter zip(filename); + QtZipWriter zip(device); if (zip.status() != QtZipWriter::NoError) { return false; } @@ -69,7 +69,7 @@ bool OdtWriter::write(const QString& filename, QTextDocument* document) //----------------------------------------------------------------------------- -QByteArray OdtWriter::writeDocument(QTextDocument* document) +QByteArray OdtWriter::writeDocument(const QTextDocument* document) { QByteArray data; QBuffer buffer(&data); @@ -101,7 +101,7 @@ QByteArray OdtWriter::writeDocument(QTextDocument* document) //----------------------------------------------------------------------------- -void OdtWriter::writeAutomaticStyles(QTextDocument* document) +void OdtWriter::writeAutomaticStyles(const QTextDocument* document) { m_xml.writeStartElement(QString::fromLatin1("office:automatic-styles")); @@ -214,7 +214,7 @@ void OdtWriter::writeTextStyle(const QTextCharFormat& format, const QString& nam //----------------------------------------------------------------------------- -void OdtWriter::writeBody(QTextDocument* document) +void OdtWriter::writeBody(const QTextDocument* document) { m_xml.writeStartElement(QString::fromLatin1("office:body")); m_xml.writeStartElement(QString::fromLatin1("office:text")); diff --git a/src/fileformats/odt_writer.h b/src/fileformats/odt_writer.h index c480b24f..5fd51326 100644 --- a/src/fileformats/odt_writer.h +++ b/src/fileformats/odt_writer.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013 Graeme Gott + * Copyright (C) 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,14 +40,14 @@ class OdtWriter return m_error; } - bool write(const QString& filename, QTextDocument* document); + bool write(QIODevice* device, const QTextDocument* document); private: - QByteArray writeDocument(QTextDocument* document); - void writeAutomaticStyles(QTextDocument* document); + QByteArray writeDocument(const QTextDocument* document); + void writeAutomaticStyles(const QTextDocument* document); void writeParagraphStyle(const QTextBlockFormat& format, const QString& name); void writeTextStyle(const QTextCharFormat& format, const QString& name); - void writeBody(QTextDocument* document); + void writeBody(const QTextDocument* document); private: QXmlStreamWriter m_xml; diff --git a/src/fileformats/rtf_writer.cpp b/src/fileformats/rtf_writer.cpp index 1b9c5e29..b32225d4 100644 --- a/src/fileformats/rtf_writer.cpp +++ b/src/fileformats/rtf_writer.cpp @@ -264,7 +264,7 @@ RtfWriter::RtfWriter(const QByteArray& encoding) : //----------------------------------------------------------------------------- -bool RtfWriter::write(QIODevice* device, QTextDocument* text, bool full) +bool RtfWriter::write(QIODevice* device, const QTextDocument* text, bool full) { if (m_codec == 0) { return false; diff --git a/src/fileformats/rtf_writer.h b/src/fileformats/rtf_writer.h index 80e05d7c..e96d6a7a 100644 --- a/src/fileformats/rtf_writer.h +++ b/src/fileformats/rtf_writer.h @@ -33,7 +33,7 @@ class RtfWriter QByteArray encoding() const; - bool write(QIODevice* device, QTextDocument* text, bool full = true); + bool write(QIODevice* device, const QTextDocument* text, bool full = true); private: void setCodec(QTextCodec* codec); From 6c211acd97f41a1723ea7f84daf0838e05d178d8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 29 Jun 2014 07:41:09 -0400 Subject: [PATCH 214/630] FIXED: Incorrect handling of mimetypes in copy-paste. --- src/document.cpp | 135 +++++++++++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 46 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 2ed75bb3..e69d2bb2 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -25,9 +25,12 @@ #include "dictionary_manager.h" #include "document_watcher.h" #include "document_writer.h" +#include "docx_reader.h" +#include "docx_writer.h" #include "format_manager.h" #include "highlighter.h" #include "odt_reader.h" +#include "odt_writer.h" #include "preferences.h" #include "rtf_reader.h" #include "rtf_writer.h" @@ -118,16 +121,54 @@ namespace bool TextEdit::canInsertFromMimeData(const QMimeData* source) const { - return QTextEdit::canInsertFromMimeData(source) || (source->hasFormat(QLatin1String("text/rtf")) && acceptRichText()); + return QTextEdit::canInsertFromMimeData(source) + || source->hasFormat(QLatin1String("text/rtf")) + || source->hasFormat(QLatin1String("text/richtext")) + || source->hasFormat(QLatin1String("application/rtf")) + || source->hasFormat(QLatin1String("application/vnd.oasis.opendocument.text")) + || source->hasFormat(QLatin1String("application/vnd.openxmlformats-officedocument.wordprocessingml.document")); } QMimeData* TextEdit::createMimeDataFromSelection() const { - QMimeData* mime = QTextEdit::createMimeDataFromSelection(); - QByteArray rtf = mimeToRtf(mime); - mime->setData(QLatin1String("text/rtf"), rtf); - mime->setData(QLatin1String("text/richtext"), rtf); - mime->setData(QLatin1String("application/rtf"), rtf); + QMimeData* mime = new QMimeData;; + + QTextDocument doc; + QTextCursor cursor(&doc); + cursor.insertFragment(textCursor().selection()); + + { + OdtWriter writer; + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + writer.write(&buffer, &doc); + buffer.close(); + mime->setData(QLatin1String("application/vnd.oasis.opendocument.text"), buffer.data()); + } + + { + DocxWriter writer; + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + writer.write(&buffer, &doc); + buffer.close(); + mime->setData(QLatin1String("application/vnd.openxmlformats-officedocument.wordprocessingml.document"), buffer.data()); + } + + { + RtfWriter writer; + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + writer.write(&buffer, &doc); + buffer.close(); + mime->setData(QLatin1String("text/rtf"), buffer.data()); + mime->setData(QLatin1String("text/richtext"), buffer.data()); + mime->setData(QLatin1String("application/rtf"), buffer.data()); + } + + mime->setData(QLatin1String("text/html"), doc.toHtml("utf-8").toUtf8()); + mime->setText(doc.toPlainText()); + return mime; } @@ -137,49 +178,51 @@ namespace return; } - if (acceptRichText()) { - QTextDocument document; - int formats = document.allFormats().size(); - QTextCursor cursor = m_document->isRichText() ? textCursor() : QTextCursor(&document); - - QByteArray richtext; - if (source->hasFormat(QLatin1String("text/rtf"))) { - richtext = source->data(QLatin1String("text/rtf")); - } else if (source->hasFormat(QLatin1String("text/richtext"))) { - richtext = source->data(QLatin1String("text/richtext")); - } else if (source->hasFormat(QLatin1String("application/rtf"))) { - richtext = source->data(QLatin1String("application/rtf")); - } else if (source->hasFormat(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\""))) { - richtext = source->data(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\"")); - } else if (source->hasFormat(QLatin1String("application/vnd.oasis.opendocument.text"))) { - QBuffer buffer; - buffer.setData(source->data(QLatin1String("application/vnd.oasis.opendocument.text"))); - buffer.open(QIODevice::ReadOnly); - OdtReader reader; - reader.read(&buffer, cursor); - } else if (source->hasHtml()) { - richtext = mimeToRtf(source); - } else { - QTextEdit::insertFromMimeData(source); - return; - } + QTextDocument document; + int formats = document.allFormats().size(); + QTextCursor cursor = m_document->isRichText() ? textCursor() : QTextCursor(&document); + + QByteArray richtext; + if (source->hasFormat(QLatin1String("application/vnd.oasis.opendocument.text"))) { + QBuffer buffer; + buffer.setData(source->data(QLatin1String("application/vnd.oasis.opendocument.text"))); + buffer.open(QIODevice::ReadOnly); + OdtReader reader; + reader.read(&buffer, cursor); + } else if (source->hasFormat(QLatin1String("application/vnd.openxmlformats-officedocument.wordprocessingml.document"))) { + QBuffer buffer; + buffer.setData(source->data(QLatin1String("application/vnd.openxmlformats-officedocument.wordprocessingml.document"))); + buffer.open(QIODevice::ReadOnly); + DocxReader reader; + reader.read(&buffer, cursor); + } else if (source->hasFormat(QLatin1String("text/rtf"))) { + richtext = source->data(QLatin1String("text/rtf")); + } else if (source->hasFormat(QLatin1String("text/richtext"))) { + richtext = source->data(QLatin1String("text/richtext")); + } else if (source->hasFormat(QLatin1String("application/rtf"))) { + richtext = source->data(QLatin1String("application/rtf")); + } else if (source->hasFormat(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\""))) { + richtext = source->data(QLatin1String("application/x-qt-windows-mime;value=\"Rich Text Format\"")); + } else if (source->hasHtml()) { + richtext = mimeToRtf(source); + } else { + QTextEdit::insertFromMimeData(source); + return; + } - if (!richtext.isEmpty()) { - RtfReader reader; - QBuffer buffer(&richtext); - buffer.open(QIODevice::ReadOnly); - reader.read(&buffer, cursor); - buffer.close(); - } + if (!richtext.isEmpty()) { + RtfReader reader; + QBuffer buffer(&richtext); + buffer.open(QIODevice::ReadOnly); + reader.read(&buffer, cursor); + buffer.close(); + } - if (!m_document->isRichText()) { - if (document.allFormats().size() > formats) { - m_document->setRichText(true); - } - textCursor().insertFragment(QTextDocumentFragment(&document)); + if (!m_document->isRichText()) { + if (document.allFormats().size() > formats) { + m_document->setRichText(true); } - } else { - QTextEdit::insertFromMimeData(source); + textCursor().insertFragment(QTextDocumentFragment(&document)); } } From 1676165f5c04f6da604557f5705fb16904ede7d4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 15 Jul 2014 08:34:20 -0400 Subject: [PATCH 215/630] FIXED: Finnish spellchecking did not work in Windows. --- src/spelling/dictionary_provider_voikko.cpp | 28 +++++++++------------ 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/spelling/dictionary_provider_voikko.cpp b/src/spelling/dictionary_provider_voikko.cpp index 3fc15ac4..e255e946 100644 --- a/src/spelling/dictionary_provider_voikko.cpp +++ b/src/spelling/dictionary_provider_voikko.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013 Graeme Gott + * Copyright (C) 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -217,24 +217,20 @@ DictionaryProviderVoikko::DictionaryProviderVoikko() return; } - QLibrary voikko_lib("libvoikko"); - if (!voikko_lib.load()) { + QString lib = "libvoikko"; #ifdef Q_OS_WIN - QLibrary voikko_lib; - QStringList dictdirs = QDir::searchPaths("dict"); - foreach (const QString dictdir, dictdirs) { - voikko_lib.setFileName(dictdir + "/libvoikko-1.dll"); - if (voikko_lib.load()) { - f_voikko_path = QFile::encodeName(QFileInfo(voikko_lib.fileName()).path()); - break; - } + QStringList dictdirs = QDir::searchPaths("dict"); + foreach (const QString dictdir, dictdirs) { + lib = dictdir + "/libvoikko-1.dll"; + if (QLibrary(lib).load()) { + f_voikko_path = QFile::encodeName(QDir::toNativeSeparators(QFileInfo(lib).path())); + break; } - if (!voikko_lib.isLoaded()) { - return; - } -#else - return; + } #endif + QLibrary voikko_lib(lib); + if (!voikko_lib.load()) { + return; } voikkoInit = (VoikkoInitFunction) voikko_lib.resolve("voikkoInit"); From d5932cf50625646626153e6d5cc623fc76deecae Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 19 Jul 2014 05:29:37 -0400 Subject: [PATCH 216/630] FIXED: Windows installer did not install shortcut for all users. --- resources/windows/installer.nsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 03dd6bcd..d54dd3fb 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -274,10 +274,12 @@ Section "install" WriteUninstaller "$INSTDIR\Uninstall.exe" ;Create shortcut + SetShellVarContext all !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$StartMenuFolder" CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${APPNAME}.lnk" "$INSTDIR\FocusWriter.exe" !insertmacro MUI_STARTMENU_WRITE_END + SetShellVarContext current SectionEnd @@ -334,8 +336,10 @@ Section "Uninstall" RMDir $INSTDIR ;Remove shortcut + SetShellVarContext all !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder Delete "$SMPROGRAMS\$StartMenuFolder\${APPNAME}.lnk" RMDir "$SMPROGRAMS\$StartMenuFolder" + SetShellVarContext current SectionEnd From 21c23f6918c3f1daa478275d0d782d139c3ce6e1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 20 Jul 2014 08:05:01 -0400 Subject: [PATCH 217/630] FIXED: Regression with RtfWriter encoding characters in Windows. --- src/fileformats/rtf_writer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileformats/rtf_writer.cpp b/src/fileformats/rtf_writer.cpp index b32225d4..cfdce42c 100644 --- a/src/fileformats/rtf_writer.cpp +++ b/src/fileformats/rtf_writer.cpp @@ -386,7 +386,7 @@ QByteArray RtfWriter::fromUnicode(const QString& string) const } encoded = m_codec->fromUnicode(i, 1, &state); - if (state.invalidChars == 0) { + if ((state.invalidChars == 0) && (encoded.at(0) != 0)) { if (encoded.count() == 1 && encoded.at(0) >= 0x20) { text += encoded; } else { From 29b1ef9e4d45c0d7acfd9cd93c42dfc1f011819a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 20 Jul 2014 09:36:54 -0400 Subject: [PATCH 218/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 13 ++ resources/unix/focuswriter.desktop | 2 +- resources/unix/po/fr.po | 19 +- resources/unix/po/ko.po | 19 +- resources/unix/po/pl.po | 7 +- resources/unix/po/pt_BR.po | 18 +- translations/focuswriter_ar.ts | 36 ++-- translations/focuswriter_ca.ts | 36 ++-- translations/focuswriter_cs.ts | 36 ++-- translations/focuswriter_da.ts | 36 ++-- translations/focuswriter_de.ts | 36 ++-- translations/focuswriter_el.ts | 36 ++-- translations/focuswriter_en.ts | 36 ++-- translations/focuswriter_en_GB.ts | 36 ++-- translations/focuswriter_es.ts | 36 ++-- translations/focuswriter_es_MX.ts | 36 ++-- translations/focuswriter_fi.ts | 36 ++-- translations/focuswriter_fr.qm | Bin 29772 -> 37216 bytes translations/focuswriter_fr.ts | 250 ++++++++++++------------- translations/focuswriter_he.qm | Bin 30097 -> 30089 bytes translations/focuswriter_he.ts | 54 +++--- translations/focuswriter_hu.ts | 36 ++-- translations/focuswriter_hy.ts | 36 ++-- translations/focuswriter_id.ts | 36 ++-- translations/focuswriter_it.ts | 36 ++-- translations/focuswriter_ja.ts | 36 ++-- translations/focuswriter_ko.qm | Bin 26270 -> 29083 bytes translations/focuswriter_ko.ts | 144 +++++++------- translations/focuswriter_nl.ts | 36 ++-- translations/focuswriter_pl.qm | Bin 28695 -> 28764 bytes translations/focuswriter_pl.ts | 38 ++-- translations/focuswriter_pt.ts | 36 ++-- translations/focuswriter_pt_BR.qm | Bin 29192 -> 36478 bytes translations/focuswriter_pt_BR.ts | 216 ++++++++++----------- translations/focuswriter_ro.ts | 36 ++-- translations/focuswriter_ru.ts | 36 ++-- translations/focuswriter_sk.ts | 36 ++-- translations/focuswriter_sr.ts | 36 ++-- translations/focuswriter_sv.ts | 36 ++-- translations/focuswriter_tr.ts | 36 ++-- translations/focuswriter_uk.ts | 36 ++-- translations/focuswriter_vi.ts | 36 ++-- translations/focuswriter_zh_CN.ts | 36 ++-- translations/focuswriter_zh_TW.ts | 36 ++-- 44 files changed, 919 insertions(+), 869 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index b8e66854..355f6bc5 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -8,11 +8,15 @@ Επεξεργαστής κειμένου σε πλήρης οθόνη Procesador de palabras en pantalla completa Koko näytön tekstinkäsittelyohjelma + Traitement de texte plein écran מעבד תמלילים במסך מלא Լիէկրան տեքստային խմբագրիչ フルスクリーン・ワードプロセッサ + 풀스크린 워드 프로세서 Schermvullende tekstverwerker + Pełnoekranowy edytor tekstu Processador de textos em ecrã completo + Processador de texto em tela cheia Procesor de text pe tot ecranul Обрађивач текста у пуном екрану Ordbehandlare med helskärmsläge @@ -24,10 +28,13 @@

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

FocusWriter es un procesador de palabras simple y sin distractores. Éste utiliza una interfaz aislada que puede ser accedida moviendo el ratón a las esquinas de la pantalla, permitiendo que el programa tener una apariencia similar a cuando uno se aparta de todo y se puede concentrar sólo en su trabajo.

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

+

FocusWriter est un traitement de texte simple et non intrusif. Il utilise une interface masquée, accessible en déplaçant votre souris vers les coins de l'écran, ce qui confère au programme un aspect convivial tout en restant discret afin que vous puissiez vous plonger dans votre travail.

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

+

포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니다.

Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersinterface totdat de muis naar de rand van het scherm geschoven wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in staan om complete focus te hebben op het werk

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

+

FocusWriter é um simples, processador de texto simples livre de distrações. Ele Ele utiliza uma interface oculta, acessível ao mover o mouse para os cantos da interface da tela, o que dá ao programa um olhar amigável, mantendo-se discreto, assim você pode mergulhar em seu trabalho.

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

@@ -37,10 +44,13 @@

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

FocusWriter permite personalizar su ambiente creado temas que controlan la fuente, los colores y la imagen de fondo para crear un ambiente. Otras características son que actualiza en tiempo real estadísticas, metas diarias, abre múltiples documentos, verifica ortografía y mucho más.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka vaihtavat fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

+

FocusWriter vous permet de personnaliser votre environnement en créant des thèmes composés de polices, de couleurs et d'images d'arrière-plan afin d'agrémenter votre interface. Il inclut également des statistiques mises à jour à la volée, des objectifs quotidiens, l'ouverture de documents multiples, une vérification orthographique, et bien plus encore.

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

+

포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등과 그 외에 아주 많은 기능을 갖고 있습니다.

Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, meerdere open documenten, spellingscorrectie en nog veel meer.

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

+

FocusWriter permite que você personalize o seu ambiente, criando temas que controlam a fonte, cores, e imagem de fundo para adicionar ao ambiente. Também possui rápida atualização de estatísticas, metas diárias, vários documentos abertos, verificação ortográfica e muito mais.

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

@@ -50,10 +60,13 @@

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

Además, cuando se abre el programa, su trabajo actual se cargará y la posición en la que dejó la última vez para que pueda continuar inmediatamente.

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

+

De plus, lorsque vous lancez le programme, votre travail en cours sera automatiquement chargé et vous vous retrouverez là où vous vous étiez arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage.

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

+

그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다.

Daar bovenop laadt het programma je huidige onderhande werk en laat het zien op de locatie waar je gebleven bent zodat je direct verder kunt

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

+

Além disso, quando você abrir o programa seu trabalho atual em andamento irá automaticamente carregar e posicioná-lo onde você parou de modo que você pode pular imediatamente de volta nele.

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index e488c9e9..c69de640 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -67,7 +67,7 @@ Comment[hu]=Írjon zavartalanul Comment[hy]=Գրիր առանց ուշադրության շեղման Comment[id]=Menulis tanpa gangguan Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです -Comment[ko]=타이핑하는 부분에 집중해서 글을 쓸 수 있는 +Comment[ko]=글쓰기에 집중할 수 있는 Comment[nl]=Schrijf zonder afleiding Comment[pl]=Pisz bez zakłóceń Comment[pt]=Escreva sem distrações diff --git a/resources/unix/po/fr.po b/resources/unix/po/fr.po index cbce4626..73d87499 100644 --- a/resources/unix/po/fr.po +++ b/resources/unix/po/fr.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Yannick Le Guen , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-03-25 21:47+0000\n" -"Last-Translator: Graeme Gott \n" +"PO-Revision-Date: 2014-07-04 15:09+0000\n" +"Last-Translator: Yannick Le Guen \n" "Language-Team: French (http://www.transifex.com/projects/p/focuswriter/" "language/fr/)\n" "Language: fr\n" @@ -20,7 +21,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 msgid "Fullscreen word processor" -msgstr "" +msgstr "Traitement de texte plein écran" #: ../focuswriter.appdata.xml.in.h:2 msgid "" @@ -29,6 +30,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter est un traitement de texte simple et non intrusif. Il utilise " +"une interface masquée, accessible en déplaçant votre souris vers les coins " +"de l'écran, ce qui confère au programme un aspect convivial tout en restant " +"discret afin que vous puissiez vous plonger dans votre travail." #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -37,6 +42,11 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter vous permet de personnaliser votre environnement en créant des " +"thèmes composés de polices, de couleurs et d'images d'arrière-plan afin " +"d'agrémenter votre interface. Il inclut également des statistiques mises à " +"jour à la volée, des objectifs quotidiens, l'ouverture de documents " +"multiples, une vérification orthographique, et bien plus encore." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -44,6 +54,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"De plus, lorsque vous lancez le programme, votre travail en cours sera " +"automatiquement chargé et vous vous retrouverez là où vous vous étiez " +"arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage." #: ../focuswriter.desktop.in.h:1 msgid "FocusWriter" diff --git a/resources/unix/po/ko.po b/resources/unix/po/ko.po index 4a06782e..dc0f0ee3 100644 --- a/resources/unix/po/ko.po +++ b/resources/unix/po/ko.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# 박정규(Jung Kyu Park) , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-03-25 21:48+0000\n" -"Last-Translator: Graeme Gott \n" +"PO-Revision-Date: 2014-06-26 15:33+0000\n" +"Last-Translator: 박정규(Jung Kyu Park) \n" "Language-Team: Korean (http://www.transifex.com/projects/p/focuswriter/" "language/ko/)\n" "Language: ko\n" @@ -20,7 +21,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 msgid "Fullscreen word processor" -msgstr "" +msgstr "풀스크린 워드 프로세서" #: ../focuswriter.appdata.xml.in.h:2 msgid "" @@ -29,6 +30,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스" +"를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 " +"모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니" +"다." #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -37,6 +42,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 " +"작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용" +"할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등" +"과 그 외에 아주 많은 기능을 갖고 있습니다. " #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -44,6 +53,8 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으" +"로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다." #: ../focuswriter.desktop.in.h:1 msgid "FocusWriter" @@ -55,4 +66,4 @@ msgstr "풀스크린 워드 프로세서" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "타이핑하는 부분에 집중해서 글을 쓸 수 있는" +msgstr "글쓰기에 집중할 수 있는 " diff --git a/resources/unix/po/pl.po b/resources/unix/po/pl.po index 7ededffb..efb39a47 100644 --- a/resources/unix/po/pl.po +++ b/resources/unix/po/pl.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Łukasz Jurczak , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-03-25 21:48+0000\n" -"Last-Translator: Graeme Gott \n" +"PO-Revision-Date: 2014-07-08 19:33+0000\n" +"Last-Translator: Łukasz Jurczak \n" "Language-Team: Polish (http://www.transifex.com/projects/p/focuswriter/" "language/pl/)\n" "Language: pl\n" @@ -21,7 +22,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 msgid "Fullscreen word processor" -msgstr "" +msgstr "Pełnoekranowy edytor tekstu" #: ../focuswriter.appdata.xml.in.h:2 msgid "" diff --git a/resources/unix/po/pt_BR.po b/resources/unix/po/pt_BR.po index e5815390..36300b93 100644 --- a/resources/unix/po/pt_BR.po +++ b/resources/unix/po/pt_BR.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lorram Lomeu de Souza Rampi , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-03-25 21:48+0000\n" -"Last-Translator: Graeme Gott \n" +"PO-Revision-Date: 2014-07-16 22:27+0000\n" +"Last-Translator: Lorram Lomeu de Souza Rampi \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" "focuswriter/language/pt_BR/)\n" "Language: pt_BR\n" @@ -20,7 +21,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 msgid "Fullscreen word processor" -msgstr "" +msgstr "Processador de texto em tela cheia" #: ../focuswriter.appdata.xml.in.h:2 msgid "" @@ -29,6 +30,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter é um simples, processador de texto simples livre de distrações. " +"Ele Ele utiliza uma interface oculta, acessível ao mover o mouse para os " +"cantos da interface da tela, o que dá ao programa um olhar amigável, " +"mantendo-se discreto, assim você pode mergulhar em seu trabalho." #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -37,6 +42,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter permite que você personalize o seu ambiente, criando temas que " +"controlam a fonte, cores, e imagem de fundo para adicionar ao ambiente. " +"Também possui rápida atualização de estatísticas, metas diárias, vários " +"documentos abertos, verificação ortográfica e muito mais." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -44,6 +53,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Além disso, quando você abrir o programa seu trabalho atual em andamento irá " +"automaticamente carregar e posicioná-lo onde você parou de modo que você " +"pode pular imediatamente de volta nele." #: ../focuswriter.desktop.in.h:1 msgid "FocusWriter" diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 4b144df0..53257284 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -148,81 +148,81 @@ Document - + (Untitled %1) (%1 غير معنون) - + %1 (Read-Only) - - + - + + Sorry معـذرة! - + Unable to save '%1'. لا يمكن حفظ '%1'. - + Save File As حفظ باسم - + Unable to overwrite '%1'. لا يمكن الكتابة على '%1'. - + Rename File تسمية الملف مجددا - + Unable to rename '%1'. لا يمكن إعادة تسمية '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload تحديـث - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -1706,7 +1706,7 @@ - + Opening %1 فتـح %1 diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index fb44f629..177f3031 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Sense títol %1) - + %1 (Read-Only) %! (Només lectura) - - + - + + Sorry Disculpes - + Unable to save '%1'. No s'ha pogut desar '%1'. - + Save File As Anomena i desa - + Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - + Rename File Reanomena el fitxer - + Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - + Reload File? Voleu recarregar el fitxer? - + Reload the file '%1' from disk? Voleu recarregar el fitxer '%1' des del disc? - + All unsaved changes will be lost. Es perdran tots els canvis. - + Reload Torna a carregar - + Untitled %1 Sense títol %1 - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? @@ -1688,7 +1688,7 @@ Paraules: %L1 - + Opening %1 'està obrint %1 diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index d2dbdfc1..9c17c8c0 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez názvu %1) - + %1 (Read-Only) %1 (pouze pro čtení) - - + - + + Sorry Promiňte - + Unable to save '%1'. Nelze uložit '%1'. - + Save File As Uložit soubor jako - + Unable to overwrite '%1'. Nelze přepsat '%1'. - + Rename File Přejmenovat soubor - + Unable to rename '%1'. Nelze přejmenovat '%1'. - + Reload File? Nahrát soubor znovu? - + Reload the file '%1' from disk? Nahrát soubor '%1' znovu z disku? - + All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - + Reload Nahrát znovu - + Untitled %1 Bez názvu %1 - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? @@ -1688,7 +1688,7 @@ Slova: %L1 - + Opening %1 Otevírá se %1 diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index a7f8f799..bac353d9 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Uden titel%1) - + %1 (Read-Only) - - + - + + Sorry Beklager - + Unable to save '%1'. Det er ikke muligt at gemme '%1'. - + Save File As Gem fil som - + Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - + Rename File Omdøb fil - + Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - + Reload Genindlæs - + Untitled %1 Uden titel %1 - + Question Spørgsmål - + Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? @@ -1682,7 +1682,7 @@ Ord: %L1 - + Opening %1 Åbner %1 diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index e8a55f6e..5f35f2f0 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Unbenannt %1) - + %1 (Read-Only) %1 (Schreibgeschützt) - - + - + + Sorry Entschuldigung - + Unable to save '%1'. '%1' kann nicht gespeichert werden. - + Save File As Datei speichern unter - + Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - + Rename File Datei umbenennen - + Unable to rename '%1'. '%1' kann nicht umbenannt werden. - + Reload File? Datei neu laden? - + Reload the file '%1' from disk? Datei '%1' von der Festplatte neu laden? - + All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - + Reload Neu laden - + Untitled %1 Unbenannt %1 - + Question Frage - + Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? @@ -1682,7 +1682,7 @@ Wörter: %L1 - + Opening %1 Datei %1 wird geöffnet diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 6ad9a92d..0f0a8ba2 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Χωρίς τίτλο %1) - + %1 (Read-Only) - - + - + + Sorry Λυπούμαστε - + Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το «%1». - + Save File As Αποθήκευση Αρχείου Ως - + Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το «%1». - + Rename File Μετονομασία Αρχείου - + Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το «%1». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. - + Reload Επαναφόρτωση - + Untitled %1 Χωρίς τίτλο %1 - + Question Ερώτηση - + Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; @@ -1682,7 +1682,7 @@ Λέξεις: %L1 - + Opening %1 Ανοίγει το %1 diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 7fd77d11..38f931fa 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) - + %1 (Read-Only) - - + - + + Sorry - + Unable to save '%1'. - + Save File As - + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -1682,7 +1682,7 @@ - + Opening %1 diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 4950f374..6767dbe6 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Untitled %1) - + %1 (Read-Only) - - + - + + Sorry Sorry - + Unable to save '%1'. Unable to save '%1'. - + Save File As Save File As - + Unable to overwrite '%1'. Unable to overwrite '%1'. - + Rename File Rename File - + Unable to rename '%1'. Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. All unsaved changes will be lost. - + Reload Reload - + Untitled %1 Untitled %1 - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? Saving as plain-text will discard all formatting. Discard formatting? @@ -1682,7 +1682,7 @@ Words: %L1 - + Opening %1 Opening %1 diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index a2274ee3..1bfea3ab 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sin título %1) - + %1 (Read-Only) - - + - + + Sorry Aviso - + Unable to save '%1'. No se puede guardar «%1». - + Save File As Guardar archivo como - + Unable to overwrite '%1'. No se puede sobrescribir «%1». - + Rename File Renombrar el archivo - + Unable to rename '%1'. No se puede renombrar «%1». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Se perderán todos los cambios no guardados. - + Reload Volver a cargar - + Untitled %1 Sin título %1 - + Question Confirmación - + Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? @@ -1682,7 +1682,7 @@ Palabras: %L1 - + Opening %1 Abriendo %1 diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 788efcac..cdcc02af 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sin título %1) - + %1 (Read-Only) - - + - + + Sorry Lo siento - + Unable to save '%1'. No se puede guardar '%1'. - + Save File As Guardar archivo como - + Unable to overwrite '%1'. No se puede sobreescribir '%1'. - + Rename File Renombrar archivo - + Unable to rename '%1'. No se puede renombrar '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Todos los cambios se perderán. - + Reload Volver a cargar - + Untitled %1 Sin título %1 - + Question Pregunta - + Saving as plain text will discard all formatting. Discard formatting? Guardar como texto plano descartará cualquier formato, ¿descartar formato? @@ -1682,7 +1682,7 @@ Palabras: %L1 - + Opening %1 Abriendo %1 diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index b183e6d9..aced0e28 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Nimetön %1) - + %1 (Read-Only) %1 (vain luku) - - + - + + Sorry Virhe - + Unable to save '%1'. Tiedoston ”%1” tallentaminen epäonnistui. - + Save File As Tallenna tiedosto nimellä - + Unable to overwrite '%1'. Tiedoston ”%1” korvaaminen epäonnistui. - + Rename File Nimeä tiedosto uudelleen - + Unable to rename '%1'. Tiedoston ”%1” uudelleennimeäminen epäonnistui. - + Reload File? Ladataanko tiedosto uudelleen? - + Reload the file '%1' from disk? Ladataanko tiedosto ”%1” uudelleen levyltä? - + All unsaved changes will be lost. Kaikki tallentamattomat muutokset menetetään. - + Reload Lataa uudelleen - + Untitled %1 Nimetön %1 - + Question Kysymys - + Saving as plain text will discard all formatting. Discard formatting? Pelkkänä tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? @@ -1682,7 +1682,7 @@ Sanoja: %L1 - + Opening %1 Avataan %1 diff --git a/translations/focuswriter_fr.qm b/translations/focuswriter_fr.qm index f3e5d484ed92ec7df4d44fb64ab1ad469b96f4c7..509dd6cb1ffa8a436477365594c12cb40359e834 100644 GIT binary patch delta 9017 zcmbVR3tUuX+JEMLpW!AK<#JGwn}DdPkcz^Hf(QtB0TmsX0}Ku`I5ViAHl?+B?{d1B zYj*jz)O1@5*HYWE)LN|-H!aisG|k+?b*(n5%~sw2dkzfP#c%if`5T@&XWsL?&+~u& z&*eS7_qpucvvU9FSM8BUzS#8WpW>t6nD@*d&g2pqza&y55Xs*pQa(=Pgq-*rqVUfp z+4p;*g7LWjBvFw7nMO1<6KgjURlGxVr&W>_zmw$bVxqG?qCS^Mz6E-64v~Bp*3JDb z$^E~78(;pHlv_>^&7VWceM+M83`th1NqG#)g50D^#qR~%NHu)|(ZE@d&k;q=Ce@Cs zM8%gV<*|W8bE+xj`BunRD23^%UPvj&;7IlJkkDhfMk$wvV80SdT?6B6)5)K@77J~I zD0Rajq8bII9>fp!zBDf4ERjB$CMB&SnrWuO)a68DN7Ce}eTX9V(&Sg?5+%3N6uymU z(z8_h;0Httj#Bx-6r##Hs#vj_$a+SSh4<6+Ww@T~rJ2`Z@RS6qay&t#`@t`L3H?rz zgFlnx7%bQi%hQh0Ecq^?l4~?e0R>gLG+PZ>njy(5H_hIbLNwqRnrj*h2bNH+ayU`l z6_fHbH+d_ zK9%|2c$H|`BH6Mnzb2Xo@wEKW&Ch{TkIOe_7ZMFlmv4FOAPi2GzcAua z^3$A^^55@$7Lf7s-K(*1o>#uFZWvMR%kq5!JaLVepU6ok8eSv+;4K)iV2S+nh5khK zpUclC+K6U^$iMnK3|X{Xe*I7=ejlt*z5_#sr7J>`)&toAior(c)s9vS-`0tJUQ&#_ zahNEnMv?XISwCX3MN!QxteB@*c@8lvj8Z&0?*c6TtKx}CP&j3}Vq4;QZ1kpLCk;fp zO;zli0mXBJ6+7201#;UI`%m5^(o9yo`!6#LZ&JMf{x?LbF^cmKZ6?ZlM)9c`4o1&W zeB=FsXx4V6e$PJ;nrda(JU=X7x>Y&h=^&yzB9v7t!iYwEsC2eGh&1c3Y;~?C%70JU zwzHb3@2`~p6WDmvqsn_u9R>8iQm!3=&`s1TA6~tKXq;0iR1F}SuuJ)fX&=$T4&{b| z*KmKA^7#=}SofuJ`})g74evr;f&8a(yMO&vBHD}_*N7YmkRYR@4DvdpU%CAO8RQN~ zIpirwc-XiU5@c=M1_{nIeh4`j^+N%PVl;nsP z92Bh&mHu6OYlzymDtGTmKw3O0$w^7dJ+di8Lx(E&+*Oaf{f+XiCu0$Fzw(cpUD#l? zvZDb7gl3od0vzi?T!Am(q!{A692< z!tc&c)I(RmGs;$vx>k&W@~t{saTTE%p)NQL#j1zZg+D-69#GG^iaa0rg}Qnw)=#QZ zJ40Vbddt*J>rcRt7u0R$7m)vxv(y{E0raWUAQ79f`_)?oK(5GEzwHbI0*BS_twx&V zZdIRs1%{2Cul_FnG}5$4{jZlH(|2kVDM+`N8Jdvqf>Ak@ngN|Yczi{Z+NL7%Y}8~N z=V5P!B+I_mSXX`leWWQncHEEjdO+j+8w`k>scACZi^}&;P4i{seSVc@vHvF0C{eTV z_kg}BL$h6t`+Z;6?06gLm{Y9TSEnFq{*&fH{3RG*)@ru`^2OoW=$nhcogvzx|3Kc) z%F<>ngMmTMYA0r0L1?12#V_N!|5&_1#(mgt^&+Krash}|gd^QA~j*Js)TTC`o+ChdXpM~GU!(!P@b zE(HzOzLR(eP3WZd$U!BzVbh-Y6pm(Jk)%hh{n{V(KAOooo%{eGiyf#_&Atl;T+)T* zeoYkCp$mU=EJ~|Y$6W_9c~f=$nam+wLiH*9o~WzZ4^Ikr>lPXiGBnh-_5&!jt92{d zj-q`(u3Mcxj3~2Ax1sPLy5oM`<{4%TD2pZOsnGeiX)Yk`F6#cUas{At>0ZCE5oyz* zJMzSOqSjA!SB~C~wtHN6Grbx}*mFF%eR(Q2@$1|XCx4Z{jik`?O>MbD&TzY~VKBp{#Z*BKlgXrC(z4U4kw z0Xf!5GQXc;aTxM7_ljXj{}y=kpy9bsiox#fhMhY#sFWuS2cjQBQ?eP3Y(Gn+{);4o zb0wL$Ns@QIEy-zvBw6{8Bxm1k_;Y6`5DQ;w=p3Jne*UGQvw0fG^_Ee&5m0&FH)^dq z6rR5r!}`Fp%Hfi%+Gq?Li|bi#BX;^NC2{L_G1?19IX65c{sI=wgkkkI7n05=zVSX1zEu}ekE1|H4}#ZdUT z<-7hsA|lH2-RkwIT$e4^jC+7YsDtRizDH>`s0m>l6$cIRIh=;sWglTBtc~e3rH^^nT zc^mHJ5{CMjuF&4_d#w(e(_JsdfZ5LC-bil71co`Yz1OW?aOe_ToZZ&i1@tfKU3lhmKtm0Dr!CmaOv%KNz-8Lsv6mm-(i)=N#Qw-xkvQj72 ziOI`o!8A$wY@$atc-7;Rv7GmDMK)J`i>;n#YJ;qfTA#!1vUys&yeVc(kjex{Nhl6{ zR|Fa5SlQr#65As=;H(+6ODf}S_Oue0vsKJ`t<_!I(uDX5=M1ZYd6>c;uZNjl(7_|L z89z`ArZT}0oRS*QV=UvHZkwIUcR2YRW?evw=;}OieX?-FVl3n69E@p37(HG2z<_MQ zJ-fKa0v1YK;1Uxu6S+E%yNRfURj2w-~v|=H+S|5ViJwp+}YRgJ}vL^ohh}$g+CC z%wt3r!y|C9eT40i3Bo-&VUrj&YN?@nO<)h*c&AfDTFf0&zT4Ae^G&h2Kn#xv_c*G+ zHr@Hb3(J}!giTHT`~eN2Ohb7~bFkxS%o*;5&mHIa5w$93VyNgXS6USVQ{cV zNevK0_Y0V!FLl}+uG>A&QCSzZTtE{?1^GbDgV@@7DGMrd)HaB^I0@)qFlhubZamDW z#m6O_iF{BtRM;DrCcHbw-2O^bhq}>9c~IX3_?YV~-C1mH)XjI6m_GcIlC@S`+a!Vn zg;>of*W+WqJa-F9FmHo#PTuF^JshZJ6ML5MOlm*jS6qc@5cTp%aAk+bKu>l6CySM@ zv$Z&VT%E|EZ1!CHY3>`@pfH*Qd|19SKpc{df#)=n9A2N>(<-j-=)YQ)n15@T7p-M8 zi33)*;KTAAgcPdn(aE=%5HrQ$ax}Fxam~_{;bpdTH5MT_F{Zt8;2D{0oWKtm8No^h zDq^qR7FG(%3oi{xZ67hHQ7#)HL?y*%B#IgHOST7<@lAYF4d80%aYA@HX>8eOaH10y zGpku%+E6MP22!j<`^Bi);89oSMG0WLwU8r#jiHS9qEJ`3(Q_F-5sg2uRxtOAaG@gt z4MqS~6dYnjk#g(**bYzil*dGAOR4GHf}@XF!TH==8}D)F2yYIF5zZxD2n~TrthqCe zu}QKPMeL*GW?72hp5I5{?Xf0fd4qdVR~Wovm?x#A$N=zzWBLhyjtf(XlxV*{H9{_H z5S~g)Gci;|>ccd_3>i08v1E}7rX5DR#QXT2)wD_MH>r}a)m>$v7eA6`cpN^St7*j_44Vjglg%@q zLv3glD})afhIJHSd~!_0SR_mDddq4=1?3A5H6>cp1M!V2cKeWK-azdvtH>9dQaY;( zx-wrK>!w|GI9*i9k{1n5hz|~(Y@>zniZ#AY*xsWyewvG4+|1Xa8e?+6SXJAAy3D)m zY%pg%PgHM&`U>}a-sM0*+h=9ouNoABA)*D@#keX}5>LQZowcRe>8Q2&ctMsGX-T?u zsn9&4uh5*O(+Bq~+c=UFrrC1^RaRL0sF6z*q2WKJO8epLIda)x6t}^GZOs3~%|q@> zJYwe(2OR7UDr=Yvh32TJK8zgGvvI4(Pi;xFt=8ddMPMSs zORfrt#9A0<7RlcFla-n> zo88gk71xDLX!TDQJ2~qVtn5fEVA`emwX4?wCFyAJ-?Jp9jM3u9G~x2x9vAQNYJ~W_ zus9Bpkh+sJPcuGt0v@kg4w86DW%VH1(+ zjgh{>R>RG3*nJJ6^Mmu#ttrTy|CaU^Hp+3m7>}s?ixK4}v1qdZvWC}P7FqtVd;h;2 z>-VG0IIG9q%#}CT?CwRZMjOPWvI@V>GYYfw?c)ZC$FN#>&yJQ7ofvtg(}{GyHzq;T zd5;fO)yZMvMXzVb^bh$7v^|tn2LMD;-VQv;XO^OM*xyB$#HjS7P4End3r_q9$N?ef zGQF1L@t(ak(j#K@_U9KSMPn?Xt zzhiR0k%2tM4!v4Bu6kyX5G#*ql;?0%Ym&}sInWe2@IPu&*ivVdY9RT9wG&@V3&(#` zu(_CZ4_3q&m%-M6vBrrgQaBKztnyyb}yWR+R+l{rA8rfKZYm5@c7zZZz1m09`TgY>H?5N9o#Ww(;J!7kQAYI=5 zgo4!~3_|QkUBznWLVVb^-8s*g&yHY{xjp*RME&AXn)kAi77P;yBk5&84UcmJMh7Qq zx~o1%nAZ5>==5KBzcNTnboS1uJKfXqKYTs2SPlAs zVTCa|o*mU4Fqlnp5|-$kxMoCUq!C{rRJP$8qm8$h=FCbr+JCnbiyVNqhUZ|jk8{*< ct?m{e?Mn10?FMOtMVekqt}Ti^!}PoNkAD1^=biU^-?KdDIp>=@?=qKv5NU&s zXIox;)bP&dc2;LH_Wr9clt|u6#O)%A+e;L&k4Rl;K;s=mks;XMNHkXfs_=iF$SvQ1 z(|Ikd=!j7zpTpoD9 zp*Oi!9!AiC-*A4uhT)VJ8XN0sfEc%h{2Ab`R>}JfMDA#hLDXBCk)(noL zX6HAJi>JxHw~O1>r%RlZ7;nIdxU z{g%kMOBCa^g(yH9A}T#|oG5FhXz!jhqFh^1+cO} zLqMSMcFc`VI8J!Rd^KQCH2(tA@03aOav1aYCj^krGS9nB@ccv8*trT!u&kRBc9_>$ zpXMRht!4u*^@F+3*)#;ArRndn%}#e=;1{-)9H3xNwskQs&KhQ0cWfXsJI-EurbYm< z?A_`{BA+SjcWMM^@|Ybic|?TSN0o;941G?B<}7FVO{AWDnj>LO2J|7-4m zUlK%E!?jdBAc|=LJ_OzZJ|Ut;;O|7SJP@^y^#VQzrgJTCiGbUI4DbXHi7ZF~LK_RV z0ky7Jv}5508~{#6e;RRzoG+pqmUD;PK%Hxf0fW{Wa7GK)c5(?c(!{l&aD@0`4LJ2O zcS1Ce$g!3?@#<2&xVX-LPC$v$xeJYju$#~IEJJ%zA=k48q71snUDXD55;<9M*9Si! z@*2a9#BU*zJmN)9LWq)f^X$e7%mZ(p(_ffg!1E12-vC}2ITP5#tG_)AYS-~$zaulR zPx;t0iA0tnzWk#qqRAP2WkVcM*nNJxZz(h|%YafRe*3I$i17Pc(fh*qA^7kt9VK_-F$r?vA<|VPz zssv&)5}RisfN4LAE$)7YT04lRG~jz&r`T%~0;NE)|L@W0=ZE4z_6aC97f1aOiNQ21 zPJV)JnsiuPU~(E0a8SIWsu%Xv;`(7QW-}ECMyK2ppDQp$;M!*K4xARFdwX>8}#>V z_er;n6cMRnr8OHNx}^!ydW{cJj)(L>4AdWgUV3(64FW2bo_9nEWf!F9ox0KgisjOa zT^y)(lJ(Rqm=9qRH zjyq&)6c8Uwm+8(zY(26~WmoVn_)%8j?oH&-E~|^`!YJP-Yh0{`pGG~R{}XS>nk56E z>=oJRfqIB=SoZMBRxrTJUburQ8P zrgOUGmrj8JADw)lEFCIskq?FUFEXE5imLXp>lcR^mL;+25cQNlY0^!re;))b=m-k?~owO@@4?ke_w z8%>nrrf6-IV4zeg&RSJtBnyg*E&ZT!i~;3e8qiv4K(_}540bSJ$XNr19Z_5x!mL*_ zilLB6L{=G!p`u05#7QMr4~CK!DoxFhNJy?yJGuzHtTYYA#>~A++b%eq{f5%-R2$x6 z2b95oJVecIDw8fdK<#PDoE9(<>Zi<$wnH~WDNA!Py3=EotC`af=OtzH#{x=tOnLGV zn2oYg-kfQLN%&0J*U2J~ZsnclBT$Hy0mn3J4GTwW<)dw=k!iT{S5E{WN>`42nS$Df zskoAl@G?57lHUr$K>1B&Ep(xF*((41CzzD6s<6bznC3yngF%~F^SoKK@=7mOUr0Tj51j^5;`s>t0(k#`}BrsvOTy6Z- z75vU~SDR`Jaj;GuU4Q_oM_v4r-tiu_HU#G~eASgQyzQJ_)Rj%yc-=OrcWkRcz!vJ- z!7V81Ep?y14YNf;-B&-)=fK<~nP%?R08FfDn#H#fng1?Lj?Hff z;JPO7a2!VOu%@K08H`vMaBi=rybh5&&DC^FE(1e5G@s2hf%vR7Pwf$~dXMI5MHS}8 zYk5d>y-uzgFA|vIKw*+e)R+>=q}8;Ba%d@5#gr{v7LBg5@hwO2Fb_A$#Hmc&%%+w2EYv^6{v_U(UM5@J z`{uWpzXznN9y^QC)mrW0##+)mTr5RMh5$+_Z`47Fu*A+?*P z02dK!PV^xbWkvsUaBZrU@L5nHyB5Fvv6jQDJvovm+3T{W z-(qxkLdtpFvxqNPGfP^4TUq#935JS+c~qjiJ13P91^yMGjoyz?8eK26&;Lyn{nxIo z?)#Wu7~w)(lhC@zSC|m*BOHq_5|S3@tIYqODme+}37*1{gpEQ$Vw7+{ah=A9LQqeA z4fI^+3FgVkiV&i)ekQX<5?(WslVHB=^f6J5ZtqCWwJguuN3 diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 4d618de2..dd424c4b 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -37,39 +37,39 @@ %1% of %Ln minute(s) - - - + + %1% sur %Ln minute + %1% sur %Ln minutes %1% of %Ln word(s) - - - + + %1% sur %Ln mot + %1% sur %Ln mots %Ln word(s) - - - + + %Ln mot + %Ln mots %Ln minute(s) - - - + + %Ln minute + %Ln minutes 0% - + 0% @@ -77,35 +77,35 @@ Daily Progress - + Progrès quotidien Longest streak - + Session la plus longue Current streak - + Session actuelle N/A - + N/A %n day(s) - - - + + %n jour + %n jours %1 &ndash; %2 - + %1 &ntiret; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% de l'objectif quotidien @@ -122,89 +122,89 @@ Set Language - + Définir le langage Document - + (Untitled %1) - (Sans titre %1) + (Sans titre %1) - + %1 (Read-Only) - + %1 (Lecture seule) - - + - + + Sorry Désolé - + Unable to save '%1'. Impossible d'enregistrer « %1 ». - + Save File As Enregistrer sous - + Unable to overwrite '%1'. Impossible d'écraser « %1 ». - + Rename File Renommer le fichier - + Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - + Reload File? - + Recharger le fichier ? - + Reload the file '%1' from disk? - + Recharger le fichier « %1 » à partir du disque ? - + All unsaved changes will be lost. - Toutes les modifications non sauvegardées seront perdues. + Toutes les modifications non enregistrées seront perdues. - + Reload Rechargement - + Untitled %1 - Sans titre %1 + Sans titre %1 - + Question Question - + Saving as plain text will discard all formatting. Discard formatting? - La sauvegarde en texte brut fera perdre toute mise en forme. Voulez-vous abandonner toute mise en forme ? + L'enregistrement en texte brut effacera toute mise en forme. Voulez-vous effacer la mise en forme ? @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - + Le fichier « %1 » a été modifié par un autre programme. @@ -247,7 +247,7 @@ Do you want to save or close the file? - Voulez-vous sauvegarder ou fermer le fichier ? + Voulez-vous enregistrer ou fermer le fichier ? @@ -255,7 +255,7 @@ Unable to open archive. - Impossible d'ouvrir l'archive. + Impossible d'ouvrir l'archive. @@ -278,7 +278,7 @@ Whole words only - Mots entiers + Mots entiers seulement @@ -351,32 +351,32 @@ OpenDocument Text - + Texte OpenDocument Office Open XML - + Office Open XML Rich Text Format - + Rich Text Format Plain Text - + Texte brut All Files - + Tous les fichiers All Supported Files - + Tous les fichiers pris en charge @@ -389,12 +389,12 @@ Check Spelling... - Vérification de l'orthographe... + Vérifier l'orthographe... (No suggestions found) - (Pas de suggestion trouvée) + (Aucune suggestion trouvée) @@ -438,7 +438,7 @@ Unable to open archive. - Impossible d'ouvrir l'archive. + Impossible d'ouvrir l'archive. @@ -466,7 +466,7 @@ Spell Checking - Orthographe + Vérification orthographique @@ -487,7 +487,7 @@ The archive does not contain a usable dictionary. - L'archive ne contient pas de dictionnaire utilisable. + L'archive ne contient aucun dictionnaire utilisable. @@ -509,7 +509,7 @@ The dictionary "%1" already exists. Do you want to replace it? - Le dictionnaire "%1" existe déjà. Voulez-vous le remplacer ? + Le dictionnaire « %1 » existe déjà. Voulez-vous le remplacer ? @@ -635,42 +635,42 @@ Reset daily progress for today to zero? - + Réinitialiser le progrès quotidien pour aujourd'hui ? Write byte order mark in plain text files - + Écrire l'ordre des octets dans des fichiers textes bruts Default format: - + Format par défaut : Reset Today - + Réinitialiser pour aujourd'hui History - + Historique Remember history - + Se souvenir de l'historique Show streaks - + Afficher les sessions Minimum progress for streaks: - + Progrès minimum pour les sessions : @@ -685,12 +685,12 @@ Count each letter as a word - + Compter chaque lettre comme un mot Page Count Algorithm - + Algorithme de comptage des pages @@ -750,7 +750,7 @@ Shortcut - Raccourcis + Raccourci @@ -800,7 +800,7 @@ Not a supported RTF file. - + Fichier RTF non pris en charge. @@ -808,7 +808,7 @@ Unexpectedly reached end of file. - + Fin du fichier avortée. @@ -897,7 +897,7 @@ Duplicate - + Dupliquer @@ -922,7 +922,7 @@ Duplicate Session - + Dupliquer la session @@ -991,7 +991,7 @@ Shortcut: - Raccourcis : + Raccourci : @@ -1012,7 +1012,7 @@ Check Spelling - Vérification de l'orthographe + Vérifier l'orthographe @@ -1067,12 +1067,12 @@ Continue checking at beginning of file? - + Poursuivre la vérification au début du fichier ? Spell check complete. - Vérification de l'orthographe terminée. + Vérification orthographique terminée. @@ -1139,7 +1139,7 @@ No Image - Pas d'image + Aucune image @@ -1156,12 +1156,12 @@ Stretched - Adaptée + Étendue Scaled - Agrandie + Mise à l'échelle @@ -1171,74 +1171,74 @@ Opacity: - + Opacité : Position: - + Position : Width: - + Largeur : Round Text Background Corners - + Coins arrondis pour l'arrière-plan du texte Radius: - + Rayon : Blur Text Background - + Estomper l'arrière-plan du texte Text Background Drop Shadow - + Ombre portée de l'arrière-plan du texte Vertical Offset: - + Décalage vertical : Margins - + Marges Window: - + Fenêtre : Page: - + Page : Indent first line - + Indenter la première ligne Above: - + Au-dessus : Below: - + Au-dessous : @@ -1248,12 +1248,12 @@ Edit Theme - + Éditer le thème Window Background - + Arrière-plan de la fenêtre @@ -1296,7 +1296,7 @@ Text Background - + Arrière-plan du texte @@ -1346,7 +1346,7 @@ Height: - + Hauteur : @@ -1356,12 +1356,12 @@ Tab Width: - + Largeur du retrait : New Theme - + Nouveau thème @@ -1374,54 +1374,54 @@ Default - Par défaut + Par défaut Gentle Blues - + Bleu tendre Old School - + Vieille école Space Dreams - + Rêves d'espace Writing Desk - + Secrétaire New - Nouveau + Nouveau Duplicate - + Dupliquer Custom - + Personnalisé Edit - Modifier + Éditer Delete - Supprimer + Supprimer @@ -1441,13 +1441,13 @@ Delete theme '%1'? - + Supprimer le thème « %1 » ? Themes (%1) - + Thèmes (%1) @@ -1682,7 +1682,7 @@ Mots : %L1 - + Opening %1 Ouverture de %1 @@ -1695,7 +1695,7 @@ List all documents - + Lister tous les documents @@ -1761,7 +1761,7 @@ '%1' is newer than the cached copy. - '%1' est plus récent que la copie présente en cache. + « %1 » est plus récent que la copie présente en cache. @@ -1771,17 +1771,17 @@ Save Changes? - + Enregistrer les modifications ? Save changes to the file '%1' before closing? - + Enregistrer les modifications du fichier « %1 » avant de fermer ? Your changes will be lost if you don't save them. - + Vos modifications seront perdues si vous ne les enregistrez pas. @@ -2096,7 +2096,7 @@ Set &Language... - + Définir le &langage ... @@ -2111,7 +2111,7 @@ &Daily Progress - + &Progrès quotidien diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index 4a3e6e4b97cf7f5ec69a9dc7c5184dc1e328464c..3b3ed00b9e573d88514896f17d324afc5d7a8732 100644 GIT binary patch delta 3241 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 delta 3241 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 diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 745de283..56ad9c84 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -122,87 +122,87 @@ Set Language - קבע שפה + קביעת שפה Document - + (Untitled %1) (ללא כותרת %1) - + %1 (Read-Only) %1 (קריאה-בלבד) - - + - + + Sorry צר לי - + Unable to save '%1'. אין אפשרות לשמור '%1'. - + Save File As שמירת קובץ בשם - + Unable to overwrite '%1'. אין אפשרות להחליף את '%1'. - + Rename File שינוי שם קובץ - + Unable to rename '%1'. אין אפשרות לשנות שם '%1'. - + Reload File? לטעון מחדש קובץ? - + Reload the file '%1' from disk? לטעון מחדש קובץ '%1' מתוך כונן? - + All unsaved changes will be lost. כל השינויים שלא נשמרו יאבדו. - + Reload טעינה מחדש - + Untitled %1 ללא כותרת %1 - + Question שאלה - + Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? @@ -897,7 +897,7 @@ Duplicate - שכפול + שכפל @@ -1406,7 +1406,7 @@ Duplicate - שכפול + שכפל @@ -1416,12 +1416,12 @@ Edit - עריכה + ערוך Delete - מחיקה + מחק @@ -1540,12 +1540,12 @@ Edit - עריכה + ערוך Delete - מחיקה + מחק @@ -1682,7 +1682,7 @@ מילים: %L1 - + Opening %1 ‫‭%1‬ נפתח כעת @@ -1746,7 +1746,7 @@ Restore from the emergency cache? - לשחזר מן מטמון חירום? + לשחזר מתוך מטמון חירום? @@ -1781,7 +1781,7 @@ Your changes will be lost if you don't save them. - השינויים שלך יאבדו אם תא תשמור אותם. + השינויים שלך יאבדו אם לא תשמור אותם. diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 7e6243dc..032c6e80 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Névtelen %1) - + %1 (Read-Only) - - + - + + Sorry Elnézést - + Unable to save '%1'. Nem sikerült '%1' mentése. - + Save File As Mentés másként - + Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - + Rename File Fájl átnevezése - + Unable to rename '%1'. Nem sikerült '%1' átnevezése. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Minden el nem mentett változtatás el fog veszni - + Reload Újratöltés - + Untitled %1 Névtelen %1 - + Question Kérdés - + Saving as plain text will discard all formatting. Discard formatting? Egyszerű szövegként való mentés minden formázást töröl. Töröl minden formázást? @@ -1676,7 +1676,7 @@ Szó: %L1 - + Opening %1 %1 megnyitása diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 31b0bfd1..47c68ca8 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Անանուն %1) - + %1 (Read-Only) %1% (միայն ընթերցման համար) - - + - + + Sorry Ներողություն։ - + Unable to save '%1'. «%1» նիշքի պահպանումը հնարավոր չէ։ - + Save File As Պահպանել նիշքը որպես - + Unable to overwrite '%1'. «%1» նիշքի վերագրանցումը հնարավոր չէ։ - + Rename File Վերանվանել նիշքը - + Unable to rename '%1'. «%1» նիշքի վերանվանումը հնարավոր չէ։ - + Reload File? Նիշքը նորի՞ց բացել։ - + Reload the file '%1' from disk? «%1» նիշքը նորի՞ց բացել սկավառակից։ - + All unsaved changes will be lost. Չպահպանված բոլոր փոփոխությունները կկորչեն։ - + Reload Նորից բացել - + Untitled %1 Անանուն %1 - + Question Հարց - + Saving as plain text will discard all formatting. Discard formatting? Հասարակ տեքստի ձևաչափով պահպանումը կվերացնի ձևավորումը։ Վերացնե՞լ ձևավորումը։ @@ -1676,7 +1676,7 @@ Բառեր՝ %L1 - + Opening %1 Բացվում է %1-ը diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 88a8e039..ddf2ee1c 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Tanpa Judul %1) - + %1 (Read-Only) - - + - + + Sorry Maaf - + Unable to save '%1'. Gagal menyimpan '%1'. - + Save File As Simpan File Sebagai - + Unable to overwrite '%1'. Gagal memperbarui '%1'. - + Rename File Ubah Nama File - + Unable to rename '%1'. Gagal mengubah nama '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Semua perubahan yang tidak disimpan akan hilang. - + Reload Muat ulang - + Untitled %1 Tanpa Judul %1 - + Question Pertanyaan - + Saving as plain text will discard all formatting. Discard formatting? Menyimpan sebagai teks polos akan membuang semua format. Buang format? @@ -1676,7 +1676,7 @@ Kata: %L1 - + Opening %1 Membuka %1 diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 53f9242f..4962f975 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Senza nome %1) - + %1 (Read-Only) - - + - + + Sorry Spiacente - + Unable to save '%1'. Impossibile salvare '%1'. - + Save File As Salva con nome - + Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - + Rename File Rinomina File - + Unable to rename '%1'. Impossibile rinominare '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Tutte le modifiche non salvate verranno perse. - + Reload Ricarica - + Untitled %1 Senza titolo %1 - + Question Domanda - + Saving as plain text will discard all formatting. Discard formatting? Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? @@ -1682,7 +1682,7 @@ Parole: %L1 - + Opening %1 Apertura %1 diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index b4e1700e..c7181ad5 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (無題 %1) - + %1 (Read-Only) %1 (読み込み専用) - - + - + + Sorry エラー - + Unable to save '%1'. '%1' を保存できませんでした。 - + Save File As 名前を付けて保存 - + Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - + Rename File ファイル名の変更 - + Unable to rename '%1'. '%1' の名前を変更できませんでした。 - + Reload File? ファイルを再読み込みしますか? - + Reload the file '%1' from disk? ファイル %1 を再読み込みしますか? - + All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - + Reload 再読み込み - + Untitled %1 無題 %1 - + Question 問い合わせ - + Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? @@ -1676,7 +1676,7 @@ 単語数: %L1 - + Opening %1 %1 を開いています diff --git a/translations/focuswriter_ko.qm b/translations/focuswriter_ko.qm index c95f4856ee11d69b4b9de6c27b2b96746f299e06..c25b8f12fe6ec7820c9757ed685b0adaa054552d 100644 GIT binary patch delta 5512 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 Mz>UzJ!7mf@e|k=OwEzGB delta 3434 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 UC89-K@D3-1ElRcAT@=9o7i>S@8vp %1% of %Ln minute(s) - 전체 %Ln 분 중 %1% + %Ln 분 중 %1% %1% of %Ln word(s) - 전체 %Ln 개의 단어 중 %1% + 단어 %Ln 중 %1% %Ln word(s) - %Ln 개의 단어 + 단어 %Ln개 @@ -73,22 +73,22 @@ Daily Progress - 일일 진행 + 하루 작업량 Longest streak - + 가장 긴 연속 작업 Current streak - + 현재 연속 작업 N/A - N/A + 없음 @@ -100,7 +100,7 @@ %1 &ndash; %2 - + %1 &n회당; %2 @@ -109,7 +109,7 @@ %1% of daily goal - 일일 목표량 중 %1% + 하루 목표의 %1% @@ -123,81 +123,81 @@ Document - + (Untitled %1) (제목없음 %1) - + %1 (Read-Only) %1 (읽기 전용) - - + - + + Sorry 죄송합니다 - + Unable to save '%1'. '%1' 파일을 저장할 수 없습니다. - + Save File As 다른 이름으로 저장 - + Unable to overwrite '%1'. '%1' 파일을 덮어쓸 수 없습니다. - + Rename File 파일 이름 바꾸기 - + Unable to rename '%1'. '%1' 파일의 이름을 바꿀 수 없습니다. - + Reload File? 파일을 다시 불러올까요? - + Reload the file '%1' from disk? 디스크에서 '%1' 파일을 다시 불러올까요? - + All unsaved changes will be lost. 저장하지 않은 바뀐 정보는 사라집니다. - + Reload 새로 고침 - + Untitled %1 제목없음 %1 - + Question 물어볼 것이 있습니다. - + Saving as plain text will discard all formatting. Discard formatting? 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? @@ -629,12 +629,12 @@ Reset daily progress for today to zero? - 오늘의 일일 목표량을 0으로 초기화할까요? + 오늘 하루 작업량을 0으로 초기화할까요? Write byte order mark in plain text files - + 일반 텍스트 파일에 바이트 순서 표식을 사용합니다. @@ -644,27 +644,27 @@ Reset Today - + 오늘 기록 초기화 History - 이력 + 기록 Remember history - 이력 기억하기 + 기록 저장하기 Show streaks - + 연속 작업량 보이기 Minimum progress for streaks: - + 연속 작업대비 최소 작업비: @@ -679,7 +679,7 @@ Count each letter as a word - 각각의 문자를 단어로 세기 + 각 문자를 단어로 세기 @@ -891,7 +891,7 @@ Duplicate - 복사 + 복사하기 @@ -1165,7 +1165,7 @@ Opacity: - 투명도: + 불투명도: @@ -1180,59 +1180,59 @@ Round Text Background Corners - + 노트 모서리 둥금 정도 Radius: - + 반경: Blur Text Background - + 노트 배경 흐릿함 정도 Text Background Drop Shadow - + 노트 그림자 정도 Vertical Offset: - + 아래로 옮김 정도: Margins - + 글자와 노트 사이의 사이띄기 Window: - + 창과의 거리: Page: - + 노트와 글자와의 거리: Indent first line - + 한 줄 들여쓰기 Above: - + 위로: Below: - + 아래로: @@ -1242,12 +1242,12 @@ Edit Theme - + 테마 편집 Window Background - + 배경 그림 설정 @@ -1290,7 +1290,7 @@ Text Background - + 노트 설정 @@ -1340,7 +1340,7 @@ Height: - + 줄 높이: @@ -1350,12 +1350,12 @@ Tab Width: - + 탭 너비: New Theme - + 새로운 테마 @@ -1368,54 +1368,54 @@ Default - 기본 세션 + 기본 세션 Gentle Blues - + 편한 푸른색 Old School - + 올드 스쿨 Space Dreams - + 스페이스 드림 Writing Desk - + 나무 책상 New - 새로 만들기 + 새로 만들기 Duplicate - 복사 + 복사하기 Custom - + 사용자 설정 Edit - 수정 + 편집하기 Delete - 지우기 + 지우기 @@ -1435,13 +1435,13 @@ Delete theme '%1'? - + '%1' 테마를 지우시겠습니까? Themes (%1) - + 테마 (%1) @@ -1676,7 +1676,7 @@ 단어: %L1 - + Opening %1 %1 열기 @@ -1689,7 +1689,7 @@ List all documents - + 모든 문서 보이기 @@ -1765,17 +1765,17 @@ Save Changes? - + 바뀐 내용을 저장하시겠습니까? Save changes to the file '%1' before closing? - + 닫기 전에 파일 '%1'에 바뀐 내용을 저장하시겠습니까? Your changes will be lost if you don't save them. - + 저장하지 않으시면 바뀐 내용을 잃어버리십니다. @@ -2090,7 +2090,7 @@ Set &Language... - + &언어 설정... @@ -2105,7 +2105,7 @@ &Daily Progress - + &하루 작업량 diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 2223b00b..42c3c433 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (naamloos %1) - + %1 (Read-Only) %1 (Alleen lezen) - - + - + + Sorry Sorry - + Unable to save '%1'. '%1' kan niet opgeslagen worden. - + Save File As Opslaan als - + Unable to overwrite '%1'. '%1' kan niet overschreven worden. - + Rename File Bestand hernoemen - + Unable to rename '%1'. '%1' kan niet hernoemd worden. - + Reload File? Herladen bestamd - + Reload the file '%1' from disk? Bestand '%1' herladen van disk - + All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - + Reload Herladen - + Untitled %1 Geen naam %1 - + Question Vraag - + Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? @@ -1682,7 +1682,7 @@ Woorden: %L1 - + Opening %1 Bestand %1 wordt geopend diff --git a/translations/focuswriter_pl.qm b/translations/focuswriter_pl.qm index e43b0347ee328dc93332a477106733d30e8e67d3..20035a4be496a1870ddd006946d0ad896055c5dc 100644 GIT binary patch delta 2667 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 diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 7e307c68..7fcb8604 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez tytułu %1) - + %1 (Read-Only) - - + - + + Sorry Przepraszam - + Unable to save '%1'. Nie można zapisać pliku '%1'. - + Save File As Zapisz plik jako - + Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - + Rename File Zmień nazwę pliku - + Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - + Reload Wczytaj ponownie - + Untitled %1 Bez nazwy %1 - + Question Pytanie - + Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? @@ -661,7 +661,7 @@ History - + Historia @@ -1688,7 +1688,7 @@ Słowa: %L1 - + Opening %1 Otwieranie %1 diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index ba2731b8..de6d8d59 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Sem título %1) - + %1 (Read-Only) - - + - + + Sorry Desculpe - + Unable to save '%1'. Não foi possível guardar «%1». - + Save File As Guardar como - + Unable to overwrite '%1'. Não foi possível substituir «%1». - + Rename File Alterar o nome do ficheiro - + Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. As alterações que não forem gravadas serão perdidas. - + Reload Carregar de novo - + Untitled %1 Sem título %1 - + Question Pergunta - + Saving as plain text will discard all formatting. Discard formatting? Gravar como texto descartará toda a formatação. Quer descartar a formatação? @@ -1682,7 +1682,7 @@ Palávras: %L1 - + Opening %1 A abrir %1 diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm index 2bb1911102415818736ca9125acd53691d73ce55..6060f5aff4a1a1e1761a64d1d2e4c73cccf42b55 100644 GIT binary patch delta 8858 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 diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 2e5f262e..4fbf2285 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -37,39 +37,39 @@ %1% of %Ln minute(s) - - - + + %1% de %Ln minuto + %1% de %Ln minutos %1% of %Ln word(s) - - - + + %1% de %Ln palavra + %1% de %Ln palavras %Ln word(s) - - - + + %Ln palavra + %Ln palavras %Ln minute(s) - - - + + %Ln minuto + %Ln minutos 0% - + 0% @@ -77,35 +77,35 @@ Daily Progress - + Progresso Diário Longest streak - + Sessão mais longa Current streak - + Sessão atual N/A - + N/A %n day(s) - - - + + %n dia + %n dias %1 &ndash; %2 - + %1 &ntraço; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% do objetivo diário @@ -122,87 +122,87 @@ Set Language - + Definir Idioma Document - + (Untitled %1) - (Sem título %1) + (Sem título %1) - + %1 (Read-Only) - + %1 (Somente leitura) - - + - + + Sorry Desculpe - + Unable to save '%1'. Não foi possível salvar '%1'. - + Save File As Salvar como - + Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - + Rename File Renomear arquivo - + Unable to rename '%1'. Não foi possível renomear '%1'. - + Reload File? - + Recarregar Arquivo? - + Reload the file '%1' from disk? - + Recarregar o arquivo '%1' do disco? - + All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - + Reload Recarregar - + Untitled %1 - Sem título %1 + Sem título %1 - + Question Questão - + Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - + O arquivo '%1' foi modificado por outro programa. @@ -255,7 +255,7 @@ Unable to open archive. - Não foi possível abrir o arquivo. + Não foi possível abrir o arquivo. @@ -351,32 +351,32 @@ OpenDocument Text - + Texto OpenDocument Office Open XML - + Office Open XML Rich Text Format - + Rich Text Format Plain Text - + Texto sem Formatação All Files - + Todos os Arquivos All Supported Files - + Todos os arquivos suportados @@ -438,7 +438,7 @@ Unable to open archive. - Não foi possível abrir o arquivo. + Não foi possível abrir o arquivo. @@ -635,42 +635,42 @@ Reset daily progress for today to zero? - + Redefinir o progresso diário para hoje a zero? Write byte order mark in plain text files - + Escrever a ordem de bytes em arquivos de texto sem formatação Default format: - + Formato Padrão: Reset Today - + Redefinir Hoje History - + Histórico Remember history - + Relembrar histórico Show streaks - + Ver todas as sessões Minimum progress for streaks: - + Progresso mínimo para as sessões: @@ -685,12 +685,12 @@ Count each letter as a word - + Contar cada letra como uma palavra Page Count Algorithm - + Algorítimo de Contagem de Páginas @@ -800,7 +800,7 @@ Not a supported RTF file. - + Não é um arquivo RTF suportado. @@ -808,7 +808,7 @@ Unexpectedly reached end of file. - + Fim do arquivo alcançado inesperadamente. @@ -897,7 +897,7 @@ Duplicate - + Duplicar @@ -922,7 +922,7 @@ Duplicate Session - + Duplicar Sessão @@ -1067,7 +1067,7 @@ Continue checking at beginning of file? - + Continuar a verificação no início do arquivo? @@ -1171,74 +1171,74 @@ Opacity: - + Opacidade: Position: - + Posição: Width: - + Largura: Round Text Background Corners - + Cantos Arredondados para o Plano de Fundo do Texto Radius: - + Raio: Blur Text Background - + Desfocar o Plano de Fundo do Texto Text Background Drop Shadow - + Sombra Projetada do Plano de Fundo do Texo Vertical Offset: - + Deslocamento Vertical: Margins - + Margens Window: - + Janela: Page: - + Página: Indent first line - + Recuar a primeira linha Above: - + Acima: Below: - + Abaixo: @@ -1248,12 +1248,12 @@ Edit Theme - + Editar Tema Window Background - + Plano de Fundo da Janela @@ -1296,7 +1296,7 @@ Text Background - + Plano de Fundo do Texto @@ -1346,7 +1346,7 @@ Height: - + Altura: @@ -1356,12 +1356,12 @@ Tab Width: - + Largura de Retirada: New Theme - + Novo Tema @@ -1374,54 +1374,54 @@ Default - Padrão + Padrão Gentle Blues - + Azuis Suaves Old School - + Velha Guarda Space Dreams - + Sonhos Espaciais Writing Desk - + Escrivaninha New - + Novo Duplicate - + Duplicar Custom - + Personalizado Edit - Editar + Editar Delete - Excluir + Deletar @@ -1441,13 +1441,13 @@ Delete theme '%1'? - + Deletar o tema '%1'? Themes (%1) - + Temas (%1) @@ -1682,7 +1682,7 @@ Palavras: %L1 - + Opening %1 Abrindo %1 @@ -1695,7 +1695,7 @@ List all documents - + Listar todos os documentos @@ -1771,17 +1771,17 @@ Save Changes? - + Salvar as Alterações? Save changes to the file '%1' before closing? - + Salvar as alterações para o arquivo '%1' antes de fechar? Your changes will be lost if you don't save them. - + Suas alterações serão perdidas se você não salvá-las. @@ -2096,7 +2096,7 @@ Set &Language... - + Definir o &Idioma... @@ -2111,7 +2111,7 @@ &Daily Progress - + &Progresso Diário diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index d2b3677f..3cbbc1e1 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Fără titlu %1) - + %1 (Read-Only) %1 (Doar-citire) - - + - + + Sorry Scuze - + Unable to save '%1'. Nu se poate salva '%1'. - + Save File As Salvează fişierul ca - + Unable to overwrite '%1'. Nu se poate suprascrie'%1'. - + Rename File Redenumire fişier - + Unable to rename '%1'. Nu se poate redenumi '%1'. - + Reload File? Reîncarcă fişier? - + Reload the file '%1' from disk? Reîncarcă fişierul '%1' de pe disc? - + All unsaved changes will be lost. Toate modificările nesalvate vor fi pierdute. - + Reload Reîncarcă - + Untitled %1 FărăTitlu %1 - + Question Întrebare - + Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? @@ -1688,7 +1688,7 @@ Cuvinte: %L1 - + Opening %1 Deschidere %1 diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index b5198d03..d4bd2cfb 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Безымянный %1) - + %1 (Read-Only) - - + - + + Sorry Извините - + Unable to save '%1'. Невозможно сохранить '%1'. - + Save File As Сохранить как - + Unable to overwrite '%1'. Невозможно перезаписать '%1'. - + Rename File Переименовать файл - + Unable to rename '%1'. Невозможно переименовать '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - + Reload Открыть заново - + Untitled %1 Безымянная %1 - + Question Вопрос - + Saving as plain text will discard all formatting. Discard formatting? Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? @@ -1688,7 +1688,7 @@ Слов: %L1 - + Opening %1 Открывается %1 diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 2f516a4b..3603772a 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Bez názvu %1) - + %1 (Read-Only) - - + - + + Sorry Prepáčte - + Unable to save '%1'. Nedá sa uložiť '%1'. - + Save File As Uložiť súbor ako - + Unable to overwrite '%1'. Nedá sa prepísať '%1'. - + Rename File Premenovať súbor - + Unable to rename '%1'. Nedá sa premenovať '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - + Reload Opätovne načítať - + Untitled %1 Bez názvu %1 - + Question Otázka - + Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? @@ -1688,7 +1688,7 @@ Slová: %L1 - + Opening %1 Otváranie %1 diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 8b4ca8a8..9402e36a 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Без наслова %1) - + %1 (Read-Only) %1 (Само за читање) - - + - + + Sorry Извините - + Unable to save '%1'. Онемогућено чување '%1'. - + Save File As Сачувај фајл као - + Unable to overwrite '%1'. Онемогућено да пребрише '%1'. - + Rename File Преименуј фајл - + Unable to rename '%1'. Онемогућено преименовање '%1'. - + Reload File? Поново учитај фајл? - + Reload the file '%1' from disk? Поново учитај фајл '%1' са диска? - + All unsaved changes will be lost. Све несачуване промене ће бити изгубљене. - + Reload Поново учитај - + Untitled %1 Без наслова %1 - + Question Питање - + Saving as plain text will discard all formatting. Discard formatting? Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? @@ -1688,7 +1688,7 @@ Речи: %L1 - + Opening %1 Oтварање %1 diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index d990b7d6..d372e0c2 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -128,81 +128,81 @@ Document - + (Untitled %1) (Namnlös %1) - + %1 (Read-Only) %1 (Skrivskyddad) - - + - + + Sorry Tyvärr - + Unable to save '%1'. Kunde inte spara "%1". - + Save File As Spara fil som - + Unable to overwrite '%1'. Kunde inte skriva över "%1". - + Rename File Byt namn på fil - + Unable to rename '%1'. Kunde inte byta namn på filen "%1". - + Reload File? Läs om fil? - + Reload the file '%1' from disk? Läs om filen "%1" från disk? - + All unsaved changes will be lost. Alla osparade ändringar kommer att gå förlorade. - + Reload Läs om - + Untitled %1 Namnlös %1 - + Question Fråga - + Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? @@ -1682,7 +1682,7 @@ Ord: %L1 - + Opening %1 Öppnar %1 diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index f2e8cf66..928ed650 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Başlıksız %1) - + %1 (Read-Only) %1 (Salt Okunur) - - + - + + Sorry Üzgünüm - + Unable to save '%1'. '%1' kaydedilemedi. - + Save File As Dosyayı Farklı Kaydet - + Unable to overwrite '%1'. '%1' üzerine yazılamadı. - + Rename File Dosyayı Yeniden Adlandır - + Unable to rename '%1'. '%1' yeniden adlandırılamadı. - + Reload File? Dosya Yeniden Yüklensin mi? - + Reload the file '%1' from disk? '%1' dosyası diskten yeniden yüklensin mi? - + All unsaved changes will be lost. Tüm kaydedilmemiş değişiklikler kaybedilecektir. - + Reload Yeniden Yükle - + Untitled %1 Başlıksız %1 - + Question Soru - + Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? @@ -1676,7 +1676,7 @@ Kelime: %L1 - + Opening %1 %1 açılıyor diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 6b856e68..c9d5b971 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -133,81 +133,81 @@ Document - + (Untitled %1) (Без назви %1) - + %1 (Read-Only) - - + - + + Sorry На жаль - + Unable to save '%1'. Не вдалось зберегти '%1'. - + Save File As Зберегти файл як - + Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - + Rename File Перейменувати файл - + Unable to rename '%1'. Не вдалось перейменувати '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 Без назви %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -1688,7 +1688,7 @@ Слів: %L1 - + Opening %1 Відкривання %1 diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index cf59f6b1..febce5bf 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (Chưa đặt tiêu đề %1) - + %1 (Read-Only) - - + - + + Sorry Rất tiếc - + Unable to save '%1'. Không thể lưu '%1'. - + Save File As Lưu tập tin thành - + Unable to overwrite '%1'. Không thể ghi đè lên '%1'. - + Rename File Đổi tên tập tin - + Unable to rename '%1'. Không thể đổi tên '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. Tất cả các thay đổi chưa lưu sẽ bị mất. - + Reload Tải lại - + Untitled %1 Chưa đặt tiêu đề %1 - + Question Câu hỏi - + Saving as plain text will discard all formatting. Discard formatting? Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? @@ -1676,7 +1676,7 @@ Số từ: %L1 - + Opening %1 Đang mở %1 diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index b8184522..0ae7b506 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) (无标题 %1) - + %1 (Read-Only) %1 (只读) - - + - + + Sorry 抱歉 - + Unable to save '%1'. 不能保存 '%1'。 - + Save File As 保存文件为 - + Unable to overwrite '%1'. 不能覆盖 '%1'。 - + Rename File 重命名文件 - + Unable to rename '%1'. 不能重命名 '%1'。 - + Reload File? 重新加载文件? - + Reload the file '%1' from disk? 重新从磁盘中加载文件 '%1' ? - + All unsaved changes will be lost. 未保存的更改将丢失。 - + Reload 重新加载 - + Untitled %1 无标题 %1 - + Question 问题 - + Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? @@ -1676,7 +1676,7 @@ 单词数:%L1 - + Opening %1 正在打开 %1 diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index f986017c..bfa1bc62 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -123,81 +123,81 @@ Document - + (Untitled %1) - + %1 (Read-Only) - - + - + + Sorry - + Unable to save '%1'. - + Save File As - + Unable to overwrite '%1'. - + Rename File - + Unable to rename '%1'. - + Reload File? - + Reload the file '%1' from disk? - + All unsaved changes will be lost. - + Reload - + Untitled %1 - + Question - + Saving as plain text will discard all formatting. Discard formatting? @@ -1676,7 +1676,7 @@ - + Opening %1 From 998667f78febfd72349a3c2538662d2b9fcebd91 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 20 Jul 2014 09:40:54 -0400 Subject: [PATCH 219/630] Bump version number. --- NEWS | 9 +++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index f7b1b45b..8f065d9c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +1.5.2 +----- +* FIXED: Regression with RtfWriter encoding characters in Windows. +* FIXED: Windows installer did not install shortcut for all users. +* FIXED: Finnish spellchecking did not work in Windows. +* FIXED: Incorrect handling of mimetypes in copy-paste. +* FIXED: Keywords in .desktop file should be separated by semicolons. +* Translation updates: French, Hebrew, Korean, Polish, Portuguese (Brazil). + 1.5.1 ----- * Added keywords to .desktop file. diff --git a/focuswriter.pro b/focuswriter.pro index a3742f01..99e9f14e 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.5.1 +VERSION = 1.5.2 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index e151d416..28837464 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.1' +VERSION='1.5.2' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index d54dd3fb..f8d356a1 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 1 +!define VERSIONPATCH 2 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index e454e481..4987062d 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.1 +SET VERSION=1.5.2 ECHO Copying executable MKDIR %APP% From d5643865221fbd16ca28e024d8f3e404adc3fba9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 20 Jul 2014 09:56:03 -0400 Subject: [PATCH 220/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index ad40dea2..727a14ee 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.2-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sun, 20 Jul 2014 13:47:08 +0000 + focuswriter (1.5.1-1) unstable; urgency=medium * New upstream release From cdcd7e8b60293334c409756fae54f1cda23f9d06 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Jul 2014 13:13:02 -0400 Subject: [PATCH 221/630] FIXED: Was not reading styles for OOXML files. --- src/fileformats/docx_reader.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fileformats/docx_reader.cpp b/src/fileformats/docx_reader.cpp index 3f84f9bc..4bca8d0a 100644 --- a/src/fileformats/docx_reader.cpp +++ b/src/fileformats/docx_reader.cpp @@ -123,7 +123,7 @@ void DocxReader::readStyles() // Read document defaults if (m_xml.qualifiedName() == "w:docDefaults") { while (m_xml.readNextStartElement()) { - if (m_xml.qualifiedName() == "w:rPrDefault ") { + if (m_xml.qualifiedName() == "w:rPrDefault") { if (m_xml.readNextStartElement()) { if (m_xml.qualifiedName() == "w:rPr") { readRunProperties(m_current_style); @@ -143,6 +143,7 @@ void DocxReader::readStyles() m_xml.skipCurrentElement(); } } + m_xml.skipCurrentElement(); } // Read styles @@ -177,7 +178,7 @@ void DocxReader::readStyles() } // Determine if this is the default style - if (readBool(m_xml.attributes().value("w:default"))) { + if (m_xml.attributes().hasAttribute("w:default") && readBool(m_xml.attributes().value("w:default"))) { default_style[style.type] = style_id; } @@ -192,6 +193,7 @@ void DocxReader::readStyles() style = newstyle; } style_tree[parent_style_id] += style_id; + m_xml.skipCurrentElement(); } else if ((style.type == Style::Paragraph) && (m_xml.qualifiedName() == "w:pPr")) { readParagraphProperties(style, false); } else if (m_xml.qualifiedName() == "w:rPr") { From 2cf5cbccf9717b01de7dfaa8f26bfcc5a17ed9b7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Jul 2014 13:36:54 -0400 Subject: [PATCH 222/630] FIXED: Ignored text sections in ODT files. --- src/fileformats/odt_reader.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fileformats/odt_reader.cpp b/src/fileformats/odt_reader.cpp index 120a6e2a..08c713b0 100644 --- a/src/fileformats/odt_reader.cpp +++ b/src/fileformats/odt_reader.cpp @@ -273,6 +273,8 @@ void OdtReader::readBodyText() while (m_xml.readNextStartElement()) { if (m_xml.qualifiedName() == "text:p" || m_xml.qualifiedName() == "text:h") { readParagraph(); + } else if (m_xml.qualifiedName() == "text:section") { + readBodyText(); } else { m_xml.skipCurrentElement(); } From aa179cb9405368ee678984b17beafd5e05ab4ccd Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Jul 2014 15:48:48 -0400 Subject: [PATCH 223/630] FIXED: Style hierarchy was not always loaded in ODT. --- src/fileformats/odt_reader.cpp | 54 ++++++++++++++++++++++------------ src/fileformats/odt_reader.h | 3 +- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/fileformats/odt_reader.cpp b/src/fileformats/odt_reader.cpp index 08c713b0..0d16a3bd 100644 --- a/src/fileformats/odt_reader.cpp +++ b/src/fileformats/odt_reader.cpp @@ -131,11 +131,10 @@ void OdtReader::readStyle() QString parent_style = attributes.value(QLatin1String("style:parent-style-name")).toString(); if (!parent_style.isEmpty()) { - if (m_styles[0].contains(parent_style)) { - style = m_styles[0][parent_style]; - } else if (m_styles[1].contains(parent_style)) { - style = m_styles[1][parent_style]; - } + Style& parent = m_styles[type][parent_style]; + style.block_format = parent.block_format; + style.char_format = parent.char_format; + parent.children += name; } while (m_xml.readNextStartElement()) { @@ -147,6 +146,22 @@ void OdtReader::readStyle() m_xml.skipCurrentElement(); } } + + // Recursively apply style to children + QStringList children = style.children; + while (!children.isEmpty()) { + Style& childstyle = m_styles[type][children.takeFirst()]; + + QTextBlockFormat block_format = style.block_format; + block_format.merge(childstyle.block_format); + childstyle.block_format = block_format; + + QTextCharFormat char_format = style.char_format; + char_format.merge(childstyle.char_format); + childstyle.char_format = char_format; + + children.append(childstyle.children); + } } //----------------------------------------------------------------------------- @@ -212,23 +227,24 @@ void OdtReader::readStyleTextProperties(QTextCharFormat& format) { QXmlStreamAttributes attributes = m_xml.attributes(); - if (attributes.value(QLatin1String("fo:font-weight")) == "bold") { - format.setFontWeight(QFont::Bold); - } - if (attributes.value(QLatin1String("fo:font-style")) == "italic") { - format.setFontItalic(true); + if (attributes.hasAttribute(QLatin1String("fo:font-weight"))) { + if (attributes.value(QLatin1String("fo:font-weight")) == "bold") { + format.setFontWeight(QFont::Bold); + } else { + format.setFontWeight(QFont::Normal); + } } - if (attributes.hasAttribute(QLatin1String("style:text-underline-style")) && - attributes.value(QLatin1String("style:text-underline-style")) != "none") { - format.setFontUnderline(true); + + if (attributes.hasAttribute(QLatin1String("fo:font-style"))) { + format.setFontItalic(attributes.value(QLatin1String("fo:font-style")) != "normal"); } - if (attributes.hasAttribute((QLatin1String("style:text-underline-type"))) && - attributes.value(QLatin1String("style:text-underline-type")) != "none") { - format.setFontUnderline(true); + + if (attributes.hasAttribute(QLatin1String("style:text-underline-style"))) { + format.setFontUnderline(attributes.value(QLatin1String("style:text-underline-style")) != "none"); } - if (attributes.hasAttribute((QLatin1String("style:text-line-through-type"))) && - attributes.value(QLatin1String("style:text-line-through-type")) != "none") { - format.setFontStrikeOut(true); + + if (attributes.hasAttribute(QLatin1String("style:text-line-through-type"))) { + format.setFontStrikeOut(attributes.value(QLatin1String("style:text-line-through-type")) != "none"); } if (attributes.hasAttribute(QLatin1String("style:text-position"))) { diff --git a/src/fileformats/odt_reader.h b/src/fileformats/odt_reader.h index 1302fb89..a72aad30 100644 --- a/src/fileformats/odt_reader.h +++ b/src/fileformats/odt_reader.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2011, 2012, 2013 Graeme Gott + * Copyright (C) 2011, 2012, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,6 +66,7 @@ class OdtReader : public FormatReader QTextBlockFormat block_format; QTextCharFormat char_format; + QStringList children; }; QHash m_styles[2]; QTextBlockFormat m_block_format; From da4645a3ae9ed7b6335e6d7297cd3f39cdc37750 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 30 Jul 2014 05:29:14 -0400 Subject: [PATCH 224/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 6 +++--- resources/unix/po/pt_BR.po | 25 +++++++++++++------------ translations/focuswriter_pt_BR.qm | Bin 36478 -> 36502 bytes translations/focuswriter_pt_BR.ts | 22 +++++++++++----------- translations/focuswriter_sv.qm | Bin 34044 -> 34056 bytes translations/focuswriter_sv.ts | 2 +- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 355f6bc5..e9ad2dec 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -34,7 +34,7 @@

포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니다.

Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersinterface totdat de muis naar de rand van het scherm geschoven wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in staan om complete focus te hebben op het werk

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

-

FocusWriter é um simples, processador de texto simples livre de distrações. Ele Ele utiliza uma interface oculta, acessível ao mover o mouse para os cantos da interface da tela, o que dá ao programa um olhar amigável, mantendo-se discreto, assim você pode mergulhar em seu trabalho.

+

FocusWriter é um processador de texto simples livre de distrações. Ele utiliza uma interface oculta, acessível ao mover o mouse para os cantos da tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode mergulhar em seu trabalho.

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

@@ -50,7 +50,7 @@

포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등과 그 외에 아주 많은 기능을 갖고 있습니다.

Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, meerdere open documenten, spellingscorrectie en nog veel meer.

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

-

FocusWriter permite que você personalize o seu ambiente, criando temas que controlam a fonte, cores, e imagem de fundo para adicionar ao ambiente. Também possui rápida atualização de estatísticas, metas diárias, vários documentos abertos, verificação ortográfica e muito mais.

+

FocusWriter permite que você personalize o seu ambiente, criando temas que possibilitam a mudança da fonte, cores e imagem de fundo, para criar a atmosfera ideal. Também permite atualização de estatísticas, metas diárias, vários documentos abertos, verificação ortográfica e muito mais.

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

@@ -66,7 +66,7 @@

그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다.

Daar bovenop laadt het programma je huidige onderhande werk en laat het zien op de locatie waar je gebleven bent zodat je direct verder kunt

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

-

Além disso, quando você abrir o programa seu trabalho atual em andamento irá automaticamente carregar e posicioná-lo onde você parou de modo que você pode pular imediatamente de volta nele.

+

Além disso, quando você abrir o programa, seu trabalho em andamento será automaticamente carregado e posicionado onde você parou, de modo que você pode reiniciá-lo imediatamente.

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

diff --git a/resources/unix/po/pt_BR.po b/resources/unix/po/pt_BR.po index 36300b93..dab311a6 100644 --- a/resources/unix/po/pt_BR.po +++ b/resources/unix/po/pt_BR.po @@ -4,13 +4,14 @@ # # Translators: # Lorram Lomeu de Souza Rampi , 2014 +# Márcio Massula Jr. , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-04-05 11:50+0000\n" -"PO-Revision-Date: 2014-07-16 22:27+0000\n" -"Last-Translator: Lorram Lomeu de Souza Rampi \n" +"PO-Revision-Date: 2014-07-21 16:57+0000\n" +"Last-Translator: Márcio Massula Jr. \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" "focuswriter/language/pt_BR/)\n" "Language: pt_BR\n" @@ -30,10 +31,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" -"FocusWriter é um simples, processador de texto simples livre de distrações. " -"Ele Ele utiliza uma interface oculta, acessível ao mover o mouse para os " -"cantos da interface da tela, o que dá ao programa um olhar amigável, " -"mantendo-se discreto, assim você pode mergulhar em seu trabalho." +"FocusWriter é um processador de texto simples livre de distrações. Ele " +"utiliza uma interface oculta, acessível ao mover o mouse para os cantos da " +"tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode " +"mergulhar em seu trabalho." #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -43,9 +44,9 @@ msgid "" "documents, spell-checking, and much more." msgstr "" "FocusWriter permite que você personalize o seu ambiente, criando temas que " -"controlam a fonte, cores, e imagem de fundo para adicionar ao ambiente. " -"Também possui rápida atualização de estatísticas, metas diárias, vários " -"documentos abertos, verificação ortográfica e muito mais." +"possibilitam a mudança da fonte, cores e imagem de fundo, para criar a " +"atmosfera ideal. Também permite atualização de estatísticas, metas diárias, " +"vários documentos abertos, verificação ortográfica e muito mais." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -53,9 +54,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -"Além disso, quando você abrir o programa seu trabalho atual em andamento irá " -"automaticamente carregar e posicioná-lo onde você parou de modo que você " -"pode pular imediatamente de volta nele." +"Além disso, quando você abrir o programa, seu trabalho em andamento será " +"automaticamente carregado e posicionado onde você parou, de modo que você " +"pode reiniciá-lo imediatamente." #: ../focuswriter.desktop.in.h:1 msgid "FocusWriter" diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm index 6060f5aff4a1a1e1761a64d1d2e4c73cccf42b55..6a7bdae4fb37f13455cb76541d77969f60aa1b61 100644 GIT binary patch delta 3535 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 delta 3531 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 Yj_3N64}0RvPQ?3~RZ(Tn(|2|JFCh)(_W%F@ diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 4fbf2285..20546fae 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -105,7 +105,7 @@ %1 &ndash; %2 - %1 &ntraço; %2 + %1 &ndash; %2
@@ -361,7 +361,7 @@ Rich Text Format - Rich Text Format + Formato Rich Text @@ -635,12 +635,12 @@ Reset daily progress for today to zero? - Redefinir o progresso diário para hoje a zero? + Redefinir o progresso diário de hoje para zero? Write byte order mark in plain text files - Escrever a ordem de bytes em arquivos de texto sem formatação + Escrever a marca de ordem de bytes (BOM) em arquivos de texto sem formatação @@ -1228,7 +1228,7 @@ Indent first line - Recuar a primeira linha + Indentar a primeira linha @@ -1356,7 +1356,7 @@ Tab Width: - Largura de Retirada: + Largura da Tabulação: @@ -1379,22 +1379,22 @@ Gentle Blues - Azuis Suaves + Gentle Blues Old School - Velha Guarda + Old School Space Dreams - Sonhos Espaciais + Space Dreams Writing Desk - Escrivaninha + Writing Desk @@ -1635,7 +1635,7 @@ A simple fullscreen word processor - Um processador de textos simples para escrita em modo Tela cheia + Um processador de textos simples para escrita em modo tela cheia diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm index 3b2c528c138dfd2409952cd056d434932a2648dc..65402942ae8ccdf38a2f9d393625076344019a80 100644 GIT binary patch delta 1811 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 diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index d372e0c2..9a8cd16e 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -1203,7 +1203,7 @@ Text Background Drop Shadow - Texbakgrundsskugga + Bakgrundsskugga för text From 99d1e11ae1a428c4f72349e39b2f15e2ba69ecca Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Aug 2014 14:40:17 -0400 Subject: [PATCH 225/630] FIXED: Find did not take smart quotes into account. --- src/find_dialog.cpp | 17 +++++++++++++++++ src/find_dialog.h | 2 ++ src/smart_quotes.cpp | 36 +++++++++++++++++++++++++++++++++++- src/smart_quotes.h | 4 +++- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/find_dialog.cpp b/src/find_dialog.cpp index ea774d2b..372e39df 100644 --- a/src/find_dialog.cpp +++ b/src/find_dialog.cpp @@ -20,6 +20,7 @@ #include "find_dialog.h" #include "document.h" +#include "smart_quotes.h" #include "stack.h" #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +101,21 @@ FindDialog::FindDialog(Stack* documents) m_whole_words->setChecked(settings.value("FindDialog/WholeWords", false).toBool()); m_regular_expressions->setChecked(settings.value("FindDialog/RegularExpressions", false).toBool()); m_search_backwards->setChecked(settings.value("FindDialog/SearchBackwards", false).toBool()); + + m_find_string->installEventFilter(this); + m_replace_string->installEventFilter(this); +} + +//----------------------------------------------------------------------------- + +bool FindDialog::eventFilter(QObject* watched, QEvent* event) +{ + if ((event->type() == QEvent::KeyPress) && qobject_cast(watched)) { + if (SmartQuotes::isEnabled() && SmartQuotes::insert(static_cast(watched), static_cast(event))) { + return true; + } + } + return QDialog::eventFilter(watched, event); } //----------------------------------------------------------------------------- diff --git a/src/find_dialog.h b/src/find_dialog.h index b6efe64b..061a985d 100644 --- a/src/find_dialog.h +++ b/src/find_dialog.h @@ -35,6 +35,8 @@ class FindDialog : public QDialog public: FindDialog(Stack* documents); + virtual bool eventFilter(QObject* watched, QEvent* event); + public slots: void findNext(); void findPrevious(); diff --git a/src/smart_quotes.cpp b/src/smart_quotes.cpp index 816c9f99..1482d493 100644 --- a/src/smart_quotes.cpp +++ b/src/smart_quotes.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2013 Graeme Gott + * Copyright (C) 2010, 2011, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ #include "preferences.h" #include +#include #include #include #include @@ -71,6 +72,39 @@ const size_t SmartQuotes::m_quotes_list_count = sizeof(m_quotes_list) / sizeof(Q //----------------------------------------------------------------------------- +bool SmartQuotes::insert(QLineEdit* edit, QKeyEvent* key) +{ + if (key->modifiers() & Qt::ControlModifier) { + return false; + } + + int quote = 2; + if (key->key() == Qt::Key_QuoteDbl) { + quote = 0; + } else if (key->key() != Qt::Key_Apostrophe) { + return false; + } + + int position = edit->cursorPosition() - 1; + if (position >= 0) { + QChar c = edit->text().at(position); + if (!c.isSpace() && !c.isNull() && (c.category() != QChar::Punctuation_Open)) { + quote++; + } + } + + if (key->text().right(1) != m_quotes[quote]) { + edit->del(); + edit->insert(m_quotes[quote]); + } else { + edit->insert(key->text()); + } + + return true; +} + +//----------------------------------------------------------------------------- + bool SmartQuotes::insert(QTextEdit* text, QKeyEvent* key) { if (key->modifiers() & Qt::ControlModifier) { diff --git a/src/smart_quotes.h b/src/smart_quotes.h index fbffd05e..acc12301 100644 --- a/src/smart_quotes.h +++ b/src/smart_quotes.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2013 Graeme Gott + * Copyright (C) 2010, 2011, 2013, 2014 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ #include #include class QKeyEvent; +class QLineEdit; class QTextEdit; class SmartQuotes @@ -33,6 +34,7 @@ class SmartQuotes static size_t count(); static bool isEnabled(); + static bool insert(QLineEdit* edit, QKeyEvent* key); static bool insert(QTextEdit* text, QKeyEvent* key); static void replace(QTextEdit* text, int start, int end); static void replace(QString& string); From 7960052884c5a99b905d7cd1cda4c24c619aa3de Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Aug 2014 14:53:30 -0400 Subject: [PATCH 226/630] Sync translations with Transifex. --- translations/focuswriter_ar.ts | 40 +++++++++++++------------- translations/focuswriter_ca.ts | 40 +++++++++++++------------- translations/focuswriter_cs.ts | 40 +++++++++++++------------- translations/focuswriter_da.ts | 40 +++++++++++++------------- translations/focuswriter_de.ts | 40 +++++++++++++------------- translations/focuswriter_el.ts | 40 +++++++++++++------------- translations/focuswriter_en.ts | 40 +++++++++++++------------- translations/focuswriter_en_GB.ts | 40 +++++++++++++------------- translations/focuswriter_es.ts | 40 +++++++++++++------------- translations/focuswriter_es_MX.ts | 40 +++++++++++++------------- translations/focuswriter_fi.ts | 40 +++++++++++++------------- translations/focuswriter_fr.ts | 40 +++++++++++++------------- translations/focuswriter_he.qm | Bin 30089 -> 30083 bytes translations/focuswriter_he.ts | 46 +++++++++++++++--------------- translations/focuswriter_hu.ts | 40 +++++++++++++------------- translations/focuswriter_hy.ts | 40 +++++++++++++------------- translations/focuswriter_id.ts | 40 +++++++++++++------------- translations/focuswriter_it.ts | 40 +++++++++++++------------- translations/focuswriter_ja.ts | 40 +++++++++++++------------- translations/focuswriter_ko.ts | 40 +++++++++++++------------- translations/focuswriter_nl.ts | 40 +++++++++++++------------- translations/focuswriter_pl.ts | 40 +++++++++++++------------- translations/focuswriter_pt.ts | 40 +++++++++++++------------- translations/focuswriter_pt_BR.ts | 40 +++++++++++++------------- translations/focuswriter_ro.ts | 40 +++++++++++++------------- translations/focuswriter_ru.ts | 40 +++++++++++++------------- translations/focuswriter_sk.ts | 40 +++++++++++++------------- translations/focuswriter_sr.ts | 40 +++++++++++++------------- translations/focuswriter_sv.ts | 40 +++++++++++++------------- translations/focuswriter_tr.ts | 40 +++++++++++++------------- translations/focuswriter_uk.ts | 40 +++++++++++++------------- translations/focuswriter_vi.ts | 40 +++++++++++++------------- translations/focuswriter_zh_CN.ts | 40 +++++++++++++------------- translations/focuswriter_zh_TW.ts | 40 +++++++++++++------------- 34 files changed, 663 insertions(+), 663 deletions(-) diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 53257284..911ffe7a 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -281,67 +281,67 @@ FindDialog - + Search for: بحث عن: - + Replace with: استبدال: - + Ignore case - + Whole words only - + Regular expressions تعبيرات قياسية - + Search up بحث تجاه فوق - + Search down بحث تجاه تحت - + &Find بحـث - + &Replace استبدال الكل - + Replace &All استبدال بالكل - + Find بحـث - + Replace استبـدال - + Replace %n instance(s)? @@ -353,19 +353,19 @@ - + Question - - + + Sorry معذرة! - - + + Phrase not found. كلمة غير موجودة. @@ -1021,12 +1021,12 @@ SmartQuote - + Replacing quotation marks... - + Please Wait من فضلك، انتظر diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 177f3031..f15ff76e 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Cerca: - + Replace with: Reemplaça amb: - + Ignore case Ignora majúscules - + Whole words only Només paraules senceres - + Regular expressions Expressions regulars - + Search up Cerca cap enrere - + Search down Cerca cap endavant - + &Find Cerca - + &Replace &Reemplaça - + Replace &All Reemplaça-ho tot - + Find Troba - + Replace Reemplaça - + Replace %n instance(s)? Esteu segur que voleu reemplaçar %n instàncies? @@ -335,19 +335,19 @@ - + Question Pregunta - - + + Sorry Disculpeu - - + + Phrase not found. No s'ha trobat la frase @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Reemplaça cometes ... - + Please Wait Espereu siusplau diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 9c17c8c0..0a890dca 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Hledat: - + Replace with: Nahradit: - + Ignore case Nevšímat si velikosti písmen - + Whole words only Pouze celá slova - + Regular expressions Regulární výrazy - + Search up Hledat nahoru - + Search down Hledat dolů - + &Find &Hledat - + &Replace &Nahradit - + Replace &All Nahradit &vše - + Find Najít - + Replace Nahradit - + Replace %n instance(s)? Nahradit jeden případ? @@ -335,19 +335,19 @@ - + Question Otázka - - + + Sorry Promiňte - - + + Phrase not found. Slovní spojení nebylo nenalezeno. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Nahrazují se uvozovky... - + Please Wait Počkejte, prosím diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index bac353d9..7bf76560 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Søg efter: - + Replace with: Erstat med: - + Ignore case Ignorer store/små bogstaver - + Whole words only Kun hele ord - + Regular expressions Regulære udtryk - + Search up Søg tilbage - + Search down Søg fremad - + &Find &Find - + &Replace &Erstat - + Replace &All Erstat &alle - + Find Find - + Replace Erstat - + Replace %n instance(s)? Erstat %n forekomst? @@ -329,19 +329,19 @@ - + Question Spørgsmål - - + + Sorry Beklager - - + + Phrase not found. Frasen kunne ikke findes. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Erstatter citatonstegn... - + Please Wait Vent venligst diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 5f35f2f0..d625ffca 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Suche nach: - + Replace with: Ersetze durch: - + Ignore case Groß-/Kleinschreibung ignorieren - + Whole words only Nur ganze Wörter - + Regular expressions Reguläre Ausrücke - + Search up Aufwärts suchen - + Search down Abwärts suchen - + &Find &Suchen - + &Replace &Ersetzen - + Replace &All &Alle Ersetzen - + Find Suchen - + Replace Ersetzen - + Replace %n instance(s)? In %n Fall ersetzen? @@ -329,19 +329,19 @@ - + Question Frage - - + + Sorry Entschuldigung - - + + Phrase not found. Ausdruck nicht gefunden. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Anführungszeichen werden ersetzt... - + Please Wait Bitte warten diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 0f0a8ba2..2bc1607b 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Αναζήτηση για: - + Replace with: Αντικατάσταση με: - + Ignore case Χωρίς διάκριση πεζών/κεφαλαίων - + Whole words only Μόνο ολόκληρες λέξεις - + Regular expressions Κανονικές εκφράσεις - + Search up Αναζήτηση πάνω - + Search down Αναζήτηση κάτω - + &Find &Εύρεση - + &Replace &Αντικατάσταση - + Replace &All Αντικατάσταση &Όλων - + Find Εύρεση - + Replace Αντικατάσταση - + Replace %n instance(s)? Αντικατάσταση %n ευρήματος; @@ -329,19 +329,19 @@ - + Question Ερώτηση - - + + Sorry Λυπούμαστε - - + + Phrase not found. Δεν βρέθηκε η φράση. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Αντικατάσταση εισαγωγικών... - + Please Wait Παρακαλώ Περιμένετε diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 38f931fa..f87cac80 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: - + Replace with: - + Ignore case - + Whole words only - + Regular expressions - + Search up - + Search down - + &Find - + &Replace - + Replace &All - + Find - + Replace - + Replace %n instance(s)? Replace %n instance? @@ -329,19 +329,19 @@ - + Question - - + + Sorry - - + + Phrase not found. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... - + Please Wait diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 6767dbe6..9d4a311d 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Search for: - + Replace with: Replace with: - + Ignore case Ignore case: - + Whole words only Whole words only - + Regular expressions Regular expressions - + Search up Search up - + Search down Search down - + &Find &Find - + &Replace &Replace - + Replace &All Replace &All - + Find Find - + Replace Replace - + Replace %n instance(s)? Replace %n instance? @@ -329,19 +329,19 @@ - + Question Question - - + + Sorry Sorry - - + + Phrase not found. Phrase not found. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Replacing quotation marks... - + Please Wait Please Wait diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 1bfea3ab..9b9e5bec 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Buscar: - + Replace with: Reemplazar por: - + Ignore case Ignorar mayúsculas y minúsculas - + Whole words only Solo palabras completas - + Regular expressions Expresiones regulares - + Search up Hacia atrás - + Search down Hacia adelante - + &Find &Buscar - + &Replace &Reemplazar - + Replace &All Reemplazar &todas - + Find Buscar - + Replace Reemplazar - + Replace %n instance(s)? ¿Reemplazar %n coincidencia? @@ -329,19 +329,19 @@ - + Question Confirmación - - + + Sorry Aviso - - + + Phrase not found. No se encontró la frase. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Reemplazando comillas... - + Please Wait Espere un momento diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index cdcc02af..cc726cd8 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Buscar: - + Replace with: Reemplazar con: - + Ignore case Ignorar mayúsculas - + Whole words only Solo palabras completas - + Regular expressions Expresiones regulares - + Search up Buscar arriba - + Search down Buscar abajo - + &Find &Buscar - + &Replace &Reemplazar - + Replace &All Reemplazar %todo - + Find Buscar - + Replace Reemplazar - + Replace %n instance(s)? Replace %n instance? @@ -329,19 +329,19 @@ - + Question Pregunta - - + + Sorry Lo siento - - + + Phrase not found. No se encontró la frase. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Reemplazando comillas... - + Please Wait Por favor espere diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index aced0e28..64281bf3 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Etsi: - + Replace with: Korvaa: - + Ignore case Aakkoskoolla ei ole merkitystä - + Whole words only Vain kokonaiset sanat - + Regular expressions Säännölliset lausekkeet - + Search up Etsi ylös - + Search down Etsi alas - + &Find &Etsi - + &Replace &Korvaa - + Replace &All Korvaa k&aikki - + Find Etsi - + Replace Korvaa - + Replace %n instance(s)? Korvataanko %n esiintymä? @@ -329,19 +329,19 @@ - + Question Kysymys - - + + Sorry Virhe - - + + Phrase not found. Fraasia ei löydy. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Korvataan lainausmerkkejä… - + Please Wait Odota hetki diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index dd424c4b..08472d2f 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Rechercher : - + Replace with: Remplacer par : - + Ignore case Ignorer la casse - + Whole words only Mots entiers seulement - + Regular expressions Expressions régulières - + Search up Précédent - + Search down Suivant - + &Find &Rechercher - + &Replace &Remplacer - + Replace &All Remplacer &tout - + Find Chercher - + Replace Remplacer - + Replace %n instance(s)? Remplacer %n occurrence ? @@ -329,19 +329,19 @@ - + Question Question - - + + Sorry Désolé - - + + Phrase not found. Phrase non trouvée. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Remplacement des guillemets... - + Please Wait Veuillez patienter diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index 3b3ed00b9e573d88514896f17d324afc5d7a8732..75cdecc2ad4b74f5f42f87a5f170a4f64b6d8e7f 100644 GIT binary patch delta 3133 zcmXX|X;>6j7QJ0tS9e!e6PAFAxItu5P+E{plueLL5k%7}hzJpf7!7X0r6Xt}YgCAX zMi3K?5E*3@F@lLiKoJ*+ViKH)LBtu<#BoVXRA3HY&#&{ns#o{jd+t5wRn9|2_Cv)^ zTVo_q=piEWR1;b?6U_=BigzT6EFzkBo+xHA5qp9t?jn)fRTBo``OrFCNz}E5=#A^d z96=m?IWaYO9%V<&sSCgm;*NA6jx%xf98us(6NY9G*B(q{)E*(;1sis5;8rcmz zOk`0`eARQJ=@sO>#~ugulk=A!5Jkk1^H88jB{{b{0QEow(uR}sqe)n|kW1ciqUcg` z$;ZCv)#OrwqGkt@OB0^QIMEF2E+Wx`!W;|8NHb4TxJwq1dpt$NSmEH|6!CQ;(U@+E zO35Vh`G)4~yh&szrPwBCuymQ?vU7>1)|k+53&n57dRiPU=tsi-hscn&7YC?JXx3~( z`~TzQMPz6|;ttzrAyZ={nqfr?Sp*3Cm=+1Z8NntDJ4TBtoxzA3C2IXqK^Y};Q;1>< zXyf-Rk$iwE2WJyaE~K`K2Smf?QKv%=(b%7WCEUq$q$tOhPw=-tOZOKG$ea_g_))0+a$HZ!p;cPXN)V!K#*-R!S6$i|} z#$@&^K)?q~;kf~#(GAR}Wrs0LElinDIFY?Gb7W5wW~80@%JWks?!=s``y5QkOl>aq zMO|m=Q}sl1E;98+C}jR_renG*k@I@Sc=J3GFwA9c^^CnxtX$9?H(fC@%(RgSHw;AgIC0xERPHeo=G2}4D$>gZykfKaZcZYgHs2v>W?0YmwT z34J2CGm0o8ry1OtE$=`r+1&Y3JLo@7;9AO7f|6LSZ8>yIOSramnAX70xOSiOsB9~D zqZgS@Ddz^_w-af+xWS0&IH;RfJcm&&tmN4t`T36IxuNfZ=JNc0;M9+JX;u)ho0sn% z$MC(u2fqZf9=3eUxwnZ%tm3nd6+-`$O8LC~aTuPZe7?sTw4m06nk{_(%x3gHsJ{!QUGB5)QbOzrAb} zk?J6S`vfY{jp6Uq)xjs$^7r#rfYSQ{TQm!a?iZBF!-*`51<^JGGZZ1bnT!MjtOe`t zdl>F71e>iRx9VW-@sJQQKmmc0>gGH-_>q|uS`;| zdITAJk5Fzf4q~_yl>1H%3}L6}y%~vVJH$}$-_R0Hj6Q+2?MGs2pBoZ;Aa0a=FcTr-Cjb9{nJ>gmL*LoI z6mtev5t$W;d3P}z%P)wTtJ1B0;<8%5l5iV(3ewiuZ@ix(X* zMA~)Y#qrJX{3l{-6Nj0YEOy*Og>KtTXt*ps8+M)OOD1weBs1 zA6Th=yY?}R%Um_+nt=0$sRj$tYNJ_reIBd{jK~rU?T!sGDu}z~hIhTR+Tz{$tgb zi+QNwsrvHSAgnFbJ(-C_YI}8W;5O)gS+ROx=!Zi;sA2acqk=$FJ@_ zICd=x`IqMK-Dsl4q^Yh}!Wl1W8f|wOVX5Yt)}vi8o*Wa(t4ugL*MyTiOc?BD!qDd? z445uiS z<ppb5#XOUo(^h^H$;@>l& z_tkIGr?dhM|FvOnPhNCbr^Pja%EqF|ws`CH_plG ziBhio{;xv`{2?0y@O_d&&QswUo)9bNl`n&gJLQ6$V*H3S$pxpu;PfBlJ-yq}``z+C zJiYOKi+t{m4;=K7QNBH-|78#5u73}QQ++4*Ucjw4w?Xb-!6D#Now^qC9HG~ZzY_~f zt=DTz+atmQFHoBM685q!oG@>*Ex<=+jPLhX0EJ~7` M6zY=&((C2_183K4&;S4c delta 3139 zcmXX|X;@X|8hy{6&a}@y2&kwia}X#XlYodaC9gW5x8f?A-S1iZ>1S)d`; z&@xfPkgJFZ+$0$+G*BU@5)vdYN|~h>bAY>e&i%EX@0`8A?|s+1*7|nNBU#=f*9IQ}xxLO-G?N20J|qUGNaMa(2(zb0CCiO8u-j{*37Y#pK@>d7D)cZ--~ z*vGYkm|Fb4$eNh5ZNO0Cj&)-nXW|+-BL56M27N%>)j%Sh<}2bI@WAXZiI193H1z@S zD3MVG@h6`W&8;T;{nkXGEZJ9l0E{L3v5mqsWPjBL=mo?^nk8gENIfZ_mNM!MV z7Nukoc{kINy+0Dg9-+tS=#T6k|<;u394b92#0#LKNR1lND?y zddpR&`lFX(r_PlqFjeN*-A6S3m28R2P9mR&vXw^ZpgLE!at@F+kY!xJ{F83T zwjKK?(R@qU=Z6xAQXb1{U!5UZ{X}+K2Zo}T%LXiYqBV`Ofxr_)ljh2P4RpZ!t7H#l zKM+m3A$t^w_l&w2zVss^+XBWwmzzZN#&O1^u9nDbD-)?fg^LZC)vfOlC5JI7sW>3I zo5}27fers)iY|;0nYS_f%8x=!9Zb1*2$8ijb8LSL#CU@_;js^eJ27YLzW`IlOkF;n zTXc(QNOdJz@&nUQj7FkMneMp|xcxRp_v1wr5W9l8({Bky$1pv%tI^^2%#+_xNMa20 zy448(Ygt3PBBB-X>~s+u3U#bo+1O2q%gUVbH^(jxZy^=Cv} z5PR?Aaw3l=_P&IUCTiGc>5pO26P)oX6qsbi%|C2Fd5T zNO_FEdm5c+ZTa5%dgMeF|7*e9pma!Jix;BMF9dngWFq4-L1CH>4MhkOl2D-ERAJ)1 z`w(}fV6uD&b{rHYlOv*hzTk9FhX^wxr-5(8%USzpQ2Qgf;qW*lSC-sr zFasS|$sICz%-m1z)Rlq`#_7@DUmmy{u5jNXUwX9*s*aMUJwgGK_RHVV{A3$!;_4-DNM#Y7ZSsDLhbW+0p*Rl86FU{A zqgx=tUWL~-6sEbO2=e+JBT*^BPh)Lbs7M`jLScU>vP5raB2=-}_dj5!Qn7XHJsVQw zjcgz?C{`5oK^tqYC`z_X!^j78iZZPmqBKZRv4lauOj9%~aLdU;70r<)sMJ|;$p#|Q zY*k#cZAIn}E81H)XkwP4`#w5!D$rx>HN{_(t`kl0Q!>q9%4D~akKYcT`zek6|HAdW zLpkAFUo>K&G=B|7JhGLRW9XuLt+YwFjmrL3#x|i7pHs@sYRn3~Wu9q9(mhw^WOm>- zJF3igbS1L;P+1z%f{6Y}SspE+fKffhX_S@nen_ZV`S0C1U~r4_oBlE+qP4R9KoRm_ zit_i4T?j4{<)~u<&NEYv7GcyngJ_lNOeREgU1i>i7fmfx-e$&Nq`c*ak9^xLj#HQA4hH&eBLm=6EPs4kcA zaKm%e<;DQ4C#(816NyyzssaC8_&>Q!H8S?W;l``k{YmH`SgqKNji+nXs_ZUg^mDbA zx55mA)vh5(M&_bA>~lxhGeVte2g>dI)ayENS*L@xB4~O<;TEvv zJTW5`cSqs@aTD_mE}eJ8%6}CjA&12J$Dn@kM)78VDcm3z?_Ok4V5IoV>k;h#P>;sL z;xD?fAM9?6kMl6Yi7DdqnLS`)k~nfB9!XcB;nJ%yf+UUVRv_$Bp_y6?@kKq+c)tA< zGpyGn9Cd~2k7(Ba_g!@8rpamo#rD>kyd@Jck~Nxhw>lwWA5Bvg0?e>a)AF4UG{k9o zN+sMS7d5)!SWsbeLE`FOAYg_h!#f@LNQ{<@b?fn^k|6mff?8&p6xQAk8wE Close (%1) - לסגור (%1) + סגור (%1) Collapse - לצמצם + צמצם Expand - להרחיב + הרחיב @@ -261,67 +261,67 @@ FindDialog - + Search for: חפש עבור: - + Replace with: החלף עם: - + Ignore case התעלם מרישיות - + Whole words only כל המילים בלבד - + Regular expressions ביטויים רגולריים - + Search up חפש מעלה - + Search down חפש מטה - + &Find &מצא - + &Replace &החלף - + Replace &All החלף ה&כל - + Find מציאה - + Replace החלפה - + Replace %n instance(s)? להחליף מאורע %n? @@ -329,19 +329,19 @@ - + Question שאלה - - + + Sorry צר לי - - + + Phrase not found. צירוף מילים לא נמצא. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... מחליף כעת סימני מרכאות... - + Please Wait נא להמתין diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 032c6e80..2217a010 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: Keresés: - + Replace with: Csere: - + Ignore case Kis- és nagybetűk közötti különbség figyelmen kívül hagyása - + Whole words only Csak teljes szavakat - + Regular expressions Szabályos kifejezések - + Search up Keresés felfelé - + Search down Keresés lefelé - + &Find &Keresés... - + &Replace &Csere - + Replace &All Összes &cseréje - + Find Keresés - + Replace Csere - + Replace %n instance(s)? Kicseréljünk %n előfordulást? - + Question Kérdés - - + + Sorry Elnézést - - + + Phrase not found. A keresett kifejezés nem található. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... Idézőjelek cseréje... - + Please Wait Kérlek várj diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 47c68ca8..1b0a4316 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: Փնտրել - + Replace with: Փոխարինել հետևյալով՝ - + Ignore case Մեծատառ թե փոքրատառ՝ կարևոր չէ։ - + Whole words only Միայն ամբողջական բառեր - + Regular expressions Կանոնավոր արտահայտություններ - + Search up Փնտրել վերևում - + Search down Փնտրել ներքևում - + &Find Գ&տնել - + &Replace &Փոխարինել - + Replace &All Փոխարինել &բոլորը - + Find Գտնել - + Replace Փոխարինել - + Replace %n instance(s)? Փոխարինե՞լ %n համընկումը։ - + Question Հարց - - + + Sorry Ներողություն։ - - + + Phrase not found. Փնտրվածը չի գտնվել։ @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... Չակերտների փոփոխում... - + Please Wait Խնդրում ենք սպասել diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index ddf2ee1c..03f3bbb8 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: Cari: - + Replace with: Gantikan dengan: - + Ignore case Abaikan jenis huruf (kapital/kecil) - + Whole words only Hanya keseluruhan kata - + Regular expressions RegEx - + Search up Cari ke atas - + Search down Cari ke bawah - + &Find &Temukan... - + &Replace &Gantikan... - + Replace &All Gantikan &Semua - + Find Temukan - + Replace Gantikan - + Replace %n instance(s)? Gantikan %n lainnya? - + Question Pertanyaan - - + + Sorry Maaf - - + + Phrase not found. Frase tidak ditemukan. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... Mengganti tanda kutip... - + Please Wait Mohon Tunggu diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 4962f975..10d930c9 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Cerca: - + Replace with: Sostituire con: - + Ignore case Ignora maiuscole/minuscole - + Whole words only Solo parole intere - + Regular expressions Espressioni regolari - + Search up Cerca su - + Search down Cerca giù - + &Find &Cerca - + &Replace &Sostituisci - + Replace &All Sostitusci &tutto - + Find Trova - + Replace Sostituisci - + Replace %n instance(s)? Sostituire %n istanze? @@ -329,19 +329,19 @@ - + Question Domanda - - + + Sorry Spiacente - - + + Phrase not found. Frase non trovata. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Sostituzione virgolette ... - + Please Wait Attendere prego diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index c7181ad5..6262641e 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: 検索する文字列: - + Replace with: 置換後の文字列: - + Ignore case 大文字と小文字を区別しない - + Whole words only 単語単位で探す - + Regular expressions 正規表現 - + Search up 前を検索 - + Search down 次を検索 - + &Find 検索 (&F) - + &Replace 置換 (&R) - + Replace &All すべて置換 (&A) - + Find 検索 - + Replace 置換 - + Replace %n instance(s)? %n 件置換しますか? - + Question 確認 - - + + Sorry エラー - - + + Phrase not found. 見つかりませんでした。 @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... 引用符の置換... - + Please Wait お待ちください diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 55809d5f..35d3571d 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: 검색 : - + Replace with: 다음과 바꿈 : - + Ignore case 대/소문자 구분 안함 - + Whole words only 단어로 검색 - + Regular expressions 일반적인 표현 - + Search up 위로 검색 - + Search down 아래로 검색 - + &Find &찾기 - + &Replace &바꾸기 - + Replace &All &모두 바꾸기 - + Find 찾기 - + Replace 바꾸기 - + Replace %n instance(s)? %n 의 사례를 바꿀까요? - + Question 물어볼 것이 있습니다 - - + + Sorry 죄송합니다 - - + + Phrase not found. 문장이 없습니다. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... 따옴표 바꾸기... - + Please Wait 기다려 주세요 diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 42c3c433..bbc60904 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Zoeken naar: - + Replace with: Vervangen door: - + Ignore case Hoofd-/kleine letters negeren - + Whole words only Alleen hele woorden - + Regular expressions Regulieren expressies - + Search up Naar begin zoeken - + Search down Naar einde zoeken - + &Find &Zoek - + &Replace &Vervang - + Replace &All Vervang &Alles - + Find Zoeken - + Replace Vervangen - + Replace %n instance(s)? %n vondst vervangen? @@ -329,19 +329,19 @@ - + Question Vraag - - + + Sorry Sorry - - + + Phrase not found. Zoekterm niet gevonden. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Vervang aanhalingstekens... - + Please Wait Even geduld diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 7fcb8604..de41a786 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Znajdź: - + Replace with: Zastąp: - + Ignore case Ignoruj wielkość liter - + Whole words only Tylko całe wyrazy - + Regular expressions Wyrażenia regularne - + Search up Znajdź poprzedni - + Search down Znajdź następny - + &Find &Znajdź - + &Replace &Zastąp - + Replace &All Zastąp &wszystkie - + Find Znajdź - + Replace Zastąp - + Replace %n instance(s)? Zastąpić %n wystąpienie? @@ -335,19 +335,19 @@ - + Question Pytanie - - + + Sorry Przepraszam - - + + Phrase not found. Nie znaleziono wyrażenia. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Zamienianie cudzysłowów... - + Please Wait Proszę czekać diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index de6d8d59..a3f2a1c3 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Procurar por : - + Replace with: Substituir por : - + Ignore case Ignorar a capitalização - + Whole words only Apenas palavras inteiras - + Regular expressions Expressões regulares - + Search up Para trás - + Search down Para frente - + &Find &Procurar - + &Replace &Substituir - + Replace &All S&ubtituir tudo - + Find Procurar - + Replace Substituir - + Replace %n instance(s)? Substituir %n ocorrência ? @@ -329,19 +329,19 @@ - + Question Pergunta - - + + Sorry Desculpe - - + + Phrase not found. A frase não foi encontrada. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... A substituir as aspas... - + Please Wait Espere por favor diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 20546fae..4e36fe45 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Procurar por: - + Replace with: Substituir por: - + Ignore case Ignorar capitalização - + Whole words only Somente palavras inteiras - + Regular expressions Expressões regulares - + Search up Pesquisar para trás - + Search down Pesquisar para frente - + &Find &Localizar - + &Replace &Substituir - + Replace &All Substituir &todos - + Find Localizar - + Replace Substituir - + Replace %n instance(s)? Substituir %n ocorrência? @@ -329,19 +329,19 @@ - + Question Pergunta - - + + Sorry Desculpe - - + + Phrase not found. A frase não foi encontrada. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Substituindo aspas... - + Please Wait Por favor, aguarde diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 3cbbc1e1..01c6096d 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Caută: - + Replace with: Înlocuieşte cu: - + Ignore case Ignoră minuscule/majuscule - + Whole words only Doar cuvinte întregi - + Regular expressions Expresii regulate - + Search up Caută în sus - + Search down Caută în jos - + &Find Caută - + &Replace Înlocuieşte - + Replace &All Înlocuieşte to&ate - + Find Căutare - + Replace Înlocuire - + Replace %n instance(s)? Înlocuire %n o dată? @@ -335,19 +335,19 @@ - + Question Întrebare - - + + Sorry Scuze - - + + Phrase not found. Fraza nu a fost găsită. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Înlocuire ghilimele... - + Please Wait Vă rugăm aşteptaţi diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index d4bd2cfb..7a193ae4 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Найти: - + Replace with: Заменить на: - + Ignore case Не учитывать регистр - + Whole words only Только слова целиком - + Regular expressions Регулярные выражения - + Search up Найти выше - + Search down Найти ниже - + &Find &Найти - + &Replace &Заменить - + Replace &All Заменить &все - + Find Найти - + Replace Заменить - + Replace %n instance(s)? Заменить %n совпадение? @@ -335,19 +335,19 @@ - + Question Вопрос - - + + Sorry Извините - - + + Phrase not found. Фраза не найдена. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Замена кавычек... - + Please Wait Пожалуйста, подождите diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 3603772a..392703c3 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Vyhľadať: - + Replace with: Nahradiť: - + Ignore case Ignorovať veľkosť začiatočných písmen - + Whole words only Iba celé slová - + Regular expressions Regulárne výrazy - + Search up Hľadať smerom hore - + Search down Hľadať smerom dole - + &Find &Nájsť - + &Replace Na&hradiť - + Replace &All Nahradiť &všetko - + Find Nájsť - + Replace Nahradiť - + Replace %n instance(s)? Nahradiť %n výskyt? @@ -335,19 +335,19 @@ - + Question Otázka - - + + Sorry Prepáčte - - + + Phrase not found. Výraz nebol nájdený. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Nahrádzanie úvodzoviek... - + Please Wait Čakajte prosím diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 9402e36a..62aa5c39 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Претрага за: - + Replace with: Замени са: - + Ignore case Игнориши случај - + Whole words only Само целе речи - + Regular expressions Регуларни изрази - + Search up Претражи горе - + Search down Претражи доле - + &Find &Пронађи - + &Replace &Замени - + Replace &All Замени &све - + Find Пронађи - + Replace Замени - + Replace %n instance(s)? Замените %n пример? @@ -335,19 +335,19 @@ - + Question Питање - - + + Sorry Извините - - + + Phrase not found. Фраза није пронађена. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Замена наводника... - + Please Wait Молимо сачекајте diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 9a8cd16e..405f099f 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -261,67 +261,67 @@ FindDialog - + Search for: Sök efter: - + Replace with: Ersätt med: - + Ignore case Ignorera skiftläge - + Whole words only Endast hela ord - + Regular expressions Reguljära uttryck - + Search up Sök uppåt - + Search down Sök nedåt - + &Find &Sök - + &Replace &Ersätt - + Replace &All Ersätt &alla - + Find Sök - + Replace Ersätt - + Replace %n instance(s)? Ersätt %n förekomst? @@ -329,19 +329,19 @@ - + Question Fråga - - + + Sorry Tyvärr - - + + Phrase not found. Frasen hittades inte. @@ -997,12 +997,12 @@ SmartQuote - + Replacing quotation marks... Ersätter citationstecken... - + Please Wait Vänta diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 928ed650..50f73881 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: Ara: - + Replace with: Şununla değiştir: - + Ignore case Büyük/küçük harf yoksay - + Whole words only Yalnızca tam sözcükler - + Regular expressions Kurallı ifadeler - + Search up Yukarıya doğru ara - + Search down Aşağıya doğru ara - + &Find &Bul - + &Replace &Değiştir - + Replace &All &Tümünü Değiştir - + Find Bul - + Replace Değiştir - + Replace %n instance(s)? %n öğe değiştirilsin mi? - + Question Soru - - + + Sorry Üzgünüm - - + + Phrase not found. İfade bulunamadı. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... Tırnak işaretleri değiştiriliyor... - + Please Wait Lütfen Bekleyin diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index c9d5b971..0d5e8e0f 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -266,67 +266,67 @@ FindDialog - + Search for: Знайти: - + Replace with: Замінити на: - + Ignore case Ігнорувати регістр - + Whole words only Лише повні слова - + Regular expressions - + Search up Пошук уверх - + Search down Пошук вниз - + &Find - + &Replace - + Replace &All - + Find Знайти - + Replace Замінити - + Replace %n instance(s)? Замінити %n примірник? @@ -335,19 +335,19 @@ - + Question Запит - - + + Sorry На жаль - - + + Phrase not found. Фраза не знайдена. @@ -1003,12 +1003,12 @@ SmartQuote - + Replacing quotation marks... Заміна лапок... - + Please Wait Будь ласка, зачекайте diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index febce5bf..4f8b0327 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: Tìm kiếm cho: - + Replace with: Thay thế với: - + Ignore case Bỏ qua trường hợp chữ in hoa - + Whole words only Chỉ toàn bộ các từ này - + Regular expressions Phép toán thông thường - + Search up Tìm kiếm phía trên - + Search down Tìm kiếm phía dưới - + &Find &Tìm kiếm - + &Replace Th&ay thế - + Replace &All Tha&y thế tất cả - + Find Tìm - + Replace Thay thế - + Replace %n instance(s)? Thay thế %n tiến trình? - + Question Câu hỏi - - + + Sorry Rất tiếc - - + + Phrase not found. Không tìm thấy cụm từ. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... Thay đổi các phần đánh dấu trích dẫn.. - + Please Wait Vui lòng đợi diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 0ae7b506..f229f57e 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: 搜索: - + Replace with: 替换为: - + Ignore case 忽略大小写 - + Whole words only 全字匹配 - + Regular expressions 正则表达式 - + Search up 向上搜索 - + Search down 向下搜索 - + &Find 查找(&F) - + &Replace 替换(&R) - + Replace &All 替换全部(&A) - + Find 查找 - + Replace 替换 - + Replace %n instance(s)? 替换 %n 个实例? - + Question 询问 - - + + Sorry 抱歉 - - + + Phrase not found. 没找到词组。 @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... 更换引号... - + Please Wait 请等待 diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index bfa1bc62..07dd3c14 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -256,86 +256,86 @@ FindDialog - + Search for: - + Replace with: - + Ignore case - + Whole words only - + Regular expressions - + Search up - + Search down - + &Find - + &Replace - + Replace &All - + Find - + Replace - + Replace %n instance(s)? - + Question - - + + Sorry - - + + Phrase not found. @@ -991,12 +991,12 @@ SmartQuote - + Replacing quotation marks... - + Please Wait From 7a46d091242363677fa1716fa4078fdd84ee73b6 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 17 Aug 2014 08:53:00 -0400 Subject: [PATCH 227/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 8f065d9c..49a5cc89 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.5.3 +----- +* FIXED: Find did not take smart quotes into account. +* FIXED: Style hierarchy was not always loaded in ODT +* FIXED: Ignored text sections in ODT files. +* FIXED: Was not reading styles for OOXML files. +* Translation updates: Hebrew, Portuguese (Brazil), Swedish. + 1.5.2 ----- * FIXED: Regression with RtfWriter encoding characters in Windows. diff --git a/focuswriter.pro b/focuswriter.pro index 99e9f14e..0a7c24d1 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.5.2 +VERSION = 1.5.3 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 28837464..6985f110 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.2' +VERSION='1.5.3' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index f8d356a1..2679896b 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 2 +!define VERSIONPATCH 3 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 4987062d..71e573ad 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.2 +SET VERSION=1.5.3 ECHO Copying executable MKDIR %APP% From 706db3d6198f40a8645039e1942aef38cb1c170f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 17 Aug 2014 09:03:59 -0400 Subject: [PATCH 228/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 727a14ee..32ad5e1e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.3-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sun, 17 Aug 2014 12:59:45 +0000 + focuswriter (1.5.2-1) unstable; urgency=medium * New upstream release From 76b99d09996b445445766cd46b5081fc875ad9e3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 23 Oct 2014 05:59:06 -0400 Subject: [PATCH 229/630] FIXED: Crash when importing themes. --- src/theme_dialog.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index 74988c8e..ec53f2f9 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -439,7 +439,9 @@ void ThemeDialog::createPreview(const QString& id, bool is_default) Theme theme(id, is_default); ThemeDialog dialog(theme); dialog.m_theme_renderer->wait(); - QCoreApplication::processEvents(); + while (!dialog.m_load_color.resultCount()) { + QCoreApplication::processEvents(); + } dialog.savePreview(); } From ca223c517ac85db87d93b9bf09d1498185fa6c8b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 13 Nov 2014 19:42:37 -0500 Subject: [PATCH 230/630] Update format of appdata. --- resources/unix/focuswriter.appdata.xml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index e9ad2dec..6b3fb8c6 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -1,7 +1,8 @@ - - focuswriter.desktop - CC0 + + focuswriter.desktop + CC0-1.0 + GPL-3.0+ Fullscreen word processor Textový procesor v režimu na celou obrazovku Vollbild-Textverarbeitungsprogramm @@ -73,7 +74,16 @@

另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作

- http://gottcode.org/focuswriter/screenshots/appdata.png + + http://gottcode.org/focuswriter/screenshots/appdata.png + http://gottcode.org/focuswriter/ -
+ http://gottcode.org/focuswriter/bugs/ + http://gottcode.org/tip/ + Graeme Gott + graeme@gottcode.org + + focuswriter + + From 8f6e993bbb50fad5b9a123adc9525c78b347ae71 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 14 Nov 2014 15:43:55 -0500 Subject: [PATCH 231/630] Update appdata file. --- resources/unix/focuswriter.appdata.xml | 28 +++++++++++++++++++++++++- resources/unix/po/ar.po | 18 ++++++++--------- resources/unix/po/ca.po | 18 ++++++++--------- resources/unix/po/cs.po | 18 ++++++++--------- resources/unix/po/da.po | 18 ++++++++--------- resources/unix/po/de.po | 18 ++++++++--------- resources/unix/po/description.pot | 18 ++++++++--------- resources/unix/po/el.po | 18 ++++++++--------- resources/unix/po/en_GB.po | 18 ++++++++--------- resources/unix/po/es.po | 18 ++++++++--------- resources/unix/po/es_MX.po | 18 ++++++++--------- resources/unix/po/fi.po | 18 ++++++++--------- resources/unix/po/fr.po | 18 ++++++++--------- resources/unix/po/he.po | 18 ++++++++--------- resources/unix/po/hu.po | 18 ++++++++--------- resources/unix/po/hy.po | 18 ++++++++--------- resources/unix/po/id.po | 18 ++++++++--------- resources/unix/po/it.po | 18 ++++++++--------- resources/unix/po/ja.po | 18 ++++++++--------- resources/unix/po/ko.po | 18 ++++++++--------- resources/unix/po/nl.po | 18 ++++++++--------- resources/unix/po/pl.po | 18 ++++++++--------- resources/unix/po/pt.po | 18 ++++++++--------- resources/unix/po/pt_BR.po | 18 ++++++++--------- resources/unix/po/ro.po | 18 ++++++++--------- resources/unix/po/ru.po | 18 ++++++++--------- resources/unix/po/sk.po | 18 ++++++++--------- resources/unix/po/sr.po | 18 ++++++++--------- resources/unix/po/sv.po | 18 ++++++++--------- resources/unix/po/tr.po | 18 ++++++++--------- resources/unix/po/uk.po | 18 ++++++++--------- resources/unix/po/update-po.sh | 3 +++ resources/unix/po/vi.po | 18 ++++++++--------- resources/unix/po/zh_CN.po | 18 ++++++++--------- resources/unix/po/zh_TW.po | 18 ++++++++--------- 35 files changed, 327 insertions(+), 298 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 6b3fb8c6..f488c912 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -3,6 +3,32 @@ focuswriter.desktop CC0-1.0 GPL-3.0+ + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + 포커스 라이터 + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter + FocusWriter Fullscreen word processor Textový procesor v režimu na celou obrazovku Vollbild-Textverarbeitungsprogramm @@ -74,7 +100,7 @@

另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作

- + http://gottcode.org/focuswriter/screenshots/appdata.png diff --git a/resources/unix/po/ar.po b/resources/unix/po/ar.po index cbc2dbe4..23989761 100644 --- a/resources/unix/po/ar.po +++ b/resources/unix/po/ar.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/ca.po b/resources/unix/po/ca.po index 978fff8c..f1214656 100644 --- a/resources/unix/po/ca.po +++ b/resources/unix/po/ca.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/cs.po b/resources/unix/po/cs.po index 039cac17..e4b90426 100644 --- a/resources/unix/po/cs.po +++ b/resources/unix/po/cs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-05-30 20:30+0000\n" "Last-Translator: fri\n" "Language-Team: Czech (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Textový procesor v režimu na celou obrazovku" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a " "dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé " "další." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +62,6 @@ msgstr "" "otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase " "budete moci okamžitě dát." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Celoobrazovkový editor textu" diff --git a/resources/unix/po/da.po b/resources/unix/po/da.po index 36691cba..d2ac236d 100644 --- a/resources/unix/po/da.po +++ b/resources/unix/po/da.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Danish (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Tekstbehandlingsprogram i fuld skærm" diff --git a/resources/unix/po/de.po b/resources/unix/po/de.po index 6476410e..34fcaee9 100644 --- a/resources/unix/po/de.po +++ b/resources/unix/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: German (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Vollbild-Textverarbeitungsprogramm" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das " "versperrt, was eigentlich zählt: Ihre Arbeit." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -49,7 +53,7 @@ msgstr "" "Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, " "Rechtschreibkorrektur und vieles mehr." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -59,10 +63,6 @@ msgstr "" "geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, " "sodass Sie ihre Arbeit direkt fortsetzen können." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Vollbild-Textverarbeitung" diff --git a/resources/unix/po/description.pot b/resources/unix/po/description.pot index 5b5b89ec..59d13f94 100644 --- a/resources/unix/po/description.pot +++ b/resources/unix/po/description.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,11 +17,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -29,7 +33,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -37,17 +41,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/el.po b/resources/unix/po/el.po index 9b7f448a..779592a9 100644 --- a/resources/unix/po/el.po +++ b/resources/unix/po/el.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-05-30 01:33+0000\n" "Last-Translator: Γιάννης Ανθυμίδης \n" "Language-Team: Greek (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Επεξεργαστής κειμένου σε πλήρης οθόνη" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Επεξεργαστής Κειμένου σε Πλήρης Οθόνη" diff --git a/resources/unix/po/en_GB.po b/resources/unix/po/en_GB.po index 507d9de3..2cbabca9 100644 --- a/resources/unix/po/en_GB.po +++ b/resources/unix/po/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Full-screen Word Processor" diff --git a/resources/unix/po/es.po b/resources/unix/po/es.po index 3aea5897..34c9abb7 100644 --- a/resources/unix/po/es.po +++ b/resources/unix/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Procesador de textos a pantalla completa" diff --git a/resources/unix/po/es_MX.po b/resources/unix/po/es_MX.po index adc3c575..1e4d481a 100644 --- a/resources/unix/po/es_MX.po +++ b/resources/unix/po/es_MX.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-06-20 04:26+0000\n" "Last-Translator: neoriddle \n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Procesador de palabras en pantalla completa" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -36,7 +40,7 @@ msgstr "" "similar a cuando uno se aparta de todo y se puede concentrar sólo en su " "trabajo." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "características son que actualiza en tiempo real estadísticas, metas " "diarias, abre múltiples documentos, verifica ortografía y mucho más." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +62,6 @@ msgstr "" "posición en la que dejó la última vez para que pueda continuar " "inmediatamente." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Procesador de palabras en pantalla completa" diff --git a/resources/unix/po/fi.po b/resources/unix/po/fi.po index fea219ba..09400a0a 100644 --- a/resources/unix/po/fi.po +++ b/resources/unix/po/fi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-05-31 10:49+0000\n" "Last-Translator: Lasse Liehu \n" "Language-Team: Finnish (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Koko näytön tekstinkäsittelyohjelma" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja " "käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -47,7 +51,7 @@ msgstr "" "automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille " "avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -56,10 +60,6 @@ msgstr "" "Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti " "siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Koko näytön tekstinkäsittelyohjelma" diff --git a/resources/unix/po/fr.po b/resources/unix/po/fr.po index 73d87499..3d5cbbf9 100644 --- a/resources/unix/po/fr.po +++ b/resources/unix/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-07-04 15:09+0000\n" "Last-Translator: Yannick Le Guen \n" "Language-Team: French (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Traitement de texte plein écran" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "de l'écran, ce qui confère au programme un aspect convivial tout en restant " "discret afin que vous puissiez vous plonger dans votre travail." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "jour à la volée, des objectifs quotidiens, l'ouverture de documents " "multiples, une vérification orthographique, et bien plus encore." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +62,6 @@ msgstr "" "automatiquement chargé et vous vous retrouverez là où vous vous étiez " "arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Traitement de texte plein écran" diff --git a/resources/unix/po/he.po b/resources/unix/po/he.po index fc4e16ef..52285e2e 100644 --- a/resources/unix/po/he.po +++ b/resources/unix/po/he.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-26 13:49+0000\n" "Last-Translator: GenghisKhan \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "מעבד תמלילים במסך מלא" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "מעבד תמלילים במסך מלא" diff --git a/resources/unix/po/hu.po b/resources/unix/po/hu.po index 04b7bc62..b4ae804b 100644 --- a/resources/unix/po/hu.po +++ b/resources/unix/po/hu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:47+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Hungarian (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Teljesképernyős szövegszerkesztő" diff --git a/resources/unix/po/hy.po b/resources/unix/po/hy.po index 3a75f4f6..681e9d38 100644 --- a/resources/unix/po/hy.po +++ b/resources/unix/po/hy.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-05-08 14:39+0000\n" "Last-Translator: sedas\n" "Language-Team: Armenian (http://www.transifex.com/projects/p/focuswriter/" @@ -20,11 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Լիէկրան տեքստային խմբագրիչ" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -38,7 +42,7 @@ msgstr "" "խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով " "շեղելու։" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +56,7 @@ msgstr "" "աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում " "միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -63,10 +67,6 @@ msgstr "" "փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն " "այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Լիէկրան տեքստային խմբագրիչ" diff --git a/resources/unix/po/id.po b/resources/unix/po/id.po index 62d49825..ef26bcf0 100644 --- a/resources/unix/po/id.po +++ b/resources/unix/po/id.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:47+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Layar Penuh" diff --git a/resources/unix/po/it.po b/resources/unix/po/it.po index cde74d37..a443dcf2 100644 --- a/resources/unix/po/it.po +++ b/resources/unix/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Italian (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/ja.po b/resources/unix/po/ja.po index 321f326b..807d26a6 100644 --- a/resources/unix/po/ja.po +++ b/resources/unix/po/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:48+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "フルスクリーン・ワードプロセッサ" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +38,7 @@ msgstr "" "スできるようになっているので、プログラムの基本的なルック・アンド・フィールは" "維持したまま、作業に没頭することができるでしょう。" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -45,7 +49,7 @@ msgstr "" "環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表" "示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -54,10 +58,6 @@ msgstr "" "更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も" "含め復元されるので、直ぐに続きを書き始めることが出来ます。" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "フルスクリーン・ワードプロセッサ" diff --git a/resources/unix/po/ko.po b/resources/unix/po/ko.po index dc0f0ee3..fa0a0fb4 100644 --- a/resources/unix/po/ko.po +++ b/resources/unix/po/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-06-26 15:33+0000\n" "Last-Translator: 박정규(Jung Kyu Park) \n" "Language-Team: Korean (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "포커스 라이터" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "풀스크린 워드 프로세서" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니" "다." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -47,7 +51,7 @@ msgstr "" "할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등" "과 그 외에 아주 많은 기능을 갖고 있습니다. " -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -56,10 +60,6 @@ msgstr "" "그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으" "로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "포커스 라이터" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "풀스크린 워드 프로세서" diff --git a/resources/unix/po/nl.po b/resources/unix/po/nl.po index dbfb2891..f92f46e9 100644 --- a/resources/unix/po/nl.po +++ b/resources/unix/po/nl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-30 14:31+0000\n" "Last-Translator: RobertBorst \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Schermvullende tekstverwerker" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in " "staan om complete focus te hebben op het werk" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -47,7 +51,7 @@ msgstr "" "creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, " "meerdere open documenten, spellingscorrectie en nog veel meer." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -56,10 +60,6 @@ msgstr "" "Daar bovenop laadt het programma je huidige onderhande werk en laat het zien " "op de locatie waar je gebleven bent zodat je direct verder kunt" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Volscherm tekstverwerker" diff --git a/resources/unix/po/pl.po b/resources/unix/po/pl.po index efb39a47..85dad280 100644 --- a/resources/unix/po/pl.po +++ b/resources/unix/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-07-08 19:33+0000\n" "Last-Translator: Łukasz Jurczak \n" "Language-Team: Polish (http://www.transifex.com/projects/p/focuswriter/" @@ -20,11 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Pełnoekranowy edytor tekstu" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -32,7 +36,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -40,17 +44,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Pełnoekranowy edytor tekstów" diff --git a/resources/unix/po/pt.po b/resources/unix/po/pt.po index 7cab2e15..fc2b6af8 100644 --- a/resources/unix/po/pt.po +++ b/resources/unix/po/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:48+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Portuguese (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Processador de textos em ecrã completo" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +38,7 @@ msgstr "" "ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o " "espaço e permite ao utilizador focar-se no seu trabalho." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -46,7 +50,7 @@ msgstr "" "mostra estatísticas actualizadas em directo, objectivos diários, também abre " "vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -56,10 +60,6 @@ msgstr "" "coloca o cursor na sua posição em que este esteve quando a sessão anterior " "terminou, para assim poder voltar ao assunto sem demoras." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Processador de textos em ecrã completo" diff --git a/resources/unix/po/pt_BR.po b/resources/unix/po/pt_BR.po index dab311a6..29c9458f 100644 --- a/resources/unix/po/pt_BR.po +++ b/resources/unix/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-07-21 16:57+0000\n" "Last-Translator: Márcio Massula Jr. \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -20,11 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Processador de texto em tela cheia" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -36,7 +40,7 @@ msgstr "" "tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode " "mergulhar em seu trabalho." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "atmosfera ideal. Também permite atualização de estatísticas, metas diárias, " "vários documentos abertos, verificação ortográfica e muito mais." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +62,6 @@ msgstr "" "automaticamente carregado e posicionado onde você parou, de modo que você " "pode reiniciá-lo imediatamente." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Processador de texto em tela cheia" diff --git a/resources/unix/po/ro.po b/resources/unix/po/ro.po index bca3cd82..82647db0 100644 --- a/resources/unix/po/ro.po +++ b/resources/unix/po/ro.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-26 08:16+0000\n" "Last-Translator: Jaff \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/focuswriter/" @@ -20,11 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Procesor de text pe tot ecranul" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -37,7 +41,7 @@ msgstr "" "un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi " "cufunda în munca dvs." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -50,7 +54,7 @@ msgstr "" "zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai " "mult." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +64,6 @@ msgstr "" "va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît " "să puteţi trece imediat la treabă." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Procesor de text pe tot ecranul" diff --git a/resources/unix/po/ru.po b/resources/unix/po/ru.po index 30b71810..781aca5a 100644 --- a/resources/unix/po/ru.po +++ b/resources/unix/po/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Russian (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/sk.po b/resources/unix/po/sk.po index b10dca39..1fc8db12 100644 --- a/resources/unix/po/sk.po +++ b/resources/unix/po/sk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/sr.po b/resources/unix/po/sr.po index fe4b0f2f..a4dd6192 100644 --- a/resources/unix/po/sr.po +++ b/resources/unix/po/sr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-26 09:08+0000\n" "Last-Translator: miroslav \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/focuswriter/" @@ -20,11 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Обрађивач текста у пуном екрану" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -36,7 +40,7 @@ msgstr "" "програму да добије познати изглед и тако вам обезбеди да се посветите вашем " "раду." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "циљеве, истовремено отварање више докумената, проверу правописа и још много " "тога." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +62,6 @@ msgstr "" "учитати на месту где сте последњи пут стали, тако да га можете одмах " "наставити." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Обрађивач текста у пуном екрану" diff --git a/resources/unix/po/sv.po b/resources/unix/po/sv.po index 4995794a..85f7dd60 100644 --- a/resources/unix/po/sv.po +++ b/resources/unix/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-26 21:17+0000\n" "Last-Translator: PavelNicklasson \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Ordbehandlare med helskärmsläge" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +39,7 @@ msgstr "" "känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt " "arbete. " -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -47,7 +51,7 @@ msgstr "" "atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera " "öppna dokument, stavningskontroll och mycket mer." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -56,10 +60,6 @@ msgstr "" "Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas " "automatiskt där du slutade senast så att du omedelbart kan fortsätta" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Ordbehandlare med helskärmsläge" diff --git a/resources/unix/po/tr.po b/resources/unix/po/tr.po index 0213c0de..cdd60809 100644 --- a/resources/unix/po/tr.po +++ b/resources/unix/po/tr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-06-01 12:52+0000\n" "Last-Translator: Cüneyt Oktay \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "Tam ekran kelime işlemci" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Tam Ekran Kelime İşlemci" diff --git a/resources/unix/po/uk.po b/resources/unix/po/uk.po index d943c784..4c928eb5 100644 --- a/resources/unix/po/uk.po +++ b/resources/unix/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/focuswriter/" @@ -19,11 +19,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,17 +43,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" diff --git a/resources/unix/po/update-po.sh b/resources/unix/po/update-po.sh index 6d3c542d..59e3e17d 100755 --- a/resources/unix/po/update-po.sh +++ b/resources/unix/po/update-po.sh @@ -21,10 +21,13 @@ rm -f focuswriter.appdata.xml.in cp focuswriter.appdata.xml focuswriter.appdata.xml.in sed -e '/p xml:lang/ d' \ -e '/summary xml:lang/ d' \ + -e '/name xml:lang/ d' \ -e 's/

/<_p>/' \ -e 's/<\/p>/<\/_p>/' \ -e 's/

/<_summary>/' \ -e 's/<\/summary>/<\/_summary>/' \ + -e 's//<_name>/' \ + -e 's/<\/name>/<\/_name>/' \ -i focuswriter.appdata.xml.in intltool-extract --quiet --type=gettext/xml focuswriter.appdata.xml.in diff --git a/resources/unix/po/vi.po b/resources/unix/po/vi.po index 21a2a807..a15dee0b 100644 --- a/resources/unix/po/vi.po +++ b/resources/unix/po/vi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:49+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/focuswriter/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "Phần mềm soạn thảo văn bản dạng toàn màn hình" diff --git a/resources/unix/po/zh_CN.po b/resources/unix/po/zh_CN.po index f77a6e2b..7d372118 100644 --- a/resources/unix/po/zh_CN.po +++ b/resources/unix/po/zh_CN.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-28 02:52+0000\n" "Last-Translator: min zhang \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" msgstr "全屏文字编辑器" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -33,7 +37,7 @@ msgstr "" "FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标" "滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -43,17 +47,13 @@ msgstr "" "FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功" "能,如动态更新统计,每日计划,多标签页,拼写检查等。" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "全屏文本编辑器" diff --git a/resources/unix/po/zh_TW.po b/resources/unix/po/zh_TW.po index e2efef0a..aa6b4d6b 100644 --- a/resources/unix/po/zh_TW.po +++ b/resources/unix/po/zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 -msgid "Fullscreen word processor" +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" msgstr "" #: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -30,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in.h:4 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -38,17 +42,13 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in.h:5 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "" - #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" msgstr "" From d4c7cebfa3d59f4f7f4c22695fe59e922282f108 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 11 Feb 2015 06:00:02 -0500 Subject: [PATCH 232/630] Fix debian/watch file --- debian/watch | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/debian/watch b/debian/watch index d7dcd282..8dbedfad 100644 --- a/debian/watch +++ b/debian/watch @@ -1,3 +1,2 @@ version=3 -# http://gottcode.org/focuswriter/focuswriter-([\d\.]+)-src.tar.bz2 -http://githubredir.debian.net/github/gottcode/focuswriter/ .*/v(.*)\.tar\.gz +https://github.com/gottcode/focuswriter/releases /gottcode/focuswriter/archive/v(.+)\.tar\.gz From f729c96ead5812370848775b487e2a7f6849ebd7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 11 Feb 2015 06:05:27 -0500 Subject: [PATCH 233/630] Remove dependency on qt5-default --- debian/control | 1 - debian/rules | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/control b/debian/control index dfaa40c4..b3b82aa4 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,6 @@ Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: debhelper (>= 9), - qt5-default, qtbase5-dev, qtmultimedia5-dev, libhunspell-dev, diff --git a/debian/rules b/debian/rules index ce2eb52b..218542de 100755 --- a/debian/rules +++ b/debian/rules @@ -1,4 +1,6 @@ #!/usr/bin/make -f +export QT_SELECT = 5 + %: dh $@ --parallel From a58d88c22de1411df503e949151a00a3c58f9d2e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 11 Feb 2015 06:06:09 -0500 Subject: [PATCH 234/630] Bump standards version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index b3b82aa4..e9ccc54c 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,7 @@ Build-Depends: debhelper (>= 9), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 3.9.5 +Standards-Version: 3.9.6 Homepage: http://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From f6acb81924cc11b538fe4411a3db44f7fbcf6223 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 11 Feb 2015 21:34:45 +0000 Subject: [PATCH 235/630] log changes --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 32ad5e1e..d9626fab 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +focuswriter (1.5.3-2) unstable; urgency=medium + + * Scrape bit rot off debian/watch + * Bumps standards version, no changes required + * Gentler mechanism for specifying qt5 + + -- Barak A. Pearlmutter Wed, 11 Feb 2015 21:34:10 +0000 + focuswriter (1.5.3-1) unstable; urgency=medium * New upstream release From 013a8aaf9bc9a47a6dc707fb8be7b6a9b68f1b6b Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Thu, 12 Feb 2015 08:53:05 +0000 Subject: [PATCH 236/630] install upstream NEWS file as upstream changelog --- debian/rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/debian/rules b/debian/rules index 218542de..cdf85c51 100755 --- a/debian/rules +++ b/debian/rules @@ -4,3 +4,6 @@ export QT_SELECT = 5 %: dh $@ --parallel + +override_dh_installchangelogs: + dh_installchangelogs NEWS From 4e9316cad72d83207fdc8d86dc1c3767982bb9b3 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 20 Mar 2015 10:31:06 +0000 Subject: [PATCH 237/630] log changes --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index d9626fab..f448a149 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +focuswriter (1.5.3-3) unstable; urgency=medium + + * Merge upstream fixes: + - 76b99d0 FIXED: Crash when importing themes. + - ca223c5 Update format of appdata. + - 8f6e993 Update appdata file. + + -- Barak A. Pearlmutter Fri, 20 Mar 2015 10:29:46 +0000 + focuswriter (1.5.3-2) unstable; urgency=medium * Scrape bit rot off debian/watch From 84390e456e2a52215ea925b8bf66442f7eb4975f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 7 May 2015 13:15:33 -0400 Subject: [PATCH 238/630] FIXED: Incorrectly sized icon for daily progress. --- .../icons/oxygen/hicolor/22/view-calendar.png | Bin 673 -> 837 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/images/icons/oxygen/hicolor/22/view-calendar.png b/resources/images/icons/oxygen/hicolor/22/view-calendar.png index d79acee3cf4701d287f1d9c723dcd291a73c93b3..fdcfad507649210364b0472508ea4cce6c7f355a 100644 GIT binary patch literal 837 zcmV-L1G@Z)P)Vi|K~y-6wUo_kTvZsxf9KAbdrKN>q`@Wx3R)2tf)KDSqAn_l zOS7m0C8)R%%)-AwME{yBsu;R(F>P^Cnraq85sWKE!;BM?+Rl`jx%bXF=Y3ry8Sc!T zq<-K7FVDT_O_YiDY;T4#LB=H}*1nx>BcRCTbnww4t8&G6|m z?*nfEU{N}esC4Qc^8t`lIur`U$M=Xb~rNO!|3g3 ziKbG&RVTJF7>o}onbneqMP?Q=(V}^^)@$e-vk9OzEZhju2nB2WY@E4 zC<+52LUPga-j6k=Y|Qjj%rkS-+-n?g?o2{rExGqR&T{KwTbeDKOgs8o2+f5g+tET7%^`~=|uE(n7V z$eg2M4!0nP(zl22K^5l%F2MZMMegt4=ect)@Jstw5GDu<{n*5K@i;FGA|;LtE;2-b z$kA3SxB$8Le7f}soxDfxJi!TxNys!y$2WRKM08Sx5dKz)hyqstqH%Rq9VrnRwohak zS2)Coa8a<+>7c6Y?(Uw-jeF6^yknSx?uz%mUUX!Pc`^%_BYVaethH|f-;|;_Mx)Uv zv8tB%_wQ`UZOO57?msz>qUdDD$6s$Yn7!2ygQ}Ayb$8mgm#;sPX z#Hw22=C={;cAH+WH!^?ZN*9+iH#di>j_`3i!2J9?0N+2@vX9`<$~<( z?VZYLnj#`BEG)3NxQMFy_4V}{@Ixu%EX(R4gp<;lh@G7sL?mBbUA@+7wQg|qD=J2z zQFLPDBP%MR+wK0byuAFb_x?68>?}Hdc4=wp#eZZM*xK6q4fv@j`oH2Yh|*UNIoIHJ P00000NkvXXu0mjfdO3|w literal 673 zcmV;S0$%-zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV& z6*2|E0Q$5500JRNL_t(|+MSV4OBGQZhMzMtcgCAtvcw9Ch#;`qM1&BTwQLjBLfZtj z($CG=FH5QJHPIMtDx5idSG~XXK~*5 za1?-uP%f7RKq*Ckf4^cILqkJCgMonog+)No!!4>@P2Z*0b)s<`htjFiFl~4Upnxiw znKOM+98nC4_?`YRM|eqvCyLWN?!ABI=83OoBvYAk#FfLBJ=GEHrBrN1r!mWMmAMyH zaSKWnq#!fL->cC(laJCj>1_{?*`+T$*RRyRVv+XJF16=FKu4*S-7P**Vpv>TrrMUN zAL~`tbf!)&b>g|6q@;K#5D~I8Cw6N@k)eRguP`P|3`u4v_lz<*|C)0LE^+VUU1rxm zvw??$zZ|ZRN5ZOTlA0#Wd{(uO>pJ9lPR~deIt3E}1`ZwE503I_a8~{U-~xbSzgn$^ z{Wmo=1<>TNu`xh++6!Q4;LxDU7$a$#iX};sogG^z^_*@jxVU+W&G!9mqwo7owhR2g zWu(u?^K-V-Wn1DnmORfzYu#jvjN zz_v$GBw3b87=}ChcPKxri&Ck)%@-CH1n6#BFg-nOo0~i_F+tGk@Zj2a>Fz$S%5{KG zn+xn+ZHwh^HYSt##cwh=IQS4~r-1^F0>=R1-{imyutI}Bz2?uP8FIsw00000NkvXX Hu0mjf;Rh+E From f4a8cf8cafbc8b236f88970ffc78d701d810e220 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 8 May 2015 08:24:53 -0400 Subject: [PATCH 239/630] FIXED: Did not use correct line endings on Windows. --- src/document_writer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/document_writer.cpp b/src/document_writer.cpp index fb1c6b4e..bf2434fd 100644 --- a/src/document_writer.cpp +++ b/src/document_writer.cpp @@ -73,6 +73,7 @@ bool DocumentWriter::write() DocxWriter writer; saved = writer.write(&file, m_document); } else { + file.setTextModeEnabled(true); if (m_type == "rtf") { RtfWriter writer(m_encoding); if (m_encoding.isEmpty()) { From f09b6db6777a3259eee42c324d9ed6d0bc1ec6ec Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 24 May 2015 08:11:59 -0400 Subject: [PATCH 240/630] FIXED: Word count did not handle dashes correctly. --- src/block_stats.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/block_stats.cpp b/src/block_stats.cpp index 344aa764..b9df86b5 100644 --- a/src/block_stats.cpp +++ b/src/block_stats.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -70,7 +70,7 @@ void BlockStats::update(const QString& text) bool word = false; QString::const_iterator end = text.constEnd(); for (QString::const_iterator i = text.constBegin(); i != end; ++i) { - if (i->isLetterOrNumber() || i->category() == QChar::Punctuation_Dash) { + if (i->isLetterOrNumber()) { if (word == false) { word = true; m_words++; @@ -79,7 +79,7 @@ void BlockStats::update(const QString& text) } else if (i->isSpace()) { word = false; m_spaces++; - } else if (*i != 0x2019 && *i != 0x0027) { + } else if (*i != 0x2019 && *i != 0x0027 && *i != 0x002d) { word = false; } } From 8069d6b18b12405d212b0242ee993ef81b01ed14 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 6 Jan 2015 10:35:54 -0500 Subject: [PATCH 241/630] Switch to static builds for Windows. --- resources/windows/installer.nsi | 61 --------------------------------- src/qtzip/qtzip.cpp | 5 +++ windows_deploy.bat | 38 -------------------- 3 files changed, 5 insertions(+), 99 deletions(-) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 2679896b..022a33af 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -163,16 +163,6 @@ Section "install" SetOutPath $INSTDIR File ..\..\release\FocusWriter.exe File ..\symbols\symbols630.dat - File $%QTDIR%\bin\icu*.dll - File $%QTDIR%\bin\libgcc_s_dw2-1.dll - File $%QTDIR%\bin\libstdc++-6.dll - File $%QTDIR%\bin\libwinpthread-1.dll - File $%QTDIR%\bin\Qt5Core.dll - File $%QTDIR%\bin\Qt5Gui.dll - File $%QTDIR%\bin\Qt5Multimedia.dll - File $%QTDIR%\bin\Qt5Network.dll - File $%QTDIR%\bin\Qt5PrintSupport.dll - File $%QTDIR%\bin\Qt5Widgets.dll SetOutPath $INSTDIR\dictionaries File dicts\*.aff @@ -181,16 +171,6 @@ Section "install" SetOutPath $INSTDIR\dictionaries\2\mor-standard File dicts\2\mor-standard\* - SetOutPath $INSTDIR\accessible - File $%QTDIR%\plugins\accessible\qtaccessiblewidgets.dll - - SetOutPath $INSTDIR\audio - File $%QTDIR%\plugins\audio\qtaudio_windows.dll - - SetOutPath $INSTDIR\bearer - File $%QTDIR%\plugins\bearer\qgenericbearer.dll - File $%QTDIR%\plugins\bearer\qnativewifibearer.dll - SetOutPath $INSTDIR\icons\hicolor File ..\images\icons\oxygen\hicolor\index.theme SetOutPath $INSTDIR\icons\hicolor\16 @@ -198,30 +178,6 @@ Section "install" SetOutPath $INSTDIR\icons\hicolor\22 File ..\images\icons\oxygen\hicolor\22\* - SetOutPath $INSTDIR\imageformats - File $%QTDIR%\plugins\imageformats\qdds.dll - File $%QTDIR%\plugins\imageformats\qgif.dll - File $%QTDIR%\plugins\imageformats\qicns.dll - File $%QTDIR%\plugins\imageformats\qico.dll - File $%QTDIR%\plugins\imageformats\qjp2.dll - File $%QTDIR%\plugins\imageformats\qjpeg.dll - File $%QTDIR%\plugins\imageformats\qmng.dll - File $%QTDIR%\plugins\imageformats\qsvg.dll - File $%QTDIR%\plugins\imageformats\qtga.dll - File $%QTDIR%\plugins\imageformats\qtiff.dll - File $%QTDIR%\plugins\imageformats\qwbmp.dll - File $%QTDIR%\plugins\imageformats\qwebp.dll - - SetOutPath $INSTDIR\mediaservice - File $%QTDIR%\plugins\mediaservice\dsengine.dll - File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll - - SetOutPath $INSTDIR\platforms - File $%QTDIR%\plugins\platforms\qwindows.dll - - SetOutPath $INSTDIR\printsupport - File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll - SetOutPath $INSTDIR\sounds File ..\sounds\*.wav @@ -305,16 +261,6 @@ Section "Uninstall" Delete $INSTDIR\FocusWriter.exe Delete $INSTDIR\symbols*.dat Delete $INSTDIR\ReadMe.txt - Delete $INSTDIR\*.dll - Delete $INSTDIR\accessible\*.dll - Delete $INSTDIR\audio\*.dll - Delete $INSTDIR\bearer\*.dll - Delete $INSTDIR\dictionaries\*\*\* - Delete $INSTDIR\icons\hicolor\*\* - Delete $INSTDIR\imageformats\*.dll - Delete $INSTDIR\mediaservice\*.dll - Delete $INSTDIR\platforms\qwindows.dll - Delete $INSTDIR\printsupport\*.dll Delete $INSTDIR\sounds\*.wav Delete $INSTDIR\themes\*\* Delete $INSTDIR\translations\*.qm @@ -324,13 +270,6 @@ Section "Uninstall" RMDir /r $INSTDIR\dictionaries RMDir /r $INSTDIR\icons RMDir /r $INSTDIR\themes - RMDir $INSTDIR\accessible - RMDir $INSTDIR\audio - RMDir $INSTDIR\bearer - RMDir $INSTDIR\imageformats - RMDir $INSTDIR\mediaservice - RMDir $INSTDIR\platforms - RMDir $INSTDIR\printsupport RMDir $INSTDIR\sounds RMDir $INSTDIR\translations RMDir $INSTDIR diff --git a/src/qtzip/qtzip.cpp b/src/qtzip/qtzip.cpp index c80b5039..2c9adfa0 100644 --- a/src/qtzip/qtzip.cpp +++ b/src/qtzip/qtzip.cpp @@ -303,6 +303,9 @@ static QDateTime readMSDosDate(const uchar *src) // for details, see http://www.pkware.com/documents/casestudies/APPNOTE.TXT +namespace +{ + enum HostOS { HostFAT = 0, HostAMIGA = 1, @@ -425,6 +428,8 @@ struct FileHeader QByteArray file_comment; }; +} + QtZipReader::FileInfo::FileInfo() : isDir(false), isFile(false), isSymLink(false), crc(0), size(0) { diff --git a/windows_deploy.bat b/windows_deploy.bat index 71e573ad..8aa1edfb 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -40,44 +40,6 @@ SET THEMES=%APP%\themes MKDIR %THEMES% XCOPY /Q /S /Y resources\themes\* %THEMES% >nul -ECHO Copying Qt libraries -COPY %QTDIR%\bin\icu*.dll %APP% >nul -COPY %QTDIR%\bin\libgcc_s_dw2-1.dll %APP% >nul -COPY "%QTDIR%\bin\libstdc++-6.dll" %APP% >nul -COPY %QTDIR%\bin\libwinpthread-1.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Core.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Gui.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Multimedia.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Network.dll %APP% >nul -COPY %QTDIR%\bin\Qt5PrintSupport.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Widgets.dll %APP% >nul - -ECHO Copying Qt plugins -MKDIR %APP%\accessible -XCOPY /Q /S /Y %QTDIR%\plugins\accessible %APP%\accessible >nul -DEL %APP%\accessible\*d.dll >nul - -MKDIR %APP%\audio -COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul - -MKDIR %APP%\bearer -XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul -DEL %APP%\bearer\*d.dll >nul - -MKDIR %APP%\platforms -COPY %QTDIR%\plugins\platforms\qwindows.dll %APP%\platforms >nul - -MKDIR %APP%\imageformats -XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul -DEL %APP%\imageformats\*d.dll >nul - -MKDIR %APP%\mediaservice -XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul -DEL %APP%\mediaservice\*d.dll >nul - -MKDIR %APP%\printsupport -COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul - ECHO Making portable MKDIR %APP%\Data From 609e8ce5b9cc4f3acb87f4e3f6dc08e6758da6c4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 2 Jun 2015 05:39:53 -0400 Subject: [PATCH 242/630] Relax version check of ZIP to handle broken ZIP files. --- src/qtzip/qtzip.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qtzip/qtzip.cpp b/src/qtzip/qtzip.cpp index 2c9adfa0..ba707a15 100644 --- a/src/qtzip/qtzip.cpp +++ b/src/qtzip/qtzip.cpp @@ -991,8 +991,7 @@ QByteArray QtZipReader::fileData(const QString &fileName) const ushort version_needed = readUShort(header.h.version_needed); if (version_needed > ZIP_VERSION) { - qWarning("QtZip: .ZIP specification version %d implementationis needed to extract the data.", version_needed); - return QByteArray(); + qWarning("QtZip: .ZIP specification version %d implementation is needed to extract the data.", version_needed); } ushort general_purpose_bits = readUShort(header.h.general_purpose_bits); From 642b6a1868e777cb26be35d966e72575e036568d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 9 Jun 2015 13:35:35 -0400 Subject: [PATCH 243/630] FIXED: Broken shortcut for disabling focused text in Windows. --- src/window.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/window.cpp b/src/window.cpp index 9c703d49..596536c2 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1451,6 +1451,7 @@ void Window::initMenus() m_focus_actions->addAction(focus_mode[i]); ActionManager::instance()->addAction(QString("FocusedText%1").arg(i), focus_mode[i]); } + focus_mode[0]->setShortcut(tr("Ctrl+Shift+`")); focus_mode[qBound(0, QSettings().value("Window/FocusedText").toInt(), 3)]->setChecked(true); connect(m_focus_actions, SIGNAL(triggered(QAction*)), m_documents, SLOT(setFocusMode(QAction*))); From 93052c86a694c6c9c689b728366cd54e9bb67f81 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jun 2015 12:14:03 -0400 Subject: [PATCH 244/630] Remove deprecated code for unsupported Mac OS X versions. --- src/spelling/dictionary_provider_nsspellchecker.mm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/spelling/dictionary_provider_nsspellchecker.mm b/src/spelling/dictionary_provider_nsspellchecker.mm index 1ce4867f..6ddd62ce 100644 --- a/src/spelling/dictionary_provider_nsspellchecker.mm +++ b/src/spelling/dictionary_provider_nsspellchecker.mm @@ -131,15 +131,10 @@ bool isValid() const NSString* nsstring = [NSString stringWithCharacters:reinterpret_cast(word.unicode()) length:word.length()]; - NSArray* array; - if ([[NSSpellChecker sharedSpellChecker] respondsToSelector:@selector(guessesForWordRange)]) { - array = [[NSSpellChecker sharedSpellChecker] guessesForWordRange:range - inString:nsstring - language:m_language - inSpellDocumentWithTag:m_tag]; - } else { - array = [[NSSpellChecker sharedSpellChecker] guessesForWord:nsstring]; - } + NSArray* array = [[NSSpellChecker sharedSpellChecker] guessesForWordRange:range + inString:nsstring + language:m_language + inSpellDocumentWithTag:m_tag]; QStringList suggestions; if (array) { From d9b1ee1a4aacb98a7f3b6af0739cc5eedeac7cad Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jun 2015 13:40:03 -0400 Subject: [PATCH 245/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 45 +- resources/unix/focuswriter.desktop | 17 +- resources/unix/po/ar.po | 2 +- resources/unix/po/ca.po | 2 +- resources/unix/po/cs.po | 2 +- resources/unix/po/da.po | 10 +- resources/unix/po/de.po | 2 +- resources/unix/po/description.pot | 2 +- resources/unix/po/el.po | 20 +- resources/unix/po/en_GB.po | 2 +- resources/unix/po/eo.po | 69 + resources/unix/po/es.po | 2 +- resources/unix/po/es_MX.po | 2 +- resources/unix/po/fi.po | 2 +- resources/unix/po/fr.po | 2 +- resources/unix/po/he.po | 2 +- resources/unix/po/hu.po | 2 +- resources/unix/po/hy.po | 2 +- resources/unix/po/id.po | 21 +- resources/unix/po/it.po | 9 +- resources/unix/po/ja.po | 2 +- resources/unix/po/ko.po | 2 +- resources/unix/po/lt.po | 71 + resources/unix/po/nl.po | 2 +- resources/unix/po/pl.po | 20 +- resources/unix/po/pt.po | 33 +- resources/unix/po/pt_BR.po | 2 +- resources/unix/po/ro.po | 2 +- resources/unix/po/ru.po | 36 +- resources/unix/po/sk.po | 2 +- resources/unix/po/sr.po | 2 +- resources/unix/po/sv.po | 2 +- resources/unix/po/tr.po | 2 +- resources/unix/po/uk.po | 29 +- resources/unix/po/vi.po | 2 +- resources/unix/po/zh_CN.po | 2 +- resources/unix/po/zh_TW.po | 22 +- translations/focuswriter_ar.ts | 11 +- translations/focuswriter_ca.ts | 11 +- translations/focuswriter_cs.ts | 11 +- translations/focuswriter_da.ts | 11 +- translations/focuswriter_de.qm | Bin 33256 -> 36478 bytes translations/focuswriter_de.ts | 115 +- translations/focuswriter_el.qm | Bin 29978 -> 37154 bytes translations/focuswriter_el.ts | 191 +- translations/focuswriter_en.ts | 11 +- translations/focuswriter_en_GB.ts | 11 +- translations/focuswriter_eo.qm | Bin 0 -> 34716 bytes translations/focuswriter_eo.ts | 2242 +++++++++++++++++++++++ translations/focuswriter_es.ts | 11 +- translations/focuswriter_es_MX.ts | 11 +- translations/focuswriter_fi.ts | 11 +- translations/focuswriter_fr.ts | 11 +- translations/focuswriter_he.ts | 11 +- translations/focuswriter_hu.ts | 11 +- translations/focuswriter_hy.ts | 11 +- translations/focuswriter_id.qm | Bin 27686 -> 34181 bytes translations/focuswriter_id.ts | 181 +- translations/focuswriter_it.qm | Bin 28580 -> 32672 bytes translations/focuswriter_it.ts | 109 +- translations/focuswriter_ja.ts | 11 +- translations/focuswriter_ko.ts | 11 +- translations/focuswriter_lt.qm | Bin 0 -> 36326 bytes translations/focuswriter_lt.ts | 2248 ++++++++++++++++++++++++ translations/focuswriter_nl.ts | 11 +- translations/focuswriter_pl.qm | Bin 28764 -> 35888 bytes translations/focuswriter_pl.ts | 199 ++- translations/focuswriter_pt.ts | 11 +- translations/focuswriter_pt_BR.qm | Bin 36502 -> 36500 bytes translations/focuswriter_pt_BR.ts | 13 +- translations/focuswriter_ro.ts | 11 +- translations/focuswriter_ru.qm | Bin 28960 -> 36201 bytes translations/focuswriter_ru.ts | 201 +-- translations/focuswriter_sk.ts | 11 +- translations/focuswriter_sr.ts | 11 +- translations/focuswriter_sv.ts | 11 +- translations/focuswriter_tr.qm | Bin 30984 -> 32592 bytes translations/focuswriter_tr.ts | 61 +- translations/focuswriter_uk.qm | Bin 19408 -> 35899 bytes translations/focuswriter_uk.ts | 393 +++-- translations/focuswriter_vi.ts | 11 +- translations/focuswriter_zh_CN.ts | 11 +- translations/focuswriter_zh_TW.ts | 11 +- 83 files changed, 5799 insertions(+), 868 deletions(-) create mode 100644 resources/unix/po/eo.po create mode 100644 resources/unix/po/lt.po create mode 100644 translations/focuswriter_eo.qm create mode 100644 translations/focuswriter_eo.ts create mode 100644 translations/focuswriter_lt.qm create mode 100644 translations/focuswriter_lt.ts diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index f488c912..36d9d5a8 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -9,6 +9,7 @@ FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter FocusWriter @@ -19,85 +20,121 @@ FocusWriter FocusWriter 포커스 라이터 + FocusWriter FocusWriter FocusWriter FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter + FocusWriter Fullscreen word processor Textový procesor v režimu na celou obrazovku + Tekstbehandling i fuldskærm Vollbild-Textverarbeitungsprogramm Επεξεργαστής κειμένου σε πλήρης οθόνη + Plenekrana tekstoprilaborilo Procesador de palabras en pantalla completa Koko näytön tekstinkäsittelyohjelma Traitement de texte plein écran מעבד תמלילים במסך מלא Լիէկրան տեքստային խմբագրիչ + Layar Penuh + Un semplice editor di testo a pieno schermo フルスクリーン・ワードプロセッサ 풀스크린 워드 프로세서 + Viso ekrano žodžių doroklė Schermvullende tekstverwerker Pełnoekranowy edytor tekstu - Processador de textos em ecrã completo + Processador de texto em ecrã completo Processador de texto em tela cheia Procesor de text pe tot ecranul + Полноэкранный текстовый редактор Обрађивач текста у пуном екрану Ordbehandlare med helskärmsläge Tam ekran kelime işlemci + Повноекранний текстовий редактор 全屏文字编辑器 + 全螢幕文字處理器

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

FocusWriter je jednoduchý, nerozptylující zpracovatel textu. Používá schovávající se rozhraní, ke kterému se dostanete pohybem ukazovátka vaší myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce.

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

+

Το FocusWriter είναι ένα απλό, χωρίς περισπασμούς πρόγραμμα επεξεργασίας κειμένου. Χρησιμοποιεί μια κρυφή διεπαφή που μπορείτε να αποκτήσετε πρόσβαση μετακινώντας το ποντίκι σας προς τα άκρα της οθόνης, επιτρέποντας στο πρόγραμμα να έχει μια οικεία εμφάνιση και αίσθηση σε αυτόενώ εξακολουθεί να πάρει έξω από το δρόμο, έτσι ώστε να μπορείτε να αφεθείτε στην εργασία σας.

+

FocusWriter estas simpla senmalatentiga tekstoprilaborilo. Ĝi uzas kaŝatan interfacon, kion vi atingas per movi vian muson al la randoj de la ekrano. Tiel la programaro eblas havi kutiman fasadon, dum ankoraŭ estas malobstrukciĝante por ke vi povas ĉirkaŭi vin en via laboro.

FocusWriter es un procesador de palabras simple y sin distractores. Éste utiliza una interfaz aislada que puede ser accedida moviendo el ratón a las esquinas de la pantalla, permitiendo que el programa tener una apariencia similar a cuando uno se aparta de todo y se puede concentrar sólo en su trabajo.

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

FocusWriter est un traitement de texte simple et non intrusif. Il utilise une interface masquée, accessible en déplaçant votre souris vers les coins de l'écran, ce qui confère au programme un aspect convivial tout en restant discret afin que vous puissiez vous plonger dans votre travail.

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

+

FocusWriter merupakan pengolah kata yang bebas pengalihan dan sederhana. Menggunakan antarmuka yang Anda akses dengan cara menggerakkan mouse ke tepi layar, membuat program ini memilik tampilan yang familiar dan memudahkan Anda untuk menyelam ke dalam pekerjaan Anda.

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니다.

+

FocusWriter yra paprasta žodžių doroklė be išblaškymų. Ji naudoja besislepiančią sąsają, kurią galima pasiekti, nuvedant pelės žymeklį prie ekrano ribų. Ši sąsaja suteikia programai pažįstamą išvaizdą ir jausmą, todėl programa jums netrukdo, o jūs galite pilnai pasinerti į savo darbą.

Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersinterface totdat de muis naar de rand van het scherm geschoven wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in staan om complete focus te hebben op het werk

-

FocusWriter é um processador de textos simples e sem distracções. A interface só aparece quando o apontador do rato se aproximar das margens do ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o espaço e permite ao utilizador focar-se no seu trabalho.

+

FocusWriter to prosty, pełnoekranowy edytor tekstu. Korzysta z ukrytego interfejsu, do którego otrzymujesz dostęp przesuwając kursor myszkę do krawędzi ekranu. W ten sposób program skupia twoją uwagę na to, co naprawdę jest najważniejsze: twoja praca.

+

FocusWriter é um processador de texto simples e sem distrações. A interface só aparece quando o cursor se aproxima das margens do ecrã, proporcionando um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe permite focar-se no seu trabalho.

FocusWriter é um processador de texto simples livre de distrações. Ele utiliza uma interface oculta, acessível ao mover o mouse para os cantos da tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode mergulhar em seu trabalho.

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

+

FocusWriter это простой текстовый редактор, позволяющий полностью сосредоточиться на работе. В нем используется выдвижной интерфейс, управляющие элементы которого становятся доступными при наведении стрелки мыши к краям экрана. Это дает возможность добиться максимально располагающего к пользователю внешнего вида и полностью погрузиться в вашу работу.

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

+

FocusWriter це простий текстовий редактор, що дозволяє повністю зосередитися на роботі. Він використовує висувний інтерфейс, який з’являється при наведенні стрілки миші до країв екрану. Це дає можливість досягти максимально зручного для користувача зовнішнього вигляду, який не відволікає, а дозволяє повністю зануритися в роботу.

FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。

+

FocusWriter 是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫作。

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

+

Το FocusWriter σας επιτρέπει να προσαρμόσετε το περιβάλλον σας, δημιουργώντας θέματα που ελέγχουν την γραμματοσειρά, τα χρώματα και το φόντο της εικόνας για να προσθέσετε ατμόσφαιρα. Διαθέτει επίσης on-the-fly στατιστικές ενημέρωσης, καθημερινούς στόχους, πολλά ανοικτά έγγραφα, ορθογραφικό έλεγχο, και πολλά άλλα.

+

FocusWriter ebligas vin agordi vian verkejon per kreado de haŭtoj, kiuj agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da malfermataj dokumentoj, literumada kontrolo, kaj multe pli.

FocusWriter permite personalizar su ambiente creado temas que controlan la fuente, los colores y la imagen de fondo para crear un ambiente. Otras características son que actualiza en tiempo real estadísticas, metas diarias, abre múltiples documentos, verifica ortografía y mucho más.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka vaihtavat fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

FocusWriter vous permet de personnaliser votre environnement en créant des thèmes composés de polices, de couleurs et d'images d'arrière-plan afin d'agrémenter votre interface. Il inclut également des statistiques mises à jour à la volée, des objectifs quotidiens, l'ouverture de documents multiples, une vérification orthographique, et bien plus encore.

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

+

FocusWriter membuat Anda untuk menciptakan lingkungan Anda sendiri dengan cara membuat tema yang mengatur jenis huruf, warna, dan gambar latar untuk menambah suasana. Program ini juga dilengkapi oleh statistika yang selalu diperbarui setiap saat, tujuan sehari-hari, membuka banyak dokumen sekaligus, pengecekan ejaan, dan masih banyak lagi.

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등과 그 외에 아주 많은 기능을 갖고 있습니다.

+

FocusWriter leidžia jums tinkinti savo aplinką, kuriant temas, kurios kontroliuoja šriftą, spalvas ir fono paveikslą bei sukuria norimą atmosferą. Programoje yra statistikos atnaujinimo, kasdienio tikslo, kelių atvertų dokumentų, rašybos tikrinimo ir daugybė kitų funkcijų.

Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, meerdere open documenten, spellingscorrectie en nog veel meer.

-

FocusWriter permite personalizar o ambiente de trabalho com a criação de temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também mostra estatísticas actualizadas em directo, objectivos diários, também abre vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais.

+

FocusWriter umożliwia dostosowanie wyglądu poprzez tworzenie motywów, które ustawiają czcionkę, kolory i obraz tła, aby stworzyć własną atmosferę. Posiada również aktualizację statystyk w locie, codzienne cele, otwieranie wielu dokumentów jednocześnie, sprawdzanie pisowni i dużo więcej.

+

FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação de temas, controlando a fonte tipográfica, cores e imagem de fundo. Também dispõe de estatísticas atualizadas, objetivos diários, vários documentos abertos ao mesmo tempo, verificação ortográfica, e muito mais.

FocusWriter permite que você personalize o seu ambiente, criando temas que possibilitam a mudança da fonte, cores e imagem de fundo, para criar a atmosfera ideal. Também permite atualização de estatísticas, metas diárias, vários documentos abertos, verificação ortográfica e muito mais.

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

+

FocusWriter позволит вам настроить свое рабочее окружение путем создания тем, в которых можно, для добавления нужной атмосферы, управлять шрифтами, цветами и фоновыми изображениями. Также текстовый редактор умеет вести статистику, обновляемую в реальном времени, ставить ежедневные рабочие цели, открывать сразу несколько документов одновременно, проверять орфографию и много чего еще.

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

+

FocusWriter дозволить вам налаштувати своє робоче оточення шляхом створення тем, в яких можна управляти шрифтами, кольорами та фоновими зображеннями. Також текстовий редактор вміє вести статистику, оновлювану в реальному часі, ставити щоденні робочі цілі, відкривати декілька документів одночасно, перевіряти орфографію і багато чого ще.

FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功能,如动态更新统计,每日计划,多标签页,拼写检查等。

+

FocusWriter 可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統計;每日目標、多重開啟文件、拼寫檢查等等的多種功能。

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

Navíc, když otevřete program, vaše rozdělaná práce se automaticky nahraje a otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase budete moci okamžitě dát.

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

+

Επιπλέον, όταν ανοίγετε στο πρόγραμμα την τρέχουσα εργασία σας θα φορτώσει αυτόματα και την θέση όπου σταματήσατε, έτσι ώστε να μπορείτε να μεταβείτε αμέσως πίσω.

+

Plue, kiam vi lanĉas la programaron, via lasta malpreta verko aŭtomate ŝarĝas kaj allokas vin, kie vi laste ĉesis, por ke vi povas daŭri verki tuj.

Además, cuando se abre el programa, su trabajo actual se cargará y la posición en la que dejó la última vez para que pueda continuar inmediatamente.

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

De plus, lorsque vous lancez le programme, votre travail en cours sera automatiquement chargé et vous vous retrouverez là où vous vous étiez arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage.

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

+

Ditambah lagi, ketika Anda membuka program, pekerjaan Anda yang sedang dikerjaan akan otomatis dimuat dan memulai di mana Anda terakhir meninggalkannya sehingga Anda bisa memulainya lagi lebih cepat.

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다.

+

Be to, kai atidarote programą, jūsų dabartinis darbas yra automatiškai įkeliamas toje vietoje, kurioje paskutinį kartą užbaigėte, todėl nedvejodami galite vėl kibti į darbą.

Daar bovenop laadt het programma je huidige onderhande werk en laat het zien op de locatie waar je gebleven bent zodat je direct verder kunt

-

Além do resto, o programa abre automaticamente o último trabalho em curso e coloca o cursor na sua posição em que este esteve quando a sessão anterior terminou, para assim poder voltar ao assunto sem demoras.

+

Ponadto, program automatycznie ładuje przy starcie ostatni otworzony dokument i pozycję, na której ostatnio przerwano, aby można od razu kontynuować pracę.

+

Além disto, o programa abre automaticamente o trabalho em curso e posiciona o cursor na posição em que se encontrava na sessão anterior, para que possa voltar ao trabalho sem demoras.

Além disso, quando você abrir o programa, seu trabalho em andamento será automaticamente carregado e posicionado onde você parou, de modo que você pode reiniciá-lo imediatamente.

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

+

Кроме того, когда вы откроете программу, сразу же будет загружен прогресс вашей текущей работы и курсор перейдет на ту позицию, на которой в последний раз работа была прервана. Так вы сможете практически мгновенно вернуться к делу.

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

+

Крім того, коли ви відкриєте програму, відразу ж буде завантажений прогрес вашої поточної роботи і курсор перейде на ту позицію, на якій в останній раз робота була перервана. Так ви зможете практично миттєво повернутися до справи.

另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作

+

另外,打開您正在撰寫的文件會自動跳至您最後一次編輯的位置,讓您可以繼續進行工作。

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index c69de640..7d84d2ec 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -6,6 +6,7 @@ Name[da]=FocusWriter Name[de]=FocusWriter Name[el]=FocusWriter Name[en_GB]=FocusWriter +Name[eo]=FocusWriter Name[es]=FocusWriter Name[es_MX]=FocusWriter Name[fi]=FocusWriter @@ -16,22 +17,27 @@ Name[hy]=FocusWriter Name[id]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 +Name[lt]=FocusWriter Name[nl]=FocusWriter Name[pl]=FocusWriter Name[pt]=FocusWriter Name[pt_BR]=FocusWriter Name[ro]=FocusWriter +Name[ru]=FocusWriter Name[sr]=FocusWriter Name[sv]=FocusWriter Name[tr]=FocusWriter +Name[uk]=FocusWriter Name[vi]=FocusWriter Name[zh_CN]=FocusWriter +Name[zh_TW]=FocusWriter GenericName=Fullscreen Word Processor GenericName[cs]=Celoobrazovkový editor textu GenericName[da]=Tekstbehandlingsprogram i fuld skærm GenericName[de]=Vollbild-Textverarbeitung GenericName[el]=Επεξεργαστής Κειμένου σε Πλήρης Οθόνη GenericName[en_GB]=Full-screen Word Processor +GenericName[eo]=Plenekrana Tekstoprilaborilo GenericName[es]=Procesador de textos a pantalla completa GenericName[es_MX]=Procesador de palabras en pantalla completa GenericName[fi]=Koko näytön tekstinkäsittelyohjelma @@ -42,22 +48,27 @@ GenericName[hy]=Լիէկրան տեքստային խմբագրիչ GenericName[id]=Layar Penuh GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 +GenericName[lt]=Viso Ekrano Žodžių Doroklė GenericName[nl]=Volscherm tekstverwerker GenericName[pl]=Pełnoekranowy edytor tekstów -GenericName[pt]=Processador de textos em ecrã completo +GenericName[pt]=Processador de texto em ecrã completo GenericName[pt_BR]=Processador de texto em tela cheia GenericName[ro]=Procesor de text pe tot ecranul +GenericName[ru]=Полноэкранный текстовый редактор GenericName[sr]=Обрађивач текста у пуном екрану GenericName[sv]=Ordbehandlare med helskärmsläge GenericName[tr]=Tam Ekran Kelime İşlemci +GenericName[uk]=Повноекранний текстовий редактор GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình GenericName[zh_CN]=全屏文本编辑器 +GenericName[zh_TW]=全螢幕文字處理器 Comment=Write without distractions Comment[cs]=Pište bez rozptylování Comment[da]=Skriv uden at blive distraheret Comment[de]=Schreibe ohne Ablenkung Comment[el]=Γράψτε χωρίς ενόχληση Comment[en_GB]=Write without distractions +Comment[eo]=Skribu sen malatentigoj Comment[es]=Escriba sin distracciones Comment[es_MX]=Escriba sin distractores Comment[fi]=Kirjoita ilman häiriötekijöitä @@ -68,16 +79,20 @@ Comment[hy]=Գրիր առանց ուշադրության շեղման Comment[id]=Menulis tanpa gangguan Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=글쓰기에 집중할 수 있는 +Comment[lt]=Rašykite be blaškymosi Comment[nl]=Schrijf zonder afleiding Comment[pl]=Pisz bez zakłóceń Comment[pt]=Escreva sem distrações Comment[pt_BR]=Escreva sem distrações Comment[ro]=Scrieţi fără distrageri +Comment[ru]=Писать не отвлекаясь Comment[sr]=Пишите без ометања Comment[sv]=Skriv utan distraktioner Comment[tr]=Dikkat dağıtıcılar olmadan yazın +Comment[uk]=Писати не відволікаючись Comment[vi]=Không tạo sự xao nhãng khi viết Comment[zh_CN]=专心致志地写作 +Comment[zh_TW]=專心寫作 Icon=focuswriter TryExec=focuswriter Exec=focuswriter %F diff --git a/resources/unix/po/ar.po b/resources/unix/po/ar.po index 23989761..2ded9fb0 100644 --- a/resources/unix/po/ar.po +++ b/resources/unix/po/ar.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/ca.po b/resources/unix/po/ca.po index f1214656..de5a00e8 100644 --- a/resources/unix/po/ca.po +++ b/resources/unix/po/ca.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/cs.po b/resources/unix/po/cs.po index e4b90426..c682da42 100644 --- a/resources/unix/po/cs.po +++ b/resources/unix/po/cs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-05-30 20:30+0000\n" "Last-Translator: fri\n" "Language-Team: Czech (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/da.po b/resources/unix/po/da.po index d2ac236d..7bb91706 100644 --- a/resources/unix/po/da.po +++ b/resources/unix/po/da.po @@ -3,13 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Morten Juhl-Johansen Zölde-Fejér , 2015 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:46+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2015-02-20 17:29+0000\n" +"Last-Translator: Morten Juhl-Johansen Zölde-Fejér \n" "Language-Team: Danish (http://www.transifex.com/projects/p/focuswriter/" "language/da/)\n" "Language: da\n" @@ -24,7 +26,7 @@ msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "Tekstbehandling i fuldskærm" #: ../focuswriter.appdata.xml.in.h:3 msgid "" diff --git a/resources/unix/po/de.po b/resources/unix/po/de.po index 34fcaee9..1391000e 100644 --- a/resources/unix/po/de.po +++ b/resources/unix/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: German (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/description.pot b/resources/unix/po/description.pot index 59d13f94..5eaf1e09 100644 --- a/resources/unix/po/description.pot +++ b/resources/unix/po/description.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/resources/unix/po/el.po b/resources/unix/po/el.po index 779592a9..c8f912b0 100644 --- a/resources/unix/po/el.po +++ b/resources/unix/po/el.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Wasilis Mandratzis-Walz, 2015 # Γιάννης Ανθυμίδης , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-05-30 01:33+0000\n" -"Last-Translator: Γιάννης Ανθυμίδης \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2015-04-19 03:50+0000\n" +"Last-Translator: Wasilis Mandratzis-Walz\n" "Language-Team: Greek (http://www.transifex.com/projects/p/focuswriter/" "language/el/)\n" "Language: el\n" @@ -34,6 +35,11 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"Το FocusWriter είναι ένα απλό, χωρίς περισπασμούς πρόγραμμα επεξεργασίας " +"κειμένου. Χρησιμοποιεί μια κρυφή διεπαφή που μπορείτε να αποκτήσετε πρόσβαση " +"μετακινώντας το ποντίκι σας προς τα άκρα της οθόνης, επιτρέποντας στο " +"πρόγραμμα να έχει μια οικεία εμφάνιση και αίσθηση σε αυτόενώ εξακολουθεί να " +"πάρει έξω από το δρόμο, έτσι ώστε να μπορείτε να αφεθείτε στην εργασία σας." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -42,6 +48,11 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"Το FocusWriter σας επιτρέπει να προσαρμόσετε το περιβάλλον σας, " +"δημιουργώντας θέματα που ελέγχουν την γραμματοσειρά, τα χρώματα και το φόντο " +"της εικόνας για να προσθέσετε ατμόσφαιρα. Διαθέτει επίσης on-the-fly " +"στατιστικές ενημέρωσης, καθημερινούς στόχους, πολλά ανοικτά έγγραφα, " +"ορθογραφικό έλεγχο, και πολλά άλλα." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -49,6 +60,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Επιπλέον, όταν ανοίγετε στο πρόγραμμα την τρέχουσα εργασία σας θα φορτώσει " +"αυτόματα και την θέση όπου σταματήσατε, έτσι ώστε να μπορείτε να μεταβείτε " +"αμέσως πίσω." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" diff --git a/resources/unix/po/en_GB.po b/resources/unix/po/en_GB.po index 2cbabca9..6b51787e 100644 --- a/resources/unix/po/en_GB.po +++ b/resources/unix/po/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" diff --git a/resources/unix/po/eo.po b/resources/unix/po/eo.po new file mode 100644 index 00000000..0c3604d6 --- /dev/null +++ b/resources/unix/po/eo.po @@ -0,0 +1,69 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Synteq, 2015 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2015-06-06 18:49+0000\n" +"Last-Translator: Synteq\n" +"Language-Team: Esperanto (http://www.transifex.com/projects/p/focuswriter/" +"language/eo/)\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "Plenekrana tekstoprilaborilo" + +#: ../focuswriter.appdata.xml.in.h:3 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" +"FocusWriter estas simpla senmalatentiga tekstoprilaborilo. Ĝi uzas kaŝatan " +"interfacon, kion vi atingas per movi vian muson al la randoj de la ekrano. " +"Tiel la programaro eblas havi kutiman fasadon, dum ankoraŭ estas " +"malobstrukciĝante por ke vi povas ĉirkaŭi vin en via laboro." + +#: ../focuswriter.appdata.xml.in.h:4 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" +"FocusWriter ebligas vin agordi vian verkejon per kreado de haŭtoj, kiuj " +"agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ " +"havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da " +"malfermataj dokumentoj, literumada kontrolo, kaj multe pli." + +#: ../focuswriter.appdata.xml.in.h:5 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" +"Plue, kiam vi lanĉas la programaron, via lasta malpreta verko aŭtomate " +"ŝarĝas kaj allokas vin, kie vi laste ĉesis, por ke vi povas daŭri verki tuj." + +#: ../focuswriter.desktop.in.h:2 +msgid "Fullscreen Word Processor" +msgstr "Plenekrana Tekstoprilaborilo" + +#: ../focuswriter.desktop.in.h:3 +msgid "Write without distractions" +msgstr "Skribu sen malatentigoj" diff --git a/resources/unix/po/es.po b/resources/unix/po/es.po index 34c9abb7..11ac7691 100644 --- a/resources/unix/po/es.po +++ b/resources/unix/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:46+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/es_MX.po b/resources/unix/po/es_MX.po index 1e4d481a..6befcbe8 100644 --- a/resources/unix/po/es_MX.po +++ b/resources/unix/po/es_MX.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-06-20 04:26+0000\n" "Last-Translator: neoriddle \n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/" diff --git a/resources/unix/po/fi.po b/resources/unix/po/fi.po index 09400a0a..26f5dd11 100644 --- a/resources/unix/po/fi.po +++ b/resources/unix/po/fi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-05-31 10:49+0000\n" "Last-Translator: Lasse Liehu \n" "Language-Team: Finnish (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/fr.po b/resources/unix/po/fr.po index 3d5cbbf9..9ff57d52 100644 --- a/resources/unix/po/fr.po +++ b/resources/unix/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-07-04 15:09+0000\n" "Last-Translator: Yannick Le Guen \n" "Language-Team: French (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/he.po b/resources/unix/po/he.po index 52285e2e..3c304220 100644 --- a/resources/unix/po/he.po +++ b/resources/unix/po/he.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-26 13:49+0000\n" "Last-Translator: GenghisKhan \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/hu.po b/resources/unix/po/hu.po index b4ae804b..dbb6f002 100644 --- a/resources/unix/po/hu.po +++ b/resources/unix/po/hu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:47+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Hungarian (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/hy.po b/resources/unix/po/hy.po index 681e9d38..4c5e8f32 100644 --- a/resources/unix/po/hy.po +++ b/resources/unix/po/hy.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-05-08 14:39+0000\n" "Last-Translator: sedas\n" "Language-Team: Armenian (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/id.po b/resources/unix/po/id.po index ef26bcf0..6e7836cf 100644 --- a/resources/unix/po/id.po +++ b/resources/unix/po/id.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# M. Ridwan Hakim , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:47+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-10-17 03:28+0000\n" +"Last-Translator: M. Ridwan Hakim \n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/" "focuswriter/language/id_ID/)\n" "Language: id\n" @@ -24,7 +25,7 @@ msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "Layar Penuh" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -33,6 +34,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter merupakan pengolah kata yang bebas pengalihan dan sederhana. " +"Menggunakan antarmuka yang Anda akses dengan cara menggerakkan mouse ke tepi " +"layar, membuat program ini memilik tampilan yang familiar dan memudahkan " +"Anda untuk menyelam ke dalam pekerjaan Anda." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -41,6 +46,11 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter membuat Anda untuk menciptakan lingkungan Anda sendiri dengan " +"cara membuat tema yang mengatur jenis huruf, warna, dan gambar latar untuk " +"menambah suasana. Program ini juga dilengkapi oleh statistika yang selalu " +"diperbarui setiap saat, tujuan sehari-hari, membuka banyak dokumen " +"sekaligus, pengecekan ejaan, dan masih banyak lagi." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -48,6 +58,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Ditambah lagi, ketika Anda membuka program, pekerjaan Anda yang sedang " +"dikerjaan akan otomatis dimuat dan memulai di mana Anda terakhir " +"meninggalkannya sehingga Anda bisa memulainya lagi lebih cepat." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" diff --git a/resources/unix/po/it.po b/resources/unix/po/it.po index a443dcf2..4d16c6cf 100644 --- a/resources/unix/po/it.po +++ b/resources/unix/po/it.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# marco , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-10-04 19:01+0000\n" +"Last-Translator: marco \n" "Language-Team: Italian (http://www.transifex.com/projects/p/focuswriter/" "language/it/)\n" "Language: it\n" @@ -24,7 +25,7 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "Un semplice editor di testo a pieno schermo" #: ../focuswriter.appdata.xml.in.h:3 msgid "" diff --git a/resources/unix/po/ja.po b/resources/unix/po/ja.po index 807d26a6..1b45e80e 100644 --- a/resources/unix/po/ja.po +++ b/resources/unix/po/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:48+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/ko.po b/resources/unix/po/ko.po index fa0a0fb4..e19db5ab 100644 --- a/resources/unix/po/ko.po +++ b/resources/unix/po/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-06-26 15:33+0000\n" "Last-Translator: 박정규(Jung Kyu Park) \n" "Language-Team: Korean (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/lt.po b/resources/unix/po/lt.po new file mode 100644 index 00000000..e58e8c79 --- /dev/null +++ b/resources/unix/po/lt.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Moo, 2014 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-11-26 21:57+0000\n" +"Last-Translator: Moo\n" +"Language-Team: Lithuanian (http://www.transifex.com/projects/p/focuswriter/" +"language/lt/)\n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "Viso ekrano žodžių doroklė" + +#: ../focuswriter.appdata.xml.in.h:3 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" +"FocusWriter yra paprasta žodžių doroklė be išblaškymų. Ji naudoja " +"besislepiančią sąsają, kurią galima pasiekti, nuvedant pelės žymeklį prie " +"ekrano ribų. Ši sąsaja suteikia programai pažįstamą išvaizdą ir jausmą, " +"todėl programa jums netrukdo, o jūs galite pilnai pasinerti į savo darbą." + +#: ../focuswriter.appdata.xml.in.h:4 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" +"FocusWriter leidžia jums tinkinti savo aplinką, kuriant temas, kurios " +"kontroliuoja šriftą, spalvas ir fono paveikslą bei sukuria norimą atmosferą. " +"Programoje yra statistikos atnaujinimo, kasdienio tikslo, kelių atvertų " +"dokumentų, rašybos tikrinimo ir daugybė kitų funkcijų." + +#: ../focuswriter.appdata.xml.in.h:5 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" +"Be to, kai atidarote programą, jūsų dabartinis darbas yra automatiškai " +"įkeliamas toje vietoje, kurioje paskutinį kartą užbaigėte, todėl nedvejodami " +"galite vėl kibti į darbą." + +#: ../focuswriter.desktop.in.h:2 +msgid "Fullscreen Word Processor" +msgstr "Viso Ekrano Žodžių Doroklė" + +#: ../focuswriter.desktop.in.h:3 +msgid "Write without distractions" +msgstr "Rašykite be blaškymosi" diff --git a/resources/unix/po/nl.po b/resources/unix/po/nl.po index f92f46e9..5e6267cb 100644 --- a/resources/unix/po/nl.po +++ b/resources/unix/po/nl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-30 14:31+0000\n" "Last-Translator: RobertBorst \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/pl.po b/resources/unix/po/pl.po index 85dad280..b34580c3 100644 --- a/resources/unix/po/pl.po +++ b/resources/unix/po/pl.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Łukasz Jurczak , 2014 +# Łukasz Jurczak, 2014 +# M T , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-07-08 19:33+0000\n" -"Last-Translator: Łukasz Jurczak \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-10-17 23:50+0000\n" +"Last-Translator: M T \n" "Language-Team: Polish (http://www.transifex.com/projects/p/focuswriter/" "language/pl/)\n" "Language: pl\n" @@ -35,6 +36,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter to prosty, pełnoekranowy edytor tekstu. Korzysta z ukrytego " +"interfejsu, do którego otrzymujesz dostęp przesuwając kursor myszkę do " +"krawędzi ekranu. W ten sposób program skupia twoją uwagę na to, co naprawdę " +"jest najważniejsze: twoja praca." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -43,6 +48,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter umożliwia dostosowanie wyglądu poprzez tworzenie motywów, które " +"ustawiają czcionkę, kolory i obraz tła, aby stworzyć własną atmosferę. " +"Posiada również aktualizację statystyk w locie, codzienne cele, otwieranie " +"wielu dokumentów jednocześnie, sprawdzanie pisowni i dużo więcej." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -50,6 +59,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Ponadto, program automatycznie ładuje przy starcie ostatni otworzony " +"dokument i pozycję, na której ostatnio przerwano, aby można od razu " +"kontynuować pracę." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" diff --git a/resources/unix/po/pt.po b/resources/unix/po/pt.po index fc2b6af8..c77ee0be 100644 --- a/resources/unix/po/pt.po +++ b/resources/unix/po/pt.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# tiago , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:48+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-11-09 15:45+0000\n" +"Last-Translator: tiago \n" "Language-Team: Portuguese (http://www.transifex.com/projects/p/focuswriter/" "language/pt/)\n" "Language: pt\n" @@ -24,7 +25,7 @@ msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "Processador de textos em ecrã completo" +msgstr "Processador de texto em ecrã completo" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -33,10 +34,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" -"FocusWriter é um processador de textos simples e sem distracções. A " -"interface só aparece quando o apontador do rato se aproximar das margens do " -"ecrã, proporcionando um aspecto familiar que ao mesmo tempo não ocupa o " -"espaço e permite ao utilizador focar-se no seu trabalho." +"FocusWriter é um processador de texto simples e sem distrações. A interface " +"só aparece quando o cursor se aproxima das margens do ecrã, proporcionando " +"um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe permite focar-" +"se no seu trabalho." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -45,10 +46,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" -"FocusWriter permite personalizar o ambiente de trabalho com a criação de " -"temas incluindo fonte tipográfica, cores e uma imagem de fundo. Também " -"mostra estatísticas actualizadas em directo, objectivos diários, também abre " -"vários documentos ao mesmo tempo, faz verificação ortográfica, e muito mais." +"FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação de " +"temas, controlando a fonte tipográfica, cores e imagem de fundo. Também " +"dispõe de estatísticas atualizadas, objetivos diários, vários documentos " +"abertos ao mesmo tempo, verificação ortográfica, e muito mais." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -56,13 +57,13 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -"Além do resto, o programa abre automaticamente o último trabalho em curso e " -"coloca o cursor na sua posição em que este esteve quando a sessão anterior " -"terminou, para assim poder voltar ao assunto sem demoras." +"Além disto, o programa abre automaticamente o trabalho em curso e posiciona " +"o cursor na posição em que se encontrava na sessão anterior, para que possa " +"voltar ao trabalho sem demoras." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "Processador de textos em ecrã completo" +msgstr "Processador de texto em ecrã completo" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" diff --git a/resources/unix/po/pt_BR.po b/resources/unix/po/pt_BR.po index 29c9458f..1a0e6ee2 100644 --- a/resources/unix/po/pt_BR.po +++ b/resources/unix/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-07-21 16:57+0000\n" "Last-Translator: Márcio Massula Jr. \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" diff --git a/resources/unix/po/ro.po b/resources/unix/po/ro.po index 82647db0..26a67213 100644 --- a/resources/unix/po/ro.po +++ b/resources/unix/po/ro.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-26 08:16+0000\n" "Last-Translator: Jaff \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/ru.po b/resources/unix/po/ru.po index 781aca5a..c94762f3 100644 --- a/resources/unix/po/ru.po +++ b/resources/unix/po/ru.po @@ -3,29 +3,31 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Serhii Haifullin , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-08-27 08:35+0000\n" +"Last-Translator: Serhii Haifullin \n" "Language-Team: Russian (http://www.transifex.com/projects/p/focuswriter/" "language/ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" #: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "" +msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "Полноэкранный текстовый редактор" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -34,6 +36,12 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter это простой текстовый редактор, позволяющий полностью " +"сосредоточиться на работе. В нем используется выдвижной интерфейс, " +"управляющие элементы которого становятся доступными при наведении стрелки " +"мыши к краям экрана. Это дает возможность добиться максимально " +"располагающего к пользователю внешнего вида и полностью погрузиться в вашу " +"работу." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -42,6 +50,12 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter позволит вам настроить свое рабочее окружение путем создания " +"тем, в которых можно, для добавления нужной атмосферы, управлять шрифтами, " +"цветами и фоновыми изображениями. Также текстовый редактор умеет вести " +"статистику, обновляемую в реальном времени, ставить ежедневные рабочие цели, " +"открывать сразу несколько документов одновременно, проверять орфографию и " +"много чего еще." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -49,11 +63,15 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Кроме того, когда вы откроете программу, сразу же будет загружен прогресс " +"вашей текущей работы и курсор перейдет на ту позицию, на которой в последний " +"раз работа была прервана. Так вы сможете практически мгновенно вернуться к " +"делу." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "" +msgstr "Полноэкранный текстовый редактор" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "" +msgstr "Писать не отвлекаясь" diff --git a/resources/unix/po/sk.po b/resources/unix/po/sk.po index 1fc8db12..b509789b 100644 --- a/resources/unix/po/sk.po +++ b/resources/unix/po/sk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:45+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/sr.po b/resources/unix/po/sr.po index a4dd6192..a1036d3a 100644 --- a/resources/unix/po/sr.po +++ b/resources/unix/po/sr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-26 09:08+0000\n" "Last-Translator: miroslav \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/sv.po b/resources/unix/po/sv.po index 85f7dd60..a9a4fa68 100644 --- a/resources/unix/po/sv.po +++ b/resources/unix/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-26 21:17+0000\n" "Last-Translator: PavelNicklasson \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/tr.po b/resources/unix/po/tr.po index cdd60809..2e168e12 100644 --- a/resources/unix/po/tr.po +++ b/resources/unix/po/tr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-06-01 12:52+0000\n" "Last-Translator: Cüneyt Oktay \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/uk.po b/resources/unix/po/uk.po index 4c928eb5..d4f42a48 100644 --- a/resources/unix/po/uk.po +++ b/resources/unix/po/uk.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Zoriana Zaiats, 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-12-09 14:09+0000\n" +"Last-Translator: Zoriana Zaiats\n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/focuswriter/" "language/uk/)\n" "Language: uk\n" @@ -21,11 +22,11 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "" +msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "Повноекранний текстовий редактор" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -34,6 +35,11 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter це простий текстовий редактор, що дозволяє повністю зосередитися " +"на роботі. Він використовує висувний інтерфейс, який з’являється при " +"наведенні стрілки миші до країв екрану. Це дає можливість досягти " +"максимально зручного для користувача зовнішнього вигляду, який не " +"відволікає, а дозволяє повністю зануритися в роботу." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -42,6 +48,11 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter дозволить вам налаштувати своє робоче оточення шляхом створення " +"тем, в яких можна управляти шрифтами, кольорами та фоновими зображеннями. " +"Також текстовий редактор вміє вести статистику, оновлювану в реальному часі, " +"ставити щоденні робочі цілі, відкривати декілька документів одночасно, " +"перевіряти орфографію і багато чого ще." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -49,11 +60,15 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Крім того, коли ви відкриєте програму, відразу ж буде завантажений прогрес " +"вашої поточної роботи і курсор перейде на ту позицію, на якій в останній раз " +"робота була перервана. Так ви зможете практично миттєво повернутися до " +"справи." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "" +msgstr "Повноекранний текстовий редактор" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "" +msgstr "Писати не відволікаючись" diff --git a/resources/unix/po/vi.po b/resources/unix/po/vi.po index a15dee0b..d35ef1c2 100644 --- a/resources/unix/po/vi.po +++ b/resources/unix/po/vi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-25 21:49+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/focuswriter/" diff --git a/resources/unix/po/zh_CN.po b/resources/unix/po/zh_CN.po index 7d372118..77c39cef 100644 --- a/resources/unix/po/zh_CN.po +++ b/resources/unix/po/zh_CN.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" "PO-Revision-Date: 2014-03-28 02:52+0000\n" "Last-Translator: min zhang \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/" diff --git a/resources/unix/po/zh_TW.po b/resources/unix/po/zh_TW.po index aa6b4d6b..7f8af7b7 100644 --- a/resources/unix/po/zh_TW.po +++ b/resources/unix/po/zh_TW.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Jeff Huang , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" -"Last-Translator: Graeme Gott \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2014-10-29 14:09+0000\n" +"Last-Translator: Jeff Huang \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/" "focuswriter/language/zh_TW/)\n" "Language: zh_TW\n" @@ -20,11 +21,11 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "" +msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "" +msgstr "全螢幕文字處理器" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -33,6 +34,9 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter 是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面" +"均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫" +"作。" #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -41,6 +45,8 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter 可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統" +"計;每日目標、多重開啟文件、拼寫檢查等等的多種功能。" #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -48,11 +54,13 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"另外,打開您正在撰寫的文件會自動跳至您最後一次編輯的位置,讓您可以繼續進行工" +"作。" #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "" +msgstr "全螢幕文字處理器" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "" +msgstr "專心寫作" diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 911ffe7a..e06f361e 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -2218,7 +2218,12 @@ تركيز على فقرة - + + Ctrl+Shift+` + + + + &Help مساعدة @@ -2248,12 +2253,12 @@ تركيز على ثلاثة أسطر - + &About حـول - + About &Qt حـول "كيوتي" diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index f15ff76e..5fdfdb73 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -2200,7 +2200,12 @@ Focalitza un paràgraf - + + Ctrl+Shift+` + + + + &Help Ajuda @@ -2230,12 +2235,12 @@ &Tres línies - + &About Sobre - + About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 0a890dca..5aee08ee 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -2200,7 +2200,12 @@ Zaměření na odstavec - + + Ctrl+Shift+` + + + + &Help &Nápověda @@ -2230,12 +2235,12 @@ &Tři řádky - + &About &O programu - + About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 7bf76560..043deaba 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -2194,7 +2194,12 @@ Fokus afsnit - + + Ctrl+Shift+` + + + + &Help &Hjælp @@ -2224,12 +2229,12 @@ &Tre linier - + &About &Om - + About &Qt Om &QT diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm index b10d2f9dfaab5bb5fa8b7ef038c61d469a869087..4fb66efd4addbba4e40fed46f25ff261544d7cff 100644 GIT binary patch delta 5667 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 aLioQnM{fLm<^TM`a@I}ps25e-RQwZU#Jp7i delta 3213 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 HxTE_&v?!+- diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index d625ffca..08fefa76 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -37,33 +37,33 @@ %1% of %Ln minute(s) - - - + + %1% von %Ln Minute + %1% von %Ln Minuten %1% of %Ln word(s) - - - + + %1% von %Ln Wort + %1% von %Ln Wörtern %Ln word(s) - - - + + %Ln Wort + %Ln Wörter %Ln minute(s) - - - + + %Ln Minute + %Ln Minuten @@ -92,14 +92,14 @@ N/A - N/A + nicht verfügbar %n day(s) - - - + + %n Tag + %n Tage @@ -122,7 +122,7 @@ Set Language - + Sprache einstellen @@ -897,7 +897,7 @@ Duplicate - + Duplizieren @@ -922,7 +922,7 @@ Duplicate Session - + Sitzung duplizieren @@ -1171,74 +1171,74 @@ Opacity: - + Deckkraft: Position: - + Position: Width: - + Breite: Round Text Background Corners - + Runde Ecken des Text-Hintergrundes Radius: - + Radius: Blur Text Background - + Verschwommener Text-Hintergrund Text Background Drop Shadow - + Schattenwurf des Text-Hintergrundes Vertical Offset: - + Vertikaler Versatz: Margins - + Ränder Window: - + Fenster: Page: - + Seite: Indent first line - + Erste Zeile einrücken Above: - + Darüber: Below: - + Darunter: @@ -1248,12 +1248,12 @@ Edit Theme - + Thema bearbeiten Window Background - + Fenster-Hintergrund @@ -1296,7 +1296,7 @@ Text Background - + Text-Hintergrund @@ -1346,7 +1346,7 @@ Height: - + Höhe: @@ -1356,12 +1356,12 @@ Tab Width: - + Breite der Registerkarte: New Theme - + Neues Thema @@ -1374,54 +1374,54 @@ Default - Standard + Standard Gentle Blues - + Sanfter Blues Old School - + Alte Schule Space Dreams - + Weltraum-Träume Writing Desk - + Schreibtisch New - Neu + Neu Duplicate - + Duplizieren Custom - + Benutzerdefiniert Edit - Bearbeiten + Bearbeiten Delete - Löschen + Löschen @@ -1441,13 +1441,13 @@ Delete theme '%1'? - + Thema '%1' löschen? Themes (%1) - + Themen (%1) @@ -2096,7 +2096,7 @@ Set &Language... - + &Sprache einstellen... @@ -2194,7 +2194,12 @@ Fokus Absatz - + + Ctrl+Shift+` + + + + &Help &Hilfe @@ -2224,12 +2229,12 @@ Drei Zeilen - + &About &Über - + About &Qt Über &Qt diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm index b4148f3e3a78d1db93835b515362f1167f39c739..8982e52bbf54f007ae421f6fbf2e88e54720b643 100644 GIT binary patch delta 8988 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 X#Nu}+20m*{aaC(Veg*uL%Vhrtepkgy delta 2974 zcmXArdtA@=9>-t5@9+El-7l8HT6Ce6Zm5(lI=WFwD^W@cDPzr8G3&73M6-%^`8G=$ z zmyGIsQ2Wt$u1@U>>;HK@3ebH9h#v!U8-N*~0%pO+;d&rGlJ84_M4228%sCDC{AgpW z0AU}`Px=Ew3*W~%LpXGboDOl{WuEbc*eU{3H`o~21<}$K!wbV8dGkO>Dx|bnz_Fj) z0}NXOsp&Bg?gg)HB>R^Fp)(al z?Oy{+EMbcJUD-hXDMiauE3oLc;;Mxar*$iO-6UX{Qt@jl|30iykgDGU#_5G&n{olS z+rp?X8Hv+EA=StW64Hf5Cs)y+RmjVyo%HoWanC$D_@YqRJ_wBdN%&~z9_Id`uro9P za4`w{wsioO*ek;4K_4-ffx@99yBVoj__CY_JgWo74H>42!aP>pEaWf%42#6CF?}Z+x&5nCz_l#Y6|~ zW#yB?2SAKP)E$0A2fRf4g>)cyi5Ocq4Dd)5GdJ1;p8pXGR=>|wHi^Z}*?`^qqUAE} zdzFbBuAZY}_Tq=-O%}j^wyFXzDF|mvmMC+a)#LWo`NhQ1+t!GAgPHYYa{hd(wp2%T73B95`XxzKOr`G zb^?)lvB`%Lc~{#wHNnQnXtCwUV%A8x_~l`D=JuJ5Q}&C86|;aB4dUUqma@1i#N(fg zVTyvqZ+EVs-7N9^%WO}q6wj|=QBG|WyF!mssao-prT23n;019otrXCVmK2XUVCH`y zDc6^C9ym+l&<7FWl2l6uc}Rx%X!1kJbn^?~g$Yv3pNuTvfRxgn0gO5zmF%wse6L9r zwR3>jTxrYXBGy2VjhYN;%k-1%mN*;3TqMhuxXJurhg97)gMZj0Z7*qIKbK0|J5KPq zL)uls+@hs(UMMr!_w7cR}0TF$=C+E^j| zFl!f;ydYg);tZ&wr0WOixc-TBt7177J7-a;a~*-_wx~2th3xmEsu8(#ApD|gnvZsF<@%QqhUOsZJHx14*x_&X%*t11)Z!#I34+*K3sglIrO}(ydyp z^m+m~e4@7Ne~yEsRP9|XF*OeA*d#wU%c< z_APbIAu5t)RyV5n-tMfr=@h$Q(mU$bd?nj7NZsRlhyCx6rg3`q26LFH@qfhjiZNlT1AIG*PM1|3bns$PJ6Hh^oKN^9U}Wb?1AR;FO0i$<<>W>xP^1fWX72Knbz%9noOpY5OQwiSL4Yprd@QSfK(})f zmGYmcYgxtb$IjEWZ7JfwnQh}#lkViGZA?jxuJi3e4zydkGgTJmG;y`=OdA!L{E4oo zIEPhwM%Np~2=kuP4Gyhg|9ri2TQ1wKPp^5GhCL(nx{^zrln?Y~X)IGvpiiv#<3$(s z`JPm6+*SRu^V|i?N9f-O*}xPI+8A7+Uu(~*4=m9C-EB1k=+*DB+)M%%1nQfc)r?@W z{)E#9T*top&c<#^skBk=Y2)ZR8+{ks7;((TsHHZ>`sgq8an_q^^?i}!xpbiKTR9ha zImRH?P@(xR8SEVxNR((}^a_K;K7ub|q75z`yfEI+5Y*PfEw;`O@z;IktkjTsb{t1= zs3EVBN<`f>EK71_H^do=@|zgJBExFoC}(_*q2Ykc6wWjpc|d6st{8rZcH$(wX}Eq| zNk=jaKMxGDLZ;bhr?=7FVlg}@V~*?x48KpJ1B%xSgWqQXhFYUoxStZo8FfF#u&V2g zqva0fZlQ6?^2dO>&=`~PkhA?9$(ir1BYA;$iZLcr#gT3_X7350-O! z9?5ln&3LSl^TJ$Z?D#gEid)tiyQ@tcy*rHknN-5H$7FZy9Bbl^$=VnSt5CEk+-Qr%WdabZK|kS!gX6~+FDk{HNL~Nt+$jZ{mpd!|82O|)ctQq z&WFRM-cy|UNe4^=%S8^V40Gb<5Vq&|_sr>6=~>8TbDr}b96TxJWnawU#7Z$2RyR-) zcN=Gwn@g(cxySeBR^MVObkF>+=;8cFBG26KMu*Ll&Hd$-oEu%sSa~T{opHRv+H04n zu#R##ud-G-Wl7dYW4qMyOrK=y?>@w zpb2-mAak1RI)9HmEX!XuELbCN%MO=^=M>7W3tMH^MVn;P;$XRaaey@@ca_?zd}W87 a^^f(hspU2AykniY*-fi{ms$%7#s2^RpjiX} diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 2bc1607b..7e0fdce8 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -37,39 +37,39 @@ %1% of %Ln minute(s) - - - + + %1% απο %Ln λεπτο + %1% απο %Ln λεπτά %1% of %Ln word(s) - - - + + %1% απο %Ln λέξη + %1% απο %Ln λέξεις %Ln word(s) - - - + + %Ln λέξη + %Ln λέξεις %Ln minute(s) - - - + + %Ln λεπτο + %Ln λεπτά 0% - + 0% @@ -77,35 +77,35 @@ Daily Progress - + Καθημερινή πρόοδος Longest streak - + Μεγαλύτερο σερί Current streak - + Τρέχον σερί N/A - + N/A %n day(s) - - - + + %n ημέρα + %n ημέρες %1 &ndash; %2 - + %1 &ndash; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% του ημερήσιου στόχου @@ -122,7 +122,7 @@ Set Language - + Ρύθμιση γλώσσας @@ -130,12 +130,12 @@ (Untitled %1) - (Χωρίς τίτλο %1) + (Χωρίς τίτλο %1) %1 (Read-Only) - + %1 (μόνο για ανάγνωση) @@ -174,12 +174,12 @@ Reload File? - + Επαναφόρτωση αρχείου; Reload the file '%1' from disk? - + Επαναφόρτωση του αρχείου «%1» από τον δίσκο; @@ -194,7 +194,7 @@ Untitled %1 - Χωρίς τίτλο %1 + Χωρίς τίτλο %1 @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - + Το αρχείο %1 έχει αλλαχθεί από άλλο πρόγραμμα. @@ -255,7 +255,7 @@ Unable to open archive. - Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. + Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. @@ -351,32 +351,32 @@ OpenDocument Text - + Κείμενο OpenDocument Office Open XML - + Office Open XML Rich Text Format - + Εμπλουτισμένο κείμενο Plain Text - + Απλό κείμενο All Files - + Όλα τα αρχεία All Supported Files - + Όλα τα υποστηριζόμενα αρχεία @@ -438,7 +438,7 @@ Unable to open archive. - Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. + Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. @@ -635,42 +635,42 @@ Reset daily progress for today to zero? - + Επαναφορά καθημερινής προόδου για σήμερα στο μηδέν; Write byte order mark in plain text files - + Σήμανση εγγραφής σειράς byte σε αρχεία απλού κειμένου Default format: - + Προεπιλεγμένη μορφή: Reset Today - + Επαναφορά Σήμερα History - + Ιστορικό Remember history - + Μνημόνευση ιστορικου Show streaks - + Εμφάνιση λωρίδων Minimum progress for streaks: - + Ελάχιστη πρόοδος για λωρίδες: @@ -685,12 +685,12 @@ Count each letter as a word - + Καταμέτρηση κάθε γράμμα σαν μια λέξη Page Count Algorithm - + Αλγόριθμος αριθμου σελίδων @@ -800,7 +800,7 @@ Not a supported RTF file. - + Μη υποστηριζόμενο αρχείο RTF. @@ -808,7 +808,7 @@ Unexpectedly reached end of file. - + Απρόσμενη μετάβαση στο τέλος του αρχείου. @@ -897,7 +897,7 @@ Duplicate - + Διπλότυπο @@ -922,7 +922,7 @@ Duplicate Session - + Περιόδος λειτουργίας διπλότυπου @@ -1067,7 +1067,7 @@ Continue checking at beginning of file? - + Να συνεχιστεί ο έλεγχος από την αρχή του αρχείου; @@ -1171,74 +1171,74 @@ Opacity: - + Αδιαφάνεια: Position: - + Θέση: Width: - + Πλάτος: Round Text Background Corners - + Γύρος φόντου κειμένου γωνιών Radius: - + Ακτίνα: Blur Text Background - + Θόλωμα φόντου κειμένου Text Background Drop Shadow - + Φόντος κειμένου προσπίπτουσα σκιά Vertical Offset: - + Κάθετη Μετατόπιση: Margins - + Περιθώρια: Window: - + Παράθυρο: Page: - + Σελίδα: Indent first line - + Εσοχή πρώτης γραμμής Above: - + Παραπάνω: Below: - + Παρακάτω: @@ -1248,12 +1248,12 @@ Edit Theme - + Επεξεργασία θέματος Window Background - + Φόντος παραθύρου @@ -1296,7 +1296,7 @@ Text Background - + Φόντος κειμένου @@ -1346,7 +1346,7 @@ Height: - + Ύψος: @@ -1356,12 +1356,12 @@ Tab Width: - + Πλάτος καρτέλας: New Theme - + Νέο θέμα @@ -1374,54 +1374,54 @@ Default - Προεπιλογή + Προεπιλογή Gentle Blues - + Gentle Blues Old School - + Old School Space Dreams - + Space Dreams Writing Desk - + Writing Desk New - + Νέο Duplicate - + Διπλότυπο Custom - + Προσαρμοσμένο Edit - Επεξεργασία + Επεξεργασία Delete - Διαγραφή + Διαγραφή @@ -1441,13 +1441,13 @@ Delete theme '%1'? - + Διαγραφή θέματος '%1'; Themes (%1) - + Θέματα (%1) @@ -1695,7 +1695,7 @@ List all documents - + Λίστα όλων των εγγράφων @@ -1771,17 +1771,17 @@ Save Changes? - + Να αποθηκευτούν οι αλλαγές; Save changes to the file '%1' before closing? - + Αποθήκευση αλλαγών στο αρχείο '%1' πριν το κλείσιμο; Your changes will be lost if you don't save them. - + Οι αλλαγές σας θα χαθούν αν δεν τις αποθηκεύσετε. @@ -2096,7 +2096,7 @@ Set &Language... - + Ρύθμιση γλώσσας... @@ -2111,7 +2111,7 @@ &Daily Progress - + Καθημερινή πρόοδος @@ -2194,7 +2194,12 @@ Εστίαση Παραγράφου - + + Ctrl+Shift+` + + + + &Help &Βοήθεια @@ -2224,12 +2229,12 @@ &Τρεις Γραμμές - + &About &Σχετικά - + About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index f87cac80..93334215 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -2194,7 +2194,12 @@ - + + Ctrl+Shift+` + + + + &Help @@ -2224,12 +2229,12 @@ - + &About - + About &Qt diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 9d4a311d..7a13bd41 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -2194,7 +2194,12 @@ Focus Paragraph - + + Ctrl+Shift+` + + + + &Help &Help @@ -2224,12 +2229,12 @@ &Three Lines - + &About &About - + About &Qt About &Qt diff --git a/translations/focuswriter_eo.qm b/translations/focuswriter_eo.qm new file mode 100644 index 0000000000000000000000000000000000000000..cac7b439bc87ffd10ea697472ba1da62561307e1 GIT binary patch literal 34716 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 literal 0 HcmV?d00001 diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts new file mode 100644 index 00000000..247f064f --- /dev/null +++ b/translations/focuswriter_eo.ts @@ -0,0 +1,2242 @@ + + + + + Alert + + + Close (%1) + Fermi (%1) + + + + Collapse + Maletendi + + + + Expand + Etendi + + + + AlertLayer + + + Dismiss Alert + Forsendi Averton + + + + Ctrl+D + Ctrl+D + + + + DailyProgress + + + %1% of %Ln minute(s) + + %1% de %Ln minuto + %1% de %Ln minutoj + + + + + %1% of %Ln word(s) + + %1% de %Ln vorto + %1% de %Ln vortoj + + + + + %Ln word(s) + + %Ln vorto + %Ln vortoj + + + + + %Ln minute(s) + + %Ln minuto + %Ln minutoj + + + + + 0% + 0% + + + + DailyProgressDialog + + + Daily Progress + Ĉiutaga Progreso + + + + Longest streak + Plej longa serio + + + + Current streak + Aktuala serio + + + + N/A + N-A + + + + %n day(s) + + %n tago + %n tagoj + + + + + %1 &ndash; %2 + %1 &ndash; %2 + + + + DailyProgressLabel + + + + %1% of daily goal + %1% de ĉiutaga celo + + + + DictionaryDialog + + + Set Language + Agordi Lingvon + + + + Document + + + (Untitled %1) + (Sentitole %1) + + + + %1 (Read-Only) + %1 (Nurlegebla) + + + + + + + Sorry + Pardonu + + + + Unable to save '%1'. + Ne eblis konservi '%1'. + + + + Save File As + Konservi Dosieron Kiel + + + + + Unable to overwrite '%1'. + Ne eblis anstataŭigi '%1'. + + + + Rename File + Renomi Dosieron + + + + Unable to rename '%1'. + Ne eblis renomi '%1'. + + + + Reload File? + Reŝargi la Dosieron? + + + + Reload the file '%1' from disk? + Reŝargi la dosieron '%1' el disko? + + + + All unsaved changes will be lost. + Ĉiuj nekonservitaj ŝanĝoj perdiĝos. + + + + Reload + Reŝargi + + + + Untitled %1 + Sentitole %1 + + + + Question + Demando + + + + Saving as plain text will discard all formatting. Discard formatting? + Savi kiel plata teksto ne konservos ĉiun tekstaranĝon. Ne konservi tekstaranĝon? + + + + DocumentWatcher + + + File Changed + Dosiero Ŝanĝiĝis + + + + The file '%1' was changed by another program. + La dosiero '%1' ŝanĝiĝis de alia programaro. + + + + Do you want to reload the file? + Ĉu vi volas reŝargi la dosieron? + + + + Reload + Reŝargi + + + + Ignore + Malatenti + + + + File Deleted + Dosiero Foriĝis + + + + The file %1 was deleted by another program. + La dosiero %1 foriĝis de alia programaro. + + + + Do you want to save or close the file? + Ĉu vi volas konservi aŭ fermi la dosieron? + + + + DocxReader + + + Unable to open archive. + Ne eblis malfermi arĥivon. + + + + FindDialog + + + Search for: + Serĉi por: + + + + Replace with: + Anstataŭigi kun: + + + + Ignore case + Malatenti usklon + + + + Whole words only + Nur tutaj vortoj + + + + Regular expressions + Regulesprimoj + + + + Search up + Serĉi supren + + + + Search down + Serĉi malsupren + + + + &Find + Trovi + + + + &Replace + Anstataŭigi + + + + Replace &All + Anstataŭigi Ĉiujn + + + + Find + Trovi + + + + Replace + Anstataŭigi + + + + Replace %n instance(s)? + + Anstataŭigi %n aperon? + Anstataŭigi %n aperojn? + + + + + Question + Demando + + + + + Sorry + Pardonu + + + + + Phrase not found. + Frazero ne troviĝis. + + + + FormatManager + + + OpenDocument Text + OpenDocument Teksto + + + + Office Open XML + Office Open XML + + + + Rich Text Format + Rich Text Format + + + + Plain Text + Plata Teksto + + + + All Files + Ĉiuj Dosieroj + + + + All Supported Files + Ĉiuj Subtenataj Dosieroj + + + + Highlighter + + + Add + Aldoni + + + + Check Spelling... + Kontroli Literumadon... + + + + (No suggestions found) + (Ne sugestoj troviĝis) + + + + ImageButton + + + Open Image + Malfermi Bildon + + + + Images(%1) + Bildoj(%1) + + + + LocaleDialog + + + Select application language: + Elekti lingvon de aplikaĵo: + + + + <System Language> + <Lingvo de Sistemo> + + + + Note + Noto + + + + Please restart this application for the change in language to take effect. + Bonvolu relanĉi ĉi tiun aplikaĵon por la lingva ŝanĝo efiki. + + + + OdtReader + + + Unable to open archive. + Ne eblis malfermi arĥivon. + + + + PreferencesDialog + + + Preferences + Agordoj + + + + General + Ĝenerale + + + + Statistics + Statistiko + + + + Toolbar + Ilobreto + + + + Spell Checking + Literumada Kontrolo + + + + Select Dictionary + Elekti Vortaron + + + + + Sorry + Pardonu + + + + Unable to open archive. + Ne eblis malfermi arĥivon. + + + + The archive does not contain a usable dictionary. + La arĥivo ne enhavas uzeblan vortaron. + + + + + + Question + Demandon + + + + Shortcuts + Fulmoklavoj + + + + One or more shortcuts conflict. Do you wish to proceed? + Unu aŭ pluraj fulmoklavoj konfliktas. Ĉu vi volas daŭri? + + + + The dictionary "%1" already exists. Do you want to replace it? + La vortaro "%1" jam ekzistas. Ĉu vi volas anstataŭigi ĝin? + + + + Daily Goal + Ĉiutaga Celo + + + + None + Nenio + + + + Minutes: + Minutoj: + + + + + Words: + Vortoj: + + + + Editing + Redaktado + + + + Always vertically center + Ĉiam vertikale centri + + + + Block insertion cursor + Bloka enmeta kursoro + + + + Smooth fonts + Glataj tajparoj + + + + Typewriter sounds + Skribmaŝinaj sonoj + + + + Smart quotes: + Inteligentaj citiloj: + + + + Double + Duoble + + + + Single + Unuoble + + + + Scenes + Scenoj + + + + Divider: + Dividanto: + + + + Saving + Konservante + + + + Automatically save changes + Aŭtomate konservi ŝanĝojn + + + + Remember cursor position + Memori kursoran pozicion + + + + Word count + Vortnombrado + + + + Page count + Paĝnombrado + + + + Paragraph count + Alinenombrado + + + + Character count + Signonombrado + + + + Characters: + Signoj: + + + + Paragraphs: + Alineoj + + + + Word Count Algorithm + Vortnombrada Algoritmo + + + + Reset daily progress for today to zero? + Rekomencigi ĉiutagan progreson por hodiaŭ? + + + + Write byte order mark in plain text files + Skribi bajtordo-marko en platatekstajn dosierojn + + + + Default format: + Defaŭlta dosierformo: + + + + Reset Today + Rekomencigi Hodiaŭ + + + + History + Historio + + + + Remember history + Memori historion + + + + Show streaks + Montri seriojn + + + + Minimum progress for streaks: + Minimuma progreso por serioj: + + + + Detect word boundaries + Detekti vortlimojn + + + + Divide character count by six + Dividi signonombradon per ses + + + + Count each letter as a word + Kompti ĉiun literon kiel vorto + + + + Page Count Algorithm + Paĝnombrada Algoritmo + + + + Style + Stilo + + + + Icons Only + Nur Bildsimboloj + + + + Text Only + Nur Teksto + + + + Text Alongside Icons + Teksto Flanke de Bildsimboloj + + + + Text Under Icons + Teksto Malsupre de Bildsignoj + + + + Text Position: + Pozicio de Teksto + + + + Actions + Agoj + + + + Move Up + Movi Supren + + + + Move Down + Movi Malsupren + + + + Add Separator + Aldoni Apartigilon + + + + Command + Komando + + + + Shortcut + Fulmoklavo + + + + Action + Ago + + + + Check spelling as you type + Kontroli literumadon dum vi tajpas + + + + Ignore words in UPPERCASE + Malatenti vortojn da MAJUSKLOJ + + + + Ignore words with numbers + Malatenti vortojn kun numeroj + + + + Language + Lingvo + + + + + Add + Aldoni + + + + Remove + Forigi + + + + Personal Dictionary + Persona Vortaro + + + + RtfReader + + + + Not a supported RTF file. + Ne subtenata RTF dosiero. + + + + RtfTokenizer + + + Unexpectedly reached end of file. + Neatendite atingis dosierfinon. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Malsupren + + + + Move Scenes Up + Movi Scenojn Supren + + + + Ctrl+Shift+Up + Ctrl+Shift+Supren + + + + Toggle Scene List + Baskuligi Liston da Scenoj + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Montri liston da scenoj (%1) + + + + Hide scene list (%1) + Kaŝi liston da scenoj (%1) + + + + Filter + Filtri + + + + Move Scenes Down + Movi Scenojn Malsupren + + + + Resize scene list + Regrandigi liston da scenoj + + + + Session + + + + + + + + Default + Defaŭlto + + + + SessionManager + + + Manage Sessions + Administri Seancojn + + + + S&essions + Seancojn + + + + New + Nova + + + + Duplicate + Duobligi + + + + Rename + Renomi + + + + Delete + Forigi + + + + Switch To + Ŝanĝi Al + + + + New Session + Nova Seanco + + + + Duplicate Session + Duobligi Seancon + + + + Rename Session + Renomi Seancon + + + + Question + Demando + + + + Delete selected session? + Forigi elektitan seancon? + + + + Session name: + Seanca nomo: + + + + Sorry + Pardonu + + + + The requested session name is already in use. + La petita seanca nomo estas jam uzata. + + + + &New... + Nova... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + Administri + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Vakigi + + + + Reset to Default + Rekomencigi Defaŭlten + + + + + Shortcut: + Fulmoklavo: + + + + SmartQuote + + + Replacing quotation marks... + Anstataŭigante citilojn... + + + + Please Wait + Bonvolu Atendi + + + + SpellChecker + + + Check Spelling + Kontroli Literumadon + + + + &Add + Aldoni + + + + &Ignore + Malatenti + + + + I&gnore All + Malatenti Ĉiujn + + + + &Change + Ŝanĝi + + + + C&hange All + Ŝanĝi Ĉiujn + + + + Not in dictionary: + Ne en vortaro: + + + + Change to: + Ŝanĝi al: + + + + Checking spelling... + Kontrolante literumadon... + + + + Cancel + Nuligi + + + + Please wait + Bonvolu atendi + + + + Continue checking at beginning of file? + Daŭri kontroli dekomence? + + + + Spell check complete. + Literumada kontrolo finfaris. + + + + SymbolsDialog + + + Symbols + Simboloj + + + + Recently used symbols + Lastatempe uzitaj simboloj + + + + All symbols + Ĉiuj simboloj + + + + Details + Detaloj + + + + Name: + Nomo: + + + + Insert + Enmeto + + + + SymbolsModel + + + Blocks + Blokoj + + + + Scripts + Skriboj + + + + Theme + + + Untitled %1 + Sentitole %1 + + + + ThemeDialog + + + Name: + Nomo: + + + + No Image + Neniu Bildo + + + + Tiled + Kahelita + + + + + Centered + Centrita + + + + + Stretched + Streĉita + + + + Scaled + Skalita + + + + Zoomed + Zomita + + + + Opacity: + Opakeco: + + + + Position: + Pozicio: + + + + Width: + Larĝo: + + + + Round Text Background Corners + Rondaj Tekstfonaj Anguloj + + + + + + Radius: + Duondiametro: + + + + Blur Text Background + Malfokusi Tekstfonon + + + + Text Background Drop Shadow + Tekstfona Ĵetita Ombro + + + + Vertical Offset: + Vertikala Deŝovo: + + + + Margins + Marĝenoj + + + + Window: + Fenestro: + + + + Page: + Paĝo: + + + + Indent first line + Krei krommarĝenon sur la unua lineo + + + + Above: + Supre: + + + + Below: + Malsupre: + + + + Remove + Forigi + + + + Edit Theme + Redakti Haŭton + + + + Window Background + Fenestra Fono + + + + + Type: + Tipo: + + + + + + + Color: + Koloro: + + + + Image: + Bildo: + + + + + + + + + + + + + pixels + bilderoj + + + + Left + Maldekstre + + + + Text Background + Tekstfono + + + + Right + Dekstre + + + + Text + Teksto + + + + Font: + Tajparo: + + + + Misspelled: + Misortografiita: + + + + Line Spacing + Interlinea Distanco + + + + Single + Unuoble + + + + 1.5 Lines + 1.5 Lineoj + + + + Double + Duoble + + + + Proportional + Proporcie + + + + Height: + Alto: + + + + Paragraph Spacing + Interalinea Distanco + + + + Tab Width: + Larĝo de Tabo: + + + + New Theme + Nova Haŭto + + + + ThemeManager + + + Themes + Haŭtoj + + + + Default + Defaŭlto + + + + Gentle Blues + Mola Bluso + + + + Old School + Maljuna Lernejo + + + + Space Dreams + Kosmaj Sonĝoj + + + + Writing Desk + Skribtablo + + + + + New + Nova + + + + + Duplicate + Duobligi + + + + Custom + Propra + + + + Edit + Redakti + + + + Delete + Forigi + + + + Import + Enporti + + + + Export + Elporti + + + + Question + Demando + + + + Delete theme '%1'? + Forigi haŭton '%1'? + + + + + Themes (%1) + Haŭtoj (%1) + + + + Import Theme + Elporti Haŭton + + + + Export Theme + Elporti Haŭton + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Demando + + + + Delete timer? + Forigi tempmezurilon? + + + + <b>Words:</b> %L1 + <b>Vortoj:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Paĝoj:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Alineoj:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Signoj:</b> %L1 / %L2 + + + + Set Delay + Agordi Prokraston + + + + Set Time + Agordi Tempon + + + + Delay: + Prokrasto: + + + + Time: + Tempo: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Alarmo + + + + Type: + Tipo: + + + + Memo: + Noto: + + + + Edit + Redakti + + + + Delete + Forigi + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Neniu funkcianta tempmezurilo + + + + TimerManager + + + Timers + Tempmezuriloj + + + + New + Nova + + + + Recent + Lastatempe + + + + Question + Demando + + + + Cancel editing timers? + Rezigni redakton de tempmezuriloj? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Window + + + Loading themes + Ŝargante haŭtojn + + + + Loading sounds + Ŝargante sonojn + + + + + Untitled + Sentitole + + + + Open File + Malfermi Dosieron + + + + About FocusWriter + Pri FocusWriter + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Simpla tutekrana tekstoprilaborilo + + + + Copyright &copy; 2008-%1 Graeme Gott + Kopirajto &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Eldonita per la <a href=%1>GPL 3</a> permesilo + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Uzas bildsimboloj de la <a href=%1>Oxygen</a> bildsimbola haŭto + + + + Used under the <a href=%1>LGPL 3</a> license + Uzata per la <a href=%1>LGPL 3</a> permesilo + + + + + Characters: %L1 / %L2 + Signoj: %L1 / %L2 + + + + + Pages: %L1 + Paĝoj: %L1 + + + + + Paragraphs: %L1 + Alineoj: %L1 + + + + + Words: %L1 + Vortoj: %1 + + + + + Opening %1 + Malfermante %1 + + + + (Untitled %1) + (Sentitole %1) + + + + List all documents + Listi ĉiujn dokumentojn + + + + Switch to Next Document + Ŝanĝi al Sekva Dokumento + + + + Switch to Previous Document + Ŝanĝi al Antaŭa Dokumento + + + + Switch to First Document + Ŝanĝi al Unua Dokumento + + + + Switch to Last Document + Ŝanĝi al Lasta Dokumento + + + + Switch to Document %1 + Ŝanĝi al Dokumento %1 + + + + Loading settings + Ŝargante agordojn + + + + Emergency cache is not writable. + Kriza kaŝmemoro ne skribeblas. + + + + + Warning + Averto + + + + FocusWriter was not shut down cleanly. + FocusWriter ne malŝatis pure. + + + + Restore from the emergency cache? + Restaŭri de la kriza kaŝmemoro? + + + + Some files could not be opened. + Ne eblis malfermi kelkajn dosierojn. + + + + Some files were opened Read-Only. + Kelkaj dosieroj malfermis nurlegeble. + + + + '%1' is newer than the cached copy. + '%1' estas plinova ol la kaŝmemorita kopio. + + + + Overwrite newer file? + Anstataŭigi la novan dosieron? + + + + Save Changes? + Konservi Ŝanĝojn? + + + + Save changes to the file '%1' before closing? + Konservi ŝanĝojn en la dosieron '%1' antaŭ fermi? + + + + Your changes will be lost if you don't save them. + Viaj ŝanĝoj estos perditaj, se vi ne konservas ilin. + + + + Unable to load typewriter sounds. + Ne eblis ŝargi skribmaŝinajn sonojn. + + + + Please make sure that SDL_mixer is installed. + Bonvolu certiĝi ke SDL_mixer estas instalita. + + + + &File + Dosiero + + + + &New + Nova + + + + &Open... + Malfermi... + + + + Reloa&d + Reŝargi + + + + &Save + Konservi + + + + Save &As... + Konservi Kiel + + + + &Rename... + Renomi... + + + + Save A&ll + Konservi Ĉiujn + + + + Manage Sessions + Administri Seancojn + + + + New Session + Nova Seanco + + + + &Print... + Presi.. + + + + &Close + Fermi... + + + + &Quit + Ĉesi + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + Redakti + + + + &Undo + Malfari + + + + &Redo + Refari + + + + Cu&t + Etondi + + + + &Copy + Kopii + + + + &Paste + Enmeti + + + + Paste &Unformatted + Enmeti Senaranĝe + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Elekti Ĉion + + + + Select &Scene + Elekti Scenon + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Aranĝo + + + + &Bold + Grasa + + + + &Italic + Kursiva + + + + &Underline + Substreki + + + + Stri&kethrough + Trastreki + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + Supra indico + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + Suba indico + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Ĝisrandigi Maldekstren + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Centrigi + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Ĝisrandigi Dekstren + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Ĝisrandigi + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + Malgrandigi Krommarĝenon + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Grandigi Krommarĝenon + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Demaldekstra Bloko + + + + Ri&ght to Left Block + Dedekstra Bloko + + + + &Tools + Iloj + + + + &Find... + Trovi... + + + + Find &Next + Trovi Sekve + + + + Find Pre&vious + Trovi Antaŭe + + + + &Replace... + Antaŭigi... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Inteligentaj Citiloj + + + + Update &Document + Ĝisdatigi Dokumenton + + + + Update &Selection + Ĝisdatigi Elekton + + + + &Spelling... + Literumado... + + + + F7 + F7 + + + + Set &Language... + Agordi Lingvon... + + + + &Timers... + Tempomezuriloj... + + + + S&ymbols... + Simboloj + + + + &Daily Progress + Ĉiutaga Progreso + + + + &Settings + Agordoj + + + + Show &Toolbar + Montri Ilobreton + + + + Show &Menu Icons + Montri Menuajn Bildsimbolojn + + + + F&ocused Text + Fokusita Teksto + + + + &Fullscreen + Tutekrane + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + Plejetigi + + + + Ctrl+M + Ctrl+M + + + + &Themes... + Haŭtoj... + + + + &Preferences... + Agordoj... + + + + Focus Off + Ne Fokusi + + + + Focus One Line + Unulinea Fokuso + + + + Focus Three Lines + Trilinea Fokuso + + + + &Paragraph + Alineo + + + + Focus Paragraph + Fokusi Alineon + + + + Ctrl+Shift+` + + + + + &Help + Helpo + + + + Application &Language... + Lingvo de la Aplikaĵo... + + + + Some files were unsupported and could not be opened. + Kelkaj dosieroj ne estis subtenitaj kaj ne povis malfermiĝi. + + + + &Off + Ne + + + + One &Line + Unu Lineo + + + + &Three Lines + Tri Lineo + + + + &About + Pri + + + + About &Qt + Pri &Qt + + + diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 9b9e5bec..b635e54f 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -2194,7 +2194,12 @@ Enfocar un párrafo - + + Ctrl+Shift+` + + + + &Help &Ayuda @@ -2224,12 +2229,12 @@ &Tres líneas - + &About A&cerca - + About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index cc726cd8..1fb60683 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -2194,7 +2194,12 @@ Enfocar párrafo - + + Ctrl+Shift+` + + + + &Help A&yuda @@ -2224,12 +2229,12 @@ - + &About &Acerca de - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 64281bf3..5352ab7f 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -2194,7 +2194,12 @@ Kohdista kappale - + + Ctrl+Shift+` + + + + &Help &Ohje @@ -2224,12 +2229,12 @@ Kolme &riviä - + &About &Tietoja - + About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 08472d2f..1a2274c8 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -2194,7 +2194,12 @@ Zoom sur paragraphe - + + Ctrl+Shift+` + + + + &Help &Aide @@ -2224,12 +2229,12 @@ &Trois lignes - + &About À &propos - + About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 990a27f0..d9faf957 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -2194,7 +2194,12 @@ מרכז פסקה - + + Ctrl+Shift+` + + + + &Help &עזרה @@ -2224,12 +2229,12 @@ &שלוש שורות - + &About &אודות - + About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 2217a010..c31502d4 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -2188,7 +2188,12 @@ Bekezdés fókuszálása - + + Ctrl+Shift+` + + + + &Help &Segítség @@ -2218,12 +2223,12 @@ &Három sor - + &About &Névjegy - + About &Qt A &Qt-ról diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 1b0a4316..6cd1a439 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -2188,7 +2188,12 @@ Պարբերության ընդգծում - + + Ctrl+Shift+` + + + + &Help &Օգնություն @@ -2218,12 +2223,12 @@ &Երեք տող - + &About &Ծրագրի մասին - + About &Qt Qt-ի &մասին diff --git a/translations/focuswriter_id.qm b/translations/focuswriter_id.qm index fca328e8a176db74074e867bc9275781cb102da9..b8943e0b894588ac421e219f7f282d748d80718e 100644 GIT binary patch delta 8323 zcma)B33wD`(yp25xvyN106994kU&TvfJg!)BpI%dgj`$^0+X3eGGvZ82M|~tQSl&% zMG>x!m+P6J@{5?;>!ykdGY;XBGWfSs&pb{ArbdKM2_V|Q~sAIu0xgy zvx%k^;W=cPNYrqVs45qGz9p)Cjp(|wvMgIE%bKl3XM;qsTS@r@^yK|a%3WADTTROF z?xVQKA?}G&P?Sg9evW8*mMkkDAnt^X$Z|WWv+#TIm!zIGi72%k@-d=5Uy*vp_b_Tb z4PBRp!w%5U$J>Zz_MxFn&&)G4^aLE4#X&MXMjHCX2;4tLS?$jd&DlcXtkqaJ$4^=7 zj}XnBLRp9L!wqFLF&Y!QjbBROi|N{ky{QMf7P|X8uK% z*WXKZufXylo9G7RE~2T;bb|^Cs$Qab8px>+%d+Ys&D%DVh<}V0mG;;qh>{+n)9H5;4Gw=yXOI0%)c7D>9Azca9;Gkl zuO(VES)pjZnW(i=Vff}8k>_8EP|ctBA(awR;%>z7XGGbm1nft0gDabcjED7^T7#Rc1wM2T}1 z|FC62!9$AA6mJm?T%`EC1{?dPD%I=nCCYkB8FjmZXy{I5!X6+pXqd9b3M;o2#18I(RXd3CJ2vk{sH&+ zm^xHRJ-2<$7eos-Lw*JMCbvDj=6fPqjR!yB!G9o;j0*=tUV^OQw%@COyaiGT`4l8P zw9kP=vf5WdB4_N+K@NjF2bm2XF>yOGj{&jIxgEoR?C8a^EcM8;GM?M9eLhhs$Ax#j z&_Lwd%k9~hj-)v)%cA?ZeTs6T>`mOho12j3-*5*XPDadK+@CwVIG~X`-V8z^CwF`? zs%82d?nM4UAh?w~c>#!wi{~!SS_vjKa#yAo;-C(-;(IWrYp`0yc%XQpnq&LQV#8|n zCR`NUpf*h_fjq3XeDn;UzejER37(GIrmlKZFU^{r2@AsTa3-M*<7*&D51eO(YS z&y%I8M7?_Q5hPWmEGK=bUOn|XtZ!GZKQRS$?pANObr*7Jw|c|jL%4rZy=nb;7!ZC| zz4=xo$%q8?mI@${NwS>$xq8dDBZ=lUsGmNB4ds6I&ha7+o~qvYJPr;es&~EVM-n;J z@0M={#M{(ok`Tfvb?Wz>DMW_J>i3_6BT+f(b1%GrevzpDNBbgFMWse1PJ^L$Xta+0 zsQ>s(jV>{OtevIl>wtyRPH5sk{1~~Aph=jCWZ?#C`cn>?%2dtpP59lhNi*^`ct&G2 zV}Ggup&ZrZtG-8QhH0jqfnx5sru1jXs%e@VzDJ#pd{2SA_UgG6ldVl-PtK(5@QIqHrB0v9!Ju0olOU!ytuJPaFqNb_Ur z8I~(1iZ2 zJ9d~uZlvf=eGEshTPMrr0^N7vet(5WpXil`0NH>C^y+yxgILDvy53#!5-%jTQ);ceRUfO@6=#k+1p7yL~B()o>`NKq5MXpYMld)q#AX1L2+)e(QxZY z^oVziR`no+vd%cF6qKy|!C3Z44$gbp*q90AhlNF>>p0ryl3R>R@>W2xQkI4Lj7#HC zujBt_Ts|-akN#$S?4t@~_Xgw6omzNeH6BX59~7HnJhuHTh=^oqT_MY~I$4e>lV#aA zvaE`gWz8w$UoKum{m11SFBT0!KR;-^*g6x*^^J+!2&kIBG3ji25YHo~xIXZ#a<43_ z<4kb{xUW%|_`^7O_P4mQW{oIi0-I7GaIB0tRpbCRT zAJYeyF5`fwWEmfpW%l)^ukS_(`%f|bI~NA28%&q~HV@3V+RO!>MhJ4uhWBi6Y^FI$ zJdDteF^^sJJ&|#_**5oE)c?XWxIniX^(iC{7(Lusc8^zj8|@4tLNq{zJd6@+AXy7}(Pc!aRj{QP^z5sH20SGI!z`y`qV|9Lz@Rc1cB z-hyVd!u(?$kQ;K`!tMD91hv5ub0+*Yl54RgF6_mIjh5mC2!&E+Uq5;=z8te9|r=7xRcf&SFHhKrCWb8 z?SrMSx`>u8?>uJcqX?&AWXr{eCnwp-PcB@gQyF<7JtRQ7D5zsBgy2zJdTu)JYvj|* zyu8Qd4F!eFzz`G;nQeBLyRFjiYw`<$fC8CC1OGsC3(g9XT}R^Pcx^bQm)0ddzw_EU zWB$N4^Z&=FsEC4y2_$Zb*MyC1_a7h5(FjV9K%pFwehtU_OOEq27~nBb1Jq38Bv?mA zcAL|4`N3YNJq6_A+Y_l8 zacm(UqRYb=yM#TDxFWXQ$_mI*67u^6Z;%fJ{er!P`F2f}$uu1*Jy5iWLiqNIBU0kS z7Rdp=I|=?!1AmoKL1^<+E7Jsx?7OMkFtU{SyiG#jzuN@}k)stfoQfiwRTaaF{?LwL zQmn2{e3F~A@&o}w(ZX6OvF;_*f%-$fl#VSW^xEPyR@PK_p zg{eje@?~~!Q^?*VFcYI}E=SPi^Vapcbim_I-AcC@*tvORCQ7308^r(l&5kjUd*qV4Bl=9$g4<_z z@{?U|p^%vu(I%y2fv7OY)nI31*G`@?Bug{!tcOUP_%(pk>(QIir8n3t@Qu*TXQbz5 z@Qr?-hj+RHErp%w=I_+mQzI5JGRlR{1}Q^AkPJ#5I$4YuJ=w*lW6~3{Yp+tc#2(-s z%|N&FV$4UJK8|Xz)@H97q zmkoY7fn*Cly>m5|sjdmNw)*@*K?d))hlJ%*l4%CeWB55>8;`qI$seBPAWCJCNLXhy zHo6=FKciLf@^i||u3_{*s>Svez}=(DhMIT4M489CSsZl|&6IVg2VW~J4PHZQTraJa z(B{S`5HZbA>9)JPf3%;KIdhPOjM=voC6&i8Wn{$oquVItf3?feEa~Fqko?x9&ZF`3 zwGHD@3g}5P^w1l`ogLsYf($`z2%s{a6QpEm!f&jn_0YZC$p)18LLfWAjzir-FevzW zOdtnO3V!XtamiLB3H+6!DRviJhL5cNEDM$+soY&x*3g5$#l0 zAm|fs%t-1iPIW65=Kq>3VT}hivCfK=#D|xBVIH;Mnx(bO*7*^nlgeFQmnY=mTe~_e zv!;uw#j50_&Zh?+Q7FcXPi7Ao-UJ+a@L{CEOXR`Iok8A1V{w(pdGU+vtj<6huN>8% zrm<{h&PZms=(o;ARSO=$(*U%ZyS)^}!DB|sO@@Ka_A;)LM+v4e(qzb3Ed)S&wLY{h zv4|fKE(3;w6f3r^1=qcr3Z8VeJZ5#TyRP2VwS&iREHisZCPO|(X6LIA3$l~>ppRcB z_|spD zc&ZHuuzF@0?!*;qy38rR6kNuLy;+m3m5a7ja-w&64VmqC1qHsL4PTgwfVs!+Z{bmK zty0|uQMbGbEGnKzPYRDkS6~SwL)F8})v#|e&SXi-qRaUC_t~pog)fK-2t@d+x^}We z(mAXY_0_>f)?m6wvKS=A=$Ex2*0{sWFFVd>$;W)|v4Hhcue7M=Y?fs?5mZxWdWEH} zf&-+9ev0wK(G2<&yiPW2vNj=EV1fm;z81mjLi8l2PNou|?Faf^Ww_XHzo z%LL0N2FB&Ah#4fT4>C+x6}fvM(koF*eBL0&XaUViaJ0C*O}stGHwaBGub16)c`r3! zQ%x(ziPEv=&hPU6u1aDph^HbL!RCq{rqC2M_!f)z7sm4p3$}(03(N%k86W?#DPB{I z=DtKsE$BNTS@K7ocw~x}v#}T!gG?h^;)>lNzs%0Xc1KH-AMEKAR}}OS-JX39`p(?Nq_l)Es0ciR%hRmt;y*#LCAD z4_R5sgu+UUwMoC^ckg4Or+J-hdTn(1F)O-VUYyofJXYXMHX&2l?nUh6h*{clyB{zI z#19MN#r#6AKBn7pF}FTeudfi6bQ|4Q+*&wsSbzNPhaxZFX3_1w?(K$dMyuW73brvn z5~HqW-Co|RE5&CE`iY+wmZw^XwN+%D^yvXaU+D|D*f=Oba@|B*3Trnkr(B3j?|^Ho z?M_!HfOQGt@`>|nharzcSjX~{zh-n9WA$!YN!2W%zYZ{8;`4h2f1oSSI`M;v4`;?f zsoYyxnKRmK=;fQC*51I+b~%I1lI1rQ4a;F0SWjV?MRF_>2rC;u_^XquY_OEI-IT>Z z|6NxiN(TH&32*cJTKSr0yAyfNvUFRKGoKAcY~t$fQnR`e$tBgXyO$GDvjl$-WZ~v9 ze4%4W@ig`FyC+bZh_7S%U*%`1l)Nm3fpo;s=-DnWZ2FbIsZn&*@?NHB@qm||khm~paA z2(+;Eoq{b@8_VAEf9G8|$~yS!m*LLE(|ytX(vTsn(phD)EM(&!>k&@zoU2c4Oc_Qh z-i}uYXV;rsp!1!1D>UT;;VzpMfNGyUf!5l>}8A5KbuV1N_NePx95~>=@jV=3lL(SLelhlpKA~> zo}#I_L1Nyf-&m0#&UUQGVScb-%Y~7F!N~el*IP3F*9iVau#dvKvbd!-sq;NYg)Wu- zZE5N6V8FVe^amHQ)zq(wm-wE|0FmdoV($v9EwdIaH|@5okY&&0p|AINk~`NI@{5~I cebRVWBj4r=Awb>?{6&I6&B{d@Pr7mbKV5hAJpcdz delta 2975 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 %1% of %Ln minute(s) - - + + %1% dari %Ln menit %1% of %Ln word(s) - - + + %1% dari %Ln kata %Ln word(s) - - + + %Ln kata %Ln minute(s) - - + + %Ln menit 0% - + 0% @@ -73,34 +73,34 @@ Daily Progress - + Kemajuan Harian Longest streak - + Rekor terpanjang Current streak - + Rekor saat ini N/A - + N/A %n day(s) - - + + %n hari %1 &ndash; %2 - + %1 &ndash; %2 @@ -109,7 +109,7 @@ %1% of daily goal - + %1% dari target harian @@ -117,7 +117,7 @@ Set Language - + Pilih Bahasa @@ -125,12 +125,12 @@ (Untitled %1) - (Tanpa Judul %1) + (Tanpa Judul %1) %1 (Read-Only) - + %1 (Hanya Baca) @@ -169,12 +169,12 @@ Reload File? - + Muat Ulang File? Reload the file '%1' from disk? - + Muat ulang file '%1' dari disk? @@ -189,7 +189,7 @@ Untitled %1 - Tanpa Judul %1 + Tanpa Judul %1 @@ -212,7 +212,7 @@ The file '%1' was changed by another program. - + File %1 berubah karena program lain. @@ -250,7 +250,7 @@ Unable to open archive. - Gagal membuka arsip. + Gagal membuka arsip. @@ -345,32 +345,32 @@ OpenDocument Text - + Teks OpenDocument Office Open XML - + Office Open XML Rich Text Format - + Rich Text Format Plain Text - + Teks Polos All Files - + Semua File All Supported Files - + Semua File Yang Didukung @@ -432,7 +432,7 @@ Unable to open archive. - Gagal membuka arsip. + Gagal membuka arsip. @@ -629,42 +629,42 @@ Reset daily progress for today to zero? - + Reset kemajuan harian hari ini ke nol? Write byte order mark in plain text files - + Tulis byte order mark di file teks polos Default format: - + Setelan Standar Reset Today - + Reset Hari Ini History - + Riwayat Remember history - + Ingat riwayat Show streaks - + Tampilkan rekor Minimum progress for streaks: - + Kemajuan minimum untuk rekor: @@ -679,12 +679,12 @@ Count each letter as a word - + Hitung tiap huruf sebagai kata Page Count Algorithm - + Algoritma Penghitungan Halaman @@ -794,7 +794,7 @@ Not a supported RTF file. - + Bukan file RTF yang didukung @@ -802,7 +802,7 @@ Unexpectedly reached end of file. - + Mencapai akhir file tanpa diduga. @@ -891,7 +891,7 @@ Duplicate - + Duplikat @@ -916,7 +916,7 @@ Duplicate Session - + Duplikat Sesi @@ -1061,7 +1061,7 @@ Continue checking at beginning of file? - + Lanjutkan mengecek pada awal file? @@ -1165,74 +1165,74 @@ Opacity: - + Transparansi: Position: - + Posisi: Width: - + Lebar: Round Text Background Corners - + Sudut Latar Teks Bulat Radius: - + Radius: Blur Text Background - + Latar Teks Blur Text Background Drop Shadow - + Bayangan Latar Teks Vertical Offset: - + Offset Vertikal: Margins - + Marjin Window: - + Jendela: Page: - + Halaman: Indent first line - + Indent baris pertama Above: - + Di Atas: Below: - + Di Bawah @@ -1242,12 +1242,12 @@ Edit Theme - + Edit Tema Window Background - + Latar Jendela @@ -1290,7 +1290,7 @@ Text Background - + Latar Teks @@ -1340,7 +1340,7 @@ Height: - + Tinggi: @@ -1350,12 +1350,12 @@ Tab Width: - + Lebar Tab: New Theme - + Tema Baru @@ -1368,54 +1368,54 @@ Default - Setelan Standar + Standar Gentle Blues - + Gentle Blues Old School - + Old School Space Dreams - + Space Dreams Writing Desk - + Nulis Meja New - Baru + Baru Duplicate - + Duplikat Custom - + Buatan Edit - Edit + Edit Delete - Hapus + Hapus @@ -1435,13 +1435,13 @@ Delete theme '%1'? - + Hapus tema '%1'? Themes (%1) - + Tema (%1) @@ -1689,7 +1689,7 @@ List all documents - + List semua dokumen @@ -1765,17 +1765,17 @@ Save Changes? - + Simpan Perubahan? Save changes to the file '%1' before closing? - + Simpan perubahan ke file '%1' sebelum keluar? Your changes will be lost if you don't save them. - + Perubahan Anda akan hilang jika Anda tidak menyimpan mereka. @@ -2090,7 +2090,7 @@ Set &Language... - + Pilih &Bahasa... @@ -2105,7 +2105,7 @@ &Daily Progress - + &Kemajuan Harian @@ -2188,7 +2188,12 @@ Fokus Paragraf - + + Ctrl+Shift+` + + + + &Help &Bantuan @@ -2218,12 +2223,12 @@ &Tiga Baris - + &About &Tentang - + About &Qt Tentang &Qt diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index 45da9757547a9012ccd9df8d939feda38655aaf3..4946421e4c9e7f1e233c3f2eba6edd144e9466fe 100644 GIT binary patch delta 6085 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 delta 2960 zcmX9=dq7Ni8-CB3bI#11IWvPo5#2;8MM4)!DvC;}P}*@zA8jmhZLL|+ha{JYjW5Z5 zLb7R1u31@?`z7RC>}ru)SYdNl_USu+J?H%9cYg2tKJW8BzbX8}?EI544nC4(b-pQo z(tRIUCZebYqS!M;E}LZxG!VNR z``ufJEysHBLShe|2L4Fg?mF!EAg+QV@|`TBzkxVoZ7`8Kka$;Y7#KwS*bpM?Ilv+! zy&LiSnu&aRB1R9QVJYOYYccQ=xwIV=6ihC)PQV2~oTIu%F3x&8xxtIdZMWdT2Eb?Ocx{yOS~0c`eb992)7GLDXk4jf(C_q+3rB)6$6soT8}p zH;BgCQ%toBk^c#bU7khMe~^rWBpTm>1ii;n!i+6Mil;J4l``7e%IG$c5>6sfJE93} zISPuU2@0GOkZYtw0S`VKWDKaJ#9{=pGSft@KWOhyQ#mi9Q9J3|s|vIxj*7pGCUVNJCHIjtt@Hi_!be?l8BQDc8S5&H){|0XBGhG(*qYv$m<{p_@4oD&nlrZUfjQsca>(>C0{^C_?Yg zu?4;(iMp?1cWcQM~g`q7GzaT|%uX|*qA%TiA>H$?N6=mb_VbBdl+1e$@T&KA3S%(Cy756q25P33+ z2RbBZ;i!0%)P;7j_)$kGNd}6ClDwt|aF< zQN&E(3t$1TnTR$6KjQrg5WSBiU< z7sR!kJGHGlTI9iw5}Jo#w6^AMPdU+m&k_n@OY` z!ZXbT zfH#DhIduq7Dr|iN#=0wkVAP!zPN!NDjhrA{%!0`K8Lfo+!wA&pC*hs_ZBTw#_6*^N2_GxR)Lw^J8T~2ED^BY-k{uf8dKn&t*l5^U`#!g4fanl{}yjmHeVK^hY2dr*BGy% zD^)(4o&&_H}RI^A3a zvHhT4o_-mLZ&YWw_a}0UROgMXMr#+S3&!aX=d_Gti`2!+2F$-#fciwkRydP|`o-my zV8CAe#T`^h9o1iQ&;^R2^t_(&g3k@0>c#C2CwR;GlZ{Hdw3 z*?_TW)SNG=Ct{jp6zyc}+AO1MI~n~}$>{%B#=vaN)kb)|HdNCX*qf+pq^5Cp94;|0 ziQ5W>#@R}i9Z`sXwu}K!B%`H27KZ*J*;ON8$XsdQ@p9Z^OCnEtgh`%cxK*-VBDSP1z&e!7X4Qn9RCX5ejEtTcYX;(fZl=H-~<8dpR|Ue{t)qY?X0)opkiz7>Zs0W zNs9Jl3H(AAuB|>h7@9HKXzTNIu->1v?-Ia--2h#O+n1qmHtl=Z`GXwWM$`s%U-qN*}bO*Gm1kTgYtSLj5$`4@h8}e#ZV-SZ|d+Ew31iXk`q` z&}ZZ!bEmiZiazOJ=z{)SkOiFWs{Wk=64pM`zst(O5MG>tGJiKaNbMPOl`fPqN43)n zrrJRU^PJO-GkqWKZPG`~GaZSzXlja#H)oDs#F)aP zQ%&Jx2AXQdd~Kc{(~B|njp0nUt?W%9aUD#}u^#4ealzK+x3dlk=9c*{RmxRhmt~lL E066PeoB#j- diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 10d930c9..567d5a78 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -77,22 +77,22 @@ Daily Progress - + Progresso giornaliero Longest streak - + Sequenza più lunga Current streak - + Sequenza corrente N/A - + n.d. @@ -122,7 +122,7 @@ Set Language - + Scegli lingua @@ -174,7 +174,7 @@ Reload File? - + Ricarica File? @@ -194,7 +194,7 @@ Untitled %1 - Senza titolo %1 + Senza titolo %1 @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - + Il file %1 è stato modificato da un altro programma. @@ -255,7 +255,7 @@ Unable to open archive. - Impossibile aprire archivio. + Impossibile aprire l'archivio @@ -351,7 +351,7 @@ OpenDocument Text - + OpenDocument (*.odt) @@ -361,22 +361,22 @@ Rich Text Format - + Rich Text (*. rtf) Plain Text - + Testo semplice (*.txt) All Files - + Tutti i files All Supported Files - + Formati supportati @@ -438,7 +438,7 @@ Unable to open archive. - Impossibile aprire archivio. + Impossibile aprire l'archivio. @@ -635,7 +635,7 @@ Reset daily progress for today to zero? - + Resettare a zero i progressi quotidiani? @@ -645,32 +645,32 @@ Default format: - + Formato preimpostato: Reset Today - + Azzera Oggi History - + Cronologia Remember history - + Ricorda cronologia Show streaks - + Mostra sequenze Minimum progress for streaks: - + Minimo progresso per sequenza: @@ -685,12 +685,12 @@ Count each letter as a word - + Computa ciascuna lettera come parola Page Count Algorithm - + Algoritmo di conteggio pagine @@ -800,7 +800,7 @@ Not a supported RTF file. - + Non è un file RTF valido. @@ -808,7 +808,7 @@ Unexpectedly reached end of file. - + Fine del file raggiunta inaspettatamente. @@ -897,7 +897,7 @@ Duplicate - + Duplica @@ -922,7 +922,7 @@ Duplicate Session - + Duplica sessione @@ -1171,12 +1171,12 @@ Opacity: - + Opacità: Position: - + Posizione: @@ -1213,32 +1213,32 @@ Margins - + Margini Window: - + Finestra: Page: - + Pagina: Indent first line - + Indenta prima linea Above: - + Sopra: Below: - + Sotto: @@ -1248,12 +1248,12 @@ Edit Theme - + Modifica tema Window Background - + Sfondo della finestra @@ -1296,7 +1296,7 @@ Text Background - + Sfondo del testo @@ -1346,7 +1346,7 @@ Height: - + Altezza: @@ -1400,28 +1400,28 @@ New - + Nuovo Duplicate - + Duplica Custom - + Personalizzato Edit - Modifica + Modifica Delete - Elimina + Elimina @@ -1447,7 +1447,7 @@ Themes (%1) - + Temi @@ -1695,7 +1695,7 @@ List all documents - + Lista tutti i documenti @@ -1771,7 +1771,7 @@ Save Changes? - + Salvare le modifiche? @@ -1781,7 +1781,7 @@ Your changes will be lost if you don't save them. - + Le tue modifiche andranno perse se non le salvi. @@ -2194,7 +2194,12 @@ Paragrafo a fuoco - + + Ctrl+Shift+` + + + + &Help &Aiuto @@ -2224,12 +2229,12 @@ &Tre Linee - + &About &Informazioni su - + About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 6262641e..2b0c328c 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -2188,7 +2188,12 @@ 段落フォーカス - + + Ctrl+Shift+` + + + + &Help ヘルプ (&H) @@ -2218,12 +2223,12 @@ 三行 (&T) - + &About FocusWriter について (&A) - + About &Qt Qt について (&Q) diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 35d3571d..95744ee7 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -2188,7 +2188,12 @@ 문단 포커스 - + + Ctrl+Shift+` + + + + &Help &도움말 @@ -2218,12 +2223,12 @@ &세 줄 - + &About &FocusWriter 소개 - + About &Qt &Qt 소개 diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm new file mode 100644 index 0000000000000000000000000000000000000000..2080c439af3ce00ee461d65a661c05ca43349f39 GIT binary patch literal 36326 zcmcJ23w&Hvx$jCcGs#RQlSe}-rNE{%)6#cKDW#M`+Vn~KO8TNe%QV?Zrk%`$d9+Od z@c>?Vi4PtEhl6kx72zloZZ{2*|zZ^U1!E-b>4bi2sKWbshL;3K9CO5PQ}L zvFZy#jQ_rRPW+k>YdY~c-s!$Zi1eL8Y?>!T81HTVkq{?8uAV)E>Uk!9f4L~cVULK~ zF9FWdlBm50@11k9sQuOt@f;ALFFhy3(Ay&PKuCy@ggE>PamIIc2{G*@vCcdw#LB0|#!vlBh}?G3`^a=5w#CKfORf-N z`7!Fb`c<*@Lj1nw6|wz2;Csdvu_JvW;4fCs_B!>Pd5U_Ta+}!k5b&NgUYu2X57zfz z;;cH1-}Yy5b_CD$Gt_hYapLSdrVDZ07O|^osSxLeMPF!v5d9w&=l`@$h}P4^9g$k> z<0r%&A8Zifl$XR)Uw%^vqe;Bbak&r}`tsv{6=L|?;*ArUg@`T_zdz?%Anf)Krj*UWzIH$qH&y=LS5k6}IM)SNS}0D2c{&N&s&&}}uv z2fri4!DDJJ{L(+-{pV|L``k_;E_kHop1*xli2c8)dEp|^Y43rW*CvOB_{gg@uXTMz zh@&5^dA(}}#=l+jX3f6{(XqJZ-+D1_LaH`=!zYE9v#GY_(mo+(ch^q17xYNRYI~c2 z->x%jQ;(j9`MzFj4gh}U)Y^luZWrR1%WAKF@O>esUQv79Ew_U=*VW##c&!jKuBiRe z^^bs0?x_9B!s~!{y!Ko7|8F7sUaGzK3cR;7TKmAj3E2O$Yah4<>)88J?Q^Hi7UG1B zwLkj-=Fhd(zWC~7A`c z-MAX?&bXrPj;XJJ|1PS#TTFqRJym!2Ho!gmy1KhRaRKO7sC(%74}_?Hy6%a;C4l#l zbt6ZvEkbnurS7*0tZ&kZb$=?nCB&KALb3b)2)w6++Rp{vqw7N}Zfy}_ z!7-s7m$VCU;uk`h(x<>rFNa1mR|v6UcIe>UJF(vjLl-@Vc~6=Z`iB>u1l=cuu3CtF zTXAmaGgsUt#A!z8njOap(G?0^+w=hFaa8DrHQ&YOdqQ7axC8QGgzmih_d*P8!}AY# zUW(^CLWnQp`7VC{I-cOeftT@oPl&Je=*v!&j|*6ndyzJ#qd`j#{0bk;k%bygL$*zyT6Tj zFWeEn=O=ma&rtaJb)N%$OW_xf!v1wX6n?4y7$F*e8-D2F2P*%O(63DzZ+Mi#xh9(w8C$l|(pAWx4)*1QO~kr|P-f5mg#d6Bc;fqXCg z$H>l2cz@*;k<7U7!@k@Y8NT{C?CV{Tg9+@@n%g2b{RwoR{?B+~Urs#``SLZOcik@| zKg_g4ADk2U$rX^V&i2U5-v(Z%Mk9YY_C?6&Rgu4a1J7CS*Vj#loE_C!-}aYQ=*y4R zANNKP>wU9+#=$W5drJMBXHC%Ob@kl%`TDNQ-on0KRp0aUvyhXw>NEd_`Hz`WKiqUF z^xZe=M}7}^@A^*tfr}u|h1=_I`WEQE=l1$LBlvt`zW%NsLJpU<)ju#$2R$=d|LU=C zVt&!k@MX}uw7y}|2m8T)ziF8NN67p3*BVZ~5csv24XaN61NP;VhV|dT@00It72URKLWjbFxtNCKZR(2DmwoEEQNS|G-|vD zx^&(doy_N{k3~CnzJR}<8r|^_*0IKj?rX$;!D1c!=EKmhZ$~dV_$2J<&!bn&K0%1N zTcbCueFXfqJ$lQw1m=HNJ#()|@2GzjbUrEiy~{2E9VbS=|LRS!i)*5f-*~kU`+gq% z!;>Ee{XQQ3VD?VX;k4)nS7X1&T@s6Z^C0N8H)cGFag$GsEk33lc5P$ql!2Qut~++- zMbLML&5rdi!n%+8TFiWE1?2ZLv0E+$zDvInyXQQ>oBfU0cdx>_7yem2H#{GEbi(zp zGm~SFf3yI7aChv9Ys1jvpNu{6-R1awF!t)fUGT>SW3Md(9nNo!y-&Yq>2DkBuJ421 z_;F*yWq`ZjZ;i2wpT$1bH#Ucl!#+OKc*0uf;n14K?%QTVZ|55arh)Ern;O$k!CqeU z>&E>j{{#5qX7%hUG#+S&oOYhuc>d%P*7K>x+kdlOi2Mh|GpRS%gzf{j{r>f_f?>7GQjW^&wZf$&{^LW_ryBgmZ*#i52 zdOUO!=rpoB-q00=zWHpt{V=R+>x=5SeSN%rDSkim$hh$c=H0n4zVN&Ez}}x5U-Z{o zgh)ITU;5WSV4pu9-|>?vut%@Qcm7ih`}4cFc_-+!?cR8L{jreG&UkU)F33qNUaI{* z?AtZ*JHCDm_Pr^7|68E@t|#KpFQ0_{y*2*Q59(l_>*K$E?|txdpL!nggnG_>H2&7* z*uP1ikN?*^;1hW){{GL;7NYGdO`*b9VVBQsiv6Ms^77fHqpo=b^81ITMSI@C{(aEY zb>`c!W1qnj_U)vv;tBXC{i&&IM+Be$v}w&ZuLb^BHEmx4yR+`{rk%H+06F<)Q})j} z&|_EA`43?~=D*Q&`NqSse|I%~`xj4v?>m|vx)XZu@UEsu9$SKada~)|8xo+)aZP{O z0lLlFkONS0~nIurBdJBE5Vw z_;@st|99Zsv>|a(C*bU#nz%9wKjFlUi7RjIhrgIfeByH8d)9r4PkbA6U$-oA{c9fs zzdV?@<5|ENA5Z-A!jqvNj!!)JtHrQ;;lxW)e;iD_{I3(S|LMeQKZM=v`*h;HJt4?L zU32VS$oH}J%~OBX3wtD*=gqze`t?!LPD;u}Dh1vfQ6FzX=p=Rcc&ynGzs{%iAJCW8*+-)jEL z6<0$)KG6Jb{65fOG!13<1a@9b6kBROBKk#2OJw}T88ux}IPz8NA3&Z0;b#E>{e za>jgTbW_JXBbn__6^2eRI_4A5xH1OlN~bcpLCFR!07n+>#~Mxil;UEzeEq|mTE6F9 zZGF*>tkItuwRW=NWRpb~Fy1W{3DroJgvI1}D2N;ght)W1NGvbq^Jcba6pDE>wYTab zCW0sjoZfGv_1hFd%cXr!f@XRowV{C!xWZh&QJ z!T48fp8O}Rn3(NQ{n*Y-#wcYAsePEeZwQ1k3&#F5KHO~@Fpb68+=X&{+Q7CMz$0um zm&^VQn@V6R(APigXjmwsn6Xe+wg#dLKzlSsi1e75TuK_r@_A=^0IZa&%+!RjLJu%; znzO>V0%xpDXUx<5SgrN|Re-o%H2q{&FK7c6jhvw-o+|a)RBggztO<)lrZIp?jj0{; zrWynJ+_2G~F6<4!!GJwCu{|!Ms7-Yi=q#qO$IPaNO}QBVTBeCL0j%Lb!CELFX))r! zi}zyVB{ZY6;0JiU2cUE<0D?R<2!uz$k0tzE1p1WcqWld!uQ?}tcOS_q_h|qm%}f5I z}sdUyTng@!CeL?EJRKDLxft3ex`QcQt zh&N{&aE9dP?q>lTGG26IE#z(~Iao~&IGYaH!o9hCe$-E|+0aU+CG(>e`%nWY$yBmu z2%BYGDLi6JHnkg^Qp_2-eP(`tK3!C76Ci!_1Lp{0AOAe#-FaZ6$VlYPfJx>COhP#* zU@^Md@lVn2PC=zoX#!&`{pirTQB#h7il2_1%7c5dlCP+)p>=EKNQ&EvMi*DFFuS~T zOjphr&6SM(DHv~TL|$qk!$-c zQFIYXdJvN2%;k+f8L^Cwmmw_4w*(dfCRy4t6E%lBB#u)z8q1~jmwGpFonCm)6 ztVs<^=?g@z$Ag?LY&wGF+C^#RLqTwsgP^odL{VA){tt!X!T>!%u1I_Mn|$8~kAD;@ zKc~4Lhr8M$H)3XuRK9O0z0Z_1i9y&7(95#qERNWrNAj@FDdFVGw2G)>{6X{S+VDPk zUQ@mfUo<3pOjwLQ$zk4sv4Ckpm1ddg=VEXM-7U}na*lu)zh|)W!J0YF{EdpgjlPu1 zAb3%jgsmrxgEA(d)5qUvKvEj@S~m{m0l)x5!N!%c{fcfrIvk?A=0##U=wO1qOF*BY z1VtSo6_!JBlS{;tPLeD7<9f`&QYMu*%mX8g+2ILFzrqWV^(D6SGD!N<7#A-1aKo@*YvA88pR>h>Tk9|oW2Uo(Vk+Cmw1%`JUTPd2fMC+{ z`hkoC6TYnES|bU!oyO1$NV-uv$Adt+bGFz4)ntR(pDqq94uUlioNZbgEZs41GYJf* z&wb?z*^l;&G{Ar*u~*t09fPQaL1`pt{zG@DaRl018X3vuVT!AQpNJ&K24o_)OHjI(?($#r zhJk@}pJ{BMuHL?`o9hg~bOHc%fquj(7*H!A*v^!(8D4t@P?N+eNHXILW!pA`1y!V> zI~=i%()+IhX99HDW}s6UrIwyF7?~gpMf(aE%|~p%7R!Q_m8zW<7?A>8Kq~oR`B}Nb zKHg!J@zd7lj6!LUi5F@{rL|=Op>cJ3a43U+MQghg&@+mp+wmz!ZyP zZI6sR(IbPZQKm!?WZ^#tmDc4$X5U_;cf`zO7#Pi#w!;T>lGIH5Ky^D~L#Fd((bo)v zO$&Awy;1(UtW+%KvN9hsO)#GFIt6564Km|H2fdhNF$stJ;Dcz0C88G)X%eZFlwGp& zKY+W`fz-OBceGG6hn+0YQUZ*3=lW6^Q*#$cZ`;Ho)#r>4t3kDJzMKE6mS=~M)NX=?9FN2~$y$KRS(gT|GKh#Y8*_(gx%9QRbP3$ZcbIAKx zbIb7A%5YX$`+OuOke0?Ot(a6wHZa?-xSro=O+o z`sKOdVXJCdVd&}#WTYH$lbB}&qEdCrxCK`A2rw@ZXO7Qy?A!qD$mJxiVW!{{AdNwC zV-+ds<5l6F$d2+O% zDcI&Nb0Ag9Feqf=v)UHZGLKNuKnwogri3h{0(EK@7QS39IKB&69cXWQyT)!tovD0U zIjt3zuuPWEv{H3Bd)JUeOtxEMAb*z$9WWXL5cpXRGaS{G-k0t-nXJ&IfJuu&`aqSP zX}6Fd4NG7M($O_Z4GOFZMJg<#1rW$c42Y#ocaVy7Pw09X% z>sR!rnV+r#A}%wg6b*2&Gj;tcGi&Bmt*jE>H5UToJh)NC3@$P2SEmcG1TtKyF!*ST zd1+-7k2sD9gw+KVThm8>mi4eIYv>P3mS{m018?OL$^3#;G~6z7NEgO-VJT}6T=dHS zufzX)@s}R(F#k4Q$WI*F9APC{R9pr}XUoQoD|(i9_O7Uc;u3)JWF^alLLpNCQe{jF z+CnNTOwAD6$d-n8oB3)EKujtRI*jiAHt4m>3VSpi>$a4p0W9m8Sxx&#?z@uprhcp_Uak(1~*d;8Ib$b%K*N zWK9E3{V)>dMqvn%eqX7GbZ#y?0H?o*l9yH3NEe3a;v?_eXPW&o5mkXGOCjxKbRvuN zheXvXh)YMsR$)w$cj7J9p=l|K(onf#(7q92p`lD^XJ#;my4KKe72&Jo4vpy8@MlNR zVseJDJfZ2(6OMh6M3%NrZV<_-d;)Hl3%PkCEDRF#BST|4T5VQHq|;zI4iF8bo9yg|v*vLdp-0fckU=ri?q#S#)HW$|49Dm_(6@FM*{H=aRY4qL z3b_J5&6dq+bZJ$wNckC#3yn|7Nyb(9szSRYc9ykdMSQCd5zwe6Xw5Cp)PaZ+e*rx! zn{#MPsseUL5Ln6Nj`t~DT*na9&_Zcb;%CNhH0pe^kgpQwu4b94P*EK@vRq{wiXyS2 zGC64GbJaA-gi0L*&Uz!gvW8z}sc}fJ3Nv-qjr1a#tm=2lHc3$4m#J{&O5=uBD=TqG zGBpJ#N$rkprJ__Gxu)GgU02E)dM&M7Wsy2WvIJW#7@#=zg8StVEowuo=1)w7XQcFp z(sp*cnyx?N0JPugRjUT8%`tfa?r$$V*Q)OCbeW@2y-HbWEl4t|Bo%|PPf0eJYVJf+ z?=bUM=arCt8$)%j0+k3{sZJHf&?cv0S>^sXbc^>6=TLoxvy&}WTW-6QF56GBQd|xc zxBa7n4w?eWTVb-b%FRG#uSAJRmgkicG6{?NI})3OWt-6VG5ejI@cX-8i2ePV#d%^?F2DZzrdS?b5hXn?2GFGS} z3*()jqijZJp-~BMj96o$hAyqkR;<^Q)N{SygaowFGAh;LWZ&W;{)Ecn5FIx?Dx#Hh zg}+74u_cQ#_LvJ_4YqR&<>+KV&O$a`@+T;O66}SNBGp5wQZIH&%JvoX0{cAH`K_ut zs&r`XW3d>%VUg`pDWg=7jYs{CBO%KG71(;a)mA;(j)-j61nALgWlS_GovBLx>mKxN zkZ5)$Trsh0ah4KY7a3!6$GpjC;X)^E|0qhzVD5tJ&pM4dswSE)Rx?DC;1%Vl<_s--9wS*o9Ezr3pxQVo%Shl4%K;2$SpxSz*Qy7F$_j6|61 z@yZ(oCQz!0>;GityTUdvR`wBb`G3Rn-^TRNp?m%`e*qqPd2YbjrkI32me-#sTZb$4 z5st2EQqEP(g59*wjW7p>_(n2LQKpabz*kx@l?;~7mfaIc&A^ngs#NkftHH}+Ik%JW z_-(S+Z}%t~{(u#91gsuY$a+H~yGX0?h}*44Z-EL) z$RnEls0%>8(N5QInAv`w1L1ll0&yU)Ik(r$rr~E=ec$d`nO-y$DHD%#Gg$I|tudil zo}TF)N)Hrg*olOw^ccILL?oz*+OZoQ)E2Ejwn+n{(g+?PZKx^JmIf6-BBpHgjQES%vH)z?~S;6m>}O+_kTP?J)$3*Z1M&OP|e^?)WQ@J2z_ z$e|MpYLldI6SUwq=sp%Cls{kIMjP!aslvZZPy~%;UfnYq2=}_EIqPn9V4;RA8~ZAe zfCVoWSZE<_`{_W$=dN$uteD3JC~aI2mNA#B9DM4)PL(j2;J&Y~MvIjiG1{KC5|l$e z=Msc+yCvaeXF43@kv3xceWjTv2MyL&qU9|T){&4gHieonX>ThX7YCPUZ&K}NMe;K( zYw;>aS{&`J%nE4Bf_DYd;3{QY6-*S4agT{^z(x94oi1woD!iKI~B_j9BzUFDkhU>g}9*;-4QZ4CYutUd+ap3rs3d;EjTD4M3 zq&%C=U^Sdw3@=CDkBnQG(vdX)))b{~UkdZ=OF_c!Xmw@iAnGDT0ao?lMM43x$HC<0~Tdh^SK8a=x9Lpmc`$x88I$y!kVT$^sdyc|CR&^aGK||eBWS)fO zO?TTHmnS6#I6y9&j{T5Y$Y9tX|BghKv+udWFv@UwCV)qG+(0d+Rt|=`T7Nkk#5%+g7PlSSqZi|4q&3hNp+Al&qvMvSq^~Jj$d(QlIcn zvWUlEm^##HxB^U9KR2=yyD&PuJC~7mwy9VBT-H5EpOd*FW)LAut{kK12FIc+4NM?i zVRxwMHX*V`cA}Bl1E!lGrLUS553jeacfjxk@UiF=s5U2+3-IPBE0g1}9+S<0i2Y&i z`o|zl8w^S%y4G8CtguLS&8T)heKR7mQBRUHZjE1;!x1fMB$#AZGxH6PgB_^&*m31baHMlL%9~PZeIp_mk<;H@h9i^vgWsi3 zpbCu4!BbS+)IK#H4+@|^&q20*S*Da%-T2E=eR~J<%#(7DeOR<1ZX^!|WndbX%Z5{R z2+=o^l@O(7CR_xjf%!&Ff=aU6zg(S53g{QL#OSaYa$5se z+JdSvcZfwT>IoO)@JiT(V8YWh+o>5Ec6U(yYLmwef`=*7taaymW{k+z{NS3RZFY6>Y_bn|Qy$!{lM>y1LU4sG%8ZHOYc_g)PB0>5)K0>lbl&U5V!vnME3=egi z1JdL3jhJFfgVl#a14w3J_C@*8x^%}WAMg@VeO4jP2TvVbQ?{yHzUtSd@-V_utN4b^ zl-iQhaub+SU}eD0pDJ*4=*#!DaUJgMq0?jb2b224=x`rS%oK5tsNj@5B4}|)8fAoB znHkZ^WgCCXj&NyAco zw=!`|b=!&d5f8yFF?5(7O(i%LRLRh&5;DgyWd>qvq-P4F3j$&E4yADDG!W~A+;}E- z%Cn*2&8RB{lNy&igTxg5G9AJ~ZLkjEVN9A36MdORd{*G#-6EW9(DH0aH$gdNn*4UnV-~l_+iM z&B#P{IWT$9c8V$Y3aOedN|JXxH>-&cx#{yNURRcg} z+H&R3*!MEHN&Ge|iC?5oFRwsR;ka)thn~FmBNf+6XO0pG(TSv3_y>%KD?|gW?2T$R zE(;fNJ0T2B@L)z20fRvZuNxazU|iq9kI6&`I(E-3KALmI3I_UGrvK%H{ho4v`k$Grm z7h@YTII7n-gl?4J?KtGxgdYQ*QKFKP&A1>u%}K8`&NMD;UU5wdvMabG0~*&%4Xbe3 z$HFni00ilvACYfW7|`wxz|7tPx3XFVr>^bC-%jw^Jq}cpTmhYDdV($*aW+>lC)Q;a z4}z6H9h4?U=V@&hDkgEbC@M7?WWud%M7b zQI@2rf#%mB@|HzjEi*?#?$%&W0&ML#o}8qkd!8`|*I~}*=4&%evt}xDdxK_jcA^!~ z=?NDW+kibFr#m32^BtGCD$wx~sMQ@`5%LrTxx5L-OOi4~RbNg8L>b5`KSI` z8mKmZe!wA&qtLbYTf}Pow;0n5~o!d=n1L1{3@#+7f;!`N{!Nes5V?RT#1FEGjtyE zk6i*mEGzb4UA}eTGgc9KCdxVSh~$qe593u~$S~ExM{BK?o5XeN=*G27g)8@V2Y?^N z4`Cg>Q`u*E*z?Wg2)N(b6IAV)w01W_$FW^H&zA68r=+x@k}WKY=$$i$k_-c6BwyXR zlE}Q4Ag#4Vw(=L7q}Az(o7_!=d5XfaB^8LBcmLB94m~T+px8% zGM9%mnVwSAlt4?e%j|=5f(tKH0?`X90Z=?ANR6lay5XelC+q0*ZTA`-m(zI3n2PT8 zw@FiIRR!5o8f=i)l3C?Ieb6KfQYBUnR9-c80~0^)gpJ9SrA(%PrI}gpl2nCR$yNDb z(QtCLnURMb^%?p88Q4FzAye~cWu@erVhU#jy)%#uZfelQD#R8p@5^w)!HIh?#BOEN z7ZOS$*7XljhoZ_ZgmKuhA<4U60!YVNw>NX=#tX5eldAL17YFx%BcX+L7KmT~dNI5& zPn3&yTEj7f&T@I-w>hbun+w2{o2+UJR3NHLoNQbUB?>6%Y%yTG%3zRdlVvD}lbcE^ zx+~w{PWc|MtdJQAhm_%DkJ&F9VD$HycQi4=d*N(3b}@`)_f7zMwi41C2g(OGVzBJW z4;U?57QixPcX?yqB0ZLh?)ZRdFX(-qz!^3nu(Wm;pT~!`S_Lg=-mQgnJG80{R;MyLW=?uvSVv$YeIfhvCXYiYQf&w8OyQrBgVafsh=gy8z z?!@gGY;rIL9J8Y?_>hOi3)UqzItmQOq{jlFNwG=0{Us_L7bCgJ$L%~UZjWKXw@*s+ zHXy|GA=0T1LahqMN?fX5kS8Q$XPZ910sh6Eni%O8RFhgM*cHE~PF$;&HIk|p?3KXz zfpF5$PxRJz13u1TO46xA=z2LmVL@JtY-M`D=L}5_0PU79lVt@=w1-F}?K-Bu)F}aQ zk`>D^aSM`DjnP5TfO7kJP=zc`)20e8NwB`Z!)ZdNc5_(LzKbG2AJE=uEgB%$VgRn3 z^*BsRc_7iDr8{(Vw}N5Rbx>pxnVJGrDopruR_ZDVHlmD<%CD1{kFTScD;6PxqptGh z?SZ&O#?sHL@MckC)hYC0^DJ8#Neb;L#{9W+7tKQGv?`xs>ULGG=;LDj>sppL9IL*r zWr>%)^q1W`>D0^eB07D!`pauQkk?j&e1_-cGpfDpHqk2l$MbTJ z_vK2>`JK){y~kgE!-S4lrQurxhi~=Hu9J7CGei+#XSJ7id0yUC?d9`5FP~rSq1f6k)g)C(2-fn1lDd}V7^^h+%LDkz8Q3=5+GS9Fuwe8&EilH0;i zsVMJw#+MJ6Dctep6JVYrVmQx;b&QnFnq;!3Z6s^& zHj@MLjDmE4P(H+!j9%uMFa2kV7z05@=C=RL5L0={jHanvxEg%w@MRm%-N~;N>9@Y} z$0v$O1V>i$Cg{vM8+W8~^xD#m@4I203QYllL9F}LIV#p9z@U@m2?vmKtX$VMUNFl0 zBN?P8=q%9zQ)K%cxWUCg~CyB*b`)x7Rpr-et>yo@?497IRJ3uc^S)RY=jF`Tt z4}aE6A3f2hhv*2))>(%fQC_f>3{pZzLt&G9%D>FR${^}=khd8JXg6ecTmhs7`rWMWB-Vi}=ZWq*yFS_DfP6xh>%4j-0uvA??Mo^OUm*AAi(?H)J+%E zL{xiBA}|owPZ7+rjw228QsqJk*Rvs0P&9hGx_1quk2_DdNPaZ{8$5j~b%!**_USkk zF>mRrjoroxOXj4Oq9YfT5A|IYIwhHxR|kmfFWXVt z+U7#{>)r6R4)|8Dq^~d`t4W}`mAVAB3IeZ~a~)GEWjj5iTvO^Ux0-Y;PNv}oFXS)y zHCtQ-6qoLS`gl9o%5-5hZg-2>W1K*)~a5@Gz&oRI2V6zxe#e%} zBC{keeext*fg49Iq1sd5&$ioyy1otq)guRu1-#H~h;o0(QctpI(*5*ILNC z&6CzyIh}&RFziGBu244FFyuLZuU7RY!j<k=&e-9$U4@`wo)p%xuZM+(=(D)9)H^nKkDALe0V&a02HV9!)JZDX`jQ zJUYy3w}~k_IHx%sMQ7b6hWZJw6Z6uv$C4`Md#Q-1&K<)krB=DrQuSj0*(il?VXCox zN7|usFTi!EkLg7Nq+~SS$yq{Q7b9VOyJ8Mit^l=v_95WH^{FqY^3P1qid#mbwO8WK zh68VeeyoNSQrI>&2CsXO-)iYIM;Cu6ycmE`Qtie7dN#_WGI*ywrwLQJcf9o>X}Z9R zJ-)%xxxxllg&z{3d3J)9ob?D6GW->Z1p2en$-QQA2*-~GhrC=f9m5#K=AosSrKBf3 zRxK!wFJnofsUxr&M1PJLmE8(rMLOz6dMhA-ke54&hgqlHc{JOKN&@`Fg%#mb%I)Jh zyh=w4el)S1;LfsAp3|}C@=|7Lm5Hd)30~4GcyW%@9_~)qjasdfjHm>&bk&V4}Q>T;2Ud zH%*(_*}De&dmFu*HC={0wuk73k1T0a;=GnEBmF5{k%jL>R9~~}1**Pb#s?J5hst8} zI?ZI+X}eY%q_VcwrLwx6Is5N&z`H-B3qEs8MfbaVO#l0!)u+)9%Bf>qtgq25mDy{s zgYv3_V}=dl0LU~55z1;&gAbB4*#2z60xSS=jJ*Hdalf@7V#9$^q=ID>!I$WFsir-h z)~qLklcgQ-wj0)OOXYdA-Mi=GJ*}m_&{Xx428E{ma66d%QH5Wcp>kJKMT4evLifPT z7v$Q#t|!IoP`+e&-kCWZX0=^U{o9p|^nmV}B$>A#B literal 0 HcmV?d00001 diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts new file mode 100644 index 00000000..63b0ddd9 --- /dev/null +++ b/translations/focuswriter_lt.ts @@ -0,0 +1,2248 @@ + + + + + Alert + + + Close (%1) + Uždaryti (%1) + + + + Collapse + Suskleisti + + + + Expand + Išskleisti + + + + AlertLayer + + + Dismiss Alert + Pašalinti Įspėjimą + + + + Ctrl+D + Ctrl+D + + + + DailyProgress + + + %1% of %Ln minute(s) + + %1% iš %Ln minutės + %1% iš %Ln minučių + %1% of %Ln minučių + + + + + %1% of %Ln word(s) + + %1% iš %Ln žodžio + %1% iš %Ln žodžių + %1% iš %Ln žodžių + + + + + %Ln word(s) + + %Ln žodis + %Ln žodžiai + %Ln žodžių + + + + + %Ln minute(s) + + %Ln minutė + %Ln minutės + %Ln minučių + + + + + 0% + 0% + + + + DailyProgressDialog + + + Daily Progress + Kasdienė Eiga + + + + Longest streak + Ilgiausias ruožas + + + + Current streak + Dabartinis ruožas + + + + N/A + Nėra + + + + %n day(s) + + %n diena + %n dienos + %n dienų + + + + + %1 &ndash; %2 + %1 &ndash; %2 + + + + DailyProgressLabel + + + + %1% of daily goal + %1% kasdienio tikslo + + + + DictionaryDialog + + + Set Language + Nustatyti Kalbą + + + + Document + + + (Untitled %1) + (Be pavadinimo %1) + + + + %1 (Read-Only) + %1 (Tik-Skaitymui) + + + + + + + Sorry + Atsiprašome + + + + Unable to save '%1'. + Nepavyko išsaugoti '%1'. + + + + Save File As + Išsaugoti Failą Kaip + + + + + Unable to overwrite '%1'. + Nepavyko pakeisti '%1'. + + + + Rename File + Pervadinti Failą + + + + Unable to rename '%1'. + Nepavyko pervadinti '%1'. + + + + Reload File? + Įkelti Failą iš naujo? + + + + Reload the file '%1' from disk? + Įkelti iš disko iš naujo failą '%1'? + + + + All unsaved changes will be lost. + Visi neišsaugoti pakeitimai bus prarasti. + + + + Reload + Įkelti iš naujo + + + + Untitled %1 + Be pavadinimo %1 + + + + Question + Klausimas + + + + Saving as plain text will discard all formatting. Discard formatting? + Išsaugojimas grynu tekstu pašalins visą formatavimą. Pašalinti formatavimą? + + + + DocumentWatcher + + + File Changed + Failas Pasikeitė + + + + The file '%1' was changed by another program. + Failas '%1' buvo pakeistas kita programa. + + + + Do you want to reload the file? + Ar norite įkelti failą iš naujo? + + + + Reload + įkelti iš naujo + + + + Ignore + Ignoruoti + + + + File Deleted + Failas Ištrintas + + + + The file %1 was deleted by another program. + Failas %1 buvo ištrintas kita programa. + + + + Do you want to save or close the file? + Jūs norite išsaugoti ar uždaryti failą? + + + + DocxReader + + + Unable to open archive. + Nepavyko atidaryti archyvo. + + + + FindDialog + + + Search for: + Ieškoti: + + + + Replace with: + Pakeisti tekstu: + + + + Ignore case + Ignoruoti raidžių lygį + + + + Whole words only + Tik pilni žodžiai + + + + Regular expressions + Reguliarios išraiškos + + + + Search up + Ieškoti aukštyn + + + + Search down + Ieškoti žemyn + + + + &Find + &Rasti + + + + &Replace + &Pakeisti + + + + Replace &All + Pakeisti &Visus + + + + Find + Rasti + + + + Replace + Pakeisti + + + + Replace %n instance(s)? + + Pakeisti %n egzempliorių? + Pakeisti %n egzempliorius? + Pakeisti %n egzempliorių? + + + + + Question + Klausimas + + + + + Sorry + Atsiprašome + + + + + Phrase not found. + Frazė nerasta. + + + + FormatManager + + + OpenDocument Text + ODT Formatas + + + + Office Open XML + DOCX Formatas + + + + Rich Text Format + RTF Formatas + + + + Plain Text + Grynas Tekstas + + + + All Files + Visi Failai + + + + All Supported Files + Visi Palaikomi Failai + + + + Highlighter + + + Add + Pridėti + + + + Check Spelling... + Tikrinti Rašybą... + + + + (No suggestions found) + (Jokių pasiūlymų nerasta) + + + + ImageButton + + + Open Image + Atidaryti Paveikslą + + + + Images(%1) + Paveikslai(%1) + + + + LocaleDialog + + + Select application language: + Pasirinkite programos kalbą: + + + + <System Language> + <Sistemos Kalba> + + + + Note + Pastaba + + + + Please restart this application for the change in language to take effect. + Kad įsigaliotų kalbos pakeitimai, prašome paleisti programą iš naujo. + + + + OdtReader + + + Unable to open archive. + Nepavyko atidaryti archyvo. + + + + PreferencesDialog + + + Preferences + Nuostatos + + + + General + Bendra + + + + Statistics + Statistika + + + + Toolbar + Įrankių Juosta + + + + Spell Checking + Rašybos Tikrinimas + + + + Select Dictionary + Pasirinkite Žodyną + + + + + Sorry + Atleiskite + + + + Unable to open archive. + Nepavyko atidaryti archyvo. + + + + The archive does not contain a usable dictionary. + Archyve nėra naudoti tinkamo žodyno. + + + + + + Question + Klausimas + + + + Shortcuts + Spartieji klavišai + + + + One or more shortcuts conflict. Do you wish to proceed? + Vienas ar daugiau sparčiųjų klavišų konfliktuoja. Ar norite tęsti? + + + + The dictionary "%1" already exists. Do you want to replace it? + "%1" žodynas jau yra. Ar norite jį pakeisti? + + + + Daily Goal + Kasdienis Tikslas + + + + None + Jokio + + + + Minutes: + Minučių: + + + + + Words: + Žodžių: + + + + Editing + Redagavimas + + + + Always vertically center + Visuomet vertikaliai centruoti + + + + Block insertion cursor + Blokuoti įterpimo žymeklį + + + + Smooth fonts + Glotninti šriftus + + + + Typewriter sounds + Spausdinimo mašinėlės garsai + + + + Smart quotes: + Protingosios kabutės: + + + + Double + Dvigubos + + + + Single + Viengubos + + + + Scenes + Scenos + + + + Divider: + Dalytuvas: + + + + Saving + Išsaugojimas + + + + Automatically save changes + Automatiškai išsaugoti pakeitimus + + + + Remember cursor position + Įsiminti žymeklio vietą + + + + Word count + Skaičiuoti žodžius + + + + Page count + Skaičiuoti puslapius + + + + Paragraph count + Skaičiuoti pastraipas + + + + Character count + Skaičiuoti simbolius + + + + Characters: + Simbolių + + + + Paragraphs: + Pastraipų + + + + Word Count Algorithm + Žodžių Skaičiavimo Algoritmas + + + + Reset daily progress for today to zero? + Atstatyti kasdienę eiga šiandienai iki nulio? + + + + Write byte order mark in plain text files + Įrašyti baitų tvarkos žymę gryno teksto failuose + + + + Default format: + Numatytasis formatas: + + + + Reset Today + Atstatyti Šiandieną + + + + History + Žurnalas + + + + Remember history + Įsiminti žurnalą + + + + Show streaks + Rodyti ruožus + + + + Minimum progress for streaks: + Minimali eiga ruožui: + + + + Detect word boundaries + Aptikti žodžio ribas + + + + Divide character count by six + Dalinti simbolių skaičių iš šešių + + + + Count each letter as a word + Skaičiuoti kiekvieną raidę kaip žodį + + + + Page Count Algorithm + Puslapių Skaičiavimo Algoritmas + + + + Style + Stilius + + + + Icons Only + Tik Piktogramos + + + + Text Only + Tik Tekstas + + + + Text Alongside Icons + Tekstas šalia piktogramų + + + + Text Under Icons + Tekstas po piktogramomis + + + + Text Position: + Teksto Vieta: + + + + Actions + Veiksmai + + + + Move Up + Kelti Aukštyn + + + + Move Down + Nuleisti Žemyn + + + + Add Separator + Pridėti Skirtuką + + + + Command + Komanda + + + + Shortcut + Spartusis klavišas + + + + Action + Veiksmas + + + + Check spelling as you type + Tikrinti rašybą renkant + + + + Ignore words in UPPERCASE + Ignoruoti žodžius, parašytus DIDŽIOSIOMIS RAIDĖMIS + + + + Ignore words with numbers + Ignoruoti žodžius su skaičiais + + + + Language + Kalba + + + + + Add + Pridėti + + + + Remove + Šalinti + + + + Personal Dictionary + Asmeninis Žodynas + + + + RtfReader + + + + Not a supported RTF file. + Nepalaikomas RTF failas. + + + + RtfTokenizer + + + Unexpectedly reached end of file. + Netikėtai pasiekta failo pabaiga. + + + + SceneList + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Move Scenes Up + Kelti Scenas Aukštyn + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + Toggle Scene List + Perjungti Scenų Sąrašą + + + + Shift+F4 + Shift+F4 + + + + Show scene list (%1) + Rodyti scenų sąrašą (%1) + + + + Hide scene list (%1) + Slėpti scenų sąrašą (%1) + + + + Filter + Filtruoti + + + + Move Scenes Down + Leisti Scenas Žemyn + + + + Resize scene list + Keisti scenų sąrašo dydį + + + + Session + + + + + + + + Default + Numatytoji + + + + SessionManager + + + Manage Sessions + Tvarkyti Sesijas + + + + S&essions + S&esijos + + + + New + Nauja + + + + Duplicate + Dubliuoti + + + + Rename + Pervadinti + + + + Delete + Ištrinti + + + + Switch To + Perjungti į + + + + New Session + Nauja Sesija + + + + Duplicate Session + Dubliuoti Sesiją + + + + Rename Session + Pervadinti Sesiją + + + + Question + Klausimas + + + + Delete selected session? + Ištrinti pasirinktą sesiją? + + + + Session name: + Sesijos pavadinimas: + + + + Sorry + Atleiskite + + + + The requested session name is already in use. + Užklaustas sesijos pavadinimas jau yra naudojamas. + + + + &New... + &Nauja... + + + + Ctrl+Shift+N + Ctrl+Shift+N + + + + &Manage... + &Tvarkyti... + + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + + Clear + Išvalyti + + + + Reset to Default + Atstatyti numatytąsias reikšmes + + + + + Shortcut: + Spartusis klavišas: + + + + SmartQuote + + + Replacing quotation marks... + Keičiamos kabutės... + + + + Please Wait + Prašome Palaukti + + + + SpellChecker + + + Check Spelling + Tikrinama Rašyba + + + + &Add + &Pridėti + + + + &Ignore + &Ignoruoti + + + + I&gnore All + I&gnoruoti Visus + + + + &Change + &Pakeisti + + + + C&hange All + Pa&keisti Visus + + + + Not in dictionary: + Nėra žodyne: + + + + Change to: + Pakeisti į: + + + + Checking spelling... + Tikrinama rašyba... + + + + Cancel + Atšaukti + + + + Please wait + Prašome palaukti + + + + Continue checking at beginning of file? + Tęsti tikrinimą failo pradžioje? + + + + Spell check complete. + Rašybos tikrinimas užbaigtas. + + + + SymbolsDialog + + + Symbols + Simboliai + + + + Recently used symbols + Neseniai naudoti simboliai + + + + All symbols + Visi simboliai + + + + Details + Išsamiau + + + + Name: + Pavadinimas: + + + + Insert + Įterpti + + + + SymbolsModel + + + Blocks + Blokai + + + + Scripts + Scenarijai + + + + Theme + + + Untitled %1 + Be pavadinimo %1 + + + + ThemeDialog + + + Name: + Pavadinimas: + + + + No Image + Nėra Paveikslo + + + + Tiled + Iškloti + + + + + Centered + Centruoti + + + + + Stretched + Ištempti + + + + Scaled + Ištempti proporcingai + + + + Zoomed + Pritraukti + + + + Opacity: + Dengiamumas: + + + + Position: + Vieta: + + + + Width: + Plotis: + + + + Round Text Background Corners + Apvalinti Teksto Fono Kampus + + + + + + Radius: + Plotas: + + + + Blur Text Background + Sulieti Teksto Foną + + + + Text Background Drop Shadow + Teksto Fonas Numeta Šešėlį + + + + Vertical Offset: + Vertikalus Poslinkis: + + + + Margins + Paraštės + + + + Window: + Langas: + + + + Page: + Puslapis: + + + + Indent first line + Įtraukti pirmą eilutę + + + + Above: + Prieš: + + + + Below: + Po: + + + + Remove + Pašalinti + + + + Edit Theme + Redaguoti Temą + + + + Window Background + Lango Fonas + + + + + Type: + Tipas: + + + + + + + Color: + Spalva: + + + + Image: + Paveikslas: + + + + + + + + + + + + + pixels + taškelių + + + + Left + Kairėje + + + + Text Background + Teksto Fonas + + + + Right + Dešinėje + + + + Text + Tekstas + + + + Font: + Šriftas: + + + + Misspelled: + Neteisingai parašytas: + + + + Line Spacing + Eilučių Intervalai + + + + Single + Viengubas + + + + 1.5 Lines + 1.5 Eilutės + + + + Double + Dvigubas + + + + Proportional + Proporcionalus + + + + Height: + Aukštis: + + + + Paragraph Spacing + Pastraipos Tarpai + + + + Tab Width: + Tabuliacijos Plotis + + + + New Theme + Nauja Tema + + + + ThemeManager + + + Themes + Temos + + + + Default + Numatytoji + + + + Gentle Blues + Švelni Mėlyna + + + + Old School + Senoji Mokykla + + + + Space Dreams + Kosminės Svajonės + + + + Writing Desk + Rašomasis Stalas + + + + + New + Nauja + + + + + Duplicate + Dubliuoti + + + + Custom + Tinkinta + + + + Edit + Keisti + + + + Delete + Ištrinti + + + + Import + Importuoti + + + + Export + Eksportuoti + + + + Question + Klausimas + + + + Delete theme '%1'? + Ištrinti temą '%1'? + + + + + Themes (%1) + Temos (%1) + + + + Import Theme + Importuoti Temą + + + + Export Theme + Eksportuoti Temą + + + + Timer + + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + + Question + Klausimas + + + + Delete timer? + Ištrinti laikmatį? + + + + <b>Words:</b> %L1 + <b>Žodžių:</b> %L1 + + + + <b>Pages:</b> %L1 + <b>Puslapių:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + <b>Pastraipų:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + <b>Simbolių:</b> %L1 / %L2 + + + + Set Delay + Nustatyti Delsimą + + + + Set Time + Nustatyti Laiką + + + + Delay: + Delsimas: + + + + Time: + Laikas: + + + + HH:mm:ss + HH:mm:ss + + + + Alarm + Aliarmas + + + + Type: + Tipas: + + + + Memo: + Raštelis: + + + + Edit + Redaguoti + + + + Delete + Ištrinti + + + + TimerDisplay + + + HH:mm:ss + HH:mm:ss + + + + No timers running + Nėra aktyvių laikmačių + + + + TimerManager + + + Timers + Laikmačiai + + + + New + Naujas + + + + Recent + Paskiausi + + + + Question + Klausimas + + + + Cancel editing timers? + Atšaukti laikmačių redagavimą? + + + + +HH:mm:ss + +HH:mm:ss + + + + %1 - %2 + %1 - %2 + + + + Window + + + Loading themes + Įkeliamos temos + + + + Loading sounds + Įkeliami garsai + + + + + Untitled + Be pavadinimo + + + + Open File + Atidaryti Failą + + + + About FocusWriter + Apie FocusWriter + + + + FocusWriter + FocusWriter + + + + A simple fullscreen word processor + Paprasta viso ekrano žodžių doroklė + + + + Copyright &copy; 2008-%1 Graeme Gott + Autorinės Teisės &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + Išleista pagal <a href=%1>GPL 3</a> licenciją + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Naudoja piktogramas iš <a href=%1>Oxygen</a> piktogramų temos + + + + Used under the <a href=%1>LGPL 3</a> license + Išleista pagal <a href=%1>LGPL 3</a> licenciją + + + + + Characters: %L1 / %L2 + Simbolių: %L1 / %L2 + + + + + Pages: %L1 + Puslapių: %L1 + + + + + Paragraphs: %L1 + Pastraipų: %L1 + + + + + Words: %L1 + Žodžių: %L1 + + + + + Opening %1 + Atidaroma %1 + + + + (Untitled %1) + (Be pavadinimo %1) + + + + List all documents + Pateikti visus dokumentus + + + + Switch to Next Document + Perjungti į Kitą Dokumentą + + + + Switch to Previous Document + Perjungti į Ankstesnį Dokumentą + + + + Switch to First Document + Perjungti į Pirmą Dokumentą + + + + Switch to Last Document + Perjungti į Paskutinį Dokumentą + + + + Switch to Document %1 + Perjungti į Dokumentą %1 + + + + Loading settings + Įkeliami nustatymai + + + + Emergency cache is not writable. + Avarinė talpykla nėra tinkama įrašymui. + + + + + Warning + Įspėjimas + + + + FocusWriter was not shut down cleanly. + FocusWriter nebaigė darbo sklandžiai. + + + + Restore from the emergency cache? + Atkurti iš avarinės talpyklos? + + + + Some files could not be opened. + Kai kurie failai negalėjo būti atidaryti. + + + + Some files were opened Read-Only. + Kai kurie failai buvo atidaryti Tik Skaitymui. + + + + '%1' is newer than the cached copy. + '%1' yra naujesnis negu talpinama kopija. + + + + Overwrite newer file? + Pakeisti naujesnį failą? + + + + Save Changes? + Išsaugoti Pakeitimus? + + + + Save changes to the file '%1' before closing? + Prieš uždarant, išsaugoti pakeitimus į failą '%1'? + + + + Your changes will be lost if you don't save them. + Jeigu neišsaugosite, jūsų pakeitimai bus prarasti. + + + + Unable to load typewriter sounds. + Nepavyko įkelti spausdinimo mašinėlės garsus. + + + + Please make sure that SDL_mixer is installed. + Prašome įsitikinti, kad SDL_mixer yra įdiegtas. + + + + &File + &Failas + + + + &New + &Naujas + + + + &Open... + &Atidaryti + + + + Reloa&d + Į&kelti iš naujo + + + + &Save + &Išsaugoti + + + + Save &As... + Išsaugoti Kai&p... + + + + &Rename... + Pe&rvadinti... + + + + Save A&ll + Išsaugoti &Visus + + + + Manage Sessions + Tvarkyti Sesijas + + + + New Session + Nauja Sesija + + + + &Print... + &Spausdinti... + + + + &Close + &Uždaryti + + + + &Quit + Išei&ti + + + + Ctrl+Q + Ctrl+Q + + + + &Edit + &Keisti + + + + &Undo + &Anuliuoti + + + + &Redo + A&tkurti + + + + Cu&t + &Iškirpti + + + + &Copy + K&opijuoti + + + + &Paste + Į&dėti + + + + Paste &Unformatted + Įdėti &Neformatuotą + + + + Ctrl+Shift+V + Ctrl+Shift+V + + + + Select &All + Pažymėti &Viską + + + + Select &Scene + Pažymėti &Sceną + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Fo&rmat + Fo&rmatas + + + + &Bold + &Paryškintas + + + + &Italic + &Kursyvu + + + + &Underline + Pa&brauktas + + + + Stri&kethrough + Perbr&auktas + + + + Ctrl+K + Ctrl+K + + + + Sup&erscript + &Viršutiniame indekse + + + + Ctrl+^ + Ctrl+^ + + + + &Subscript + Apa&tiniame indekse + + + + Ctrl+_ + Ctrl+_ + + + + Align &Left + Lygiuoti Kairė&je + + + + Ctrl+{ + Ctrl+{ + + + + Align &Center + Lygiuoti &Centre + + + + Ctrl+| + Ctrl+| + + + + Align &Right + Lygiuoti &Dešinėje + + + + Ctrl+} + Ctrl+} + + + + Align &Justify + Lygiuoti &iš abiejų pusių + + + + Ctrl+J + Ctrl+J + + + + &Decrease Indent + &Mažinti Įtrauką + + + + Ctrl+< + Ctrl+< + + + + I&ncrease Indent + Didi&nti Įtrauką + + + + Ctrl+> + Ctrl+> + + + + Le&ft to Right Block + Blokas iš Kairė&s į Dešinę + + + + Ri&ght to Left Block + Blokas iš D&ešinės į Kairę + + + + &Tools + Įr&ankiai + + + + &Find... + &Rasti... + + + + Find &Next + Rasti &Kitą + + + + Find Pre&vious + Rasti A&nkstesnį + + + + &Replace... + &Pakeisti... + + + + Ctrl+R + Ctrl+R + + + + Smart &Quotes + Protingosios Ka&butės + + + + Update &Document + Atnaujinti &Dokumentą + + + + Update &Selection + Atnaujinti Žymėji&mą + + + + &Spelling... + Raš&ybos Tikrinimas... + + + + F7 + F7 + + + + Set &Language... + Nustatyti Ka&lbą... + + + + &Timers... + &Laikmačiai... + + + + S&ymbols... + &Simboliai... + + + + &Daily Progress + Kas&dienė Eiga + + + + &Settings + &Nustatymai + + + + Show &Toolbar + Rodyti Įrankių &Juostą + + + + Show &Menu Icons + Rodyti Meniu &Piktogramas + + + + F&ocused Text + Teksto &Dėmesio Centras + + + + &Fullscreen + &Visas Ekranas + + + + F11 + F11 + + + + Esc + Esc + + + + M&inimize + Sumaž&inti langą + + + + Ctrl+M + Ctrl+M + + + + &Themes... + &Temos... + + + + &Preferences... + &Nuostatos... + + + + Focus Off + Dėmesio Centras Išjungtas + + + + Focus One Line + Dėmesio Centras - Viena Eilutė + + + + Focus Three Lines + Dėmesio Centras - Trys Eilutės + + + + &Paragraph + &Pastraipa + + + + Focus Paragraph + Dėmesio Centras - Pastraipa + + + + Ctrl+Shift+` + + + + + &Help + &Pagalba + + + + Application &Language... + Programos Ka&lba... + + + + Some files were unsupported and could not be opened. + Kai kurie failai buvo nepalaikomi, todėl negalėjo būti atidaryti. + + + + &Off + Išj&ungtas + + + + One &Line + Viena Ei&lutė + + + + &Three Lines + &Trys Eilutės + + + + &About + &Apie + + + + About &Qt + Apie &Qt + + + diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index bbc60904..9dff1afb 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -2194,7 +2194,12 @@ Focus op paragraaf - + + Ctrl+Shift+` + + + + &Help &Help @@ -2224,12 +2229,12 @@ &Drie lijnen - + &About &Over - + About &Qt Over &Qt diff --git a/translations/focuswriter_pl.qm b/translations/focuswriter_pl.qm index 20035a4be496a1870ddd006946d0ad896055c5dc..0c825614f8ca739c71d4bc2004adf9354a1ea8c5 100644 GIT binary patch delta 8798 zcmb7J3tUun_CGUo=lw!JL|JFE>5>r$O=i7d`QZj|zxPUlFNN@JS`&eofSPj%dnLL@|Gt zW!!5-)ADhBKT$~tavIUBQF!)8qN+EDCdSKhR*@{{)DfNb6ZJhs%4ebHwuPkJf#>F3 zAZ767BSdwP#65eGsNqrK_HaaHhh;gtnz-XOqKF7mXW)METcoar(xelRPZP!3NWJY6 zoQR?HN0N!=uBP;7+8{rtbf%|vJEb2-Aho9nND94iC<+ zql}KjL<=TS#v$BTX2h+;KO&saq?=}Ve1t1nT%=V`{Sg+ys(G*fIR zD%wZo5B`Oy`5US{luk7JC91l64N*aoET?=<)hqFR>IIr}1rASdpjzjnMEcKy@*hzr zWSMchEVJLE+5_->SUJs8?m&be(>xUvRIjEw4dl!LvaEiA>b9f<5fv>oPeuSwQav|@ zs6LIBpHLC?8Ae+)N~E%kwp=Si0DbA$bDt3nJVEcL+($Gt=%CX_kvG?Px{zfh(p{p9 z^EVK+6e|>K?;u*bT4DI=43VD{iN~^#=YJ|PPkuracS%t``W{3yPcc8r2Z#qK=HCX% z%~JUH?;={(pji3rZ-^>>uXy6I1w_je6+3?FguaoA_k%!cNrdA3U^P*2Ws%~%?Rlca zhZTRfWkA7`iq8~(B1-;H@y|*ej9sZzcRWCpxm+2sx}IqGQf2H;Ad<3PS!srY3lvJ> z@a-`8xl(k%z>*i0?dRqo!gA&M{a1-nN%`>Rr-{l(C^u(MCraO~eD;w;sFAVC=f^!v zL7KZ)`SR}nB3gWpa_1U6SoflGk0Xm{;Wx@XAw;r7RG!SuBpSU*`Ipz>K=YHzQ|AT~ z+0&G#Qw5^RUn#%-9FF)#E3X`m!u<*r_XZppRjrClTTj$fs2XO1UY(#Cv*iNpysH|2 z^({E&R!w~SbPzeIQ7w=>{7H51$H>`~8r8##&cWk$)uU6PaQbG|mejK-!ttu@l#F(3 zR&B3=;(58M?f0($a%HLm?_DF(u2H@HlLe0dUiIfce@CS5P@R2fGg02Rs!uHlFg{iF zo$pJcnlCxStKT3spK;NPg7CccDX!@82%@azTRztRwT8%M;o7$^ zK+bJk@FWb6yNkQ){ddqc`?z)EkUE=<`_-Cl=-vj8?i%D5MB*@RYjFJ~BKj3BT*igDkSIp+7m!yVJGre7C?G$ER1!JN zkciN+3lhcZI1h=MX^4az2AK;v9MZ*YOFIh0Uf{M31N7q`lx69UvaCACZQDAZsPsWD zxMTNXqQFUR=c_41e3C4Sin&)6Gl@pJxmWLK0NcfLum3g?ZMC0!bF&);j&R2sK`7+l zjx9yElzq<~&wd>UzRA6N9*9g1a#ySGAu=~`*JkA6e!5z535@9(sa7!_D9%)K>|FWb zpjy2Nf8>9yHccx8bk%ChCoiJ&)PqiXplv{>UZmjvN`qIO;tp5_N&*8 z^&{s~WNCg(y{`B$it4B=r%zO`n>rR$d|2Iadi1?o28dr%pGrUqXB<&~WFJUm+@=2LB?QuEr~1t9-5{*z)PG;Q1YMD+QH3xs zQm<;X^>OI`{!28vcps{^MH5pG4@;{w{my=hB3Y)1osD8q=V;<6lW2lVGh!3&J2}nh zyAc`XXeL}PMe*u1*{VxOjaM`66cnq^Xr})NS#8wJyM#U;`>kfdEIePdLgR|shxRVg zG_OC2)c#e|Zh0R4KlL}7jo$(Kq2EFxH#ti+&xHWFYP05uD;fy=L-WTqXtO+x=JYFY zEGJ3x!=O`W(`Ph4y#zU&*Q(OdZV6^>a&UH%L@?OzZk597z03+iYG9X0vHqE~4)XJG9G!*U&}@+Kn#*dgnCl zRt>Jlt0o*VQT`un&}_Z%Si?bgL#Yef<6(~bTHeP6RuH*qB# zjL6kZnfL`#W7d_vgztk(b&dXoYSCQ;_kJ?!K!nL{azY z)_#H-xnsU=!^%XW6*k>Q>lmW;(Yj~K(UwhG-9a73uHt3g!O9IpxBo-;Mha@l`ho6^ z)WfKO)w-jHIMl{Hx|5$G&CV)B8|?pQq5-*j#$((Kalm+kOzENL$0Fg{h)Gsw6Wf-XKod-d+TlIIhzk~6; zLBA$5i)h4peaG}em=*uhZ?3VRE2hiReTP1{MSBiVr|AE1@7;j%5&gb%8_{MD=#M_S z9=tG8|HV7M1cXugYncmxgkFDbJ#rp3%V6ki2QREN@P~13&>2Jaz-S=ylwp!%6Q<=; zhPgp7U*C9xeF7p+c*r0gE5dVChRv(t@NEwocH9nq!`}%S_O3(Z<4R>&deCq<_7UXz zkm2Z^KJda$!`mCwSV&S0Z|^O{_Xfkc_Jvr{ZZn)O01|C84OiJFblVZ5>XCZz#~+Nk zd!cwtwb8KZUCfAAj8=6L_6UIQy5F0$b`K&jgB-RKO$IUbRNU_yd&AzI`J+P z$1+(K&ND8HM!)7&8&ZY

CpkLrL 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 HFVW#|t>S3{ diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index de41a786..d612266c 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -37,43 +37,43 @@ %1% of %Ln minute(s) - - - - + + %1% z %Ln minuty + %1% z %Ln minut + %1% z %Ln minut %1% of %Ln word(s) - - - - + + %1% z %Ln słowa + %1% z %Ln słów + %1% z %Ln słów %Ln word(s) - - - - + + %Ln słowo + %Ln słowa + %Ln słów %Ln minute(s) - - - - + + %Ln minuta + %Ln minuty + %Ln minut 0% - + 0% @@ -81,36 +81,36 @@ Daily Progress - + Dzienny postęp Longest streak - + Najdłuższy triumf Current streak - + Obecny triumf N/A - + niedostępne %n day(s) - - - - + + %n dzień + %n dni + %n dni %1 &ndash; %2 - + %1 &ndash; %2 @@ -119,7 +119,7 @@ %1% of daily goal - + %1% dziennego celu @@ -127,7 +127,7 @@ Set Language - + Ustaw język @@ -135,12 +135,12 @@ (Untitled %1) - (Bez tytułu %1) + (Bez tytułu %1) %1 (Read-Only) - + %1 (Tylko-do-odczytu) @@ -179,12 +179,12 @@ Reload File? - + Wczytać ponownie plik? Reload the file '%1' from disk? - + Wczytać ponownie plik '%1' z dysku? @@ -199,7 +199,7 @@ Untitled %1 - Bez nazwy %1 + Bez nazwy %1 @@ -222,7 +222,7 @@ The file '%1' was changed by another program. - + Plik '%1' został zmieniony przez inny program. @@ -260,7 +260,7 @@ Unable to open archive. - Nie można otworzyć archiwum. + Nie można otworzyć archiwum. @@ -357,32 +357,32 @@ OpenDocument Text - + Dokument tekstowy OpenDocument Office Open XML - + Office Open XML Rich Text Format - + Tekst z formatowaniem Plain Text - + Zwykły tekst All Files - + Wszystkie pliki All Supported Files - + Wszystkie obsługiwane typy plików @@ -444,7 +444,7 @@ Unable to open archive. - Nie można otworzyć archiwum. + Nie można otworzyć archiwum. @@ -641,22 +641,22 @@ Reset daily progress for today to zero? - + Czy zresetować licznik dziennego postępu? Write byte order mark in plain text files - + Zapisz znacznik kolejności bajtów w prostych plikach tekstowych Default format: - + Domyślny format: Reset Today - + Zresetuj Dzisiaj @@ -666,17 +666,17 @@ Remember history - + Zapamiętaj historię Show streaks - + Pokaż triumfy Minimum progress for streaks: - + Minimalny postęp dla triumfu: @@ -691,12 +691,12 @@ Count each letter as a word - + Zliczaj każdą literę jako slowo Page Count Algorithm - + Algorytm zliczania słów @@ -806,7 +806,7 @@ Not a supported RTF file. - + To nie jest obsługiwany plik RTF. @@ -814,7 +814,7 @@ Unexpectedly reached end of file. - + Niespodziewanie osiągnięto koniec pliku. @@ -903,7 +903,7 @@ Duplicate - + Stwórz kopię @@ -928,7 +928,7 @@ Duplicate Session - + Stwórz kopię sesji @@ -1073,7 +1073,7 @@ Continue checking at beginning of file? - + Kontynuuj sprawdzanie od początku pliku? @@ -1177,74 +1177,74 @@ Opacity: - + Nieprzezroczystość: Position: - + Położenie: Width: - + Szerokość: Round Text Background Corners - + Okrągłe rogi tła tekstu Radius: - + Promień: Blur Text Background - + Rozmycie tła tekstu Text Background Drop Shadow - + Cień tła tekstu Vertical Offset: - + Przesunięcie pionowe: Margins - + Marginesy zewnętrzne Window: - + Okno: Page: - + Strona: Indent first line - + Wcięcie pierwszego wiersza Above: - + Powyżej: Below: - + Poniżej: @@ -1254,12 +1254,12 @@ Edit Theme - + Edytuj motyw Window Background - + Tło okna @@ -1302,7 +1302,7 @@ Text Background - + Tło tekstu @@ -1352,7 +1352,7 @@ Height: - + Wysokość: @@ -1362,12 +1362,12 @@ Tab Width: - + Szerokość zakładki: New Theme - + Nowy motyw @@ -1380,54 +1380,54 @@ Default - Domyślna + Domyślna Gentle Blues - + Delikatny Blues Old School - + Stara szkoła Space Dreams - + Marzenia kosmiczne Writing Desk - + Biurko New - + Nowy Duplicate - + Stwórz kopię Custom - + Własny Edit - Edytuj + Edytuj Delete - Usuń + Usuń @@ -1447,13 +1447,13 @@ Delete theme '%1'? - + Usunąć motyw '%1'? Themes (%1) - + Motywy (%1) @@ -1701,7 +1701,7 @@ List all documents - + Przeglądaj wszystkie dokumenty @@ -1777,17 +1777,17 @@ Save Changes? - + Zapisać zmiany? Save changes to the file '%1' before closing? - + Zapisać zmiany w pliku '%1' przed zamknięciem? Your changes will be lost if you don't save them. - + Twoje zmiany zostaną utracone, jeśli ich nie zapiszesz. @@ -2102,7 +2102,7 @@ Set &Language... - + Ustaw &język... @@ -2117,7 +2117,7 @@ &Daily Progress - + &Dzienny postęp @@ -2200,7 +2200,12 @@ Podświetl akapit - + + Ctrl+Shift+` + + + + &Help P&omoc @@ -2230,12 +2235,12 @@ &Trzy wiersze - + &About &Informacje o programie - + About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index a3f2a1c3..3a5b4eb4 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -2194,7 +2194,12 @@ Focar um parágrafo - + + Ctrl+Shift+` + + + + &Help A&juda @@ -2224,12 +2229,12 @@ &Três linhas - + &About &Acerca - + About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm index 6a7bdae4fb37f13455cb76541d77969f60aa1b61..21e6bfaec088dc1527d523b02334b35b27bb2839 100644 GIT binary patch delta 782 zcmXBRSxA&o6bJDC{rsHoyW`Bb1WlF}qsAyX4ee6FAZQ}E(LxlNv}oImrrAoP4>Dy9 zGbYEZOl_g8GzpppduXGSB3qy`s)vG1!e|pTqB1(r%l&aVT<-aw)7+*swJAqZZ1F(O zIbh=9|4u#%E!BxMl)#MwNlP8-R+Z%A3I?psYxFYhMSf2r46A_{W`{%6Q)duGdGX_xbhg z;}LPGLBLZ&#Sw)fOx=7I(0Ihk+F|v0?hU~8Qtg<(8d&l}?FxPdHqBzcvTNB<0B6}> zeD|}z+3V~$JEV3s2w-y@tFSKC!hT|T7F(?B3^t2RXDe9;+pbVx)juKXlNm5a$!;`Gv)As_RRlm24cUf(tY~3!3$it_bj_NCIt@4sK2xNVeH|y(w z@<;O4U<rBfyt7nQa0ErYV9OBl!}?cyVK%N!A;F*!}vM4f-nX{!1u z(O4qmOlnIuP#Hr$qf_Kj*yxnsOx0zVd8c3Li*ZwYg*lOWIoUIF##Y{oX|p+N)d>?OR7INA;+HYN{1}V>^hQqf!xA{eN!FBD0zD}}{wquKkPq0ggYr$& c#8UE@T18#RXznbf{>nJoUzHI0P<3_6KmFVF%K!iX delta 802 zcmXBRX-HI26bJDCeLm;CJI+kmHdv{RrK6M%WE&-j;3!e1SRt(@f5@A^>*@9(spbzi(q znDYOQJp{~60oMHl<`YW?o#~?Ep#O##OBtfoHV-|C!vNij-WAnA@m3)!b^|*igt6}} zuyqebD~`C)!h7~8u;{QjaeO7<-7l{EX#uuB7OzX614U`#eN-?|8X&KdF8xZri>pO1 zsYA(3sZyRLCjf~9%JW;RfelZT&h99{m94z7=K+f=mHyBC$1P3D(4CQ7FAq}h@$0Fz zK_g--0e2p)2+9<#)XZlV4F%T>b~jRNs?jK-~yiNISLr6LKC!!JtaWq zO>Oc{p4!GvTC63@Wm;W;fb~9V(5#^jt=sky82?w-&t2j@B+wnrAFX z-M96+Vbg$JZTguk&f$*M+w~oQsMp&U@-9mzl2f;fY;yDIp+kC(?U+2Tbpxqi<+c6$ z0MA2ty}ORvlk&llN?_YvGE0YyFwSw+^KCXcWwOx8C+(t#nq|5;K;LDg+!J!Ti_;W$ zP`EKyjxworPGHjr@);ds0R@Z>*>5UwHStdS=(DjPY?C>hZga9{=2`1_FQ!6s>XLq* zw};#zR?$qp5QkVpfshSxVU`Lx9GEfOQqj1E6aBLI%Q(sMT#LVT5|HuAQuE#iY~Df{ rrbw}f+@^ZrYcZNH{ Align &Right - Alinhar à &esquerda + Alinhar à &direita @@ -2194,7 +2194,12 @@ Focar parágrafo - + + Ctrl+Shift+` + + + + &Help A&juda @@ -2224,12 +2229,12 @@ &Três linhas - + &About &Sobre - + About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 01c6096d..b0a10ef4 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -2200,7 +2200,12 @@ Focalizare paragraf - + + Ctrl+Shift+` + + + + &Help &Ajutor @@ -2230,12 +2235,12 @@ &Trei linii - + &About &Despre - + About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.qm b/translations/focuswriter_ru.qm index 6eb5353eabcd82641f3367314b422f4d70aac096..a8898653faf6d39735398e777234288f0e590e8c 100644 GIT binary patch delta 8960 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 HXbAa##Z&TD delta 3025 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 bxo^!Od$}*~DKB-~Z1TSf9tcuGsl)#P8#r)U diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 7a193ae4..538f3f78 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -37,43 +37,43 @@ %1% of %Ln minute(s) - - - - + + %1% из %Ln минут + %1% of %Ln minutes + %1% из %Ln минут %1% of %Ln word(s) - - - - + + %1% из %Ln слов + %1% of %Ln word + %1% из %Ln слов %Ln word(s) - - - - + + %Ln слов + %Ln слов + %Ln слов %Ln minute(s) - - - - + + %Ln минут + %Ln минут + %Ln минут 0% - + 0% @@ -81,36 +81,36 @@ Daily Progress - + Ежедневный прогресс Longest streak - + Наиболее долгий период рабочих дней Current streak - + Текущий период рабочих дней N/A - + Недоступно %n day(s) - - - - + + %n дней + %n days + %n дней %1 &ndash; %2 - + %1 &ndash; %2 @@ -119,7 +119,7 @@ %1% of daily goal - + %1% от ежедневной цели @@ -127,7 +127,7 @@ Set Language - + Установить язык @@ -135,12 +135,12 @@ (Untitled %1) - (Безымянный %1) + (Без названия %1) %1 (Read-Only) - + %1 (Только чтение) @@ -179,12 +179,12 @@ Reload File? - + Перезагрузить файл? Reload the file '%1' from disk? - + Перезагрузить файл '%1' с диска? @@ -199,7 +199,7 @@ Untitled %1 - Безымянная %1 + Без названия %1 @@ -222,7 +222,7 @@ The file '%1' was changed by another program. - + Файл '%1' был изменен в другой программе. @@ -260,7 +260,7 @@ Unable to open archive. - Невозможно открыть архив. + Невозможно открыть архив. @@ -357,32 +357,32 @@ OpenDocument Text - + Открытый Текстовый Документ Office Open XML - + Открытый офисный файл XML Rich Text Format - + Расширенный Текстовый формат Plain Text - + Обычный текст All Files - + Все файлы All Supported Files - + Все поддерживаемые файлы @@ -444,7 +444,7 @@ Unable to open archive. - Невозможно открыть архив. + Невозможно открыть архив. @@ -641,42 +641,42 @@ Reset daily progress for today to zero? - + Сбросить сегодняшний ежедневный прогресс на ноль? Write byte order mark in plain text files - + Записывать метку байта в простых текстовых файлах Default format: - + Формат по умолчанию: Reset Today - + Сбросить сегодняшнее History - + История Remember history - + Запоминать историю Show streaks - + Показывать рабочие дни Minimum progress for streaks: - + Минимальный прогресс для зачета дня в рабочий период: @@ -691,12 +691,12 @@ Count each letter as a word - + Считать каждую букву, как слово Page Count Algorithm - + Алгоритм формирования страницы @@ -806,7 +806,7 @@ Not a supported RTF file. - + Неподдерживаемый файл RTF. @@ -814,7 +814,7 @@ Unexpectedly reached end of file. - + Неожиданный конец файла. @@ -903,7 +903,7 @@ Duplicate - + Дублировать @@ -928,7 +928,7 @@ Duplicate Session - + Дублировать сессию @@ -1073,7 +1073,7 @@ Continue checking at beginning of file? - + Продолжить проверку с начала файла? @@ -1177,74 +1177,74 @@ Opacity: - + Непрозрачность: Position: - + Позиция: Width: - + Ширина: Round Text Background Corners - + Закругление углов фона текста Radius: - + Радиус: Blur Text Background - + Размытие фона текста Text Background Drop Shadow - + Падающая тень от текста Vertical Offset: - + Вертикальное смещение: Margins - + Границы Window: - + Окно: Page: - + Страница: Indent first line - + Отступ первой строки: Above: - + Перед: Below: - + После: @@ -1254,12 +1254,12 @@ Edit Theme - + Редактировать тему Window Background - + Фон окна @@ -1302,7 +1302,7 @@ Text Background - + Фон текста @@ -1352,7 +1352,7 @@ Height: - + Высота: @@ -1362,12 +1362,12 @@ Tab Width: - + Ширина вкладки: New Theme - + Новая тема @@ -1380,54 +1380,54 @@ Default - По умолчанию + По умолчанию Gentle Blues - + Нежный блюз Old School - + Старая школа Space Dreams - + Космические мечты Writing Desk - + Письменный стол New - Новый + Новая Duplicate - + Дублировать Custom - + Пользовательская Edit - Редактировать + Редактировать Delete - Удалить + Удалить @@ -1447,13 +1447,13 @@ Delete theme '%1'? - + Удалить тему '%1'? Themes (%1) - + Темы (%1) @@ -1701,7 +1701,7 @@ List all documents - + Список всех документов @@ -1777,17 +1777,17 @@ Save Changes? - + Сохранить изменения? Save changes to the file '%1' before closing? - + Сохранить изменения в файле '%1' перед закрытием? Your changes will be lost if you don't save them. - + Ваши изменения будут утеряны, если вы не сохраните их. @@ -2102,7 +2102,7 @@ Set &Language... - + Установить &язык... @@ -2117,7 +2117,7 @@ &Daily Progress - + &Ежедневный прогресс @@ -2200,7 +2200,12 @@ На абзаце - + + Ctrl+Shift+` + + + + &Help Спр&авка @@ -2230,12 +2235,12 @@ &Три строки - + &About &О программе - + About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 392703c3..49187f9b 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -2200,7 +2200,12 @@ Zamerať odstavec - + + Ctrl+Shift+` + + + + &Help &Nápoveda @@ -2230,12 +2235,12 @@ &Tri riadky - + &About &O programe - + About &Qt O &Qt diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 62aa5c39..99ffc146 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -2200,7 +2200,12 @@ Фокусирај параграф - + + Ctrl+Shift+` + + + + &Help &Помоћ @@ -2230,12 +2235,12 @@ &Три линије - + &About &О програму - + About &Qt О &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 405f099f..2b0fcb19 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -2194,7 +2194,12 @@ Fokusera stycke - + + Ctrl+Shift+` + + + + &Help &Hjälp @@ -2224,12 +2229,12 @@ &Tre rader - + &About &Om - + About &Qt Om &Qt diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm index 258b9b7b915102721b9c934ddfd435c1fb97f1cb..f5452261f04b8c5ba2c000935ff90934131deba2 100644 GIT binary patch delta 3844 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 delta 2664 zcmX9=d019;8a?0LzWoCPms~(eWK&cS1QJAqSOf%7R8$aI6ca}i+^9Z>@=-x8yGY6q zY9)nBlHk6e2rk$pDdva+J&HaPj#H0{RxUWlzQ4}Bzx!L>_q^vlzuVHIS^r359d|UV zU-NGjTmLy^VEx=(r`p2-<556#12kIz=`$eJ9*Fu1aH_CjzbGJP0xsDY!8>ABwFfr7I zQSp#kA^^)8$lm-u-V1U{BrrIHxEttwAM(C#Alw07WkZ2U@$jlzMXZ9?>wV(hfmaI? ziTjNBdY=LCdN7LT`M|s605I7FR_~3RnD9Hiw>5F#D!d!{A*mB#eLDbM6{0;h0dK#L zSnnbrpaPSUdh_5cOgfql4Be0T?A1VMJrX~;4y2t$a-$bn+KZ_l76aoVY&iZlX1rve z6O2gB-OhcN+tA^f)%M_?ZbSc1ka~s@d-!6OP{+*1W0uH`qVq6YA%-uqVRRX0SMwm3 zLZq8Rfy6P$l*W+m6)5~s1ni1Xtq3gPF;u^r4EUeNm2d6?1MlLd+XlexAUc|#19LKb z(B)?bXv6SePAQP#qS2Im0OX`=d|K}S{Z?uceb)kE_L@14%Si1{nmHjvLDl5fQz!HP z(Cpfg1}yBYse4h&b-gt=tz=@Br{|Gm zlPhel?*ZOiENrdZ&B|8_mBF#Vu!F+aWsN+pzpy7@D{+-@==c{v@-yLZG3O;j3ny~? zSf~Qwgvu~xEf-qH`v4_+Uvj~3}UtWZ7RV>tie!fey3P7 zo$KSe#hOjj|A4vTnH#SFxk|kJ!ot9Yi&w8cVNaYFZ*QsOg10=xyB22fMy>c{*>7y1 zi<05kBW`?4a+=G)=1)`GMIYMYACxM{eQdK}I z6_+9H-OT<=2_ybW%p+1^C?h`OdpVH>PPssQN$i&Peyjne4{{wI<3pD~Q+ zO`>Kb^ISRoWi8$4maOTf+oX5N;`_zS{0~|BYr)U5T)~CooMcnXL}Gz#xpRQ#P#{MK1(27my}?!n>^MkF>Nt4XtNUgoEY^&nbqA0jP_6#Ii9A+ z-BI#3x03%)mGUQ~XIKc4^o?~_zEMewpi|B-a$>=g7b@QuQ^CQLl#U||AfQG0eMlS4 zwp@8}kmzZz6}_nB{xkGjDh5o{pchJ4}`m_5s-G-hefWtan>H8GaJ9fHqyD>m+rmiZH z%ARenJC|Gv%)6?);KssPqI4JBn`nuxy5>fSg(%at-etUgxi(CDtb6>%RmN4XmuG*# zbL#a@;g5k{U+Vju4aERtw(AGKWMaV`de_%DHbd{0c9RoiHC{JtUZPcBIh}g*>#|{b zh`w6e$^4`Br`CVS^sM^Ro#nLPSbg($>M+|y|LYIyXz5S&uYAaZgI@n?GkJEHW*FSW z`OZHWf?b@L&k4g@ITduQFV%LPi*=@$&g9T%)1r z8f7!vXeYl(mVYt&#nN|#NMqbCA3!bC+XpXtZd?)ccR=4_!;m$`l}-!E%obyzYXL+3 z*|_@-HJVXutf|q`3#J&)4dhQmtENr?-DvzYlzB4)XW~foCY#4pYFjcJ>+bAhnTHA2J6n?4~hAnImRCq=gm|X|cW` z#2(^D=7>~<O0=IwEv}fM@z?l`jfIb zmV4(Lcs*8GUM`e?QN?zK!<6Wti*|AAg7|*MZu(6gIew~Lw#%RVy=bz_JusD~ps`!F zt(qn><1Z93Ww#n>@)Pm`YFC@`{AxFar5IJWxFB_VoUiH{zeK$fzfvtq2vprCC)Mts r{FO$nNJ>?8$-8SGCXdyqhex`oYg2lux2E~mewK34rS|Odk9GeCGCu%P diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 50f73881..cadc7ba0 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -891,7 +891,7 @@ Duplicate - + Kopya Oluştur @@ -916,7 +916,7 @@ Duplicate Session - + Oturum Kopyası Oluştur @@ -1165,17 +1165,17 @@ Opacity: - + Saydamlık: Position: - + Konum: Width: - + Genişlik: @@ -1202,27 +1202,27 @@ Vertical Offset: - + Dikey Dengeleme: Margins - + Kenarlıklar Window: - + Pencere: Page: - + Sayfa: Indent first line - + İlk satır girintisi @@ -1242,12 +1242,12 @@ Edit Theme - + Tema düzenle Window Background - + Pencere Arkaplanı @@ -1290,7 +1290,7 @@ Text Background - + Yazı Arkaplanı @@ -1340,7 +1340,7 @@ Height: - + Yükseklik: @@ -1355,7 +1355,7 @@ New Theme - + Yeni Tema @@ -1368,7 +1368,7 @@ Default - Varsayılan + Varsayılan @@ -1378,29 +1378,29 @@ Old School - + Eski Okul Space Dreams - + Uzay Düşleri Writing Desk - + Yazı Masası New - Yeni + Yeni Duplicate - + Kopya Oluştur @@ -1410,12 +1410,12 @@ Edit - Düzenle + Düzenle Delete - Sil + Sil @@ -1441,7 +1441,7 @@ Themes (%1) - + Temalar (%1) @@ -1765,7 +1765,7 @@ Save Changes? - + Değişiklikler Kaydedilsin Mi? @@ -2188,7 +2188,12 @@ Paragrafa Odaklan - + + Ctrl+Shift+` + + + + &Help &Yardım @@ -2218,12 +2223,12 @@ &Üç Satır - + &About &Hakkında - + About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.qm b/translations/focuswriter_uk.qm index 5f3c8e98d64f0775ed15d4c7b580ace234c7dd99..09444662cc401fe52e0b80273e5e0eccd5d4b10b 100644 GIT binary patch literal 35899 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 K@z$Eqy#EKUGIOH< delta 2456 zcmXApdsvP67RT57?)TmIUF=GsyWMS9yQUJcXXlbz$fZ!BjPS^~jLNOS7Gsbk^DA;6 zW-?L_o&ClUVIFdep`kg3IeL)Gbli?P=ozH*^}K(5-s^9D*IM7TPL}gc+c>-R_zaK6 zm%GY-@$)=0ZQrT8gNRg3M8Y;AYa-FGA924xruG2Qh=F(>NHmIpJWmEpG7UB;Eu}0WhN!QdDm%vz`F5w<0UL;1?^8?Td!o-*a+c-?MA|>Nu~BOw zB$UfLbDU_~Hw8JrzVDefd585{cY$_@A~m5JleL55<uHf&`Nl8K2_XLmCv7LHE%UQq)W;MlaVZYBnt=G8|T1`QU^=nTq>c_MjD06%U;t zMDMM5llzh=qEyh<{Y7N16y`1}K`9Rk_GbL=*;OdGeGQrJ6-o^!AtYKTA5l-_w@Nq= zn@(hM2vx<;AowWwg6tIc02k;j%>v&M^>YSM@_tsZ1I!kxHgn)skO$9!5Z3R%pflX< z1%`r&U>LXr3%@e2 z5a>Tf9Cs#-$hksXeHfMT(TW>)rJ%L5#iF6-;jNjV9T$PQV$ty4nB$9LdDAew*e7mZ zU5n@U#P5?J%q>=CkhggF+&PpyU#ziW{v&sbHUG?m`F;^=ujb(SbMe;by~uQ`c-L_R zJLH1+c;g(Rp4CcKRu3Z0US+o|oEzLr8L@%;#l-=E64 zE~jC(H08YFW*jh0d10m{X_m?SQ~uD!a!2(}nL%O+dzN9C$*LFQLR- zh-OXxH3T+l3N6v_f~TfDu>pIcO|xebdh4Ae)7Gvz-MRz4-L83YZ5%*19* zXE7?IG-`d%uYvG9ZU0%j;5DOm=Jg@)#8YkULVV|8&(YQw<)Oq6WCl;xUMUqZb~km} z)i>d}k2+_u7c$SOC`VaoM-+k3Pw)~rvzYJvxr>StC}ph7+M z*-3sl$Dz-gRgL){(5zp?pT+`7(^vijCh_?~f8u2>NJA#_zg>X6 z@VnvXsu7rf)q6w3B`Zob+t8klOx$}q*$09H$2x8Neg;-(gwv)CrC7y>oLZjrfUE!I z^ytD_Ohdi%OrO8;{W9m=@=6TRHko~fI-d;BhX+cWFAsLX_?~iZ_rHcXdz{+~i_rpI zHdHnvHR>X;QHCPP{czBmlb-u5;~b`M zIjK3|YmVt`>8v8iO?np8TfuIHj%7t*PucnKda2&Bl#|*bojBGJ;vw0h{dso0x0St) z9l+-FnIP5otyW6bgvXrZ7`mMk^@1M-O5=ym zUD!R3D7JH40&5yS7a;hD|DMn_?^27apwliZrQxEfGpJy6bNoId$ zoE9NnnkK5G?z5{n)}Gy8%9?Y9XW8?fpiq6;hxvM`Y(XghU7lV_&WYe0c}9-yTx4Qh z7vE7*pkNYg?A78B_Hb#nl$f8&v44MUXSbFYu;^v3?2&y0d$!7jtyr~y-6*iJy{p^V Ty0zc3tLvNCppDTiq{#SxCGFf? diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 0d5e8e0f..27d95761 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -6,7 +6,7 @@ Close (%1) - + Закрити (%1) @@ -24,7 +24,7 @@ Dismiss Alert - + Закрити попередження @@ -37,43 +37,43 @@ %1% of %Ln minute(s) - - - - + + %1% з %Ln хвилин + %1% з %Ln хвилин + %1% з %Ln хвилин %1% of %Ln word(s) - - - - + + %1% з %Ln слів + %1% з %Ln слів + %1% з %Ln слів %Ln word(s) - - - - + + %Ln слово + %Ln слів + %Ln слова %Ln minute(s) - - - - + + %Ln хвилина + %Ln хвилини + %Ln хвилин 0% - + 0% @@ -81,36 +81,36 @@ Daily Progress - + Щоденний прогрес Longest streak - + Найдовший період робочих днів Current streak - + Поточний період робочих днів N/A - + Недоступно %n day(s) - - - - + + %n день + %n дні + %n днів %1 &ndash; %2 - + %1 &ndash; %2 @@ -119,7 +119,7 @@ %1% of daily goal - + %1% від щоденної мети @@ -127,7 +127,7 @@ Set Language - + Встановити мову @@ -135,12 +135,12 @@ (Untitled %1) - (Без назви %1) + (Без назви %1) %1 (Read-Only) - + %1 (Лише читання) @@ -179,37 +179,37 @@ Reload File? - + Відкрити файл заново? Reload the file '%1' from disk? - + Відкрити файл '%1' заново з диску? All unsaved changes will be lost. - + Всі незбережені зміни у файлі будуть втрачені. Reload - + Відкрити заново Untitled %1 - Без назви %1 + Без назви %1 Question - + Питання Saving as plain text will discard all formatting. Discard formatting? - + Збереження файлу як простого тексту призведе до втрати форматування. Пропустити форматування? @@ -217,42 +217,42 @@ File Changed - + Файл змінено The file '%1' was changed by another program. - + Файл '%1' був змінений в іншій програмі. Do you want to reload the file? - + Хочете відкрити цей файл заново? Reload - + Відкрити заново Ignore - + Пропустити File Deleted - + Файл видалений The file %1 was deleted by another program. - + Файл %1 видалений іншою програмою. Do you want to save or close the file? - + Ви хочете зберегти чи закрити файл? @@ -260,7 +260,7 @@ Unable to open archive. - Не вдалось відкрити архів. + Неможливо відкрити архів. @@ -288,7 +288,7 @@ Regular expressions - + Регулярні вирази @@ -303,17 +303,17 @@ &Find - + &Знайти &Replace - + &Замінити Replace &All - + Замінити &всі @@ -357,32 +357,32 @@ OpenDocument Text - + OpenDocument Text - відкритий текстовий документ Office Open XML - + Office Open XML - відкритий офісний файл XML Rich Text Format - + Rich Text - розширений текстовий формат Plain Text - + Plain Text - Простий текст All Files - + Всі файли All Supported Files - + Всі підтримувані файли @@ -426,7 +426,7 @@ <System Language> - + <Мова системи> @@ -444,7 +444,7 @@ Unable to open archive. - Не вдалось відкрити архів. + Неможливо відкрити архів @@ -505,12 +505,12 @@ Shortcuts - + Комбінації клавіш One or more shortcuts conflict. Do you wish to proceed? - + Деякі комбінації клавіш збігаються. Продовжити? @@ -581,12 +581,12 @@ Scenes - + Сцени Divider: - + Роздільна лінія: @@ -641,42 +641,42 @@ Reset daily progress for today to zero? - + Скинути сьогоднішній щоденний прогрес до нуля? Write byte order mark in plain text files - + Записувати мітку байта в простих текстових файлах Default format: - + Формат за замовчуванням: Reset Today - + Скинути сьогоднішнє History - + Історія Remember history - + Пам’ятати історію Show streaks - + Показувати робочі дні Minimum progress for streaks: - + Мінімальний прогрес для зарахування дня в робочий період: @@ -691,12 +691,12 @@ Count each letter as a word - + Рахувати кожну букву як слово Page Count Algorithm - + Алгоритм обрахування сторінок @@ -751,17 +751,17 @@ Command - + Команда Shortcut - + Комбінація клавіш Action - + Дія @@ -806,7 +806,7 @@ Not a supported RTF file. - + Не підтримуваний RTF файл. @@ -814,7 +814,7 @@ Unexpectedly reached end of file. - + Неочікуваний кінець файлу. @@ -822,52 +822,52 @@ Ctrl+Shift+Down - + Ctrl+Shift+Down Move Scenes Up - + Пересунути сцени вище Ctrl+Shift+Up - + Ctrl+Shift+Up Toggle Scene List - + Відкрити/закрити список сцен Shift+F4 - + Shift+F4 Show scene list (%1) - + Показати список сцен (%1) Hide scene list (%1) - + Заховати список сцен (%1) Filter - + Фільтрувати Move Scenes Down - + Пересунути сцени нижче Resize scene list - + Змінити розмір списку сцен @@ -893,7 +893,7 @@ S&essions - С&анси + С&еанси @@ -903,7 +903,7 @@ Duplicate - + Дублювати @@ -928,7 +928,7 @@ Duplicate Session - + Дублювати сесію @@ -986,18 +986,18 @@ Clear - + Очистити Reset to Default - + Скинути до значень за замовчуванням Shortcut: - + Комбінація клавіш: @@ -1023,27 +1023,27 @@ &Add - + &Додати &Ignore - + &Пропустити I&gnore All - + Пр&опустити все &Change - + &Замінити C&hange All - + З&амінити все @@ -1073,7 +1073,7 @@ Continue checking at beginning of file? - + Продовжити пошук з початку файлу? @@ -1086,32 +1086,32 @@ Symbols - + Символи Recently used symbols - + Недавно використані символи All symbols - + Всі символи Details - + Деталі Name: - Назва: + Назва: Insert - + Вставити @@ -1119,12 +1119,12 @@ Blocks - + Блоки Scripts - + Скрипти @@ -1177,74 +1177,74 @@ Opacity: - + Непрозорість: Position: - + Позиція: Width: - + Ширина: Round Text Background Corners - + Заокруглення кутів фону тексту Radius: - + Радіус: Blur Text Background - + Розмити фон тексту Text Background Drop Shadow - + Падаюча тінь від тексту Vertical Offset: - + Ветрикальне зміщення Margins - + Межі Window: - + Вікно: Page: - + Сторінка: Indent first line - + Відступ першого рядка Above: - + Перед: Below: - + Після @@ -1254,12 +1254,12 @@ Edit Theme - + Редагувати тему Window Background - + Фон вікна @@ -1302,7 +1302,7 @@ Text Background - + Фон тексту @@ -1327,47 +1327,47 @@ Line Spacing - + Відстань між рядками Single - Одинарні + Одинарний 1.5 Lines - + Півтора Double - Подвійні + Подвійний Proportional - + Пропорційний Height: - + Висота: Paragraph Spacing - + Відступи параграфа Tab Width: - + Ширина вкладки New Theme - + Нова тема @@ -1380,54 +1380,54 @@ Default - Типово + За замовчуванням Gentle Blues - + Ніжний блюз Old School - + Стара школа Space Dreams - + Космічні мрії Writing Desk - + Письмовий стіл New - Новий + Нова Duplicate - + Дублювати Custom - + Користувацька Edit - Змінити + Редагувати Delete - Вилучити + Видалити @@ -1447,13 +1447,13 @@ Delete theme '%1'? - + Видалити тему '%1'? Themes (%1) - + Теми (%1) @@ -1636,32 +1636,32 @@ FocusWriter - + FocusWriter A simple fullscreen word processor - + Простий повноекранний текстовий редактор Copyright &copy; 2008-%1 Graeme Gott - + Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - + Випущено під ліцензією <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - + Використовуються іконки з теми <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - + Використано відповідно до ліцензії <a href=%1>GPL 3</a> @@ -1701,103 +1701,103 @@ List all documents - + Список усіх документів Switch to Next Document - + Перейти до наступного документу Switch to Previous Document - + Перейти до попереднього документу Switch to First Document - + Перейти до першого документу Switch to Last Document - + Перейти до останнього документу Switch to Document %1 - + Перейти до документу %1 Loading settings - + Завантажуються налаштування Emergency cache is not writable. - + Резервна пам’ять недоступна для запису. Warning - + Попередження FocusWriter was not shut down cleanly. - + FocusWriter не був закритий правильно. Restore from the emergency cache? - + Відновити відкриті файли із резервної пам’яті? Some files could not be opened. - + Не вдалось відкрити деякі файли. Some files were opened Read-Only. - + Деякі файли були відкриті лише для читання. '%1' is newer than the cached copy. - + '%1' новіше резервної копії Overwrite newer file? - + Замінити нову версію резервною копією? Save Changes? - + Зберегти зміни? Save changes to the file '%1' before closing? - + Зберегти зміни у файлі '%1' перед закриттям? Your changes will be lost if you don't save them. - + Ваші зміни будуть втрачені, якщо ви їх не збережете. Unable to load typewriter sounds. - + Не вдається завантажити звук друкарської машинки. Please make sure that SDL_mixer is installed. - + Перевірте, чи встановлений пакет SDL_mixer. @@ -1817,7 +1817,7 @@ Reloa&d - + Відкр&ити заново @@ -1902,12 +1902,12 @@ Paste &Unformatted - + Вставити без &форматування Ctrl+Shift+V - + Ctrl+Shift+V @@ -1917,17 +1917,17 @@ Select &Scene - + Вибрати &Сцену Ctrl+Shift+A - + Ctrl+Shift+A Fo&rmat - &Формат + Фо&рмат @@ -2102,7 +2102,7 @@ Set &Language... - + Встановити &мову @@ -2112,12 +2112,12 @@ S&ymbols... - + С&имволи... &Daily Progress - + &Щоденний прогрес @@ -2137,7 +2137,7 @@ F&ocused Text - + Під&свічування тексту @@ -2177,30 +2177,35 @@ Focus Off - + Вимкнена Focus One Line - + На одному рядку Focus Three Lines - + На трьох рядках &Paragraph - + &Абзац Focus Paragraph + На абзаці + + + + Ctrl+Shift+` - + &Help &Довідка @@ -2212,30 +2217,30 @@ Some files were unsupported and could not be opened. - + Формат деяких файлів не підтримується програмою. Ці файли не були відкриті. &Off - + &Виключено One &Line - + Адин &рядок &Three Lines - + &Три рядки - + &About &Про програму - + About &Qt Про &Qt diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 4f8b0327..10a84fce 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -2188,7 +2188,12 @@ Tập trung vào đoạn văn - + + Ctrl+Shift+` + + + + &Help Dịch bởi P&han Anh @@ -2218,12 +2223,12 @@ B&a Dòng - + &About Thô&ng tin - + About &Qt Thô&ng tin về Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index f229f57e..dbb449e4 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -2188,7 +2188,12 @@ 聚焦段落 - + + Ctrl+Shift+` + + + + &Help 帮助(&H) @@ -2218,12 +2223,12 @@ 三行(&T) - + &About 关于(&A) - + About &Qt 关于 &Qt diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index 07dd3c14..ee2afc95 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -2188,7 +2188,12 @@ - + + Ctrl+Shift+` + + + + &Help @@ -2218,12 +2223,12 @@ - + &About - + About &Qt From 00167fc4a020ffb969622d77734c59262ef50d64 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jun 2015 13:45:05 -0400 Subject: [PATCH 246/630] Update copyright. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index 596536c2..e36aea4a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -866,7 +866,7 @@ void Window::aboutClicked() "

%6
%7

") .arg(tr("FocusWriter"), QApplication::applicationVersion(), tr("A simple fullscreen word processor"), - tr("Copyright © 2008-%1 Graeme Gott").arg("2014"), + tr("Copyright © 2008-%1 Graeme Gott").arg("2015"), tr("Released under the
GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\""), tr("Uses icons from the Oxygen icon theme").arg("\"http://www.oxygen-icons.org/\""), tr("Used under the LGPL 3 license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) From df7cb21fff74d1c91472e8cffb74f6defb08fb66 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jun 2015 13:51:26 -0400 Subject: [PATCH 247/630] Bump version number. --- NEWS | 12 ++++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 49a5cc89..fa0a0331 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +1.5.4 +----- +* Relax version check of ZIP to handle broken ZIP files. +* Remove deprecated code for unsupported Mac OS X versions. +* Switch to static builds for Windows. +* FIXED: Broken shortcut for disabling focused text in Windows. +* FIXED: Word count did not handle dashes correctly. +* FIXED: Did not use correct line endings in Windows. +* FIXED: Incorrectly sized icon for daily progress. +* FIXED: Crash when importing themes. +* Translation updates: Esperanto, German, Greek, Indonesian, Italian, Lithuanian, Polish, Portuguese, Portuguese (Brazil), Russian, Turkish, Ukrainian. + 1.5.3 ----- * FIXED: Find did not take smart quotes into account. diff --git a/focuswriter.pro b/focuswriter.pro index 0a7c24d1..3217fdf0 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.5.3 +VERSION = 1.5.4 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 6985f110..3e02c830 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.3' +VERSION='1.5.4' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 022a33af..d1f2f116 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 3 +!define VERSIONPATCH 4 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 8aa1edfb..87005d90 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.3 +SET VERSION=1.5.4 ECHO Copying executable MKDIR %APP% From e86e85406952b8a902eb3faeec26f3d56674ea85 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jun 2015 14:21:57 -0400 Subject: [PATCH 248/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index f448a149..e1c0e71c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.4-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sat, 13 Jun 2015 18:21:20 +0000 + focuswriter (1.5.3-3) unstable; urgency=medium * Merge upstream fixes: From b24255638672190081d674e99e9a4aa8b1eb3a27 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 15 Jul 2015 07:46:41 -0400 Subject: [PATCH 249/630] FIXED: Compile failure with Qt 5.5 --- src/qtsingleapplication/qtlocalpeer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qtsingleapplication/qtlocalpeer.cpp b/src/qtsingleapplication/qtlocalpeer.cpp index 332b0643..c7ce5276 100644 --- a/src/qtsingleapplication/qtlocalpeer.cpp +++ b/src/qtsingleapplication/qtlocalpeer.cpp @@ -41,6 +41,7 @@ #include "qtlocalpeer.h" #include +#include #include #if defined(Q_OS_WIN) From 8d0997b634bbb44eb63c5f2d738efc0392e5b438 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 18 Jul 2015 05:32:32 -0400 Subject: [PATCH 250/630] Bump version number. --- NEWS | 4 ++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 3 ++- windows_deploy.bat | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index fa0a0331..4811a2bc 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +1.5.4.1 +------- +* FIXED: Compile failure with Qt 5.5. + 1.5.4 ----- * Relax version check of ZIP to handle broken ZIP files. diff --git a/focuswriter.pro b/focuswriter.pro index 3217fdf0..023e81fd 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.5.4 +VERSION = 1.5.4.1 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 3e02c830..c7c569ac 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.4' +VERSION='1.5.4.1' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index d1f2f116..b1e09bdd 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -5,7 +5,8 @@ !define VERSIONMAJOR 1 !define VERSIONMINOR 5 !define VERSIONPATCH 4 -!define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" +!define VERSIONMICRO 1 +!define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}.${VERSIONMICRO}" !define ABOUTURL "http://gottcode.org/focuswriter/" ;-------------------------------- diff --git a/windows_deploy.bat b/windows_deploy.bat index 87005d90..d7649e5b 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.4 +SET VERSION=1.5.4.1 ECHO Copying executable MKDIR %APP% From 93efdf9f1119e80600c97726f20b0f99163f94da Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 18 Jul 2015 05:36:39 -0400 Subject: [PATCH 251/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index e1c0e71c..74f0a6f8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.4.1-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sat, 18 Jul 2015 09:36:18 +0000 + focuswriter (1.5.4-1) unstable; urgency=medium * New upstream release From 54917a887b67d507783865d1f02f763d35f55034 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 21 Aug 2015 09:52:28 -0400 Subject: [PATCH 252/630] FIXED: Allowed pasting invalid characters. --- src/document.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index e69d2bb2..57e7f0d9 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -289,9 +289,9 @@ namespace // Parse HTML QTextDocument document; if (source->hasHtml()) { - document.setHtml(source->html()); + document.setHtml(source->html().remove(QChar(0x0))); } else { - document.setPlainText(source->text()); + document.setPlainText(source->text().remove(QChar(0x0))); } // Convert to RTF From 2c773e83235c3a5b2aaace4b65ee0948c0889fc0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 21 Aug 2015 09:59:17 -0400 Subject: [PATCH 253/630] FIXED: Allowed invalid characters in RTF files. --- src/fileformats/rtf_reader.cpp | 5 ++++- src/fileformats/rtf_writer.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fileformats/rtf_reader.cpp b/src/fileformats/rtf_reader.cpp index ccdd97a5..81949e2e 100644 --- a/src/fileformats/rtf_reader.cpp +++ b/src/fileformats/rtf_reader.cpp @@ -282,7 +282,10 @@ void RtfReader::insertSymbol(qint32 value) void RtfReader::insertUnicodeSymbol(qint32 value) { - m_cursor.insertText(QChar(value)); + if (value) + { + m_cursor.insertText(QChar(value)); + } for (int i = m_state.skip; i > 0;) { m_token.readNext(); diff --git a/src/fileformats/rtf_writer.cpp b/src/fileformats/rtf_writer.cpp index cfdce42c..fddf1e8f 100644 --- a/src/fileformats/rtf_writer.cpp +++ b/src/fileformats/rtf_writer.cpp @@ -394,7 +394,7 @@ QByteArray RtfWriter::fromUnicode(const QString& string) const text += "\\'" + QByteArray::number(static_cast(encoded.at(j)), 16).toUpper(); } } - } else { + } else if (i->unicode()) { text += "\\u" + QByteArray::number(i->unicode()) + "?"; } } From 77bd778ec5e030c1be3d29f2e54ac535a9158fa0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 21 Aug 2015 10:04:55 -0400 Subject: [PATCH 254/630] FIXED: Allowed invalid characters in ODT files. --- src/fileformats/odt_writer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fileformats/odt_writer.cpp b/src/fileformats/odt_writer.cpp index d59283ed..39dc442d 100644 --- a/src/fileformats/odt_writer.cpp +++ b/src/fileformats/odt_writer.cpp @@ -237,7 +237,10 @@ void OdtWriter::writeBody(const QTextDocument* document) int spaces = -1; for (int i = 0; i < text.length(); ++i) { QChar c = text.at(i); - if (c.unicode() == 0x0009) { + if (c.unicode() == 0x0) { + m_xml.writeCharacters(text.mid(start, i - start)); + start = i + 1; + } else if (c.unicode() == 0x0009) { m_xml.writeCharacters(text.mid(start, i - start)); m_xml.writeEmptyElement(QString::fromLatin1("text:tab")); start = i + 1; From 338c61940ff2eed7cbcd8b78424570a127ae56bc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 21 Aug 2015 10:07:15 -0400 Subject: [PATCH 255/630] FIXED: Allowed invalid characters in OOXML files. --- src/fileformats/docx_writer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fileformats/docx_writer.cpp b/src/fileformats/docx_writer.cpp index c9676892..9687c4a3 100644 --- a/src/fileformats/docx_writer.cpp +++ b/src/fileformats/docx_writer.cpp @@ -135,6 +135,9 @@ void DocxWriter::writeParagraph(const QTextBlock& block) writeText(text, start, i); m_xml.writeEmptyElement(QString::fromLatin1("w:br")); start = i + 1; + } else if (c.unicode() == 0x0) { + writeText(text, start, i); + start = i + 1; } } writeText(text, start, count); From 13322c0f30e6a7a60913dd6842f00f9f7e89bf2f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 27 Aug 2015 13:46:08 -0400 Subject: [PATCH 256/630] FIXED: Switched tabs during autosave. --- src/document_watcher.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/document_watcher.cpp b/src/document_watcher.cpp index 3b146952..64888ed7 100644 --- a/src/document_watcher.cpp +++ b/src/document_watcher.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013 Graeme Gott + * Copyright (C) 2012, 2013, 2015 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -166,7 +166,7 @@ void DocumentWatcher::processUpdates() QFileInfo info(path); QString filename = info.fileName(); - // Show document + // Find document Document* document = m_paths.value(path); if (!document) { continue; @@ -175,14 +175,16 @@ void DocumentWatcher::processUpdates() if (details.ignored) { continue; } + + // Ignore unchanged documents + if (info.exists() && (details.modified == info.lastModified()) && (details.permissions == info.permissions())) { + continue; + } + + // Show document emit showDocument(document); if (info.exists()) { - // Ignore unchanged files - if ((details.modified == info.lastModified()) && (details.permissions == info.permissions())) { - continue; - } - // Process changed file QMessageBox mbox(document->window()); mbox.setIcon(QMessageBox::Warning); From e990ae6045d17b6cadd5559ebbd937996c27734c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 27 Aug 2015 14:31:42 -0400 Subject: [PATCH 257/630] FIXED: Treated every paragraph as a scene when divider is empty. --- src/scene_model.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scene_model.cpp b/src/scene_model.cpp index 3a054921..15896b1e 100644 --- a/src/scene_model.cpp +++ b/src/scene_model.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013 Graeme Gott + * Copyright (C) 2012, 2013, 2014, 2015 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -205,7 +205,7 @@ void SceneModel::updateScene(BlockStats* stats, const QTextBlock& block) QString text = block.text(); bool was_scene = stats->isScene(); - bool is_scene = text.startsWith(f_scene_divider); + bool is_scene = !f_scene_divider.isEmpty() && text.startsWith(f_scene_divider); stats->setScene(is_scene || (block.blockNumber() == 0)); if (stats->isScene()) { // Add or update scene divider block @@ -477,7 +477,7 @@ void SceneModel::resetScenes() if (stats) { // Check if block is a scene QString text = block.text(); - bool is_scene = text.startsWith(f_scene_divider); + bool is_scene = !f_scene_divider.isEmpty() && text.startsWith(f_scene_divider); stats->setScene(is_scene || (block.blockNumber() == 0)); // Add scene From d9b29e66fb496c355b21443cca3fdaf17f639270 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 3 Sep 2015 10:00:00 -0400 Subject: [PATCH 258/630] Switch to dynamic builds for Windows. --- resources/windows/installer.nsi | 56 +++++++++++++++++++++++++++++++++ windows_deploy.bat | 34 ++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index b1e09bdd..b627ca60 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -164,6 +164,16 @@ Section "install" SetOutPath $INSTDIR File ..\..\release\FocusWriter.exe File ..\symbols\symbols630.dat + File $%QTDIR%\bin\libgcc_s_dw2-1.dll + File $%QTDIR%\bin\libstdc++-6.dll + File $%QTDIR%\bin\libwinpthread-1.dll + File $%QTDIR%\bin\Qt5Core.dll + File $%QTDIR%\bin\Qt5Gui.dll + File $%QTDIR%\bin\Qt5Multimedia.dll + File $%QTDIR%\bin\Qt5Network.dll + File $%QTDIR%\bin\Qt5PrintSupport.dll + File $%QTDIR%\bin\Qt5Widgets.dll + File $%QTDIR%\bin\Qt5WinExtras.dll SetOutPath $INSTDIR\dictionaries File dicts\*.aff @@ -172,6 +182,13 @@ Section "install" SetOutPath $INSTDIR\dictionaries\2\mor-standard File dicts\2\mor-standard\* + SetOutPath $INSTDIR\audio + File $%QTDIR%\plugins\audio\qtaudio_windows.dll + + SetOutPath $INSTDIR\bearer + File $%QTDIR%\plugins\bearer\qgenericbearer.dll + File $%QTDIR%\plugins\bearer\qnativewifibearer.dll + SetOutPath $INSTDIR\icons\hicolor File ..\images\icons\oxygen\hicolor\index.theme SetOutPath $INSTDIR\icons\hicolor\16 @@ -179,6 +196,30 @@ Section "install" SetOutPath $INSTDIR\icons\hicolor\22 File ..\images\icons\oxygen\hicolor\22\* + SetOutPath $INSTDIR\imageformats + File $%QTDIR%\plugins\imageformats\qdds.dll + File $%QTDIR%\plugins\imageformats\qgif.dll + File $%QTDIR%\plugins\imageformats\qicns.dll + File $%QTDIR%\plugins\imageformats\qico.dll + File $%QTDIR%\plugins\imageformats\qjp2.dll + File $%QTDIR%\plugins\imageformats\qjpeg.dll + File $%QTDIR%\plugins\imageformats\qmng.dll + File $%QTDIR%\plugins\imageformats\qsvg.dll + File $%QTDIR%\plugins\imageformats\qtga.dll + File $%QTDIR%\plugins\imageformats\qtiff.dll + File $%QTDIR%\plugins\imageformats\qwbmp.dll + File $%QTDIR%\plugins\imageformats\qwebp.dll + + SetOutPath $INSTDIR\mediaservice + File $%QTDIR%\plugins\mediaservice\dsengine.dll + File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll + + SetOutPath $INSTDIR\platforms + File $%QTDIR%\plugins\platforms\qwindows.dll + + SetOutPath $INSTDIR\printsupport + File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll + SetOutPath $INSTDIR\sounds File ..\sounds\*.wav @@ -262,6 +303,15 @@ Section "Uninstall" Delete $INSTDIR\FocusWriter.exe Delete $INSTDIR\symbols*.dat Delete $INSTDIR\ReadMe.txt + Delete $INSTDIR\*.dll + Delete $INSTDIR\audio\*.dll + Delete $INSTDIR\bearer\*.dll + Delete $INSTDIR\dictionaries\*\*\* + Delete $INSTDIR\icons\hicolor\*\* + Delete $INSTDIR\imageformats\*.dll + Delete $INSTDIR\mediaservice\*.dll + Delete $INSTDIR\platforms\qwindows.dll + Delete $INSTDIR\printsupport\*.dll Delete $INSTDIR\sounds\*.wav Delete $INSTDIR\themes\*\* Delete $INSTDIR\translations\*.qm @@ -271,6 +321,12 @@ Section "Uninstall" RMDir /r $INSTDIR\dictionaries RMDir /r $INSTDIR\icons RMDir /r $INSTDIR\themes + RMDir $INSTDIR\audio + RMDir $INSTDIR\bearer + RMDir $INSTDIR\imageformats + RMDir $INSTDIR\mediaservice + RMDir $INSTDIR\platforms + RMDir $INSTDIR\printsupport RMDir $INSTDIR\sounds RMDir $INSTDIR\translations RMDir $INSTDIR diff --git a/windows_deploy.bat b/windows_deploy.bat index d7649e5b..89abb72e 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -40,6 +40,40 @@ SET THEMES=%APP%\themes MKDIR %THEMES% XCOPY /Q /S /Y resources\themes\* %THEMES% >nul +ECHO Copying Qt libraries +COPY %QTDIR%\bin\libgcc_s_dw2-1.dll %APP% >nul +COPY "%QTDIR%\bin\libstdc++-6.dll" %APP% >nul +COPY %QTDIR%\bin\libwinpthread-1.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Core.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Gui.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Multimedia.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Network.dll %APP% >nul +COPY %QTDIR%\bin\Qt5PrintSupport.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Widgets.dll %APP% >nul +COPY %QTDIR%\bin\Qt5WinExtras.dll %APP% >nul + +ECHO Copying Qt plugins +MKDIR %APP%\audio +COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul + +MKDIR %APP%\bearer +XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul +DEL %APP%\bearer\*d.dll >nul + +MKDIR %APP%\platforms +COPY %QTDIR%\plugins\platforms\qwindows.dll %APP%\platforms >nul + +MKDIR %APP%\imageformats +XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul +DEL %APP%\imageformats\*d.dll >nul + +MKDIR %APP%\mediaservice +XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul +DEL %APP%\mediaservice\*d.dll >nul + +MKDIR %APP%\printsupport +COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul + ECHO Making portable MKDIR %APP%\Data From 4e102d4c12801d3a34ca2c2a8d313dbeb67aaa29 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 3 Sep 2015 10:47:34 -0400 Subject: [PATCH 259/630] Add support for pasting RTF in Windows. --- focuswriter.pro | 22 +++++++++++++--------- src/fileformats/clipboard_windows.cpp | 5 +++-- src/fileformats/clipboard_windows.h | 9 +++++++-- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index 023e81fd..c27a75e5 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -4,6 +4,9 @@ lessThan(QT_VERSION, 4.6) { macx:greaterThan(QT_MAJOR_VERSION, 4):lessThan(QT_VERSION, 5.2) { error("FocusWriter requires Qt 5.2 or greater") } +win32:greaterThan(QT_MAJOR_VERSION, 4):lessThan(QT_VERSION, 5.4) { + error("FocusWriter requires Qt 5.4 or greater") +} TEMPLATE = app QT += network @@ -12,6 +15,9 @@ greaterThan(QT_MAJOR_VERSION, 4) { macx { QT += macextras } + win32 { + QT += winextras + } } CONFIG += warn_on macx { @@ -50,16 +56,21 @@ macx { SOURCES += src/fileformats/clipboard_mac.cpp \ src/sound.cpp } else:win32 { + DEFINES += RTFCLIPBOARD + greaterThan(QT_MAJOR_VERSION, 4) { LIBS += -lz } + LIBS += -lole32 INCLUDEPATH += src/spelling/hunspell - HEADERS += src/spelling/dictionary_provider_hunspell.h \ + HEADERS += src/fileformats/clipboard_windows.h \ + src/spelling/dictionary_provider_hunspell.h \ src/spelling/dictionary_provider_voikko.h - SOURCES += src/spelling/dictionary_provider_hunspell.cpp \ + SOURCES += src/fileformats/clipboard_windows.cpp \ + src/spelling/dictionary_provider_hunspell.cpp \ src/spelling/dictionary_provider_voikko.cpp \ src/spelling/hunspell/affentry.cxx \ src/spelling/hunspell/affixmgr.cxx \ @@ -72,13 +83,6 @@ macx { src/spelling/hunspell/replist.cxx \ src/spelling/hunspell/suggestmgr.cxx \ src/sound.cpp - - lessThan(QT_MAJOR_VERSION, 5) { - DEFINES += RTFCLIPBOARD - LIBS += -lOle32 - HEADERS += src/fileformats/clipboard_windows.h - SOURCES += src/fileformats/clipboard_windows.cpp - } } else:unix { CONFIG += link_pkgconfig PKGCONFIG += hunspell zlib diff --git a/src/fileformats/clipboard_windows.cpp b/src/fileformats/clipboard_windows.cpp index 8c21a751..f4a96ba4 100644 --- a/src/fileformats/clipboard_windows.cpp +++ b/src/fileformats/clipboard_windows.cpp @@ -19,12 +19,13 @@ #include "clipboard_windows.h" +#include + //----------------------------------------------------------------------------- RTF::Clipboard::Clipboard() - : QWindowsMime() { - CF_RTF = QWindowsMime::registerMimeType(QLatin1String("Rich Text Format")); + CF_RTF = QWinMime::registerMimeType(QLatin1String("Rich Text Format")); } //----------------------------------------------------------------------------- diff --git a/src/fileformats/clipboard_windows.h b/src/fileformats/clipboard_windows.h index 0260e509..bad96ad7 100644 --- a/src/fileformats/clipboard_windows.h +++ b/src/fileformats/clipboard_windows.h @@ -20,14 +20,19 @@ #ifndef RTF_CLIPBOARD_WINDOWS_H #define RTF_CLIPBOARD_WINDOWS_H -#include #include +#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) +#include +#else +#include +typedef QWindowsMime QWinMime; +#endif #include namespace RTF { - class Clipboard : public QWindowsMime + class Clipboard : public QWinMime { public: Clipboard(); From 6cdfe6c6e4145333aa37eea196e8010f4ca269d4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 3 Sep 2015 14:48:54 -0400 Subject: [PATCH 260/630] Update dictionaries. --- resources/windows/dictionaries.sh | 44 ++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index d15b14b6..ca9b4d73 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='4.2.5.1' +loversion='5.0.1.2' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "http://download.documentfoundation.org/libreoffice/src/4.2.5/${lodict}.tar.xz" + curl -s -O -L "http://download.documentfoundation.org/libreoffice/src/5.0.1/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' @@ -23,7 +23,7 @@ fi echo -n 'Downloading Finnish dictionary...' if [ ! -e 'voikko.oxt' ]; then - curl -s -O 'http://www.puimula.org/htp/ooo/voikko-win/3.4.0.20140310/voikko.oxt' + curl -s -O 'http://www.puimula.org/htp/ooo/voikko-win/4.1.0.20150125/voikko.oxt' echo ' DONE' else echo ' SKIPPED' @@ -39,11 +39,21 @@ else echo ' SKIPPED' fi -echo -n 'Downloading Turkish dictionary... ' -trdict='firefox-tr-dict-v0.3.2' +echo -n 'Downloading Indonesian dictionary...' +iddict='id_id' +idfiles='id_id' +if [ ! -e "${iddict}.oxt" ]; then + curl -s -O "http://extensions.libreoffice.org/extension-center/indonesian-dictionary-kamus-indonesia-by-benitius/releases/2.0/${iddict}.oxt" + echo ' DONE' +else + echo ' SKIPPED' +fi + +echo -n 'Downloading Turkish dictionary...' +trdict='oo-turkish-dict-v1-2' trfiles="${trdict}/dictionaries" -if [ ! -e "${trdict}.xpi" ]; then - curl -s -O "http://tr-spell.googlecode.com/files/${trdict}.xpi" +if [ ! -e "${trdict}.oxt" ]; then + curl -s -O "http://extensions.libreoffice.org/extension-center/turkish-spellcheck-dictionary/releases/1.2/${trdict}.oxt" echo ' DONE' else echo ' SKIPPED' @@ -75,9 +85,17 @@ else echo ' SKIPPED' fi +echo -n 'Extracting Indonesian dictionary...' +if [ ! -e "${iddict}" ]; then + unzip -qq "${iddict}.oxt" -d "${iddict}" + echo ' DONE' +else + echo ' SKIPPED' +fi + echo -n 'Extracting Turkish dictionary...' if [ ! -e "${trdict}" ]; then - unzip -qq "${trdict}.xpi" -d "${trdict}" + unzip -qq "${trdict}.oxt" -d "${trdict}" echo ' DONE' else echo ' SKIPPED' @@ -141,12 +159,18 @@ cp -a $lofiles/he_IL/he_IL.dic dicts/he.dic echo -n ' hu' cp -a $lofiles/hu_HU/hu_HU.aff dicts/hu.aff cp -a $lofiles/hu_HU/hu_HU.dic dicts/hu.dic +echo -n ' id' +cp -a $idfiles/id_ID.aff dicts/id.aff +cp -a $idfiles/id_ID.dic dicts/id.dic echo -n ' it' cp -a $lofiles/it_IT/it_IT.aff dicts/it.aff cp -a $lofiles/it_IT/it_IT.dic dicts/it.dic echo -n ' ko' cp -a $kofiles/ko-KR.aff dicts/ko.aff cp -a $kofiles/ko-KR.dic dicts/ko.dic +echo -n ' lt' +cp -a $lofiles/lt_LT/lt.aff dicts/lt.aff +cp -a $lofiles/lt_LT/lt.dic dicts/lt.dic echo -n ' nl' cp -a $lofiles/nl_NL/nl_NL.aff dicts/nl.aff cp -a $lofiles/nl_NL/nl_NL.dic dicts/nl.dic @@ -177,8 +201,8 @@ echo -n ' sv' cp -a $lofiles/sv_SE/sv_SE.aff dicts/sv.aff cp -a $lofiles/sv_SE/sv_SE.dic dicts/sv.dic echo -n ' tr' -cp -a $trfiles/tr.aff dicts/tr.aff -cp -a $trfiles/tr.dic dicts/tr.dic +cp -a $trfiles/tr-TR.aff dicts/tr.aff +cp -a $trfiles/tr-TR.dic dicts/tr.dic echo -n ' uk' cp -a $lofiles/uk_UA/uk_UA.aff dicts/uk.aff cp -a $lofiles/uk_UA/uk_UA.dic dicts/uk.dic From 8a73a93dae6a2f8b4cbe8363ffadd564b704b989 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 4 Sep 2015 08:14:07 -0400 Subject: [PATCH 261/630] Sync translations with Transifex. --- CREDITS | 11 +++++-- resources/unix/focuswriter.appdata.xml | 2 +- resources/unix/po/eo.po | 6 ++-- translations/focuswriter_ar.ts | 16 +++++------ translations/focuswriter_ca.qm | Bin 33567 -> 33559 bytes translations/focuswriter_ca.ts | 22 ++++++-------- translations/focuswriter_cs.ts | 16 +++++------ translations/focuswriter_da.ts | 16 +++++------ translations/focuswriter_de.ts | 16 +++++------ translations/focuswriter_el.ts | 16 +++++------ translations/focuswriter_en.ts | 16 +++++------ translations/focuswriter_en_GB.ts | 16 +++++------ translations/focuswriter_eo.qm | Bin 34716 -> 34718 bytes translations/focuswriter_eo.ts | 38 ++++++++++++------------- translations/focuswriter_es.ts | 16 +++++------ translations/focuswriter_es_MX.ts | 16 +++++------ translations/focuswriter_fi.ts | 16 +++++------ translations/focuswriter_fr.ts | 16 +++++------ translations/focuswriter_he.ts | 16 +++++------ translations/focuswriter_hu.ts | 16 +++++------ translations/focuswriter_hy.ts | 16 +++++------ translations/focuswriter_id.ts | 16 +++++------ translations/focuswriter_it.ts | 16 +++++------ translations/focuswriter_ja.ts | 16 +++++------ translations/focuswriter_ko.ts | 16 +++++------ translations/focuswriter_lt.qm | Bin 36326 -> 36338 bytes translations/focuswriter_lt.ts | 28 +++++++++--------- translations/focuswriter_nl.ts | 16 +++++------ translations/focuswriter_pl.ts | 16 +++++------ translations/focuswriter_pt.ts | 16 +++++------ translations/focuswriter_pt_BR.qm | Bin 36500 -> 36502 bytes translations/focuswriter_pt_BR.ts | 18 ++++++------ translations/focuswriter_ro.ts | 16 +++++------ translations/focuswriter_ru.ts | 16 +++++------ translations/focuswriter_sk.ts | 16 +++++------ translations/focuswriter_sr.ts | 16 +++++------ translations/focuswriter_sv.ts | 16 +++++------ translations/focuswriter_tr.ts | 16 +++++------ translations/focuswriter_uk.ts | 16 +++++------ translations/focuswriter_vi.ts | 16 +++++------ translations/focuswriter_zh_CN.ts | 16 +++++------ translations/focuswriter_zh_TW.ts | 16 +++++------ 42 files changed, 310 insertions(+), 311 deletions(-) diff --git a/CREDITS b/CREDITS index d16ad4eb..b160745b 100644 --- a/CREDITS +++ b/CREDITS @@ -21,6 +21,9 @@ Danish: Dutch: * Robert Borst +Esperanto: +* Synteq + German: * Dennis Peteranderl * Eduard Bruckner @@ -55,6 +58,9 @@ Japanese: Korean: * Hwang In Tak +Lithuanian: +* Moo + Polish: * Jakub Kowalski @@ -110,11 +116,10 @@ Chinese (China): Icons ----- -* Oxygen, http://www.oxygen-icons.org/ +* Oxygen, https://techbase.kde.org/Projects/Oxygen Libraries --------- -* Qt, http://qt-project.org/ +* Qt, https://www.qt.io/ * hunspell, http://hunspell.sourceforge.net/ -* SDL_mixer, http://www.libsdl.org/projects/SDL_mixer/ diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 36d9d5a8..fe9dfc86 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -91,7 +91,7 @@

FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

Το FocusWriter σας επιτρέπει να προσαρμόσετε το περιβάλλον σας, δημιουργώντας θέματα που ελέγχουν την γραμματοσειρά, τα χρώματα και το φόντο της εικόνας για να προσθέσετε ατμόσφαιρα. Διαθέτει επίσης on-the-fly στατιστικές ενημέρωσης, καθημερινούς στόχους, πολλά ανοικτά έγγραφα, ορθογραφικό έλεγχο, και πολλά άλλα.

-

FocusWriter ebligas vin agordi vian verkejon per kreado de haŭtoj, kiuj agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da malfermataj dokumentoj, literumada kontrolo, kaj multe pli.

+

FocusWriter ebligas vin agordi vian verkejon per kreado de etosoj, kiuj agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da malfermataj dokumentoj, literumada kontrolo, kaj multe pli.

FocusWriter permite personalizar su ambiente creado temas que controlan la fuente, los colores y la imagen de fondo para crear un ambiente. Otras características son que actualiza en tiempo real estadísticas, metas diarias, abre múltiples documentos, verifica ortografía y mucho más.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka vaihtavat fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

FocusWriter vous permet de personnaliser votre environnement en créant des thèmes composés de polices, de couleurs et d'images d'arrière-plan afin d'agrémenter votre interface. Il inclut également des statistiques mises à jour à la volée, des objectifs quotidiens, l'ouverture de documents multiples, une vérification orthographique, et bien plus encore.

diff --git a/resources/unix/po/eo.po b/resources/unix/po/eo.po index 0c3604d6..2d513627 100644 --- a/resources/unix/po/eo.po +++ b/resources/unix/po/eo.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-13 17:41+0000\n" -"PO-Revision-Date: 2015-06-06 18:49+0000\n" +"PO-Revision-Date: 2015-07-05 02:45+0000\n" "Last-Translator: Synteq\n" -"Language-Team: Esperanto (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Esperanto (http://www.transifex.com/gottcode/focuswriter/" "language/eo/)\n" "Language: eo\n" "MIME-Version: 1.0\n" @@ -46,7 +46,7 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" -"FocusWriter ebligas vin agordi vian verkejon per kreado de haŭtoj, kiuj " +"FocusWriter ebligas vin agordi vian verkejon per kreado de etosoj, kiuj " "agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ " "havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da " "malfermataj dokumentoj, literumada kontrolo, kaj multe pli." diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index e06f361e..a8cd6b87 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -230,42 +230,42 @@ DocumentWatcher - + File Changed - + The file '%1' was changed by another program. - + Do you want to reload the file? تحدِّث هذا الملف؟ - + Reload تحديـث - + Ignore تجاهـل - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? تريد إغلاق هذا الملف أم حفظه؟ diff --git a/translations/focuswriter_ca.qm b/translations/focuswriter_ca.qm index 3bc2e30769852fab4e06d7bc119fd0905fcefae0..826439eca857208f244e0ad0183c39c5b057f530 100644 GIT binary patch delta 3017 zcmX9=dtAV;=ZZF zARakOjD@_f2}oWAxmspye;ZE9hujzjSWR|NytpCkE|lrx0hd_f9-!A8C>2a9+!dbN zT$#kL@Z9?@@Kzu^Uj>R0;MwR#986>&<9>MF8^-@X!7KkDFzp+7ZQ{OZAHl2m3^08b zyz00+I9v$V#6L<8+xYNFt88ePBUSz5r`M7SXeaT zr95vSssRZq1`JDISDC0o`zC^Mygqfd3iaY{{?_T(W(Aye=hA-{_{qk|mZ6n|j zj^+!`fw?-g`eA$q3Ist>@!P%CE;SK zg$K;pDrUFNV7w<{!M9z2Tb=k(=^iR&hgcdI2@E!Kk|=NUUb_m$*xOk`Mz)Wf3yNO6(84UDVONF&NB2~sRKum#Dxp@`fSTCLa`6Zy(N%b#GOz?no`SN2x3XpDo zSPG2!Qo3bgA$?P&$5{`7=x|wg{13)`DBI6sf{UHy@w>YLKIi1PHTJ-Wa5-a{bt^sM zB4<}70S@oT)+Qb}^11xMwM*1`yZp~Q8aFsYE{q!pjH{80jMYGTi(DLWlIw@$y?$|& zbT_%Y;2s%iAwB>S&BP7>CB$d^A4H_464QvC#BFl<7J*nRms_`p{P8;%SW(g^M2ary zJds*RdQ7CGlU;~|iIe3Dj|*hzyjckw1Yl?jIxEsZM&W2&*L zlbpH<54C{{dZwGAgEE4v^005emS1GU^2c}l4aD&&Dn zl*(f~FsoImx|m7P`YJz9+6BCB^;NDru}2dwDmUgj1KJhJjYF)!d|0`ipH3AgsHDOO zCU#k+PU#EuUaQhLW>I{LRJ~G|Q25uX-ZyWt_wg!+Y1Dw&pc=Y^>$4uIeAci4_^bS% zMFERessg1BQlF@bxXyS|fhzJj(Ha%0itnHwM<%K=>`u{st5pjMns~6RDtSywJ?;}p z`KT7v*$jKyN2R)$M>mYFP&FUp!J~3jPX}D*09vGaafs;MPc3=U6|b#O_juZ!ogJw5 z%2oi&F?HAmx+3I>`mM$*K z>oi60^#hh>X-do^fXw-tz0q{boZFh(m?9vpOLNYRy*FOfoO7pk%quk)>SVUEP}6ja z%)Nfyh8B0tpM5TKR4>ztwM#ii{IyEL`?PnW)_$DZpFoe_w7tFyVFeM|{+(oE%xta8 zD-3efx+PuX^U;N!YG>5LQ}YXUY9Cx$Pd<{gFNY+tykPCi0ye69zOMfn?(hGuF3_2c&HO<(%Cdv|^}3l> zP8Yjq-CTc`<0$A-8^%*9&QEluYe`@*bX7|j$osPH5OSSl61J4CownZR1$plFxKquRaZe{q)kd6c&)L*KA;1-wM4h z=L-7*y;&K^zTDCKMph#R!dCsnPls^qgy=0EBy>oMKCOXQ&+-ZS6#*a6JH9py9i)H9 zp57VVp&slPX8wK6Vf*0F(Bqknn_8}+#{ zY~~|g15QNV8-B})Jiza`F)U8S^#o(m9$yN(-MH|{A~N7=TzQ&24^K93jPA|8I2n&! zZQzBOX*^xdS<`d1vF>~jr|}45bFqn2z1jFQE`<*CN;CDieu+w1W3sm{gsJ<^u`Mc-xsy|}dys?NMK^3NL zZMk%4oT=;z-?txTy79Mz)u!g(`m%-FO>Jj+&BO(nI@7H(ui|57-BCKtd6C)u*BFj- zZ}Y_U0bIXtj=jc8#ygu+o&RE@znIewG7*oj%vr@{oT4{uIMd0TQ_Ko|gUr=~vq|k^ z^Y@{4lx`pMQx_K2)6M)euYj{?QyQ?MADabx>U%a8BIWQ)eMYy#iyg}>k|+rO2f>+N Ax&QzG delta 3026 zcmXX|eO!%qAHL50cHYlHp;<)qluD*Vp-43}C96mhN>P%R!shLG9V%%no-_;lFiSoY zg;B#p$--*1$ICw2$jidAS!T5Ax$HdWpX=QB{ky-v@Avv%*Y|h-`y*k`M?&rZ%MZY~ z{ebN&E84XH69Rx)M}diX#BspnA%KtxMAiU4Bdr)R%ZlMY1C1Gg%_|588D~^IgmSKn z^oDT!A~6=y!3JRFI!F}~WBXY#G#65R5MVLcKz8GTpx+=*2?iWvi3fllb0HsY1;!7A z>&^j8;yzrz_z-x1G+f^VicsKM??m(@GLZ2QT%W$f>mT8kbp(hy54UWtizQe~|H(mGVS-+ls8qg5Ua_kg#YRNy2SJB`-hEXM zgWRYL57lGURiOVu)sqOm*dt$%3$_D;b_-oLCIIdq3U()0?|{)lgpmnN86?cEUJNV_ z6%v!ULHrJ3MN>56wFxF|g&jo)sFZy|(TEUW;923|&MFGvlyGR+4mRxlZo=`? zp93-5g%g=v7}+dTBzXZ-{}d|nSV4S%&@kEq7;;zm;XD&a+#%d&0_7Isw^6y!^L`36_c1uDt+6 zU-9n8MZlP2;(Zef>6IeBNPh-|hf2Cr&l$H>vYo{Q7Y&et_jUn1uShW)Y=NPnQtDDm zE{d&b25vYE(z;vUQR^+zCz*!eYa%5*)0sGk7%3fgsU<^KrNi!IY`Dsb6WgTn)A1D76zRk%CyM!s6@$h} zr&OW9;BC^WHFN1Hcj^3ReJK4B=~7V|;~kPLb@S+U%#-StQRNd-rTP))0k5vo^#>HC z-)~aKludv>PFA&YjLmhI#nqXtxKft>S^rR$ck{h~6S84KAQ|c{o9-PUquFxMYZm06 zDNjB-4R9!v*MF4*_zsk_c1KctfpWHY1~{`U)<61uIs4seisCaXzI$2D9`DWh_)spW z=gf4zD(_lf&Y9{V@2a{$o7%{G*0blH>*T#*ta#uiD~_8Z@BQ5qn3f`cb%E$ z^0?tLx%4DAO#ekLzp{j)^^tFc?jeH~ANh7~_GsMq@|`&jfOffj=NKz6m&p&aQmEqD zikLTniQQ1t3B7=xTNRCcI>ncv^hjVr&rEM;O7#NcMh={2^`fUXe6T?MfrU0p304;# zCv~$&s!J5!w<}X0zDSphny;=%5;-BStDE{g=0?LcnlH&%s-Us&T+R)KXgr_OhLe8O z_^xImrZJjvzAb>JUK4hV*L~YGNzH?)rG=VR{=ZmQ@iEP+H!r##)NJio1a!Tq$-2kh zF3Zy7ukHh6e4r^b4+WMi(tHt4x5PiuT!_eLf}*CziM==8)YLdvvt=tawN(;ZS)ggS zPv(aIWW^+R%^z=F@#h2!)AnsA6JwIJ zj&E>OKdn>TEj|y*Ygap1j%W))s@Qo&TQrs0_L*zNq_x^&brZG!m-d@28^}wB_DoYD zwSGlgyNjA%@VU0-yUpYyLEGsO$MVK%J9F5muDQCt)m-0qjc$Yk8@uG1Ze-GKuJ59o zX5nTJeezLB7F$1~Z&{bx$9`70}j_=e}+wEk-%5}AC z(`ibJ?s7gmAKg!PxsrSYcx=x{n?jidasZQL_n3RpSaJ1^D$7LJ$EB<&Qh(rH7^QeYUs|f>G!XO`>_4UnU*s*&_OxW_YfBo*XNeU%oELf0jy3$;-a$S7AMH%m z>%lz?&$hBpy>1%*8p4DmXG6z-V}UM5j8ghnbYR3RqwZ!9E9z(Loma&MZZ!I&w6anA zjX~3X=P}?&NBK2fC%1y50VcO4(wvwWRTz!)TgV z+eG2-Gliuxb6hqh2S!qo`%O!JWny}mECHl=!Anz?mM7{^l__iQ93J(jP20BS^CRe} zY3GAYK=Mpe@pZm$>utL8kAn@S#z(!_!Xndyi#%px0!-~G7Ks5W&AJnGnnQ-!`KJhu z^C9Mmn|*ozxq0d>RuVkGoape1iT-R(KEgy?PMFgRiaAB^SaF)8d3^yZ^a?On3|c{I zUz@)Tw4rqSm|r@wu - @@ -49,7 +48,6 @@ - @@ -58,7 +56,6 @@ - @@ -67,7 +64,6 @@ - @@ -104,7 +100,6 @@ - @@ -215,42 +210,42 @@ DocumentWatcher - + File Changed S'ha canviat el fitxer - + The file '%1' was changed by another program. El fitxer '%1' ha estat modificat per un altre programa. - + Do you want to reload the file? Este segur que voleu tornar a carregar el fitxer? - + Reload Torna a carregar - + Ignore Ignora - + File Deleted S'ha esborrat el fitxer - + The file %1 was deleted by another program. Un altre programa ha esborrat el fitxer %1 - + Do you want to save or close the file? Voleu tancar o desar el fitxer? @@ -331,7 +326,6 @@ Esteu segur que voleu reemplaçar %n instàncies? Esteu segur que voleu reemplaçar %n instàncies? - diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 5aee08ee..be21a835 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Soubor změněn - + The file '%1' was changed by another program. Soubor '%1' byl změněn jiným programem. - + Do you want to reload the file? Chcete soubor nahrát znovu? - + Reload Nahrát znovu - + Ignore Přehlížet - + File Deleted Soubor smazán - + The file %1 was deleted by another program. Soubor %1 byl smazán jiným programem. - + Do you want to save or close the file? Chcete soubor uložit nebo zavřít? diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 043deaba..8c1d7567 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Fil ændret - + The file '%1' was changed by another program. - + Do you want to reload the file? Ønsker du at genindlæse filen? - + Reload Genindlæs - + Ignore Ignorer - + File Deleted Fil slettet - + The file %1 was deleted by another program. Filen %1 blev slettet af et andet program. - + Do you want to save or close the file? Ønsker du at gemme eller lukke filen? diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 08fefa76..9b2e3003 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Datei geändert - + The file '%1' was changed by another program. Die Datei '%1' wurde durch ein anderes Programm geändert. - + Do you want to reload the file? Wollen Sie die Datei neu laden? - + Reload Neu laden - + Ignore Ignorieren - + File Deleted Die Datei wurde gelöscht - + The file %1 was deleted by another program. Die Datei %1 wurde von einem anderen Programm gelöscht. - + Do you want to save or close the file? Wollen Sie die Datei speichern oder schliessen? diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 7e0fdce8..9d9a00d2 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Το Αρχείο Έχει Αλλάξει - + The file '%1' was changed by another program. Το αρχείο %1 έχει αλλαχθεί από άλλο πρόγραμμα. - + Do you want to reload the file? Θέλετε να επαναφορτώσετε το αρχείο; - + Reload Επαναφόρτωση - + Ignore Παράβλεψη - + File Deleted Αρχείο Διεγράφη - + The file %1 was deleted by another program. Το αρχείο «%1» διεγράφη από άλλο πρόγραμμα. - + Do you want to save or close the file? Θέλετε να αποθηκεύσετε ή να κλείσετε το αρχείο; diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 93334215..6176420e 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed - + The file '%1' was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 7a13bd41..b5b758de 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed File Changed - + The file '%1' was changed by another program. - + Do you want to reload the file? Do you want to reload the file? - + Reload Reload - + Ignore Ignore - + File Deleted File Deleted - + The file %1 was deleted by another program. The file %1 was deleted by another programme. - + Do you want to save or close the file? Do you want to save or close the file? diff --git a/translations/focuswriter_eo.qm b/translations/focuswriter_eo.qm index cac7b439bc87ffd10ea697472ba1da62561307e1..4f1d1c9229660e5903c08dde498e42db52b562c5 100644 GIT binary patch delta 203 zcmbQ!&or-}X@d+05c7i|8@xu21-X!BO?5Jtw{&0M@2oY`F&N*MAPiZ>q& zXl8(K!n`{=d2QKX@d+05c=WYJVxu21-VDnb)5JtxC&0M@2oY_4X5*c$DN;V%1 zXl8cl>>TUF z0~6TXlbOm3H+OxR#Abo=g?yZK4518F42cZIllj`jne!R4CSPj}hAG=@(3Zyt07~jT A_W%F@ diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index 247f064f..fdc3bb8f 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Dosiero Ŝanĝiĝis - + The file '%1' was changed by another program. La dosiero '%1' ŝanĝiĝis de alia programaro. - + Do you want to reload the file? Ĉu vi volas reŝargi la dosieron? - + Reload Reŝargi - + Ignore Malatenti - + File Deleted Dosiero Foriĝis - + The file %1 was deleted by another program. La dosiero %1 foriĝis de alia programaro. - + Do you want to save or close the file? Ĉu vi volas konservi aŭ fermi la dosieron? @@ -1248,7 +1248,7 @@ Edit Theme - Redakti Haŭton + Redakti Etoson @@ -1361,7 +1361,7 @@ New Theme - Nova Haŭto + Nova Etoso @@ -1369,7 +1369,7 @@ Themes - Haŭtoj + Etosoj @@ -1384,7 +1384,7 @@ Old School - Maljuna Lernejo + Malnova Lernejo @@ -1441,23 +1441,23 @@ Delete theme '%1'? - Forigi haŭton '%1'? + Forigi etoson '%1'? Themes (%1) - Haŭtoj (%1) + Etosoj (%1) Import Theme - Elporti Haŭton + Elporti Etoson Export Theme - Elporti Haŭton + Elporti Etoson @@ -1604,7 +1604,7 @@ Loading themes - Ŝargante haŭtojn + Ŝargante etosojn @@ -1650,7 +1650,7 @@ Uses icons from the <a href=%1>Oxygen</a> icon theme - Uzas bildsimboloj de la <a href=%1>Oxygen</a> bildsimbola haŭto + Uzas bildsimbolojn de la <a href=%1>Oxygen</a> bildsimbola etoso @@ -2161,7 +2161,7 @@ &Themes... - Haŭtoj... + Etosoj... diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index b635e54f..80d5920f 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Archivo modificado - + The file '%1' was changed by another program. - + Do you want to reload the file? ¿Desea volver a cargarlo? - + Reload Volver a cargar - + Ignore Ignorar - + File Deleted Archivo eliminado - + The file %1 was deleted by another program. El archivo %1 ha sido eliminado por otro programa. - + Do you want to save or close the file? ¿Desea guardar o cerrar el archivo? diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 1fb60683..f0f1668e 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Archivo alterado - + The file '%1' was changed by another program. - + Do you want to reload the file? ¿Desea volver a cargar el archivo? - + Reload Volver a cargar - + Ignore Ignorar - + File Deleted Archivo eliminado - + The file %1 was deleted by another program. El archivo %1 fue eliminado por otro programa. - + Do you want to save or close the file? ¿Desea guardar o cerrar el archivo? diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 5352ab7f..4aca7403 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Tiedosto muuttui - + The file '%1' was changed by another program. Toinen ohjelma on muuttanut tiedostoa %1. - + Do you want to reload the file? Haluatko ladata tiedoston uudelleen? - + Reload Lataa uudelleen - + Ignore Jätä huomiotta - + File Deleted Tiedosto poistettu - + The file %1 was deleted by another program. Toinen ohjelma on poistanut tiedoston %1. - + Do you want to save or close the file? Haluatko tallentaa vai sulkea tiedoston? diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 1a2274c8..f4f184f3 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Fichier modifié - + The file '%1' was changed by another program. Le fichier « %1 » a été modifié par un autre programme. - + Do you want to reload the file? Voulez-vous recharger le fichier ? - + Reload Recharger - + Ignore Ignorer - + File Deleted Fichier supprimé - + The file %1 was deleted by another program. Le fichier %1 a été supprimé par un autre programme. - + Do you want to save or close the file? Voulez-vous enregistrer ou fermer le fichier ? diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index d9faf957..69502142 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed קובץ שונה - + The file '%1' was changed by another program. הקובץ '%1' שונה על ידי תוכנית אחרת. - + Do you want to reload the file? האם ברצונך להטעין את הקובץ מחדש? - + Reload טעינה מחדש - + Ignore התעלם מן אירוע - + File Deleted קובץ נמחק - + The file %1 was deleted by another program. הקובץ %1 נמחק על ידי תוכנית אחרת. - + Do you want to save or close the file? האם ברצונך לשמור או לסגור את הקובץ? diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index c31502d4..e04cc09b 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed A fálj megváltozott - + The file '%1' was changed by another program. - + Do you want to reload the file? Újra akarja tölteni a fájlt? - + Reload Újratöltés - + Ignore Figyelmen kívül hagyás - + File Deleted Fájl törölve - + The file %1 was deleted by another program. A()z %1 fájlt egy másik program törölte - + Do you want to save or close the file? El szeretné menteni vagy be szeretné zárni a fájlt? diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 6cd1a439..464f69d8 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed Նիշքը փոփոխված է։ - + The file '%1' was changed by another program. «%1» նիշքը մեկ այլ ծրագրով փոփոխվել է։ - + Do you want to reload the file? Նիշքը նորի՞ց բացել։ - + Reload Նորից բացել - + Ignore Անտեսել - + File Deleted Նիշքը ջնջված է։ - + The file %1 was deleted by another program. %1 նիշքը մեկ այլ ծրագրով ջնջվել է։ - + Do you want to save or close the file? Նիշքը պահպանե՞լ, թե փակել։ diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index a4042c24..f9055efd 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed File Berubah - + The file '%1' was changed by another program. File %1 berubah karena program lain. - + Do you want to reload the file? Apakah Anda ingin memuat file ini? - + Reload Muat ulang - + Ignore Abaikan - + File Deleted File Dihapus - + The file %1 was deleted by another program. File %1 dihapus oleh program lain. - + Do you want to save or close the file? Apakah Anda ingin menyimpan atau menutup file ini? diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 567d5a78..662713d3 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed File modificato - + The file '%1' was changed by another program. Il file %1 è stato modificato da un altro programma. - + Do you want to reload the file? Vuoi ricaricare il file? - + Reload Ricarica - + Ignore Ignora - + File Deleted File eliminato - + The file %1 was deleted by another program. Il file %1 è stato modificato da un altro programma. - + Do you want to save or close the file? Vuoi salvare o chiudere il file? diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 2b0c328c..dcfa23d9 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed ファイルが変更されています - + The file '%1' was changed by another program. 他のプログラムによりファイル %1 は変更されています。 - + Do you want to reload the file? ファイルを読み込み直しますか? - + Reload 再読み込み - + Ignore 無視 - + File Deleted ファイルが削除されました - + The file %1 was deleted by another program. 他のプログラムによりファイル %1 は削除されました。 - + Do you want to save or close the file? ファイルを保存、または閉じますか? diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 95744ee7..d627944a 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed 파일 변환 완료 - + The file '%1' was changed by another program. '%1' 파일이 다른 프로그램에 의해서 변경되었습니다. - + Do you want to reload the file? 파일을 다시 불러올까요? - + Reload 새로 고침 - + Ignore 그대로 둠 - + File Deleted 파일이 지워졌습니다. - + The file %1 was deleted by another program. %1 파일이 다른 프로그램에 의해서 지워졌습니다. - + Do you want to save or close the file? 파일을 저장할까요? 닫을까요? diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm index 2080c439af3ce00ee461d65a661c05ca43349f39..e547e5601c4b199e72ac6677aa96c174e5ead58b 100644 GIT binary patch delta 3536 zcmai0dsxls7Jm2dw(onRyxC{|IL~vQ=lrpscYnX%_pNWOcdhlV-@^^Uiw(k> zPL|QYpsxVClU8iI4+sqargR6wa)Fcsz;OPTLxE9e0pDv@9FcCtXs&BBfR<+$~bWl$aGUJ+_{1K z>r`7e#{&zhRb_vc0(0)GZdl0F)Mcs%PBO6Qnd(9C*FgL0s)xaDJpWwvNcAJ&JW%!P zNS=mdEqf3DVZ0fh6c2`{G*)N0Pl* z1Cxa#xeR1#yIXDH3}Y)iX8S#oq6JVC@K^@A+ERl$#jeX9@rbrmqc;wNR6#53nUlBI?h_x6<*-?&KXJ4xBz%-w)g>5EmxK!0~B zH>M*H+)P?)JVHjgNco{h`Fyst!#jpu;x6sZc?={c5}y*+5E}sOBEIJO7?H)8{D}A# znAA$z{h5mWKPi}h1U{HaWQ3FLiLBPip+pwV`b;x=MeVzpG<`5X|bm5SX-txt#* zBOI(4*+(kgJr)>NER`Lez@l6ul^=3uS0q?*;CShfYADb>SUR+568nE}C+XCt_RP71 z^nKwprocn0noL1KhEz41?K0e6s`fiY3TH@H9*~j#d!%=f%K_tNsc}euDq5thYM^4y zD3Qe`9T*fMOYhG;k>!m%ANW!>ga%PBrpTsydns^9a`0;g`e8qL_=#xdq(h{<#n>dobkFvSureD-txQ$FyW#6&1vo*nI@O?&E+kba>;=VU}3Ucb|H-w zlObOpx|w_~mT$IW!YpAI&QK$Y&2OPZB9~qZX=Z>pqJZ6^%SE%P&8iDkE>Vo~Ge#$=eZiUa=W~htL zu=o7itB)j$RF~!Ix(<)%fS}RrvXJswF&g{EIV`!SnjSB{r2vwfP=8qQeNRn2M3$hGu%y5_7ii^<%mIqOo%8YtA9tB{($ z3^XANZha0g`=0jc#ZSpsuC~!5o^c0g8*`Xpo8>xPX(suZ zqjRj}Ij10%u3j3#bAqmt}UB0AXPu#X%-{esNa4s97uE4mz1cff}8ZG z?LX(d>8?MwyOwh$%8JdkR&a$Tvpyox~5=b;kJZUhIwi#%X^{CnHmh^G`A*Jzg4DMzmrI z4;l~rRK;%yXXDA;l)F{~jTPVbWvcEPEw%Y3Qq$4+Du&c`jWtQ-uPLnkOf7C+q@wFg zww7r;P-_Yt$5aR}OkwBh*i36o;i-%aH%uu(qgc)JO=(Z)xN(@t5g@)`*raj)il!Y#)6Lz@e)<|X;0rsodxk*=A{ z(M$6WK{hn}yZMz9nXr3qezhuxx_Hd|+Hi9|UEkcSao$FN0!z8|$Ub>~-UW3X%H^SAy!TtTlBuv9pZlA`Z zj{GHYm5vORT)N2BN$NTNf7z$q>G;cflbI%`c&93X_hhJYfAW~>==XmPmL_%k%-;N$ N^B?>tCNZoo;NSh1=@$S1 delta 3550 zcmai0dsI&O8h*b0?fu;^C?Tb!hN;xJrBV^OlvHlrq>xH!gldq>XD|nqn8_t+TxO;r zH8g56E<=aHWR4n|FH1D%W+Or#-WJ)G~q$M>sn$zc$&cj1!D zeX+;kQcw%T?SM-S*JsyZRF4)wvltTwY=Q~XFCoZf4d8PH6DM~EdSqkbw{gILW=u-R z0>(8UY|BqTS|p~{I0F$nOk0}`jIlH0gjR&F4?+&0kb5;i$j6AtFin? zInZ?!N)!Sh--MFRP+&we>JQul?De?jv=QLZmb#a~`$y3}#0aQI7B=`JMl@44(;}Uer^{yg62*P8jMLu&S$49O z`*(5wRoT8hvA~KNS>>w=V977CYbG)^f2r(_g9NNt**^d$ zZ`totd9LSdK{6F=2HYnLUDm||Zoxv&s!HG;jWAVD596YQ*|m#!;nzY!A}>hw6|!0* z0lN)C-sujYf3~n~cQFfelCax52yn?3_HVCYt&|7{J+{$to$$@^&w%)5p(>mEV%5Tl z#38JK7~w=d1DW3}m>NgA0Yk!spU%*Mw5~!^s{@dbDzx;U%?iIPJoS$P1A|G1P&eS-`hj)BW$DYZ(F1E0y?Bua;9Gqe!-|#C_ zHetGa+pJbPTqxf;f%Yb5o8%?^ZvxXz@^Uy*ZuRo=2pW#rCNJN#g4CtUtFLwf$_Dwx zR|b0CTYmZSQ_AtW{N~5I0srUn+XhBxGfe(8{UHz)A!?32rsIyHSaVc`S48A(|R_@$iA-hu1EV`krF02Xi-emiS3_ z88Fgb%#ZE|1c>5R{RuK+D;5NvA4w6rw9}2XP>=Ml2gpN5)=@Wv-;w z)5nZq7G?~07t2a#0-<}w%Hwlbls2Rsi6OYLz0fRinW2=&=|Dc}YnNRyL z=N96H-3yok2eE!08wxVS`VT0V$z8+-?=z%uu6X4R85y}x>)Y}YO-a*Ou^Ms^ISVXds}KgLchCSmTnwB&h}I#wdJHx15n8GITZ%{ zO`(jp26}}nR5s~sQ%wr1csdxGsOWL?HhDdx=sBI0A+1nY!;KTfQQ=<1?NO@+6%BFJ(OYW9x@MEex@{Y=DB|Yqtpc?P> zfTOYR`}f|Lk+4GZ_c}BsWx^j1T4N&<=kS8tnRJa zy0Q;*e_vH-911MIr}{FC8cZ!#omFwh%6?LvHBH@0kKrRPT;3@VXafOlwn@ zC|gPFaP@Z^){;1D^{LiEPQXBQ-OfDVgP+w8F0ChD>(!lZv5b49x-*X%wpgptRAiB# z`5OCLo^u$c@wT(%01MNMNG#&HU`>>XO|83|X09j0G}#{3B-D?kL_g8&UPu4@4r(eF z(V*KA&BG8~rp;tAvJ-2h9IB4otr&IIgnu}W{w(HHBizms`=p;>RRve&9(%c!% zxR-a;biDb=@w=^+Z;xkh_+G2pK)XXvM}HlOSM zHHZ!=F6cUbjsdzI)QjndIDu#BHKtzzD3Tp|+x!};_JQ6rF5P`oM~666YyN&wT;vv*Vg?_=aG%^yWUtZ0W3~twN4C}!Z zmg$fFQqO+~Cw+A(+g*7FUPC z(zJjFt{XY?#@b{_lU3F8ahF*30%nN99ug+^bj*9RgA3y_Az$V6JjN$aD+ zKv(=_5gAB^JvYoI&Xuh~vMinNsaS?2nR~@&wug1@ZkWc8^SLRR*8Y1yHk+H~$fUQ& z6ZmC5jqrQL7H0?1bMF7ThxXIVx6q+;M1& diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index 63b0ddd9..d6eb35d9 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Failas Pasikeitė - + The file '%1' was changed by another program. Failas '%1' buvo pakeistas kita programa. - + Do you want to reload the file? Ar norite įkelti failą iš naujo? - + Reload įkelti iš naujo - + Ignore - Ignoruoti + Nepaisyti - + File Deleted Failas Ištrintas - + The file %1 was deleted by another program. Failas %1 buvo ištrintas kita programa. - + Do you want to save or close the file? Jūs norite išsaugoti ar uždaryti failą? @@ -278,7 +278,7 @@ Ignore case - Ignoruoti raidžių lygį + Nepaisyti raidžių lygio @@ -766,17 +766,17 @@ Check spelling as you type - Tikrinti rašybą renkant + Tikrinti rašybą, renkant tekstą Ignore words in UPPERCASE - Ignoruoti žodžius, parašytus DIDŽIOSIOMIS RAIDĖMIS + Nepaisyti žodžių, parašytų DIDŽIOSIOMIS RAIDĖMIS Ignore words with numbers - Ignoruoti žodžius su skaičiais + Nepaisyti žodžių su skaičiais @@ -1028,7 +1028,7 @@ &Ignore - &Ignoruoti + Nepa&isyti diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 9dff1afb..c1a26a69 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Bestand is gewijzigd - + The file '%1' was changed by another program. Bestand %1 is veranderd door een ander programma - + Do you want to reload the file? Moet het bestand opnieuw geladen worden ? - + Reload Herladen - + Ignore Negeren - + File Deleted Bestand is verwijderd - + The file %1 was deleted by another program. Bestand %1 is verwijderd door een andere applicatie - + Do you want to save or close the file? Bestand opslaan of afsluiten ? diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index d612266c..06d10535 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Plik zmieniony - + The file '%1' was changed by another program. Plik '%1' został zmieniony przez inny program. - + Do you want to reload the file? Czy chcesz wczytać plik ponownie? - + Reload Wczytaj ponownie - + Ignore Ignoruj - + File Deleted Plik usunięty - + The file %1 was deleted by another program. Plik %1 został usunięty przez inny program. - + Do you want to save or close the file? Czy chcesz zapisać, czy zamknąć plik? diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 3a5b4eb4..6c495bac 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed O ficheiro mudou - + The file '%1' was changed by another program. - + Do you want to reload the file? Quer carregar de novo o ficheiro? - + Reload Carregar de novo - + Ignore Ignorar - + File Deleted Ficheiro apagado - + The file %1 was deleted by another program. O ficheiro %1 foi apagado por outro programa. - + Do you want to save or close the file? Quer gravar ou fechar o ficheiro? diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm index 21e6bfaec088dc1527d523b02334b35b27bb2839..516aab3cb57a8b4bb948bd66b22a8f15223e34e7 100644 GIT binary patch delta 810 zcmXBRX-HI26bJDCee<06?l?2HSTdQ~WHpNEK$e9GBBTn%PQ|QVeA> zY8)#wZKKRc>4S+7ZDdviwve`cs7N9#tt4A8jSlqT-XE94<(~7uH4VzK2BmtMJs3zm z4@^A#-$_S-g-O8XU%+Bw=}2;_=sM!NB_>gtXtysyUu*!Nd(gkG1}NSkM8!T}cc?IZ zdkgF+qv?t>a)R(&JP9m6F3z4_4|ooVt0S$zt|#JEX%A44B0fy@14`S-qohiolAFiX zf)~`KWF%E7-H9V3XF ztJW|sq7rar(>g; z8>5Byl>iyHwWvLuUeRk>p(V;ST3s6fTfEeu1&wuTz4lMQ5WTx9@lieL*EUEdc9*=4NwwJ$+|-W z3g&#vf>nc@yPI78L867c{!WoYZT^LkHfx0(1H_H7R-DP3o0(&Ho zb`6+u^1rjr0O_lNJ(Iv%V(aTu)5KuC@1dAU8RDKj9ivGhfbPN9yau4WLI`gqa3o5Y zzJCM`R?pjVCQ0XoXux{0JzHj z;=7mq&33WV?1XYUYp8TYQpyj+>VbEidObNyUahrTbTjUC3V)atqWR)@bS0=aGVq9V1%?ewn+gKYG zugxE=0J0uwaYwnmeQzm8bIFZbpp$^T)zqZf!Vu!n`FgK@1Q3mS@A?Ly!cM8WLu8Yi&tf{G=h_?PEo~S` z`6j#Ts)3TH^1*O`*OYSLf*&~4M;7UnQKpqejeJX{ROu2%s*w)ync8KV@YAH6Co6-m zf8tc-gEYrfAj8dSAQdPJr5ck{tffwqQ+_j76t(f&j?u{Nt$h62k%t=`K!IMI~VcY>2_F0lIUEdVm!TF;Ku j0Q>h-hIyV?M{aYYsO~UXwiMD}SvWl@kLn1N|C#*{X4&`` diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 6eb661a2..9651aaf8 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Arquivo alterado - + The file '%1' was changed by another program. O arquivo '%1' foi modificado por outro programa. - + Do you want to reload the file? Deseja recarregar o arquivo? - + Reload Recarregar - + Ignore Ignorar - + File Deleted Arquivo apagado - + The file %1 was deleted by another program. O arquivo %1 foi apagado por outro programa - + Do you want to save or close the file? Deseja salvar ou fechar o arquivo? @@ -1971,7 +1971,7 @@ Align &Left - Alinhar à &direita + Alinhar à &esquerda diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index b0a10ef4..ad1e8a6d 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Fişierul a fost modificat - + The file '%1' was changed by another program. Fişierul '%1' a fost modificat de un alt program. - + Do you want to reload the file? Doriţi să reîncărcaţi fişierul? - + Reload Reîncarcă - + Ignore Ignoră - + File Deleted Fişier şters - + The file %1 was deleted by another program. Fişierul %1 a fost şters de un alt program. - + Do you want to save or close the file? Doriţi să salvaţi sau închideţi fişierul? diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 538f3f78..e0a9e5b5 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Файл изменён - + The file '%1' was changed by another program. Файл '%1' был изменен в другой программе. - + Do you want to reload the file? Открыть заново этот файл? - + Reload Открыть заново - + Ignore Пропустить - + File Deleted Файл удалён - + The file %1 was deleted by another program. Файл %1 был удалён другой программой. - + Do you want to save or close the file? Хотите ли вы сохранить файл, или же закрыть его? diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 49187f9b..a5bec343 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Súbor bol zmenený - + The file '%1' was changed by another program. - + Do you want to reload the file? Chcete súbor opätovne načítať? - + Reload Opätovne načítať - + Ignore Ignorovať - + File Deleted Súbor bol vymazaný - + The file %1 was deleted by another program. Súbor %1 bol vymazaný iným programom. - + Do you want to save or close the file? Chcete súbor uložiť alebo zavrieť? diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 99ffc146..31cae04d 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Промењен фајл - + The file '%1' was changed by another program. Фајл '%1' је промењен од стране другог програма. - + Do you want to reload the file? Да ли желите да поново учитате фајл? - + Reload Поново учитај - + Ignore Занемари - + File Deleted Обрисан фајл - + The file %1 was deleted by another program. Фајл %1 је обрисао други програм. - + Do you want to save or close the file? Да ли желите да сачувате или затворите фајл? diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 2b0fcb19..1f602ed6 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -210,42 +210,42 @@ DocumentWatcher - + File Changed Filen ändrad - + The file '%1' was changed by another program. Filen "%1" har ändrats av ett annat program. - + Do you want to reload the file? Vill du läsa om filen? - + Reload Läs om - + Ignore Ignorera - + File Deleted Fil raderad - + The file %1 was deleted by another program. Filen %1 togs bort av ett annat program. - + Do you want to save or close the file? Vill du spara eller stänga filen? diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index cadc7ba0..68a7d0ef 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed Dosya Değişti - + The file '%1' was changed by another program. '%1' dosyası başka bir program tarafından değiştirilmiş. - + Do you want to reload the file? Dosyayı yeniden yüklemek ister misiniz? - + Reload Yeniden Yükle - + Ignore Yoksay - + File Deleted Dosya Silindi - + The file %1 was deleted by another program. %1 dosyası başka bir program tarafından silindi. - + Do you want to save or close the file? Dosyayı kaydetmek mi kapatmak mı istiyorsunuz? diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 27d95761..a6a3073a 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -215,42 +215,42 @@ DocumentWatcher - + File Changed Файл змінено - + The file '%1' was changed by another program. Файл '%1' був змінений в іншій програмі. - + Do you want to reload the file? Хочете відкрити цей файл заново? - + Reload Відкрити заново - + Ignore Пропустити - + File Deleted Файл видалений - + The file %1 was deleted by another program. Файл %1 видалений іншою програмою. - + Do you want to save or close the file? Ви хочете зберегти чи закрити файл? diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 10a84fce..74b8c1d8 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed Đã thay đổi tập tin - + The file '%1' was changed by another program. - + Do you want to reload the file? Bạn có muốn tải lại tập tin? - + Reload Tải lại - + Ignore Bỏ qua - + File Deleted Đã xóa tập tin - + The file %1 was deleted by another program. Tập tin %1 đã bị xóa bởi một ứng dụng khác. - + Do you want to save or close the file? Bạn có muốn lưu hoặc đóng lại tập tin này? diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index dbb449e4..6f507549 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed 文件已更改 - + The file '%1' was changed by another program. 文件 '%1' 已由其他程序更改。 - + Do you want to reload the file? 您要重新加载文件吗? - + Reload 重新加载 - + Ignore 忽略 - + File Deleted 文件已删除 - + The file %1 was deleted by another program. 文件 %1 已经由其他程序删除。 - + Do you want to save or close the file? 您要保存或关闭该文件? diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index ee2afc95..f378a3f1 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -205,42 +205,42 @@ DocumentWatcher - + File Changed - + The file '%1' was changed by another program. - + Do you want to reload the file? - + Reload - + Ignore - + File Deleted - + The file %1 was deleted by another program. - + Do you want to save or close the file? From 3089f5c5cd88ab0cc469a4ad90ea3028f255e04e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 4 Sep 2015 11:22:13 -0400 Subject: [PATCH 262/630] FIXED: Themes did not always forget changes. --- src/theme_dialog.cpp | 9 +++++++++ src/theme_dialog.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index ec53f2f9..8d81b3ea 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -460,6 +460,14 @@ void ThemeDialog::accept() //----------------------------------------------------------------------------- +void ThemeDialog::reject() +{ + m_theme.forgetChanges(); + QDialog::reject(); +} + +//----------------------------------------------------------------------------- + void ThemeDialog::hideEvent(QHideEvent* event) { QSettings().setValue("ThemeDialog/Size", size()); @@ -571,6 +579,7 @@ void ThemeDialog::renderPreview() Theme theme; setValues(theme); theme.setBackgroundImage(m_background_image->image()); + theme.forgetChanges(); // Render theme m_theme_renderer->create(theme, QSize(1920, 1080)); diff --git a/src/theme_dialog.h b/src/theme_dialog.h index f8a20864..a79992ee 100644 --- a/src/theme_dialog.h +++ b/src/theme_dialog.h @@ -49,6 +49,7 @@ class ThemeDialog : public QDialog public slots: virtual void accept(); + virtual void reject(); protected: virtual void hideEvent(QHideEvent* event); From 2e2f9f307f8a37806a6b5b96937239d42ddd80ba Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 4 Sep 2015 16:31:22 -0400 Subject: [PATCH 263/630] Bump version number. --- NEWS | 11 +++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 5 ++--- windows_deploy.bat | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 4811a2bc..48388783 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +1.5.5 +----- +* Added support for pasting RTF in Windows. +* Switched back to dynamic builds for Windows. +* Updated dictionaries. +* FIXED: Themes did not always forget changes. +* FIXED: Treated every paragraph as a scene when divider is empty. +* FIXED: Switched tabs during autosave. +* FIXED: Allowed pasting and saving invalid null character. +* Translation updates: Catalan, Esperanto, Lithuanian, Portuguese (Brazil). + 1.5.4.1 ------- * FIXED: Compile failure with Qt 5.5. diff --git a/focuswriter.pro b/focuswriter.pro index c27a75e5..92e7ac3b 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -32,7 +32,7 @@ macx { } # Set program version -VERSION = 1.5.4.1 +VERSION = 1.5.5 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index c7c569ac..2d8bcae5 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.4.1' +VERSION='1.5.5' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index b627ca60..9ff3d7e4 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,9 +4,8 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 4 -!define VERSIONMICRO 1 -!define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}.${VERSIONMICRO}" +!define VERSIONPATCH 5 +!define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" ;-------------------------------- diff --git a/windows_deploy.bat b/windows_deploy.bat index 89abb72e..9c4ce82d 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.4.1 +SET VERSION=1.5.5 ECHO Copying executable MKDIR %APP% From 3a4703b671171b67ebc9bcd62315cdac31b16b74 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 4 Sep 2015 16:41:32 -0400 Subject: [PATCH 264/630] Log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 74f0a6f8..f5a49b9d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.5-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Fri, 04 Sep 2015 20:34:14 +0000 + focuswriter (1.5.4.1-1) unstable; urgency=medium * New upstream release From 506746a992c5372f189f65f9fb27c8c85c17f095 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 10 Feb 2016 05:21:02 -0500 Subject: [PATCH 265/630] FIXED: Themes still did not always forget changes. --- src/main.cpp | 3 ++- src/theme.cpp | 11 +++++++++-- src/theme.h | 5 +++-- src/theme_dialog.cpp | 9 --------- src/theme_dialog.h | 1 - src/theme_manager.cpp | 3 ++- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 76e16074..b76f5a73 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -210,6 +210,7 @@ int main(int argc, char** argv) settings.remove("Text"); if (theme.isChanged()) { + theme.saveChanges(); settings.setValue("ThemeManager/Theme", theme.name()); } } diff --git a/src/theme.cpp b/src/theme.cpp index 2cd850d1..28af5fc2 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -116,6 +116,13 @@ Theme::Theme() //----------------------------------------------------------------------------- +Theme::Theme(const Theme& theme) : + d(theme.d) +{ +} + +//----------------------------------------------------------------------------- + Theme::Theme(const QString& id, bool is_default) { d = new ThemeData(id, is_default, true); @@ -126,7 +133,6 @@ Theme::Theme(const QString& id, bool is_default) Theme::~Theme() { - saveChanges(); } //----------------------------------------------------------------------------- @@ -152,6 +158,7 @@ QString Theme::clone(const QString& id, bool is_default, const QString& name) Theme duplicate(id, is_default); duplicate.setValue(duplicate.d->name, new_name); duplicate.setValue(duplicate.d->id, new_id); + duplicate.saveChanges(); } // Copy icon diff --git a/src/theme.h b/src/theme.h index 2c42da11..3262ee81 100644 --- a/src/theme.h +++ b/src/theme.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2009, 2010, 2012, 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -79,10 +79,11 @@ class Theme : public SettingsFile RangedInt paragraph_spacing_below; RangedInt tab_width; }; - QExplicitlySharedDataPointer d; + QSharedDataPointer d; public: Theme(); + Theme(const Theme& theme); Theme(const QString& id, bool is_default); ~Theme(); diff --git a/src/theme_dialog.cpp b/src/theme_dialog.cpp index 8d81b3ea..ec53f2f9 100644 --- a/src/theme_dialog.cpp +++ b/src/theme_dialog.cpp @@ -460,14 +460,6 @@ void ThemeDialog::accept() //----------------------------------------------------------------------------- -void ThemeDialog::reject() -{ - m_theme.forgetChanges(); - QDialog::reject(); -} - -//----------------------------------------------------------------------------- - void ThemeDialog::hideEvent(QHideEvent* event) { QSettings().setValue("ThemeDialog/Size", size()); @@ -579,7 +571,6 @@ void ThemeDialog::renderPreview() Theme theme; setValues(theme); theme.setBackgroundImage(m_background_image->image()); - theme.forgetChanges(); // Render theme m_theme_renderer->create(theme, QSize(1920, 1080)); diff --git a/src/theme_dialog.h b/src/theme_dialog.h index a79992ee..f8a20864 100644 --- a/src/theme_dialog.h +++ b/src/theme_dialog.h @@ -49,7 +49,6 @@ class ThemeDialog : public QDialog public slots: virtual void accept(); - virtual void reject(); protected: virtual void hideEvent(QHideEvent* event); diff --git a/src/theme_manager.cpp b/src/theme_manager.cpp index 4a0ac3f8..15b6ad57 100644 --- a/src/theme_manager.cpp +++ b/src/theme_manager.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2012, 2014 Graeme Gott + * Copyright (C) 2009, 2010, 2012, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -384,6 +384,7 @@ void ThemeManager::importTheme() Theme theme(id, false); theme.setBackgroundImage(file.fileName()); + theme.saveChanges(); } theme_ini.sync(); From 57ada4666bd9f9ba8fee348c60ee7b0a5a14f8a2 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 21 Feb 2016 14:15:51 -0500 Subject: [PATCH 266/630] FIXED: Replace all did not update spellchecking. --- src/find_dialog.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/find_dialog.cpp b/src/find_dialog.cpp index 372e39df..db839b86 100644 --- a/src/find_dialog.cpp +++ b/src/find_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -288,7 +288,6 @@ void FindDialog::replaceAll() cursor = document->document()->find(text, cursor, flags); if (!cursor.isNull()) { cursor.insertText(m_replace_string->text()); - document->setTextCursor(cursor); } else { break; } @@ -300,7 +299,6 @@ void FindDialog::replaceAll() QString match = cursor.selectedText(); match.replace(regex, m_replace_string->text()); cursor.insertText(match); - document->setTextCursor(cursor); } else { break; } From 774e0db98400a85a1d026a99ca846ae4a6d666a4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 2 Mar 2015 20:19:33 -0500 Subject: [PATCH 267/630] Add missing header. --- src/fileformats/rtf_writer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fileformats/rtf_writer.cpp b/src/fileformats/rtf_writer.cpp index fddf1e8f..fc6c90c7 100644 --- a/src/fileformats/rtf_writer.cpp +++ b/src/fileformats/rtf_writer.cpp @@ -28,6 +28,8 @@ #ifdef Q_OS_WIN #include +#else +#include #endif //----------------------------------------------------------------------------- From fd0934966b21f7010356e59c679dc85795cd82e0 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 6 Apr 2016 14:19:04 +0100 Subject: [PATCH 268/630] bump standards version and URL protocols in debian/control --- debian/control | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/control b/debian/control index e9ccc54c..dd1e4433 100644 --- a/debian/control +++ b/debian/control @@ -9,10 +9,10 @@ Build-Depends: debhelper (>= 9), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 3.9.6 -Homepage: http://gottcode.org/focuswriter/ +Standards-Version: 3.9.7 +Homepage: https://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git +Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git Package: focuswriter Architecture: any From 824d7739d44b2278136cbc0d64ea3a98efa36a91 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 6 Apr 2016 14:24:41 +0100 Subject: [PATCH 269/630] enable more hardening --- debian/rules | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/debian/rules b/debian/rules index cdf85c51..59c32f41 100755 --- a/debian/rules +++ b/debian/rules @@ -2,6 +2,10 @@ export QT_SELECT = 5 +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/buildflags.mk + %: dh $@ --parallel From ac136431528467635023f1b96f7b631efb42112a Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 6 Apr 2016 14:21:55 +0100 Subject: [PATCH 270/630] debian/menu files are deprecated, desktop only --- debian/menu | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 debian/menu diff --git a/debian/menu b/debian/menu deleted file mode 100644 index 5367bcdb..00000000 --- a/debian/menu +++ /dev/null @@ -1,7 +0,0 @@ -?package(focuswriter):\ - needs="x11"\ - section="Applications/Editors"\ - title="Focuswriter"\ - longtitle="Fullscreen word processor"\ - icon="/usr/share/pixmaps/focuswriter.xpm"\ - command="/usr/bin/focuswriter" From b94e2c81a91cfb88675e36cb63540b0c51274954 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 6 Apr 2016 12:51:38 +0100 Subject: [PATCH 271/630] log changes --- debian/changelog | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/debian/changelog b/debian/changelog index f5a49b9d..364f4ced 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +focuswriter (1.5.5-2) unstable; urgency=medium + + * merge upstream stable branch fixes + * enable more hardening + * remove debian/menu + * bump debian standards version + * use more secure protocols for URLs in debian/control + + -- Barak A. Pearlmutter Wed, 06 Apr 2016 14:25:51 +0100 + focuswriter (1.5.5-1) unstable; urgency=medium * New upstream release From 00041b1907aadd95c134f3b63ee3e61565867608 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Apr 2016 14:08:04 -0400 Subject: [PATCH 272/630] FIXED: Did not remember some default formats. --- src/preferences.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/preferences.cpp b/src/preferences.cpp index 3ed509c2..19760307 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -566,10 +566,6 @@ void Preferences::reload() m_save_positions = settings.value("Save/RememberPositions", true).toBool(); m_write_bom = settings.value("Save/WriteBOM", true).toBool(); m_save_format = settings.value("Save/DefaultFormat", "odt").toString(); - const QStringList formats = QStringList() << "odt" << "rtf" << "txt"; - if (!formats.contains(m_save_format)) { - m_save_format = "odt"; - } m_toolbar_style = settings.value("Toolbar/Style", QApplication::style()->styleHint(QStyle::SH_ToolButtonStyle)).toInt(); m_toolbar_actions = QStringList() << "New" << "Open" << "Save" << "|" << "Undo" << "Redo" << "|" << "Cut" << "Copy" << "Paste" << "|" << "Find" << "Replace" << "|" << "Themes"; From 867aa8e675de9ca6263742841226bfa171234805 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 21 Jun 2016 15:43:58 -0400 Subject: [PATCH 273/630] Add missing header. --- src/daily_progress.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/daily_progress.cpp b/src/daily_progress.cpp index 6da48674..eae80526 100644 --- a/src/daily_progress.cpp +++ b/src/daily_progress.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013 Graeme Gott + * Copyright (C) 2013, 2014, 2015, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +25,8 @@ #include #include +#include + //----------------------------------------------------------------------------- QString DailyProgress::m_path; From 10fad6225fb1981d223ddfc626535b34eeae161a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 21 Jun 2016 15:48:41 -0400 Subject: [PATCH 274/630] Update hunspell to 1.4.1. --- src/spelling/hunspell/Makefile.am | 18 +- src/spelling/hunspell/Makefile.in | 334 +- src/spelling/hunspell/README | 2 +- src/spelling/hunspell/affentry.cxx | 1629 +- src/spelling/hunspell/affentry.hxx | 302 +- src/spelling/hunspell/affixmgr.cxx | 7555 +++--- src/spelling/hunspell/affixmgr.hxx | 586 +- src/spelling/hunspell/atypes.hxx | 146 +- src/spelling/hunspell/baseaffix.hxx | 93 +- src/spelling/hunspell/csutil.cxx | 7997 ++---- src/spelling/hunspell/csutil.hxx | 334 +- src/spelling/hunspell/dictmgr.cxx | 182 - src/spelling/hunspell/dictmgr.hxx | 39 - src/spelling/hunspell/filemgr.cxx | 137 +- src/spelling/hunspell/filemgr.hxx | 105 +- src/spelling/hunspell/hashmgr.cxx | 1575 +- src/spelling/hunspell/hashmgr.hxx | 174 +- src/spelling/hunspell/htypes.hxx | 69 +- src/spelling/hunspell/hunspell.cxx | 3093 ++- src/spelling/hunspell/hunspell.dsp | 8 - src/spelling/hunspell/hunspell.h | 157 +- src/spelling/hunspell/hunspell.hxx | 280 +- src/spelling/hunspell/hunzip.cxx | 385 +- src/spelling/hunspell/hunzip.hxx | 92 +- src/spelling/hunspell/langnum.hxx | 92 +- src/spelling/hunspell/license.hunspell | 4 +- src/spelling/hunspell/makefile.mk | 65 - src/spelling/hunspell/phonet.cxx | 415 +- src/spelling/hunspell/phonet.hxx | 24 +- src/spelling/hunspell/replist.cxx | 226 +- src/spelling/hunspell/replist.hxx | 117 +- src/spelling/hunspell/suggestmgr.cxx | 3007 +-- src/spelling/hunspell/suggestmgr.hxx | 249 +- src/spelling/hunspell/utf_info.cxx | 29549 ++++++++--------------- src/spelling/hunspell/w_char.hxx | 68 +- 35 files changed, 24125 insertions(+), 34983 deletions(-) delete mode 100644 src/spelling/hunspell/dictmgr.cxx delete mode 100644 src/spelling/hunspell/dictmgr.hxx delete mode 100644 src/spelling/hunspell/makefile.mk diff --git a/src/spelling/hunspell/Makefile.am b/src/spelling/hunspell/Makefile.am index 642218ba..762c73b8 100644 --- a/src/spelling/hunspell/Makefile.am +++ b/src/spelling/hunspell/Makefile.am @@ -1,19 +1,19 @@ -lib_LTLIBRARIES = libhunspell-1.3.la -libhunspell_1_3_includedir = $(includedir)/hunspell -libhunspell_1_3_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ - dictmgr.cxx hashmgr.cxx hunspell.cxx \ +lib_LTLIBRARIES = libhunspell-1.4.la +libhunspell_1_4_includedir = $(includedir)/hunspell +libhunspell_1_4_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ + hashmgr.cxx hunspell.cxx \ suggestmgr.cxx license.myspell license.hunspell \ phonet.cxx filemgr.cxx hunzip.cxx replist.cxx -libhunspell_1_3_include_HEADERS=affentry.hxx htypes.hxx affixmgr.hxx \ - csutil.hxx hunspell.hxx atypes.hxx dictmgr.hxx hunspell.h \ +libhunspell_1_4_include_HEADERS=affentry.hxx htypes.hxx affixmgr.hxx \ + csutil.hxx hunspell.hxx atypes.hxx hunspell.h \ suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \ phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx replist.hxx \ hunvisapi.h -libhunspell_1_3_la_DEPENDENCIES=utf_info.cxx -libhunspell_1_3_la_LDFLAGS=-no-undefined +libhunspell_1_4_la_DEPENDENCIES=utf_info.cxx +libhunspell_1_4_la_LDFLAGS=-no-undefined AM_CXXFLAGS=$(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL -EXTRA_DIST=hunspell.dsp makefile.mk README utf_info.cxx +EXTRA_DIST=hunspell.dsp README utf_info.cxx diff --git a/src/spelling/hunspell/Makefile.in b/src/spelling/hunspell/Makefile.in index 86b70c2c..b394a800 100644 --- a/src/spelling/hunspell/Makefile.in +++ b/src/spelling/hunspell/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,6 +16,61 @@ VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -37,9 +91,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/hunspell -DIST_COMMON = README $(libhunspell_1_3_include_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/hunvisapi.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \ @@ -61,6 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libhunspell_1_4_include_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = hunvisapi.h @@ -93,38 +146,89 @@ am__uninstall_files_from_dir = { \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(libhunspell_1_3_includedir)" + "$(DESTDIR)$(libhunspell_1_4_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) -libhunspell_1_3_la_LIBADD = -am_libhunspell_1_3_la_OBJECTS = affentry.lo affixmgr.lo csutil.lo \ - dictmgr.lo hashmgr.lo hunspell.lo suggestmgr.lo phonet.lo \ - filemgr.lo hunzip.lo replist.lo -libhunspell_1_3_la_OBJECTS = $(am_libhunspell_1_3_la_OBJECTS) -libhunspell_1_3_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libhunspell_1_3_la_LDFLAGS) $(LDFLAGS) -o $@ +libhunspell_1_4_la_LIBADD = +am_libhunspell_1_4_la_OBJECTS = affentry.lo affixmgr.lo csutil.lo \ + hashmgr.lo hunspell.lo suggestmgr.lo phonet.lo filemgr.lo \ + hunzip.lo replist.lo +libhunspell_1_4_la_OBJECTS = $(am_libhunspell_1_4_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libhunspell_1_4_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(libhunspell_1_4_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libhunspell_1_3_la_SOURCES) -DIST_SOURCES = $(libhunspell_1_3_la_SOURCES) -HEADERS = $(libhunspell_1_3_include_HEADERS) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(libhunspell_1_4_la_SOURCES) +DIST_SOURCES = $(libhunspell_1_4_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(libhunspell_1_4_include_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/hunvisapi.h.in \ + $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ @@ -296,23 +400,23 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -lib_LTLIBRARIES = libhunspell-1.3.la -libhunspell_1_3_includedir = $(includedir)/hunspell -libhunspell_1_3_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \ - dictmgr.cxx hashmgr.cxx hunspell.cxx \ +lib_LTLIBRARIES = libhunspell-1.4.la +libhunspell_1_4_includedir = $(includedir)/hunspell +libhunspell_1_4_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \ + hashmgr.cxx hunspell.cxx \ suggestmgr.cxx license.myspell license.hunspell \ phonet.cxx filemgr.cxx hunzip.cxx replist.cxx -libhunspell_1_3_include_HEADERS = affentry.hxx htypes.hxx affixmgr.hxx \ - csutil.hxx hunspell.hxx atypes.hxx dictmgr.hxx hunspell.h \ +libhunspell_1_4_include_HEADERS = affentry.hxx htypes.hxx affixmgr.hxx \ + csutil.hxx hunspell.hxx atypes.hxx hunspell.h \ suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \ phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx replist.hxx \ hunvisapi.h -libhunspell_1_3_la_DEPENDENCIES = utf_info.cxx -libhunspell_1_3_la_LDFLAGS = -no-undefined +libhunspell_1_4_la_DEPENDENCIES = utf_info.cxx +libhunspell_1_4_la_LDFLAGS = -no-undefined AM_CXXFLAGS = $(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL -EXTRA_DIST = hunspell.dsp makefile.mk README utf_info.cxx +EXTRA_DIST = hunspell.dsp README utf_info.cxx all: all-am .SUFFIXES: @@ -329,7 +433,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/hunspell/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/hunspell/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -349,9 +452,9 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): hunvisapi.h: $(top_builddir)/config.status $(srcdir)/hunvisapi.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -359,6 +462,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } @@ -374,14 +479,17 @@ uninstall-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libhunspell-1.3.la: $(libhunspell_1_3_la_OBJECTS) $(libhunspell_1_3_la_DEPENDENCIES) $(EXTRA_libhunspell_1_3_la_DEPENDENCIES) - $(libhunspell_1_3_la_LINK) -rpath $(libdir) $(libhunspell_1_3_la_OBJECTS) $(libhunspell_1_3_la_LIBADD) $(LIBS) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libhunspell-1.4.la: $(libhunspell_1_4_la_OBJECTS) $(libhunspell_1_4_la_DEPENDENCIES) $(EXTRA_libhunspell_1_4_la_DEPENDENCIES) + $(AM_V_CXXLD)$(libhunspell_1_4_la_LINK) -rpath $(libdir) $(libhunspell_1_4_la_OBJECTS) $(libhunspell_1_4_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -392,7 +500,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affentry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affixmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dictmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filemgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hunspell.Plo@am__quote@ @@ -402,70 +509,62 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suggestmgr.Plo@am__quote@ .cxx.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -install-libhunspell_1_3_includeHEADERS: $(libhunspell_1_3_include_HEADERS) +install-libhunspell_1_4_includeHEADERS: $(libhunspell_1_4_include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(libhunspell_1_3_includedir)" || $(MKDIR_P) "$(DESTDIR)$(libhunspell_1_3_includedir)" - @list='$(libhunspell_1_3_include_HEADERS)'; test -n "$(libhunspell_1_3_includedir)" || list=; \ + @list='$(libhunspell_1_4_include_HEADERS)'; test -n "$(libhunspell_1_4_includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libhunspell_1_4_includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libhunspell_1_4_includedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libhunspell_1_3_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libhunspell_1_3_includedir)" || exit $$?; \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libhunspell_1_4_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libhunspell_1_4_includedir)" || exit $$?; \ done -uninstall-libhunspell_1_3_includeHEADERS: +uninstall-libhunspell_1_4_includeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(libhunspell_1_3_include_HEADERS)'; test -n "$(libhunspell_1_3_includedir)" || list=; \ + @list='$(libhunspell_1_4_include_HEADERS)'; test -n "$(libhunspell_1_4_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libhunspell_1_3_includedir)'; $(am__uninstall_files_from_dir) - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) + dir='$(DESTDIR)$(libhunspell_1_4_includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -477,15 +576,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -494,6 +589,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -532,7 +642,7 @@ check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libhunspell_1_3_includedir)"; do \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libhunspell_1_4_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -588,7 +698,7 @@ info: info-am info-am: -install-data-am: install-libhunspell_1_3_includeHEADERS +install-data-am: install-libhunspell_1_4_includeHEADERS install-dvi: install-dvi-am @@ -635,25 +745,27 @@ ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_3_includeHEADERS + uninstall-libhunspell_1_4_includeHEADERS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-libhunspell_1_3_includeHEADERS \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_3_includeHEADERS +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES \ + install-libhunspell_1_4_includeHEADERS install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ + uninstall-libhunspell_1_4_includeHEADERS + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/src/spelling/hunspell/README b/src/spelling/hunspell/README index b4520962..b97a112f 100644 --- a/src/spelling/hunspell/README +++ b/src/spelling/hunspell/README @@ -1,6 +1,6 @@ Hunspell spell checker and morphological analyser library -Documentation, tests, examples: http://hunspell.sourceforge.net +Documentation, tests, examples: http://hunspell.github.io/ Author of Hunspell: László Németh (nemethl (at) gyorsposta.hu) diff --git a/src/spelling/hunspell/affentry.cxx b/src/spelling/hunspell/affentry.cxx index 45c9ef58..bd282743 100644 --- a/src/spelling/hunspell/affentry.cxx +++ b/src/spelling/hunspell/affentry.cxx @@ -1,5 +1,75 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #include #include @@ -9,876 +79,875 @@ #include "affentry.hxx" #include "csutil.hxx" -#define MAXTEMPWORDLEN (MAXWORDUTF8LEN + 4) - PfxEntry::PfxEntry(AffixMgr* pmgr, affentry* dp) // register affix manager - : pmyMgr(pmgr) - , next(NULL) - , nexteq(NULL) - , nextne(NULL) - , flgnxt(NULL) -{ + : pmyMgr(pmgr), + next(NULL), + nexteq(NULL), + nextne(NULL), + flgnxt(NULL) { // set up its initial values - aflag = dp->aflag; // flag - strip = dp->strip; // string to strip - appnd = dp->appnd; // string to append - stripl = dp->stripl; // length of strip string - appndl = dp->appndl; // length of append string - numconds = dp->numconds; // length of the condition - opts = dp->opts; // cross product flag + aflag = dp->aflag; // flag + strip = dp->strip; // string to strip + appnd = dp->appnd; // string to append + numconds = dp->numconds; // length of the condition + opts = dp->opts; // cross product flag // then copy over all of the conditions if (opts & aeLONGCOND) { memcpy(c.conds, dp->c.l.conds1, MAXCONDLEN_1); c.l.conds2 = dp->c.l.conds2; - } else memcpy(c.conds, dp->c.conds, MAXCONDLEN); + } else + memcpy(c.conds, dp->c.conds, MAXCONDLEN); morphcode = dp->morphcode; contclass = dp->contclass; contclasslen = dp->contclasslen; } - -PfxEntry::~PfxEntry() -{ - aflag = 0; - if (appnd) free(appnd); - if (strip) free(strip); - pmyMgr = NULL; - appnd = NULL; - strip = NULL; - if (opts & aeLONGCOND) free(c.l.conds2); - if (morphcode && !(opts & aeALIASM)) free(morphcode); - if (contclass && !(opts & aeALIASF)) free(contclass); +PfxEntry::~PfxEntry() { + aflag = 0; + pmyMgr = NULL; + if (opts & aeLONGCOND) + free(c.l.conds2); + if (morphcode && !(opts & aeALIASM)) + free(morphcode); + if (contclass && !(opts & aeALIASF)) + free(contclass); } // add prefix to this word assuming conditions hold -char * PfxEntry::add(const char * word, int len) -{ - char tword[MAXTEMPWORDLEN]; - - if ((len > stripl || (len == 0 && pmyMgr->get_fullstrip())) && - (len >= numconds) && test_condition(word) && - (!stripl || (strncmp(word, strip, stripl) == 0)) && - ((MAXTEMPWORDLEN) > (len + appndl - stripl))) { +char* PfxEntry::add(const char* word, size_t len) { + if ((len > strip.size() || (len == 0 && pmyMgr->get_fullstrip())) && + (len >= numconds) && test_condition(word) && + (!strip.size() || (strncmp(word, strip.c_str(), strip.size()) == 0))) { /* we have a match so add prefix */ - char * pp = tword; - if (appndl) { - strncpy(tword, appnd, MAXTEMPWORDLEN-1); - tword[MAXTEMPWORDLEN-1] = '\0'; - pp += appndl; - } - strcpy(pp, (word + stripl)); - return mystrdup(tword); - } - return NULL; + std::string tword(appnd); + tword.append(word + strip.size()); + return mystrdup(tword.c_str()); + } + return NULL; } -inline char * PfxEntry::nextchar(char * p) { - if (p) { - p++; - if (opts & aeLONGCOND) { - // jump to the 2nd part of the condition - if (p == c.conds + MAXCONDLEN_1) return c.l.conds2; - // end of the MAXCONDLEN length condition - } else if (p == c.conds + MAXCONDLEN) return NULL; - return *p ? p : NULL; - } - return NULL; +inline char* PfxEntry::nextchar(char* p) { + if (p) { + p++; + if (opts & aeLONGCOND) { + // jump to the 2nd part of the condition + if (p == c.conds + MAXCONDLEN_1) + return c.l.conds2; + // end of the MAXCONDLEN length condition + } else if (p == c.conds + MAXCONDLEN) + return NULL; + return *p ? p : NULL; + } + return NULL; } -inline int PfxEntry::test_condition(const char * st) -{ - const char * pos = NULL; // group with pos input position - bool neg = false; // complementer - bool ingroup = false; // character in the group - if (numconds == 0) return 1; - char * p = c.conds; - while (1) { - switch (*p) { - case '\0': return 1; - case '[': { - neg = false; - ingroup = false; - p = nextchar(p); - pos = st; break; - } - case '^': { p = nextchar(p); neg = true; break; } - case ']': { - if ((neg && ingroup) || (!neg && !ingroup)) return 0; - pos = NULL; - p = nextchar(p); - // skip the next character - if (!ingroup && *st) for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++); - if (*st == '\0' && p) return 0; // word <= condition +inline int PfxEntry::test_condition(const char* st) { + const char* pos = NULL; // group with pos input position + bool neg = false; // complementer + bool ingroup = false; // character in the group + if (numconds == 0) + return 1; + char* p = c.conds; + while (1) { + switch (*p) { + case '\0': + return 1; + case '[': { + neg = false; + ingroup = false; + p = nextchar(p); + pos = st; + break; + } + case '^': { + p = nextchar(p); + neg = true; + break; + } + case ']': { + if ((neg && ingroup) || (!neg && !ingroup)) + return 0; + pos = NULL; + p = nextchar(p); + // skip the next character + if (!ingroup && *st) + for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++) + ; + if (*st == '\0' && p) + return 0; // word <= condition + break; + } + case '.': + if (!pos) { // dots are not metacharacters in groups: [.] + p = nextchar(p); + // skip the next character + for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++) + ; + if (*st == '\0' && p) + return 0; // word <= condition + break; + } + /* FALLTHROUGH */ + default: { + if (*st == *p) { + st++; + p = nextchar(p); + if ((opts & aeUTF8) && (*(st - 1) & 0x80)) { // multibyte + while (p && (*p & 0xc0) == 0x80) { // character + if (*p != *st) { + if (!pos) + return 0; + st = pos; break; + } + p = nextchar(p); + st++; } - case '.': - if (!pos) { // dots are not metacharacters in groups: [.] - p = nextchar(p); - // skip the next character - for (st++; (opts & aeUTF8) && (*st & 0xc0) == 0x80; st++); - if (*st == '\0' && p) return 0; // word <= condition - break; + if (pos && st != pos) { + ingroup = true; + while (p && *p != ']' && ((p = nextchar(p)) != NULL)) { + } } - /* FALLTHROUGH */ - default: { - if (*st == *p) { - st++; - p = nextchar(p); - if ((opts & aeUTF8) && (*(st - 1) & 0x80)) { // multibyte - while (p && (*p & 0xc0) == 0x80) { // character - if (*p != *st) { - if (!pos) return 0; - st = pos; - break; - } - p = nextchar(p); - st++; - } - if (pos && st != pos) { - ingroup = true; - while (p && *p != ']' && ((p = nextchar(p)) != NULL)); - } - } else if (pos) { - ingroup = true; - while (p && *p != ']' && ((p = nextchar(p)) != NULL)); - } - } else if (pos) { // group - p = nextchar(p); - } else return 0; + } else if (pos) { + ingroup = true; + while (p && *p != ']' && ((p = nextchar(p)) != NULL)) { } + } + } else if (pos) { // group + p = nextchar(p); + } else + return 0; } - if (!p) return 1; } + if (!p) + return 1; + } } // check if this prefix entry matches -struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound, const FLAG needflag) -{ - int tmpl; // length of tmpword - struct hentry * he; // hash entry of root word or NULL - char tmpword[MAXTEMPWORDLEN]; - - // on entry prefix is 0 length or already matches the beginning of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; - - if (tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) { - - // generate new root word by removing prefix and adding - // back any characters that would have been stripped +struct hentry* PfxEntry::checkword(const char* word, + int len, + char in_compound, + const FLAG needflag) { + struct hentry* he; // hash entry of root word or NULL + + // on entry prefix is 0 length or already matches the beginning of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if (tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) { + // generate new root word by removing prefix and adding + // back any characters that would have been stripped + + std::string tmpword(strip); + tmpword.append(word + appnd.size()); + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (test_condition(tmpword.c_str())) { + tmpl += strip.size(); + if ((he = pmyMgr->lookup(tmpword.c_str())) != NULL) { + do { + if (TESTAFF(he->astr, aflag, he->alen) && + // forbid single prefixes with needaffix flag + !TESTAFF(contclass, pmyMgr->get_needaffix(), contclasslen) && + // needflag + ((!needflag) || TESTAFF(he->astr, needflag, he->alen) || + (contclass && TESTAFF(contclass, needflag, contclasslen)))) + return he; + he = he->next_homonym; // check homonyms + } while (he); + } - if (stripl) { - strncpy(tmpword, strip, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - } - strcpy ((tmpword + stripl), (word + appndl)); - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then check if resulting - // root word in the dictionary - - if (test_condition(tmpword)) { - tmpl += stripl; - if ((he = pmyMgr->lookup(tmpword)) != NULL) { - do { - if (TESTAFF(he->astr, aflag, he->alen) && - // forbid single prefixes with needaffix flag - ! TESTAFF(contclass, pmyMgr->get_needaffix(), contclasslen) && - // needflag - ((!needflag) || TESTAFF(he->astr, needflag, he->alen) || - (contclass && TESTAFF(contclass, needflag, contclasslen)))) - return he; - he = he->next_homonym; // check homonyms - } while (he); - } - - // prefix matched but no root word was found - // if aeXPRODUCT is allowed, try again but now - // ross checked combined with a suffix - - //if ((opts & aeXPRODUCT) && in_compound) { - if ((opts & aeXPRODUCT)) { - he = pmyMgr->suffix_check(tmpword, tmpl, aeXPRODUCT, this, NULL, - 0, NULL, FLAG_NULL, needflag, in_compound); - if (he) return he; - } - } - } - return NULL; + // prefix matched but no root word was found + // if aeXPRODUCT is allowed, try again but now + // ross checked combined with a suffix + + // if ((opts & aeXPRODUCT) && in_compound) { + if ((opts & aeXPRODUCT)) { + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, aeXPRODUCT, this, + NULL, 0, NULL, FLAG_NULL, needflag, + in_compound); + if (he) + return he; + } + } + } + return NULL; } // check if this prefix entry matches -struct hentry * PfxEntry::check_twosfx(const char * word, int len, - char in_compound, const FLAG needflag) -{ - int tmpl; // length of tmpword - struct hentry * he; // hash entry of root word or NULL - char tmpword[MAXTEMPWORDLEN]; - - // on entry prefix is 0 length or already matches the beginning of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; - - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { - - // generate new root word by removing prefix and adding - // back any characters that would have been stripped - - if (stripl) { - strncpy(tmpword, strip, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - } - strcpy ((tmpword + stripl), (word + appndl)); - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then check if resulting - // root word in the dictionary - - if (test_condition(tmpword)) { - tmpl += stripl; - - // prefix matched but no root word was found - // if aeXPRODUCT is allowed, try again but now - // cross checked combined with a suffix - - if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - he = pmyMgr->suffix_check_twosfx(tmpword, tmpl, aeXPRODUCT, this, needflag); - if (he) return he; - } - } - } - return NULL; +struct hentry* PfxEntry::check_twosfx(const char* word, + int len, + char in_compound, + const FLAG needflag) { + struct hentry* he; // hash entry of root word or NULL + + // on entry prefix is 0 length or already matches the beginning of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing prefix and adding + // back any characters that would have been stripped + + std::string tmpword(strip); + tmpword.append(word + appnd.size()); + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (test_condition(tmpword.c_str())) { + tmpl += strip.size(); + + // prefix matched but no root word was found + // if aeXPRODUCT is allowed, try again but now + // cross checked combined with a suffix + + if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { + he = pmyMgr->suffix_check_twosfx(tmpword.c_str(), tmpl, aeXPRODUCT, this, + needflag); + if (he) + return he; + } + } + } + return NULL; } // check if this prefix entry matches -char * PfxEntry::check_twosfx_morph(const char * word, int len, - char in_compound, const FLAG needflag) -{ - int tmpl; // length of tmpword - char tmpword[MAXTEMPWORDLEN]; - - // on entry prefix is 0 length or already matches the beginning of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; - - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { - - // generate new root word by removing prefix and adding - // back any characters that would have been stripped - - if (stripl) { - strncpy(tmpword, strip, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - } - strcpy ((tmpword + stripl), (word + appndl)); - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then check if resulting - // root word in the dictionary - - if (test_condition(tmpword)) { - tmpl += stripl; - - // prefix matched but no root word was found - // if aeXPRODUCT is allowed, try again but now - // ross checked combined with a suffix - - if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - return pmyMgr->suffix_check_twosfx_morph(tmpword, tmpl, - aeXPRODUCT, this, needflag); - } - } - } - return NULL; +char* PfxEntry::check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + // on entry prefix is 0 length or already matches the beginning of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing prefix and adding + // back any characters that would have been stripped + + std::string tmpword(strip); + tmpword.append(word + appnd.size()); + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (test_condition(tmpword.c_str())) { + tmpl += strip.size(); + + // prefix matched but no root word was found + // if aeXPRODUCT is allowed, try again but now + // ross checked combined with a suffix + + if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { + return pmyMgr->suffix_check_twosfx_morph(tmpword.c_str(), tmpl, + aeXPRODUCT, + this, needflag); + } + } + } + return NULL; } // check if this prefix entry matches -char * PfxEntry::check_morph(const char * word, int len, char in_compound, const FLAG needflag) -{ - int tmpl; // length of tmpword - struct hentry * he; // hash entry of root word or NULL - char tmpword[MAXTEMPWORDLEN]; - char result[MAXLNLEN]; - char * st; - - *result = '\0'; - - // on entry prefix is 0 length or already matches the beginning of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; +char* PfxEntry::check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + struct hentry* he; // hash entry of root word or NULL + char* st; + + // on entry prefix is 0 length or already matches the beginning of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing prefix and adding + // back any characters that would have been stripped + + std::string tmpword(strip); + tmpword.append(word + appnd.size()); + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (test_condition(tmpword.c_str())) { + std::string result; + + tmpl += strip.size(); + if ((he = pmyMgr->lookup(tmpword.c_str())) != NULL) { + do { + if (TESTAFF(he->astr, aflag, he->alen) && + // forbid single prefixes with needaffix flag + !TESTAFF(contclass, pmyMgr->get_needaffix(), contclasslen) && + // needflag + ((!needflag) || TESTAFF(he->astr, needflag, he->alen) || + (contclass && TESTAFF(contclass, needflag, contclasslen)))) { + if (morphcode) { + result.append(" "); + result.append(morphcode); + } else + result.append(getKey()); + if (!HENTRY_FIND(he, MORPH_STEM)) { + result.append(" "); + result.append(MORPH_STEM); + result.append(HENTRY_WORD(he)); + } + // store the pointer of the hash entry + if (HENTRY_DATA(he)) { + result.append(" "); + result.append(HENTRY_DATA2(he)); + } else { + // return with debug information + char* flag = pmyMgr->encode_flag(getFlag()); + result.append(" "); + result.append(MORPH_FLAG); + result.append(flag); + free(flag); + } + result.append("\n"); + } + he = he->next_homonym; + } while (he); + } - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { + // prefix matched but no root word was found + // if aeXPRODUCT is allowed, try again but now + // ross checked combined with a suffix + + if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { + st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, aeXPRODUCT, this, + FLAG_NULL, needflag); + if (st) { + result.append(st); + free(st); + } + } - // generate new root word by removing prefix and adding - // back any characters that would have been stripped + if (!result.empty()) + return mystrdup(result.c_str()); + } + } - if (stripl) { - strncpy(tmpword, strip, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - } - strcpy ((tmpword + stripl), (word + appndl)); - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then check if resulting - // root word in the dictionary - - if (test_condition(tmpword)) { - tmpl += stripl; - if ((he = pmyMgr->lookup(tmpword)) != NULL) { - do { - if (TESTAFF(he->astr, aflag, he->alen) && - // forbid single prefixes with needaffix flag - ! TESTAFF(contclass, pmyMgr->get_needaffix(), contclasslen) && - // needflag - ((!needflag) || TESTAFF(he->astr, needflag, he->alen) || - (contclass && TESTAFF(contclass, needflag, contclasslen)))) { - if (morphcode) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, morphcode, MAXLNLEN); - } else mystrcat(result,getKey(), MAXLNLEN); - if (!HENTRY_FIND(he, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, HENTRY_WORD(he), MAXLNLEN); - } - // store the pointer of the hash entry - if (HENTRY_DATA(he)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(he), MAXLNLEN); - } else { - // return with debug information - char * flag = pmyMgr->encode_flag(getFlag()); - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_FLAG, MAXLNLEN); - mystrcat(result, flag, MAXLNLEN); - free(flag); - } - mystrcat(result, "\n", MAXLNLEN); - } - he = he->next_homonym; - } while (he); - } - - // prefix matched but no root word was found - // if aeXPRODUCT is allowed, try again but now - // ross checked combined with a suffix - - if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - st = pmyMgr->suffix_check_morph(tmpword, tmpl, aeXPRODUCT, this, - FLAG_NULL, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - } - } - } - - if (*result) return mystrdup(result); - return NULL; + return NULL; } -SfxEntry::SfxEntry(AffixMgr * pmgr, affentry* dp) - : pmyMgr(pmgr) // register affix manager - , next(NULL) - , nexteq(NULL) - , nextne(NULL) - , flgnxt(NULL) - , l_morph(NULL) - , r_morph(NULL) - , eq_morph(NULL) -{ +SfxEntry::SfxEntry(AffixMgr* pmgr, affentry* dp) + : pmyMgr(pmgr) // register affix manager + , + next(NULL), + nexteq(NULL), + nextne(NULL), + flgnxt(NULL), + l_morph(NULL), + r_morph(NULL), + eq_morph(NULL) { // set up its initial values - aflag = dp->aflag; // char flag - strip = dp->strip; // string to strip - appnd = dp->appnd; // string to append - stripl = dp->stripl; // length of strip string - appndl = dp->appndl; // length of append string - numconds = dp->numconds; // length of the condition - opts = dp->opts; // cross product flag + aflag = dp->aflag; // char flag + strip = dp->strip; // string to strip + appnd = dp->appnd; // string to append + numconds = dp->numconds; // length of the condition + opts = dp->opts; // cross product flag // then copy over all of the conditions if (opts & aeLONGCOND) { memcpy(c.l.conds1, dp->c.l.conds1, MAXCONDLEN_1); c.l.conds2 = dp->c.l.conds2; - } else memcpy(c.conds, dp->c.conds, MAXCONDLEN); - rappnd = myrevstrdup(appnd); + } else + memcpy(c.conds, dp->c.conds, MAXCONDLEN); + rappnd = appnd; + reverseword(rappnd); morphcode = dp->morphcode; contclass = dp->contclass; contclasslen = dp->contclasslen; } - -SfxEntry::~SfxEntry() -{ - aflag = 0; - if (appnd) free(appnd); - if (rappnd) free(rappnd); - if (strip) free(strip); - pmyMgr = NULL; - appnd = NULL; - strip = NULL; - if (opts & aeLONGCOND) free(c.l.conds2); - if (morphcode && !(opts & aeALIASM)) free(morphcode); - if (contclass && !(opts & aeALIASF)) free(contclass); +SfxEntry::~SfxEntry() { + aflag = 0; + pmyMgr = NULL; + if (opts & aeLONGCOND) + free(c.l.conds2); + if (morphcode && !(opts & aeALIASM)) + free(morphcode); + if (contclass && !(opts & aeALIASF)) + free(contclass); } // add suffix to this word assuming conditions hold -char * SfxEntry::add(const char * word, int len) -{ - char tword[MAXTEMPWORDLEN]; - - /* make sure all conditions match */ - if ((len > stripl || (len == 0 && pmyMgr->get_fullstrip())) && - (len >= numconds) && test_condition(word + len, word) && - (!stripl || (strcmp(word + len - stripl, strip) == 0)) && - ((MAXTEMPWORDLEN) > (len + appndl - stripl))) { - /* we have a match so add suffix */ - strncpy(tword, word, MAXTEMPWORDLEN-1); - tword[MAXTEMPWORDLEN-1] = '\0'; - if (appndl) { - strcpy(tword + len - stripl, appnd); - } else { - *(tword + len - stripl) = '\0'; - } - return mystrdup(tword); - } - return NULL; +char* SfxEntry::add(const char* word, size_t len) { + /* make sure all conditions match */ + if ((len > strip.size() || (len == 0 && pmyMgr->get_fullstrip())) && + (len >= numconds) && test_condition(word + len, word) && + (!strip.size() || + (strcmp(word + len - strip.size(), strip.c_str()) == 0))) { + std::string tword(word); + /* we have a match so add suffix */ + tword.replace(len - strip.size(), std::string::npos, appnd); + return mystrdup(tword.c_str()); + } + return NULL; } -inline char * SfxEntry::nextchar(char * p) { - if (p) { - p++; - if (opts & aeLONGCOND) { - // jump to the 2nd part of the condition - if (p == c.l.conds1 + MAXCONDLEN_1) return c.l.conds2; - // end of the MAXCONDLEN length condition - } else if (p == c.conds + MAXCONDLEN) return NULL; - return *p ? p : NULL; - } - return NULL; +inline char* SfxEntry::nextchar(char* p) { + if (p) { + p++; + if (opts & aeLONGCOND) { + // jump to the 2nd part of the condition + if (p == c.l.conds1 + MAXCONDLEN_1) + return c.l.conds2; + // end of the MAXCONDLEN length condition + } else if (p == c.conds + MAXCONDLEN) + return NULL; + return *p ? p : NULL; + } + return NULL; } -inline int SfxEntry::test_condition(const char * st, const char * beg) -{ - const char * pos = NULL; // group with pos input position - bool neg = false; // complementer - bool ingroup = false; // character in the group - if (numconds == 0) return 1; - char * p = c.conds; - st--; - int i = 1; - while (1) { - switch (*p) { - case '\0': - return 1; - case '[': - p = nextchar(p); - pos = st; - break; - case '^': - p = nextchar(p); - neg = true; - break; - case ']': - if (!neg && !ingroup) +inline int SfxEntry::test_condition(const char* st, const char* beg) { + const char* pos = NULL; // group with pos input position + bool neg = false; // complementer + bool ingroup = false; // character in the group + if (numconds == 0) + return 1; + char* p = c.conds; + st--; + int i = 1; + while (1) { + switch (*p) { + case '\0': + return 1; + case '[': + p = nextchar(p); + pos = st; + break; + case '^': + p = nextchar(p); + neg = true; + break; + case ']': + if (!neg && !ingroup) + return 0; + i++; + // skip the next character + if (!ingroup) { + for (; (opts & aeUTF8) && (st >= beg) && (*st & 0xc0) == 0x80; st--) + ; + st--; + } + pos = NULL; + neg = false; + ingroup = false; + p = nextchar(p); + if (st < beg && p) + return 0; // word <= condition + break; + case '.': + if (!pos) { + // dots are not metacharacters in groups: [.] + p = nextchar(p); + // skip the next character + for (st--; (opts & aeUTF8) && (st >= beg) && (*st & 0xc0) == 0x80; + st--) + ; + if (st < beg) { // word <= condition + if (p) return 0; - i++; - // skip the next character - if (!ingroup) - { - for (; (opts & aeUTF8) && (st >= beg) && (*st & 0xc0) == 0x80; st--); - st--; - } - pos = NULL; - neg = false; - ingroup = false; - p = nextchar(p); - if (st < beg && p) - return 0; // word <= condition - break; - case '.': - if (!pos) - { - // dots are not metacharacters in groups: [.] - p = nextchar(p); - // skip the next character - for (st--; (opts & aeUTF8) && (st >= beg) && (*st & 0xc0) == 0x80; st--); - if (st < beg) { // word <= condition - if (p) return 0; else return 1; - } - if ((opts & aeUTF8) && (*st & 0x80)) { // head of the UTF-8 character - st--; - if (st < beg) { // word <= condition - if (p) return 0; else return 1; - } - } + else + return 1; + } + if ((opts & aeUTF8) && (*st & 0x80)) { // head of the UTF-8 character + st--; + if (st < beg) { // word <= condition + if (p) + return 0; + else + return 1; + } + } + break; + } + /* FALLTHROUGH */ + default: { + if (*st == *p) { + p = nextchar(p); + if ((opts & aeUTF8) && (*st & 0x80)) { + st--; + while (p && (st >= beg)) { + if (*p != *st) { + if (!pos) + return 0; + st = pos; break; + } + // first byte of the UTF-8 multibyte character + if ((*p & 0xc0) != 0x80) + break; + p = nextchar(p); + st--; } - /* FALLTHROUGH */ - default: { - if (*st == *p) { - p = nextchar(p); - if ((opts & aeUTF8) && (*st & 0x80)) { - st--; - while (p && (st >= beg)) { - if (*p != *st) { - if (!pos) return 0; - st = pos; - break; - } - // first byte of the UTF-8 multibyte character - if ((*p & 0xc0) != 0x80) break; - p = nextchar(p); - st--; - } - if (pos && st != pos) { - if (neg) return 0; - else if (i == numconds) return 1; - ingroup = true; - while (p && *p != ']' && ((p = nextchar(p)) != NULL)); - st--; - } - if (p && *p != ']') p = nextchar(p); - } else if (pos) { - if (neg) return 0; - else if (i == numconds) return 1; - ingroup = true; - while (p && *p != ']' && ((p = nextchar(p)) != NULL)); -// if (p && *p != ']') p = nextchar(p); - st--; - } - if (!pos) { - i++; - st--; - } - if (st < beg && p && *p != ']') return 0; // word <= condition - } else if (pos) { // group - p = nextchar(p); - } else return 0; + if (pos && st != pos) { + if (neg) + return 0; + else if (i == numconds) + return 1; + ingroup = true; + while (p && *p != ']' && ((p = nextchar(p)) != NULL)) { + } + st--; } + if (p && *p != ']') + p = nextchar(p); + } else if (pos) { + if (neg) + return 0; + else if (i == numconds) + return 1; + ingroup = true; + while (p && *p != ']' && ((p = nextchar(p)) != NULL)) { + } + // if (p && *p != ']') p = nextchar(p); + st--; + } + if (!pos) { + i++; + st--; + } + if (st < beg && p && *p != ']') + return 0; // word <= condition + } else if (pos) { // group + p = nextchar(p); + } else + return 0; } - if (!p) return 1; } + if (!p) + return 1; + } } // see if this suffix is present in the word -struct hentry * SfxEntry::checkword(const char * word, int len, int optflags, - PfxEntry* ppfx, char ** wlst, int maxSug, int * ns, const FLAG cclass, const FLAG needflag, - const FLAG badflag) -{ - int tmpl; // length of tmpword - struct hentry * he; // hash entry pointer - unsigned char * cp; - char tmpword[MAXTEMPWORDLEN]; - PfxEntry* ep = ppfx; - - // if this suffix is being cross checked with a prefix - // but it does not support cross products skip it - - if (((optflags & aeXPRODUCT) != 0) && ((opts & aeXPRODUCT) == 0)) - return NULL; - - // upon entry suffix is 0 length or already matches the end of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it +struct hentry* SfxEntry::checkword(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + char** wlst, + int maxSug, + int* ns, + const FLAG cclass, + const FLAG needflag, + const FLAG badflag) { + struct hentry* he; // hash entry pointer + PfxEntry* ep = ppfx; + + // if this suffix is being cross checked with a prefix + // but it does not support cross products skip it + + if (((optflags & aeXPRODUCT) != 0) && ((opts & aeXPRODUCT) == 0)) + return NULL; - tmpl = len - appndl; - // the second condition is not enough for UTF-8 strings - // it checked in test_condition() + // upon entry suffix is 0 length or already matches the end of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { + int tmpl = len - appnd.size(); // length of tmpword + // the second condition is not enough for UTF-8 strings + // it checked in test_condition() - // generate new root word by removing suffix and adding - // back any characters that would have been stripped or - // or null terminating the shorter string + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing suffix and adding + // back any characters that would have been stripped or + // or null terminating the shorter string - strncpy (tmpword, word, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - cp = (unsigned char *)(tmpword + tmpl); - if (stripl) { - strcpy ((char *)cp, strip); - tmpl += stripl; - cp = (unsigned char *)(tmpword + tmpl); - } else *cp = '\0'; + std::string tmpstring(word, tmpl); + if (strip.size()) { + tmpstring.append(strip); + } - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested + const char* tmpword = tmpstring.c_str(); + const char* endword = tmpword + tmpstring.size(); - // if all conditions are met then check if resulting - // root word in the dictionary + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested - if (test_condition((char *) cp, (char *) tmpword)) { + // if all conditions are met then check if resulting + // root word in the dictionary + if (test_condition(endword, tmpword)) { #ifdef SZOSZABLYA_POSSIBLE_ROOTS - fprintf(stdout,"%s %s %c\n", word, tmpword, aflag); + fprintf(stdout, "%s %s %c\n", word, tmpword, aflag); #endif - if ((he = pmyMgr->lookup(tmpword)) != NULL) { - do { - // check conditional suffix (enabled by prefix) - if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() && - TESTAFF(ep->getCont(), aflag, ep->getContLen()))) && - (((optflags & aeXPRODUCT) == 0) || - (ep && TESTAFF(he->astr, ep->getFlag(), he->alen)) || - // enabled by prefix - ((contclass) && (ep && TESTAFF(contclass, ep->getFlag(), contclasslen))) - ) && - // handle cont. class - ((!cclass) || - ((contclass) && TESTAFF(contclass, cclass, contclasslen)) - ) && - // check only in compound homonyms (bad flags) - (!badflag || !TESTAFF(he->astr, badflag, he->alen) - ) && - // handle required flag - ((!needflag) || - (TESTAFF(he->astr, needflag, he->alen) || - ((contclass) && TESTAFF(contclass, needflag, contclasslen))) - ) - ) return he; - he = he->next_homonym; // check homonyms - } while (he); - - // obsolote stemming code (used only by the - // experimental SuffixMgr:suggest_pos_stems) - // store resulting root in wlst - } else if (wlst && (*ns < maxSug)) { - int cwrd = 1; - for (int k=0; k < *ns; k++) - if (strcmp(tmpword, wlst[k]) == 0) { - cwrd = 0; - break; - } - if (cwrd) { - wlst[*ns] = mystrdup(tmpword); - if (wlst[*ns] == NULL) { - for (int j=0; j<*ns; j++) free(wlst[j]); - *ns = -1; - return NULL; - } - (*ns)++; - } - } - } + if ((he = pmyMgr->lookup(tmpword)) != NULL) { + do { + // check conditional suffix (enabled by prefix) + if ((TESTAFF(he->astr, aflag, he->alen) || + (ep && ep->getCont() && + TESTAFF(ep->getCont(), aflag, ep->getContLen()))) && + (((optflags & aeXPRODUCT) == 0) || + (ep && TESTAFF(he->astr, ep->getFlag(), he->alen)) || + // enabled by prefix + ((contclass) && + (ep && TESTAFF(contclass, ep->getFlag(), contclasslen)))) && + // handle cont. class + ((!cclass) || + ((contclass) && TESTAFF(contclass, cclass, contclasslen))) && + // check only in compound homonyms (bad flags) + (!badflag || !TESTAFF(he->astr, badflag, he->alen)) && + // handle required flag + ((!needflag) || + (TESTAFF(he->astr, needflag, he->alen) || + ((contclass) && TESTAFF(contclass, needflag, contclasslen))))) + return he; + he = he->next_homonym; // check homonyms + } while (he); + + // obsolote stemming code (used only by the + // experimental SuffixMgr:suggest_pos_stems) + // store resulting root in wlst + } else if (wlst && (*ns < maxSug)) { + int cwrd = 1; + for (int k = 0; k < *ns; k++) + if (strcmp(tmpword, wlst[k]) == 0) { + cwrd = 0; + break; + } + if (cwrd) { + wlst[*ns] = mystrdup(tmpword); + if (wlst[*ns] == NULL) { + for (int j = 0; j < *ns; j++) + free(wlst[j]); + *ns = -1; + return NULL; + } + (*ns)++; + } + } } - return NULL; + } + return NULL; } // see if two-level suffix is present in the word -struct hentry * SfxEntry::check_twosfx(const char * word, int len, int optflags, - PfxEntry* ppfx, const FLAG needflag) -{ - int tmpl; // length of tmpword - struct hentry * he; // hash entry pointer - unsigned char * cp; - char tmpword[MAXTEMPWORDLEN]; - PfxEntry* ep = ppfx; - - - // if this suffix is being cross checked with a prefix - // but it does not support cross products skip it - - if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0) - return NULL; - - // upon entry suffix is 0 length or already matches the end of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; - - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { - - // generate new root word by removing suffix and adding - // back any characters that would have been stripped or - // or null terminating the shorter string - - strncpy(tmpword, word, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - cp = (unsigned char *)(tmpword + tmpl); - if (stripl) { - strcpy ((char *)cp, strip); - tmpl += stripl; - cp = (unsigned char *)(tmpword + tmpl); - } else *cp = '\0'; - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then recall suffix_check - - if (test_condition((char *) cp, (char *) tmpword)) { - if (ppfx) { - // handle conditional suffix - if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) - he = pmyMgr->suffix_check(tmpword, tmpl, 0, NULL, NULL, 0, NULL, (FLAG) aflag, needflag); - else - he = pmyMgr->suffix_check(tmpword, tmpl, optflags, ppfx, NULL, 0, NULL, (FLAG) aflag, needflag); - } else { - he = pmyMgr->suffix_check(tmpword, tmpl, 0, NULL, NULL, 0, NULL, (FLAG) aflag, needflag); - } - if (he) return he; - } - } +struct hentry* SfxEntry::check_twosfx(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag) { + struct hentry* he; // hash entry pointer + PfxEntry* ep = ppfx; + + // if this suffix is being cross checked with a prefix + // but it does not support cross products skip it + + if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0) return NULL; + + // upon entry suffix is 0 length or already matches the end of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing suffix and adding + // back any characters that would have been stripped or + // or null terminating the shorter string + + std::string tmpword(word); + tmpword.resize(tmpl); + tmpword.append(strip); + tmpl += strip.size(); + + const char* beg = tmpword.c_str(); + const char* end = beg + tmpl; + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then recall suffix_check + + if (test_condition(end, beg)) { + if (ppfx) { + // handle conditional suffix + if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, NULL, 0, NULL, + (FLAG)aflag, needflag); + else + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, optflags, ppfx, NULL, 0, + NULL, (FLAG)aflag, needflag); + } else { + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, NULL, 0, NULL, + (FLAG)aflag, needflag); + } + if (he) + return he; + } + } + return NULL; } // see if two-level suffix is present in the word -char * SfxEntry::check_twosfx_morph(const char * word, int len, int optflags, - PfxEntry* ppfx, const FLAG needflag) -{ - int tmpl; // length of tmpword - unsigned char * cp; - char tmpword[MAXTEMPWORDLEN]; - PfxEntry* ep = ppfx; - char * st; - - char result[MAXLNLEN]; - - *result = '\0'; - - // if this suffix is being cross checked with a prefix - // but it does not support cross products skip it - - if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0) - return NULL; - - // upon entry suffix is 0 length or already matches the end of the word. - // So if the remaining root word has positive length - // and if there are enough chars in root word and added back strip chars - // to meet the number of characters conditions, then test it - - tmpl = len - appndl; - - if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && - (tmpl + stripl >= numconds)) { - - // generate new root word by removing suffix and adding - // back any characters that would have been stripped or - // or null terminating the shorter string - - strncpy(tmpword, word, MAXTEMPWORDLEN-1); - tmpword[MAXTEMPWORDLEN-1] = '\0'; - cp = (unsigned char *)(tmpword + tmpl); - if (stripl) { - strcpy ((char *)cp, strip); - tmpl += stripl; - cp = (unsigned char *)(tmpword + tmpl); - } else *cp = '\0'; - - // now make sure all of the conditions on characters - // are met. Please see the appendix at the end of - // this file for more info on exactly what is being - // tested - - // if all conditions are met then recall suffix_check - - if (test_condition((char *) cp, (char *) tmpword)) { - if (ppfx) { - // handle conditional suffix - if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) { - st = pmyMgr->suffix_check_morph(tmpword, tmpl, 0, NULL, aflag, needflag); - if (st) { - if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); - } - mystrcat(result,st, MAXLNLEN); - free(st); - mychomp(result); - } - } else { - st = pmyMgr->suffix_check_morph(tmpword, tmpl, optflags, ppfx, aflag, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - mychomp(result); - } - } - } else { - st = pmyMgr->suffix_check_morph(tmpword, tmpl, 0, NULL, aflag, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - mychomp(result); - } - } - if (*result) return mystrdup(result); +char* SfxEntry::check_twosfx_morph(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag) { + PfxEntry* ep = ppfx; + char* st; + + char result[MAXLNLEN]; + + *result = '\0'; + + // if this suffix is being cross checked with a prefix + // but it does not support cross products skip it + + if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0) + return NULL; + + // upon entry suffix is 0 length or already matches the end of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + int tmpl = len - appnd.size(); // length of tmpword + + if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && + (tmpl + strip.size() >= numconds)) { + // generate new root word by removing suffix and adding + // back any characters that would have been stripped or + // or null terminating the shorter string + + std::string tmpword(word); + tmpword.resize(tmpl); + tmpword.append(strip); + tmpl += strip.size(); + + const char* beg = tmpword.c_str(); + const char* end = beg + tmpl; + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + // if all conditions are met then recall suffix_check + + if (test_condition(end, beg)) { + if (ppfx) { + // handle conditional suffix + if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) { + st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, + needflag); + if (st) { + if (ppfx->getMorph()) { + mystrcat(result, ppfx->getMorph(), MAXLNLEN); + mystrcat(result, " ", MAXLNLEN); } + mystrcat(result, st, MAXLNLEN); + free(st); + mychomp(result); + } + } else { + st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, optflags, ppfx, aflag, + needflag); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + mychomp(result); + } + } + } else { + st = + pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, needflag); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + mychomp(result); + } + } + if (*result) + return mystrdup(result); } - return NULL; + } + return NULL; } // get next homonym with same affix -struct hentry * SfxEntry::get_next_homonym(struct hentry * he, int optflags, PfxEntry* ppfx, - const FLAG cclass, const FLAG needflag) -{ - PfxEntry* ep = ppfx; - FLAG eFlag = ep ? ep->getFlag() : FLAG_NULL; - - while (he->next_homonym) { - he = he->next_homonym; - if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() && TESTAFF(ep->getCont(), aflag, ep->getContLen()))) && - ((optflags & aeXPRODUCT) == 0 || - TESTAFF(he->astr, eFlag, he->alen) || - // handle conditional suffix - ((contclass) && TESTAFF(contclass, eFlag, contclasslen)) - ) && - // handle cont. class - ((!cclass) || - ((contclass) && TESTAFF(contclass, cclass, contclasslen)) - ) && - // handle required flag - ((!needflag) || - (TESTAFF(he->astr, needflag, he->alen) || - ((contclass) && TESTAFF(contclass, needflag, contclasslen))) - ) - ) return he; - } - return NULL; +struct hentry* SfxEntry::get_next_homonym(struct hentry* he, + int optflags, + PfxEntry* ppfx, + const FLAG cclass, + const FLAG needflag) { + PfxEntry* ep = ppfx; + FLAG eFlag = ep ? ep->getFlag() : FLAG_NULL; + + while (he->next_homonym) { + he = he->next_homonym; + if ((TESTAFF(he->astr, aflag, he->alen) || + (ep && ep->getCont() && + TESTAFF(ep->getCont(), aflag, ep->getContLen()))) && + ((optflags & aeXPRODUCT) == 0 || TESTAFF(he->astr, eFlag, he->alen) || + // handle conditional suffix + ((contclass) && TESTAFF(contclass, eFlag, contclasslen))) && + // handle cont. class + ((!cclass) || + ((contclass) && TESTAFF(contclass, cclass, contclasslen))) && + // handle required flag + ((!needflag) || + (TESTAFF(he->astr, needflag, he->alen) || + ((contclass) && TESTAFF(contclass, needflag, contclasslen))))) + return he; + } + return NULL; } - #if 0 Appendix: Understanding Affix Code @@ -897,10 +966,8 @@ The structure affentry is defined as follows: struct affentry { unsigned short aflag; // ID used to represent the affix - char * strip; // string to strip before adding affix - char * appnd; // the affix string to add - unsigned char stripl; // length of the strip string - unsigned char appndl; // length of the affix string + std::string strip; // string to strip before adding affix + std::string appnd; // the affix string to add char numconds; // the number of conditions that must be met char opts; // flag: aeXPRODUCT- combine both prefix and suffix char conds[SETSIZE]; // array which encodes the conditions to be met @@ -998,6 +1065,4 @@ first two affentries for the suffix D described earlier. conds['y'] = (1 << 1) (the last char must be a y) all other bits for all other entries in the conds array are zero - #endif - diff --git a/src/spelling/hunspell/affentry.hxx b/src/spelling/hunspell/affentry.hxx index 923ee5ff..6311d83f 100644 --- a/src/spelling/hunspell/affentry.hxx +++ b/src/spelling/hunspell/affentry.hxx @@ -1,3 +1,76 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #ifndef _AFFIX_HXX_ #define _AFFIX_HXX_ @@ -9,136 +82,151 @@ /* A Prefix Entry */ -class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry -{ -private: - PfxEntry(const PfxEntry&); - PfxEntry& operator = (const PfxEntry&); -private: - AffixMgr* pmyMgr; +class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry { + private: + PfxEntry(const PfxEntry&); + PfxEntry& operator=(const PfxEntry&); - PfxEntry * next; - PfxEntry * nexteq; - PfxEntry * nextne; - PfxEntry * flgnxt; + private: + AffixMgr* pmyMgr; -public: + PfxEntry* next; + PfxEntry* nexteq; + PfxEntry* nextne; + PfxEntry* flgnxt; - PfxEntry(AffixMgr* pmgr, affentry* dp ); + public: + PfxEntry(AffixMgr* pmgr, affentry* dp); ~PfxEntry(); - inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } - struct hentry * checkword(const char * word, int len, char in_compound, - const FLAG needflag = FLAG_NULL); - - struct hentry * check_twosfx(const char * word, int len, char in_compound, const FLAG needflag = NULL); + inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } + struct hentry* checkword(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - char * check_morph(const char * word, int len, char in_compound, - const FLAG needflag = FLAG_NULL); + struct hentry* check_twosfx(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - char * check_twosfx_morph(const char * word, int len, - char in_compound, const FLAG needflag = FLAG_NULL); + char* check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - inline FLAG getFlag() { return aflag; } - inline const char * getKey() { return appnd; } - char * add(const char * word, int len); + char* check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - inline short getKeyLen() { return appndl; } + inline FLAG getFlag() { return aflag; } + inline const char* getKey() { return appnd.c_str(); } + char* add(const char* word, size_t len); - inline const char * getMorph() { return morphcode; } + inline short getKeyLen() { return appnd.size(); } - inline const unsigned short * getCont() { return contclass; } - inline short getContLen() { return contclasslen; } + inline const char* getMorph() { return morphcode; } - inline PfxEntry * getNext() { return next; } - inline PfxEntry * getNextNE() { return nextne; } - inline PfxEntry * getNextEQ() { return nexteq; } - inline PfxEntry * getFlgNxt() { return flgnxt; } - - inline void setNext(PfxEntry * ptr) { next = ptr; } - inline void setNextNE(PfxEntry * ptr) { nextne = ptr; } - inline void setNextEQ(PfxEntry * ptr) { nexteq = ptr; } - inline void setFlgNxt(PfxEntry * ptr) { flgnxt = ptr; } - - inline char * nextchar(char * p); - inline int test_condition(const char * st); -}; + inline const unsigned short* getCont() { return contclass; } + inline short getContLen() { return contclasslen; } + inline PfxEntry* getNext() { return next; } + inline PfxEntry* getNextNE() { return nextne; } + inline PfxEntry* getNextEQ() { return nexteq; } + inline PfxEntry* getFlgNxt() { return flgnxt; } + inline void setNext(PfxEntry* ptr) { next = ptr; } + inline void setNextNE(PfxEntry* ptr) { nextne = ptr; } + inline void setNextEQ(PfxEntry* ptr) { nexteq = ptr; } + inline void setFlgNxt(PfxEntry* ptr) { flgnxt = ptr; } + inline char* nextchar(char* p); + inline int test_condition(const char* st); +}; /* A Suffix Entry */ -class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry -{ -private: - SfxEntry(const SfxEntry&); - SfxEntry& operator = (const SfxEntry&); -private: - AffixMgr* pmyMgr; - char * rappnd; - - SfxEntry * next; - SfxEntry * nexteq; - SfxEntry * nextne; - SfxEntry * flgnxt; - - SfxEntry * l_morph; - SfxEntry * r_morph; - SfxEntry * eq_morph; - -public: - - SfxEntry(AffixMgr* pmgr, affentry* dp ); - ~SfxEntry(); - - inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } - struct hentry * checkword(const char * word, int len, int optflags, - PfxEntry* ppfx, char ** wlst, int maxSug, int * ns, -// const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound=IN_CPD_NOT); - const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, const FLAG badflag = 0); - - struct hentry * check_twosfx(const char * word, int len, int optflags, PfxEntry* ppfx, const FLAG needflag = NULL); - - char * check_twosfx_morph(const char * word, int len, int optflags, - PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); - struct hentry * get_next_homonym(struct hentry * he); - struct hentry * get_next_homonym(struct hentry * word, int optflags, PfxEntry* ppfx, - const FLAG cclass, const FLAG needflag); +class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { + private: + SfxEntry(const SfxEntry&); + SfxEntry& operator=(const SfxEntry&); + private: + AffixMgr* pmyMgr; + std::string rappnd; - inline FLAG getFlag() { return aflag; } - inline const char * getKey() { return rappnd; } - char * add(const char * word, int len); + SfxEntry* next; + SfxEntry* nexteq; + SfxEntry* nextne; + SfxEntry* flgnxt; + SfxEntry* l_morph; + SfxEntry* r_morph; + SfxEntry* eq_morph; - inline const char * getMorph() { return morphcode; } - - inline const unsigned short * getCont() { return contclass; } - inline short getContLen() { return contclasslen; } - inline const char * getAffix() { return appnd; } - - inline short getKeyLen() { return appndl; } - - inline SfxEntry * getNext() { return next; } - inline SfxEntry * getNextNE() { return nextne; } - inline SfxEntry * getNextEQ() { return nexteq; } - - inline SfxEntry * getLM() { return l_morph; } - inline SfxEntry * getRM() { return r_morph; } - inline SfxEntry * getEQM() { return eq_morph; } - inline SfxEntry * getFlgNxt() { return flgnxt; } - - inline void setNext(SfxEntry * ptr) { next = ptr; } - inline void setNextNE(SfxEntry * ptr) { nextne = ptr; } - inline void setNextEQ(SfxEntry * ptr) { nexteq = ptr; } - inline void setFlgNxt(SfxEntry * ptr) { flgnxt = ptr; } - - inline char * nextchar(char * p); - inline int test_condition(const char * st, const char * begin); + public: + SfxEntry(AffixMgr* pmgr, affentry* dp); + ~SfxEntry(); + inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } + struct hentry* checkword(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + char** wlst, + int maxSug, + int* ns, + const FLAG cclass = FLAG_NULL, + const FLAG needflag = FLAG_NULL, + const FLAG badflag = FLAG_NULL); + + struct hentry* check_twosfx(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); + + char* check_twosfx_morph(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); + struct hentry* get_next_homonym(struct hentry* he); + struct hentry* get_next_homonym(struct hentry* word, + int optflags, + PfxEntry* ppfx, + const FLAG cclass, + const FLAG needflag); + + inline FLAG getFlag() { return aflag; } + inline const char* getKey() { return rappnd.c_str(); } + char* add(const char* word, size_t len); + + inline const char* getMorph() { return morphcode; } + + inline const unsigned short* getCont() { return contclass; } + inline short getContLen() { return contclasslen; } + inline const char* getAffix() { return appnd.c_str(); } + + inline short getKeyLen() { return appnd.size(); } + + inline SfxEntry* getNext() { return next; } + inline SfxEntry* getNextNE() { return nextne; } + inline SfxEntry* getNextEQ() { return nexteq; } + + inline SfxEntry* getLM() { return l_morph; } + inline SfxEntry* getRM() { return r_morph; } + inline SfxEntry* getEQM() { return eq_morph; } + inline SfxEntry* getFlgNxt() { return flgnxt; } + + inline void setNext(SfxEntry* ptr) { next = ptr; } + inline void setNextNE(SfxEntry* ptr) { nextne = ptr; } + inline void setNextEQ(SfxEntry* ptr) { nexteq = ptr; } + inline void setFlgNxt(SfxEntry* ptr) { flgnxt = ptr; } + + inline char* nextchar(char* p); + inline int test_condition(const char* st, const char* begin); }; #endif - - diff --git a/src/spelling/hunspell/affixmgr.cxx b/src/spelling/hunspell/affixmgr.cxx index ee74ee47..d6bb6779 100644 --- a/src/spelling/hunspell/affixmgr.cxx +++ b/src/spelling/hunspell/affixmgr.cxx @@ -1,11 +1,84 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #include #include #include #include +#include +#include +#include #include #include "affixmgr.hxx" @@ -14,16 +87,18 @@ #include "csutil.hxx" -AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * key) -{ +AffixMgr::AffixMgr(const char* affpath, + HashMgr** ptr, + int* md, + const char* key) { // register hash manager and load affix data from aff file pHMgr = ptr[0]; alldic = ptr; maxdic = md; keystring = NULL; trystring = NULL; - encoding=NULL; - csconv=NULL; + encoding = NULL; + csconv = NULL; utf8 = 0; complexprefixes = 0; maptable = NULL; @@ -41,52 +116,55 @@ AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * k defcpdtable = NULL; numdefcpd = 0; phone = NULL; - compoundflag = FLAG_NULL; // permits word in compound forms - compoundbegin = FLAG_NULL; // may be first word in compound forms - compoundmiddle = FLAG_NULL; // may be middle word in compound forms - compoundend = FLAG_NULL; // may be last word in compound forms - compoundroot = FLAG_NULL; // compound word signing flag - compoundpermitflag = FLAG_NULL; // compound permitting flag for suffixed word - compoundforbidflag = FLAG_NULL; // compound fordidden flag for suffixed word - compoundmoresuffixes = 0; // allow more suffixes within compound words - checkcompounddup = 0; // forbid double words in compounds - checkcompoundrep = 0; // forbid bad compounds (may be non compound word with a REP substitution) - checkcompoundcase = 0; // forbid upper and lowercase combinations at word bounds - checkcompoundtriple = 0; // forbid compounds with triple letters - simplifiedtriple = 0; // allow simplified triple letters in compounds (Schiff+fahrt -> Schiffahrt) - forbiddenword = FORBIDDENWORD; // forbidden word signing flag - nosuggest = FLAG_NULL; // don't suggest words signed with NOSUGGEST flag + compoundflag = FLAG_NULL; // permits word in compound forms + compoundbegin = FLAG_NULL; // may be first word in compound forms + compoundmiddle = FLAG_NULL; // may be middle word in compound forms + compoundend = FLAG_NULL; // may be last word in compound forms + compoundroot = FLAG_NULL; // compound word signing flag + compoundpermitflag = FLAG_NULL; // compound permitting flag for suffixed word + compoundforbidflag = FLAG_NULL; // compound fordidden flag for suffixed word + compoundmoresuffixes = 0; // allow more suffixes within compound words + checkcompounddup = 0; // forbid double words in compounds + checkcompoundrep = 0; // forbid bad compounds (may be non compound word with + // a REP substitution) + checkcompoundcase = + 0; // forbid upper and lowercase combinations at word bounds + checkcompoundtriple = 0; // forbid compounds with triple letters + simplifiedtriple = 0; // allow simplified triple letters in compounds + // (Schiff+fahrt -> Schiffahrt) + forbiddenword = FORBIDDENWORD; // forbidden word signing flag + nosuggest = FLAG_NULL; // don't suggest words signed with NOSUGGEST flag nongramsuggest = FLAG_NULL; - lang = NULL; // language - langnum = 0; // language code (see http://l10n.openoffice.org/languages.html) - needaffix = FLAG_NULL; // forbidden root, allowed only with suffixes - cpdwordmax = -1; // default: unlimited wordcount in compound words - cpdmin = -1; // undefined - cpdmaxsyllable = 0; // default: unlimited syllablecount in compound words - cpdvowels=NULL; // vowels (for calculating of Hungarian compounding limit, O(n) search! XXX) - cpdvowels_utf16=NULL; // vowels for UTF-8 encoding (bsearch instead of O(n) search) - cpdvowels_utf16_len=0; // vowels - pfxappnd=NULL; // previous prefix for counting the syllables of prefix BUG - sfxappnd=NULL; // previous suffix for counting a special syllables BUG - cpdsyllablenum=NULL; // syllable count incrementing flag - checknum=0; // checking numbers, and word with numbers - wordchars=NULL; // letters + spec. word characters - wordchars_utf16=NULL; // letters + spec. word characters - wordchars_utf16_len=0; // letters + spec. word characters - ignorechars=NULL; // letters + spec. word characters - ignorechars_utf16=NULL; // letters + spec. word characters - ignorechars_utf16_len=0; // letters + spec. word characters - version=NULL; // affix and dictionary file version string - havecontclass=0; // flags of possible continuing classes (double affix) + lang = NULL; // language + langnum = 0; // language code (see http://l10n.openoffice.org/languages.html) + needaffix = FLAG_NULL; // forbidden root, allowed only with suffixes + cpdwordmax = -1; // default: unlimited wordcount in compound words + cpdmin = -1; // undefined + cpdmaxsyllable = 0; // default: unlimited syllablecount in compound words + cpdvowels = NULL; // vowels (for calculating of Hungarian compounding limit, + // O(n) search! XXX) + cpdvowels_utf16 = + NULL; // vowels for UTF-8 encoding (bsearch instead of O(n) search) + cpdvowels_utf16_len = 0; // vowels + pfxappnd = NULL; // previous prefix for counting syllables of the prefix BUG + sfxappnd = NULL; // previous suffix for counting syllables of the suffix BUG + sfxextra = 0; // modifier for syllable count of sfxappnd BUG + cpdsyllablenum = NULL; // syllable count incrementing flag + checknum = 0; // checking numbers, and word with numbers + wordchars = NULL; // letters + spec. word characters + ignorechars = NULL; // letters + spec. word characters + version = NULL; // affix and dictionary file version string + havecontclass = 0; // flags of possible continuing classes (double affix) // LEMMA_PRESENT: not put root into the morphological output. Lemma presents - // in morhological description in dictionary file. It's often combined with PSEUDOROOT. - lemma_present = FLAG_NULL; - circumfix = FLAG_NULL; - onlyincompound = FLAG_NULL; - maxngramsugs = -1; // undefined - maxdiff = -1; // undefined + // in morhological description in dictionary file. It's often combined with + // PSEUDOROOT. + lemma_present = FLAG_NULL; + circumfix = FLAG_NULL; + onlyincompound = FLAG_NULL; + maxngramsugs = -1; // undefined + maxdiff = -1; // undefined onlymaxdiff = 0; - maxcpdsugs = -1; // undefined + maxcpdsugs = -1; // undefined nosplitsugs = 0; sugswithdots = 0; keepcase = 0; @@ -100,123 +178,128 @@ AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * k sfx = NULL; pfx = NULL; - for (int i=0; i < SETSIZE; i++) { - pStart[i] = NULL; - sStart[i] = NULL; - pFlag[i] = NULL; - sFlag[i] = NULL; + for (int i = 0; i < SETSIZE; i++) { + pStart[i] = NULL; + sStart[i] = NULL; + pFlag[i] = NULL; + sFlag[i] = NULL; } - for (int j=0; j < CONTSIZE; j++) { + for (int j = 0; j < CONTSIZE; j++) { contclasses[j] = 0; } if (parse_file(affpath, key)) { - HUNSPELL_WARNING(stderr, "Failure loading aff file %s\n",affpath); + HUNSPELL_WARNING(stderr, "Failure loading aff file %s\n", affpath); } - - if (cpdmin == -1) cpdmin = MINCPDLEN; + if (cpdmin == -1) + cpdmin = MINCPDLEN; } - -AffixMgr::~AffixMgr() -{ +AffixMgr::~AffixMgr() { // pass through linked prefix entries and clean up - for (int i=0; i < SETSIZE ;i++) { - pFlag[i] = NULL; - PfxEntry * ptr = pStart[i]; - PfxEntry * nptr = NULL; - while (ptr) { - nptr = ptr->getNext(); - delete(ptr); - ptr = nptr; - nptr = NULL; - } + for (int i = 0; i < SETSIZE; i++) { + pFlag[i] = NULL; + PfxEntry* ptr = pStart[i]; + PfxEntry* nptr = NULL; + while (ptr) { + nptr = ptr->getNext(); + delete (ptr); + ptr = nptr; + nptr = NULL; + } } // pass through linked suffix entries and clean up - for (int j=0; j < SETSIZE ; j++) { - sFlag[j] = NULL; - SfxEntry * ptr = sStart[j]; - SfxEntry * nptr = NULL; - while (ptr) { - nptr = ptr->getNext(); - delete(ptr); - ptr = nptr; - nptr = NULL; - } - sStart[j] = NULL; + for (int j = 0; j < SETSIZE; j++) { + sFlag[j] = NULL; + SfxEntry* ptr = sStart[j]; + SfxEntry* nptr = NULL; + while (ptr) { + nptr = ptr->getNext(); + delete (ptr); + ptr = nptr; + nptr = NULL; + } + sStart[j] = NULL; } - if (keystring) free(keystring); - keystring=NULL; - if (trystring) free(trystring); - trystring=NULL; - if (encoding) free(encoding); - encoding=NULL; - if (maptable) { - for (int j=0; j < nummap; j++) { - for (int k=0; k < maptable[j].len; k++) { - if (maptable[j].set[k]) free(maptable[j].set[k]); - } - free(maptable[j].set); - maptable[j].set = NULL; - maptable[j].len = 0; - } - free(maptable); - maptable = NULL; + if (keystring) + free(keystring); + keystring = NULL; + if (trystring) + free(trystring); + trystring = NULL; + if (encoding) + free(encoding); + encoding = NULL; + if (maptable) { + for (int j = 0; j < nummap; j++) { + for (int k = 0; k < maptable[j].len; k++) { + if (maptable[j].set[k]) + free(maptable[j].set[k]); + } + free(maptable[j].set); + maptable[j].set = NULL; + maptable[j].len = 0; + } + free(maptable); + maptable = NULL; } nummap = 0; if (breaktable) { - for (int j=0; j < numbreak; j++) { - if (breaktable[j]) free(breaktable[j]); - breaktable[j] = NULL; - } - free(breaktable); - breaktable = NULL; + for (int j = 0; j < numbreak; j++) { + if (breaktable[j]) + free(breaktable[j]); + breaktable[j] = NULL; + } + free(breaktable); + breaktable = NULL; } numbreak = 0; if (reptable) { - for (int j=0; j < numrep; j++) { - free(reptable[j].pattern); - free(reptable[j].pattern2); - } - free(reptable); - reptable = NULL; + for (int j = 0; j < numrep; j++) { + free(reptable[j].pattern); + free(reptable[j].pattern2); + } + free(reptable); + reptable = NULL; } - if (iconvtable) delete iconvtable; - if (oconvtable) delete oconvtable; + if (iconvtable) + delete iconvtable; + if (oconvtable) + delete oconvtable; if (phone && phone->rules) { - for (int j=0; j < phone->num + 1; j++) { - free(phone->rules[j * 2]); - free(phone->rules[j * 2 + 1]); - } - free(phone->rules); - free(phone); - phone = NULL; + for (int j = 0; j < phone->num + 1; j++) { + free(phone->rules[j * 2]); + free(phone->rules[j * 2 + 1]); + } + free(phone->rules); + free(phone); + phone = NULL; } - if (defcpdtable) { - for (int j=0; j < numdefcpd; j++) { - free(defcpdtable[j].def); - defcpdtable[j].def = NULL; - } - free(defcpdtable); - defcpdtable = NULL; + if (defcpdtable) { + for (int j = 0; j < numdefcpd; j++) { + free(defcpdtable[j].def); + defcpdtable[j].def = NULL; + } + free(defcpdtable); + defcpdtable = NULL; } numrep = 0; - if (checkcpdtable) { - for (int j=0; j < numcheckcpd; j++) { - free(checkcpdtable[j].pattern); - free(checkcpdtable[j].pattern2); - free(checkcpdtable[j].pattern3); - checkcpdtable[j].pattern = NULL; - checkcpdtable[j].pattern2 = NULL; - checkcpdtable[j].pattern3 = NULL; - } - free(checkcpdtable); - checkcpdtable = NULL; + if (checkcpdtable) { + for (int j = 0; j < numcheckcpd; j++) { + free(checkcpdtable[j].pattern); + free(checkcpdtable[j].pattern2); + free(checkcpdtable[j].pattern3); + checkcpdtable[j].pattern = NULL; + checkcpdtable[j].pattern2 = NULL; + checkcpdtable[j].pattern3 = NULL; + } + free(checkcpdtable); + checkcpdtable = NULL; } numcheckcpd = 0; FREE_FLAG(compoundflag); @@ -233,614 +316,630 @@ AffixMgr::~AffixMgr() FREE_FLAG(lemma_present); FREE_FLAG(circumfix); FREE_FLAG(onlyincompound); - + cpdwordmax = 0; pHMgr = NULL; cpdmin = 0; cpdmaxsyllable = 0; - if (cpdvowels) free(cpdvowels); - if (cpdvowels_utf16) free(cpdvowels_utf16); - if (cpdsyllablenum) free(cpdsyllablenum); + if (cpdvowels) + free(cpdvowels); + if (cpdvowels_utf16) + free(cpdvowels_utf16); + if (cpdsyllablenum) + free(cpdsyllablenum); free_utf_tbl(); - if (lang) free(lang); - if (wordchars) free(wordchars); - if (wordchars_utf16) free(wordchars_utf16); - if (ignorechars) free(ignorechars); - if (ignorechars_utf16) free(ignorechars_utf16); - if (version) free(version); - checknum=0; + if (lang) + free(lang); + if (wordchars) + free(wordchars); + if (ignorechars) + free(ignorechars); + if (version) + free(version); + checknum = 0; #ifdef MOZILLA_CLIENT - delete [] csconv; + delete[] csconv; #endif } -void AffixMgr::finishFileMgr(FileMgr *afflst) -{ - delete afflst; +void AffixMgr::finishFileMgr(FileMgr* afflst) { + delete afflst; - // convert affix trees to sorted list - process_pfx_tree_to_list(); - process_sfx_tree_to_list(); + // convert affix trees to sorted list + process_pfx_tree_to_list(); + process_sfx_tree_to_list(); } -// read in aff file and build up prefix and suffix entry objects -int AffixMgr::parse_file(const char * affpath, const char * key) -{ - char * line; // io buffers +// read in aff file and build up prefix and suffix entry objects +int AffixMgr::parse_file(const char* affpath, const char* key) { + char* line; // io buffers char ft; // affix type - + // checking flag duplication char dupflags[CONTSIZE]; char dupflags_ini = 1; // first line indicator for removing byte order mark int firstline = 1; - + // open the affix file - FileMgr * afflst = new FileMgr(affpath, key); + FileMgr* afflst = new FileMgr(affpath, key); if (!afflst) { - HUNSPELL_WARNING(stderr, "error: could not open affix description file %s\n",affpath); + HUNSPELL_WARNING( + stderr, "error: could not open affix description file %s\n", affpath); return 1; } // step one is to parse the affix file building up the internal // affix data structures - // read in each line ignoring any that do not - // start with a known line type indicator - while ((line = afflst->getline()) != NULL) { - mychomp(line); - - /* remove byte order mark */ - if (firstline) { - firstline = 0; - // Affix file begins with byte order mark: possible incompatibility with old Hunspell versions - if (strncmp(line,"\xEF\xBB\xBF",3) == 0) { - memmove(line, line+3, strlen(line+3)+1); - } - } - - /* parse in the keyboard string */ - if (strncmp(line,"KEY",3) == 0) { - if (parse_string(line, &keystring, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - } + // read in each line ignoring any that do not + // start with a known line type indicator + while ((line = afflst->getline()) != NULL) { + mychomp(line); + + /* remove byte order mark */ + if (firstline) { + firstline = 0; + // Affix file begins with byte order mark: possible incompatibility with + // old Hunspell versions + if (strncmp(line, "\xEF\xBB\xBF", 3) == 0) { + memmove(line, line + 3, strlen(line + 3) + 1); + } + } - /* parse in the try string */ - if (strncmp(line,"TRY",3) == 0) { - if (parse_string(line, &trystring, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the keyboard string */ + if (strncmp(line, "KEY", 3) == 0) { + if (parse_string(line, &keystring, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the name of the character set used by the .dict and .aff */ - if (strncmp(line,"SET",3) == 0) { - if (parse_string(line, &encoding, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - if (strcmp(encoding, "UTF-8") == 0) { - utf8 = 1; + /* parse in the try string */ + if (strncmp(line, "TRY", 3) == 0) { + if (parse_string(line, &trystring, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + } + + /* parse in the name of the character set used by the .dict and .aff */ + if (strncmp(line, "SET", 3) == 0) { + if (parse_string(line, &encoding, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + if (strcmp(encoding, "UTF-8") == 0) { + utf8 = 1; #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT - if (initialize_utf_tbl()) return 1; + if (initialize_utf_tbl()) { + finishFileMgr(afflst); + return 1; + } #endif #endif - } - } + } + } - /* parse COMPLEXPREFIXES for agglutinative languages with right-to-left writing system */ - if (strncmp(line,"COMPLEXPREFIXES",15) == 0) - complexprefixes = 1; + /* parse COMPLEXPREFIXES for agglutinative languages with right-to-left + * writing system */ + if (strncmp(line, "COMPLEXPREFIXES", 15) == 0) + complexprefixes = 1; - /* parse in the flag used by the controlled compound words */ - if (strncmp(line,"COMPOUNDFLAG",12) == 0) { - if (parse_flag(line, &compoundflag, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by the controlled compound words */ + if (strncmp(line, "COMPOUNDFLAG", 12) == 0) { + if (parse_flag(line, &compoundflag, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by compound words */ - if (strncmp(line,"COMPOUNDBEGIN",13) == 0) { - if (complexprefixes) { - if (parse_flag(line, &compoundend, afflst)) { - finishFileMgr(afflst); - return 1; - } - } else { - if (parse_flag(line, &compoundbegin, afflst)) { - finishFileMgr(afflst); - return 1; - } - } - } + /* parse in the flag used by compound words */ + if (strncmp(line, "COMPOUNDBEGIN", 13) == 0) { + if (complexprefixes) { + if (parse_flag(line, &compoundend, afflst)) { + finishFileMgr(afflst); + return 1; + } + } else { + if (parse_flag(line, &compoundbegin, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + } - /* parse in the flag used by compound words */ - if (strncmp(line,"COMPOUNDMIDDLE",14) == 0) { - if (parse_flag(line, &compoundmiddle, afflst)) { - finishFileMgr(afflst); - return 1; - } - } - /* parse in the flag used by compound words */ - if (strncmp(line,"COMPOUNDEND",11) == 0) { - if (complexprefixes) { - if (parse_flag(line, &compoundbegin, afflst)) { - finishFileMgr(afflst); - return 1; - } - } else { - if (parse_flag(line, &compoundend, afflst)) { - finishFileMgr(afflst); - return 1; - } - } - } + /* parse in the flag used by compound words */ + if (strncmp(line, "COMPOUNDMIDDLE", 14) == 0) { + if (parse_flag(line, &compoundmiddle, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + /* parse in the flag used by compound words */ + if (strncmp(line, "COMPOUNDEND", 11) == 0) { + if (complexprefixes) { + if (parse_flag(line, &compoundbegin, afflst)) { + finishFileMgr(afflst); + return 1; + } + } else { + if (parse_flag(line, &compoundend, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + } - /* parse in the data used by compound_check() method */ - if (strncmp(line,"COMPOUNDWORDMAX",15) == 0) { - if (parse_num(line, &cpdwordmax, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the data used by compound_check() method */ + if (strncmp(line, "COMPOUNDWORDMAX", 15) == 0) { + if (parse_num(line, &cpdwordmax, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag sign compounds in dictionary */ - if (strncmp(line,"COMPOUNDROOT",12) == 0) { - if (parse_flag(line, &compoundroot, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag sign compounds in dictionary */ + if (strncmp(line, "COMPOUNDROOT", 12) == 0) { + if (parse_flag(line, &compoundroot, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by compound_check() method */ - if (strncmp(line,"COMPOUNDPERMITFLAG",18) == 0) { - if (parse_flag(line, &compoundpermitflag, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by compound_check() method */ + if (strncmp(line, "COMPOUNDPERMITFLAG", 18) == 0) { + if (parse_flag(line, &compoundpermitflag, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by compound_check() method */ - if (strncmp(line,"COMPOUNDFORBIDFLAG",18) == 0) { - if (parse_flag(line, &compoundforbidflag, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by compound_check() method */ + if (strncmp(line, "COMPOUNDFORBIDFLAG", 18) == 0) { + if (parse_flag(line, &compoundforbidflag, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"COMPOUNDMORESUFFIXES",20) == 0) { - compoundmoresuffixes = 1; - } + if (strncmp(line, "COMPOUNDMORESUFFIXES", 20) == 0) { + compoundmoresuffixes = 1; + } - if (strncmp(line,"CHECKCOMPOUNDDUP",16) == 0) { - checkcompounddup = 1; - } + if (strncmp(line, "CHECKCOMPOUNDDUP", 16) == 0) { + checkcompounddup = 1; + } - if (strncmp(line,"CHECKCOMPOUNDREP",16) == 0) { - checkcompoundrep = 1; - } + if (strncmp(line, "CHECKCOMPOUNDREP", 16) == 0) { + checkcompoundrep = 1; + } - if (strncmp(line,"CHECKCOMPOUNDTRIPLE",19) == 0) { - checkcompoundtriple = 1; - } + if (strncmp(line, "CHECKCOMPOUNDTRIPLE", 19) == 0) { + checkcompoundtriple = 1; + } - if (strncmp(line,"SIMPLIFIEDTRIPLE",16) == 0) { - simplifiedtriple = 1; - } + if (strncmp(line, "SIMPLIFIEDTRIPLE", 16) == 0) { + simplifiedtriple = 1; + } - if (strncmp(line,"CHECKCOMPOUNDCASE",17) == 0) { - checkcompoundcase = 1; - } + if (strncmp(line, "CHECKCOMPOUNDCASE", 17) == 0) { + checkcompoundcase = 1; + } - if (strncmp(line,"NOSUGGEST",9) == 0) { - if (parse_flag(line, &nosuggest, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "NOSUGGEST", 9) == 0) { + if (parse_flag(line, &nosuggest, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"NONGRAMSUGGEST",14) == 0) { - if (parse_flag(line, &nongramsuggest, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "NONGRAMSUGGEST", 14) == 0) { + if (parse_flag(line, &nongramsuggest, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by forbidden words */ - if (strncmp(line,"FORBIDDENWORD",13) == 0) { - if (parse_flag(line, &forbiddenword, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by forbidden words */ + if (strncmp(line, "FORBIDDENWORD", 13) == 0) { + if (parse_flag(line, &forbiddenword, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by forbidden words */ - if (strncmp(line,"LEMMA_PRESENT",13) == 0) { - if (parse_flag(line, &lemma_present, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by forbidden words */ + if (strncmp(line, "LEMMA_PRESENT", 13) == 0) { + if (parse_flag(line, &lemma_present, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by circumfixes */ - if (strncmp(line,"CIRCUMFIX",9) == 0) { - if (parse_flag(line, &circumfix, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by circumfixes */ + if (strncmp(line, "CIRCUMFIX", 9) == 0) { + if (parse_flag(line, &circumfix, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by fogemorphemes */ - if (strncmp(line,"ONLYINCOMPOUND",14) == 0) { - if (parse_flag(line, &onlyincompound, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by fogemorphemes */ + if (strncmp(line, "ONLYINCOMPOUND", 14) == 0) { + if (parse_flag(line, &onlyincompound, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by `needaffixs' */ - if (strncmp(line,"PSEUDOROOT",10) == 0) { - if (parse_flag(line, &needaffix, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by `needaffixs' */ + if (strncmp(line, "PSEUDOROOT", 10) == 0) { + if (parse_flag(line, &needaffix, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by `needaffixs' */ - if (strncmp(line,"NEEDAFFIX",9) == 0) { - if (parse_flag(line, &needaffix, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by `needaffixs' */ + if (strncmp(line, "NEEDAFFIX", 9) == 0) { + if (parse_flag(line, &needaffix, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the minimal length for words in compounds */ - if (strncmp(line,"COMPOUNDMIN",11) == 0) { - if (parse_num(line, &cpdmin, afflst)) { - finishFileMgr(afflst); - return 1; - } - if (cpdmin < 1) cpdmin = 1; - } - - /* parse in the max. words and syllables in compounds */ - if (strncmp(line,"COMPOUNDSYLLABLE",16) == 0) { - if (parse_cpdsyllable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the minimal length for words in compounds */ + if (strncmp(line, "COMPOUNDMIN", 11) == 0) { + if (parse_num(line, &cpdmin, afflst)) { + finishFileMgr(afflst); + return 1; + } + if (cpdmin < 1) + cpdmin = 1; + } - /* parse in the flag used by compound_check() method */ - if (strncmp(line,"SYLLABLENUM",11) == 0) { - if (parse_string(line, &cpdsyllablenum, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - } - - /* parse in the flag used by the controlled compound words */ - if (strncmp(line,"CHECKNUM",8) == 0) { - checknum=1; - } - - /* parse in the extra word characters */ - if (strncmp(line,"WORDCHARS",9) == 0) { - if (parse_array(line, &wordchars, &wordchars_utf16, &wordchars_utf16_len, utf8, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the max. words and syllables in compounds */ + if (strncmp(line, "COMPOUNDSYLLABLE", 16) == 0) { + if (parse_cpdsyllable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the ignored characters (for example, Arabic optional diacretics charachters */ - if (strncmp(line,"IGNORE",6) == 0) { - if (parse_array(line, &ignorechars, &ignorechars_utf16, &ignorechars_utf16_len, utf8, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by compound_check() method */ + if (strncmp(line, "SYLLABLENUM", 11) == 0) { + if (parse_string(line, &cpdsyllablenum, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the typical fault correcting table */ - if (strncmp(line,"REP",3) == 0) { - if (parse_reptable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the flag used by the controlled compound words */ + if (strncmp(line, "CHECKNUM", 8) == 0) { + checknum = 1; + } - /* parse in the input conversion table */ - if (strncmp(line,"ICONV",5) == 0) { - if (parse_convtable(line, afflst, &iconvtable, "ICONV")) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the extra word characters */ + if (strncmp(line, "WORDCHARS", 9) == 0) { + if (!parse_array(line, &wordchars, wordchars_utf16, + utf8, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the input conversion table */ - if (strncmp(line,"OCONV",5) == 0) { - if (parse_convtable(line, afflst, &oconvtable, "OCONV")) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the ignored characters (for example, Arabic optional diacretics + * charachters */ + if (strncmp(line, "IGNORE", 6) == 0) { + if (!parse_array(line, &ignorechars, ignorechars_utf16, + utf8, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the phonetic translation table */ - if (strncmp(line,"PHONE",5) == 0) { - if (parse_phonetable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the typical fault correcting table */ + if (strncmp(line, "REP", 3) == 0) { + if (parse_reptable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the checkcompoundpattern table */ - if (strncmp(line,"CHECKCOMPOUNDPATTERN",20) == 0) { - if (parse_checkcpdtable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the input conversion table */ + if (strncmp(line, "ICONV", 5) == 0) { + if (parse_convtable(line, afflst, &iconvtable, "ICONV")) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the defcompound table */ - if (strncmp(line,"COMPOUNDRULE",12) == 0) { - if (parse_defcpdtable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the input conversion table */ + if (strncmp(line, "OCONV", 5) == 0) { + if (parse_convtable(line, afflst, &oconvtable, "OCONV")) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the related character map table */ - if (strncmp(line,"MAP",3) == 0) { - if (parse_maptable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the phonetic translation table */ + if (strncmp(line, "PHONE", 5) == 0) { + if (parse_phonetable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the word breakpoints table */ - if (strncmp(line,"BREAK",5) == 0) { - if (parse_breaktable(line, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the checkcompoundpattern table */ + if (strncmp(line, "CHECKCOMPOUNDPATTERN", 20) == 0) { + if (parse_checkcpdtable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the language for language specific codes */ - if (strncmp(line,"LANG",4) == 0) { - if (parse_string(line, &lang, afflst->getlinenum())) { - finishFileMgr(afflst); - return 1; - } - langnum = get_lang_num(lang); - } - - if (strncmp(line,"VERSION",7) == 0) { - for(line = line + 7; *line == ' ' || *line == '\t'; line++); - version = mystrdup(line); - } - - if (strncmp(line,"MAXNGRAMSUGS",12) == 0) { - if (parse_num(line, &maxngramsugs, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the defcompound table */ + if (strncmp(line, "COMPOUNDRULE", 12) == 0) { + if (parse_defcpdtable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"ONLYMAXDIFF", 11) == 0) - onlymaxdiff = 1; + /* parse in the related character map table */ + if (strncmp(line, "MAP", 3) == 0) { + if (parse_maptable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"MAXDIFF",7) == 0) { - if (parse_num(line, &maxdiff, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the word breakpoints table */ + if (strncmp(line, "BREAK", 5) == 0) { + if (parse_breaktable(line, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"MAXCPDSUGS",10) == 0) { - if (parse_num(line, &maxcpdsugs, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + /* parse in the language for language specific codes */ + if (strncmp(line, "LANG", 4) == 0) { + if (parse_string(line, &lang, afflst->getlinenum())) { + finishFileMgr(afflst); + return 1; + } + langnum = get_lang_num(lang); + } - if (strncmp(line,"NOSPLITSUGS",11) == 0) { - nosplitsugs=1; - } + if (strncmp(line, "VERSION", 7) == 0) { + for (line = line + 7; *line == ' ' || *line == '\t'; line++) + ; + version = mystrdup(line); + } - if (strncmp(line,"FULLSTRIP",9) == 0) { - fullstrip=1; - } + if (strncmp(line, "MAXNGRAMSUGS", 12) == 0) { + if (parse_num(line, &maxngramsugs, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - if (strncmp(line,"SUGSWITHDOTS",12) == 0) { - sugswithdots=1; - } + if (strncmp(line, "ONLYMAXDIFF", 11) == 0) + onlymaxdiff = 1; - /* parse in the flag used by forbidden words */ - if (strncmp(line,"KEEPCASE",8) == 0) { - if (parse_flag(line, &keepcase, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "MAXDIFF", 7) == 0) { + if (parse_num(line, &maxdiff, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by `forceucase' */ - if (strncmp(line,"FORCEUCASE",10) == 0) { - if (parse_flag(line, &forceucase, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "MAXCPDSUGS", 10) == 0) { + if (parse_num(line, &maxcpdsugs, afflst)) { + finishFileMgr(afflst); + return 1; + } + } - /* parse in the flag used by `warn' */ - if (strncmp(line,"WARN",4) == 0) { - if (parse_flag(line, &warn, afflst)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "NOSPLITSUGS", 11) == 0) { + nosplitsugs = 1; + } - if (strncmp(line,"FORBIDWARN",10) == 0) { - forbidwarn=1; - } + if (strncmp(line, "FULLSTRIP", 9) == 0) { + fullstrip = 1; + } - /* parse in the flag used by the affix generator */ - if (strncmp(line,"SUBSTANDARD",11) == 0) { - if (parse_flag(line, &substandard, afflst)) { - finishFileMgr(afflst); - return 1; - } - } - - if (strncmp(line,"CHECKSHARPS",11) == 0) { - checksharps=1; - } - - /* parse this affix: P - prefix, S - suffix */ - ft = ' '; - if (strncmp(line,"PFX",3) == 0) ft = complexprefixes ? 'S' : 'P'; - if (strncmp(line,"SFX",3) == 0) ft = complexprefixes ? 'P' : 'S'; - if (ft != ' ') { - if (dupflags_ini) { - memset(dupflags, 0, sizeof(dupflags)); - dupflags_ini = 0; - } - if (parse_affix(line, ft, afflst, dupflags)) { - finishFileMgr(afflst); - return 1; - } - } + if (strncmp(line, "SUGSWITHDOTS", 12) == 0) { + sugswithdots = 1; + } + + /* parse in the flag used by forbidden words */ + if (strncmp(line, "KEEPCASE", 8) == 0) { + if (parse_flag(line, &keepcase, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + + /* parse in the flag used by `forceucase' */ + if (strncmp(line, "FORCEUCASE", 10) == 0) { + if (parse_flag(line, &forceucase, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + + /* parse in the flag used by `warn' */ + if (strncmp(line, "WARN", 4) == 0) { + if (parse_flag(line, &warn, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + + if (strncmp(line, "FORBIDWARN", 10) == 0) { + forbidwarn = 1; + } + + /* parse in the flag used by the affix generator */ + if (strncmp(line, "SUBSTANDARD", 11) == 0) { + if (parse_flag(line, &substandard, afflst)) { + finishFileMgr(afflst); + return 1; + } + } + + if (strncmp(line, "CHECKSHARPS", 11) == 0) { + checksharps = 1; } - finishFileMgr(afflst); - // affix trees are sorted now + /* parse this affix: P - prefix, S - suffix */ + ft = ' '; + if (strncmp(line, "PFX", 3) == 0) + ft = complexprefixes ? 'S' : 'P'; + if (strncmp(line, "SFX", 3) == 0) + ft = complexprefixes ? 'P' : 'S'; + if (ft != ' ') { + if (dupflags_ini) { + memset(dupflags, 0, sizeof(dupflags)); + dupflags_ini = 0; + } + if (parse_affix(line, ft, afflst, dupflags)) { + finishFileMgr(afflst); + return 1; + } + } + } - // now we can speed up performance greatly taking advantage of the - // relationship between the affixes and the idea of "subsets". + finishFileMgr(afflst); + // affix trees are sorted now - // View each prefix as a potential leading subset of another and view - // each suffix (reversed) as a potential trailing subset of another. + // now we can speed up performance greatly taking advantage of the + // relationship between the affixes and the idea of "subsets". - // To illustrate this relationship if we know the prefix "ab" is found in the - // word to examine, only prefixes that "ab" is a leading subset of need be examined. - // Furthermore is "ab" is not present then none of the prefixes that "ab" is - // is a subset need be examined. - // The same argument goes for suffix string that are reversed. + // View each prefix as a potential leading subset of another and view + // each suffix (reversed) as a potential trailing subset of another. - // Then to top this off why not examine the first char of the word to quickly - // limit the set of prefixes to examine (i.e. the prefixes to examine must - // be leading supersets of the first character of the word (if they exist) - - // To take advantage of this "subset" relationship, we need to add two links - // from entry. One to take next if the current prefix is found (call it nexteq) - // and one to take next if the current prefix is not found (call it nextne). + // To illustrate this relationship if we know the prefix "ab" is found in the + // word to examine, only prefixes that "ab" is a leading subset of need be + // examined. + // Furthermore is "ab" is not present then none of the prefixes that "ab" is + // is a subset need be examined. + // The same argument goes for suffix string that are reversed. - // Since we have built ordered lists, all that remains is to properly initialize - // the nextne and nexteq pointers that relate them + // Then to top this off why not examine the first char of the word to quickly + // limit the set of prefixes to examine (i.e. the prefixes to examine must + // be leading supersets of the first character of the word (if they exist) - process_pfx_order(); - process_sfx_order(); + // To take advantage of this "subset" relationship, we need to add two links + // from entry. One to take next if the current prefix is found (call it + // nexteq) + // and one to take next if the current prefix is not found (call it nextne). - /* get encoding for CHECKCOMPOUNDCASE */ - if (!utf8) { - char * enc = get_encoding(); + // Since we have built ordered lists, all that remains is to properly + // initialize + // the nextne and nexteq pointers that relate them + + process_pfx_order(); + process_sfx_order(); + + /* get encoding for CHECKCOMPOUNDCASE */ + if (!utf8) { + char* enc = get_encoding(); csconv = get_current_cs(enc); free(enc); enc = NULL; - char expw[MAXLNLEN]; + std::string expw; if (wordchars) { - strcpy(expw, wordchars); - free(wordchars); - } else *expw = '\0'; + expw.assign(wordchars); + free(wordchars); + } for (int i = 0; i <= 255; i++) { - if ( (csconv[i].cupper != csconv[i].clower) && - (! strchr(expw, (char) i))) { - *(expw + strlen(expw) + 1) = '\0'; - *(expw + strlen(expw)) = (char) i; - } + if ((csconv[i].cupper != csconv[i].clower) && + (expw.find((char)i) == std::string::npos)) { + expw.push_back((char)i); + } } - wordchars = mystrdup(expw); - } + wordchars = mystrdup(expw.c_str()); + } - // default BREAK definition - if (numbreak == -1) { - breaktable = (char **) malloc(sizeof(char *) * 3); - if (!breaktable) return 1; - breaktable[0] = mystrdup("-"); - breaktable[1] = mystrdup("^-"); - breaktable[2] = mystrdup("-$"); - if (breaktable[0] && breaktable[1] && breaktable[2]) numbreak = 3; - } - return 0; + // default BREAK definition + if (numbreak == -1) { + breaktable = (char**)malloc(sizeof(char*) * 3); + if (!breaktable) + return 1; + breaktable[0] = mystrdup("-"); + breaktable[1] = mystrdup("^-"); + breaktable[2] = mystrdup("-$"); + if (breaktable[0] && breaktable[1] && breaktable[2]) + numbreak = 3; + } + return 0; } - // we want to be able to quickly access prefix information -// both by prefix flag, and sorted by prefix string itself +// both by prefix flag, and sorted by prefix string itself // so we need to set up two indexes -int AffixMgr::build_pfxtree(PfxEntry* pfxptr) -{ - PfxEntry * ptr; - PfxEntry * pptr; - PfxEntry * ep = pfxptr; +int AffixMgr::build_pfxtree(PfxEntry* pfxptr) { + PfxEntry* ptr; + PfxEntry* pptr; + PfxEntry* ep = pfxptr; // get the right starting points - const char * key = ep->getKey(); - const unsigned char flg = (unsigned char) (ep->getFlag() & 0x00FF); + const char* key = ep->getKey(); + const unsigned char flg = (unsigned char)(ep->getFlag() & 0x00FF); // first index by flag which must exist ptr = pFlag[flg]; ep->setFlgNxt(ptr); pFlag[flg] = ep; - // handle the special case of null affix string if (strlen(key) == 0) { // always inset them at head of list at element 0 - ptr = pStart[0]; - ep->setNext(ptr); - pStart[0] = ep; - return 0; + ptr = pStart[0]; + ep->setNext(ptr); + pStart[0] = ep; + return 0; } // now handle the normal case ep->setNextEQ(NULL); ep->setNextNE(NULL); - unsigned char sp = *((const unsigned char *)key); + unsigned char sp = *((const unsigned char*)key); ptr = pStart[sp]; - - // handle the first insert + + // handle the first insert if (!ptr) { - pStart[sp] = ep; - return 0; + pStart[sp] = ep; + return 0; } - // otherwise use binary tree insertion so that a sorted // list can easily be generated later pptr = NULL; for (;;) { pptr = ptr; - if (strcmp(ep->getKey(), ptr->getKey() ) <= 0) { - ptr = ptr->getNextEQ(); - if (!ptr) { - pptr->setNextEQ(ep); - break; - } + if (strcmp(ep->getKey(), ptr->getKey()) <= 0) { + ptr = ptr->getNextEQ(); + if (!ptr) { + pptr->setNextEQ(ep); + break; + } } else { - ptr = ptr->getNextNE(); - if (!ptr) { - pptr->setNextNE(ep); - break; - } + ptr = ptr->getNextNE(); + if (!ptr) { + pptr->setNextNE(ep); + break; + } } } return 0; @@ -849,15 +948,14 @@ int AffixMgr::build_pfxtree(PfxEntry* pfxptr) // we want to be able to quickly access suffix information // both by suffix flag, and sorted by the reverse of the // suffix string itself; so we need to set up two indexes -int AffixMgr::build_sfxtree(SfxEntry* sfxptr) -{ - SfxEntry * ptr; - SfxEntry * pptr; - SfxEntry * ep = sfxptr; +int AffixMgr::build_sfxtree(SfxEntry* sfxptr) { + SfxEntry* ptr; + SfxEntry* pptr; + SfxEntry* ep = sfxptr; /* get the right starting point */ - const char * key = ep->getKey(); - const unsigned char flg = (unsigned char) (ep->getFlag() & 0x00FF); + const char* key = ep->getKey(); + const unsigned char flg = (unsigned char)(ep->getFlag() & 0x00FF); // first index by flag which must exist ptr = sFlag[flg]; @@ -869,23 +967,23 @@ int AffixMgr::build_sfxtree(SfxEntry* sfxptr) // handle the special case of null affix string if (strlen(key) == 0) { // always inset them at head of list at element 0 - ptr = sStart[0]; - ep->setNext(ptr); - sStart[0] = ep; - return 0; + ptr = sStart[0]; + ep->setNext(ptr); + sStart[0] = ep; + return 0; } // now handle the normal case ep->setNextEQ(NULL); ep->setNextNE(NULL); - unsigned char sp = *((const unsigned char *)key); + unsigned char sp = *((const unsigned char*)key); ptr = sStart[sp]; - - // handle the first insert + + // handle the first insert if (!ptr) { - sStart[sp] = ep; - return 0; + sStart[sp] = ep; + return 0; } // otherwise use binary tree insertion so that a sorted @@ -893,35 +991,32 @@ int AffixMgr::build_sfxtree(SfxEntry* sfxptr) pptr = NULL; for (;;) { pptr = ptr; - if (strcmp(ep->getKey(), ptr->getKey() ) <= 0) { - ptr = ptr->getNextEQ(); - if (!ptr) { - pptr->setNextEQ(ep); - break; - } + if (strcmp(ep->getKey(), ptr->getKey()) <= 0) { + ptr = ptr->getNextEQ(); + if (!ptr) { + pptr->setNextEQ(ep); + break; + } } else { - ptr = ptr->getNextNE(); - if (!ptr) { - pptr->setNextNE(ep); - break; - } + ptr = ptr->getNextNE(); + if (!ptr) { + pptr->setNextNE(ep); + break; + } } } return 0; } // convert from binary tree to sorted list -int AffixMgr::process_pfx_tree_to_list() -{ - for (int i=1; i< SETSIZE; i++) { - pStart[i] = process_pfx_in_order(pStart[i],NULL); +int AffixMgr::process_pfx_tree_to_list() { + for (int i = 1; i < SETSIZE; i++) { + pStart[i] = process_pfx_in_order(pStart[i], NULL); } return 0; } - -PfxEntry* AffixMgr::process_pfx_in_order(PfxEntry* ptr, PfxEntry* nptr) -{ +PfxEntry* AffixMgr::process_pfx_in_order(PfxEntry* ptr, PfxEntry* nptr) { if (ptr) { nptr = process_pfx_in_order(ptr->getNextNE(), nptr); ptr->setNext(nptr); @@ -930,18 +1025,15 @@ PfxEntry* AffixMgr::process_pfx_in_order(PfxEntry* ptr, PfxEntry* nptr) return nptr; } - // convert from binary tree to sorted list -int AffixMgr:: process_sfx_tree_to_list() -{ - for (int i=1; i< SETSIZE; i++) { - sStart[i] = process_sfx_in_order(sStart[i],NULL); +int AffixMgr::process_sfx_tree_to_list() { + for (int i = 1; i < SETSIZE; i++) { + sStart[i] = process_sfx_in_order(sStart[i], NULL); } return 0; } -SfxEntry* AffixMgr::process_sfx_in_order(SfxEntry* ptr, SfxEntry* nptr) -{ +SfxEntry* AffixMgr::process_sfx_in_order(SfxEntry* ptr, SfxEntry* nptr) { if (ptr) { nptr = process_sfx_in_order(ptr->getNextNE(), nptr); ptr->setNext(nptr); @@ -950,142 +1042,156 @@ SfxEntry* AffixMgr::process_sfx_in_order(SfxEntry* ptr, SfxEntry* nptr) return nptr; } - // reinitialize the PfxEntry links NextEQ and NextNE to speed searching // using the idea of leading subsets this time -int AffixMgr::process_pfx_order() -{ - PfxEntry* ptr; - - // loop through each prefix list starting point - for (int i=1; i < SETSIZE; i++) { - - ptr = pStart[i]; - - // look through the remainder of the list - // and find next entry with affix that - // the current one is not a subset of - // mark that as destination for NextNE - // use next in list that you are a subset - // of as NextEQ - - for (; ptr != NULL; ptr = ptr->getNext()) { - - PfxEntry * nptr = ptr->getNext(); - for (; nptr != NULL; nptr = nptr->getNext()) { - if (! isSubset( ptr->getKey() , nptr->getKey() )) break; - } - ptr->setNextNE(nptr); - ptr->setNextEQ(NULL); - if ((ptr->getNext()) && isSubset(ptr->getKey() , (ptr->getNext())->getKey())) - ptr->setNextEQ(ptr->getNext()); - } - - // now clean up by adding smart search termination strings: - // if you are already a superset of the previous prefix - // but not a subset of the next, search can end here - // so set NextNE properly - - ptr = pStart[i]; - for (; ptr != NULL; ptr = ptr->getNext()) { - PfxEntry * nptr = ptr->getNext(); - PfxEntry * mptr = NULL; - for (; nptr != NULL; nptr = nptr->getNext()) { - if (! isSubset(ptr->getKey(),nptr->getKey())) break; - mptr = nptr; - } - if (mptr) mptr->setNextNE(NULL); - } +int AffixMgr::process_pfx_order() { + PfxEntry* ptr; + + // loop through each prefix list starting point + for (int i = 1; i < SETSIZE; i++) { + ptr = pStart[i]; + + // look through the remainder of the list + // and find next entry with affix that + // the current one is not a subset of + // mark that as destination for NextNE + // use next in list that you are a subset + // of as NextEQ + + for (; ptr != NULL; ptr = ptr->getNext()) { + PfxEntry* nptr = ptr->getNext(); + for (; nptr != NULL; nptr = nptr->getNext()) { + if (!isSubset(ptr->getKey(), nptr->getKey())) + break; + } + ptr->setNextNE(nptr); + ptr->setNextEQ(NULL); + if ((ptr->getNext()) && + isSubset(ptr->getKey(), (ptr->getNext())->getKey())) + ptr->setNextEQ(ptr->getNext()); } - return 0; + + // now clean up by adding smart search termination strings: + // if you are already a superset of the previous prefix + // but not a subset of the next, search can end here + // so set NextNE properly + + ptr = pStart[i]; + for (; ptr != NULL; ptr = ptr->getNext()) { + PfxEntry* nptr = ptr->getNext(); + PfxEntry* mptr = NULL; + for (; nptr != NULL; nptr = nptr->getNext()) { + if (!isSubset(ptr->getKey(), nptr->getKey())) + break; + mptr = nptr; + } + if (mptr) + mptr->setNextNE(NULL); + } + } + return 0; } // initialize the SfxEntry links NextEQ and NextNE to speed searching // using the idea of leading subsets this time -int AffixMgr::process_sfx_order() -{ - SfxEntry* ptr; - - // loop through each prefix list starting point - for (int i=1; i < SETSIZE; i++) { - - ptr = sStart[i]; - - // look through the remainder of the list - // and find next entry with affix that - // the current one is not a subset of - // mark that as destination for NextNE - // use next in list that you are a subset - // of as NextEQ - - for (; ptr != NULL; ptr = ptr->getNext()) { - SfxEntry * nptr = ptr->getNext(); - for (; nptr != NULL; nptr = nptr->getNext()) { - if (! isSubset(ptr->getKey(),nptr->getKey())) break; - } - ptr->setNextNE(nptr); - ptr->setNextEQ(NULL); - if ((ptr->getNext()) && isSubset(ptr->getKey(),(ptr->getNext())->getKey())) - ptr->setNextEQ(ptr->getNext()); - } - - - // now clean up by adding smart search termination strings: - // if you are already a superset of the previous suffix - // but not a subset of the next, search can end here - // so set NextNE properly - - ptr = sStart[i]; - for (; ptr != NULL; ptr = ptr->getNext()) { - SfxEntry * nptr = ptr->getNext(); - SfxEntry * mptr = NULL; - for (; nptr != NULL; nptr = nptr->getNext()) { - if (! isSubset(ptr->getKey(),nptr->getKey())) break; - mptr = nptr; - } - if (mptr) mptr->setNextNE(NULL); - } +int AffixMgr::process_sfx_order() { + SfxEntry* ptr; + + // loop through each prefix list starting point + for (int i = 1; i < SETSIZE; i++) { + ptr = sStart[i]; + + // look through the remainder of the list + // and find next entry with affix that + // the current one is not a subset of + // mark that as destination for NextNE + // use next in list that you are a subset + // of as NextEQ + + for (; ptr != NULL; ptr = ptr->getNext()) { + SfxEntry* nptr = ptr->getNext(); + for (; nptr != NULL; nptr = nptr->getNext()) { + if (!isSubset(ptr->getKey(), nptr->getKey())) + break; + } + ptr->setNextNE(nptr); + ptr->setNextEQ(NULL); + if ((ptr->getNext()) && + isSubset(ptr->getKey(), (ptr->getNext())->getKey())) + ptr->setNextEQ(ptr->getNext()); } - return 0; + + // now clean up by adding smart search termination strings: + // if you are already a superset of the previous suffix + // but not a subset of the next, search can end here + // so set NextNE properly + + ptr = sStart[i]; + for (; ptr != NULL; ptr = ptr->getNext()) { + SfxEntry* nptr = ptr->getNext(); + SfxEntry* mptr = NULL; + for (; nptr != NULL; nptr = nptr->getNext()) { + if (!isSubset(ptr->getKey(), nptr->getKey())) + break; + mptr = nptr; + } + if (mptr) + mptr->setNextNE(NULL); + } + } + return 0; } // add flags to the result for dictionary debugging -void AffixMgr::debugflag(char * result, unsigned short flag) { - char * st = encode_flag(flag); - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_FLAG, MAXLNLEN); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } +void AffixMgr::debugflag(char* result, unsigned short flag) { + char* st = encode_flag(flag); + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, MORPH_FLAG, MAXLNLEN); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + } +} + +// add flags to the result for dictionary debugging +std::string& AffixMgr::debugflag(std::string& result, unsigned short flag) { + char* st = encode_flag(flag); + result.append(" "); + result.append(MORPH_FLAG); + if (st) { + result.append(st); + free(st); + } + return result; } // calculate the character length of the condition -int AffixMgr::condlen(char * st) -{ +int AffixMgr::condlen(const char* st) { int l = 0; bool group = false; - for(; *st; st++) { + for (; *st; st++) { if (*st == '[') { - group = true; - l++; - } else if (*st == ']') group = false; - else if (!group && (!utf8 || - (!(*st & 0x80) || ((*st & 0xc0) == 0x80)))) l++; + group = true; + l++; + } else if (*st == ']') + group = false; + else if (!group && (!utf8 || (!(*st & 0x80) || ((*st & 0xc0) == 0x80)))) + l++; } return l; } -int AffixMgr::encodeit(affentry &entry, char * cs) -{ - if (strcmp(cs,".") != 0) { - entry.numconds = (char) condlen(cs); +int AffixMgr::encodeit(affentry& entry, const char* cs) { + if (strcmp(cs, ".") != 0) { + entry.numconds = (char)condlen(cs); + // coverity[buffer_size_warning] - deliberate use of lack of end of conds + // padded by strncpy as long condition flag strncpy(entry.c.conds, cs, MAXCONDLEN); - // long condition (end of conds padded by strncpy) if (entry.c.conds[MAXCONDLEN - 1] && cs[MAXCONDLEN]) { entry.opts += aeLONGCOND; entry.c.l.conds2 = mystrdup(cs + MAXCONDLEN_1); - if (!entry.c.l.conds2) return 1; + if (!entry.c.l.conds2) + return 1; } } else { entry.numconds = 0; @@ -1095,289 +1201,304 @@ int AffixMgr::encodeit(affentry &entry, char * cs) } // return 1 if s1 is a leading subset of s2 (dots are for infixes) -inline int AffixMgr::isSubset(const char * s1, const char * s2) - { - while (((*s1 == *s2) || (*s1 == '.')) && (*s1 != '\0')) { - s1++; - s2++; - } - return (*s1 == '\0'); - } - +inline int AffixMgr::isSubset(const char* s1, const char* s2) { + while (((*s1 == *s2) || (*s1 == '.')) && (*s1 != '\0')) { + s1++; + s2++; + } + return (*s1 == '\0'); +} // check word for prefixes -struct hentry * AffixMgr::prefix_check(const char * word, int len, char in_compound, - const FLAG needflag) -{ - struct hentry * rv= NULL; +struct hentry* AffixMgr::prefix_check(const char* word, + int len, + char in_compound, + const FLAG needflag) { + struct hentry* rv = NULL; - pfx = NULL; - pfxappnd = NULL; - sfxappnd = NULL; - - // first handle the special case of 0 length prefixes - PfxEntry * pe = pStart[0]; - while (pe) { - if ( - // fogemorpheme - ((in_compound != IN_CPD_NOT) || !(pe->getCont() && - (TESTAFF(pe->getCont(), onlyincompound, pe->getContLen())))) && - // permit prefixes in compounds - ((in_compound != IN_CPD_END) || (pe->getCont() && - (TESTAFF(pe->getCont(), compoundpermitflag, pe->getContLen())))) - ) { - // check prefix - rv = pe->checkword(word, len, in_compound, needflag); - if (rv) { - pfx=pe; // BUG: pfx not stateless - return rv; - } - } - pe = pe->getNext(); - } - - // now handle the general case - unsigned char sp = *((const unsigned char *)word); - PfxEntry * pptr = pStart[sp]; - - while (pptr) { - if (isSubset(pptr->getKey(),word)) { - if ( - // fogemorpheme - ((in_compound != IN_CPD_NOT) || !(pptr->getCont() && - (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen())))) && - // permit prefixes in compounds - ((in_compound != IN_CPD_END) || (pptr->getCont() && - (TESTAFF(pptr->getCont(), compoundpermitflag, pptr->getContLen())))) - ) { - // check prefix - rv = pptr->checkword(word, len, in_compound, needflag); - if (rv) { - pfx=pptr; // BUG: pfx not stateless - return rv; - } - } - pptr = pptr->getNextEQ(); - } else { - pptr = pptr->getNextNE(); + pfx = NULL; + pfxappnd = NULL; + sfxappnd = NULL; + sfxextra = 0; + + // first handle the special case of 0 length prefixes + PfxEntry* pe = pStart[0]; + while (pe) { + if ( + // fogemorpheme + ((in_compound != IN_CPD_NOT) || + !(pe->getCont() && + (TESTAFF(pe->getCont(), onlyincompound, pe->getContLen())))) && + // permit prefixes in compounds + ((in_compound != IN_CPD_END) || + (pe->getCont() && + (TESTAFF(pe->getCont(), compoundpermitflag, pe->getContLen()))))) { + // check prefix + rv = pe->checkword(word, len, in_compound, needflag); + if (rv) { + pfx = pe; // BUG: pfx not stateless + return rv; + } + } + pe = pe->getNext(); + } + + // now handle the general case + unsigned char sp = *((const unsigned char*)word); + PfxEntry* pptr = pStart[sp]; + + while (pptr) { + if (isSubset(pptr->getKey(), word)) { + if ( + // fogemorpheme + ((in_compound != IN_CPD_NOT) || + !(pptr->getCont() && + (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen())))) && + // permit prefixes in compounds + ((in_compound != IN_CPD_END) || + (pptr->getCont() && (TESTAFF(pptr->getCont(), compoundpermitflag, + pptr->getContLen()))))) { + // check prefix + rv = pptr->checkword(word, len, in_compound, needflag); + if (rv) { + pfx = pptr; // BUG: pfx not stateless + return rv; } + } + pptr = pptr->getNextEQ(); + } else { + pptr = pptr->getNextNE(); } - - return NULL; + } + + return NULL; } // check word for prefixes -struct hentry * AffixMgr::prefix_check_twosfx(const char * word, int len, - char in_compound, const FLAG needflag) -{ - struct hentry * rv= NULL; +struct hentry* AffixMgr::prefix_check_twosfx(const char* word, + int len, + char in_compound, + const FLAG needflag) { + struct hentry* rv = NULL; - pfx = NULL; - sfxappnd = NULL; - - // first handle the special case of 0 length prefixes - PfxEntry * pe = pStart[0]; - - while (pe) { - rv = pe->check_twosfx(word, len, in_compound, needflag); - if (rv) return rv; - pe = pe->getNext(); - } - - // now handle the general case - unsigned char sp = *((const unsigned char *)word); - PfxEntry * pptr = pStart[sp]; - - while (pptr) { - if (isSubset(pptr->getKey(),word)) { - rv = pptr->check_twosfx(word, len, in_compound, needflag); - if (rv) { - pfx = pptr; - return rv; - } - pptr = pptr->getNextEQ(); - } else { - pptr = pptr->getNextNE(); - } + pfx = NULL; + sfxappnd = NULL; + sfxextra = 0; + + // first handle the special case of 0 length prefixes + PfxEntry* pe = pStart[0]; + + while (pe) { + rv = pe->check_twosfx(word, len, in_compound, needflag); + if (rv) + return rv; + pe = pe->getNext(); + } + + // now handle the general case + unsigned char sp = *((const unsigned char*)word); + PfxEntry* pptr = pStart[sp]; + + while (pptr) { + if (isSubset(pptr->getKey(), word)) { + rv = pptr->check_twosfx(word, len, in_compound, needflag); + if (rv) { + pfx = pptr; + return rv; + } + pptr = pptr->getNextEQ(); + } else { + pptr = pptr->getNextNE(); } - - return NULL; + } + + return NULL; } // check word for prefixes -char * AffixMgr::prefix_check_morph(const char * word, int len, char in_compound, - const FLAG needflag) -{ - char * st; +char* AffixMgr::prefix_check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { - char result[MAXLNLEN]; - result[0] = '\0'; + char result[MAXLNLEN]; + result[0] = '\0'; - pfx = NULL; - sfxappnd = NULL; - - // first handle the special case of 0 length prefixes - PfxEntry * pe = pStart[0]; - while (pe) { - st = pe->check_morph(word,len,in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - // if (rv) return rv; - pe = pe->getNext(); - } - - // now handle the general case - unsigned char sp = *((const unsigned char *)word); - PfxEntry * pptr = pStart[sp]; - - while (pptr) { - if (isSubset(pptr->getKey(),word)) { - st = pptr->check_morph(word,len,in_compound, needflag); - if (st) { - // fogemorpheme - if ((in_compound != IN_CPD_NOT) || !((pptr->getCont() && - (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen()))))) { - mystrcat(result, st, MAXLNLEN); - pfx = pptr; - } - free(st); - } - pptr = pptr->getNextEQ(); - } else { - pptr = pptr->getNextNE(); + pfx = NULL; + sfxappnd = NULL; + sfxextra = 0; + + // first handle the special case of 0 length prefixes + PfxEntry* pe = pStart[0]; + while (pe) { + char* st = pe->check_morph(word, len, in_compound, needflag); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + } + // if (rv) return rv; + pe = pe->getNext(); + } + + // now handle the general case + unsigned char sp = *((const unsigned char*)word); + PfxEntry* pptr = pStart[sp]; + + while (pptr) { + if (isSubset(pptr->getKey(), word)) { + char* st = pptr->check_morph(word, len, in_compound, needflag); + if (st) { + // fogemorpheme + if ((in_compound != IN_CPD_NOT) || + !((pptr->getCont() && (TESTAFF(pptr->getCont(), onlyincompound, + pptr->getContLen()))))) { + mystrcat(result, st, MAXLNLEN); + pfx = pptr; } + free(st); + } + pptr = pptr->getNextEQ(); + } else { + pptr = pptr->getNextNE(); } - - if (*result) return mystrdup(result); - return NULL; -} + } + if (*result) + return mystrdup(result); + return NULL; +} // check word for prefixes -char * AffixMgr::prefix_check_twosfx_morph(const char * word, int len, - char in_compound, const FLAG needflag) -{ - char * st; +char* AffixMgr::prefix_check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + char result[MAXLNLEN]; + result[0] = '\0'; - char result[MAXLNLEN]; - result[0] = '\0'; + pfx = NULL; + sfxappnd = NULL; + sfxextra = 0; - pfx = NULL; - sfxappnd = NULL; - - // first handle the special case of 0 length prefixes - PfxEntry * pe = pStart[0]; - while (pe) { - st = pe->check_twosfx_morph(word,len,in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - pe = pe->getNext(); - } - - // now handle the general case - unsigned char sp = *((const unsigned char *)word); - PfxEntry * pptr = pStart[sp]; - - while (pptr) { - if (isSubset(pptr->getKey(),word)) { - st = pptr->check_twosfx_morph(word, len, in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - pfx = pptr; - } - pptr = pptr->getNextEQ(); - } else { - pptr = pptr->getNextNE(); - } + // first handle the special case of 0 length prefixes + PfxEntry* pe = pStart[0]; + while (pe) { + char* st = pe->check_twosfx_morph(word, len, in_compound, needflag); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); } - - if (*result) return mystrdup(result); - return NULL; + pe = pe->getNext(); + } + + // now handle the general case + unsigned char sp = *((const unsigned char*)word); + PfxEntry* pptr = pStart[sp]; + + while (pptr) { + if (isSubset(pptr->getKey(), word)) { + char* st = pptr->check_twosfx_morph(word, len, in_compound, needflag); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + pfx = pptr; + } + pptr = pptr->getNextEQ(); + } else { + pptr = pptr->getNextNE(); + } + } + + if (*result) + return mystrdup(result); + return NULL; } // Is word a non compound with a REP substitution (see checkcompoundrep)? -int AffixMgr::cpdrep_check(const char * word, int wl) -{ - char candidate[MAXLNLEN]; - const char * r; - int lenr, lenp; - - if ((wl < 2) || !numrep) return 0; - - for (int i=0; i < numrep; i++ ) { - r = word; - lenr = strlen(reptable[i].pattern2); - lenp = strlen(reptable[i].pattern); - // search every occurence of the pattern in the word - while ((r=strstr(r, reptable[i].pattern)) != NULL) { - strcpy(candidate, word); - if (r-word + lenr + strlen(r+lenp) >= MAXLNLEN) break; - strcpy(candidate+(r-word),reptable[i].pattern2); - strcpy(candidate+(r-word)+lenr, r+lenp); - if (candidate_check(candidate,strlen(candidate))) return 1; - r++; // search for the next letter - } - } - return 0; +int AffixMgr::cpdrep_check(const char* word, int wl) { + + if ((wl < 2) || !numrep) + return 0; + + for (int i = 0; i < numrep; i++) { + const char* r = word; + int lenp = strlen(reptable[i].pattern); + // search every occurence of the pattern in the word + while ((r = strstr(r, reptable[i].pattern)) != NULL) { + std::string candidate(word); + candidate.replace(r - word, lenp, reptable[i].pattern2); + if (candidate_check(candidate.c_str(), candidate.size())) + return 1; + r++; // search for the next letter + } + } + return 0; } // forbid compoundings when there are special patterns at word bound -int AffixMgr::cpdpat_check(const char * word, int pos, hentry * r1, hentry * r2, const char /*affixed*/) -{ +int AffixMgr::cpdpat_check(const char* word, + int pos, + hentry* r1, + hentry* r2, + const char /*affixed*/) { int len; for (int i = 0; i < numcheckcpd; i++) { - if (isSubset(checkcpdtable[i].pattern2, word + pos) && + if (isSubset(checkcpdtable[i].pattern2, word + pos) && (!r1 || !checkcpdtable[i].cond || - (r1->astr && TESTAFF(r1->astr, checkcpdtable[i].cond, r1->alen))) && + (r1->astr && TESTAFF(r1->astr, checkcpdtable[i].cond, r1->alen))) && (!r2 || !checkcpdtable[i].cond2 || - (r2->astr && TESTAFF(r2->astr, checkcpdtable[i].cond2, r2->alen))) && + (r2->astr && TESTAFF(r2->astr, checkcpdtable[i].cond2, r2->alen))) && // zero length pattern => only TESTAFF // zero pattern (0/flag) => unmodified stem (zero affixes allowed) - (!*(checkcpdtable[i].pattern) || ( - (*(checkcpdtable[i].pattern)=='0' && r1->blen <= pos && strncmp(word + pos - r1->blen, r1->word, r1->blen) == 0) || - (*(checkcpdtable[i].pattern)!='0' && ((len = strlen(checkcpdtable[i].pattern)) != 0) && - strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)))) { - return 1; - } + (!*(checkcpdtable[i].pattern) || + ((*(checkcpdtable[i].pattern) == '0' && r1->blen <= pos && + strncmp(word + pos - r1->blen, r1->word, r1->blen) == 0) || + (*(checkcpdtable[i].pattern) != '0' && + ((len = strlen(checkcpdtable[i].pattern)) != 0) && + strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)))) { + return 1; + } } return 0; } -// forbid compounding with neighbouring upper and lower case characters at word bounds -int AffixMgr::cpdcase_check(const char * word, int pos) -{ +// forbid compounding with neighbouring upper and lower case characters at word +// bounds +int AffixMgr::cpdcase_check(const char* word, int pos) { if (utf8) { - w_char u, w; - const char * p; - u8_u16(&u, 1, word + pos); - for (p = word + pos - 1; (*p & 0xc0) == 0x80; p--); - u8_u16(&w, 1, p); - unsigned short a = (u.h << 8) + u.l; - unsigned short b = (w.h << 8) + w.l; - if (((unicodetoupper(a, langnum) == a) || (unicodetoupper(b, langnum) == b)) && - (a != '-') && (b != '-')) return 1; + const char* p; + for (p = word + pos - 1; (*p & 0xc0) == 0x80; p--) + ; + std::string pair(p); + std::vector pair_u; + u8_u16(pair_u, pair); + unsigned short a = pair_u.size() > 1 ? ((pair_u[1].h << 8) + pair_u[1].l) : 0; + unsigned short b = !pair_u.empty() ? ((pair_u[0].h << 8) + pair_u[0].l) : 0; + if (((unicodetoupper(a, langnum) == a) || + (unicodetoupper(b, langnum) == b)) && + (a != '-') && (b != '-')) + return 1; } else { - unsigned char a = *(word + pos - 1); - unsigned char b = *(word + pos); - if ((csconv[a].ccase || csconv[b].ccase) && (a != '-') && (b != '-')) return 1; + unsigned char a = *(word + pos - 1); + unsigned char b = *(word + pos); + if ((csconv[a].ccase || csconv[b].ccase) && (a != '-') && (b != '-')) + return 1; } return 0; } +struct metachar_data { + signed short btpp; // metacharacter (*, ?) position for backtracking + signed short btwp; // word position for metacharacters + int btnum; // number of matched characters in metacharacter +}; + // check compound patterns -int AffixMgr::defcpd_check(hentry *** words, short wnum, hentry * rv, hentry ** def, char all) -{ - signed short btpp[MAXWORDLEN]; // metacharacter (*, ?) positions for backtracking - signed short btwp[MAXWORDLEN]; // word positions for metacharacters - int btnum[MAXWORDLEN]; // number of matched characters in metacharacter positions - short bt = 0; - int i, j; - int ok; +int AffixMgr::defcpd_check(hentry*** words, + short wnum, + hentry* rv, + hentry** def, + char all) { int w = 0; if (!*words) { @@ -1389,216 +1510,263 @@ int AffixMgr::defcpd_check(hentry *** words, short wnum, hentry * rv, hentry ** return 0; } + std::vector btinfo(1); + + short bt = 0; + int i, j; + (*words)[wnum] = rv; // has the last word COMPOUNDRULE flag? if (rv->alen == 0) { (*words)[wnum] = NULL; - if (w) *words = NULL; + if (w) + *words = NULL; return 0; } - ok = 0; + int ok = 0; for (i = 0; i < numdefcpd; i++) { for (j = 0; j < defcpdtable[i].len; j++) { - if (defcpdtable[i].def[j] != '*' && defcpdtable[i].def[j] != '?' && + if (defcpdtable[i].def[j] != '*' && defcpdtable[i].def[j] != '?' && TESTAFF(rv->astr, defcpdtable[i].def[j], rv->alen)) { - ok = 1; - break; - } + ok = 1; + break; + } } } if (ok == 0) { (*words)[wnum] = NULL; - if (w) *words = NULL; + if (w) + *words = NULL; return 0; } for (i = 0; i < numdefcpd; i++) { - signed short pp = 0; // pattern position - signed short wp = 0; // "words" position + signed short pp = 0; // pattern position + signed short wp = 0; // "words" position int ok2; ok = 1; ok2 = 1; do { while ((pp < defcpdtable[i].len) && (wp <= wnum)) { - if (((pp+1) < defcpdtable[i].len) && - ((defcpdtable[i].def[pp+1] == '*') || (defcpdtable[i].def[pp+1] == '?'))) { - int wend = (defcpdtable[i].def[pp+1] == '?') ? wp : wnum; - ok2 = 1; - pp+=2; - btpp[bt] = pp; - btwp[bt] = wp; - while (wp <= wend) { - if (!(*words)[wp]->alen || - !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp-2], (*words)[wp]->alen)) { - ok2 = 0; - break; - } - wp++; - } - if (wp <= wnum) ok2 = 0; - btnum[bt] = wp - btwp[bt]; - if (btnum[bt] > 0) bt++; - if (ok2) break; - } else { - ok2 = 1; - if (!(*words)[wp] || !(*words)[wp]->alen || - !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp], (*words)[wp]->alen)) { - ok = 0; - break; + if (((pp + 1) < defcpdtable[i].len) && + ((defcpdtable[i].def[pp + 1] == '*') || + (defcpdtable[i].def[pp + 1] == '?'))) { + int wend = (defcpdtable[i].def[pp + 1] == '?') ? wp : wnum; + ok2 = 1; + pp += 2; + btinfo[bt].btpp = pp; + btinfo[bt].btwp = wp; + while (wp <= wend) { + if (!(*words)[wp]->alen || + !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp - 2], + (*words)[wp]->alen)) { + ok2 = 0; + break; } - pp++; wp++; - if ((defcpdtable[i].len == pp) && !(wp > wnum)) ok = 0; + } + if (wp <= wnum) + ok2 = 0; + btinfo[bt].btnum = wp - btinfo[bt].btwp; + if (btinfo[bt].btnum > 0) { + ++bt; + btinfo.resize(bt+1); + } + if (ok2) + break; + } else { + ok2 = 1; + if (!(*words)[wp] || !(*words)[wp]->alen || + !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp], + (*words)[wp]->alen)) { + ok = 0; + break; + } + pp++; + wp++; + if ((defcpdtable[i].len == pp) && !(wp > wnum)) + ok = 0; } } - if (ok && ok2) { + if (ok && ok2) { int r = pp; - while ((defcpdtable[i].len > r) && ((r+1) < defcpdtable[i].len) && - ((defcpdtable[i].def[r+1] == '*') || (defcpdtable[i].def[r+1] == '?'))) r+=2; - if (defcpdtable[i].len <= r) return 1; - } - // backtrack - if (bt) do { - ok = 1; - btnum[bt - 1]--; - pp = btpp[bt - 1]; - wp = btwp[bt - 1] + (signed short) btnum[bt - 1]; - } while ((btnum[bt - 1] < 0) && --bt); - } while (bt); - - if (ok && ok2 && (!all || (defcpdtable[i].len <= pp))) return 1; - - // check zero ending - while (ok && ok2 && (defcpdtable[i].len > pp) && ((pp+1) < defcpdtable[i].len) && - ((defcpdtable[i].def[pp+1] == '*') || (defcpdtable[i].def[pp+1] == '?'))) pp+=2; - if (ok && ok2 && (defcpdtable[i].len <= pp)) return 1; + while ((defcpdtable[i].len > r) && ((r + 1) < defcpdtable[i].len) && + ((defcpdtable[i].def[r + 1] == '*') || + (defcpdtable[i].def[r + 1] == '?'))) + r += 2; + if (defcpdtable[i].len <= r) + return 1; + } + // backtrack + if (bt) + do { + ok = 1; + btinfo[bt - 1].btnum--; + pp = btinfo[bt - 1].btpp; + wp = btinfo[bt - 1].btwp + (signed short)btinfo[bt - 1].btnum; + } while ((btinfo[bt - 1].btnum < 0) && --bt); + } while (bt); + + if (ok && ok2 && (!all || (defcpdtable[i].len <= pp))) + return 1; + + // check zero ending + while (ok && ok2 && (defcpdtable[i].len > pp) && + ((pp + 1) < defcpdtable[i].len) && + ((defcpdtable[i].def[pp + 1] == '*') || + (defcpdtable[i].def[pp + 1] == '?'))) + pp += 2; + if (ok && ok2 && (defcpdtable[i].len <= pp)) + return 1; } (*words)[wnum] = NULL; - if (w) *words = NULL; + if (w) + *words = NULL; return 0; } -inline int AffixMgr::candidate_check(const char * word, int len) -{ - struct hentry * rv=NULL; - +inline int AffixMgr::candidate_check(const char* word, int len) { + struct hentry* rv = NULL; + rv = lookup(word); - if (rv) return 1; + if (rv) + return 1; + + // rv = prefix_check(word,len,1); + // if (rv) return 1; -// rv = prefix_check(word,len,1); -// if (rv) return 1; - - rv = affix_check(word,len); - if (rv) return 1; + rv = affix_check(word, len); + if (rv) + return 1; return 0; } // calculate number of syllable for compound-checking -short AffixMgr::get_syllable(const char * word, int wlen) -{ - if (cpdmaxsyllable==0) return 0; - - short num=0; - - if (!utf8) { - for (int i=0; i 0; i--) { - if (flag_bsearch((unsigned short *) cpdvowels_utf16, - ((unsigned short *) w)[i - 1], cpdvowels_utf16_len)) num++; - } +short AffixMgr::get_syllable(const std::string& word) { + if (cpdmaxsyllable == 0) + return 0; + + short num = 0; + + if (!utf8) { + for (size_t i = 0; i < word.size(); ++i) { + if (strchr(cpdvowels, word[i])) + num++; } - return num; + } else if (cpdvowels_utf16) { + std::vector w; + int i = u8_u16(w, word); + for (; i > 0; i--) { + if (std::binary_search(cpdvowels_utf16, + cpdvowels_utf16 + cpdvowels_utf16_len, + w[i - 1])) { + ++num; + } + } + } + return num; } -void AffixMgr::setcminmax(int * cmin, int * cmax, const char * word, int len) { - if (utf8) { - int i; - for (*cmin = 0, i = 0; (i < cpdmin) && word[*cmin]; i++) { - for ((*cmin)++; (word[*cmin] & 0xc0) == 0x80; (*cmin)++); - } - for (*cmax = len, i = 0; (i < (cpdmin - 1)) && *cmax; i++) { - for ((*cmax)--; (word[*cmax] & 0xc0) == 0x80; (*cmax)--); - } - } else { - *cmin = cpdmin; - *cmax = len - cpdmin + 1; +void AffixMgr::setcminmax(int* cmin, int* cmax, const char* word, int len) { + if (utf8) { + int i; + for (*cmin = 0, i = 0; (i < cpdmin) && *cmin < len; i++) { + for ((*cmin)++; *cmin < len && (word[*cmin] & 0xc0) == 0x80; (*cmin)++) + ; + } + for (*cmax = len, i = 0; (i < (cpdmin - 1)) && *cmax >= 0; i++) { + for ((*cmax)--; *cmax >= 0 && (word[*cmax] & 0xc0) == 0x80; (*cmax)--) + ; } + } else { + *cmin = cpdmin; + *cmax = len - cpdmin + 1; + } } - // check if compound word is correctly spelled // hu_mov_rule = spec. Hungarian rule (XXX) -struct hentry * AffixMgr::compound_check(const char * word, int len, - short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words = NULL, - char hu_mov_rule = 0, char is_sug = 0, int * info = NULL) -{ - int i; - short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2; - struct hentry * rv = NULL; - struct hentry * rv_first; - struct hentry * rwords[MAXWORDLEN]; // buffer for COMPOUND pattern checking - char st [MAXWORDUTF8LEN + 4]; - char ch = '\0'; - int cmin; - int cmax; - int striple = 0; - int scpd = 0; - int soldi = 0; - int oldcmin = 0; - int oldcmax = 0; - int oldlen = 0; - int checkedstriple = 0; - int onlycpdrule; - char affixed = 0; - hentry ** oldwords = words; - - int checked_prefix; - - setcminmax(&cmin, &cmax, word, len); - - strcpy(st, word); - - for (i = cmin; i < cmax; i++) { - // go to end of the UTF-8 character - if (utf8) { - for (; (st[i] & 0xc0) == 0x80; i++); - if (i >= cmax) return NULL; - } - - words = oldwords; - onlycpdrule = (words) ? 1 : 0; +struct hentry* AffixMgr::compound_check(const char* word, + int len, + short wordnum, + short numsyllable, + short maxwordnum, + short wnum, + hentry** words = NULL, + hentry** rwords = NULL, + char hu_mov_rule = 0, + char is_sug = 0, + int* info = NULL) { + int i; + short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2; + struct hentry* rv = NULL; + struct hentry* rv_first; + std::string st; + char ch = '\0'; + int cmin; + int cmax; + int striple = 0; + int scpd = 0; + int soldi = 0; + int oldcmin = 0; + int oldcmax = 0; + int oldlen = 0; + int checkedstriple = 0; + int onlycpdrule; + char affixed = 0; + hentry** oldwords = words; + + int checked_prefix; + + setcminmax(&cmin, &cmax, word, len); + + st.assign(word); + + for (i = cmin; i < cmax; i++) { + // go to end of the UTF-8 character + if (utf8) { + for (; (st[i] & 0xc0) == 0x80; i++) + ; + if (i >= cmax) + return NULL; + } - do { // onlycpdrule loop + words = oldwords; + onlycpdrule = (words) ? 1 : 0; - oldnumsyllable = numsyllable; - oldwordnum = wordnum; - checked_prefix = 0; + do { // onlycpdrule loop + oldnumsyllable = numsyllable; + oldwordnum = wordnum; + checked_prefix = 0; - do { // simplified checkcompoundpattern loop + do { // simplified checkcompoundpattern loop if (scpd > 0) { - for (; scpd <= numcheckcpd && (!checkcpdtable[scpd-1].pattern3 || - strncmp(word + i, checkcpdtable[scpd-1].pattern3, strlen(checkcpdtable[scpd-1].pattern3)) != 0); scpd++); - - if (scpd > numcheckcpd) break; // break simplified checkcompoundpattern loop - strcpy(st + i, checkcpdtable[scpd-1].pattern); + for (; scpd <= numcheckcpd && + (!checkcpdtable[scpd - 1].pattern3 || + strncmp(word + i, checkcpdtable[scpd - 1].pattern3, + strlen(checkcpdtable[scpd - 1].pattern3)) != 0); + scpd++) + ; + + if (scpd > numcheckcpd) + break; // break simplified checkcompoundpattern loop + st.replace(i, std::string::npos, checkcpdtable[scpd - 1].pattern); soldi = i; - i += strlen(checkcpdtable[scpd-1].pattern); - strcpy(st + i, checkcpdtable[scpd-1].pattern2); - strcpy(st + i + strlen(checkcpdtable[scpd-1].pattern2), word + soldi + strlen(checkcpdtable[scpd-1].pattern3)); + i += strlen(checkcpdtable[scpd - 1].pattern); + st.replace(i, std::string::npos, checkcpdtable[scpd - 1].pattern2); + st.replace(i + strlen(checkcpdtable[scpd - 1].pattern2), std::string::npos, + word + soldi + strlen(checkcpdtable[scpd - 1].pattern3)); oldlen = len; - len += strlen(checkcpdtable[scpd-1].pattern) + strlen(checkcpdtable[scpd-1].pattern2) - strlen(checkcpdtable[scpd-1].pattern3); + len += strlen(checkcpdtable[scpd - 1].pattern) + + strlen(checkcpdtable[scpd - 1].pattern2) - + strlen(checkcpdtable[scpd - 1].pattern3); oldcmin = cmin; oldcmax = cmax; - setcminmax(&cmin, &cmax, st, len); + setcminmax(&cmin, &cmax, st.c_str(), len); cmax = len - cpdmin + 1; } @@ -1612,244 +1780,276 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, // FIRST WORD affixed = 1; - rv = lookup(st); // perhaps without prefix + rv = lookup(st.c_str()); // perhaps without prefix // search homonym with compound flag while ((rv) && !hu_mov_rule && - ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || - !((compoundflag && !words && !onlycpdrule && TESTAFF(rv->astr, compoundflag, rv->alen)) || - (compoundbegin && !wordnum && !onlycpdrule && - TESTAFF(rv->astr, compoundbegin, rv->alen)) || + ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || + !((compoundflag && !words && !onlycpdrule && + TESTAFF(rv->astr, compoundflag, rv->alen)) || + (compoundbegin && !wordnum && !onlycpdrule && + TESTAFF(rv->astr, compoundbegin, rv->alen)) || (compoundmiddle && wordnum && !words && !onlycpdrule && - TESTAFF(rv->astr, compoundmiddle, rv->alen)) || + TESTAFF(rv->astr, compoundmiddle, rv->alen)) || (numdefcpd && onlycpdrule && - ((!words && !wordnum && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)) || - (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0))))) || - (scpd != 0 && checkcpdtable[scpd-1].cond != FLAG_NULL && - !TESTAFF(rv->astr, checkcpdtable[scpd-1].cond, rv->alen))) - ) { - rv = rv->next_homonym; + ((!words && !wordnum && + defcpd_check(&words, wnum, rv, rwords, 0)) || + (words && + defcpd_check(&words, wnum, rv, rwords, 0))))) || + (scpd != 0 && checkcpdtable[scpd - 1].cond != FLAG_NULL && + !TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond, rv->alen)))) { + rv = rv->next_homonym; } - if (rv) affixed = 0; + if (rv) + affixed = 0; if (!rv) { - if (onlycpdrule) break; - if (compoundflag && - !(rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) { - if (((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, - FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundflag)))) && !hu_mov_rule && - sfx->getCont() && - ((compoundforbidflag && TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())) || (compoundend && - TESTAFF(sfx->getCont(), compoundend, - sfx->getContLen())))) { - rv = NULL; - } + if (onlycpdrule) + break; + if (compoundflag && + !(rv = prefix_check(st.c_str(), i, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundflag))) { + if (((rv = suffix_check( + st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundflag, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx(st.c_str(), i, 0, NULL, compoundflag)))) && + !hu_mov_rule && sfx->getCont() && + ((compoundforbidflag && + TESTAFF(sfx->getCont(), compoundforbidflag, + sfx->getContLen())) || + (compoundend && + TESTAFF(sfx->getCont(), compoundend, sfx->getContLen())))) { + rv = NULL; } + } - if (rv || + if (rv || (((wordnum == 0) && compoundbegin && - ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundbegin))) || // twofold suffixes + compound - (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundbegin)))) || - ((wordnum > 0) && compoundmiddle && - ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundmiddle))) || // twofold suffixes + compound - (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundmiddle))))) - ) checked_prefix = 1; - // else check forbiddenwords and needaffix + ((rv = suffix_check( + st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx( + st.c_str(), i, 0, NULL, + compoundbegin))) || // twofold suffixes + compound + (rv = prefix_check(st.c_str(), i, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundbegin)))) || + ((wordnum > 0) && compoundmiddle && + ((rv = suffix_check( + st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx( + st.c_str(), i, 0, NULL, + compoundmiddle))) || // twofold suffixes + compound + (rv = prefix_check(st.c_str(), i, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundmiddle)))))) + checked_prefix = 1; + // else check forbiddenwords and needaffix } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, needaffix, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)) - )) { - st[i] = ch; - //continue; - break; + TESTAFF(rv->astr, needaffix, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + (is_sug && nosuggest && + TESTAFF(rv->astr, nosuggest, rv->alen)))) { + st[i] = ch; + // continue; + break; } - // check non_compound flag in suffix and prefix - if ((rv) && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundforbidflag, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())))) { - rv = NULL; - } + // check non_compound flag in suffix and prefix + if ((rv) && !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundforbidflag, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundforbidflag, + sfx->getContLen())))) { + rv = NULL; + } - // check compoundend flag in suffix and prefix - if ((rv) && !checked_prefix && compoundend && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundend, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundend, - sfx->getContLen())))) { - rv = NULL; - } + // check compoundend flag in suffix and prefix + if ((rv) && !checked_prefix && compoundend && !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundend, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundend, sfx->getContLen())))) { + rv = NULL; + } - // check compoundmiddle flag in suffix and prefix - if ((rv) && !checked_prefix && (wordnum==0) && compoundmiddle && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundmiddle, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundmiddle, - sfx->getContLen())))) { - rv = NULL; - } + // check compoundmiddle flag in suffix and prefix + if ((rv) && !checked_prefix && (wordnum == 0) && compoundmiddle && + !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundmiddle, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundmiddle, sfx->getContLen())))) { + rv = NULL; + } // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) { - return NULL; - } + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) { + return NULL; + } // increment word number, if the second root has a compoundroot flag - if ((rv) && compoundroot && + if ((rv) && compoundroot && (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; + wordnum++; } // first word is acceptable in compound words? - if (((rv) && - ( checked_prefix || (words && words[wnum]) || - (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || - ((oldwordnum == 0) && compoundbegin && TESTAFF(rv->astr, compoundbegin, rv->alen)) || - ((oldwordnum > 0) && compoundmiddle && TESTAFF(rv->astr, compoundmiddle, rv->alen))// || -// (numdefcpd && ) - -// LANG_hu section: spec. Hungarian rule - || ((langnum == LANG_hu) && hu_mov_rule && ( - TESTAFF(rv->astr, 'F', rv->alen) || // XXX hardwired Hungarian dictionary codes - TESTAFF(rv->astr, 'G', rv->alen) || - TESTAFF(rv->astr, 'H', rv->alen) - ) - ) -// END of LANG_hu section - ) && - ( - // test CHECKCOMPOUNDPATTERN conditions - scpd == 0 || checkcpdtable[scpd-1].cond == FLAG_NULL || - TESTAFF(rv->astr, checkcpdtable[scpd-1].cond, rv->alen) - ) - && ! (( checkcompoundtriple && scpd == 0 && !words && // test triple letters - (word[i-1]==word[i]) && ( - ((i>1) && (word[i-1]==word[i-2])) || - ((word[i-1]==word[i+1])) // may be word[i+1] == '\0' - ) - ) || - ( - checkcompoundcase && scpd == 0 && !words && cpdcase_check(word, i) - )) - ) -// LANG_hu section: spec. Hungarian rule - || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && (rv = affix_check(st,i)) && - (sfx && sfx->getCont() && ( // XXX hardwired Hungarian dic. codes - TESTAFF(sfx->getCont(), (unsigned short) 'x', sfx->getContLen()) || - TESTAFF(sfx->getCont(), (unsigned short) '%', sfx->getContLen()) - ) - ) - ) - ) { // first word is ok condition - -// LANG_hu section: spec. Hungarian rule - if (langnum == LANG_hu) { - // calculate syllable number of the word - numsyllable += get_syllable(st, i); - // + 1 word, if syllable number of the prefix > 1 (hungarian convention) - if (pfx && (get_syllable(pfx->getKey(),strlen(pfx->getKey())) > 1)) wordnum++; - } -// END of LANG_hu section + if (((rv) && + (checked_prefix || (words && words[wnum]) || + (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || + ((oldwordnum == 0) && compoundbegin && + TESTAFF(rv->astr, compoundbegin, rv->alen)) || + ((oldwordnum > 0) && compoundmiddle && + TESTAFF(rv->astr, compoundmiddle, rv->alen)) // || + // (numdefcpd && ) + + // LANG_hu section: spec. Hungarian rule + || ((langnum == LANG_hu) && hu_mov_rule && + (TESTAFF( + rv->astr, 'F', + rv->alen) || // XXX hardwired Hungarian dictionary codes + TESTAFF(rv->astr, 'G', rv->alen) || + TESTAFF(rv->astr, 'H', rv->alen))) + // END of LANG_hu section + ) && + ( + // test CHECKCOMPOUNDPATTERN conditions + scpd == 0 || checkcpdtable[scpd - 1].cond == FLAG_NULL || + TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond, rv->alen)) && + !((checkcompoundtriple && scpd == 0 && + !words && // test triple letters + (word[i - 1] == word[i]) && + (((i > 1) && (word[i - 1] == word[i - 2])) || + ((word[i - 1] == word[i + 1])) // may be word[i+1] == '\0' + )) || + (checkcompoundcase && scpd == 0 && !words && + cpdcase_check(word, i)))) + // LANG_hu section: spec. Hungarian rule + || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && + (rv = affix_check(st.c_str(), i)) && + (sfx && sfx->getCont() && + ( // XXX hardwired Hungarian dic. codes + TESTAFF(sfx->getCont(), (unsigned short)'x', + sfx->getContLen()) || + TESTAFF( + sfx->getCont(), (unsigned short)'%', + sfx->getContLen()))))) { // first word is ok condition + + // LANG_hu section: spec. Hungarian rule + if (langnum == LANG_hu) { + // calculate syllable number of the word + numsyllable += get_syllable(st.substr(i)); + // + 1 word, if syllable number of the prefix > 1 (hungarian + // convention) + if (pfx && (get_syllable(pfx->getKey()) > 1)) + wordnum++; + } + // END of LANG_hu section - // NEXT WORD(S) - rv_first = rv; - st[i] = ch; + // NEXT WORD(S) + rv_first = rv; + st[i] = ch; - do { // striple loop + do { // striple loop // check simplifiedtriple - if (simplifiedtriple) { - if (striple) { + if (simplifiedtriple) { + if (striple) { checkedstriple = 1; - i--; // check "fahrt" instead of "ahrt" in "Schiffahrt" - } else if (i > 2 && *(word+i - 1) == *(word + i - 2)) striple = 1; + i--; // check "fahrt" instead of "ahrt" in "Schiffahrt" + } else if (i > 2 && *(word + i - 1) == *(word + i - 2)) + striple = 1; } - rv = lookup((st+i)); // perhaps without prefix - - // search homonym with compound flag - while ((rv) && ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || - !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) || - (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) || - (numdefcpd && words && defcpd_check(&words, wnum + 1, rv, NULL,1))) || - (scpd != 0 && checkcpdtable[scpd-1].cond2 != FLAG_NULL && - !TESTAFF(rv->astr, checkcpdtable[scpd-1].cond2, rv->alen)) - )) { - rv = rv->next_homonym; - } + rv = lookup(st.c_str() + i); // perhaps without prefix + + // search homonym with compound flag + while ((rv) && + ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || + !((compoundflag && !words && + TESTAFF(rv->astr, compoundflag, rv->alen)) || + (compoundend && !words && + TESTAFF(rv->astr, compoundend, rv->alen)) || + (numdefcpd && words && + defcpd_check(&words, wnum + 1, rv, NULL, 1))) || + (scpd != 0 && checkcpdtable[scpd - 1].cond2 != FLAG_NULL && + !TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond2, + rv->alen)))) { + rv = rv->next_homonym; + } // check FORCEUCASE if (rv && forceucase && (rv) && - (TESTAFF(rv->astr, forceucase, rv->alen)) && !(info && *info & SPELL_ORIGCAP)) rv = NULL; + (TESTAFF(rv->astr, forceucase, rv->alen)) && + !(info && *info & SPELL_ORIGCAP)) + rv = NULL; - if (rv && words && words[wnum + 1]) return rv_first; + if (rv && words && words[wnum + 1]) + return rv_first; oldnumsyllable2 = numsyllable; oldwordnum2 = wordnum; - -// LANG_hu section: spec. Hungarian rule, XXX hardwired dictionary code - if ((rv) && (langnum == LANG_hu) && (TESTAFF(rv->astr, 'I', rv->alen)) && !(TESTAFF(rv->astr, 'J', rv->alen))) { - numsyllable--; + // LANG_hu section: spec. Hungarian rule, XXX hardwired dictionary + // code + if ((rv) && (langnum == LANG_hu) && + (TESTAFF(rv->astr, 'I', rv->alen)) && + !(TESTAFF(rv->astr, 'J', rv->alen))) { + numsyllable--; } -// END of LANG_hu section + // END of LANG_hu section // increment word number, if the second root has a compoundroot flag - if ((rv) && (compoundroot) && + if ((rv) && (compoundroot) && (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; + wordnum++; } // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL; + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + (is_sug && nosuggest && + TESTAFF(rv->astr, nosuggest, rv->alen)))) + return NULL; // second word is acceptable, as a root? // hungarian conventions: compounding is acceptable, // when compound forms consist of 2 words, or if more, // then the syllable number of root words must be 6, or lesser. - if ((rv) && ( - (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || - (compoundend && TESTAFF(rv->astr, compoundend, rv->alen)) - ) - && ( - ((cpdwordmax==-1) || (wordnum+1clen)<=cpdmaxsyllable)) - ) && - ( - // test CHECKCOMPOUNDPATTERN - !numcheckcpd || scpd != 0 || !cpdpat_check(word, i, rv_first, rv, 0) - ) && + if ((rv) && + ((compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || + (compoundend && TESTAFF(rv->astr, compoundend, rv->alen))) && + (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || + ((cpdmaxsyllable != 0) && + (numsyllable + get_syllable(std::string(HENTRY_WORD(rv), rv->clen)) <= + cpdmaxsyllable))) && ( - (!checkcompounddup || (rv != rv_first)) - ) - // test CHECKCOMPOUNDPATTERN conditions - && (scpd == 0 || checkcpdtable[scpd-1].cond2 == FLAG_NULL || - TESTAFF(rv->astr, checkcpdtable[scpd-1].cond2, rv->alen)) - ) - { - // forbid compound word, if it is a non compound word with typical fault - if (checkcompoundrep && cpdrep_check(word,len)) return NULL; - return rv_first; + // test CHECKCOMPOUNDPATTERN + !numcheckcpd || scpd != 0 || + !cpdpat_check(word, i, rv_first, rv, 0)) && + ((!checkcompounddup || (rv != rv_first))) + // test CHECKCOMPOUNDPATTERN conditions + && + (scpd == 0 || checkcpdtable[scpd - 1].cond2 == FLAG_NULL || + TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond2, rv->alen))) { + // forbid compound word, if it is a non compound word with typical + // fault + if (checkcompoundrep && cpdrep_check(word, len)) + return NULL; + return rv_first; } numsyllable = oldnumsyllable2; @@ -1858,45 +2058,58 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, // perhaps second word has prefix or/and suffix sfx = NULL; sfxflag = FLAG_NULL; - rv = (compoundflag && !onlycpdrule) ? affix_check((word+i),strlen(word+i), compoundflag, IN_CPD_END) : NULL; + rv = (compoundflag && !onlycpdrule) + ? affix_check((word + i), strlen(word + i), compoundflag, + IN_CPD_END) + : NULL; if (!rv && compoundend && !onlycpdrule) { - sfx = NULL; - pfx = NULL; - rv = affix_check((word+i),strlen(word+i), compoundend, IN_CPD_END); + sfx = NULL; + pfx = NULL; + rv = affix_check((word + i), strlen(word + i), compoundend, + IN_CPD_END); } if (!rv && numdefcpd && words) { - rv = affix_check((word+i),strlen(word+i), 0, IN_CPD_END); - if (rv && defcpd_check(&words, wnum + 1, rv, NULL, 1)) return rv_first; - rv = NULL; + rv = affix_check((word + i), strlen(word + i), 0, IN_CPD_END); + if (rv && defcpd_check(&words, wnum + 1, rv, NULL, 1)) + return rv_first; + rv = NULL; } // test CHECKCOMPOUNDPATTERN conditions (allowed forms) - if (rv && !(scpd == 0 || checkcpdtable[scpd-1].cond2 == FLAG_NULL || - TESTAFF(rv->astr, checkcpdtable[scpd-1].cond2, rv->alen))) rv = NULL; + if (rv && + !(scpd == 0 || checkcpdtable[scpd - 1].cond2 == FLAG_NULL || + TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond2, rv->alen))) + rv = NULL; // test CHECKCOMPOUNDPATTERN conditions (forbidden compounds) - if (rv && numcheckcpd && scpd == 0 && cpdpat_check(word, i, rv_first, rv, affixed)) rv = NULL; + if (rv && numcheckcpd && scpd == 0 && + cpdpat_check(word, i, rv_first, rv, affixed)) + rv = NULL; // check non_compound flag in suffix and prefix - if ((rv) && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundforbidflag, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())))) { - rv = NULL; + if ((rv) && ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundforbidflag, + pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundforbidflag, + sfx->getContLen())))) { + rv = NULL; } // check FORCEUCASE if (rv && forceucase && (rv) && - (TESTAFF(rv->astr, forceucase, rv->alen)) && !(info && *info & SPELL_ORIGCAP)) rv = NULL; + (TESTAFF(rv->astr, forceucase, rv->alen)) && + !(info && *info & SPELL_ORIGCAP)) + rv = NULL; // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL; + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + (is_sug && nosuggest && + TESTAFF(rv->astr, nosuggest, rv->alen)))) + return NULL; // pfxappnd = prefix of word+i, or NULL // calculate syllable number of prefix. @@ -1904,54 +2117,63 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, // than 1, the prefix+word counts as two words. if (langnum == LANG_hu) { - // calculate syllable number of the word - numsyllable += get_syllable(word + i, strlen(word + i)); - - // - affix syllable num. - // XXX only second suffix (inflections, not derivations) - if (sfxappnd) { - char * tmp = myrevstrdup(sfxappnd); - numsyllable -= get_syllable(tmp, strlen(tmp)); - free(tmp); - } - - // + 1 word, if syllable number of the prefix > 1 (hungarian convention) - if (pfx && (get_syllable(pfx->getKey(),strlen(pfx->getKey())) > 1)) wordnum++; + // calculate syllable number of the word + numsyllable += get_syllable(word + i); + + // - affix syllable num. + // XXX only second suffix (inflections, not derivations) + if (sfxappnd) { + std::string tmp(sfxappnd); + reverseword(tmp); + numsyllable -= get_syllable(tmp) + sfxextra; + } + + // + 1 word, if syllable number of the prefix > 1 (hungarian + // convention) + if (pfx && (get_syllable(pfx->getKey()) > 1)) + wordnum++; - // increment syllable num, if last word has a SYLLABLENUM flag - // and the suffix is beginning `s' + // increment syllable num, if last word has a SYLLABLENUM flag + // and the suffix is beginning `s' - if (cpdsyllablenum) { - switch (sfxflag) { - case 'c': { numsyllable+=2; break; } - case 'J': { numsyllable += 1; break; } - case 'I': { if (rv && TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; } - } + if (cpdsyllablenum) { + switch (sfxflag) { + case 'c': { + numsyllable += 2; + break; + } + case 'J': { + numsyllable += 1; + break; + } + case 'I': { + if (rv && TESTAFF(rv->astr, 'J', rv->alen)) + numsyllable += 1; + break; + } } + } } // increment word number, if the second word has a compoundroot flag - if ((rv) && (compoundroot) && + if ((rv) && (compoundroot) && (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; + wordnum++; } // second word is acceptable, as a word with prefix or/and suffix? // hungarian conventions: compounding is acceptable, // when compound forms consist 2 word, otherwise // the syllable number of root words is 6, or lesser. - if ((rv) && - ( - ((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || - ((cpdmaxsyllable != 0) && - (numsyllable <= cpdmaxsyllable)) - ) - && ( - (!checkcompounddup || (rv != rv_first)) - )) { - // forbid compound word, if it is a non compound word with typical fault - if (checkcompoundrep && cpdrep_check(word, len)) return NULL; - return rv_first; + if ((rv) && + (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || + ((cpdmaxsyllable != 0) && (numsyllable <= cpdmaxsyllable))) && + ((!checkcompounddup || (rv != rv_first)))) { + // forbid compound word, if it is a non compound word with typical + // fault + if (checkcompoundrep && cpdrep_check(word, len)) + return NULL; + return rv_first; } numsyllable = oldnumsyllable2; @@ -1959,45 +2181,54 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, // perhaps second word is a compound word (recursive call) if (wordnum < maxwordnum) { - rv = compound_check((st+i),strlen(st+i), wordnum+1, - numsyllable, maxwordnum, wnum + 1, words, 0, is_sug, info); - - if (rv && numcheckcpd && ((scpd == 0 && cpdpat_check(word, i, rv_first, rv, affixed)) || - (scpd != 0 && !cpdpat_check(word, i, rv_first, rv, affixed)))) rv = NULL; + rv = compound_check(st.c_str() + i, strlen(st.c_str() + i), wordnum + 1, + numsyllable, maxwordnum, wnum + 1, words, rwords, 0, + is_sug, info); + + if (rv && numcheckcpd && + ((scpd == 0 && + cpdpat_check(word, i, rv_first, rv, affixed)) || + (scpd != 0 && + !cpdpat_check(word, i, rv_first, rv, affixed)))) + rv = NULL; } else { - rv=NULL; + rv = NULL; } if (rv) { - // forbid compound word, if it is a non compound word with typical fault - if (checkcompoundrep || forbiddenword) { - struct hentry * rv2 = NULL; - - if (checkcompoundrep && cpdrep_check(word, len)) return NULL; - - // check first part - if (strncmp(rv->word, word + i, rv->blen) == 0) { - char r = *(st + i + rv->blen); - *(st + i + rv->blen) = '\0'; - - if (checkcompoundrep && cpdrep_check(st, i + rv->blen)) { - *(st + i + rv->blen) = r; - continue; - } - - if (forbiddenword) { - rv2 = lookup(word); - if (!rv2) rv2 = affix_check(word, len); - if (rv2 && rv2->astr && TESTAFF(rv2->astr, forbiddenword, rv2->alen) && - (strncmp(rv2->word, st, i + rv->blen) == 0)) { - return NULL; - } - } - *(st + i + rv->blen) = r; + // forbid compound word, if it is a non compound word with typical + // fault + if (checkcompoundrep || forbiddenword) { + struct hentry* rv2 = NULL; + + if (checkcompoundrep && cpdrep_check(word, len)) + return NULL; + + // check first part + if (strncmp(rv->word, word + i, rv->blen) == 0) { + char r = st[i + rv->blen]; + st[i + rv->blen] = '\0'; + + if (checkcompoundrep && cpdrep_check(st.c_str(), i + rv->blen)) { + st[ + i + rv->blen] = r; + continue; + } + + if (forbiddenword) { + rv2 = lookup(word); + if (!rv2) + rv2 = affix_check(word, len); + if (rv2 && rv2->astr && + TESTAFF(rv2->astr, forbiddenword, rv2->alen) && + (strncmp(rv2->word, st.c_str(), i + rv->blen) == 0)) { + return NULL; } + } + st[i + rv->blen] = r; } - return rv_first; + } + return rv_first; } - } while (striple && !checkedstriple); // end of striple loop + } while (striple && !checkedstriple); // end of striple loop if (checkedstriple) { i++; @@ -2005,7 +2236,7 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, striple = 0; } - } // first word is ok condition + } // first word is ok condition if (soldi != 0) { i = soldi; @@ -2016,500 +2247,552 @@ struct hentry * AffixMgr::compound_check(const char * word, int len, } scpd++; + } while (!onlycpdrule && simplifiedcpd && + scpd <= numcheckcpd); // end of simplifiedcpd loop - } while (!onlycpdrule && simplifiedcpd && scpd <= numcheckcpd); // end of simplifiedcpd loop - - scpd = 0; - wordnum = oldwordnum; - numsyllable = oldnumsyllable; - - if (soldi != 0) { - i = soldi; - strcpy(st, word); // XXX add more optim. - soldi = 0; - } else st[i] = ch; + scpd = 0; + wordnum = oldwordnum; + numsyllable = oldnumsyllable; - } while (numdefcpd && oldwordnum == 0 && !onlycpdrule && (onlycpdrule = 1)); // end of onlycpd loop + if (soldi != 0) { + i = soldi; + st.assign(word); // XXX add more optim. + soldi = 0; + } else + st[i] = ch; - } + } while (numdefcpd && oldwordnum == 0 && + onlycpdrule++ < 1); // end of onlycpd loop + } - return NULL; + return NULL; } // check if compound word is correctly spelled // hu_mov_rule = spec. Hungarian rule (XXX) -int AffixMgr::compound_check_morph(const char * word, int len, - short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words, - char hu_mov_rule = 0, char ** result = NULL, char * partresult = NULL) -{ - int i; - short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2; - int ok = 0; - - struct hentry * rv = NULL; - struct hentry * rv_first; - struct hentry * rwords[MAXWORDLEN]; // buffer for COMPOUND pattern checking - char st [MAXWORDUTF8LEN + 4]; - char ch; +int AffixMgr::compound_check_morph(const char* word, + int len, + short wordnum, + short numsyllable, + short maxwordnum, + short wnum, + hentry** words, + hentry** rwords, + char hu_mov_rule = 0, + char** result = NULL, + char* partresult = NULL) { + int i; + short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2; + int ok = 0; - int checked_prefix; - char presult[MAXLNLEN]; + struct hentry* rv = NULL; + struct hentry* rv_first; + std::string st; + char ch; - int cmin; - int cmax; + int checked_prefix; + char presult[MAXLNLEN]; - int onlycpdrule; - char affixed = 0; - hentry ** oldwords = words; + int cmin; + int cmax; - setcminmax(&cmin, &cmax, word, len); + int onlycpdrule; + char affixed = 0; + hentry** oldwords = words; - strcpy(st, word); + setcminmax(&cmin, &cmax, word, len); - for (i = cmin; i < cmax; i++) { - oldnumsyllable = numsyllable; - oldwordnum = wordnum; - checked_prefix = 0; + st.assign(word); - // go to end of the UTF-8 character - if (utf8) { - for (; (st[i] & 0xc0) == 0x80; i++); - if (i >= cmax) return 0; - } + for (i = cmin; i < cmax; i++) { + // go to end of the UTF-8 character + if (utf8) { + for (; (st[i] & 0xc0) == 0x80; i++) + ; + if (i >= cmax) + return 0; + } - words = oldwords; - onlycpdrule = (words) ? 1 : 0; + words = oldwords; + onlycpdrule = (words) ? 1 : 0; - do { // onlycpdrule loop + do { // onlycpdrule loop - oldnumsyllable = numsyllable; - oldwordnum = wordnum; - checked_prefix = 0; + oldnumsyllable = numsyllable; + oldwordnum = wordnum; + checked_prefix = 0; - ch = st[i]; - st[i] = '\0'; - sfx = NULL; + ch = st[i]; + st[i] = '\0'; + sfx = NULL; - // FIRST WORD + // FIRST WORD - affixed = 1; + affixed = 1; - *presult = '\0'; - if (partresult) mystrcat(presult, partresult, MAXLNLEN); + *presult = '\0'; + if (partresult) + mystrcat(presult, partresult, MAXLNLEN); - rv = lookup(st); // perhaps without prefix + rv = lookup(st.c_str()); // perhaps without prefix - // search homonym with compound flag - while ((rv) && !hu_mov_rule && - ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || - !((compoundflag && !words && !onlycpdrule && TESTAFF(rv->astr, compoundflag, rv->alen)) || + // search homonym with compound flag + while ((rv) && !hu_mov_rule && + ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || + !((compoundflag && !words && !onlycpdrule && + TESTAFF(rv->astr, compoundflag, rv->alen)) || (compoundbegin && !wordnum && !onlycpdrule && - TESTAFF(rv->astr, compoundbegin, rv->alen)) || + TESTAFF(rv->astr, compoundbegin, rv->alen)) || (compoundmiddle && wordnum && !words && !onlycpdrule && - TESTAFF(rv->astr, compoundmiddle, rv->alen)) || - (numdefcpd && onlycpdrule && - ((!words && !wordnum && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)) || - (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)))) - ))) { - rv = rv->next_homonym; - } + TESTAFF(rv->astr, compoundmiddle, rv->alen)) || + (numdefcpd && onlycpdrule && + ((!words && !wordnum && + defcpd_check(&words, wnum, rv, rwords, 0)) || + (words && + defcpd_check(&words, wnum, rv, rwords, 0))))))) { + rv = rv->next_homonym; + } - if (rv) affixed = 0; + if (rv) + affixed = 0; - if (rv) { - sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_PART, st); - if (!HENTRY_FIND(rv, MORPH_STEM)) { - sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_STEM, st); - } - // store the pointer of the hash entry -// sprintf(presult + strlen(presult), "%c%s%p", MSEP_FLD, MORPH_HENTRY, rv); - if (HENTRY_DATA(rv)) { - sprintf(presult + strlen(presult), "%c%s", MSEP_FLD, HENTRY_DATA2(rv)); - } - } + if (rv) { + sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_PART, st.c_str()); + if (!HENTRY_FIND(rv, MORPH_STEM)) { + sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_STEM, + st.c_str()); + } + // store the pointer of the hash entry + // sprintf(presult + strlen(presult), "%c%s%p", MSEP_FLD, + // MORPH_HENTRY, rv); + if (HENTRY_DATA(rv)) { + sprintf(presult + strlen(presult), "%c%s", MSEP_FLD, + HENTRY_DATA2(rv)); + } + } - if (!rv) { - if (onlycpdrule && strlen(*result) > MAXLNLEN/10) break; - if (compoundflag && - !(rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) { - if (((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, - FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundflag)))) && !hu_mov_rule && - sfx->getCont() && - ((compoundforbidflag && TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())) || (compoundend && - TESTAFF(sfx->getCont(), compoundend, - sfx->getContLen())))) { - rv = NULL; - } - } + if (!rv) { + if (onlycpdrule && strlen(*result) > MAXLNLEN / 10) + break; + if (compoundflag && + !(rv = + prefix_check(st.c_str(), i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundflag))) { + if (((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + compoundflag, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx(st.c_str(), i, 0, NULL, compoundflag)))) && + !hu_mov_rule && sfx->getCont() && + ((compoundforbidflag && + TESTAFF(sfx->getCont(), compoundforbidflag, + sfx->getContLen())) || + (compoundend && + TESTAFF(sfx->getCont(), compoundend, sfx->getContLen())))) { + rv = NULL; + } + } - if (rv || - (((wordnum == 0) && compoundbegin && - ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundbegin))) || // twofold suffix+compound - (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundbegin)))) || - ((wordnum > 0) && compoundmiddle && - ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || - (compoundmoresuffixes && (rv = suffix_check_twosfx(st, i, 0, NULL, compoundmiddle))) || // twofold suffix+compound - (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundmiddle))))) - ) { - // char * p = prefix_check_morph(st, i, 0, compound); - char * p = NULL; - if (compoundflag) p = affix_check_morph(st, i, compoundflag); - if (!p || (*p == '\0')) { - if (p) free(p); - p = NULL; - if ((wordnum == 0) && compoundbegin) { - p = affix_check_morph(st, i, compoundbegin); - } else if ((wordnum > 0) && compoundmiddle) { - p = affix_check_morph(st, i, compoundmiddle); - } - } - if (p && (*p != '\0')) { - sprintf(presult + strlen(presult), "%c%s%s%s", MSEP_FLD, - MORPH_PART, st, line_uniq_app(&p, MSEP_REC)); - } - if (p) free(p); - checked_prefix = 1; + if (rv || + (((wordnum == 0) && compoundbegin && + ((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + compoundbegin, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx( + st.c_str(), i, 0, NULL, + compoundbegin))) || // twofold suffix+compound + (rv = prefix_check(st.c_str(), i, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundbegin)))) || + ((wordnum > 0) && compoundmiddle && + ((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + compoundmiddle, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || + (compoundmoresuffixes && + (rv = suffix_check_twosfx( + st.c_str(), i, 0, NULL, + compoundmiddle))) || // twofold suffix+compound + (rv = prefix_check(st.c_str(), i, + hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, + compoundmiddle)))))) { + // char * p = prefix_check_morph(st, i, 0, compound); + char* p = NULL; + if (compoundflag) + p = affix_check_morph(st.c_str(), i, compoundflag); + if (!p || (*p == '\0')) { + if (p) + free(p); + p = NULL; + if ((wordnum == 0) && compoundbegin) { + p = affix_check_morph(st.c_str(), i, compoundbegin); + } else if ((wordnum > 0) && compoundmiddle) { + p = affix_check_morph(st.c_str(), i, compoundmiddle); } - // else check forbiddenwords - } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - TESTAFF(rv->astr, needaffix, rv->alen))) { - st[i] = ch; - continue; + } + if (p && (*p != '\0')) { + sprintf(presult + strlen(presult), "%c%s%s%s", MSEP_FLD, MORPH_PART, + st.c_str(), line_uniq_app(&p, MSEP_REC)); + } + if (p) + free(p); + checked_prefix = 1; } + // else check forbiddenwords + } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + TESTAFF(rv->astr, needaffix, rv->alen))) { + st[i] = ch; + continue; + } - // check non_compound flag in suffix and prefix - if ((rv) && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundforbidflag, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())))) { - continue; - } + // check non_compound flag in suffix and prefix + if ((rv) && !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundforbidflag, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundforbidflag, sfx->getContLen())))) { + continue; + } - // check compoundend flag in suffix and prefix - if ((rv) && !checked_prefix && compoundend && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundend, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundend, - sfx->getContLen())))) { - continue; - } + // check compoundend flag in suffix and prefix + if ((rv) && !checked_prefix && compoundend && !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundend, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundend, sfx->getContLen())))) { + continue; + } - // check compoundmiddle flag in suffix and prefix - if ((rv) && !checked_prefix && (wordnum==0) && compoundmiddle && !hu_mov_rule && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundmiddle, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundmiddle, - sfx->getContLen())))) { - rv = NULL; - } + // check compoundmiddle flag in suffix and prefix + if ((rv) && !checked_prefix && (wordnum == 0) && compoundmiddle && + !hu_mov_rule && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundmiddle, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundmiddle, sfx->getContLen())))) { + rv = NULL; + } - // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) - || TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) continue; + // check forbiddenwords + if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) + continue; - // increment word number, if the second root has a compoundroot flag - if ((rv) && (compoundroot) && - (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; - } + // increment word number, if the second root has a compoundroot flag + if ((rv) && (compoundroot) && + (TESTAFF(rv->astr, compoundroot, rv->alen))) { + wordnum++; + } - // first word is acceptable in compound words? - if (((rv) && - ( checked_prefix || (words && words[wnum]) || + // first word is acceptable in compound words? + if (((rv) && + (checked_prefix || (words && words[wnum]) || (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || - ((oldwordnum == 0) && compoundbegin && TESTAFF(rv->astr, compoundbegin, rv->alen)) || - ((oldwordnum > 0) && compoundmiddle && TESTAFF(rv->astr, compoundmiddle, rv->alen)) -// LANG_hu section: spec. Hungarian rule - || ((langnum == LANG_hu) && // hu_mov_rule - hu_mov_rule && ( - TESTAFF(rv->astr, 'F', rv->alen) || - TESTAFF(rv->astr, 'G', rv->alen) || - TESTAFF(rv->astr, 'H', rv->alen) - ) - ) -// END of LANG_hu section - ) - && ! (( checkcompoundtriple && !words && // test triple letters - (word[i-1]==word[i]) && ( - ((i>1) && (word[i-1]==word[i-2])) || - ((word[i-1]==word[i+1])) // may be word[i+1] == '\0' - ) - ) || - ( - // test CHECKCOMPOUNDPATTERN - numcheckcpd && !words && cpdpat_check(word, i, rv, NULL, affixed) - ) || - ( - checkcompoundcase && !words && cpdcase_check(word, i) - )) - ) -// LANG_hu section: spec. Hungarian rule - || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && (rv = affix_check(st,i)) && - (sfx && sfx->getCont() && ( - TESTAFF(sfx->getCont(), (unsigned short) 'x', sfx->getContLen()) || - TESTAFF(sfx->getCont(), (unsigned short) '%', sfx->getContLen()) - ) - ) - ) -// END of LANG_hu section - ) { - -// LANG_hu section: spec. Hungarian rule - if (langnum == LANG_hu) { - // calculate syllable number of the word - numsyllable += get_syllable(st, i); - - // + 1 word, if syllable number of the prefix > 1 (hungarian convention) - if (pfx && (get_syllable(pfx->getKey(),strlen(pfx->getKey())) > 1)) wordnum++; - } -// END of LANG_hu section + ((oldwordnum == 0) && compoundbegin && + TESTAFF(rv->astr, compoundbegin, rv->alen)) || + ((oldwordnum > 0) && compoundmiddle && + TESTAFF(rv->astr, compoundmiddle, rv->alen)) + // LANG_hu section: spec. Hungarian rule + || ((langnum == LANG_hu) && // hu_mov_rule + hu_mov_rule && (TESTAFF(rv->astr, 'F', rv->alen) || + TESTAFF(rv->astr, 'G', rv->alen) || + TESTAFF(rv->astr, 'H', rv->alen))) + // END of LANG_hu section + ) && + !((checkcompoundtriple && !words && // test triple letters + (word[i - 1] == word[i]) && + (((i > 1) && (word[i - 1] == word[i - 2])) || + ((word[i - 1] == word[i + 1])) // may be word[i+1] == '\0' + )) || + ( + // test CHECKCOMPOUNDPATTERN + numcheckcpd && !words && + cpdpat_check(word, i, rv, NULL, affixed)) || + (checkcompoundcase && !words && cpdcase_check(word, i)))) + // LANG_hu section: spec. Hungarian rule + || + ((!rv) && (langnum == LANG_hu) && hu_mov_rule && + (rv = affix_check(st.c_str(), i)) && + (sfx && sfx->getCont() && + (TESTAFF(sfx->getCont(), (unsigned short)'x', sfx->getContLen()) || + TESTAFF(sfx->getCont(), (unsigned short)'%', sfx->getContLen())))) + // END of LANG_hu section + ) { + // LANG_hu section: spec. Hungarian rule + if (langnum == LANG_hu) { + // calculate syllable number of the word + numsyllable += get_syllable(st.substr(i)); + + // + 1 word, if syllable number of the prefix > 1 (hungarian + // convention) + if (pfx && (get_syllable(pfx->getKey()) > 1)) + wordnum++; + } + // END of LANG_hu section - // NEXT WORD(S) - rv_first = rv; - rv = lookup((word+i)); // perhaps without prefix + // NEXT WORD(S) + rv_first = rv; + rv = lookup((word + i)); // perhaps without prefix // search homonym with compound flag while ((rv) && ((needaffix && TESTAFF(rv->astr, needaffix, rv->alen)) || - !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) || - (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) || - (numdefcpd && words && defcpd_check(&words, wnum + 1, rv, NULL,1))))) { - rv = rv->next_homonym; + !((compoundflag && !words && + TESTAFF(rv->astr, compoundflag, rv->alen)) || + (compoundend && !words && + TESTAFF(rv->astr, compoundend, rv->alen)) || + (numdefcpd && words && + defcpd_check(&words, wnum + 1, rv, NULL, 1))))) { + rv = rv->next_homonym; } - if (rv && words && words[wnum + 1]) { - mystrcat(*result, presult, MAXLNLEN); - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_PART, MAXLNLEN); - mystrcat(*result, word+i, MAXLNLEN); - if (complexprefixes && HENTRY_DATA(rv)) mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); - if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_STEM, MAXLNLEN); - mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); - } - // store the pointer of the hash entry -// sprintf(*result + strlen(*result), " %s%p", MORPH_HENTRY, rv); - if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); - } - mystrcat(*result, "\n", MAXLNLEN); - ok = 1; - return 0; - } + if (rv && words && words[wnum + 1]) { + mystrcat(*result, presult, MAXLNLEN); + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, MORPH_PART, MAXLNLEN); + mystrcat(*result, word + i, MAXLNLEN); + if (complexprefixes && HENTRY_DATA(rv)) + mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + if (!HENTRY_FIND(rv, MORPH_STEM)) { + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, MORPH_STEM, MAXLNLEN); + mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); + } + // store the pointer of the hash entry + // sprintf(*result + strlen(*result), " %s%p", + // MORPH_HENTRY, rv); + if (!complexprefixes && HENTRY_DATA(rv)) { + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + } + mystrcat(*result, "\n", MAXLNLEN); + return 0; + } - oldnumsyllable2 = numsyllable; - oldwordnum2 = wordnum; + oldnumsyllable2 = numsyllable; + oldwordnum2 = wordnum; -// LANG_hu section: spec. Hungarian rule - if ((rv) && (langnum == LANG_hu) && (TESTAFF(rv->astr, 'I', rv->alen)) && !(TESTAFF(rv->astr, 'J', rv->alen))) { - numsyllable--; - } -// END of LANG_hu section - // increment word number, if the second root has a compoundroot flag - if ((rv) && (compoundroot) && - (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; - } + // LANG_hu section: spec. Hungarian rule + if ((rv) && (langnum == LANG_hu) && + (TESTAFF(rv->astr, 'I', rv->alen)) && + !(TESTAFF(rv->astr, 'J', rv->alen))) { + numsyllable--; + } + // END of LANG_hu section + // increment word number, if the second root has a compoundroot flag + if ((rv) && (compoundroot) && + (TESTAFF(rv->astr, compoundroot, rv->alen))) { + wordnum++; + } - // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) { - st[i] = ch; - continue; - } + // check forbiddenwords + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen))) { + st[i] = ch; + continue; + } - // second word is acceptable, as a root? - // hungarian conventions: compounding is acceptable, - // when compound forms consist of 2 words, or if more, - // then the syllable number of root words must be 6, or lesser. - if ((rv) && ( - (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || - (compoundend && TESTAFF(rv->astr, compoundend, rv->alen)) - ) - && ( - ((cpdwordmax==-1) || (wordnum+1blen)<=cpdmaxsyllable)) - ) - && ( - (!checkcompounddup || (rv != rv_first)) - ) - ) - { - // bad compound word - mystrcat(*result, presult, MAXLNLEN); - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_PART, MAXLNLEN); - mystrcat(*result, word+i, MAXLNLEN); - - if (HENTRY_DATA(rv)) { - if (complexprefixes) mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); - if (! HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_STEM, MAXLNLEN); - mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); - } - // store the pointer of the hash entry -// sprintf(*result + strlen(*result), " %s%p", MORPH_HENTRY, rv); - if (!complexprefixes) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); - } - } - mystrcat(*result, "\n", MAXLNLEN); - ok = 1; + // second word is acceptable, as a root? + // hungarian conventions: compounding is acceptable, + // when compound forms consist of 2 words, or if more, + // then the syllable number of root words must be 6, or lesser. + if ((rv) && + ((compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) || + (compoundend && TESTAFF(rv->astr, compoundend, rv->alen))) && + (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || + ((cpdmaxsyllable != 0) && + (numsyllable + get_syllable(std::string(HENTRY_WORD(rv), rv->blen)) <= + cpdmaxsyllable))) && + ((!checkcompounddup || (rv != rv_first)))) { + // bad compound word + mystrcat(*result, presult, MAXLNLEN); + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, MORPH_PART, MAXLNLEN); + mystrcat(*result, word + i, MAXLNLEN); + + if (HENTRY_DATA(rv)) { + if (complexprefixes) + mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + if (!HENTRY_FIND(rv, MORPH_STEM)) { + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, MORPH_STEM, MAXLNLEN); + mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); + } + // store the pointer of the hash entry + // sprintf(*result + strlen(*result), " + // %s%p", MORPH_HENTRY, rv); + if (!complexprefixes) { + mystrcat(*result, " ", MAXLNLEN); + mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); } + } + mystrcat(*result, "\n", MAXLNLEN); + ok = 1; + } - numsyllable = oldnumsyllable2 ; - wordnum = oldwordnum2; + numsyllable = oldnumsyllable2; + wordnum = oldwordnum2; - // perhaps second word has prefix or/and suffix - sfx = NULL; - sfxflag = FLAG_NULL; + // perhaps second word has prefix or/and suffix + sfx = NULL; + sfxflag = FLAG_NULL; - if (compoundflag && !onlycpdrule) rv = affix_check((word+i),strlen(word+i), compoundflag); else rv = NULL; + if (compoundflag && !onlycpdrule) + rv = affix_check((word + i), strlen(word + i), compoundflag); + else + rv = NULL; - if (!rv && compoundend && !onlycpdrule) { - sfx = NULL; - pfx = NULL; - rv = affix_check((word+i),strlen(word+i), compoundend); - } + if (!rv && compoundend && !onlycpdrule) { + sfx = NULL; + pfx = NULL; + rv = affix_check((word + i), strlen(word + i), compoundend); + } - if (!rv && numdefcpd && words) { - rv = affix_check((word+i),strlen(word+i), 0, IN_CPD_END); - if (rv && words && defcpd_check(&words, wnum + 1, rv, NULL, 1)) { - char * m = NULL; - if (compoundflag) m = affix_check_morph((word+i),strlen(word+i), compoundflag); - if ((!m || *m == '\0') && compoundend) { - if (m) free(m); - m = affix_check_morph((word+i),strlen(word+i), compoundend); - } - mystrcat(*result, presult, MAXLNLEN); - if (m || (*m != '\0')) { - sprintf(*result + strlen(*result), "%c%s%s%s", MSEP_FLD, - MORPH_PART, word + i, line_uniq_app(&m, MSEP_REC)); - } - if (m) free(m); - mystrcat(*result, "\n", MAXLNLEN); - ok = 1; - } + if (!rv && numdefcpd && words) { + rv = affix_check((word + i), strlen(word + i), 0, IN_CPD_END); + if (rv && words && defcpd_check(&words, wnum + 1, rv, NULL, 1)) { + char* m = NULL; + if (compoundflag) + m = affix_check_morph((word + i), strlen(word + i), compoundflag); + if ((!m || *m == '\0') && compoundend) { + if (m) + free(m); + m = affix_check_morph((word + i), strlen(word + i), compoundend); } - - // check non_compound flag in suffix and prefix - if ((rv) && - ((pfx && pfx->getCont() && - TESTAFF(pfx->getCont(), compoundforbidflag, - pfx->getContLen())) || - (sfx && sfx->getCont() && - TESTAFF(sfx->getCont(), compoundforbidflag, - sfx->getContLen())))) { - rv = NULL; + mystrcat(*result, presult, MAXLNLEN); + if (m || (*m != '\0')) { + char m2[MAXLNLEN]; + sprintf(m2, "%c%s%s%s", MSEP_FLD, MORPH_PART, word + i, + line_uniq_app(&m, MSEP_REC)); + mystrcat(*result, m2, MAXLNLEN); } + if (m) + free(m); + mystrcat(*result, "\n", MAXLNLEN); + ok = 1; + } + } - // check forbiddenwords - if ((rv) && (rv->astr) && (TESTAFF(rv->astr,forbiddenword,rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen)) - && (! TESTAFF(rv->astr, needaffix, rv->alen))) { - st[i] = ch; - continue; - } + // check non_compound flag in suffix and prefix + if ((rv) && + ((pfx && pfx->getCont() && + TESTAFF(pfx->getCont(), compoundforbidflag, pfx->getContLen())) || + (sfx && sfx->getCont() && + TESTAFF(sfx->getCont(), compoundforbidflag, + sfx->getContLen())))) { + rv = NULL; + } - if (langnum == LANG_hu) { - // calculate syllable number of the word - numsyllable += get_syllable(word + i, strlen(word + i)); - - // - affix syllable num. - // XXX only second suffix (inflections, not derivations) - if (sfxappnd) { - char * tmp = myrevstrdup(sfxappnd); - numsyllable -= get_syllable(tmp, strlen(tmp)); - free(tmp); - } + // check forbiddenwords + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, forbiddenword, rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen)) && + (!TESTAFF(rv->astr, needaffix, rv->alen))) { + st[i] = ch; + continue; + } - // + 1 word, if syllable number of the prefix > 1 (hungarian convention) - if (pfx && (get_syllable(pfx->getKey(),strlen(pfx->getKey())) > 1)) wordnum++; + if (langnum == LANG_hu) { + // calculate syllable number of the word + numsyllable += get_syllable(word + i); - // increment syllable num, if last word has a SYLLABLENUM flag - // and the suffix is beginning `s' + // - affix syllable num. + // XXX only second suffix (inflections, not derivations) + if (sfxappnd) { + std::string tmp(sfxappnd); + reverseword(tmp); + numsyllable -= get_syllable(tmp) + sfxextra; + } - if (cpdsyllablenum) { - switch (sfxflag) { - case 'c': { numsyllable+=2; break; } - case 'J': { numsyllable += 1; break; } - case 'I': { if (rv && TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; } - } - } - } + // + 1 word, if syllable number of the prefix > 1 (hungarian + // convention) + if (pfx && (get_syllable(pfx->getKey()) > 1)) + wordnum++; - // increment word number, if the second word has a compoundroot flag - if ((rv) && (compoundroot) && - (TESTAFF(rv->astr, compoundroot, rv->alen))) { - wordnum++; - } - // second word is acceptable, as a word with prefix or/and suffix? - // hungarian conventions: compounding is acceptable, - // when compound forms consist 2 word, otherwise - // the syllable number of root words is 6, or lesser. - if ((rv) && - ( - ((cpdwordmax==-1) || (wordnum+1astr, 'J', rv->alen)) + numsyllable += 1; + break; + } } + } + } - numsyllable = oldnumsyllable2; - wordnum = oldwordnum2; + // increment word number, if the second word has a compoundroot flag + if ((rv) && (compoundroot) && + (TESTAFF(rv->astr, compoundroot, rv->alen))) { + wordnum++; + } + // second word is acceptable, as a word with prefix or/and suffix? + // hungarian conventions: compounding is acceptable, + // when compound forms consist 2 word, otherwise + // the syllable number of root words is 6, or lesser. + if ((rv) && + (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || + ((cpdmaxsyllable != 0) && (numsyllable <= cpdmaxsyllable))) && + ((!checkcompounddup || (rv != rv_first)))) { + char* m = NULL; + if (compoundflag) + m = affix_check_morph((word + i), strlen(word + i), compoundflag); + if ((!m || *m == '\0') && compoundend) { + if (m) + free(m); + m = affix_check_morph((word + i), strlen(word + i), compoundend); + } + mystrcat(*result, presult, MAXLNLEN); + if (m && (*m != '\0')) { + char m2[MAXLNLEN]; + sprintf(m2, "%c%s%s%s", MSEP_FLD, MORPH_PART, word + i, + line_uniq_app(&m, MSEP_REC)); + mystrcat(*result, m2, MAXLNLEN); + } + if (m) + free(m); + if (strlen(*result) + 1 < MAXLNLEN) + sprintf(*result + strlen(*result), "%c", MSEP_REC); + ok = 1; + } - // perhaps second word is a compound word (recursive call) - if ((wordnum < maxwordnum) && (ok == 0)) { - compound_check_morph((word+i),strlen(word+i), wordnum+1, - numsyllable, maxwordnum, wnum + 1, words, 0, result, presult); - } else { - rv=NULL; - } + numsyllable = oldnumsyllable2; + wordnum = oldwordnum2; + + // perhaps second word is a compound word (recursive call) + if ((wordnum < maxwordnum) && (ok == 0)) { + compound_check_morph((word + i), strlen(word + i), wordnum + 1, + numsyllable, maxwordnum, wnum + 1, words, rwords, 0, + result, presult); + } else { + rv = NULL; } - st[i] = ch; - wordnum = oldwordnum; - numsyllable = oldnumsyllable; + } + st[i] = ch; + wordnum = oldwordnum; + numsyllable = oldnumsyllable; - } while (numdefcpd && oldwordnum == 0 && !onlycpdrule && (onlycpdrule = 1)); // end of onlycpd loop + } while (numdefcpd && oldwordnum == 0 && + onlycpdrule++ < 1); // end of onlycpd loop + } + return 0; +} - } - return 0; -} - // return 1 if s1 (reversed) is a leading subset of end of s2 -/* inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int len) +// return 1 if s1 (reversed) is a leading subset of end of s2 +/* inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int + len) { while ((len > 0) && *s1 && (*s1 == *end_of_s2)) { s1++; @@ -2520,896 +2803,954 @@ int AffixMgr::compound_check_morph(const char * word, int len, } */ -inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int len) - { - while ((len > 0) && (*s1 != '\0') && ((*s1 == *end_of_s2) || (*s1 == '.'))) { - s1++; - end_of_s2--; - len--; - } - return (*s1 == '\0'); - } +inline int AffixMgr::isRevSubset(const char* s1, + const char* end_of_s2, + int len) { + while ((len > 0) && (*s1 != '\0') && ((*s1 == *end_of_s2) || (*s1 == '.'))) { + s1++; + end_of_s2--; + len--; + } + return (*s1 == '\0'); +} // check word for suffixes -struct hentry * AffixMgr::suffix_check (const char * word, int len, - int sfxopts, PfxEntry * ppfx, char ** wlst, int maxSug, int * ns, - const FLAG cclass, const FLAG needflag, char in_compound) -{ - struct hentry * rv = NULL; - PfxEntry* ep = ppfx; - - // first handle the special case of 0 length suffixes - SfxEntry * se = sStart[0]; - - while (se) { - if (!cclass || se->getCont()) { - // suffixes are not allowed in beginning of compounds - if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass - // except when signed with compoundpermitflag flag - (se->getCont() && compoundpermitflag && - TESTAFF(se->getCont(),compoundpermitflag,se->getContLen()))) && (!circumfix || - // no circumfix flag in prefix and suffix - ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (!se->getCont() || !(TESTAFF(se->getCont(),circumfix,se->getContLen())))) || - // circumfix flag in prefix AND suffix - ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (se->getCont() && (TESTAFF(se->getCont(),circumfix,se->getContLen()))))) && - // fogemorpheme - (in_compound || - !(se->getCont() && (TESTAFF(se->getCont(), onlyincompound, se->getContLen())))) && - // needaffix on prefix or first suffix - (cclass || - !(se->getCont() && TESTAFF(se->getCont(), needaffix, se->getContLen())) || - (ppfx && !((ep->getCont()) && - TESTAFF(ep->getCont(), needaffix, - ep->getContLen()))) - )) { - rv = se->checkword(word,len, sfxopts, ppfx, wlst, maxSug, ns, (FLAG) cclass, - needflag, (in_compound ? 0 : onlyincompound)); - if (rv) { - sfx=se; // BUG: sfx not stateless - return rv; - } - } +struct hentry* AffixMgr::suffix_check(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + char** wlst, + int maxSug, + int* ns, + const FLAG cclass, + const FLAG needflag, + char in_compound) { + struct hentry* rv = NULL; + PfxEntry* ep = ppfx; + + // first handle the special case of 0 length suffixes + SfxEntry* se = sStart[0]; + + while (se) { + if (!cclass || se->getCont()) { + // suffixes are not allowed in beginning of compounds + if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass + // except when signed with compoundpermitflag flag + (se->getCont() && compoundpermitflag && + TESTAFF(se->getCont(), compoundpermitflag, se->getContLen()))) && + (!circumfix || + // no circumfix flag in prefix and suffix + ((!ppfx || !(ep->getCont()) || + !TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (!se->getCont() || + !(TESTAFF(se->getCont(), circumfix, se->getContLen())))) || + // circumfix flag in prefix AND suffix + ((ppfx && (ep->getCont()) && + TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (se->getCont() && + (TESTAFF(se->getCont(), circumfix, se->getContLen()))))) && + // fogemorpheme + (in_compound || + !(se->getCont() && + (TESTAFF(se->getCont(), onlyincompound, se->getContLen())))) && + // needaffix on prefix or first suffix + (cclass || + !(se->getCont() && + TESTAFF(se->getCont(), needaffix, se->getContLen())) || + (ppfx && + !((ep->getCont()) && + TESTAFF(ep->getCont(), needaffix, ep->getContLen()))))) { + rv = se->checkword(word, len, sfxopts, ppfx, wlst, maxSug, ns, + (FLAG)cclass, needflag, + (in_compound ? 0 : onlyincompound)); + if (rv) { + sfx = se; // BUG: sfx not stateless + return rv; } - se = se->getNext(); + } } + se = se->getNext(); + } - // now handle the general case - if (len == 0) return NULL; // FULLSTRIP - unsigned char sp= *((const unsigned char *)(word + len - 1)); - SfxEntry * sptr = sStart[sp]; - - while (sptr) { - if (isRevSubset(sptr->getKey(), word + len - 1, len) - ) { - // suffixes are not allowed in beginning of compounds - if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass - // except when signed with compoundpermitflag flag - (sptr->getCont() && compoundpermitflag && - TESTAFF(sptr->getCont(),compoundpermitflag,sptr->getContLen()))) && (!circumfix || - // no circumfix flag in prefix and suffix - ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (!sptr->getCont() || !(TESTAFF(sptr->getCont(),circumfix,sptr->getContLen())))) || - // circumfix flag in prefix AND suffix - ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (sptr->getCont() && (TESTAFF(sptr->getCont(),circumfix,sptr->getContLen()))))) && - // fogemorpheme - (in_compound || - !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) && - // needaffix on prefix or first suffix - (cclass || - !(sptr->getCont() && TESTAFF(sptr->getCont(), needaffix, sptr->getContLen())) || - (ppfx && !((ep->getCont()) && - TESTAFF(ep->getCont(), needaffix, - ep->getContLen()))) - ) - ) if (in_compound != IN_CPD_END || ppfx || !(sptr->getCont() && TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))) { - rv = sptr->checkword(word,len, sfxopts, ppfx, wlst, - maxSug, ns, cclass, needflag, (in_compound ? 0 : onlyincompound)); - if (rv) { - sfx=sptr; // BUG: sfx not stateless - sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless - if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless - return rv; - } - } - sptr = sptr->getNextEQ(); - } else { - sptr = sptr->getNextNE(); + // now handle the general case + if (len == 0) + return NULL; // FULLSTRIP + unsigned char sp = *((const unsigned char*)(word + len - 1)); + SfxEntry* sptr = sStart[sp]; + + while (sptr) { + if (isRevSubset(sptr->getKey(), word + len - 1, len)) { + // suffixes are not allowed in beginning of compounds + if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass + // except when signed with compoundpermitflag flag + (sptr->getCont() && compoundpermitflag && + TESTAFF(sptr->getCont(), compoundpermitflag, + sptr->getContLen()))) && + (!circumfix || + // no circumfix flag in prefix and suffix + ((!ppfx || !(ep->getCont()) || + !TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (!sptr->getCont() || + !(TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())))) || + // circumfix flag in prefix AND suffix + ((ppfx && (ep->getCont()) && + TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (sptr->getCont() && + (TESTAFF(sptr->getCont(), circumfix, sptr->getContLen()))))) && + // fogemorpheme + (in_compound || + !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, + sptr->getContLen()))))) && + // needaffix on prefix or first suffix + (cclass || + !(sptr->getCont() && + TESTAFF(sptr->getCont(), needaffix, sptr->getContLen())) || + (ppfx && + !((ep->getCont()) && + TESTAFF(ep->getCont(), needaffix, ep->getContLen()))))) + if (in_compound != IN_CPD_END || ppfx || + !(sptr->getCont() && + TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))) { + rv = sptr->checkword(word, len, sfxopts, ppfx, wlst, maxSug, ns, + cclass, needflag, + (in_compound ? 0 : onlyincompound)); + if (rv) { + sfx = sptr; // BUG: sfx not stateless + sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless + if (!sptr->getCont()) + sfxappnd = sptr->getKey(); // BUG: sfxappnd not stateless + // LANG_hu section: spec. Hungarian rule + else if (langnum == LANG_hu && sptr->getKeyLen() && + sptr->getKey()[0] == 'i' && sptr->getKey()[1] != 'y' && + sptr->getKey()[1] != 't') { + sfxextra = 1; + } + // END of LANG_hu section + return rv; + } } + sptr = sptr->getNextEQ(); + } else { + sptr = sptr->getNextNE(); } + } - return NULL; + return NULL; } // check word for two-level suffixes -struct hentry * AffixMgr::suffix_check_twosfx(const char * word, int len, - int sfxopts, PfxEntry * ppfx, const FLAG needflag) -{ - struct hentry * rv = NULL; - - // first handle the special case of 0 length suffixes - SfxEntry * se = sStart[0]; - while (se) { - if (contclasses[se->getFlag()]) - { - rv = se->check_twosfx(word,len, sfxopts, ppfx, needflag); - if (rv) return rv; - } - se = se->getNext(); +struct hentry* AffixMgr::suffix_check_twosfx(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag) { + struct hentry* rv = NULL; + + // first handle the special case of 0 length suffixes + SfxEntry* se = sStart[0]; + while (se) { + if (contclasses[se->getFlag()]) { + rv = se->check_twosfx(word, len, sfxopts, ppfx, needflag); + if (rv) + return rv; } + se = se->getNext(); + } - // now handle the general case - if (len == 0) return NULL; // FULLSTRIP - unsigned char sp = *((const unsigned char *)(word + len - 1)); - SfxEntry * sptr = sStart[sp]; - - while (sptr) { - if (isRevSubset(sptr->getKey(), word + len - 1, len)) { - if (contclasses[sptr->getFlag()]) - { - rv = sptr->check_twosfx(word,len, sfxopts, ppfx, needflag); - if (rv) { - sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless - if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless - return rv; - } - } - sptr = sptr->getNextEQ(); - } else { - sptr = sptr->getNextNE(); + // now handle the general case + if (len == 0) + return NULL; // FULLSTRIP + unsigned char sp = *((const unsigned char*)(word + len - 1)); + SfxEntry* sptr = sStart[sp]; + + while (sptr) { + if (isRevSubset(sptr->getKey(), word + len - 1, len)) { + if (contclasses[sptr->getFlag()]) { + rv = sptr->check_twosfx(word, len, sfxopts, ppfx, needflag); + if (rv) { + sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless + if (!sptr->getCont()) + sfxappnd = sptr->getKey(); // BUG: sfxappnd not stateless + return rv; } + } + sptr = sptr->getNextEQ(); + } else { + sptr = sptr->getNextNE(); } + } - return NULL; + return NULL; } -char * AffixMgr::suffix_check_twosfx_morph(const char * word, int len, - int sfxopts, PfxEntry * ppfx, const FLAG needflag) -{ - char result[MAXLNLEN]; - char result2[MAXLNLEN]; - char result3[MAXLNLEN]; - - char * st; - - result[0] = '\0'; - result2[0] = '\0'; - result3[0] = '\0'; - - // first handle the special case of 0 length suffixes - SfxEntry * se = sStart[0]; - while (se) { - if (contclasses[se->getFlag()]) - { - st = se->check_twosfx_morph(word,len, sfxopts, ppfx, needflag); - if (st) { - if (ppfx) { - if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); - } else debugflag(result, ppfx->getFlag()); - } - mystrcat(result, st, MAXLNLEN); - free(st); - if (se->getMorph()) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, se->getMorph(), MAXLNLEN); - } else debugflag(result, se->getFlag()); - mystrcat(result, "\n", MAXLNLEN); - } +char* AffixMgr::suffix_check_twosfx_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag) { + std::string result; + std::string result2; + std::string result3; + + char* st; + + // first handle the special case of 0 length suffixes + SfxEntry* se = sStart[0]; + while (se) { + if (contclasses[se->getFlag()]) { + st = se->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); + if (st) { + if (ppfx) { + if (ppfx->getMorph()) { + result.append(ppfx->getMorph()); + result.append(" "); + } else + debugflag(result, ppfx->getFlag()); } - se = se->getNext(); + result.append(st); + free(st); + if (se->getMorph()) { + result.append(" "); + result.append(se->getMorph()); + } else + debugflag(result, se->getFlag()); + result.append("\n"); + } } + se = se->getNext(); + } - // now handle the general case - if (len == 0) return NULL; // FULLSTRIP - unsigned char sp = *((const unsigned char *)(word + len - 1)); - SfxEntry * sptr = sStart[sp]; + // now handle the general case + if (len == 0) + return NULL; // FULLSTRIP + unsigned char sp = *((const unsigned char*)(word + len - 1)); + SfxEntry* sptr = sStart[sp]; - while (sptr) { - if (isRevSubset(sptr->getKey(), word + len - 1, len)) { - if (contclasses[sptr->getFlag()]) - { - st = sptr->check_twosfx_morph(word,len, sfxopts, ppfx, needflag); - if (st) { - sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless - if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless - strcpy(result2, st); - free(st); - - result3[0] = '\0'; - - if (sptr->getMorph()) { - mystrcat(result3, " ", MAXLNLEN); - mystrcat(result3, sptr->getMorph(), MAXLNLEN); - } else debugflag(result3, sptr->getFlag()); - strlinecat(result2, result3); - mystrcat(result2, "\n", MAXLNLEN); - mystrcat(result, result2, MAXLNLEN); - } - } - sptr = sptr->getNextEQ(); - } else { - sptr = sptr->getNextNE(); + while (sptr) { + if (isRevSubset(sptr->getKey(), word + len - 1, len)) { + if (contclasses[sptr->getFlag()]) { + st = sptr->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); + if (st) { + sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless + if (!sptr->getCont()) + sfxappnd = sptr->getKey(); // BUG: sfxappnd not stateless + result2.assign(st); + free(st); + + result3.clear(); + + if (sptr->getMorph()) { + result3.append(" "); + result3.append(sptr->getMorph()); + } else + debugflag(result3, sptr->getFlag()); + strlinecat(result2, result3); + result2.append("\n"); + result.append(result2); } + } + sptr = sptr->getNextEQ(); + } else { + sptr = sptr->getNextNE(); } - if (*result) return mystrdup(result); - return NULL; + } + + if (!result.empty()) + return mystrdup(result.c_str()); + + return NULL; } -char * AffixMgr::suffix_check_morph(const char * word, int len, - int sfxopts, PfxEntry * ppfx, const FLAG cclass, const FLAG needflag, char in_compound) -{ - char result[MAXLNLEN]; - - struct hentry * rv = NULL; - - result[0] = '\0'; - - PfxEntry* ep = ppfx; - - // first handle the special case of 0 length suffixes - SfxEntry * se = sStart[0]; - while (se) { - if (!cclass || se->getCont()) { - // suffixes are not allowed in beginning of compounds - if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass - // except when signed with compoundpermitflag flag - (se->getCont() && compoundpermitflag && - TESTAFF(se->getCont(),compoundpermitflag,se->getContLen()))) && (!circumfix || - // no circumfix flag in prefix and suffix - ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (!se->getCont() || !(TESTAFF(se->getCont(),circumfix,se->getContLen())))) || - // circumfix flag in prefix AND suffix - ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (se->getCont() && (TESTAFF(se->getCont(),circumfix,se->getContLen()))))) && - // fogemorpheme - (in_compound || - !((se->getCont() && (TESTAFF(se->getCont(), onlyincompound, se->getContLen()))))) && - // needaffix on prefix or first suffix - (cclass || - !(se->getCont() && TESTAFF(se->getCont(), needaffix, se->getContLen())) || - (ppfx && !((ep->getCont()) && - TESTAFF(ep->getCont(), needaffix, - ep->getContLen()))) - ) - )) - rv = se->checkword(word, len, sfxopts, ppfx, NULL, 0, 0, cclass, needflag); - while (rv) { - if (ppfx) { - if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); - } else debugflag(result, ppfx->getFlag()); - } - if (complexprefixes && HENTRY_DATA(rv)) mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); - if (! HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); - } - // store the pointer of the hash entry -// sprintf(result + strlen(result), " %s%p", MORPH_HENTRY, rv); - - if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); - } - if (se->getMorph()) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, se->getMorph(), MAXLNLEN); - } else debugflag(result, se->getFlag()); - mystrcat(result, "\n", MAXLNLEN); - rv = se->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); - } - } - se = se->getNext(); - } - - // now handle the general case - if (len == 0) return NULL; // FULLSTRIP - unsigned char sp = *((const unsigned char *)(word + len - 1)); - SfxEntry * sptr = sStart[sp]; +char* AffixMgr::suffix_check_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG cclass, + const FLAG needflag, + char in_compound) { + char result[MAXLNLEN]; + + struct hentry* rv = NULL; + + result[0] = '\0'; + + PfxEntry* ep = ppfx; + + // first handle the special case of 0 length suffixes + SfxEntry* se = sStart[0]; + while (se) { + if (!cclass || se->getCont()) { + // suffixes are not allowed in beginning of compounds + if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass + // except when signed with compoundpermitflag flag + (se->getCont() && compoundpermitflag && + TESTAFF(se->getCont(), compoundpermitflag, se->getContLen()))) && + (!circumfix || + // no circumfix flag in prefix and suffix + ((!ppfx || !(ep->getCont()) || + !TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (!se->getCont() || + !(TESTAFF(se->getCont(), circumfix, se->getContLen())))) || + // circumfix flag in prefix AND suffix + ((ppfx && (ep->getCont()) && + TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (se->getCont() && + (TESTAFF(se->getCont(), circumfix, se->getContLen()))))) && + // fogemorpheme + (in_compound || + !((se->getCont() && + (TESTAFF(se->getCont(), onlyincompound, se->getContLen()))))) && + // needaffix on prefix or first suffix + (cclass || + !(se->getCont() && + TESTAFF(se->getCont(), needaffix, se->getContLen())) || + (ppfx && + !((ep->getCont()) && + TESTAFF(ep->getCont(), needaffix, ep->getContLen())))))) + rv = se->checkword(word, len, sfxopts, ppfx, NULL, 0, 0, cclass, + needflag); + while (rv) { + if (ppfx) { + if (ppfx->getMorph()) { + mystrcat(result, ppfx->getMorph(), MAXLNLEN); + mystrcat(result, " ", MAXLNLEN); + } else + debugflag(result, ppfx->getFlag()); + } + if (complexprefixes && HENTRY_DATA(rv)) + mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + if (!HENTRY_FIND(rv, MORPH_STEM)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, MORPH_STEM, MAXLNLEN); + mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); + } + // store the pointer of the hash entry + // sprintf(result + strlen(result), " %s%p", MORPH_HENTRY, + // rv); - while (sptr) { - if (isRevSubset(sptr->getKey(), word + len - 1, len) - ) { - // suffixes are not allowed in beginning of compounds - if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass - // except when signed with compoundpermitflag flag - (sptr->getCont() && compoundpermitflag && - TESTAFF(sptr->getCont(),compoundpermitflag,sptr->getContLen()))) && (!circumfix || - // no circumfix flag in prefix and suffix - ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (!sptr->getCont() || !(TESTAFF(sptr->getCont(),circumfix,sptr->getContLen())))) || - // circumfix flag in prefix AND suffix - ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(), - circumfix, ep->getContLen())) && - (sptr->getCont() && (TESTAFF(sptr->getCont(),circumfix,sptr->getContLen()))))) && - // fogemorpheme - (in_compound || - !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) && - // needaffix on first suffix - (cclass || !(sptr->getCont() && - TESTAFF(sptr->getCont(), needaffix, sptr->getContLen()))) - )) rv = sptr->checkword(word,len, sfxopts, ppfx, NULL, 0, 0, cclass, needflag); - while (rv) { - if (ppfx) { - if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); - } else debugflag(result, ppfx->getFlag()); - } - if (complexprefixes && HENTRY_DATA(rv)) mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); - if (! HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); - } - // store the pointer of the hash entry -// sprintf(result + strlen(result), " %s%p", MORPH_HENTRY, rv); + if (!complexprefixes && HENTRY_DATA(rv)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + } + if (se->getMorph()) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, se->getMorph(), MAXLNLEN); + } else + debugflag(result, se->getFlag()); + mystrcat(result, "\n", MAXLNLEN); + rv = se->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); + } + } + se = se->getNext(); + } - if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); - } + // now handle the general case + if (len == 0) + return NULL; // FULLSTRIP + unsigned char sp = *((const unsigned char*)(word + len - 1)); + SfxEntry* sptr = sStart[sp]; + + while (sptr) { + if (isRevSubset(sptr->getKey(), word + len - 1, len)) { + // suffixes are not allowed in beginning of compounds + if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass + // except when signed with compoundpermitflag flag + (sptr->getCont() && compoundpermitflag && + TESTAFF(sptr->getCont(), compoundpermitflag, + sptr->getContLen()))) && + (!circumfix || + // no circumfix flag in prefix and suffix + ((!ppfx || !(ep->getCont()) || + !TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (!sptr->getCont() || + !(TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())))) || + // circumfix flag in prefix AND suffix + ((ppfx && (ep->getCont()) && + TESTAFF(ep->getCont(), circumfix, ep->getContLen())) && + (sptr->getCont() && + (TESTAFF(sptr->getCont(), circumfix, sptr->getContLen()))))) && + // fogemorpheme + (in_compound || + !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, + sptr->getContLen()))))) && + // needaffix on first suffix + (cclass || + !(sptr->getCont() && + TESTAFF(sptr->getCont(), needaffix, sptr->getContLen()))))) + rv = sptr->checkword(word, len, sfxopts, ppfx, NULL, 0, 0, cclass, + needflag); + while (rv) { + if (ppfx) { + if (ppfx->getMorph()) { + mystrcat(result, ppfx->getMorph(), MAXLNLEN); + mystrcat(result, " ", MAXLNLEN); + } else + debugflag(result, ppfx->getFlag()); + } + if (complexprefixes && HENTRY_DATA(rv)) + mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + if (!HENTRY_FIND(rv, MORPH_STEM)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, MORPH_STEM, MAXLNLEN); + mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); + } + // store the pointer of the hash entry + // sprintf(result + strlen(result), " %s%p", + // MORPH_HENTRY, rv); - if (sptr->getMorph()) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, sptr->getMorph(), MAXLNLEN); - } else debugflag(result, sptr->getFlag()); - mystrcat(result, "\n", MAXLNLEN); - rv = sptr->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); - } - sptr = sptr->getNextEQ(); - } else { - sptr = sptr->getNextNE(); + if (!complexprefixes && HENTRY_DATA(rv)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); } + + if (sptr->getMorph()) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, sptr->getMorph(), MAXLNLEN); + } else + debugflag(result, sptr->getFlag()); + mystrcat(result, "\n", MAXLNLEN); + rv = sptr->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); + } + sptr = sptr->getNextEQ(); + } else { + sptr = sptr->getNextNE(); } + } - if (*result) return mystrdup(result); - return NULL; + if (*result) + return mystrdup(result); + return NULL; } // check if word with affixes is correctly spelled -struct hentry * AffixMgr::affix_check (const char * word, int len, const FLAG needflag, char in_compound) -{ - struct hentry * rv= NULL; - - // check all prefixes (also crossed with suffixes if allowed) - rv = prefix_check(word, len, in_compound, needflag); - if (rv) return rv; +struct hentry* AffixMgr::affix_check(const char* word, + int len, + const FLAG needflag, + char in_compound) { + struct hentry* rv = NULL; + + // check all prefixes (also crossed with suffixes if allowed) + rv = prefix_check(word, len, in_compound, needflag); + if (rv) + return rv; - // if still not found check all suffixes - rv = suffix_check(word, len, 0, NULL, NULL, 0, NULL, FLAG_NULL, needflag, in_compound); + // if still not found check all suffixes + rv = suffix_check(word, len, 0, NULL, NULL, 0, NULL, FLAG_NULL, needflag, + in_compound); - if (havecontclass) { - sfx = NULL; - pfx = NULL; + if (havecontclass) { + sfx = NULL; + pfx = NULL; - if (rv) return rv; - // if still not found check all two-level suffixes - rv = suffix_check_twosfx(word, len, 0, NULL, needflag); + if (rv) + return rv; + // if still not found check all two-level suffixes + rv = suffix_check_twosfx(word, len, 0, NULL, needflag); - if (rv) return rv; - // if still not found check all two-level suffixes - rv = prefix_check_twosfx(word, len, IN_CPD_NOT, needflag); - } + if (rv) + return rv; + // if still not found check all two-level suffixes + rv = prefix_check_twosfx(word, len, IN_CPD_NOT, needflag); + } - return rv; + return rv; } // check if word with affixes is correctly spelled -char * AffixMgr::affix_check_morph(const char * word, int len, const FLAG needflag, char in_compound) -{ - char result[MAXLNLEN]; - char * st = NULL; - - *result = '\0'; - - // check all prefixes (also crossed with suffixes if allowed) - st = prefix_check_morph(word, len, in_compound); +char* AffixMgr::affix_check_morph(const char* word, + int len, + const FLAG needflag, + char in_compound) { + char result[MAXLNLEN]; + char* st = NULL; + + *result = '\0'; + + // check all prefixes (also crossed with suffixes if allowed) + st = prefix_check_morph(word, len, in_compound); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + } + + // if still not found check all suffixes + st = suffix_check_morph(word, len, 0, NULL, '\0', needflag, in_compound); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + } + + if (havecontclass) { + sfx = NULL; + pfx = NULL; + // if still not found check all two-level suffixes + st = suffix_check_twosfx_morph(word, len, 0, NULL, needflag); if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + mystrcat(result, st, MAXLNLEN); + free(st); } - // if still not found check all suffixes - st = suffix_check_morph(word, len, 0, NULL, '\0', needflag, in_compound); + // if still not found check all two-level suffixes + st = prefix_check_twosfx_morph(word, len, IN_CPD_NOT, needflag); if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + mystrcat(result, st, MAXLNLEN); + free(st); } + } - if (havecontclass) { - sfx = NULL; - pfx = NULL; - // if still not found check all two-level suffixes - st = suffix_check_twosfx_morph(word, len, 0, NULL, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } + return mystrdup(result); +} - // if still not found check all two-level suffixes - st = prefix_check_twosfx_morph(word, len, IN_CPD_NOT, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - } +char* AffixMgr::morphgen(const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* morph, + const char* targetmorph, + int level) { + // handle suffixes + if (!morph) + return NULL; - return mystrdup(result); -} + // check substandard flag + if (TESTAFF(ap, substandard, al)) + return NULL; -char * AffixMgr::morphgen(char * ts, int wl, const unsigned short * ap, - unsigned short al, char * morph, char * targetmorph, int level) -{ - // handle suffixes - char * stemmorph; - char * stemmorphcatpos; - char mymorph[MAXLNLEN]; + if (morphcmp(morph, targetmorph) == 0) + return mystrdup(ts); - if (!morph) return NULL; + size_t stemmorphcatpos; + std::string mymorph; - // check substandard flag - if (TESTAFF(ap, substandard, al)) return NULL; + // use input suffix fields, if exist + if (strstr(morph, MORPH_INFL_SFX) || strstr(morph, MORPH_DERI_SFX)) { + mymorph.assign(morph); + mymorph.append(" "); + stemmorphcatpos = mymorph.size(); + } else { + stemmorphcatpos = std::string::npos; + } - if (morphcmp(morph, targetmorph) == 0) return mystrdup(ts); + for (int i = 0; i < al; i++) { + const unsigned char c = (unsigned char)(ap[i] & 0x00FF); + SfxEntry* sptr = sFlag[c]; + while (sptr) { + if (sptr->getFlag() == ap[i] && sptr->getMorph() && + ((sptr->getContLen() == 0) || + // don't generate forms with substandard affixes + !TESTAFF(sptr->getCont(), substandard, sptr->getContLen()))) { + const char* stemmorph; + if (stemmorphcatpos != std::string::npos) { + mymorph.replace(stemmorphcatpos, std::string::npos, sptr->getMorph()); + stemmorph = mymorph.c_str(); + } else { + stemmorph = sptr->getMorph(); + } -// int targetcount = get_sfxcount(targetmorph); + int cmp = morphcmp(stemmorph, targetmorph); - // use input suffix fields, if exist - if (strstr(morph, MORPH_INFL_SFX) || strstr(morph, MORPH_DERI_SFX)) { - stemmorph = mymorph; - strcpy(stemmorph, morph); - mystrcat(stemmorph, " ", MAXLNLEN); - stemmorphcatpos = stemmorph + strlen(stemmorph); - } else { - stemmorph = morph; - stemmorphcatpos = NULL; - } - - for (int i = 0; i < al; i++) { - const unsigned char c = (unsigned char) (ap[i] & 0x00FF); - SfxEntry * sptr = sFlag[c]; - while (sptr) { - if (sptr->getFlag() == ap[i] && sptr->getMorph() && ((sptr->getContLen() == 0) || - // don't generate forms with substandard affixes - !TESTAFF(sptr->getCont(), substandard, sptr->getContLen()))) { - - if (stemmorphcatpos) strcpy(stemmorphcatpos, sptr->getMorph()); - else stemmorph = (char *) sptr->getMorph(); - - int cmp = morphcmp(stemmorph, targetmorph); - - if (cmp == 0) { - char * newword = sptr->add(ts, wl); - if (newword) { - hentry * check = pHMgr->lookup(newword); // XXX extra dic - if (!check || !check->astr || - !(TESTAFF(check->astr, forbiddenword, check->alen) || - TESTAFF(check->astr, ONLYUPCASEFLAG, check->alen))) { - return newword; - } - free(newword); - } - } - - // recursive call for secondary suffixes - if ((level == 0) && (cmp == 1) && (sptr->getContLen() > 0) && -// (get_sfxcount(stemmorph) < targetcount) && - !TESTAFF(sptr->getCont(), substandard, sptr->getContLen())) { - char * newword = sptr->add(ts, wl); - if (newword) { - char * newword2 = morphgen(newword, strlen(newword), sptr->getCont(), - sptr->getContLen(), stemmorph, targetmorph, 1); - - if (newword2) { - free(newword); - return newword2; - } - free(newword); - newword = NULL; - } - } + if (cmp == 0) { + char* newword = sptr->add(ts, wl); + if (newword) { + hentry* check = pHMgr->lookup(newword); // XXX extra dic + if (!check || !check->astr || + !(TESTAFF(check->astr, forbiddenword, check->alen) || + TESTAFF(check->astr, ONLYUPCASEFLAG, check->alen))) { + return newword; + } + free(newword); + } + } + + // recursive call for secondary suffixes + if ((level == 0) && (cmp == 1) && (sptr->getContLen() > 0) && + // (get_sfxcount(stemmorph) < targetcount) && + !TESTAFF(sptr->getCont(), substandard, sptr->getContLen())) { + char* newword = sptr->add(ts, wl); + if (newword) { + char* newword2 = + morphgen(newword, strlen(newword), sptr->getCont(), + sptr->getContLen(), stemmorph, targetmorph, 1); + + if (newword2) { + free(newword); + return newword2; } - sptr = sptr->getFlgNxt(); + free(newword); + newword = NULL; + } } + } + sptr = sptr->getFlgNxt(); } - return NULL; + } + return NULL; } +int AffixMgr::expand_rootword(struct guessword* wlst, + int maxn, + const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* bad, + int badl, + const char* phon) { + int nh = 0; + // first add root word to list + if ((nh < maxn) && + !(al && ((needaffix && TESTAFF(ap, needaffix, al)) || + (onlyincompound && TESTAFF(ap, onlyincompound, al))))) { + wlst[nh].word = mystrdup(ts); + if (!wlst[nh].word) + return 0; + wlst[nh].allow = (1 == 0); + wlst[nh].orig = NULL; + nh++; + // add special phonetic version + if (phon && (nh < maxn)) { + wlst[nh].word = mystrdup(phon); + if (!wlst[nh].word) + return nh - 1; + wlst[nh].allow = (1 == 0); + wlst[nh].orig = mystrdup(ts); + if (!wlst[nh].orig) + return nh - 1; + nh++; + } + } -int AffixMgr::expand_rootword(struct guessword * wlst, int maxn, const char * ts, - int wl, const unsigned short * ap, unsigned short al, char * bad, int badl, - char * phon) -{ - int nh=0; - // first add root word to list - if ((nh < maxn) && !(al && ((needaffix && TESTAFF(ap, needaffix, al)) || - (onlyincompound && TESTAFF(ap, onlyincompound, al))))) { - wlst[nh].word = mystrdup(ts); - if (!wlst[nh].word) return 0; - wlst[nh].allow = (1 == 0); - wlst[nh].orig = NULL; - nh++; - // add special phonetic version - if (phon && (nh < maxn)) { - wlst[nh].word = mystrdup(phon); - if (!wlst[nh].word) return nh - 1; - wlst[nh].allow = (1 == 0); - wlst[nh].orig = mystrdup(ts); - if (!wlst[nh].orig) return nh - 1; - nh++; - } - } - - // handle suffixes - for (int i = 0; i < al; i++) { - const unsigned char c = (unsigned char) (ap[i] & 0x00FF); - SfxEntry * sptr = sFlag[c]; - while (sptr) { - if ((sptr->getFlag() == ap[i]) && (!sptr->getKeyLen() || ((badl > sptr->getKeyLen()) && - (strcmp(sptr->getAffix(), bad + badl - sptr->getKeyLen()) == 0))) && - // check needaffix flag - !(sptr->getCont() && ((needaffix && - TESTAFF(sptr->getCont(), needaffix, sptr->getContLen())) || - (circumfix && - TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())) || - (onlyincompound && - TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen())))) - ) { - char * newword = sptr->add(ts, wl); - if (newword) { - if (nh < maxn) { - wlst[nh].word = newword; - wlst[nh].allow = sptr->allowCross(); - wlst[nh].orig = NULL; - nh++; - // add special phonetic version - if (phon && (nh < maxn)) { - char st[MAXWORDUTF8LEN]; - strcpy(st, phon); - strcat(st, sptr->getKey()); - reverseword(st + strlen(phon)); - wlst[nh].word = mystrdup(st); - if (!wlst[nh].word) return nh - 1; - wlst[nh].allow = (1 == 0); - wlst[nh].orig = mystrdup(newword); - if (!wlst[nh].orig) return nh - 1; - nh++; - } - } else { - free(newword); - } + // handle suffixes + for (int i = 0; i < al; i++) { + const unsigned char c = (unsigned char)(ap[i] & 0x00FF); + SfxEntry* sptr = sFlag[c]; + while (sptr) { + if ((sptr->getFlag() == ap[i]) && + (!sptr->getKeyLen() || + ((badl > sptr->getKeyLen()) && + (strcmp(sptr->getAffix(), bad + badl - sptr->getKeyLen()) == 0))) && + // check needaffix flag + !(sptr->getCont() && + ((needaffix && + TESTAFF(sptr->getCont(), needaffix, sptr->getContLen())) || + (circumfix && + TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())) || + (onlyincompound && + TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) { + char* newword = sptr->add(ts, wl); + if (newword) { + if (nh < maxn) { + wlst[nh].word = newword; + wlst[nh].allow = sptr->allowCross(); + wlst[nh].orig = NULL; + nh++; + // add special phonetic version + if (phon && (nh < maxn)) { + std::string prefix(phon); + std::string key(sptr->getKey()); + reverseword(key); + prefix.append(key); + wlst[nh].word = mystrdup(prefix.c_str()); + if (!wlst[nh].word) + return nh - 1; + wlst[nh].allow = (1 == 0); + wlst[nh].orig = mystrdup(newword); + if (!wlst[nh].orig) + return nh - 1; + nh++; } - } - sptr = sptr->getFlgNxt(); - } - } - - int n = nh; - - // handle cross products of prefixes and suffixes - for (int j=1;jgetFlag() == ap[k]) && cptr->allowCross() && (!cptr->getKeyLen() || ((badl > cptr->getKeyLen()) && - (strncmp(cptr->getKey(), bad, cptr->getKeyLen()) == 0)))) { - int l1 = strlen(wlst[j].word); - char * newword = cptr->add(wlst[j].word, l1); - if (newword) { - if (nh < maxn) { - wlst[nh].word = newword; - wlst[nh].allow = cptr->allowCross(); - wlst[nh].orig = NULL; - nh++; - } else { - free(newword); - } - } - } - cptr = cptr->getFlgNxt(); - } + } else { + free(newword); } - } - - - // now handle pure prefixes - for (int m = 0; m < al; m ++) { - const unsigned char c = (unsigned char) (ap[m] & 0x00FF); - PfxEntry * ptr = pFlag[c]; - while (ptr) { - if ((ptr->getFlag() == ap[m]) && (!ptr->getKeyLen() || ((badl > ptr->getKeyLen()) && - (strncmp(ptr->getKey(), bad, ptr->getKeyLen()) == 0))) && - // check needaffix flag - !(ptr->getCont() && ((needaffix && - TESTAFF(ptr->getCont(), needaffix, ptr->getContLen())) || - (circumfix && - TESTAFF(ptr->getCont(), circumfix, ptr->getContLen())) || - (onlyincompound && - TESTAFF(ptr->getCont(), onlyincompound, ptr->getContLen())))) - ) { - char * newword = ptr->add(ts, wl); + } + } + sptr = sptr->getFlgNxt(); + } + } + + int n = nh; + + // handle cross products of prefixes and suffixes + for (int j = 1; j < n; j++) + if (wlst[j].allow) { + for (int k = 0; k < al; k++) { + const unsigned char c = (unsigned char)(ap[k] & 0x00FF); + PfxEntry* cptr = pFlag[c]; + while (cptr) { + if ((cptr->getFlag() == ap[k]) && cptr->allowCross() && + (!cptr->getKeyLen() || + ((badl > cptr->getKeyLen()) && + (strncmp(cptr->getKey(), bad, cptr->getKeyLen()) == 0)))) { + int l1 = strlen(wlst[j].word); + char* newword = cptr->add(wlst[j].word, l1); if (newword) { - if (nh < maxn) { - wlst[nh].word = newword; - wlst[nh].allow = ptr->allowCross(); - wlst[nh].orig = NULL; - nh++; - } else { - free(newword); - } + if (nh < maxn) { + wlst[nh].word = newword; + wlst[nh].allow = cptr->allowCross(); + wlst[nh].orig = NULL; + nh++; + } else { + free(newword); + } } - } - ptr = ptr->getFlgNxt(); - } + } + cptr = cptr->getFlgNxt(); + } + } + } + + // now handle pure prefixes + for (int m = 0; m < al; m++) { + const unsigned char c = (unsigned char)(ap[m] & 0x00FF); + PfxEntry* ptr = pFlag[c]; + while (ptr) { + if ((ptr->getFlag() == ap[m]) && + (!ptr->getKeyLen() || + ((badl > ptr->getKeyLen()) && + (strncmp(ptr->getKey(), bad, ptr->getKeyLen()) == 0))) && + // check needaffix flag + !(ptr->getCont() && + ((needaffix && + TESTAFF(ptr->getCont(), needaffix, ptr->getContLen())) || + (circumfix && + TESTAFF(ptr->getCont(), circumfix, ptr->getContLen())) || + (onlyincompound && + TESTAFF(ptr->getCont(), onlyincompound, ptr->getContLen()))))) { + char* newword = ptr->add(ts, wl); + if (newword) { + if (nh < maxn) { + wlst[nh].word = newword; + wlst[nh].allow = ptr->allowCross(); + wlst[nh].orig = NULL; + nh++; + } else { + free(newword); + } + } + } + ptr = ptr->getFlgNxt(); } + } - return nh; + return nh; } // return length of replacing table -int AffixMgr::get_numrep() const -{ +int AffixMgr::get_numrep() const { return numrep; } // return replacing table -struct replentry * AffixMgr::get_reptable() const -{ - if (! reptable ) return NULL; +struct replentry* AffixMgr::get_reptable() const { + if (!reptable) + return NULL; return reptable; } // return iconv table -RepList * AffixMgr::get_iconvtable() const -{ - if (! iconvtable ) return NULL; +RepList* AffixMgr::get_iconvtable() const { + if (!iconvtable) + return NULL; return iconvtable; } // return oconv table -RepList * AffixMgr::get_oconvtable() const -{ - if (! oconvtable ) return NULL; +RepList* AffixMgr::get_oconvtable() const { + if (!oconvtable) + return NULL; return oconvtable; } // return replacing table -struct phonetable * AffixMgr::get_phonetable() const -{ - if (! phone ) return NULL; +struct phonetable* AffixMgr::get_phonetable() const { + if (!phone) + return NULL; return phone; } // return length of character map table -int AffixMgr::get_nummap() const -{ +int AffixMgr::get_nummap() const { return nummap; } // return character map table -struct mapentry * AffixMgr::get_maptable() const -{ - if (! maptable ) return NULL; +struct mapentry* AffixMgr::get_maptable() const { + if (!maptable) + return NULL; return maptable; } // return length of word break table -int AffixMgr::get_numbreak() const -{ +int AffixMgr::get_numbreak() const { return numbreak; } // return character map table -char ** AffixMgr::get_breaktable() const -{ - if (! breaktable ) return NULL; +char** AffixMgr::get_breaktable() const { + if (!breaktable) + return NULL; return breaktable; } // return text encoding of dictionary -char * AffixMgr::get_encoding() -{ - if (! encoding ) encoding = mystrdup(SPELL_ENCODING); +char* AffixMgr::get_encoding() { + if (!encoding) + encoding = mystrdup(SPELL_ENCODING); return mystrdup(encoding); } // return text encoding of dictionary -int AffixMgr::get_langnum() const -{ +int AffixMgr::get_langnum() const { return langnum; } // return double prefix option -int AffixMgr::get_complexprefixes() const -{ +int AffixMgr::get_complexprefixes() const { return complexprefixes; } // return FULLSTRIP option -int AffixMgr::get_fullstrip() const -{ +int AffixMgr::get_fullstrip() const { return fullstrip; } -FLAG AffixMgr::get_keepcase() const -{ +FLAG AffixMgr::get_keepcase() const { return keepcase; } -FLAG AffixMgr::get_forceucase() const -{ +FLAG AffixMgr::get_forceucase() const { return forceucase; } -FLAG AffixMgr::get_warn() const -{ +FLAG AffixMgr::get_warn() const { return warn; } -int AffixMgr::get_forbidwarn() const -{ +int AffixMgr::get_forbidwarn() const { return forbidwarn; } -int AffixMgr::get_checksharps() const -{ +int AffixMgr::get_checksharps() const { return checksharps; } -char * AffixMgr::encode_flag(unsigned short aflag) const -{ +char* AffixMgr::encode_flag(unsigned short aflag) const { return pHMgr->encode_flag(aflag); } - // return the preferred ignore string for suggestions -char * AffixMgr::get_ignore() const -{ - if (!ignorechars) return NULL; +char* AffixMgr::get_ignore() const { + if (!ignorechars) + return NULL; return ignorechars; } // return the preferred ignore string for suggestions -unsigned short * AffixMgr::get_ignore_utf16(int * len) const -{ - *len = ignorechars_utf16_len; +const std::vector& AffixMgr::get_ignore_utf16() const { return ignorechars_utf16; } // return the keyboard string for suggestions -char * AffixMgr::get_key_string() -{ - if (! keystring ) keystring = mystrdup(SPELL_KEYSTRING); +char* AffixMgr::get_key_string() { + if (!keystring) + keystring = mystrdup(SPELL_KEYSTRING); return mystrdup(keystring); } // return the preferred try string for suggestions -char * AffixMgr::get_try_string() const -{ - if (! trystring ) return NULL; +char* AffixMgr::get_try_string() const { + if (!trystring) + return NULL; return mystrdup(trystring); } // return the preferred try string for suggestions -const char * AffixMgr::get_wordchars() const -{ +const char* AffixMgr::get_wordchars() const { return wordchars; } -unsigned short * AffixMgr::get_wordchars_utf16(int * len) const -{ - *len = wordchars_utf16_len; +const std::vector& AffixMgr::get_wordchars_utf16() const { return wordchars_utf16; } // is there compounding? -int AffixMgr::get_compound() const -{ +int AffixMgr::get_compound() const { return compoundflag || compoundbegin || numdefcpd; } // return the compound words control flag -FLAG AffixMgr::get_compoundflag() const -{ +FLAG AffixMgr::get_compoundflag() const { return compoundflag; } // return the forbidden words control flag -FLAG AffixMgr::get_forbiddenword() const -{ +FLAG AffixMgr::get_forbiddenword() const { return forbiddenword; } // return the forbidden words control flag -FLAG AffixMgr::get_nosuggest() const -{ +FLAG AffixMgr::get_nosuggest() const { return nosuggest; } // return the forbidden words control flag -FLAG AffixMgr::get_nongramsuggest() const -{ +FLAG AffixMgr::get_nongramsuggest() const { return nongramsuggest; } // return the forbidden words flag modify flag -FLAG AffixMgr::get_needaffix() const -{ +FLAG AffixMgr::get_needaffix() const { return needaffix; } // return the onlyincompound flag -FLAG AffixMgr::get_onlyincompound() const -{ +FLAG AffixMgr::get_onlyincompound() const { return onlyincompound; } // return the compound word signal flag -FLAG AffixMgr::get_compoundroot() const -{ +FLAG AffixMgr::get_compoundroot() const { return compoundroot; } // return the compound begin signal flag -FLAG AffixMgr::get_compoundbegin() const -{ +FLAG AffixMgr::get_compoundbegin() const { return compoundbegin; } // return the value of checknum -int AffixMgr::get_checknum() const -{ +int AffixMgr::get_checknum() const { return checknum; } // return the value of prefix -const char * AffixMgr::get_prefix() const -{ - if (pfx) return pfx->getKey(); +const char* AffixMgr::get_prefix() const { + if (pfx) + return pfx->getKey(); return NULL; } // return the value of suffix -const char * AffixMgr::get_suffix() const -{ +const char* AffixMgr::get_suffix() const { return sfxappnd; } // return the value of suffix -const char * AffixMgr::get_version() const -{ +const char* AffixMgr::get_version() const { return version; } // return lemma_present flag -FLAG AffixMgr::get_lemma_present() const -{ +FLAG AffixMgr::get_lemma_present() const { return lemma_present; } // utility method to look up root words in hash table -struct hentry * AffixMgr::lookup(const char * word) -{ +struct hentry* AffixMgr::lookup(const char* word) { int i; - struct hentry * he = NULL; + struct hentry* he = NULL; for (i = 0; i < *maxdic && !he; i++) { he = (alldic[i])->lookup(word); } @@ -3417,1122 +3758,1360 @@ struct hentry * AffixMgr::lookup(const char * word) } // return the value of suffix -int AffixMgr::have_contclass() const -{ +int AffixMgr::have_contclass() const { return havecontclass; } // return utf8 -int AffixMgr::get_utf8() const -{ +int AffixMgr::get_utf8() const { return utf8; } -int AffixMgr::get_maxngramsugs(void) const -{ +int AffixMgr::get_maxngramsugs(void) const { return maxngramsugs; } -int AffixMgr::get_maxcpdsugs(void) const -{ +int AffixMgr::get_maxcpdsugs(void) const { return maxcpdsugs; } -int AffixMgr::get_maxdiff(void) const -{ +int AffixMgr::get_maxdiff(void) const { return maxdiff; } -int AffixMgr::get_onlymaxdiff(void) const -{ +int AffixMgr::get_onlymaxdiff(void) const { return onlymaxdiff; } // return nosplitsugs -int AffixMgr::get_nosplitsugs(void) const -{ +int AffixMgr::get_nosplitsugs(void) const { return nosplitsugs; } // return sugswithdots -int AffixMgr::get_sugswithdots(void) const -{ +int AffixMgr::get_sugswithdots(void) const { return sugswithdots; } /* parse flag */ -int AffixMgr::parse_flag(char * line, unsigned short * out, FileMgr * af) { - char * s = NULL; - if (*out != FLAG_NULL && !(*out >= DEFAULTFLAGS)) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of an affix file parameter\n", af->getlinenum()); - return 1; - } - if (parse_string(line, &s, af->getlinenum())) return 1; - *out = pHMgr->decode_flag(s); - free(s); - return 0; +int AffixMgr::parse_flag(char* line, unsigned short* out, FileMgr* af) { + char* s = NULL; + if (*out != FLAG_NULL && !(*out >= DEFAULTFLAGS)) { + HUNSPELL_WARNING( + stderr, + "error: line %d: multiple definitions of an affix file parameter\n", + af->getlinenum()); + return 1; + } + if (parse_string(line, &s, af->getlinenum())) + return 1; + *out = pHMgr->decode_flag(s); + free(s); + return 0; } /* parse num */ -int AffixMgr::parse_num(char * line, int * out, FileMgr * af) { - char * s = NULL; - if (*out != -1) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of an affix file parameter\n", af->getlinenum()); - return 1; - } - if (parse_string(line, &s, af->getlinenum())) return 1; - *out = atoi(s); - free(s); - return 0; -} +int AffixMgr::parse_num(char* line, int* out, FileMgr* af) { + char* s = NULL; + if (*out != -1) { + HUNSPELL_WARNING( + stderr, + "error: line %d: multiple definitions of an affix file parameter\n", + af->getlinenum()); + return 1; + } + if (parse_string(line, &s, af->getlinenum())) + return 1; + *out = atoi(s); + free(s); + return 0; +} /* parse in the max syllablecount of compound words and */ -int AffixMgr::parse_cpdsyllable(char * line, FileMgr * af) -{ - char * tp = line; - char * piece; - int i = 0; - int np = 0; - w_char w[MAXWORDLEN]; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { cpdmaxsyllable = atoi(piece); np++; break; } - case 2: { - if (!utf8) { - cpdvowels = mystrdup(piece); - } else { - int n = u8_u16(w, MAXWORDLEN, piece); - if (n > 0) { - flag_qsort((unsigned short *) w, 0, n); - cpdvowels_utf16 = (w_char *) malloc(n * sizeof(w_char)); - if (!cpdvowels_utf16) return 1; - memcpy(cpdvowels_utf16, w, n * sizeof(w_char)); - } - cpdvowels_utf16_len = n; - } - np++; - break; - } - default: break; +int AffixMgr::parse_cpdsyllable(char* line, FileMgr* af) { + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + cpdmaxsyllable = atoi(piece); + np++; + break; + } + case 2: { + if (!utf8) { + cpdvowels = mystrdup(piece); + } else { + std::vector w; + u8_u16(w, piece); + if (!w.empty()) { + std::sort(w.begin(), w.end()); + cpdvowels_utf16 = (w_char*)malloc(w.size() * sizeof(w_char)); + if (!cpdvowels_utf16) + return 1; + memcpy(cpdvowels_utf16, &w[0], w.size()); + } + cpdvowels_utf16_len = w.size(); } - i++; + np++; + break; + } + default: + break; } - piece = mystrsep(&tp, 0); - } - if (np < 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing compoundsyllable information\n", af->getlinenum()); - return 1; - } - if (np == 2) cpdvowels = mystrdup("aeiouAEIOU"); - return 0; + i++; + } + piece = mystrsep(&tp, 0); + } + if (np < 2) { + HUNSPELL_WARNING(stderr, + "error: line %d: missing compoundsyllable information\n", + af->getlinenum()); + return 1; + } + if (np == 2) + cpdvowels = mystrdup("aeiouAEIOU"); + return 0; } /* parse in the typical fault correcting table */ -int AffixMgr::parse_reptable(char * line, FileMgr * af) -{ - if (numrep != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numrep = atoi(piece); - if (numrep < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", af->getlinenum()); - return 1; - } - reptable = (replentry *) malloc(numrep * sizeof(struct replentry)); - if (!reptable) return 1; - np++; - break; - } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; - } - - /* now parse the numrep lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numrep; j++) { - if ((nl = af->getline()) == NULL) return 1; - mychomp(nl); - tp = nl; - i = 0; - reptable[j].pattern = NULL; - reptable[j].pattern2 = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"REP",3) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numrep = 0; - return 1; - } - break; - } - case 1: { - if (*piece == '^') reptable[j].start = true; else reptable[j].start = false; - reptable[j].pattern = mystrrep(mystrdup(piece + int(reptable[j].start)),"_"," "); - int lr = strlen(reptable[j].pattern) - 1; - if (reptable[j].pattern[lr] == '$') { - reptable[j].end = true; - reptable[j].pattern[lr] = '\0'; - } else reptable[j].end = false; - break; - } - case 2: { reptable[j].pattern2 = mystrrep(mystrdup(piece),"_"," "); break; } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); +int AffixMgr::parse_reptable(char* line, FileMgr* af) { + if (numrep != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if ((!(reptable[j].pattern)) || (!(reptable[j].pattern2))) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numrep = 0; - return 1; + case 1: { + numrep = atoi(piece); + if (numrep < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", + af->getlinenum()); + return 1; + } + reptable = (replentry*)malloc(numrep * sizeof(struct replentry)); + if (!reptable) + return 1; + np++; + break; } - } - return 0; -} + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the typical fault correcting table */ -int AffixMgr::parse_convtable(char * line, FileMgr * af, RepList ** rl, const char * keyword) -{ - if (*rl) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the numrep lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numrep; j++) { + if ((nl = af->getline()) == NULL) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - int numrl = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numrl = atoi(piece); - if (numrl < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", af->getlinenum()); - return 1; - } - *rl = new RepList(numrl); - if (!*rl) return 1; - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + reptable[j].pattern = NULL; + reptable[j].pattern2 = NULL; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "REP", 3) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numrep = 0; + return 1; + } + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + case 1: { + if (*piece == '^') + reptable[j].start = true; + else + reptable[j].start = false; + reptable[j].pattern = + mystrrep(mystrdup(piece + int(reptable[j].start)), "_", " "); + int lr = strlen(reptable[j].pattern) - 1; + if (reptable[j].pattern[lr] == '$') { + reptable[j].end = true; + reptable[j].pattern[lr] = '\0'; + } else + reptable[j].end = false; + break; + } + case 2: { + reptable[j].pattern2 = mystrrep(mystrdup(piece), "_", " "); + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if ((!(reptable[j].pattern)) || (!(reptable[j].pattern2))) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numrep = 0; return 1; - } - - /* now parse the num lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numrl; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - char * pattern = NULL; - char * pattern2 = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece, keyword, strlen(keyword)) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - delete *rl; - *rl = NULL; - return 1; - } - break; - } - case 1: { pattern = mystrrep(mystrdup(piece),"_"," "); break; } - case 2: { - pattern2 = mystrrep(mystrdup(piece),"_"," "); - break; - } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); + } + } + return 0; +} + +/* parse in the typical fault correcting table */ +int AffixMgr::parse_convtable(char* line, + FileMgr* af, + RepList** rl, + const char* keyword) { + if (*rl) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + int numrl = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if (!pattern || !pattern2) { - if (pattern) - free(pattern); - if (pattern2) - free(pattern2); - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); + case 1: { + numrl = atoi(piece); + if (numrl < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", + af->getlinenum()); return 1; + } + *rl = new RepList(numrl); + if (!*rl) + return 1; + np++; + break; } - (*rl)->add(pattern, pattern2); - } - return 0; -} - + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the typical fault correcting table */ -int AffixMgr::parse_phonetable(char * line, FileMgr * af) -{ - if (phone) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the num lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numrl; j++) { + if (!(nl = af->getline())) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - phone = (phonetable *) malloc(sizeof(struct phonetable)); - if (!phone) return 1; - phone->num = atoi(piece); - phone->rules = NULL; - phone->utf8 = (char) utf8; - if (phone->num < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - phone->rules = (char * *) malloc(2 * (phone->num + 1) * sizeof(char *)); - if (!phone->rules) { - free(phone); - phone = NULL; - return 1; - } - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + char* pattern = NULL; + char* pattern2 = NULL; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, keyword, strlen(keyword)) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + delete *rl; + *rl = NULL; + return 1; + } + break; + } + case 1: { + pattern = mystrrep(mystrdup(piece), "_", " "); + break; + } + case 2: { + pattern2 = mystrrep(mystrdup(piece), "_", " "); + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (!pattern || !pattern2) { + if (pattern) + free(pattern); + if (pattern2) + free(pattern2); + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); return 1; - } - - /* now parse the phone->num lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < phone->num; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - phone->rules[j * 2] = NULL; - phone->rules[j * 2 + 1] = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"PHONE",5) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - phone->num = 0; - return 1; - } - break; - } - case 1: { phone->rules[j * 2] = mystrrep(mystrdup(piece),"_",""); break; } - case 2: { phone->rules[j * 2 + 1] = mystrrep(mystrdup(piece),"_",""); break; } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); + } + (*rl)->add(pattern, pattern2); + } + return 0; +} + +/* parse in the typical fault correcting table */ +int AffixMgr::parse_phonetable(char* line, FileMgr* af) { + if (phone) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if ((!(phone->rules[j * 2])) || (!(phone->rules[j * 2 + 1]))) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - phone->num = 0; - return 1; + case 1: { + phone = (phonetable*)malloc(sizeof(struct phonetable)); + if (!phone) + return 1; + phone->num = atoi(piece); + phone->rules = NULL; + phone->utf8 = (char)utf8; + if (phone->num < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + phone->rules = (char**)malloc(2 * (phone->num + 1) * sizeof(char*)); + if (!phone->rules) { + free(phone); + phone = NULL; + return 1; + } + np++; + break; } - } - phone->rules[phone->num * 2] = mystrdup(""); - phone->rules[phone->num * 2 + 1] = mystrdup(""); - init_phonet_hash(*phone); - return 0; -} + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the checkcompoundpattern table */ -int AffixMgr::parse_checkcpdtable(char * line, FileMgr * af) -{ - if (numcheckcpd != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the phone->num lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < phone->num; j++) { + if (!(nl = af->getline())) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numcheckcpd = atoi(piece); - if (numcheckcpd < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - checkcpdtable = (patentry *) malloc(numcheckcpd * sizeof(struct patentry)); - if (!checkcpdtable) return 1; - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + phone->rules[j * 2] = NULL; + phone->rules[j * 2 + 1] = NULL; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "PHONE", 5) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + phone->num = 0; + return 1; + } + break; + } + case 1: { + phone->rules[j * 2] = mystrrep(mystrdup(piece), "_", ""); + break; + } + case 2: { + phone->rules[j * 2 + 1] = mystrrep(mystrdup(piece), "_", ""); + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if ((!(phone->rules[j * 2])) || (!(phone->rules[j * 2 + 1]))) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + phone->num = 0; return 1; - } - - /* now parse the numcheckcpd lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numcheckcpd; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - checkcpdtable[j].pattern = NULL; - checkcpdtable[j].pattern2 = NULL; - checkcpdtable[j].pattern3 = NULL; - checkcpdtable[j].cond = FLAG_NULL; - checkcpdtable[j].cond2 = FLAG_NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"CHECKCOMPOUNDPATTERN",20) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numcheckcpd = 0; - return 1; - } - break; - } - case 1: { - checkcpdtable[j].pattern = mystrdup(piece); - char * p = strchr(checkcpdtable[j].pattern, '/'); - if (p) { - *p = '\0'; - checkcpdtable[j].cond = pHMgr->decode_flag(p + 1); - } - break; } - case 2: { - checkcpdtable[j].pattern2 = mystrdup(piece); - char * p = strchr(checkcpdtable[j].pattern2, '/'); - if (p) { - *p = '\0'; - checkcpdtable[j].cond2 = pHMgr->decode_flag(p + 1); - } - break; - } - case 3: { checkcpdtable[j].pattern3 = mystrdup(piece); simplifiedcpd = 1; break; } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); + } + } + phone->rules[phone->num * 2] = mystrdup(""); + phone->rules[phone->num * 2 + 1] = mystrdup(""); + init_phonet_hash(*phone); + return 0; +} + +/* parse in the checkcompoundpattern table */ +int AffixMgr::parse_checkcpdtable(char* line, FileMgr* af) { + if (numcheckcpd != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if ((!(checkcpdtable[j].pattern)) || (!(checkcpdtable[j].pattern2))) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numcheckcpd = 0; - return 1; + case 1: { + numcheckcpd = atoi(piece); + if (numcheckcpd < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + checkcpdtable = + (patentry*)malloc(numcheckcpd * sizeof(struct patentry)); + if (!checkcpdtable) + return 1; + np++; + break; } - } - return 0; -} + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the compound rule table */ -int AffixMgr::parse_defcpdtable(char * line, FileMgr * af) -{ - if (numdefcpd != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the numcheckcpd lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numcheckcpd; j++) { + if (!(nl = af->getline())) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numdefcpd = atoi(piece); - if (numdefcpd < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - defcpdtable = (flagentry *) malloc(numdefcpd * sizeof(flagentry)); - if (!defcpdtable) return 1; - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + checkcpdtable[j].pattern = NULL; + checkcpdtable[j].pattern2 = NULL; + checkcpdtable[j].pattern3 = NULL; + checkcpdtable[j].cond = FLAG_NULL; + checkcpdtable[j].cond2 = FLAG_NULL; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "CHECKCOMPOUNDPATTERN", 20) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numcheckcpd = 0; + return 1; + } + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; - } - - /* now parse the numdefcpd lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numdefcpd; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - defcpdtable[j].def = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece, "COMPOUNDRULE", 12) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numdefcpd = 0; - return 1; - } - break; - } - case 1: { // handle parenthesized flags - if (strchr(piece, '(')) { - defcpdtable[j].def = (FLAG *) malloc(strlen(piece) * sizeof(FLAG)); - defcpdtable[j].len = 0; - int end = 0; - FLAG * conv; - while (!end) { - char * par = piece + 1; - while (*par != '(' && *par != ')' && *par != '\0') par++; - if (*par == '\0') end = 1; else *par = '\0'; - if (*piece == '(') piece++; - if (*piece == '*' || *piece == '?') { - defcpdtable[j].def[defcpdtable[j].len++] = (FLAG) *piece; - } else if (*piece != '\0') { - int l = pHMgr->decode_flags(&conv, piece, af); - for (int k = 0; k < l; k++) defcpdtable[j].def[defcpdtable[j].len++] = conv[k]; - free(conv); - } - piece = par + 1; - } - } else { - defcpdtable[j].len = pHMgr->decode_flags(&(defcpdtable[j].def), piece, af); - } - break; - } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); - } - if (!defcpdtable[j].len) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numdefcpd = 0; - return 1; + case 1: { + checkcpdtable[j].pattern = mystrdup(piece); + char* p = strchr(checkcpdtable[j].pattern, '/'); + if (p) { + *p = '\0'; + checkcpdtable[j].cond = pHMgr->decode_flag(p + 1); + } + break; + } + case 2: { + checkcpdtable[j].pattern2 = mystrdup(piece); + char* p = strchr(checkcpdtable[j].pattern2, '/'); + if (p) { + *p = '\0'; + checkcpdtable[j].cond2 = pHMgr->decode_flag(p + 1); + } + break; + } + case 3: { + checkcpdtable[j].pattern3 = mystrdup(piece); + simplifiedcpd = 1; + break; + } + default: + break; } - } - return 0; + i++; + } + piece = mystrsep(&tp, 0); + } + if ((!(checkcpdtable[j].pattern)) || (!(checkcpdtable[j].pattern2))) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numcheckcpd = 0; + return 1; + } + } + return 0; } +/* parse in the compound rule table */ +int AffixMgr::parse_defcpdtable(char* line, FileMgr* af) { + if (numdefcpd != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numdefcpd = atoi(piece); + if (numdefcpd < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + defcpdtable = (flagentry*)malloc(numdefcpd * sizeof(flagentry)); + if (!defcpdtable) + return 1; + np++; + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the character map table */ -int AffixMgr::parse_maptable(char * line, FileMgr * af) -{ - if (nummap != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the numdefcpd lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numdefcpd; j++) { + if (!(nl = af->getline())) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - nummap = atoi(piece); - if (nummap < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - maptable = (mapentry *) malloc(nummap * sizeof(struct mapentry)); - if (!maptable) return 1; - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + defcpdtable[j].def = NULL; + defcpdtable[j].len = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "COMPOUNDRULE", 12) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numdefcpd = 0; + return 1; + } + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + case 1: { // handle parenthesized flags + if (strchr(piece, '(')) { + defcpdtable[j].def = (FLAG*)malloc(strlen(piece) * sizeof(FLAG)); + defcpdtable[j].len = 0; + int end = 0; + FLAG* conv; + while (!end) { + char* par = piece + 1; + while (*par != '(' && *par != ')' && *par != '\0') + par++; + if (*par == '\0') + end = 1; + else + *par = '\0'; + if (*piece == '(') + piece++; + if (*piece == '*' || *piece == '?') { + defcpdtable[j].def[defcpdtable[j].len++] = (FLAG)*piece; + } else if (*piece != '\0') { + int l = pHMgr->decode_flags(&conv, piece, af); + for (int k = 0; k < l; k++) + defcpdtable[j].def[defcpdtable[j].len++] = conv[k]; + free(conv); + } + piece = par + 1; + } + } else { + defcpdtable[j].len = + pHMgr->decode_flags(&(defcpdtable[j].def), piece, af); + } + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (!defcpdtable[j].len) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numdefcpd = 0; return 1; - } - - /* now parse the nummap lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < nummap; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - maptable[j].set = NULL; - maptable[j].len = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"MAP",3) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - nummap = 0; - return 1; - } - break; - } - case 1: { - int setn = 0; - maptable[j].len = strlen(piece); - maptable[j].set = (char **) malloc(maptable[j].len * sizeof(char*)); - if (!maptable[j].set) return 1; - for (int k = 0; k < maptable[j].len; k++) { - int chl = 1; - int chb = k; - if (piece[k] == '(') { - char * parpos = strchr(piece + k, ')'); - if (parpos != NULL) { - chb = k + 1; - chl = (int)(parpos - piece) - k - 1; - k = k + chl + 1; - } - } else { - if (utf8 && (piece[k] & 0xc0) == 0xc0) { - for (k++; utf8 && (piece[k] & 0xc0) == 0x80; k++); - chl = k - chb; - k--; - } - } - maptable[j].set[setn] = (char *) malloc(chl + 1); - if (!maptable[j].set[setn]) return 1; - strncpy(maptable[j].set[setn], piece + chb, chl); - maptable[j].set[setn][chl] = '\0'; - setn++; - } - maptable[j].len = setn; - break; } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); + } + } + return 0; +} + +/* parse in the character map table */ +int AffixMgr::parse_maptable(char* line, FileMgr* af) { + if (nummap != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if (!maptable[j].set || !maptable[j].len) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - nummap = 0; - return 1; + case 1: { + nummap = atoi(piece); + if (nummap < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + maptable = (mapentry*)malloc(nummap * sizeof(struct mapentry)); + if (!maptable) + return 1; + np++; + break; } - } - return 0; -} + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -/* parse in the word breakpoint table */ -int AffixMgr::parse_breaktable(char * line, FileMgr * af) -{ - if (numbreak > -1) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); + /* now parse the nummap lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < nummap; j++) { + if (!(nl = af->getline())) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numbreak = atoi(piece); - if (numbreak < 0) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - if (numbreak == 0) return 0; - breaktable = (char **) malloc(numbreak * sizeof(char *)); - if (!breaktable) return 1; - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + maptable[j].set = NULL; + maptable[j].len = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "MAP", 3) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + nummap = 0; + return 1; + } + break; + } + case 1: { + int setn = 0; + maptable[j].len = strlen(piece); + maptable[j].set = (char**)malloc(maptable[j].len * sizeof(char*)); + if (!maptable[j].set) + return 1; + for (int k = 0; k < maptable[j].len; k++) { + int chl = 1; + int chb = k; + if (piece[k] == '(') { + char* parpos = strchr(piece + k, ')'); + if (parpos != NULL) { + chb = k + 1; + chl = (int)(parpos - piece) - k - 1; + k = k + chl + 1; + } + } else { + if (utf8 && (piece[k] & 0xc0) == 0xc0) { + for (k++; utf8 && (piece[k] & 0xc0) == 0x80; k++) + ; + chl = k - chb; + k--; + } + } + maptable[j].set[setn] = (char*)malloc(chl + 1); + if (!maptable[j].set[setn]) + return 1; + strncpy(maptable[j].set[setn], piece + chb, chl); + maptable[j].set[setn][chl] = '\0'; + setn++; + } + maptable[j].len = setn; + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (!maptable[j].set || !maptable[j].len) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + nummap = 0; return 1; - } - - /* now parse the numbreak lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numbreak; j++) { - if (!(nl = af->getline())) return 1; - mychomp(nl); - tp = nl; - i = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"BREAK",5) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numbreak = 0; - return 1; - } - break; - } - case 1: { - breaktable[j] = mystrdup(piece); - break; - } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); + } + } + return 0; +} + +/* parse in the word breakpoint table */ +int AffixMgr::parse_breaktable(char* line, FileMgr* af) { + if (numbreak > -1) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; } - if (!breaktable) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numbreak = 0; - return 1; + case 1: { + numbreak = atoi(piece); + if (numbreak < 0) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + if (numbreak == 0) + return 0; + breaktable = (char**)malloc(numbreak * sizeof(char*)); + if (!breaktable) + return 1; + np++; + break; } - } - return 0; -} + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } -void AffixMgr::reverse_condition(char * piece) { - int neg = 0; - for (char * k = piece + strlen(piece) - 1; k >= piece; k--) { - switch(*k) { - case '[': { - if (neg) *(k+1) = '['; else *k = ']'; - break; - } - case ']': { - *k = '['; - if (neg) *(k+1) = '^'; - neg = 0; - break; + /* now parse the numbreak lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numbreak; j++) { + if (!(nl = af->getline())) + return 1; + mychomp(nl); + tp = nl; + i = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "BREAK", 5) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numbreak = 0; + return 1; } - case '^': { - if (*(k+1) == ']') neg = 1; else *(k+1) = *k; - break; - } - default: { - if (neg) *(k+1) = *k; + break; } - } + case 1: { + breaktable[j] = mystrdup(piece); + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (!breaktable) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numbreak = 0; + return 1; + } + } + return 0; +} + +void AffixMgr::reverse_condition(std::string& piece) { + if (piece.empty()) + return; + + int neg = 0; + for (std::string::reverse_iterator k = piece.rbegin(); k != piece.rend(); ++k) { + switch (*k) { + case '[': { + if (neg) + *(k - 1) = '['; + else + *k = ']'; + break; + } + case ']': { + *k = '['; + if (neg) + *(k - 1) = '^'; + neg = 0; + break; + } + case '^': { + if (*(k - 1) == ']') + neg = 1; + else + *(k - 1) = *k; + break; + } + default: { + if (neg) + *(k - 1) = *k; + } } + } } -int AffixMgr::parse_affix(char * line, const char at, FileMgr * af, char * dupflags) -{ - int numents = 0; // number of affentry structures to parse +int AffixMgr::parse_affix(char* line, + const char at, + FileMgr* af, + char* dupflags) { + int numents = 0; // number of affentry structures to parse - unsigned short aflag = 0; // affix char identifier + unsigned short aflag = 0; // affix char identifier - char ff=0; - std::vector affentries; + char ff = 0; + std::vector affentries; - char * tp = line; - char * nl = line; - char * piece; - int i = 0; + char* tp = line; + char* nl = line; + char* piece; + int i = 0; - // checking lines with bad syntax +// checking lines with bad syntax #ifdef DEBUG - int basefieldnum = 0; + int basefieldnum = 0; #endif - // split affix header line into pieces + // split affix header line into pieces - int np = 0; + int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - // piece 1 - is type of affix - case 0: { np++; break; } - - // piece 2 - is affix char - case 1: { - np++; - aflag = pHMgr->decode_flag(piece); - if (((at == 'S') && (dupflags[aflag] & dupSFX)) || - ((at == 'P') && (dupflags[aflag] & dupPFX))) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of an affix flag\n", - af->getlinenum()); - // return 1; XXX permissive mode for bad dictionaries - } - dupflags[aflag] += (char) ((at == 'S') ? dupSFX : dupPFX); - break; - } - // piece 3 - is cross product indicator - case 2: { np++; if (*piece == 'Y') ff = aeXPRODUCT; break; } - - // piece 4 - is number of affentries - case 3: { - np++; - numents = atoi(piece); - if (numents == 0) { - char * err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - free(err); - } - return 1; - } - affentries.resize(numents); - affentries[0].opts = ff; - if (utf8) affentries[0].opts += aeUTF8; - if (pHMgr->is_aliasf()) affentries[0].opts += aeALIASF; - if (pHMgr->is_aliasm()) affentries[0].opts += aeALIASM; - affentries[0].aflag = aflag; - } - - default: break; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + // piece 1 - is type of affix + case 0: { + np++; + break; + } + + // piece 2 - is affix char + case 1: { + np++; + aflag = pHMgr->decode_flag(piece); + if (((at == 'S') && (dupflags[aflag] & dupSFX)) || + ((at == 'P') && (dupflags[aflag] & dupPFX))) { + HUNSPELL_WARNING( + stderr, + "error: line %d: multiple definitions of an affix flag\n", + af->getlinenum()); + // return 1; XXX permissive mode for bad dictionaries + } + dupflags[aflag] += (char)((at == 'S') ? dupSFX : dupPFX); + break; + } + // piece 3 - is cross product indicator + case 2: { + np++; + if (*piece == 'Y') + ff = aeXPRODUCT; + break; + } + + // piece 4 - is number of affentries + case 3: { + np++; + numents = atoi(piece); + if ((numents <= 0) || ((std::numeric_limits::max() / + sizeof(struct affentry)) < static_cast(numents))) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + free(err); + } + return 1; } - i++; + affentries.resize(numents); + affentries[0].opts = ff; + if (utf8) + affentries[0].opts += aeUTF8; + if (pHMgr->is_aliasf()) + affentries[0].opts += aeALIASF; + if (pHMgr->is_aliasm()) + affentries[0].opts += aeALIASM; + affentries[0].aflag = aflag; + } + + default: + break; } - piece = mystrsep(&tp, 0); - } - // check to make sure we parsed enough pieces - if (np != 4) { - char * err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - free(err); - } - return 1; - } - - // now parse numents affentries for this affix - std::vector::iterator start = affentries.begin(); - std::vector::iterator end = affentries.end(); - for (std::vector::iterator entry = start; entry != end; ++entry) { - if ((nl = af->getline()) == NULL) return 1; - mychomp(nl); - tp = nl; - i = 0; - np = 0; - - // split line into pieces - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - // piece 1 - is type - case 0: { - np++; - if (entry != start) entry->opts = start->opts & - (char) (aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM); - break; - } - - // piece 2 - is affix char - case 1: { - np++; - if (pHMgr->decode_flag(piece) != aflag) { - char * err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, "error: line %d: affix %s is corrupt\n", - af->getlinenum(), err); - free(err); - } - return 1; - } - - if (entry != start) entry->aflag = start->aflag; - break; - } - - // piece 3 - is string to strip or 0 for null - case 2: { - np++; - if (complexprefixes) { - if (utf8) reverseword_utf(piece); else reverseword(piece); - } - entry->strip = mystrdup(piece); - entry->stripl = (unsigned char) strlen(entry->strip); - if (strcmp(entry->strip,"0") == 0) { - free(entry->strip); - entry->strip=mystrdup(""); - entry->stripl = 0; - } - break; - } - - // piece 4 - is affix string or 0 for null - case 3: { - char * dash; - entry->morphcode = NULL; - entry->contclass = NULL; - entry->contclasslen = 0; - np++; - dash = strchr(piece, '/'); - if (dash) { - *dash = '\0'; - - if (ignorechars) { - if (utf8) { - remove_ignored_chars_utf(piece, ignorechars_utf16, ignorechars_utf16_len); - } else { - remove_ignored_chars(piece,ignorechars); - } - } - - if (complexprefixes) { - if (utf8) reverseword_utf(piece); else reverseword(piece); - } - entry->appnd = mystrdup(piece); - - if (pHMgr->is_aliasf()) { - int index = atoi(dash + 1); - entry->contclasslen = (unsigned short) pHMgr->get_aliasf(index, &(entry->contclass), af); - if (!entry->contclasslen) HUNSPELL_WARNING(stderr, "error: bad affix flag alias: \"%s\"\n", dash+1); - } else { - entry->contclasslen = (unsigned short) pHMgr->decode_flags(&(entry->contclass), dash + 1, af); - flag_qsort(entry->contclass, 0, entry->contclasslen); - } - *dash = '/'; - - havecontclass = 1; - for (unsigned short _i = 0; _i < entry->contclasslen; _i++) { - contclasses[(entry->contclass)[_i]] = 1; - } - } else { - if (ignorechars) { - if (utf8) { - remove_ignored_chars_utf(piece, ignorechars_utf16, ignorechars_utf16_len); - } else { - remove_ignored_chars(piece,ignorechars); - } - } - - if (complexprefixes) { - if (utf8) reverseword_utf(piece); else reverseword(piece); - } - entry->appnd = mystrdup(piece); - } - - entry->appndl = (unsigned char) strlen(entry->appnd); - if (strcmp(entry->appnd,"0") == 0) { - free(entry->appnd); - entry->appnd=mystrdup(""); - entry->appndl = 0; - } - break; - } - - // piece 5 - is the conditions descriptions - case 4: { - np++; - if (complexprefixes) { - if (utf8) reverseword_utf(piece); else reverseword(piece); - reverse_condition(piece); - } - if (entry->stripl && (strcmp(piece, ".") != 0) && - redundant_condition(at, entry->strip, entry->stripl, piece, af->getlinenum())) - strcpy(piece, "."); - if (at == 'S') { - reverseword(piece); - reverse_condition(piece); - } - if (encodeit(*entry, piece)) return 1; - break; + i++; + } + piece = mystrsep(&tp, 0); + } + // check to make sure we parsed enough pieces + if (np != 4) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + free(err); + } + return 1; + } + + // now parse numents affentries for this affix + std::vector::iterator start = affentries.begin(); + std::vector::iterator end = affentries.end(); + for (std::vector::iterator entry = start; entry != end; ++entry) { + if ((nl = af->getline()) == NULL) + return 1; + mychomp(nl); + tp = nl; + i = 0; + np = 0; + + // split line into pieces + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + // piece 1 - is type + case 0: { + np++; + if (entry != start) + entry->opts = start->opts & + (char)(aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM); + break; + } + + // piece 2 - is affix char + case 1: { + np++; + if (pHMgr->decode_flag(piece) != aflag) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, + "error: line %d: affix %s is corrupt\n", + af->getlinenum(), err); + free(err); + } + return 1; + } + + if (entry != start) + entry->aflag = start->aflag; + break; + } + + // piece 3 - is string to strip or 0 for null + case 2: { + np++; + entry->strip = piece; + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->strip); + else + reverseword(entry->strip); + } + if (entry->strip.compare("0") == 0) { + entry->strip.clear(); + } + break; + } + + // piece 4 - is affix string or 0 for null + case 3: { + char* dash; + entry->morphcode = NULL; + entry->contclass = NULL; + entry->contclasslen = 0; + np++; + dash = strchr(piece, '/'); + if (dash) { + *dash = '\0'; + + entry->appnd = piece; + + if (ignorechars) { + if (utf8) { + remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); + } else { + remove_ignored_chars(entry->appnd, ignorechars); } + } + + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->appnd); + else + reverseword(entry->appnd); + } + + if (pHMgr->is_aliasf()) { + int index = atoi(dash + 1); + entry->contclasslen = (unsigned short)pHMgr->get_aliasf( + index, &(entry->contclass), af); + if (!entry->contclasslen) + HUNSPELL_WARNING(stderr, + "error: bad affix flag alias: \"%s\"\n", + dash + 1); + } else { + entry->contclasslen = (unsigned short)pHMgr->decode_flags( + &(entry->contclass), dash + 1, af); + std::sort(entry->contclass, entry->contclass + entry->contclasslen); + } + *dash = '/'; + + havecontclass = 1; + for (unsigned short _i = 0; _i < entry->contclasslen; _i++) { + contclasses[(entry->contclass)[_i]] = 1; + } + } else { + entry->appnd = piece; - case 5: { - np++; - if (pHMgr->is_aliasm()) { - int index = atoi(piece); - entry->morphcode = pHMgr->get_aliasm(index); - } else { - if (complexprefixes) { // XXX - fix me for morph. gen. - if (utf8) reverseword_utf(piece); else reverseword(piece); - } - // add the remaining of the line - if (*tp) { - *(tp - 1) = ' '; - tp = tp + strlen(tp); - } - entry->morphcode = mystrdup(piece); - if (!entry->morphcode) return 1; - } - break; + if (ignorechars) { + if (utf8) { + remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); + } else { + remove_ignored_chars(entry->appnd, ignorechars); } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); - } - // check to make sure we parsed enough pieces - if (np < 4) { - char * err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, "error: line %d: affix %s is corrupt\n", - af->getlinenum(), err); - free(err); + } + + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->appnd); + else + reverseword(entry->appnd); + } + } + + if (entry->appnd.compare("0") == 0) { + entry->appnd.clear(); + } + break; } - return 1; + + // piece 5 - is the conditions descriptions + case 4: { + std::string chunk(piece); + np++; + if (complexprefixes) { + if (utf8) + reverseword_utf(chunk); + else + reverseword(chunk); + reverse_condition(chunk); + } + if (!entry->strip.empty() && chunk != "." && + redundant_condition(at, entry->strip.c_str(), entry->strip.size(), chunk.c_str(), + af->getlinenum())) + chunk = "."; + if (at == 'S') { + reverseword(chunk); + reverse_condition(chunk); + } + if (encodeit(*entry, chunk.c_str())) + return 1; + break; + } + + case 5: { + std::string chunk(piece); + np++; + if (pHMgr->is_aliasm()) { + int index = atoi(chunk.c_str()); + entry->morphcode = pHMgr->get_aliasm(index); + } else { + if (complexprefixes) { // XXX - fix me for morph. gen. + if (utf8) + reverseword_utf(chunk); + else + reverseword(chunk); + } + // add the remaining of the line + if (*tp) { + *(tp - 1) = ' '; + chunk.push_back(' '); + chunk.append(tp); + } + entry->morphcode = mystrdup(chunk.c_str()); + if (!entry->morphcode) + return 1; + } + break; + } + default: + break; + } + i++; } + piece = mystrsep(&tp, 0); + } + // check to make sure we parsed enough pieces + if (np < 4) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, "error: line %d: affix %s is corrupt\n", + af->getlinenum(), err); + free(err); + } + return 1; + } #ifdef DEBUG - // detect unnecessary fields, excepting comments - if (basefieldnum) { - int fieldnum = !(entry->morphcode) ? 5 : ((*(entry->morphcode)=='#') ? 5 : 6); - if (fieldnum != basefieldnum) - HUNSPELL_WARNING(stderr, "warning: line %d: bad field number\n", af->getlinenum()); - } else { - basefieldnum = !(entry->morphcode) ? 5 : ((*(entry->morphcode)=='#') ? 5 : 6); - } + // detect unnecessary fields, excepting comments + if (basefieldnum) { + int fieldnum = + !(entry->morphcode) ? 5 : ((*(entry->morphcode) == '#') ? 5 : 6); + if (fieldnum != basefieldnum) + HUNSPELL_WARNING(stderr, "warning: line %d: bad field number\n", + af->getlinenum()); + } else { + basefieldnum = + !(entry->morphcode) ? 5 : ((*(entry->morphcode) == '#') ? 5 : 6); + } #endif - } - - // now create SfxEntry or PfxEntry objects and use links to - // build an ordered (sorted by affix string) list - for (std::vector::iterator entry = start; entry != end; ++entry) { - if (at == 'P') { - PfxEntry * pfxptr = new PfxEntry(this,&(*entry)); - build_pfxtree(pfxptr); - } else { - SfxEntry * sfxptr = new SfxEntry(this,&(*entry)); - build_sfxtree(sfxptr); - } - } - return 0; + } + + // now create SfxEntry or PfxEntry objects and use links to + // build an ordered (sorted by affix string) list + for (std::vector::iterator entry = start; entry != end; ++entry) { + if (at == 'P') { + PfxEntry* pfxptr = new PfxEntry(this, &(*entry)); + build_pfxtree(pfxptr); + } else { + SfxEntry* sfxptr = new SfxEntry(this, &(*entry)); + build_sfxtree(sfxptr); + } + } + return 0; } -int AffixMgr::redundant_condition(char ft, char * strip, int stripl, const char * cond, int linenum) { +int AffixMgr::redundant_condition(char ft, + const char* strip, + int stripl, + const char* cond, + int linenum) { int condl = strlen(cond); int i; int j; int neg; int in; - if (ft == 'P') { // prefix - if (strncmp(strip, cond, condl) == 0) return 1; + if (ft == 'P') { // prefix + if (strncmp(strip, cond, condl) == 0) + return 1; if (utf8) { } else { for (i = 0, j = 0; (i < stripl) && (j < condl); i++, j++) { if (cond[j] != '[') { if (cond[j] != strip[i]) { - HUNSPELL_WARNING(stderr, "warning: line %d: incompatible stripping characters and condition\n", linenum); + HUNSPELL_WARNING(stderr, + "warning: line %d: incompatible stripping " + "characters and condition\n", + linenum); return 0; } } else { - neg = (cond[j+1] == '^') ? 1 : 0; + neg = (cond[j + 1] == '^') ? 1 : 0; in = 0; do { j++; - if (strip[i] == cond[j]) in = 1; + if (strip[i] == cond[j]) + in = 1; } while ((j < (condl - 1)) && (cond[j] != ']')); if (j == (condl - 1) && (cond[j] != ']')) { - HUNSPELL_WARNING(stderr, "error: line %d: missing ] in condition:\n%s\n", linenum, cond); + HUNSPELL_WARNING(stderr, + "error: line %d: missing ] in condition:\n%s\n", + linenum, cond); return 0; } if ((!neg && !in) || (neg && in)) { - HUNSPELL_WARNING(stderr, "warning: line %d: incompatible stripping characters and condition\n", linenum); + HUNSPELL_WARNING(stderr, + "warning: line %d: incompatible stripping " + "characters and condition\n", + linenum); return 0; } } } - if (j >= condl) return 1; + if (j >= condl) + return 1; } - } else { // suffix - if ((stripl >= condl) && strcmp(strip + stripl - condl, cond) == 0) return 1; + } else { // suffix + if ((stripl >= condl) && strcmp(strip + stripl - condl, cond) == 0) + return 1; if (utf8) { } else { for (i = stripl - 1, j = condl - 1; (i >= 0) && (j >= 0); i--, j--) { if (cond[j] != ']') { if (cond[j] != strip[i]) { - HUNSPELL_WARNING(stderr, "warning: line %d: incompatible stripping characters and condition\n", linenum); + HUNSPELL_WARNING(stderr, + "warning: line %d: incompatible stripping " + "characters and condition\n", + linenum); return 0; } } else { in = 0; do { j--; - if (strip[i] == cond[j]) in = 1; + if (strip[i] == cond[j]) + in = 1; } while ((j > 0) && (cond[j] != '[')); if ((j == 0) && (cond[j] != '[')) { - HUNSPELL_WARNING(stderr, "error: line: %d: missing ] in condition:\n%s\n", linenum, cond); + HUNSPELL_WARNING(stderr, + "error: line: %d: missing ] in condition:\n%s\n", + linenum, cond); return 0; } - neg = (cond[j+1] == '^') ? 1 : 0; + neg = (cond[j + 1] == '^') ? 1 : 0; if ((!neg && !in) || (neg && in)) { - HUNSPELL_WARNING(stderr, "warning: line %d: incompatible stripping characters and condition\n", linenum); + HUNSPELL_WARNING(stderr, + "warning: line %d: incompatible stripping " + "characters and condition\n", + linenum); return 0; } } } - if (j < 0) return 1; + if (j < 0) + return 1; } } return 0; } + +int AffixMgr::get_suffix_words(short unsigned* suff, + int len, + const char* root_word, + char** slst) { + int suff_words_cnt = 0; + short unsigned* start_ptr = suff; + for (int j = 0; j < SETSIZE; j++) { + SfxEntry* ptr = sStart[j]; + while (ptr) { + suff = start_ptr; + for (int i = 0; i < len; i++) { + if ((*suff) == ptr->getFlag()) { + std::string nw(root_word); + nw.append(ptr->getAffix()); + hentry* ht = ptr->checkword(nw.c_str(), nw.size(), 0, NULL, NULL, 0, + NULL, 0, 0, 0); + if (ht) { + slst[suff_words_cnt++] = mystrdup(nw.c_str()); + } + } + suff++; + } + ptr = ptr->getNext(); + } + } + return suff_words_cnt; +} diff --git a/src/spelling/hunspell/affixmgr.hxx b/src/spelling/hunspell/affixmgr.hxx index 736816f0..d70e8533 100644 --- a/src/spelling/hunspell/affixmgr.hxx +++ b/src/spelling/hunspell/affixmgr.hxx @@ -1,3 +1,76 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #ifndef _AFFIXMGR_HXX_ #define _AFFIXMGR_HXX_ @@ -5,6 +78,8 @@ #include +#include + #include "atypes.hxx" #include "baseaffix.hxx" #include "hashmgr.hxx" @@ -12,241 +87,304 @@ #include "replist.hxx" // check flag duplication -#define dupSFX (1 << 0) -#define dupPFX (1 << 1) +#define dupSFX (1 << 0) +#define dupPFX (1 << 1) class PfxEntry; class SfxEntry; -class LIBHUNSPELL_DLL_EXPORTED AffixMgr -{ - - PfxEntry * pStart[SETSIZE]; - SfxEntry * sStart[SETSIZE]; - PfxEntry * pFlag[SETSIZE]; - SfxEntry * sFlag[SETSIZE]; - HashMgr * pHMgr; - HashMgr ** alldic; - int * maxdic; - char * keystring; - char * trystring; - char * encoding; - struct cs_info * csconv; - int utf8; - int complexprefixes; - FLAG compoundflag; - FLAG compoundbegin; - FLAG compoundmiddle; - FLAG compoundend; - FLAG compoundroot; - FLAG compoundforbidflag; - FLAG compoundpermitflag; - int compoundmoresuffixes; - int checkcompounddup; - int checkcompoundrep; - int checkcompoundcase; - int checkcompoundtriple; - int simplifiedtriple; - FLAG forbiddenword; - FLAG nosuggest; - FLAG nongramsuggest; - FLAG needaffix; - int cpdmin; - int numrep; - replentry * reptable; - RepList * iconvtable; - RepList * oconvtable; - int nummap; - mapentry * maptable; - int numbreak; - char ** breaktable; - int numcheckcpd; - patentry * checkcpdtable; - int simplifiedcpd; - int numdefcpd; - flagentry * defcpdtable; - phonetable * phone; - int maxngramsugs; - int maxcpdsugs; - int maxdiff; - int onlymaxdiff; - int nosplitsugs; - int sugswithdots; - int cpdwordmax; - int cpdmaxsyllable; - char * cpdvowels; - w_char * cpdvowels_utf16; - int cpdvowels_utf16_len; - char * cpdsyllablenum; - const char * pfxappnd; // BUG: not stateless - const char * sfxappnd; // BUG: not stateless - FLAG sfxflag; // BUG: not stateless - char * derived; // BUG: not stateless - SfxEntry * sfx; // BUG: not stateless - PfxEntry * pfx; // BUG: not stateless - int checknum; - char * wordchars; - unsigned short * wordchars_utf16; - int wordchars_utf16_len; - char * ignorechars; - unsigned short * ignorechars_utf16; - int ignorechars_utf16_len; - char * version; - char * lang; - int langnum; - FLAG lemma_present; - FLAG circumfix; - FLAG onlyincompound; - FLAG keepcase; - FLAG forceucase; - FLAG warn; - int forbidwarn; - FLAG substandard; - int checksharps; - int fullstrip; - - int havecontclass; // boolean variable - char contclasses[CONTSIZE]; // flags of possible continuing classes (twofold affix) - -public: - - AffixMgr(const char * affpath, HashMgr** ptr, int * md, - const char * key = NULL); +class LIBHUNSPELL_DLL_EXPORTED AffixMgr { + PfxEntry* pStart[SETSIZE]; + SfxEntry* sStart[SETSIZE]; + PfxEntry* pFlag[SETSIZE]; + SfxEntry* sFlag[SETSIZE]; + HashMgr* pHMgr; + HashMgr** alldic; + int* maxdic; + char* keystring; + char* trystring; + char* encoding; + struct cs_info* csconv; + int utf8; + int complexprefixes; + FLAG compoundflag; + FLAG compoundbegin; + FLAG compoundmiddle; + FLAG compoundend; + FLAG compoundroot; + FLAG compoundforbidflag; + FLAG compoundpermitflag; + int compoundmoresuffixes; + int checkcompounddup; + int checkcompoundrep; + int checkcompoundcase; + int checkcompoundtriple; + int simplifiedtriple; + FLAG forbiddenword; + FLAG nosuggest; + FLAG nongramsuggest; + FLAG needaffix; + int cpdmin; + int numrep; + replentry* reptable; + RepList* iconvtable; + RepList* oconvtable; + int nummap; + mapentry* maptable; + int numbreak; + char** breaktable; + int numcheckcpd; + patentry* checkcpdtable; + int simplifiedcpd; + int numdefcpd; + flagentry* defcpdtable; + phonetable* phone; + int maxngramsugs; + int maxcpdsugs; + int maxdiff; + int onlymaxdiff; + int nosplitsugs; + int sugswithdots; + int cpdwordmax; + int cpdmaxsyllable; + char* cpdvowels; + w_char* cpdvowels_utf16; + int cpdvowels_utf16_len; + char* cpdsyllablenum; + const char* pfxappnd; // BUG: not stateless + const char* sfxappnd; // BUG: not stateless + int sfxextra; // BUG: not stateless + FLAG sfxflag; // BUG: not stateless + char* derived; // BUG: not stateless + SfxEntry* sfx; // BUG: not stateless + PfxEntry* pfx; // BUG: not stateless + int checknum; + char* wordchars; + std::vector wordchars_utf16; + char* ignorechars; + std::vector ignorechars_utf16; + char* version; + char* lang; + int langnum; + FLAG lemma_present; + FLAG circumfix; + FLAG onlyincompound; + FLAG keepcase; + FLAG forceucase; + FLAG warn; + int forbidwarn; + FLAG substandard; + int checksharps; + int fullstrip; + + int havecontclass; // boolean variable + char contclasses[CONTSIZE]; // flags of possible continuing classes (twofold + // affix) + + public: + AffixMgr(const char* affpath, HashMgr** ptr, int* md, const char* key = NULL); ~AffixMgr(); - struct hentry * affix_check(const char * word, int len, - const unsigned short needflag = (unsigned short) 0, - char in_compound = IN_CPD_NOT); - struct hentry * prefix_check(const char * word, int len, - char in_compound, const FLAG needflag = FLAG_NULL); - inline int isSubset(const char * s1, const char * s2); - struct hentry * prefix_check_twosfx(const char * word, int len, - char in_compound, const FLAG needflag = FLAG_NULL); - inline int isRevSubset(const char * s1, const char * end_of_s2, int len); - struct hentry * suffix_check(const char * word, int len, int sfxopts, - PfxEntry* ppfx, char ** wlst, int maxSug, int * ns, - const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, - char in_compound = IN_CPD_NOT); - struct hentry * suffix_check_twosfx(const char * word, int len, - int sfxopts, PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); - - char * affix_check_morph(const char * word, int len, - const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT); - char * prefix_check_morph(const char * word, int len, - char in_compound, const FLAG needflag = FLAG_NULL); - char * suffix_check_morph (const char * word, int len, int sfxopts, - PfxEntry * ppfx, const FLAG cclass = FLAG_NULL, - const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT); - - char * prefix_check_twosfx_morph(const char * word, int len, - char in_compound, const FLAG needflag = FLAG_NULL); - char * suffix_check_twosfx_morph(const char * word, int len, - int sfxopts, PfxEntry * ppfx, const FLAG needflag = FLAG_NULL); - - char * morphgen(char * ts, int wl, const unsigned short * ap, - unsigned short al, char * morph, char * targetmorph, int level); - - int expand_rootword(struct guessword * wlst, int maxn, const char * ts, - int wl, const unsigned short * ap, unsigned short al, char * bad, - int, char *); - - short get_syllable (const char * word, int wlen); - int cpdrep_check(const char * word, int len); - int cpdpat_check(const char * word, int len, hentry * r1, hentry * r2, - const char affixed); - int defcpd_check(hentry *** words, short wnum, hentry * rv, - hentry ** rwords, char all); - int cpdcase_check(const char * word, int len); - inline int candidate_check(const char * word, int len); - void setcminmax(int * cmin, int * cmax, const char * word, int len); - struct hentry * compound_check(const char * word, int len, short wordnum, - short numsyllable, short maxwordnum, short wnum, hentry ** words, - char hu_mov_rule, char is_sug, int * info); - - int compound_check_morph(const char * word, int len, short wordnum, - short numsyllable, short maxwordnum, short wnum, hentry ** words, - char hu_mov_rule, char ** result, char * partresult); - - struct hentry * lookup(const char * word); - int get_numrep() const; - struct replentry * get_reptable() const; - RepList * get_iconvtable() const; - RepList * get_oconvtable() const; - struct phonetable * get_phonetable() const; - int get_nummap() const; - struct mapentry * get_maptable() const; - int get_numbreak() const; - char ** get_breaktable() const; - char * get_encoding(); - int get_langnum() const; - char * get_key_string(); - char * get_try_string() const; - const char * get_wordchars() const; - unsigned short * get_wordchars_utf16(int * len) const; - char * get_ignore() const; - unsigned short * get_ignore_utf16(int * len) const; - int get_compound() const; - FLAG get_compoundflag() const; - FLAG get_compoundbegin() const; - FLAG get_forbiddenword() const; - FLAG get_nosuggest() const; - FLAG get_nongramsuggest() const; - FLAG get_needaffix() const; - FLAG get_onlyincompound() const; - FLAG get_compoundroot() const; - FLAG get_lemma_present() const; - int get_checknum() const; - const char * get_prefix() const; - const char * get_suffix() const; - const char * get_derived() const; - const char * get_version() const; - int have_contclass() const; - int get_utf8() const; - int get_complexprefixes() const; - char * get_suffixed(char ) const; - int get_maxngramsugs() const; - int get_maxcpdsugs() const; - int get_maxdiff() const; - int get_onlymaxdiff() const; - int get_nosplitsugs() const; - int get_sugswithdots(void) const; - FLAG get_keepcase(void) const; - FLAG get_forceucase(void) const; - FLAG get_warn(void) const; - int get_forbidwarn(void) const; - int get_checksharps(void) const; - char * encode_flag(unsigned short aflag) const; - int get_fullstrip() const; - -private: - int parse_file(const char * affpath, const char * key); - int parse_flag(char * line, unsigned short * out, FileMgr * af); - int parse_num(char * line, int * out, FileMgr * af); - int parse_cpdsyllable(char * line, FileMgr * af); - int parse_reptable(char * line, FileMgr * af); - int parse_convtable(char * line, FileMgr * af, RepList ** rl, const char * keyword); - int parse_phonetable(char * line, FileMgr * af); - int parse_maptable(char * line, FileMgr * af); - int parse_breaktable(char * line, FileMgr * af); - int parse_checkcpdtable(char * line, FileMgr * af); - int parse_defcpdtable(char * line, FileMgr * af); - int parse_affix(char * line, const char at, FileMgr * af, char * dupflags); - - void reverse_condition(char *); - void debugflag(char * result, unsigned short flag); - int condlen(char *); - int encodeit(affentry &entry, char * cs); + struct hentry* affix_check(const char* word, + int len, + const unsigned short needflag = (unsigned short)0, + char in_compound = IN_CPD_NOT); + struct hentry* prefix_check(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + inline int isSubset(const char* s1, const char* s2); + struct hentry* prefix_check_twosfx(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + inline int isRevSubset(const char* s1, const char* end_of_s2, int len); + struct hentry* suffix_check(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + char** wlst, + int maxSug, + int* ns, + const FLAG cclass = FLAG_NULL, + const FLAG needflag = FLAG_NULL, + char in_compound = IN_CPD_NOT); + struct hentry* suffix_check_twosfx(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); + + char* affix_check_morph(const char* word, + int len, + const FLAG needflag = FLAG_NULL, + char in_compound = IN_CPD_NOT); + char* prefix_check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + char* suffix_check_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG cclass = FLAG_NULL, + const FLAG needflag = FLAG_NULL, + char in_compound = IN_CPD_NOT); + + char* prefix_check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + char* suffix_check_twosfx_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); + + char* morphgen(const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* morph, + const char* targetmorph, + int level); + + int expand_rootword(struct guessword* wlst, + int maxn, + const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* bad, + int, + const char*); + + short get_syllable(const std::string& word); + int cpdrep_check(const char* word, int len); + int cpdpat_check(const char* word, + int len, + hentry* r1, + hentry* r2, + const char affixed); + int defcpd_check(hentry*** words, + short wnum, + hentry* rv, + hentry** rwords, + char all); + int cpdcase_check(const char* word, int len); + inline int candidate_check(const char* word, int len); + void setcminmax(int* cmin, int* cmax, const char* word, int len); + struct hentry* compound_check(const char* word, + int len, + short wordnum, + short numsyllable, + short maxwordnum, + short wnum, + hentry** words, + hentry** rwords, + char hu_mov_rule, + char is_sug, + int* info); + + int compound_check_morph(const char* word, + int len, + short wordnum, + short numsyllable, + short maxwordnum, + short wnum, + hentry** words, + hentry** rwords, + char hu_mov_rule, + char** result, + char* partresult); + + int get_suffix_words(short unsigned* suff, + int len, + const char* root_word, + char** slst); + + struct hentry* lookup(const char* word); + int get_numrep() const; + struct replentry* get_reptable() const; + RepList* get_iconvtable() const; + RepList* get_oconvtable() const; + struct phonetable* get_phonetable() const; + int get_nummap() const; + struct mapentry* get_maptable() const; + int get_numbreak() const; + char** get_breaktable() const; + char* get_encoding(); + int get_langnum() const; + char* get_key_string(); + char* get_try_string() const; + const char* get_wordchars() const; + const std::vector& get_wordchars_utf16() const; + char* get_ignore() const; + const std::vector& get_ignore_utf16() const; + int get_compound() const; + FLAG get_compoundflag() const; + FLAG get_compoundbegin() const; + FLAG get_forbiddenword() const; + FLAG get_nosuggest() const; + FLAG get_nongramsuggest() const; + FLAG get_needaffix() const; + FLAG get_onlyincompound() const; + FLAG get_compoundroot() const; + FLAG get_lemma_present() const; + int get_checknum() const; + const char* get_prefix() const; + const char* get_suffix() const; + const char* get_derived() const; + const char* get_version() const; + int have_contclass() const; + int get_utf8() const; + int get_complexprefixes() const; + char* get_suffixed(char) const; + int get_maxngramsugs() const; + int get_maxcpdsugs() const; + int get_maxdiff() const; + int get_onlymaxdiff() const; + int get_nosplitsugs() const; + int get_sugswithdots(void) const; + FLAG get_keepcase(void) const; + FLAG get_forceucase(void) const; + FLAG get_warn(void) const; + int get_forbidwarn(void) const; + int get_checksharps(void) const; + char* encode_flag(unsigned short aflag) const; + int get_fullstrip() const; + + private: + int parse_file(const char* affpath, const char* key); + int parse_flag(char* line, unsigned short* out, FileMgr* af); + int parse_num(char* line, int* out, FileMgr* af); + int parse_cpdsyllable(char* line, FileMgr* af); + int parse_reptable(char* line, FileMgr* af); + int parse_convtable(char* line, + FileMgr* af, + RepList** rl, + const char* keyword); + int parse_phonetable(char* line, FileMgr* af); + int parse_maptable(char* line, FileMgr* af); + int parse_breaktable(char* line, FileMgr* af); + int parse_checkcpdtable(char* line, FileMgr* af); + int parse_defcpdtable(char* line, FileMgr* af); + int parse_affix(char* line, const char at, FileMgr* af, char* dupflags); + + void reverse_condition(std::string&); + void debugflag(char* result, unsigned short flag); + std::string& debugflag(std::string& result, unsigned short flag); + int condlen(const char*); + int encodeit(affentry& entry, const char* cs); int build_pfxtree(PfxEntry* pfxptr); int build_sfxtree(SfxEntry* sfxptr); int process_pfx_order(); int process_sfx_order(); - PfxEntry * process_pfx_in_order(PfxEntry * ptr, PfxEntry * nptr); - SfxEntry * process_sfx_in_order(SfxEntry * ptr, SfxEntry * nptr); + PfxEntry* process_pfx_in_order(PfxEntry* ptr, PfxEntry* nptr); + SfxEntry* process_sfx_in_order(SfxEntry* ptr, SfxEntry* nptr); int process_pfx_tree_to_list(); int process_sfx_tree_to_list(); - int redundant_condition(char, char * strip, int stripl, - const char * cond, int); - void finishFileMgr(FileMgr *afflst); + int redundant_condition(char, const char* strip, int stripl, const char* cond, int); + void finishFileMgr(FileMgr* afflst); }; #endif - diff --git a/src/spelling/hunspell/atypes.hxx b/src/spelling/hunspell/atypes.hxx index 61c59d5f..60826af2 100644 --- a/src/spelling/hunspell/atypes.hxx +++ b/src/spelling/hunspell/atypes.hxx @@ -1,3 +1,43 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _ATYPES_HXX_ #define _ATYPES_HXX_ @@ -6,8 +46,9 @@ #ifdef HUNSPELL_WARNING_ON #define HUNSPELL_WARNING fprintf #else -// empty inline function to switch off warnings (instead of the C99 standard variadic macros) -static inline void HUNSPELL_WARNING(FILE *, const char *, ...) {} +// empty inline function to switch off warnings (instead of the C99 standard +// variadic macros) +static inline void HUNSPELL_WARNING(FILE*, const char*, ...) {} #endif #endif @@ -16,90 +57,87 @@ static inline void HUNSPELL_WARNING(FILE *, const char *, ...) {} #include "hashmgr.hxx" #include "w_char.hxx" +#include +#include -#define SETSIZE 256 -#define CONTSIZE 65536 -#define MAXWORDLEN 100 -#define MAXWORDUTF8LEN 256 +#define SETSIZE 256 +#define CONTSIZE 65536 // affentry options -#define aeXPRODUCT (1 << 0) -#define aeUTF8 (1 << 1) -#define aeALIASF (1 << 2) -#define aeALIASM (1 << 3) -#define aeLONGCOND (1 << 4) +#define aeXPRODUCT (1 << 0) +#define aeUTF8 (1 << 1) +#define aeALIASF (1 << 2) +#define aeALIASM (1 << 3) +#define aeLONGCOND (1 << 4) // compound options -#define IN_CPD_NOT 0 +#define IN_CPD_NOT 0 #define IN_CPD_BEGIN 1 -#define IN_CPD_END 2 +#define IN_CPD_END 2 #define IN_CPD_OTHER 3 // info options -#define SPELL_COMPOUND (1 << 0) -#define SPELL_FORBIDDEN (1 << 1) -#define SPELL_ALLCAP (1 << 2) -#define SPELL_NOCAP (1 << 3) -#define SPELL_INITCAP (1 << 4) -#define SPELL_ORIGCAP (1 << 5) -#define SPELL_WARN (1 << 6) +#define SPELL_COMPOUND (1 << 0) +#define SPELL_FORBIDDEN (1 << 1) +#define SPELL_ALLCAP (1 << 2) +#define SPELL_NOCAP (1 << 3) +#define SPELL_INITCAP (1 << 4) +#define SPELL_ORIGCAP (1 << 5) +#define SPELL_WARN (1 << 6) -#define MAXLNLEN 8192 +#define MAXLNLEN 8192 -#define MINCPDLEN 3 -#define MAXCOMPOUND 10 -#define MAXCONDLEN 20 -#define MAXCONDLEN_1 (MAXCONDLEN - sizeof(char *)) +#define MINCPDLEN 3 +#define MAXCOMPOUND 10 +#define MAXCONDLEN 20 +#define MAXCONDLEN_1 (MAXCONDLEN - sizeof(char*)) -#define MAXACC 1000 +#define MAXACC 1000 #define FLAG unsigned short #define FLAG_NULL 0x00 #define FREE_FLAG(a) a = 0 -#define TESTAFF( a, b , c ) (flag_bsearch((unsigned short *) a, (unsigned short) b, c)) - -struct affentry -{ - char * strip; - char * appnd; - unsigned char stripl; - unsigned char appndl; - char numconds; - char opts; - unsigned short aflag; - unsigned short * contclass; - short contclasslen; - union { - char conds[MAXCONDLEN]; - struct { - char conds1[MAXCONDLEN_1]; - char * conds2; - } l; - } c; - char * morphcode; +#define TESTAFF(a, b, c) (std::binary_search(a, a + c, b)) + +struct affentry { + std::string strip; + std::string appnd; + char numconds; + char opts; + unsigned short aflag; + unsigned short* contclass; + short contclasslen; + union { + char conds[MAXCONDLEN]; + struct { + char conds1[MAXCONDLEN_1]; + char* conds2; + } l; + } c; + char* morphcode; }; struct guessword { - char * word; + char* word; bool allow; - char * orig; + char* orig; }; struct mapentry { - char ** set; + char** set; int len; }; struct flagentry { - FLAG * def; + FLAG* def; int len; }; struct patentry { - char * pattern; - char * pattern2; - char * pattern3; + char* pattern; + char* pattern2; + char* pattern3; FLAG cond; FLAG cond2; }; diff --git a/src/spelling/hunspell/baseaffix.hxx b/src/spelling/hunspell/baseaffix.hxx index f417acaa..59256e92 100644 --- a/src/spelling/hunspell/baseaffix.hxx +++ b/src/spelling/hunspell/baseaffix.hxx @@ -1,32 +1,77 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _BASEAFF_HXX_ #define _BASEAFF_HXX_ #include "hunvisapi.h" +#include + +class LIBHUNSPELL_DLL_EXPORTED AffEntry { + private: + AffEntry(const AffEntry&); + AffEntry& operator=(const AffEntry&); -class LIBHUNSPELL_DLL_EXPORTED AffEntry -{ -private: - AffEntry(const AffEntry&); - AffEntry& operator = (const AffEntry&); -protected: - AffEntry() {} - char * appnd; - char * strip; - unsigned char appndl; - unsigned char stripl; - char numconds; - char opts; - unsigned short aflag; - union { - char conds[MAXCONDLEN]; - struct { - char conds1[MAXCONDLEN_1]; - char * conds2; - } l; - } c; - char * morphcode; - unsigned short * contclass; - short contclasslen; + protected: + AffEntry() + : numconds(0), + opts(0), + aflag(0), + morphcode(0), + contclass(NULL), + contclasslen(0) {} + std::string appnd; + std::string strip; + unsigned char numconds; + char opts; + unsigned short aflag; + union { + char conds[MAXCONDLEN]; + struct { + char conds1[MAXCONDLEN_1]; + char* conds2; + } l; + } c; + char* morphcode; + unsigned short* contclass; + short contclasslen; }; #endif diff --git a/src/spelling/hunspell/csutil.cxx b/src/spelling/hunspell/csutil.cxx index f877f281..1948e4a3 100644 --- a/src/spelling/hunspell/csutil.cxx +++ b/src/spelling/hunspell/csutil.cxx @@ -1,9 +1,80 @@ -#include "license.hunspell" -#include "license.myspell" - -#include +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include #include -#include +#include #include #include "csutil.hxx" @@ -23,23 +94,22 @@ struct unicode_info { #endif #ifdef OPENOFFICEORG -# include +#include #else -# ifndef MOZILLA_CLIENT -# include "utf_info.cxx" -# define UTF_LST_LEN (sizeof(utf_lst) / (sizeof(unicode_info))) -# endif +#ifndef MOZILLA_CLIENT +#include "utf_info.cxx" +#define UTF_LST_LEN (sizeof(utf_lst) / (sizeof(unicode_info))) +#endif #endif #ifdef MOZILLA_CLIENT #include "nsCOMPtr.h" -#include "nsServiceManagerUtils.h" #include "nsIUnicodeEncoder.h" #include "nsIUnicodeDecoder.h" #include "nsUnicharUtils.h" -#include "nsICharsetConverterManager.h" +#include "mozilla/dom/EncodingUtils.h" -static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID); +using mozilla::dom::EncodingUtils; #endif struct unicode_info2 { @@ -48,405 +118,355 @@ struct unicode_info2 { unsigned short clower; }; -static struct unicode_info2 * utf_tbl = NULL; -static int utf_tbl_count = 0; // utf_tbl can be used by multiple Hunspell instances +static struct unicode_info2* utf_tbl = NULL; +static int utf_tbl_count = + 0; // utf_tbl can be used by multiple Hunspell instances -FILE * myfopen(const char * path, const char * mode) { +FILE* myfopen(const char* path, const char* mode) { #ifdef _WIN32 #define WIN32_LONG_PATH_PREFIX "\\\\?\\" - if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { - int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); - wchar_t *buff = (wchar_t *) malloc(len * sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); - FILE * f = _wfopen(buff, (strcmp(mode, "r") == 0) ? L"r" : L"rb"); - free(buff); - return f; + if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { + int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); + wchar_t* buff = (wchar_t*)malloc(len * sizeof(wchar_t)); + wchar_t* buff2 = (wchar_t*)malloc(len * sizeof(wchar_t)); + FILE* f = NULL; + if (buff && buff2) { + MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); + if (_wfullpath(buff2, buff, len) != NULL) { + f = _wfopen(buff2, (strcmp(mode, "r") == 0) ? L"r" : L"rb"); + } + free(buff); + free(buff2); } + return f; + } #endif - return fopen(path, mode); + return fopen(path, mode); } -/* only UTF-16 (BMP) implementation */ -char * u16_u8(char * dest, int size, const w_char * src, int srclen) { - signed char * u8 = (signed char *)dest; - signed char * u8_max = (signed char *)(u8 + size); - const w_char * u2 = src; - const w_char * u2_max = src + srclen; - while ((u2 < u2_max) && (u8 < u8_max)) { - if (u2->h) { // > 0xFF - // XXX 4-byte haven't implemented yet. - if (u2->h >= 0x08) { // >= 0x800 (3-byte UTF-8 character) - *u8 = 0xe0 + (u2->h >> 4); - u8++; - if (u8 < u8_max) { - *u8 = 0x80 + ((u2->h & 0xf) << 2) + (u2->l >> 6); - u8++; - if (u8 < u8_max) { - *u8 = 0x80 + (u2->l & 0x3f); - u8++; - } - } - } else { // < 0x800 (2-byte UTF-8 character) - *u8 = 0xc0 + (u2->h << 2) + (u2->l >> 6); - u8++; - if (u8 < u8_max) { - *u8 = 0x80 + (u2->l & 0x3f); - u8++; - } - } - } else { // <= 0xFF - if (u2->l & 0x80) { // >0x80 (2-byte UTF-8 character) - *u8 = 0xc0 + (u2->l >> 6); - u8++; - if (u8 < u8_max) { - *u8 = 0x80 + (u2->l & 0x3f); - u8++; - } - } else { // < 0x80 (1-byte UTF-8 character) - *u8 = u2->l; - u8++; - } - } - u2++; +std::string& u16_u8(std::string& dest, const std::vector& src) { + dest.clear(); + std::vector::const_iterator u2 = src.begin(); + std::vector::const_iterator u2_max = src.end(); + while (u2 < u2_max) { + signed char u8; + if (u2->h) { // > 0xFF + // XXX 4-byte haven't implemented yet. + if (u2->h >= 0x08) { // >= 0x800 (3-byte UTF-8 character) + u8 = 0xe0 + (u2->h >> 4); + dest.push_back(u8); + u8 = 0x80 + ((u2->h & 0xf) << 2) + (u2->l >> 6); + dest.push_back(u8); + u8 = 0x80 + (u2->l & 0x3f); + dest.push_back(u8); + } else { // < 0x800 (2-byte UTF-8 character) + u8 = 0xc0 + (u2->h << 2) + (u2->l >> 6); + dest.push_back(u8); + u8 = 0x80 + (u2->l & 0x3f); + dest.push_back(u8); + } + } else { // <= 0xFF + if (u2->l & 0x80) { // >0x80 (2-byte UTF-8 character) + u8 = 0xc0 + (u2->l >> 6); + dest.push_back(u8); + u8 = 0x80 + (u2->l & 0x3f); + dest.push_back(u8); + } else { // < 0x80 (1-byte UTF-8 character) + u8 = u2->l; + dest.push_back(u8); + } } - *u8 = '\0'; - return dest; + ++u2; + } + return dest; } +int u8_u16(std::vector& dest, const std::string& src) { + dest.clear(); + std::string::const_iterator u8 = src.begin(); + std::string::const_iterator u8_max = src.end(); -/* only UTF-16 (BMP) implementation */ -int u8_u16(w_char * dest, int size, const char * src) { - const signed char * u8 = (const signed char *)src; - w_char * u2 = dest; - w_char * u2_max = u2 + size; - - while ((u2 < u2_max) && *u8) { + while (u8 < u8_max) { + w_char u2; switch ((*u8) & 0xf0) { - case 0x00: - case 0x10: - case 0x20: - case 0x30: - case 0x40: - case 0x50: - case 0x60: - case 0x70: { - u2->h = 0; - u2->l = *u8; - break; - } - case 0x80: - case 0x90: - case 0xa0: - case 0xb0: { - HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Unexpected continuation bytes in %ld. character position\n%s\n", static_cast(u8 - (signed char *)src), src); - u2->h = 0xff; - u2->l = 0xfd; - break; - } - case 0xc0: - case 0xd0: { // 2-byte UTF-8 codes - if ((*(u8+1) & 0xc0) == 0x80) { - u2->h = (*u8 & 0x1f) >> 2; - u2->l = (*u8 << 6) + (*(u8+1) & 0x3f); - u8++; - } else { - HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast(u8 - (signed char *)src), src); - u2->h = 0xff; - u2->l = 0xfd; - } - break; - } - case 0xe0: { // 3-byte UTF-8 codes - if ((*(u8+1) & 0xc0) == 0x80) { - u2->h = ((*u8 & 0x0f) << 4) + ((*(u8+1) & 0x3f) >> 2); - u8++; - if ((*(u8+1) & 0xc0) == 0x80) { - u2->l = (*u8 << 6) + (*(u8+1) & 0x3f); - u8++; - } else { - HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast(u8 - (signed char *)src), src); - u2->h = 0xff; - u2->l = 0xfd; - } - } else { - HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast(u8 - (signed char *)src), src); - u2->h = 0xff; - u2->l = 0xfd; - } - break; + case 0x00: + case 0x10: + case 0x20: + case 0x30: + case 0x40: + case 0x50: + case 0x60: + case 0x70: { + u2.h = 0; + u2.l = *u8; + break; + } + case 0x80: + case 0x90: + case 0xa0: + case 0xb0: { + HUNSPELL_WARNING(stderr, + "UTF-8 encoding error. Unexpected continuation bytes " + "in %ld. character position\n%s\n", + static_cast(std::distance(src.begin(), u8)), + src.c_str()); + u2.h = 0xff; + u2.l = 0xfd; + break; + } + case 0xc0: + case 0xd0: { // 2-byte UTF-8 codes + if ((*(u8 + 1) & 0xc0) == 0x80) { + u2.h = (*u8 & 0x1f) >> 2; + u2.l = (*u8 << 6) + (*(u8 + 1) & 0x3f); + ++u8; + } else { + HUNSPELL_WARNING(stderr, + "UTF-8 encoding error. Missing continuation byte in " + "%ld. character position:\n%s\n", + static_cast(std::distance(src.begin(), u8)), + src.c_str()); + u2.h = 0xff; + u2.l = 0xfd; } - case 0xf0: { // 4 or more byte UTF-8 codes - HUNSPELL_WARNING(stderr, "This UTF-8 encoding can't convert to UTF-16:\n%s\n", src); - u2->h = 0xff; - u2->l = 0xfd; - return -1; + break; + } + case 0xe0: { // 3-byte UTF-8 codes + if ((*(u8 + 1) & 0xc0) == 0x80) { + u2.h = ((*u8 & 0x0f) << 4) + ((*(u8 + 1) & 0x3f) >> 2); + ++u8; + if ((*(u8 + 1) & 0xc0) == 0x80) { + u2.l = (static_cast(*u8) << 6) + (*(u8 + 1) & 0x3f); + ++u8; + } else { + HUNSPELL_WARNING(stderr, + "UTF-8 encoding error. Missing continuation byte " + "in %ld. character position:\n%s\n", + static_cast(std::distance(src.begin(), u8)), + src.c_str()); + u2.h = 0xff; + u2.l = 0xfd; + } + } else { + HUNSPELL_WARNING(stderr, + "UTF-8 encoding error. Missing continuation byte in " + "%ld. character position:\n%s\n", + static_cast(std::distance(src.begin(), u8)), + src.c_str()); + u2.h = 0xff; + u2.l = 0xfd; } + break; + } + case 0xf0: { // 4 or more byte UTF-8 codes + HUNSPELL_WARNING(stderr, + "This UTF-8 encoding can't convert to UTF-16:\n%s\n", + src.c_str()); + u2.h = 0xff; + u2.l = 0xfd; + dest.push_back(u2); + return -1; + } } - u8++; - u2++; - } - return (int)(u2 - dest); -} + dest.push_back(u2); + ++u8; + } -void flag_qsort(unsigned short flags[], int begin, int end) { - unsigned short reg; - if (end > begin) { - unsigned short pivot = flags[begin]; - int l = begin + 1; - int r = end; - while(l < r) { - if (flags[l] <= pivot) { - l++; - } else { - r--; - reg = flags[l]; - flags[l] = flags[r]; - flags[r] = reg; - } - } - l--; - reg = flags[begin]; - flags[begin] = flags[l]; - flags[l] = reg; + return dest.size(); +} - flag_qsort(flags, begin, l); - flag_qsort(flags, r, end); +// strip strings into token based on single char delimiter +// acts like strsep() but only uses a delim char and not +// a delim string +// default delimiter: white space characters + +char* mystrsep(char** stringp, const char delim) { + char* mp = *stringp; + if (*mp != '\0') { + char* dp; + if (delim) { + dp = strchr(mp, delim); + } else { + // don't use isspace() here, the string can be in some random charset + // that's way different than the locale's + for (dp = mp; (*dp && *dp != ' ' && *dp != '\t'); dp++) + ; + if (!*dp) + dp = NULL; } - } - -int flag_bsearch(unsigned short flags[], unsigned short flag, int length) { - int mid; - int left = 0; - int right = length - 1; - while (left <= right) { - mid = (left + right) / 2; - if (flags[mid] == flag) return 1; - if (flag < flags[mid]) right = mid - 1; - else left = mid + 1; - } - return 0; + if (dp) { + *stringp = dp + 1; + *dp = '\0'; + } else { + *stringp = mp + strlen(mp); + } + return mp; + } + return NULL; } - // strip strings into token based on single char delimiter - // acts like strsep() but only uses a delim char and not - // a delim string - // default delimiter: white space characters - - char * mystrsep(char ** stringp, const char delim) - { - char * mp = *stringp; - if (*mp != '\0') { - char * dp; - if (delim) { - dp = strchr(mp, delim); - } else { - // don't use isspace() here, the string can be in some random charset - // that's way different than the locale's - for (dp = mp; (*dp && *dp != ' ' && *dp != '\t'); dp++); - if (!*dp) dp = NULL; - } - if (dp) { - *stringp = dp+1; - *dp = '\0'; - } else { - *stringp = mp + strlen(mp); - } - return mp; - } - return NULL; - } - - // replaces strdup with ansi version - char * mystrdup(const char * s) - { - char * d = NULL; - if (s) { - size_t sl = strlen(s)+1; - d = (char *) malloc(sl); - if (d) { - memcpy(d,s,sl); - } else { - HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); - } - } - return d; - } +// replaces strdup with ansi version +char* mystrdup(const char* s) { + char* d = NULL; + if (s) { + size_t sl = strlen(s) + 1; + d = (char*)malloc(sl); + if (d) { + memcpy(d, s, sl); + } else { + HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); + } + } + return d; +} - // strcat for limited length destination string - char * mystrcat(char * dest, const char * st, int max) { - int len; - int len2; - if (dest == NULL || st == NULL) return dest; - len = strlen(dest); - len2 = strlen(st); - if (len + len2 + 1 > max) return dest; - strcpy(dest + len, st); - return dest; - } +// strcat for limited length destination string +char* mystrcat(char* dest, const char* st, int max) { + int len; + int len2; + if (dest == NULL || st == NULL) + return dest; + len = strlen(dest); + len2 = strlen(st); + if (len + len2 + 1 > max) + return dest; + strcpy(dest + len, st); + return dest; +} - // remove cross-platform text line end characters - void mychomp(char * s) - { - size_t k = strlen(s); - if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0'; - if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0'; - } - - - // does an ansi strdup of the reverse of a string - char * myrevstrdup(const char * s) - { - char * d = NULL; - if (s) { - size_t sl = strlen(s); - d = (char *) malloc(sl+1); - if (d) { - const char * p = s + sl - 1; - char * q = d; - while (p >= s) *q++ = *p--; - *q = '\0'; - } else { - HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); - } - } - return d; - } +// remove cross-platform text line end characters +void mychomp(char* s) { + size_t k = strlen(s); + if ((k > 0) && ((*(s + k - 1) == '\r') || (*(s + k - 1) == '\n'))) + *(s + k - 1) = '\0'; + if ((k > 1) && (*(s + k - 2) == '\r')) + *(s + k - 2) = '\0'; +} // break text to lines // return number of lines -int line_tok(const char * text, char *** lines, char breakchar) { - int linenum = 0; - if (!text) { - return linenum; - } - char * dup = mystrdup(text); - char * p = strchr(dup, breakchar); - while (p) { - linenum++; - *p = '\0'; - p++; - p = strchr(p, breakchar); - } +int line_tok(const char* text, char*** lines, char breakchar) { + int linenum = 0; + if (!text) { + return linenum; + } + char* dup = mystrdup(text); + char* p = strchr(dup, breakchar); + while (p) { linenum++; - *lines = (char **) malloc(linenum * sizeof(char *)); - if (!(*lines)) { + *p = '\0'; + p++; + p = strchr(p, breakchar); + } + linenum++; + *lines = (char**)malloc(linenum * sizeof(char*)); + if (!(*lines)) { + free(dup); + return 0; + } + + p = dup; + int l = 0; + for (int i = 0; i < linenum; i++) { + if (*p != '\0') { + (*lines)[l] = mystrdup(p); + if (!(*lines)[l]) { + for (i = 0; i < l; i++) + free((*lines)[i]); free(dup); return 0; + } + l++; } - - p = dup; - int l = 0; - for (int i = 0; i < linenum; i++) { - if (*p != '\0') { - (*lines)[l] = mystrdup(p); - if (!(*lines)[l]) { - for (i = 0; i < l; i++) free((*lines)[i]); - free(dup); - return 0; - } - l++; - } - p += strlen(p) + 1; - } - free(dup); - if (!l) free(*lines); - return l; + p += strlen(p) + 1; + } + free(dup); + if (!l) { + free(*lines); + *lines = NULL; + } + return l; } // uniq line in place -char * line_uniq(char * text, char breakchar) { - char ** lines; - int linenum = line_tok(text, &lines, breakchar); - int i; - strcpy(text, lines[0]); - for ( i = 1; i < linenum; i++ ) { - int dup = 0; - for (int j = 0; j < i; j++) { - if (strcmp(lines[i], lines[j]) == 0) { - dup = 1; - break; - } - } - if (!dup) { - if ((i > 1) || (*(lines[0]) != '\0')) { - sprintf(text + strlen(text), "%c", breakchar); - } - strcat(text, lines[i]); - } +char* line_uniq(char* text, char breakchar) { + char** lines; + int linenum = line_tok(text, &lines, breakchar); + int i; + strcpy(text, lines[0]); + for (i = 1; i < linenum; i++) { + int dup = 0; + for (int j = 0; j < i; j++) { + if (strcmp(lines[i], lines[j]) == 0) { + dup = 1; + break; + } } - for ( i = 0; i < linenum; i++ ) { - if (lines[i]) free(lines[i]); + if (!dup) { + if ((i > 1) || (*(lines[0]) != '\0')) { + sprintf(text + strlen(text), "%c", breakchar); + } + strcat(text, lines[i]); } - if (lines) free(lines); - return text; + } + for (i = 0; i < linenum; i++) { + free(lines[i]); + } + free(lines); + return text; } // uniq and boundary for compound analysis: "1\n\2\n\1" -> " ( \1 | \2 ) " -char * line_uniq_app(char ** text, char breakchar) { - if (!strchr(*text, breakchar)) { - return *text; - } - - char ** lines; - int i; - int linenum = line_tok(*text, &lines, breakchar); - int dup = 0; - for (i = 0; i < linenum; i++) { - for (int j = 0; j < (i - 1); j++) { - if (strcmp(lines[i], lines[j]) == 0) { - *(lines[i]) = '\0'; - dup++; - break; - } - } - } - if ((linenum - dup) == 1) { - strcpy(*text, lines[0]); - freelist(&lines, linenum); - return *text; - } - char * newtext = (char *) malloc(strlen(*text) + 2 * linenum + 3 + 1); - if (newtext) { - free(*text); - *text = newtext; - } else { - freelist(&lines, linenum); - return *text; - } - strcpy(*text," ( "); - for (i = 0; i < linenum; i++) if (*(lines[i])) { - sprintf(*text + strlen(*text), "%s%s", lines[i], " | "); +char* line_uniq_app(char** text, char breakchar) { + if (!strchr(*text, breakchar)) { + return *text; + } + + char** lines; + int i; + int linenum = line_tok(*text, &lines, breakchar); + int dup = 0; + for (i = 0; i < linenum; i++) { + for (int j = 0; j < (i - 1); j++) { + if (strcmp(lines[i], lines[j]) == 0) { + *(lines[i]) = '\0'; + dup++; + break; + } } - (*text)[strlen(*text) - 2] = ')'; // " ) " + } + if ((linenum - dup) == 1) { + strcpy(*text, lines[0]); freelist(&lines, linenum); return *text; -} - - // append s to ends of every lines in text - void strlinecat(char * dest, const char * s) - { - char * dup = mystrdup(dest); - char * source = dup; - int len = strlen(s); - if (dup) { - while (*source) { - if (*source == '\n') { - strncpy(dest, s, len); - dest += len; - } - *dest = *source; - source++; dest++; - } - strcpy(dest, s); - free(dup); + } + char* newtext = (char*)malloc(strlen(*text) + 2 * linenum + 3 + 1); + if (newtext) { + free(*text); + *text = newtext; + } else { + freelist(&lines, linenum); + return *text; + } + strcpy(*text, " ( "); + for (i = 0; i < linenum; i++) + if (*(lines[i])) { + sprintf(*text + strlen(*text), "%s%s", lines[i], " | "); } - } + (*text)[strlen(*text) - 2] = ')'; // " ) " + freelist(&lines, linenum); + return *text; +} -// change \n to char c -char * tr(char * text, char oldc, char newc) { - char * p; - for (p = text; *p; p++) if (*p == oldc) *p = newc; - return text; +// append s to ends of every lines in text +std::string& strlinecat(std::string& str, const std::string& apd) { + size_t pos = 0; + while ((pos = str.find('\n', pos)) != std::string::npos) { + str.insert(pos, apd); + pos += apd.length() + 1; + } + str.append(apd); + return str; } // morphcmp(): compare MORPH_DERI_SFX, MORPH_INFL_SFX and MORPH_TERM_SFX fields @@ -454,5024 +474,1997 @@ char * tr(char * text, char oldc, char newc) { // return 0, if inputs equal // return 1, if inputs may equal with a secondary suffix // otherwise return -1 -int morphcmp(const char * s, const char * t) -{ - int se = 0; - int te = 0; - const char * sl; - const char * tl; - const char * olds; - const char * oldt; - if (!s || !t) return 1; +int morphcmp(const char* s, const char* t) { + int se = 0; + int te = 0; + const char* sl; + const char* tl; + const char* olds; + const char* oldt; + if (!s || !t) + return 1; + olds = s; + sl = strchr(s, '\n'); + s = strstr(s, MORPH_DERI_SFX); + if (!s || (sl && sl < s)) + s = strstr(olds, MORPH_INFL_SFX); + if (!s || (sl && sl < s)) { + s = strstr(olds, MORPH_TERM_SFX); + olds = NULL; + } + oldt = t; + tl = strchr(t, '\n'); + t = strstr(t, MORPH_DERI_SFX); + if (!t || (tl && tl < t)) + t = strstr(oldt, MORPH_INFL_SFX); + if (!t || (tl && tl < t)) { + t = strstr(oldt, MORPH_TERM_SFX); + oldt = NULL; + } + while (s && t && (!sl || sl > s) && (!tl || tl > t)) { + s += MORPH_TAG_LEN; + t += MORPH_TAG_LEN; + se = 0; + te = 0; + while ((*s == *t) && !se && !te) { + s++; + t++; + switch (*s) { + case ' ': + case '\n': + case '\t': + case '\0': + se = 1; + } + switch (*t) { + case ' ': + case '\n': + case '\t': + case '\0': + te = 1; + } + } + if (!se || !te) { + // not terminal suffix difference + if (olds) + return -1; + return 1; + } olds = s; - sl = strchr(s, '\n'); s = strstr(s, MORPH_DERI_SFX); - if (!s || (sl && sl < s)) s = strstr(olds, MORPH_INFL_SFX); + if (!s || (sl && sl < s)) + s = strstr(olds, MORPH_INFL_SFX); if (!s || (sl && sl < s)) { - s= strstr(olds, MORPH_TERM_SFX); - olds = NULL; + s = strstr(olds, MORPH_TERM_SFX); + olds = NULL; } oldt = t; - tl = strchr(t, '\n'); t = strstr(t, MORPH_DERI_SFX); - if (!t || (tl && tl < t)) t = strstr(oldt, MORPH_INFL_SFX); + if (!t || (tl && tl < t)) + t = strstr(oldt, MORPH_INFL_SFX); if (!t || (tl && tl < t)) { - t = strstr(oldt, MORPH_TERM_SFX); - oldt = NULL; - } - while (s && t && (!sl || sl > s) && (!tl || tl > t)) { - s += MORPH_TAG_LEN; - t += MORPH_TAG_LEN; - se = 0; - te = 0; - while ((*s == *t) && !se && !te) { - s++; - t++; - switch(*s) { - case ' ': - case '\n': - case '\t': - case '\0': se = 1; - } - switch(*t) { - case ' ': - case '\n': - case '\t': - case '\0': te = 1; - } - } - if (!se || !te) { - // not terminal suffix difference - if (olds) return -1; - return 1; - } - olds = s; - s = strstr(s, MORPH_DERI_SFX); - if (!s || (sl && sl < s)) s = strstr(olds, MORPH_INFL_SFX); - if (!s || (sl && sl < s)) { - s = strstr(olds, MORPH_TERM_SFX); - olds = NULL; - } - oldt = t; - t = strstr(t, MORPH_DERI_SFX); - if (!t || (tl && tl < t)) t = strstr(oldt, MORPH_INFL_SFX); - if (!t || (tl && tl < t)) { - t = strstr(oldt, MORPH_TERM_SFX); - oldt = NULL; - } + t = strstr(oldt, MORPH_TERM_SFX); + oldt = NULL; } - if (!s && !t && se && te) return 0; - return 1; + } + if (!s && !t && se && te) + return 0; + return 1; } -int get_sfxcount(const char * morph) -{ - if (!morph || !*morph) return 0; - int n = 0; - const char * old = morph; - morph = strstr(morph, MORPH_DERI_SFX); - if (!morph) morph = strstr(old, MORPH_INFL_SFX); - if (!morph) morph = strstr(old, MORPH_TERM_SFX); - while (morph) { - n++; - old = morph; - morph = strstr(morph + 1, MORPH_DERI_SFX); - if (!morph) morph = strstr(old + 1, MORPH_INFL_SFX); - if (!morph) morph = strstr(old + 1, MORPH_TERM_SFX); - } - return n; +int get_sfxcount(const char* morph) { + if (!morph || !*morph) + return 0; + int n = 0; + const char* old = morph; + morph = strstr(morph, MORPH_DERI_SFX); + if (!morph) + morph = strstr(old, MORPH_INFL_SFX); + if (!morph) + morph = strstr(old, MORPH_TERM_SFX); + while (morph) { + n++; + old = morph; + morph = strstr(morph + 1, MORPH_DERI_SFX); + if (!morph) + morph = strstr(old + 1, MORPH_INFL_SFX); + if (!morph) + morph = strstr(old + 1, MORPH_TERM_SFX); + } + return n; } +int fieldlen(const char* r) { + int n = 0; + while (r && *r != ' ' && *r != '\t' && *r != '\0' && *r != '\n') { + r++; + n++; + } + return n; +} -int fieldlen(const char * r) -{ - int n = 0; - while (r && *r != ' ' && *r != '\t' && *r != '\0' && *r != '\n') { - r++; - n++; - } - return n; +bool copy_field(std::string& dest, + const std::string& morph, + const std::string& var) { + if (morph.empty()) + return false; + size_t pos = morph.find(var); + if (pos == std::string::npos) + return false; + dest.clear(); + std::string beg(morph.substr(pos + MORPH_TAG_LEN, std::string::npos)); + + for (size_t i = 0; i < beg.size(); ++i) { + const char c(beg[i]); + if (c == ' ' || c == '\t' || c == '\n') + break; + dest.push_back(c); + } + + return true; } -char * copy_field(char * dest, const char * morph, const char * var) -{ - if (!morph) return NULL; - const char * beg = strstr(morph, var); - if (beg) { - char * d = dest; - for (beg += MORPH_TAG_LEN; *beg != ' ' && *beg != '\t' && - *beg != '\n' && *beg != '\0'; d++, beg++) { - *d = *beg; - } - *d = '\0'; - return dest; +std::string& mystrrep(std::string& str, + const std::string& search, + const std::string& replace) { + size_t pos = 0; + while ((pos = str.find(search, pos)) != std::string::npos) { + str.replace(pos, search.length(), replace); + pos += replace.length(); } - return NULL; + return str; } -char * mystrrep(char * word, const char * pat, const char * rep) { - char * pos = strstr(word, pat); - if (pos) { - int replen = strlen(rep); - int patlen = strlen(pat); - while (pos) { - if (replen < patlen) { - char * end = word + strlen(word); - char * next = pos + replen; - char * prev = pos + strlen(pat); - for (; prev < end; *next = *prev, prev++, next++); - *next = '\0'; - } else if (replen > patlen) { - char * end = pos + patlen; - char * next = word + strlen(word) + replen - patlen; - char * prev = next - replen + patlen; - for (; prev >= end; *next = *prev, prev--, next--); - } - strncpy(pos, rep, replen); - pos = strstr(word, pat); +char* mystrrep(char* word, const char* pat, const char* rep) { + char* pos = strstr(word, pat); + if (pos) { + int replen = strlen(rep); + int patlen = strlen(pat); + while (pos) { + if (replen < patlen) { + char* end = word + strlen(word); + char* next = pos + replen; + char* prev = pos + strlen(pat); + for (; prev < end;* next = *prev, prev++, next++) + ; + *next = '\0'; + } else if (replen > patlen) { + char* end = pos + patlen; + char* next = word + strlen(word) + replen - patlen; + char* prev = next - replen + patlen; + for (; prev >= end;* next = *prev, prev--, next--) + ; } + strncpy(pos, rep, replen); + pos = strstr(word, pat); } - return word; + } + return word; } - // reverse word - int reverseword(char * word) { - char r; - for (char * dest = word + strlen(word) - 1; word < dest; word++, dest--) { - r=*word; - *word = *dest; - *dest = r; - } - return 0; - } +// reverse word +size_t reverseword(std::string& word) { + std::reverse(word.begin(), word.end()); + return word.size(); +} - // reverse word (error: 1) - int reverseword_utf(char * word) { - w_char w[MAXWORDLEN]; - w_char * p; - w_char r; - int l = u8_u16(w, MAXWORDLEN, word); - if (l == -1) return 1; - p = w; - for (w_char * dest = w + l - 1; p < dest; p++, dest--) { - r=*p; - *p = *dest; - *dest = r; - } - u16_u8(word, MAXWORDUTF8LEN, w, l); - return 0; - } +// reverse word +size_t reverseword_utf(std::string& word) { + std::vector w; + u8_u16(w, word); + std::reverse(w.begin(), w.end()); + u16_u8(word, w); + return w.size(); +} - int uniqlist(char ** list, int n) { - int i; - if (n < 2) return n; - for (i = 0; i < n; i++) { - for (int j = 0; j < i; j++) { - if (list[j] && list[i] && (strcmp(list[j], list[i]) == 0)) { - free(list[i]); - list[i] = NULL; - break; - } - } - } - int m = 1; - for (i = 1; i < n; i++) if (list[i]) { - list[m] = list[i]; - m++; +int uniqlist(char** list, int n) { + int i; + if (n < 2) + return n; + for (i = 0; i < n; i++) { + for (int j = 0; j < i; j++) { + if (list[j] && list[i] && (strcmp(list[j], list[i]) == 0)) { + free(list[i]); + list[i] = NULL; + break; + } + } + } + int m = 1; + for (i = 1; i < n; i++) + if (list[i]) { + list[m] = list[i]; + m++; } - return m; - } - - void freelist(char *** list, int n) { - if (list && *list && n > 0) { - for (int i = 0; i < n; i++) if ((*list)[i]) free((*list)[i]); - free(*list); - *list = NULL; - } - } - - // convert null terminated string to all caps - void mkallcap(char * p, const struct cs_info * csconv) - { - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].cupper; - p++; - } - } - - // convert null terminated string to all little - void mkallsmall(char * p, const struct cs_info * csconv) - { - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].clower; - p++; - } - } + return m; +} -void mkallsmall_utf(w_char * u, int nc, int langnum) { - for (int i = 0; i < nc; i++) { - unsigned short idx = (u[i].h << 8) + u[i].l; - if (idx != unicodetolower(idx, langnum)) { - u[i].h = (unsigned char) (unicodetolower(idx, langnum) >> 8); - u[i].l = (unsigned char) (unicodetolower(idx, langnum) & 0x00FF); - } +void freelist(char*** list, int n) { + if (list && *list) { + for (int i = 0; i < n; i++) + free((*list)[i]); + free(*list); + *list = NULL; + } +} + +namespace { +unsigned char cupper(const struct cs_info* csconv, int nIndex) { + if (nIndex < 0 || nIndex > 255) + return nIndex; + return csconv[nIndex].cupper; +} + +unsigned char clower(const struct cs_info* csconv, int nIndex) { + if (nIndex < 0 || nIndex > 255) + return nIndex; + return csconv[nIndex].clower; +} + +unsigned char ccase(const struct cs_info* csconv, int nIndex) { + if (nIndex < 0 || nIndex > 255) + return nIndex; + return csconv[nIndex].ccase; +} +} + +w_char upper_utf(w_char u, int langnum) { + unsigned short idx = (u.h << 8) + u.l; + if (idx != unicodetoupper(idx, langnum)) { + u.h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); + u.l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); + } + return u; +} + +w_char lower_utf(w_char u, int langnum) { + unsigned short idx = (u.h << 8) + u.l; + if (idx != unicodetolower(idx, langnum)) { + u.h = (unsigned char)(unicodetolower(idx, langnum) >> 8); + u.l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); + } + return u; +} + +// convert std::string to all caps +std::string& mkallcap(std::string& s, const struct cs_info* csconv) { + for (std::string::iterator aI = s.begin(), aEnd = s.end(); aI != aEnd; ++aI) { + *aI = cupper(csconv, static_cast(*aI)); + } + return s; +} + +// convert std::string to all little +std::string& mkallsmall(std::string& s, const struct cs_info* csconv) { + for (std::string::iterator aI = s.begin(), aEnd = s.end(); aI != aEnd; ++aI) { + *aI = clower(csconv, static_cast(*aI)); + } + return s; +} + +std::vector& mkallsmall_utf(std::vector& u, + int langnum) { + for (size_t i = 0; i < u.size(); ++i) { + unsigned short idx = (u[i].h << 8) + u[i].l; + if (idx != unicodetolower(idx, langnum)) { + u[i].h = (unsigned char)(unicodetolower(idx, langnum) >> 8); + u[i].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); } + } + return u; } -void mkallcap_utf(w_char * u, int nc, int langnum) { - for (int i = 0; i < nc; i++) { - unsigned short idx = (u[i].h << 8) + u[i].l; - if (idx != unicodetoupper(idx, langnum)) { - u[i].h = (unsigned char) (unicodetoupper(idx, langnum) >> 8); - u[i].l = (unsigned char) (unicodetoupper(idx, langnum) & 0x00FF); - } +std::vector& mkallcap_utf(std::vector& u, int langnum) { + for (size_t i = 0; i < u.size(); i++) { + unsigned short idx = (u[i].h << 8) + u[i].l; + if (idx != unicodetoupper(idx, langnum)) { + u[i].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); + u[i].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); } + } + return u; } - - // convert null terminated string to have initial capital - void mkinitcap(char * p, const struct cs_info * csconv) - { - if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper; - } - // conversion function for protected memory - void store_pointer(char * dest, char * source) - { - memcpy(dest, &source, sizeof(char *)); - } +std::string& mkinitcap(std::string& s, const struct cs_info* csconv) { + if (!s.empty()) { + s[0] = cupper(csconv, static_cast(s[0])); + } + return s; +} - // conversion function for protected memory - char * get_stored_pointer(const char * s) - { - char * p; - memcpy(&p, s, sizeof(char *)); - return p; - } +std::vector& mkinitcap_utf(std::vector& u, int langnum) { + if (!u.empty()) { + unsigned short idx = (u[0].h << 8) + u[0].l; + if (idx != unicodetoupper(idx, langnum)) { + u[0].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); + u[0].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); + } + } + return u; +} -#ifndef MOZILLA_CLIENT - // convert null terminated string to all caps using encoding - void enmkallcap(char * d, const char * p, const char * encoding) - - { - struct cs_info * csconv = get_current_cs(encoding); - while (*p != '\0') { - *d++ = csconv[((unsigned char) *p)].cupper; - p++; - } - *d = '\0'; - } +std::string& mkinitsmall(std::string& s, const struct cs_info* csconv) { + if (!s.empty()) { + s[0] = clower(csconv, static_cast(s[0])); + } + return s; +} - // convert null terminated string to all little using encoding - void enmkallsmall(char * d, const char * p, const char * encoding) - { - struct cs_info * csconv = get_current_cs(encoding); - while (*p != '\0') { - *d++ = csconv[((unsigned char) *p)].clower; - p++; - } - *d = '\0'; - } +std::vector& mkinitsmall_utf(std::vector& u, int langnum) { + if (!u.empty()) { + unsigned short idx = (u[0].h << 8) + u[0].l; + if (idx != unicodetolower(idx, langnum)) { + u[0].h = (unsigned char)(unicodetolower(idx, langnum) >> 8); + u[0].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); + } + } + return u; +} - // convert null terminated string to have initial capital using encoding - void enmkinitcap(char * d, const char * p, const char * encoding) - { - struct cs_info * csconv = get_current_cs(encoding); - memcpy(d,p,(strlen(p)+1)); - if (*p != '\0') *d= csconv[((unsigned char)*p)].cupper; - } +// conversion function for protected memory +void store_pointer(char* dest, char* source) { + memcpy(dest, &source, sizeof(char*)); +} + +// conversion function for protected memory +char* get_stored_pointer(const char* s) { + char* p; + memcpy(&p, s, sizeof(char*)); + return p; +} + +#ifndef MOZILLA_CLIENT -// these are simple character mappings for the +// these are simple character mappings for the // encodings supported // supplying isupper, tolower, and toupper static struct cs_info iso1_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; - + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso2_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xb1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x01, 0xb3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x01, 0xb5, 0xa5 }, -{ 0x01, 0xb6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x01, 0xb9, 0xa9 }, -{ 0x01, 0xba, 0xaa }, -{ 0x01, 0xbb, 0xab }, -{ 0x01, 0xbc, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x01, 0xbe, 0xae }, -{ 0x01, 0xbf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xa1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xa3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xa5 }, -{ 0x00, 0xb6, 0xa6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xa9 }, -{ 0x00, 0xba, 0xaa }, -{ 0x00, 0xbb, 0xab }, -{ 0x00, 0xbc, 0xac }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xae }, -{ 0x00, 0xbf, 0xaf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; - + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x01, 0xb1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x01, 0xb3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x01, 0xb5, 0xa5}, {0x01, 0xb6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x01, 0xb9, 0xa9}, {0x01, 0xba, 0xaa}, + {0x01, 0xbb, 0xab}, {0x01, 0xbc, 0xac}, {0x00, 0xad, 0xad}, + {0x01, 0xbe, 0xae}, {0x01, 0xbf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xa1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xa3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xa5}, {0x00, 0xb6, 0xa6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xa9}, + {0x00, 0xba, 0xaa}, {0x00, 0xbb, 0xab}, {0x00, 0xbc, 0xac}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xae}, {0x00, 0xbf, 0xaf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso3_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xb1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x01, 0xb6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x01, 0x69, 0xa9 }, -{ 0x01, 0xba, 0xaa }, -{ 0x01, 0xbb, 0xab }, -{ 0x01, 0xbc, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x01, 0xbf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xa1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xa6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0x49 }, -{ 0x00, 0xba, 0xaa }, -{ 0x00, 0xbb, 0xab }, -{ 0x00, 0xbc, 0xac }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xaf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x01, 0xb1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x01, 0xb6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x01, 0x69, 0xa9}, {0x01, 0xba, 0xaa}, + {0x01, 0xbb, 0xab}, {0x01, 0xbc, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x01, 0xbf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xa1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xa6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0x49}, + {0x00, 0xba, 0xaa}, {0x00, 0xbb, 0xab}, {0x00, 0xbc, 0xac}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xaf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x00, 0xd0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso4_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xb1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x01, 0xb3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x01, 0xb5, 0xa5 }, -{ 0x01, 0xb6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x01, 0xb9, 0xa9 }, -{ 0x01, 0xba, 0xaa }, -{ 0x01, 0xbb, 0xab }, -{ 0x01, 0xbc, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x01, 0xbe, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xa1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xa3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xa5 }, -{ 0x00, 0xb6, 0xa6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xa9 }, -{ 0x00, 0xba, 0xaa }, -{ 0x00, 0xbb, 0xab }, -{ 0x00, 0xbc, 0xac }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xae }, -{ 0x00, 0xbf, 0xbf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x01, 0xb1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x01, 0xb3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x01, 0xb5, 0xa5}, {0x01, 0xb6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x01, 0xb9, 0xa9}, {0x01, 0xba, 0xaa}, + {0x01, 0xbb, 0xab}, {0x01, 0xbc, 0xac}, {0x00, 0xad, 0xad}, + {0x01, 0xbe, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xa1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xa3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xa5}, {0x00, 0xb6, 0xa6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xa9}, + {0x00, 0xba, 0xaa}, {0x00, 0xbb, 0xab}, {0x00, 0xbc, 0xac}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xae}, {0x00, 0xbf, 0xbf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso5_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xf1, 0xa1 }, -{ 0x01, 0xf2, 0xa2 }, -{ 0x01, 0xf3, 0xa3 }, -{ 0x01, 0xf4, 0xa4 }, -{ 0x01, 0xf5, 0xa5 }, -{ 0x01, 0xf6, 0xa6 }, -{ 0x01, 0xf7, 0xa7 }, -{ 0x01, 0xf8, 0xa8 }, -{ 0x01, 0xf9, 0xa9 }, -{ 0x01, 0xfa, 0xaa }, -{ 0x01, 0xfb, 0xab }, -{ 0x01, 0xfc, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x01, 0xfe, 0xae }, -{ 0x01, 0xff, 0xaf }, -{ 0x01, 0xd0, 0xb0 }, -{ 0x01, 0xd1, 0xb1 }, -{ 0x01, 0xd2, 0xb2 }, -{ 0x01, 0xd3, 0xb3 }, -{ 0x01, 0xd4, 0xb4 }, -{ 0x01, 0xd5, 0xb5 }, -{ 0x01, 0xd6, 0xb6 }, -{ 0x01, 0xd7, 0xb7 }, -{ 0x01, 0xd8, 0xb8 }, -{ 0x01, 0xd9, 0xb9 }, -{ 0x01, 0xda, 0xba }, -{ 0x01, 0xdb, 0xbb }, -{ 0x01, 0xdc, 0xbc }, -{ 0x01, 0xdd, 0xbd }, -{ 0x01, 0xde, 0xbe }, -{ 0x01, 0xdf, 0xbf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x00, 0xd0, 0xb0 }, -{ 0x00, 0xd1, 0xb1 }, -{ 0x00, 0xd2, 0xb2 }, -{ 0x00, 0xd3, 0xb3 }, -{ 0x00, 0xd4, 0xb4 }, -{ 0x00, 0xd5, 0xb5 }, -{ 0x00, 0xd6, 0xb6 }, -{ 0x00, 0xd7, 0xb7 }, -{ 0x00, 0xd8, 0xb8 }, -{ 0x00, 0xd9, 0xb9 }, -{ 0x00, 0xda, 0xba }, -{ 0x00, 0xdb, 0xbb }, -{ 0x00, 0xdc, 0xbc }, -{ 0x00, 0xdd, 0xbd }, -{ 0x00, 0xde, 0xbe }, -{ 0x00, 0xdf, 0xbf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xa1 }, -{ 0x00, 0xf2, 0xa2 }, -{ 0x00, 0xf3, 0xa3 }, -{ 0x00, 0xf4, 0xa4 }, -{ 0x00, 0xf5, 0xa5 }, -{ 0x00, 0xf6, 0xa6 }, -{ 0x00, 0xf7, 0xa7 }, -{ 0x00, 0xf8, 0xa8 }, -{ 0x00, 0xf9, 0xa9 }, -{ 0x00, 0xfa, 0xaa }, -{ 0x00, 0xfb, 0xab }, -{ 0x00, 0xfc, 0xac }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xae }, -{ 0x00, 0xff, 0xaf } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x01, 0xf1, 0xa1}, + {0x01, 0xf2, 0xa2}, {0x01, 0xf3, 0xa3}, {0x01, 0xf4, 0xa4}, + {0x01, 0xf5, 0xa5}, {0x01, 0xf6, 0xa6}, {0x01, 0xf7, 0xa7}, + {0x01, 0xf8, 0xa8}, {0x01, 0xf9, 0xa9}, {0x01, 0xfa, 0xaa}, + {0x01, 0xfb, 0xab}, {0x01, 0xfc, 0xac}, {0x00, 0xad, 0xad}, + {0x01, 0xfe, 0xae}, {0x01, 0xff, 0xaf}, {0x01, 0xd0, 0xb0}, + {0x01, 0xd1, 0xb1}, {0x01, 0xd2, 0xb2}, {0x01, 0xd3, 0xb3}, + {0x01, 0xd4, 0xb4}, {0x01, 0xd5, 0xb5}, {0x01, 0xd6, 0xb6}, + {0x01, 0xd7, 0xb7}, {0x01, 0xd8, 0xb8}, {0x01, 0xd9, 0xb9}, + {0x01, 0xda, 0xba}, {0x01, 0xdb, 0xbb}, {0x01, 0xdc, 0xbc}, + {0x01, 0xdd, 0xbd}, {0x01, 0xde, 0xbe}, {0x01, 0xdf, 0xbf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x00, 0xd0, 0xb0}, {0x00, 0xd1, 0xb1}, + {0x00, 0xd2, 0xb2}, {0x00, 0xd3, 0xb3}, {0x00, 0xd4, 0xb4}, + {0x00, 0xd5, 0xb5}, {0x00, 0xd6, 0xb6}, {0x00, 0xd7, 0xb7}, + {0x00, 0xd8, 0xb8}, {0x00, 0xd9, 0xb9}, {0x00, 0xda, 0xba}, + {0x00, 0xdb, 0xbb}, {0x00, 0xdc, 0xbc}, {0x00, 0xdd, 0xbd}, + {0x00, 0xde, 0xbe}, {0x00, 0xdf, 0xbf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xa1}, {0x00, 0xf2, 0xa2}, + {0x00, 0xf3, 0xa3}, {0x00, 0xf4, 0xa4}, {0x00, 0xf5, 0xa5}, + {0x00, 0xf6, 0xa6}, {0x00, 0xf7, 0xa7}, {0x00, 0xf8, 0xa8}, + {0x00, 0xf9, 0xa9}, {0x00, 0xfa, 0xaa}, {0x00, 0xfb, 0xab}, + {0x00, 0xfc, 0xac}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xae}, + {0x00, 0xff, 0xaf}}; static struct cs_info iso6_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x00, 0xc1, 0xc1 }, -{ 0x00, 0xc2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x00, 0xc4, 0xc4 }, -{ 0x00, 0xc5, 0xc5 }, -{ 0x00, 0xc6, 0xc6 }, -{ 0x00, 0xc7, 0xc7 }, -{ 0x00, 0xc8, 0xc8 }, -{ 0x00, 0xc9, 0xc9 }, -{ 0x00, 0xca, 0xca }, -{ 0x00, 0xcb, 0xcb }, -{ 0x00, 0xcc, 0xcc }, -{ 0x00, 0xcd, 0xcd }, -{ 0x00, 0xce, 0xce }, -{ 0x00, 0xcf, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x00, 0xd1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x00, 0xd3, 0xd3 }, -{ 0x00, 0xd4, 0xd4 }, -{ 0x00, 0xd5, 0xd5 }, -{ 0x00, 0xd6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x00, 0xd8, 0xd8 }, -{ 0x00, 0xd9, 0xd9 }, -{ 0x00, 0xda, 0xda }, -{ 0x00, 0xdb, 0xdb }, -{ 0x00, 0xdc, 0xdc }, -{ 0x00, 0xdd, 0xdd }, -{ 0x00, 0xde, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xe1 }, -{ 0x00, 0xe2, 0xe2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xe4 }, -{ 0x00, 0xe5, 0xe5 }, -{ 0x00, 0xe6, 0xe6 }, -{ 0x00, 0xe7, 0xe7 }, -{ 0x00, 0xe8, 0xe8 }, -{ 0x00, 0xe9, 0xe9 }, -{ 0x00, 0xea, 0xea }, -{ 0x00, 0xeb, 0xeb }, -{ 0x00, 0xec, 0xec }, -{ 0x00, 0xed, 0xed }, -{ 0x00, 0xee, 0xee }, -{ 0x00, 0xef, 0xef }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xf1 }, -{ 0x00, 0xf2, 0xf2 }, -{ 0x00, 0xf3, 0xf3 }, -{ 0x00, 0xf4, 0xf4 }, -{ 0x00, 0xf5, 0xf5 }, -{ 0x00, 0xf6, 0xf6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xf8 }, -{ 0x00, 0xf9, 0xf9 }, -{ 0x00, 0xfa, 0xfa }, -{ 0x00, 0xfb, 0xfb }, -{ 0x00, 0xfc, 0xfc }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xfe }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x00, 0xc1, 0xc1}, {0x00, 0xc2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x00, 0xc4, 0xc4}, {0x00, 0xc5, 0xc5}, + {0x00, 0xc6, 0xc6}, {0x00, 0xc7, 0xc7}, {0x00, 0xc8, 0xc8}, + {0x00, 0xc9, 0xc9}, {0x00, 0xca, 0xca}, {0x00, 0xcb, 0xcb}, + {0x00, 0xcc, 0xcc}, {0x00, 0xcd, 0xcd}, {0x00, 0xce, 0xce}, + {0x00, 0xcf, 0xcf}, {0x00, 0xd0, 0xd0}, {0x00, 0xd1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x00, 0xd3, 0xd3}, {0x00, 0xd4, 0xd4}, + {0x00, 0xd5, 0xd5}, {0x00, 0xd6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x00, 0xd8, 0xd8}, {0x00, 0xd9, 0xd9}, {0x00, 0xda, 0xda}, + {0x00, 0xdb, 0xdb}, {0x00, 0xdc, 0xdc}, {0x00, 0xdd, 0xdd}, + {0x00, 0xde, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xe1}, {0x00, 0xe2, 0xe2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xe4}, {0x00, 0xe5, 0xe5}, {0x00, 0xe6, 0xe6}, + {0x00, 0xe7, 0xe7}, {0x00, 0xe8, 0xe8}, {0x00, 0xe9, 0xe9}, + {0x00, 0xea, 0xea}, {0x00, 0xeb, 0xeb}, {0x00, 0xec, 0xec}, + {0x00, 0xed, 0xed}, {0x00, 0xee, 0xee}, {0x00, 0xef, 0xef}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xf1}, {0x00, 0xf2, 0xf2}, + {0x00, 0xf3, 0xf3}, {0x00, 0xf4, 0xf4}, {0x00, 0xf5, 0xf5}, + {0x00, 0xf6, 0xf6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xf8}, + {0x00, 0xf9, 0xf9}, {0x00, 0xfa, 0xfa}, {0x00, 0xfb, 0xfb}, + {0x00, 0xfc, 0xfc}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xfe}, + {0x00, 0xff, 0xff}}; static struct cs_info iso7_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x01, 0xdc, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x01, 0xdd, 0xb8 }, -{ 0x01, 0xde, 0xb9 }, -{ 0x01, 0xdf, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x01, 0xfc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x01, 0xfd, 0xbe }, -{ 0x01, 0xfe, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x01, 0xf7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x00, 0xdc, 0xb6 }, -{ 0x00, 0xdd, 0xb8 }, -{ 0x00, 0xde, 0xb9 }, -{ 0x00, 0xdf, 0xba }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd3 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xd7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xbc }, -{ 0x00, 0xfd, 0xbe }, -{ 0x00, 0xfe, 0xbf }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x01, 0xdc, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x01, 0xdd, 0xb8}, {0x01, 0xde, 0xb9}, + {0x01, 0xdf, 0xba}, {0x00, 0xbb, 0xbb}, {0x01, 0xfc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x01, 0xfd, 0xbe}, {0x01, 0xfe, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x01, 0xf7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x00, 0xdc, 0xb6}, {0x00, 0xdd, 0xb8}, + {0x00, 0xde, 0xb9}, {0x00, 0xdf, 0xba}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd3}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xd7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xbc}, {0x00, 0xfd, 0xbe}, {0x00, 0xfe, 0xbf}, + {0x00, 0xff, 0xff}}; static struct cs_info iso8_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x00, 0xc1, 0xc1 }, -{ 0x00, 0xc2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x00, 0xc4, 0xc4 }, -{ 0x00, 0xc5, 0xc5 }, -{ 0x00, 0xc6, 0xc6 }, -{ 0x00, 0xc7, 0xc7 }, -{ 0x00, 0xc8, 0xc8 }, -{ 0x00, 0xc9, 0xc9 }, -{ 0x00, 0xca, 0xca }, -{ 0x00, 0xcb, 0xcb }, -{ 0x00, 0xcc, 0xcc }, -{ 0x00, 0xcd, 0xcd }, -{ 0x00, 0xce, 0xce }, -{ 0x00, 0xcf, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x00, 0xd1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x00, 0xd3, 0xd3 }, -{ 0x00, 0xd4, 0xd4 }, -{ 0x00, 0xd5, 0xd5 }, -{ 0x00, 0xd6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x00, 0xd8, 0xd8 }, -{ 0x00, 0xd9, 0xd9 }, -{ 0x00, 0xda, 0xda }, -{ 0x00, 0xdb, 0xdb }, -{ 0x00, 0xdc, 0xdc }, -{ 0x00, 0xdd, 0xdd }, -{ 0x00, 0xde, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xe1 }, -{ 0x00, 0xe2, 0xe2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xe4 }, -{ 0x00, 0xe5, 0xe5 }, -{ 0x00, 0xe6, 0xe6 }, -{ 0x00, 0xe7, 0xe7 }, -{ 0x00, 0xe8, 0xe8 }, -{ 0x00, 0xe9, 0xe9 }, -{ 0x00, 0xea, 0xea }, -{ 0x00, 0xeb, 0xeb }, -{ 0x00, 0xec, 0xec }, -{ 0x00, 0xed, 0xed }, -{ 0x00, 0xee, 0xee }, -{ 0x00, 0xef, 0xef }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xf1 }, -{ 0x00, 0xf2, 0xf2 }, -{ 0x00, 0xf3, 0xf3 }, -{ 0x00, 0xf4, 0xf4 }, -{ 0x00, 0xf5, 0xf5 }, -{ 0x00, 0xf6, 0xf6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xf8 }, -{ 0x00, 0xf9, 0xf9 }, -{ 0x00, 0xfa, 0xfa }, -{ 0x00, 0xfb, 0xfb }, -{ 0x00, 0xfc, 0xfc }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xfe }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x00, 0xc1, 0xc1}, {0x00, 0xc2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x00, 0xc4, 0xc4}, {0x00, 0xc5, 0xc5}, + {0x00, 0xc6, 0xc6}, {0x00, 0xc7, 0xc7}, {0x00, 0xc8, 0xc8}, + {0x00, 0xc9, 0xc9}, {0x00, 0xca, 0xca}, {0x00, 0xcb, 0xcb}, + {0x00, 0xcc, 0xcc}, {0x00, 0xcd, 0xcd}, {0x00, 0xce, 0xce}, + {0x00, 0xcf, 0xcf}, {0x00, 0xd0, 0xd0}, {0x00, 0xd1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x00, 0xd3, 0xd3}, {0x00, 0xd4, 0xd4}, + {0x00, 0xd5, 0xd5}, {0x00, 0xd6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x00, 0xd8, 0xd8}, {0x00, 0xd9, 0xd9}, {0x00, 0xda, 0xda}, + {0x00, 0xdb, 0xdb}, {0x00, 0xdc, 0xdc}, {0x00, 0xdd, 0xdd}, + {0x00, 0xde, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xe1}, {0x00, 0xe2, 0xe2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xe4}, {0x00, 0xe5, 0xe5}, {0x00, 0xe6, 0xe6}, + {0x00, 0xe7, 0xe7}, {0x00, 0xe8, 0xe8}, {0x00, 0xe9, 0xe9}, + {0x00, 0xea, 0xea}, {0x00, 0xeb, 0xeb}, {0x00, 0xec, 0xec}, + {0x00, 0xed, 0xed}, {0x00, 0xee, 0xee}, {0x00, 0xef, 0xef}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xf1}, {0x00, 0xf2, 0xf2}, + {0x00, 0xf3, 0xf3}, {0x00, 0xf4, 0xf4}, {0x00, 0xf5, 0xf5}, + {0x00, 0xf6, 0xf6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xf8}, + {0x00, 0xf9, 0xf9}, {0x00, 0xfa, 0xfa}, {0x00, 0xfb, 0xfb}, + {0x00, 0xfc, 0xfc}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xfe}, + {0x00, 0xff, 0xff}}; static struct cs_info iso9_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0xfd, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0xdd }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0x69, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0x49 }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0xfd, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0xdd}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0x69, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0x49}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso10_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x00, 0xc1, 0xc1 }, -{ 0x00, 0xc2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x00, 0xc4, 0xc4 }, -{ 0x00, 0xc5, 0xc5 }, -{ 0x00, 0xc6, 0xc6 }, -{ 0x00, 0xc7, 0xc7 }, -{ 0x00, 0xc8, 0xc8 }, -{ 0x00, 0xc9, 0xc9 }, -{ 0x00, 0xca, 0xca }, -{ 0x00, 0xcb, 0xcb }, -{ 0x00, 0xcc, 0xcc }, -{ 0x00, 0xcd, 0xcd }, -{ 0x00, 0xce, 0xce }, -{ 0x00, 0xcf, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x00, 0xd1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x00, 0xd3, 0xd3 }, -{ 0x00, 0xd4, 0xd4 }, -{ 0x00, 0xd5, 0xd5 }, -{ 0x00, 0xd6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x00, 0xd8, 0xd8 }, -{ 0x00, 0xd9, 0xd9 }, -{ 0x00, 0xda, 0xda }, -{ 0x00, 0xdb, 0xdb }, -{ 0x00, 0xdc, 0xdc }, -{ 0x00, 0xdd, 0xdd }, -{ 0x00, 0xde, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xe1 }, -{ 0x00, 0xe2, 0xe2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xe4 }, -{ 0x00, 0xe5, 0xe5 }, -{ 0x00, 0xe6, 0xe6 }, -{ 0x00, 0xe7, 0xe7 }, -{ 0x00, 0xe8, 0xe8 }, -{ 0x00, 0xe9, 0xe9 }, -{ 0x00, 0xea, 0xea }, -{ 0x00, 0xeb, 0xeb }, -{ 0x00, 0xec, 0xec }, -{ 0x00, 0xed, 0xed }, -{ 0x00, 0xee, 0xee }, -{ 0x00, 0xef, 0xef }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xf1 }, -{ 0x00, 0xf2, 0xf2 }, -{ 0x00, 0xf3, 0xf3 }, -{ 0x00, 0xf4, 0xf4 }, -{ 0x00, 0xf5, 0xf5 }, -{ 0x00, 0xf6, 0xf6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xf8 }, -{ 0x00, 0xf9, 0xf9 }, -{ 0x00, 0xfa, 0xfa }, -{ 0x00, 0xfb, 0xfb }, -{ 0x00, 0xfc, 0xfc }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xfe }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x00, 0xc1, 0xc1}, {0x00, 0xc2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x00, 0xc4, 0xc4}, {0x00, 0xc5, 0xc5}, + {0x00, 0xc6, 0xc6}, {0x00, 0xc7, 0xc7}, {0x00, 0xc8, 0xc8}, + {0x00, 0xc9, 0xc9}, {0x00, 0xca, 0xca}, {0x00, 0xcb, 0xcb}, + {0x00, 0xcc, 0xcc}, {0x00, 0xcd, 0xcd}, {0x00, 0xce, 0xce}, + {0x00, 0xcf, 0xcf}, {0x00, 0xd0, 0xd0}, {0x00, 0xd1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x00, 0xd3, 0xd3}, {0x00, 0xd4, 0xd4}, + {0x00, 0xd5, 0xd5}, {0x00, 0xd6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x00, 0xd8, 0xd8}, {0x00, 0xd9, 0xd9}, {0x00, 0xda, 0xda}, + {0x00, 0xdb, 0xdb}, {0x00, 0xdc, 0xdc}, {0x00, 0xdd, 0xdd}, + {0x00, 0xde, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xe1}, {0x00, 0xe2, 0xe2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xe4}, {0x00, 0xe5, 0xe5}, {0x00, 0xe6, 0xe6}, + {0x00, 0xe7, 0xe7}, {0x00, 0xe8, 0xe8}, {0x00, 0xe9, 0xe9}, + {0x00, 0xea, 0xea}, {0x00, 0xeb, 0xeb}, {0x00, 0xec, 0xec}, + {0x00, 0xed, 0xed}, {0x00, 0xee, 0xee}, {0x00, 0xef, 0xef}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xf1}, {0x00, 0xf2, 0xf2}, + {0x00, 0xf3, 0xf3}, {0x00, 0xf4, 0xf4}, {0x00, 0xf5, 0xf5}, + {0x00, 0xf6, 0xf6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xf8}, + {0x00, 0xf9, 0xf9}, {0x00, 0xfa, 0xfa}, {0x00, 0xfb, 0xfb}, + {0x00, 0xfc, 0xfc}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xfe}, + {0x00, 0xff, 0xff}}; static struct cs_info koi8r_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xb3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x01, 0xa3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xe0 }, -{ 0x00, 0xc1, 0xe1 }, -{ 0x00, 0xc2, 0xe2 }, -{ 0x00, 0xc3, 0xe3 }, -{ 0x00, 0xc4, 0xe4 }, -{ 0x00, 0xc5, 0xe5 }, -{ 0x00, 0xc6, 0xe6 }, -{ 0x00, 0xc7, 0xe7 }, -{ 0x00, 0xc8, 0xe8 }, -{ 0x00, 0xc9, 0xe9 }, -{ 0x00, 0xca, 0xea }, -{ 0x00, 0xcb, 0xeb }, -{ 0x00, 0xcc, 0xec }, -{ 0x00, 0xcd, 0xed }, -{ 0x00, 0xce, 0xee }, -{ 0x00, 0xcf, 0xef }, -{ 0x00, 0xd0, 0xf0 }, -{ 0x00, 0xd1, 0xf1 }, -{ 0x00, 0xd2, 0xf2 }, -{ 0x00, 0xd3, 0xf3 }, -{ 0x00, 0xd4, 0xf4 }, -{ 0x00, 0xd5, 0xf5 }, -{ 0x00, 0xd6, 0xf6 }, -{ 0x00, 0xd7, 0xf7 }, -{ 0x00, 0xd8, 0xf8 }, -{ 0x00, 0xd9, 0xf9 }, -{ 0x00, 0xda, 0xfa }, -{ 0x00, 0xdb, 0xfb }, -{ 0x00, 0xdc, 0xfc }, -{ 0x00, 0xdd, 0xfd }, -{ 0x00, 0xde, 0xfe }, -{ 0x00, 0xdf, 0xff }, -{ 0x01, 0xc0, 0xe0 }, -{ 0x01, 0xc1, 0xe1 }, -{ 0x01, 0xc2, 0xe2 }, -{ 0x01, 0xc3, 0xe3 }, -{ 0x01, 0xc4, 0xe4 }, -{ 0x01, 0xc5, 0xe5 }, -{ 0x01, 0xc6, 0xe6 }, -{ 0x01, 0xc7, 0xe7 }, -{ 0x01, 0xc8, 0xe8 }, -{ 0x01, 0xc9, 0xe9 }, -{ 0x01, 0xca, 0xea }, -{ 0x01, 0xcb, 0xeb }, -{ 0x01, 0xcc, 0xec }, -{ 0x01, 0xcd, 0xed }, -{ 0x01, 0xce, 0xee }, -{ 0x01, 0xcf, 0xef }, -{ 0x01, 0xd0, 0xf0 }, -{ 0x01, 0xd1, 0xf1 }, -{ 0x01, 0xd2, 0xf2 }, -{ 0x01, 0xd3, 0xf3 }, -{ 0x01, 0xd4, 0xf4 }, -{ 0x01, 0xd5, 0xf5 }, -{ 0x01, 0xd6, 0xf6 }, -{ 0x01, 0xd7, 0xf7 }, -{ 0x01, 0xd8, 0xf8 }, -{ 0x01, 0xd9, 0xf9 }, -{ 0x01, 0xda, 0xfa }, -{ 0x01, 0xdb, 0xfb }, -{ 0x01, 0xdc, 0xfc }, -{ 0x01, 0xdd, 0xfd }, -{ 0x01, 0xde, 0xfe }, -{ 0x01, 0xdf, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xb3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x01, 0xa3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xe0}, {0x00, 0xc1, 0xe1}, {0x00, 0xc2, 0xe2}, + {0x00, 0xc3, 0xe3}, {0x00, 0xc4, 0xe4}, {0x00, 0xc5, 0xe5}, + {0x00, 0xc6, 0xe6}, {0x00, 0xc7, 0xe7}, {0x00, 0xc8, 0xe8}, + {0x00, 0xc9, 0xe9}, {0x00, 0xca, 0xea}, {0x00, 0xcb, 0xeb}, + {0x00, 0xcc, 0xec}, {0x00, 0xcd, 0xed}, {0x00, 0xce, 0xee}, + {0x00, 0xcf, 0xef}, {0x00, 0xd0, 0xf0}, {0x00, 0xd1, 0xf1}, + {0x00, 0xd2, 0xf2}, {0x00, 0xd3, 0xf3}, {0x00, 0xd4, 0xf4}, + {0x00, 0xd5, 0xf5}, {0x00, 0xd6, 0xf6}, {0x00, 0xd7, 0xf7}, + {0x00, 0xd8, 0xf8}, {0x00, 0xd9, 0xf9}, {0x00, 0xda, 0xfa}, + {0x00, 0xdb, 0xfb}, {0x00, 0xdc, 0xfc}, {0x00, 0xdd, 0xfd}, + {0x00, 0xde, 0xfe}, {0x00, 0xdf, 0xff}, {0x01, 0xc0, 0xe0}, + {0x01, 0xc1, 0xe1}, {0x01, 0xc2, 0xe2}, {0x01, 0xc3, 0xe3}, + {0x01, 0xc4, 0xe4}, {0x01, 0xc5, 0xe5}, {0x01, 0xc6, 0xe6}, + {0x01, 0xc7, 0xe7}, {0x01, 0xc8, 0xe8}, {0x01, 0xc9, 0xe9}, + {0x01, 0xca, 0xea}, {0x01, 0xcb, 0xeb}, {0x01, 0xcc, 0xec}, + {0x01, 0xcd, 0xed}, {0x01, 0xce, 0xee}, {0x01, 0xcf, 0xef}, + {0x01, 0xd0, 0xf0}, {0x01, 0xd1, 0xf1}, {0x01, 0xd2, 0xf2}, + {0x01, 0xd3, 0xf3}, {0x01, 0xd4, 0xf4}, {0x01, 0xd5, 0xf5}, + {0x01, 0xd6, 0xf6}, {0x01, 0xd7, 0xf7}, {0x01, 0xd8, 0xf8}, + {0x01, 0xd9, 0xf9}, {0x01, 0xda, 0xfa}, {0x01, 0xdb, 0xfb}, + {0x01, 0xdc, 0xfc}, {0x01, 0xdd, 0xfd}, {0x01, 0xde, 0xfe}, + {0x01, 0xdf, 0xff}}; static struct cs_info koi8u_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xb3 }, -{ 0x00, 0xa4, 0xb4 }, /* ie */ -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xb6 }, /* i */ -{ 0x00, 0xa7, 0xb7 }, /* ii */ -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xbd }, /* g'' */ -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x01, 0xa3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, /* IE */ -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, /* I */ -{ 0x00, 0xb7, 0xb7 }, /* II */ -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xe0 }, -{ 0x00, 0xc1, 0xe1 }, -{ 0x00, 0xc2, 0xe2 }, -{ 0x00, 0xc3, 0xe3 }, -{ 0x00, 0xc4, 0xe4 }, -{ 0x00, 0xc5, 0xe5 }, -{ 0x00, 0xc6, 0xe6 }, -{ 0x00, 0xc7, 0xe7 }, -{ 0x00, 0xc8, 0xe8 }, -{ 0x00, 0xc9, 0xe9 }, -{ 0x00, 0xca, 0xea }, -{ 0x00, 0xcb, 0xeb }, -{ 0x00, 0xcc, 0xec }, -{ 0x00, 0xcd, 0xed }, -{ 0x00, 0xce, 0xee }, -{ 0x00, 0xcf, 0xef }, -{ 0x00, 0xd0, 0xf0 }, -{ 0x00, 0xd1, 0xf1 }, -{ 0x00, 0xd2, 0xf2 }, -{ 0x00, 0xd3, 0xf3 }, -{ 0x00, 0xd4, 0xf4 }, -{ 0x00, 0xd5, 0xf5 }, -{ 0x00, 0xd6, 0xf6 }, -{ 0x00, 0xd7, 0xf7 }, -{ 0x00, 0xd8, 0xf8 }, -{ 0x00, 0xd9, 0xf9 }, -{ 0x00, 0xda, 0xfa }, -{ 0x00, 0xdb, 0xfb }, -{ 0x00, 0xdc, 0xfc }, -{ 0x00, 0xdd, 0xfd }, -{ 0x00, 0xde, 0xfe }, -{ 0x00, 0xdf, 0xff }, -{ 0x01, 0xc0, 0xe0 }, -{ 0x01, 0xc1, 0xe1 }, -{ 0x01, 0xc2, 0xe2 }, -{ 0x01, 0xc3, 0xe3 }, -{ 0x01, 0xc4, 0xe4 }, -{ 0x01, 0xc5, 0xe5 }, -{ 0x01, 0xc6, 0xe6 }, -{ 0x01, 0xc7, 0xe7 }, -{ 0x01, 0xc8, 0xe8 }, -{ 0x01, 0xc9, 0xe9 }, -{ 0x01, 0xca, 0xea }, -{ 0x01, 0xcb, 0xeb }, -{ 0x01, 0xcc, 0xec }, -{ 0x01, 0xcd, 0xed }, -{ 0x01, 0xce, 0xee }, -{ 0x01, 0xcf, 0xef }, -{ 0x01, 0xd0, 0xf0 }, -{ 0x01, 0xd1, 0xf1 }, -{ 0x01, 0xd2, 0xf2 }, -{ 0x01, 0xd3, 0xf3 }, -{ 0x01, 0xd4, 0xf4 }, -{ 0x01, 0xd5, 0xf5 }, -{ 0x01, 0xd6, 0xf6 }, -{ 0x01, 0xd7, 0xf7 }, -{ 0x01, 0xd8, 0xf8 }, -{ 0x01, 0xd9, 0xf9 }, -{ 0x01, 0xda, 0xfa }, -{ 0x01, 0xdb, 0xfb }, -{ 0x01, 0xdc, 0xfc }, -{ 0x01, 0xdd, 0xfd }, -{ 0x01, 0xde, 0xfe }, -{ 0x01, 0xdf, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xb3}, {0x00, 0xa4, 0xb4}, /* ie */ + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xb6}, /* i */ + {0x00, 0xa7, 0xb7}, /* ii */ + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xbd}, /* g'' */ + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x01, 0xa3, 0xb3}, + {0x00, 0xb4, 0xb4}, /* IE */ + {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, /* I */ + {0x00, 0xb7, 0xb7}, /* II */ + {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, {0x00, 0xba, 0xba}, + {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, {0x00, 0xbd, 0xbd}, + {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, {0x00, 0xc0, 0xe0}, + {0x00, 0xc1, 0xe1}, {0x00, 0xc2, 0xe2}, {0x00, 0xc3, 0xe3}, + {0x00, 0xc4, 0xe4}, {0x00, 0xc5, 0xe5}, {0x00, 0xc6, 0xe6}, + {0x00, 0xc7, 0xe7}, {0x00, 0xc8, 0xe8}, {0x00, 0xc9, 0xe9}, + {0x00, 0xca, 0xea}, {0x00, 0xcb, 0xeb}, {0x00, 0xcc, 0xec}, + {0x00, 0xcd, 0xed}, {0x00, 0xce, 0xee}, {0x00, 0xcf, 0xef}, + {0x00, 0xd0, 0xf0}, {0x00, 0xd1, 0xf1}, {0x00, 0xd2, 0xf2}, + {0x00, 0xd3, 0xf3}, {0x00, 0xd4, 0xf4}, {0x00, 0xd5, 0xf5}, + {0x00, 0xd6, 0xf6}, {0x00, 0xd7, 0xf7}, {0x00, 0xd8, 0xf8}, + {0x00, 0xd9, 0xf9}, {0x00, 0xda, 0xfa}, {0x00, 0xdb, 0xfb}, + {0x00, 0xdc, 0xfc}, {0x00, 0xdd, 0xfd}, {0x00, 0xde, 0xfe}, + {0x00, 0xdf, 0xff}, {0x01, 0xc0, 0xe0}, {0x01, 0xc1, 0xe1}, + {0x01, 0xc2, 0xe2}, {0x01, 0xc3, 0xe3}, {0x01, 0xc4, 0xe4}, + {0x01, 0xc5, 0xe5}, {0x01, 0xc6, 0xe6}, {0x01, 0xc7, 0xe7}, + {0x01, 0xc8, 0xe8}, {0x01, 0xc9, 0xe9}, {0x01, 0xca, 0xea}, + {0x01, 0xcb, 0xeb}, {0x01, 0xcc, 0xec}, {0x01, 0xcd, 0xed}, + {0x01, 0xce, 0xee}, {0x01, 0xcf, 0xef}, {0x01, 0xd0, 0xf0}, + {0x01, 0xd1, 0xf1}, {0x01, 0xd2, 0xf2}, {0x01, 0xd3, 0xf3}, + {0x01, 0xd4, 0xf4}, {0x01, 0xd5, 0xf5}, {0x01, 0xd6, 0xf6}, + {0x01, 0xd7, 0xf7}, {0x01, 0xd8, 0xf8}, {0x01, 0xd9, 0xf9}, + {0x01, 0xda, 0xfa}, {0x01, 0xdb, 0xfb}, {0x01, 0xdc, 0xfc}, + {0x01, 0xdd, 0xfd}, {0x01, 0xde, 0xfe}, {0x01, 0xdf, 0xff}}; static struct cs_info cp1251_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x01, 0x90, 0x80 }, -{ 0x01, 0x83, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x81 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x01, 0x9a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x01, 0x9c, 0x8c }, -{ 0x01, 0x9d, 0x8d }, -{ 0x01, 0x9e, 0x8e }, -{ 0x01, 0x9f, 0x8f }, -{ 0x00, 0x90, 0x80 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x8a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x8c }, -{ 0x00, 0x9d, 0x8d }, -{ 0x00, 0x9e, 0x8e }, -{ 0x00, 0x9f, 0x8f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xa2, 0xa1 }, -{ 0x00, 0xa2, 0xa1 }, -{ 0x01, 0xbc, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x01, 0xb4, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x01, 0xb8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x01, 0xba, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x01, 0xbf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x01, 0xb3, 0xb2 }, -{ 0x00, 0xb3, 0xb2 }, -{ 0x00, 0xb4, 0xa5 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xa8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xaa }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xa3 }, -{ 0x01, 0xbe, 0xbd }, -{ 0x00, 0xbe, 0xbd }, -{ 0x00, 0xbf, 0xaf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x01, 0xf7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x01, 0xff, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xd7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xdf } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x01, 0x90, 0x80}, + {0x01, 0x83, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x81}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x01, 0x9a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x01, 0x9c, 0x8c}, + {0x01, 0x9d, 0x8d}, {0x01, 0x9e, 0x8e}, {0x01, 0x9f, 0x8f}, + {0x00, 0x90, 0x80}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x8a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x8c}, {0x00, 0x9d, 0x8d}, {0x00, 0x9e, 0x8e}, + {0x00, 0x9f, 0x8f}, {0x00, 0xa0, 0xa0}, {0x01, 0xa2, 0xa1}, + {0x00, 0xa2, 0xa1}, {0x01, 0xbc, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x01, 0xb4, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x01, 0xb8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x01, 0xba, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x01, 0xbf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x01, 0xb3, 0xb2}, {0x00, 0xb3, 0xb2}, + {0x00, 0xb4, 0xa5}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xa8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xaa}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xa3}, + {0x01, 0xbe, 0xbd}, {0x00, 0xbe, 0xbd}, {0x00, 0xbf, 0xaf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x01, 0xf7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x01, 0xff, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xd7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xdf}}; static struct cs_info iso13_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0A, 0x0A }, -{ 0x00, 0x0B, 0x0B }, -{ 0x00, 0x0C, 0x0C }, -{ 0x00, 0x0D, 0x0D }, -{ 0x00, 0x0E, 0x0E }, -{ 0x00, 0x0F, 0x0F }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1A, 0x1A }, -{ 0x00, 0x1B, 0x1B }, -{ 0x00, 0x1C, 0x1C }, -{ 0x00, 0x1D, 0x1D }, -{ 0x00, 0x1E, 0x1E }, -{ 0x00, 0x1F, 0x1F }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2A, 0x2A }, -{ 0x00, 0x2B, 0x2B }, -{ 0x00, 0x2C, 0x2C }, -{ 0x00, 0x2D, 0x2D }, -{ 0x00, 0x2E, 0x2E }, -{ 0x00, 0x2F, 0x2F }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3A, 0x3A }, -{ 0x00, 0x3B, 0x3B }, -{ 0x00, 0x3C, 0x3C }, -{ 0x00, 0x3D, 0x3D }, -{ 0x00, 0x3E, 0x3E }, -{ 0x00, 0x3F, 0x3F }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6A, 0x4A }, -{ 0x01, 0x6B, 0x4B }, -{ 0x01, 0x6C, 0x4C }, -{ 0x01, 0x6D, 0x4D }, -{ 0x01, 0x6E, 0x4E }, -{ 0x01, 0x6F, 0x4F }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7A, 0x5A }, -{ 0x00, 0x5B, 0x5B }, -{ 0x00, 0x5C, 0x5C }, -{ 0x00, 0x5D, 0x5D }, -{ 0x00, 0x5E, 0x5E }, -{ 0x00, 0x5F, 0x5F }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6A, 0x4A }, -{ 0x00, 0x6B, 0x4B }, -{ 0x00, 0x6C, 0x4C }, -{ 0x00, 0x6D, 0x4D }, -{ 0x00, 0x6E, 0x4E }, -{ 0x00, 0x6F, 0x4F }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7A, 0x5A }, -{ 0x00, 0x7B, 0x7B }, -{ 0x00, 0x7C, 0x7C }, -{ 0x00, 0x7D, 0x7D }, -{ 0x00, 0x7E, 0x7E }, -{ 0x00, 0x7F, 0x7F }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8A, 0x8A }, -{ 0x00, 0x8B, 0x8B }, -{ 0x00, 0x8C, 0x8C }, -{ 0x00, 0x8D, 0x8D }, -{ 0x00, 0x8E, 0x8E }, -{ 0x00, 0x8F, 0x8F }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9A, 0x9A }, -{ 0x00, 0x9B, 0x9B }, -{ 0x00, 0x9C, 0x9C }, -{ 0x00, 0x9D, 0x9D }, -{ 0x00, 0x9E, 0x9E }, -{ 0x00, 0x9F, 0x9F }, -{ 0x00, 0xA0, 0xA0 }, -{ 0x00, 0xA1, 0xA1 }, -{ 0x00, 0xA2, 0xA2 }, -{ 0x00, 0xA3, 0xA3 }, -{ 0x00, 0xA4, 0xA4 }, -{ 0x00, 0xA5, 0xA5 }, -{ 0x00, 0xA6, 0xA6 }, -{ 0x00, 0xA7, 0xA7 }, -{ 0x01, 0xB8, 0xA8 }, -{ 0x00, 0xA9, 0xA9 }, -{ 0x01, 0xBA, 0xAA }, -{ 0x00, 0xAB, 0xAB }, -{ 0x00, 0xAC, 0xAC }, -{ 0x00, 0xAD, 0xAD }, -{ 0x00, 0xAE, 0xAE }, -{ 0x01, 0xBF, 0xAF }, -{ 0x00, 0xB0, 0xB0 }, -{ 0x00, 0xB1, 0xB1 }, -{ 0x00, 0xB2, 0xB2 }, -{ 0x00, 0xB3, 0xB3 }, -{ 0x00, 0xB4, 0xB4 }, -{ 0x00, 0xB5, 0xB5 }, -{ 0x00, 0xB6, 0xB6 }, -{ 0x00, 0xB7, 0xB7 }, -{ 0x00, 0xB8, 0xA8 }, -{ 0x00, 0xB9, 0xB9 }, -{ 0x00, 0xBA, 0xAA }, -{ 0x00, 0xBB, 0xBB }, -{ 0x00, 0xBC, 0xBC }, -{ 0x00, 0xBD, 0xBD }, -{ 0x00, 0xBE, 0xBE }, -{ 0x00, 0xBF, 0xAF }, -{ 0x01, 0xE0, 0xC0 }, -{ 0x01, 0xE1, 0xC1 }, -{ 0x01, 0xE2, 0xC2 }, -{ 0x01, 0xE3, 0xC3 }, -{ 0x01, 0xE4, 0xC4 }, -{ 0x01, 0xE5, 0xC5 }, -{ 0x01, 0xE6, 0xC6 }, -{ 0x01, 0xE7, 0xC7 }, -{ 0x01, 0xE8, 0xC8 }, -{ 0x01, 0xE9, 0xC9 }, -{ 0x01, 0xEA, 0xCA }, -{ 0x01, 0xEB, 0xCB }, -{ 0x01, 0xEC, 0xCC }, -{ 0x01, 0xED, 0xCD }, -{ 0x01, 0xEE, 0xCE }, -{ 0x01, 0xEF, 0xCF }, -{ 0x01, 0xF0, 0xD0 }, -{ 0x01, 0xF1, 0xD1 }, -{ 0x01, 0xF2, 0xD2 }, -{ 0x01, 0xF3, 0xD3 }, -{ 0x01, 0xF4, 0xD4 }, -{ 0x01, 0xF5, 0xD5 }, -{ 0x01, 0xF6, 0xD6 }, -{ 0x00, 0xD7, 0xD7 }, -{ 0x01, 0xF8, 0xD8 }, -{ 0x01, 0xF9, 0xD9 }, -{ 0x01, 0xFA, 0xDA }, -{ 0x01, 0xFB, 0xDB }, -{ 0x01, 0xFC, 0xDC }, -{ 0x01, 0xFD, 0xDD }, -{ 0x01, 0xFE, 0xDE }, -{ 0x00, 0xDF, 0xDF }, -{ 0x00, 0xE0, 0xC0 }, -{ 0x00, 0xE1, 0xC1 }, -{ 0x00, 0xE2, 0xC2 }, -{ 0x00, 0xE3, 0xC3 }, -{ 0x00, 0xE4, 0xC4 }, -{ 0x00, 0xE5, 0xC5 }, -{ 0x00, 0xE6, 0xC6 }, -{ 0x00, 0xE7, 0xC7 }, -{ 0x00, 0xE8, 0xC8 }, -{ 0x00, 0xE9, 0xC9 }, -{ 0x00, 0xEA, 0xCA }, -{ 0x00, 0xEB, 0xCB }, -{ 0x00, 0xEC, 0xCC }, -{ 0x00, 0xED, 0xCD }, -{ 0x00, 0xEE, 0xCE }, -{ 0x00, 0xEF, 0xCF }, -{ 0x00, 0xF0, 0xD0 }, -{ 0x00, 0xF1, 0xD1 }, -{ 0x00, 0xF2, 0xD2 }, -{ 0x00, 0xF3, 0xD3 }, -{ 0x00, 0xF4, 0xD4 }, -{ 0x00, 0xF5, 0xD5 }, -{ 0x00, 0xF6, 0xD6 }, -{ 0x00, 0xF7, 0xF7 }, -{ 0x00, 0xF8, 0xD8 }, -{ 0x00, 0xF9, 0xD9 }, -{ 0x00, 0xFA, 0xDA }, -{ 0x00, 0xFB, 0xDB }, -{ 0x00, 0xFC, 0xDC }, -{ 0x00, 0xFD, 0xDD }, -{ 0x00, 0xFE, 0xDE }, -{ 0x00, 0xFF, 0xFF } -}; - + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0A, 0x0A}, {0x00, 0x0B, 0x0B}, + {0x00, 0x0C, 0x0C}, {0x00, 0x0D, 0x0D}, {0x00, 0x0E, 0x0E}, + {0x00, 0x0F, 0x0F}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1A, 0x1A}, + {0x00, 0x1B, 0x1B}, {0x00, 0x1C, 0x1C}, {0x00, 0x1D, 0x1D}, + {0x00, 0x1E, 0x1E}, {0x00, 0x1F, 0x1F}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2A, 0x2A}, {0x00, 0x2B, 0x2B}, {0x00, 0x2C, 0x2C}, + {0x00, 0x2D, 0x2D}, {0x00, 0x2E, 0x2E}, {0x00, 0x2F, 0x2F}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3A, 0x3A}, {0x00, 0x3B, 0x3B}, + {0x00, 0x3C, 0x3C}, {0x00, 0x3D, 0x3D}, {0x00, 0x3E, 0x3E}, + {0x00, 0x3F, 0x3F}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6A, 0x4A}, + {0x01, 0x6B, 0x4B}, {0x01, 0x6C, 0x4C}, {0x01, 0x6D, 0x4D}, + {0x01, 0x6E, 0x4E}, {0x01, 0x6F, 0x4F}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7A, 0x5A}, {0x00, 0x5B, 0x5B}, {0x00, 0x5C, 0x5C}, + {0x00, 0x5D, 0x5D}, {0x00, 0x5E, 0x5E}, {0x00, 0x5F, 0x5F}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6A, 0x4A}, {0x00, 0x6B, 0x4B}, + {0x00, 0x6C, 0x4C}, {0x00, 0x6D, 0x4D}, {0x00, 0x6E, 0x4E}, + {0x00, 0x6F, 0x4F}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7A, 0x5A}, + {0x00, 0x7B, 0x7B}, {0x00, 0x7C, 0x7C}, {0x00, 0x7D, 0x7D}, + {0x00, 0x7E, 0x7E}, {0x00, 0x7F, 0x7F}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8A, 0x8A}, {0x00, 0x8B, 0x8B}, {0x00, 0x8C, 0x8C}, + {0x00, 0x8D, 0x8D}, {0x00, 0x8E, 0x8E}, {0x00, 0x8F, 0x8F}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9A, 0x9A}, {0x00, 0x9B, 0x9B}, + {0x00, 0x9C, 0x9C}, {0x00, 0x9D, 0x9D}, {0x00, 0x9E, 0x9E}, + {0x00, 0x9F, 0x9F}, {0x00, 0xA0, 0xA0}, {0x00, 0xA1, 0xA1}, + {0x00, 0xA2, 0xA2}, {0x00, 0xA3, 0xA3}, {0x00, 0xA4, 0xA4}, + {0x00, 0xA5, 0xA5}, {0x00, 0xA6, 0xA6}, {0x00, 0xA7, 0xA7}, + {0x01, 0xB8, 0xA8}, {0x00, 0xA9, 0xA9}, {0x01, 0xBA, 0xAA}, + {0x00, 0xAB, 0xAB}, {0x00, 0xAC, 0xAC}, {0x00, 0xAD, 0xAD}, + {0x00, 0xAE, 0xAE}, {0x01, 0xBF, 0xAF}, {0x00, 0xB0, 0xB0}, + {0x00, 0xB1, 0xB1}, {0x00, 0xB2, 0xB2}, {0x00, 0xB3, 0xB3}, + {0x00, 0xB4, 0xB4}, {0x00, 0xB5, 0xB5}, {0x00, 0xB6, 0xB6}, + {0x00, 0xB7, 0xB7}, {0x00, 0xB8, 0xA8}, {0x00, 0xB9, 0xB9}, + {0x00, 0xBA, 0xAA}, {0x00, 0xBB, 0xBB}, {0x00, 0xBC, 0xBC}, + {0x00, 0xBD, 0xBD}, {0x00, 0xBE, 0xBE}, {0x00, 0xBF, 0xAF}, + {0x01, 0xE0, 0xC0}, {0x01, 0xE1, 0xC1}, {0x01, 0xE2, 0xC2}, + {0x01, 0xE3, 0xC3}, {0x01, 0xE4, 0xC4}, {0x01, 0xE5, 0xC5}, + {0x01, 0xE6, 0xC6}, {0x01, 0xE7, 0xC7}, {0x01, 0xE8, 0xC8}, + {0x01, 0xE9, 0xC9}, {0x01, 0xEA, 0xCA}, {0x01, 0xEB, 0xCB}, + {0x01, 0xEC, 0xCC}, {0x01, 0xED, 0xCD}, {0x01, 0xEE, 0xCE}, + {0x01, 0xEF, 0xCF}, {0x01, 0xF0, 0xD0}, {0x01, 0xF1, 0xD1}, + {0x01, 0xF2, 0xD2}, {0x01, 0xF3, 0xD3}, {0x01, 0xF4, 0xD4}, + {0x01, 0xF5, 0xD5}, {0x01, 0xF6, 0xD6}, {0x00, 0xD7, 0xD7}, + {0x01, 0xF8, 0xD8}, {0x01, 0xF9, 0xD9}, {0x01, 0xFA, 0xDA}, + {0x01, 0xFB, 0xDB}, {0x01, 0xFC, 0xDC}, {0x01, 0xFD, 0xDD}, + {0x01, 0xFE, 0xDE}, {0x00, 0xDF, 0xDF}, {0x00, 0xE0, 0xC0}, + {0x00, 0xE1, 0xC1}, {0x00, 0xE2, 0xC2}, {0x00, 0xE3, 0xC3}, + {0x00, 0xE4, 0xC4}, {0x00, 0xE5, 0xC5}, {0x00, 0xE6, 0xC6}, + {0x00, 0xE7, 0xC7}, {0x00, 0xE8, 0xC8}, {0x00, 0xE9, 0xC9}, + {0x00, 0xEA, 0xCA}, {0x00, 0xEB, 0xCB}, {0x00, 0xEC, 0xCC}, + {0x00, 0xED, 0xCD}, {0x00, 0xEE, 0xCE}, {0x00, 0xEF, 0xCF}, + {0x00, 0xF0, 0xD0}, {0x00, 0xF1, 0xD1}, {0x00, 0xF2, 0xD2}, + {0x00, 0xF3, 0xD3}, {0x00, 0xF4, 0xD4}, {0x00, 0xF5, 0xD5}, + {0x00, 0xF6, 0xD6}, {0x00, 0xF7, 0xF7}, {0x00, 0xF8, 0xD8}, + {0x00, 0xF9, 0xD9}, {0x00, 0xFA, 0xDA}, {0x00, 0xFB, 0xDB}, + {0x00, 0xFC, 0xDC}, {0x00, 0xFD, 0xDD}, {0x00, 0xFE, 0xDE}, + {0x00, 0xFF, 0xFF}}; static struct cs_info iso14_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x01, 0xa2, 0xa1 }, -{ 0x00, 0xa2, 0xa1 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x01, 0xa5, 0xa4 }, -{ 0x00, 0xa5, 0xa4 }, -{ 0x01, 0xa6, 0xab }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x01, 0xb8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x01, 0xba, 0xaa }, -{ 0x00, 0xab, 0xa6 }, -{ 0x01, 0xbc, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x01, 0xff, 0xaf }, -{ 0x01, 0xb1, 0xb0 }, -{ 0x00, 0xb1, 0xb0 }, -{ 0x01, 0xb3, 0xb2 }, -{ 0x00, 0xb3, 0xb2 }, -{ 0x01, 0xb5, 0xb4 }, -{ 0x00, 0xb5, 0xb4 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x01, 0xb9, 0xb7 }, -{ 0x00, 0xb8, 0xa8 }, -{ 0x00, 0xb9, 0xb6 }, -{ 0x00, 0xba, 0xaa }, -{ 0x01, 0xbf, 0xbb }, -{ 0x00, 0xbc, 0xac }, -{ 0x01, 0xbe, 0xbd }, -{ 0x00, 0xbe, 0xbd }, -{ 0x00, 0xbf, 0xbb }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x01, 0xf7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xd7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x01, 0xa2, 0xa1}, + {0x00, 0xa2, 0xa1}, {0x00, 0xa3, 0xa3}, {0x01, 0xa5, 0xa4}, + {0x00, 0xa5, 0xa4}, {0x01, 0xa6, 0xab}, {0x00, 0xa7, 0xa7}, + {0x01, 0xb8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x01, 0xba, 0xaa}, + {0x00, 0xab, 0xa6}, {0x01, 0xbc, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x01, 0xff, 0xaf}, {0x01, 0xb1, 0xb0}, + {0x00, 0xb1, 0xb0}, {0x01, 0xb3, 0xb2}, {0x00, 0xb3, 0xb2}, + {0x01, 0xb5, 0xb4}, {0x00, 0xb5, 0xb4}, {0x00, 0xb6, 0xb6}, + {0x01, 0xb9, 0xb7}, {0x00, 0xb8, 0xa8}, {0x00, 0xb9, 0xb6}, + {0x00, 0xba, 0xaa}, {0x01, 0xbf, 0xbb}, {0x00, 0xbc, 0xac}, + {0x01, 0xbe, 0xbd}, {0x00, 0xbe, 0xbd}, {0x00, 0xbf, 0xbb}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x01, 0xf7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xd7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xff}}; static struct cs_info iso15_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x01, 0xa8, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa6 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x01, 0xb8, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb4 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x01, 0xbd, 0xbc }, -{ 0x00, 0xbd, 0xbc }, -{ 0x01, 0xff, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x01, 0xe0, 0xc0 }, -{ 0x01, 0xe1, 0xc1 }, -{ 0x01, 0xe2, 0xc2 }, -{ 0x01, 0xe3, 0xc3 }, -{ 0x01, 0xe4, 0xc4 }, -{ 0x01, 0xe5, 0xc5 }, -{ 0x01, 0xe6, 0xc6 }, -{ 0x01, 0xe7, 0xc7 }, -{ 0x01, 0xe8, 0xc8 }, -{ 0x01, 0xe9, 0xc9 }, -{ 0x01, 0xea, 0xca }, -{ 0x01, 0xeb, 0xcb }, -{ 0x01, 0xec, 0xcc }, -{ 0x01, 0xed, 0xcd }, -{ 0x01, 0xee, 0xce }, -{ 0x01, 0xef, 0xcf }, -{ 0x01, 0xf0, 0xd0 }, -{ 0x01, 0xf1, 0xd1 }, -{ 0x01, 0xf2, 0xd2 }, -{ 0x01, 0xf3, 0xd3 }, -{ 0x01, 0xf4, 0xd4 }, -{ 0x01, 0xf5, 0xd5 }, -{ 0x01, 0xf6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x01, 0xf8, 0xd8 }, -{ 0x01, 0xf9, 0xd9 }, -{ 0x01, 0xfa, 0xda }, -{ 0x01, 0xfb, 0xdb }, -{ 0x01, 0xfc, 0xdc }, -{ 0x01, 0xfd, 0xdd }, -{ 0x01, 0xfe, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xc0 }, -{ 0x00, 0xe1, 0xc1 }, -{ 0x00, 0xe2, 0xc2 }, -{ 0x00, 0xe3, 0xc3 }, -{ 0x00, 0xe4, 0xc4 }, -{ 0x00, 0xe5, 0xc5 }, -{ 0x00, 0xe6, 0xc6 }, -{ 0x00, 0xe7, 0xc7 }, -{ 0x00, 0xe8, 0xc8 }, -{ 0x00, 0xe9, 0xc9 }, -{ 0x00, 0xea, 0xca }, -{ 0x00, 0xeb, 0xcb }, -{ 0x00, 0xec, 0xcc }, -{ 0x00, 0xed, 0xcd }, -{ 0x00, 0xee, 0xce }, -{ 0x00, 0xef, 0xcf }, -{ 0x00, 0xf0, 0xd0 }, -{ 0x00, 0xf1, 0xd1 }, -{ 0x00, 0xf2, 0xd2 }, -{ 0x00, 0xf3, 0xd3 }, -{ 0x00, 0xf4, 0xd4 }, -{ 0x00, 0xf5, 0xd5 }, -{ 0x00, 0xf6, 0xd6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xd8 }, -{ 0x00, 0xf9, 0xd9 }, -{ 0x00, 0xfa, 0xda }, -{ 0x00, 0xfb, 0xdb }, -{ 0x00, 0xfc, 0xdc }, -{ 0x00, 0xfd, 0xdd }, -{ 0x00, 0xfe, 0xde }, -{ 0x00, 0xff, 0xbe } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x01, 0xa8, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa6}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x01, 0xb8, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb4}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x01, 0xbd, 0xbc}, + {0x00, 0xbd, 0xbc}, {0x01, 0xff, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x01, 0xe0, 0xc0}, {0x01, 0xe1, 0xc1}, {0x01, 0xe2, 0xc2}, + {0x01, 0xe3, 0xc3}, {0x01, 0xe4, 0xc4}, {0x01, 0xe5, 0xc5}, + {0x01, 0xe6, 0xc6}, {0x01, 0xe7, 0xc7}, {0x01, 0xe8, 0xc8}, + {0x01, 0xe9, 0xc9}, {0x01, 0xea, 0xca}, {0x01, 0xeb, 0xcb}, + {0x01, 0xec, 0xcc}, {0x01, 0xed, 0xcd}, {0x01, 0xee, 0xce}, + {0x01, 0xef, 0xcf}, {0x01, 0xf0, 0xd0}, {0x01, 0xf1, 0xd1}, + {0x01, 0xf2, 0xd2}, {0x01, 0xf3, 0xd3}, {0x01, 0xf4, 0xd4}, + {0x01, 0xf5, 0xd5}, {0x01, 0xf6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x01, 0xf8, 0xd8}, {0x01, 0xf9, 0xd9}, {0x01, 0xfa, 0xda}, + {0x01, 0xfb, 0xdb}, {0x01, 0xfc, 0xdc}, {0x01, 0xfd, 0xdd}, + {0x01, 0xfe, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xc0}, + {0x00, 0xe1, 0xc1}, {0x00, 0xe2, 0xc2}, {0x00, 0xe3, 0xc3}, + {0x00, 0xe4, 0xc4}, {0x00, 0xe5, 0xc5}, {0x00, 0xe6, 0xc6}, + {0x00, 0xe7, 0xc7}, {0x00, 0xe8, 0xc8}, {0x00, 0xe9, 0xc9}, + {0x00, 0xea, 0xca}, {0x00, 0xeb, 0xcb}, {0x00, 0xec, 0xcc}, + {0x00, 0xed, 0xcd}, {0x00, 0xee, 0xce}, {0x00, 0xef, 0xcf}, + {0x00, 0xf0, 0xd0}, {0x00, 0xf1, 0xd1}, {0x00, 0xf2, 0xd2}, + {0x00, 0xf3, 0xd3}, {0x00, 0xf4, 0xd4}, {0x00, 0xf5, 0xd5}, + {0x00, 0xf6, 0xd6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xd8}, + {0x00, 0xf9, 0xd9}, {0x00, 0xfa, 0xda}, {0x00, 0xfb, 0xdb}, + {0x00, 0xfc, 0xdc}, {0x00, 0xfd, 0xdd}, {0x00, 0xfe, 0xde}, + {0x00, 0xff, 0xbe}}; static struct cs_info iscii_devanagari_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x00, 0xc1, 0xc1 }, -{ 0x00, 0xc2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x00, 0xc4, 0xc4 }, -{ 0x00, 0xc5, 0xc5 }, -{ 0x00, 0xc6, 0xc6 }, -{ 0x00, 0xc7, 0xc7 }, -{ 0x00, 0xc8, 0xc8 }, -{ 0x00, 0xc9, 0xc9 }, -{ 0x00, 0xca, 0xca }, -{ 0x00, 0xcb, 0xcb }, -{ 0x00, 0xcc, 0xcc }, -{ 0x00, 0xcd, 0xcd }, -{ 0x00, 0xce, 0xce }, -{ 0x00, 0xcf, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x00, 0xd1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x00, 0xd3, 0xd3 }, -{ 0x00, 0xd4, 0xd4 }, -{ 0x00, 0xd5, 0xd5 }, -{ 0x00, 0xd6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x00, 0xd8, 0xd8 }, -{ 0x00, 0xd9, 0xd9 }, -{ 0x00, 0xda, 0xda }, -{ 0x00, 0xdb, 0xdb }, -{ 0x00, 0xdc, 0xdc }, -{ 0x00, 0xdd, 0xdd }, -{ 0x00, 0xde, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xe1 }, -{ 0x00, 0xe2, 0xe2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xe4 }, -{ 0x00, 0xe5, 0xe5 }, -{ 0x00, 0xe6, 0xe6 }, -{ 0x00, 0xe7, 0xe7 }, -{ 0x00, 0xe8, 0xe8 }, -{ 0x00, 0xe9, 0xe9 }, -{ 0x00, 0xea, 0xea }, -{ 0x00, 0xeb, 0xeb }, -{ 0x00, 0xec, 0xec }, -{ 0x00, 0xed, 0xed }, -{ 0x00, 0xee, 0xee }, -{ 0x00, 0xef, 0xef }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xf1 }, -{ 0x00, 0xf2, 0xf2 }, -{ 0x00, 0xf3, 0xf3 }, -{ 0x00, 0xf4, 0xf4 }, -{ 0x00, 0xf5, 0xf5 }, -{ 0x00, 0xf6, 0xf6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xf8 }, -{ 0x00, 0xf9, 0xf9 }, -{ 0x00, 0xfa, 0xfa }, -{ 0x00, 0xfb, 0xfb }, -{ 0x00, 0xfc, 0xfc }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xfe }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x00, 0xc1, 0xc1}, {0x00, 0xc2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x00, 0xc4, 0xc4}, {0x00, 0xc5, 0xc5}, + {0x00, 0xc6, 0xc6}, {0x00, 0xc7, 0xc7}, {0x00, 0xc8, 0xc8}, + {0x00, 0xc9, 0xc9}, {0x00, 0xca, 0xca}, {0x00, 0xcb, 0xcb}, + {0x00, 0xcc, 0xcc}, {0x00, 0xcd, 0xcd}, {0x00, 0xce, 0xce}, + {0x00, 0xcf, 0xcf}, {0x00, 0xd0, 0xd0}, {0x00, 0xd1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x00, 0xd3, 0xd3}, {0x00, 0xd4, 0xd4}, + {0x00, 0xd5, 0xd5}, {0x00, 0xd6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x00, 0xd8, 0xd8}, {0x00, 0xd9, 0xd9}, {0x00, 0xda, 0xda}, + {0x00, 0xdb, 0xdb}, {0x00, 0xdc, 0xdc}, {0x00, 0xdd, 0xdd}, + {0x00, 0xde, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xe1}, {0x00, 0xe2, 0xe2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xe4}, {0x00, 0xe5, 0xe5}, {0x00, 0xe6, 0xe6}, + {0x00, 0xe7, 0xe7}, {0x00, 0xe8, 0xe8}, {0x00, 0xe9, 0xe9}, + {0x00, 0xea, 0xea}, {0x00, 0xeb, 0xeb}, {0x00, 0xec, 0xec}, + {0x00, 0xed, 0xed}, {0x00, 0xee, 0xee}, {0x00, 0xef, 0xef}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xf1}, {0x00, 0xf2, 0xf2}, + {0x00, 0xf3, 0xf3}, {0x00, 0xf4, 0xf4}, {0x00, 0xf5, 0xf5}, + {0x00, 0xf6, 0xf6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xf8}, + {0x00, 0xf9, 0xf9}, {0x00, 0xfa, 0xfa}, {0x00, 0xfb, 0xfb}, + {0x00, 0xfc, 0xfc}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xfe}, + {0x00, 0xff, 0xff}}; static struct cs_info tis620_tbl[] = { -{ 0x00, 0x00, 0x00 }, -{ 0x00, 0x01, 0x01 }, -{ 0x00, 0x02, 0x02 }, -{ 0x00, 0x03, 0x03 }, -{ 0x00, 0x04, 0x04 }, -{ 0x00, 0x05, 0x05 }, -{ 0x00, 0x06, 0x06 }, -{ 0x00, 0x07, 0x07 }, -{ 0x00, 0x08, 0x08 }, -{ 0x00, 0x09, 0x09 }, -{ 0x00, 0x0a, 0x0a }, -{ 0x00, 0x0b, 0x0b }, -{ 0x00, 0x0c, 0x0c }, -{ 0x00, 0x0d, 0x0d }, -{ 0x00, 0x0e, 0x0e }, -{ 0x00, 0x0f, 0x0f }, -{ 0x00, 0x10, 0x10 }, -{ 0x00, 0x11, 0x11 }, -{ 0x00, 0x12, 0x12 }, -{ 0x00, 0x13, 0x13 }, -{ 0x00, 0x14, 0x14 }, -{ 0x00, 0x15, 0x15 }, -{ 0x00, 0x16, 0x16 }, -{ 0x00, 0x17, 0x17 }, -{ 0x00, 0x18, 0x18 }, -{ 0x00, 0x19, 0x19 }, -{ 0x00, 0x1a, 0x1a }, -{ 0x00, 0x1b, 0x1b }, -{ 0x00, 0x1c, 0x1c }, -{ 0x00, 0x1d, 0x1d }, -{ 0x00, 0x1e, 0x1e }, -{ 0x00, 0x1f, 0x1f }, -{ 0x00, 0x20, 0x20 }, -{ 0x00, 0x21, 0x21 }, -{ 0x00, 0x22, 0x22 }, -{ 0x00, 0x23, 0x23 }, -{ 0x00, 0x24, 0x24 }, -{ 0x00, 0x25, 0x25 }, -{ 0x00, 0x26, 0x26 }, -{ 0x00, 0x27, 0x27 }, -{ 0x00, 0x28, 0x28 }, -{ 0x00, 0x29, 0x29 }, -{ 0x00, 0x2a, 0x2a }, -{ 0x00, 0x2b, 0x2b }, -{ 0x00, 0x2c, 0x2c }, -{ 0x00, 0x2d, 0x2d }, -{ 0x00, 0x2e, 0x2e }, -{ 0x00, 0x2f, 0x2f }, -{ 0x00, 0x30, 0x30 }, -{ 0x00, 0x31, 0x31 }, -{ 0x00, 0x32, 0x32 }, -{ 0x00, 0x33, 0x33 }, -{ 0x00, 0x34, 0x34 }, -{ 0x00, 0x35, 0x35 }, -{ 0x00, 0x36, 0x36 }, -{ 0x00, 0x37, 0x37 }, -{ 0x00, 0x38, 0x38 }, -{ 0x00, 0x39, 0x39 }, -{ 0x00, 0x3a, 0x3a }, -{ 0x00, 0x3b, 0x3b }, -{ 0x00, 0x3c, 0x3c }, -{ 0x00, 0x3d, 0x3d }, -{ 0x00, 0x3e, 0x3e }, -{ 0x00, 0x3f, 0x3f }, -{ 0x00, 0x40, 0x40 }, -{ 0x01, 0x61, 0x41 }, -{ 0x01, 0x62, 0x42 }, -{ 0x01, 0x63, 0x43 }, -{ 0x01, 0x64, 0x44 }, -{ 0x01, 0x65, 0x45 }, -{ 0x01, 0x66, 0x46 }, -{ 0x01, 0x67, 0x47 }, -{ 0x01, 0x68, 0x48 }, -{ 0x01, 0x69, 0x49 }, -{ 0x01, 0x6a, 0x4a }, -{ 0x01, 0x6b, 0x4b }, -{ 0x01, 0x6c, 0x4c }, -{ 0x01, 0x6d, 0x4d }, -{ 0x01, 0x6e, 0x4e }, -{ 0x01, 0x6f, 0x4f }, -{ 0x01, 0x70, 0x50 }, -{ 0x01, 0x71, 0x51 }, -{ 0x01, 0x72, 0x52 }, -{ 0x01, 0x73, 0x53 }, -{ 0x01, 0x74, 0x54 }, -{ 0x01, 0x75, 0x55 }, -{ 0x01, 0x76, 0x56 }, -{ 0x01, 0x77, 0x57 }, -{ 0x01, 0x78, 0x58 }, -{ 0x01, 0x79, 0x59 }, -{ 0x01, 0x7a, 0x5a }, -{ 0x00, 0x5b, 0x5b }, -{ 0x00, 0x5c, 0x5c }, -{ 0x00, 0x5d, 0x5d }, -{ 0x00, 0x5e, 0x5e }, -{ 0x00, 0x5f, 0x5f }, -{ 0x00, 0x60, 0x60 }, -{ 0x00, 0x61, 0x41 }, -{ 0x00, 0x62, 0x42 }, -{ 0x00, 0x63, 0x43 }, -{ 0x00, 0x64, 0x44 }, -{ 0x00, 0x65, 0x45 }, -{ 0x00, 0x66, 0x46 }, -{ 0x00, 0x67, 0x47 }, -{ 0x00, 0x68, 0x48 }, -{ 0x00, 0x69, 0x49 }, -{ 0x00, 0x6a, 0x4a }, -{ 0x00, 0x6b, 0x4b }, -{ 0x00, 0x6c, 0x4c }, -{ 0x00, 0x6d, 0x4d }, -{ 0x00, 0x6e, 0x4e }, -{ 0x00, 0x6f, 0x4f }, -{ 0x00, 0x70, 0x50 }, -{ 0x00, 0x71, 0x51 }, -{ 0x00, 0x72, 0x52 }, -{ 0x00, 0x73, 0x53 }, -{ 0x00, 0x74, 0x54 }, -{ 0x00, 0x75, 0x55 }, -{ 0x00, 0x76, 0x56 }, -{ 0x00, 0x77, 0x57 }, -{ 0x00, 0x78, 0x58 }, -{ 0x00, 0x79, 0x59 }, -{ 0x00, 0x7a, 0x5a }, -{ 0x00, 0x7b, 0x7b }, -{ 0x00, 0x7c, 0x7c }, -{ 0x00, 0x7d, 0x7d }, -{ 0x00, 0x7e, 0x7e }, -{ 0x00, 0x7f, 0x7f }, -{ 0x00, 0x80, 0x80 }, -{ 0x00, 0x81, 0x81 }, -{ 0x00, 0x82, 0x82 }, -{ 0x00, 0x83, 0x83 }, -{ 0x00, 0x84, 0x84 }, -{ 0x00, 0x85, 0x85 }, -{ 0x00, 0x86, 0x86 }, -{ 0x00, 0x87, 0x87 }, -{ 0x00, 0x88, 0x88 }, -{ 0x00, 0x89, 0x89 }, -{ 0x00, 0x8a, 0x8a }, -{ 0x00, 0x8b, 0x8b }, -{ 0x00, 0x8c, 0x8c }, -{ 0x00, 0x8d, 0x8d }, -{ 0x00, 0x8e, 0x8e }, -{ 0x00, 0x8f, 0x8f }, -{ 0x00, 0x90, 0x90 }, -{ 0x00, 0x91, 0x91 }, -{ 0x00, 0x92, 0x92 }, -{ 0x00, 0x93, 0x93 }, -{ 0x00, 0x94, 0x94 }, -{ 0x00, 0x95, 0x95 }, -{ 0x00, 0x96, 0x96 }, -{ 0x00, 0x97, 0x97 }, -{ 0x00, 0x98, 0x98 }, -{ 0x00, 0x99, 0x99 }, -{ 0x00, 0x9a, 0x9a }, -{ 0x00, 0x9b, 0x9b }, -{ 0x00, 0x9c, 0x9c }, -{ 0x00, 0x9d, 0x9d }, -{ 0x00, 0x9e, 0x9e }, -{ 0x00, 0x9f, 0x9f }, -{ 0x00, 0xa0, 0xa0 }, -{ 0x00, 0xa1, 0xa1 }, -{ 0x00, 0xa2, 0xa2 }, -{ 0x00, 0xa3, 0xa3 }, -{ 0x00, 0xa4, 0xa4 }, -{ 0x00, 0xa5, 0xa5 }, -{ 0x00, 0xa6, 0xa6 }, -{ 0x00, 0xa7, 0xa7 }, -{ 0x00, 0xa8, 0xa8 }, -{ 0x00, 0xa9, 0xa9 }, -{ 0x00, 0xaa, 0xaa }, -{ 0x00, 0xab, 0xab }, -{ 0x00, 0xac, 0xac }, -{ 0x00, 0xad, 0xad }, -{ 0x00, 0xae, 0xae }, -{ 0x00, 0xaf, 0xaf }, -{ 0x00, 0xb0, 0xb0 }, -{ 0x00, 0xb1, 0xb1 }, -{ 0x00, 0xb2, 0xb2 }, -{ 0x00, 0xb3, 0xb3 }, -{ 0x00, 0xb4, 0xb4 }, -{ 0x00, 0xb5, 0xb5 }, -{ 0x00, 0xb6, 0xb6 }, -{ 0x00, 0xb7, 0xb7 }, -{ 0x00, 0xb8, 0xb8 }, -{ 0x00, 0xb9, 0xb9 }, -{ 0x00, 0xba, 0xba }, -{ 0x00, 0xbb, 0xbb }, -{ 0x00, 0xbc, 0xbc }, -{ 0x00, 0xbd, 0xbd }, -{ 0x00, 0xbe, 0xbe }, -{ 0x00, 0xbf, 0xbf }, -{ 0x00, 0xc0, 0xc0 }, -{ 0x00, 0xc1, 0xc1 }, -{ 0x00, 0xc2, 0xc2 }, -{ 0x00, 0xc3, 0xc3 }, -{ 0x00, 0xc4, 0xc4 }, -{ 0x00, 0xc5, 0xc5 }, -{ 0x00, 0xc6, 0xc6 }, -{ 0x00, 0xc7, 0xc7 }, -{ 0x00, 0xc8, 0xc8 }, -{ 0x00, 0xc9, 0xc9 }, -{ 0x00, 0xca, 0xca }, -{ 0x00, 0xcb, 0xcb }, -{ 0x00, 0xcc, 0xcc }, -{ 0x00, 0xcd, 0xcd }, -{ 0x00, 0xce, 0xce }, -{ 0x00, 0xcf, 0xcf }, -{ 0x00, 0xd0, 0xd0 }, -{ 0x00, 0xd1, 0xd1 }, -{ 0x00, 0xd2, 0xd2 }, -{ 0x00, 0xd3, 0xd3 }, -{ 0x00, 0xd4, 0xd4 }, -{ 0x00, 0xd5, 0xd5 }, -{ 0x00, 0xd6, 0xd6 }, -{ 0x00, 0xd7, 0xd7 }, -{ 0x00, 0xd8, 0xd8 }, -{ 0x00, 0xd9, 0xd9 }, -{ 0x00, 0xda, 0xda }, -{ 0x00, 0xdb, 0xdb }, -{ 0x00, 0xdc, 0xdc }, -{ 0x00, 0xdd, 0xdd }, -{ 0x00, 0xde, 0xde }, -{ 0x00, 0xdf, 0xdf }, -{ 0x00, 0xe0, 0xe0 }, -{ 0x00, 0xe1, 0xe1 }, -{ 0x00, 0xe2, 0xe2 }, -{ 0x00, 0xe3, 0xe3 }, -{ 0x00, 0xe4, 0xe4 }, -{ 0x00, 0xe5, 0xe5 }, -{ 0x00, 0xe6, 0xe6 }, -{ 0x00, 0xe7, 0xe7 }, -{ 0x00, 0xe8, 0xe8 }, -{ 0x00, 0xe9, 0xe9 }, -{ 0x00, 0xea, 0xea }, -{ 0x00, 0xeb, 0xeb }, -{ 0x00, 0xec, 0xec }, -{ 0x00, 0xed, 0xed }, -{ 0x00, 0xee, 0xee }, -{ 0x00, 0xef, 0xef }, -{ 0x00, 0xf0, 0xf0 }, -{ 0x00, 0xf1, 0xf1 }, -{ 0x00, 0xf2, 0xf2 }, -{ 0x00, 0xf3, 0xf3 }, -{ 0x00, 0xf4, 0xf4 }, -{ 0x00, 0xf5, 0xf5 }, -{ 0x00, 0xf6, 0xf6 }, -{ 0x00, 0xf7, 0xf7 }, -{ 0x00, 0xf8, 0xf8 }, -{ 0x00, 0xf9, 0xf9 }, -{ 0x00, 0xfa, 0xfa }, -{ 0x00, 0xfb, 0xfb }, -{ 0x00, 0xfc, 0xfc }, -{ 0x00, 0xfd, 0xfd }, -{ 0x00, 0xfe, 0xfe }, -{ 0x00, 0xff, 0xff } -}; + {0x00, 0x00, 0x00}, {0x00, 0x01, 0x01}, {0x00, 0x02, 0x02}, + {0x00, 0x03, 0x03}, {0x00, 0x04, 0x04}, {0x00, 0x05, 0x05}, + {0x00, 0x06, 0x06}, {0x00, 0x07, 0x07}, {0x00, 0x08, 0x08}, + {0x00, 0x09, 0x09}, {0x00, 0x0a, 0x0a}, {0x00, 0x0b, 0x0b}, + {0x00, 0x0c, 0x0c}, {0x00, 0x0d, 0x0d}, {0x00, 0x0e, 0x0e}, + {0x00, 0x0f, 0x0f}, {0x00, 0x10, 0x10}, {0x00, 0x11, 0x11}, + {0x00, 0x12, 0x12}, {0x00, 0x13, 0x13}, {0x00, 0x14, 0x14}, + {0x00, 0x15, 0x15}, {0x00, 0x16, 0x16}, {0x00, 0x17, 0x17}, + {0x00, 0x18, 0x18}, {0x00, 0x19, 0x19}, {0x00, 0x1a, 0x1a}, + {0x00, 0x1b, 0x1b}, {0x00, 0x1c, 0x1c}, {0x00, 0x1d, 0x1d}, + {0x00, 0x1e, 0x1e}, {0x00, 0x1f, 0x1f}, {0x00, 0x20, 0x20}, + {0x00, 0x21, 0x21}, {0x00, 0x22, 0x22}, {0x00, 0x23, 0x23}, + {0x00, 0x24, 0x24}, {0x00, 0x25, 0x25}, {0x00, 0x26, 0x26}, + {0x00, 0x27, 0x27}, {0x00, 0x28, 0x28}, {0x00, 0x29, 0x29}, + {0x00, 0x2a, 0x2a}, {0x00, 0x2b, 0x2b}, {0x00, 0x2c, 0x2c}, + {0x00, 0x2d, 0x2d}, {0x00, 0x2e, 0x2e}, {0x00, 0x2f, 0x2f}, + {0x00, 0x30, 0x30}, {0x00, 0x31, 0x31}, {0x00, 0x32, 0x32}, + {0x00, 0x33, 0x33}, {0x00, 0x34, 0x34}, {0x00, 0x35, 0x35}, + {0x00, 0x36, 0x36}, {0x00, 0x37, 0x37}, {0x00, 0x38, 0x38}, + {0x00, 0x39, 0x39}, {0x00, 0x3a, 0x3a}, {0x00, 0x3b, 0x3b}, + {0x00, 0x3c, 0x3c}, {0x00, 0x3d, 0x3d}, {0x00, 0x3e, 0x3e}, + {0x00, 0x3f, 0x3f}, {0x00, 0x40, 0x40}, {0x01, 0x61, 0x41}, + {0x01, 0x62, 0x42}, {0x01, 0x63, 0x43}, {0x01, 0x64, 0x44}, + {0x01, 0x65, 0x45}, {0x01, 0x66, 0x46}, {0x01, 0x67, 0x47}, + {0x01, 0x68, 0x48}, {0x01, 0x69, 0x49}, {0x01, 0x6a, 0x4a}, + {0x01, 0x6b, 0x4b}, {0x01, 0x6c, 0x4c}, {0x01, 0x6d, 0x4d}, + {0x01, 0x6e, 0x4e}, {0x01, 0x6f, 0x4f}, {0x01, 0x70, 0x50}, + {0x01, 0x71, 0x51}, {0x01, 0x72, 0x52}, {0x01, 0x73, 0x53}, + {0x01, 0x74, 0x54}, {0x01, 0x75, 0x55}, {0x01, 0x76, 0x56}, + {0x01, 0x77, 0x57}, {0x01, 0x78, 0x58}, {0x01, 0x79, 0x59}, + {0x01, 0x7a, 0x5a}, {0x00, 0x5b, 0x5b}, {0x00, 0x5c, 0x5c}, + {0x00, 0x5d, 0x5d}, {0x00, 0x5e, 0x5e}, {0x00, 0x5f, 0x5f}, + {0x00, 0x60, 0x60}, {0x00, 0x61, 0x41}, {0x00, 0x62, 0x42}, + {0x00, 0x63, 0x43}, {0x00, 0x64, 0x44}, {0x00, 0x65, 0x45}, + {0x00, 0x66, 0x46}, {0x00, 0x67, 0x47}, {0x00, 0x68, 0x48}, + {0x00, 0x69, 0x49}, {0x00, 0x6a, 0x4a}, {0x00, 0x6b, 0x4b}, + {0x00, 0x6c, 0x4c}, {0x00, 0x6d, 0x4d}, {0x00, 0x6e, 0x4e}, + {0x00, 0x6f, 0x4f}, {0x00, 0x70, 0x50}, {0x00, 0x71, 0x51}, + {0x00, 0x72, 0x52}, {0x00, 0x73, 0x53}, {0x00, 0x74, 0x54}, + {0x00, 0x75, 0x55}, {0x00, 0x76, 0x56}, {0x00, 0x77, 0x57}, + {0x00, 0x78, 0x58}, {0x00, 0x79, 0x59}, {0x00, 0x7a, 0x5a}, + {0x00, 0x7b, 0x7b}, {0x00, 0x7c, 0x7c}, {0x00, 0x7d, 0x7d}, + {0x00, 0x7e, 0x7e}, {0x00, 0x7f, 0x7f}, {0x00, 0x80, 0x80}, + {0x00, 0x81, 0x81}, {0x00, 0x82, 0x82}, {0x00, 0x83, 0x83}, + {0x00, 0x84, 0x84}, {0x00, 0x85, 0x85}, {0x00, 0x86, 0x86}, + {0x00, 0x87, 0x87}, {0x00, 0x88, 0x88}, {0x00, 0x89, 0x89}, + {0x00, 0x8a, 0x8a}, {0x00, 0x8b, 0x8b}, {0x00, 0x8c, 0x8c}, + {0x00, 0x8d, 0x8d}, {0x00, 0x8e, 0x8e}, {0x00, 0x8f, 0x8f}, + {0x00, 0x90, 0x90}, {0x00, 0x91, 0x91}, {0x00, 0x92, 0x92}, + {0x00, 0x93, 0x93}, {0x00, 0x94, 0x94}, {0x00, 0x95, 0x95}, + {0x00, 0x96, 0x96}, {0x00, 0x97, 0x97}, {0x00, 0x98, 0x98}, + {0x00, 0x99, 0x99}, {0x00, 0x9a, 0x9a}, {0x00, 0x9b, 0x9b}, + {0x00, 0x9c, 0x9c}, {0x00, 0x9d, 0x9d}, {0x00, 0x9e, 0x9e}, + {0x00, 0x9f, 0x9f}, {0x00, 0xa0, 0xa0}, {0x00, 0xa1, 0xa1}, + {0x00, 0xa2, 0xa2}, {0x00, 0xa3, 0xa3}, {0x00, 0xa4, 0xa4}, + {0x00, 0xa5, 0xa5}, {0x00, 0xa6, 0xa6}, {0x00, 0xa7, 0xa7}, + {0x00, 0xa8, 0xa8}, {0x00, 0xa9, 0xa9}, {0x00, 0xaa, 0xaa}, + {0x00, 0xab, 0xab}, {0x00, 0xac, 0xac}, {0x00, 0xad, 0xad}, + {0x00, 0xae, 0xae}, {0x00, 0xaf, 0xaf}, {0x00, 0xb0, 0xb0}, + {0x00, 0xb1, 0xb1}, {0x00, 0xb2, 0xb2}, {0x00, 0xb3, 0xb3}, + {0x00, 0xb4, 0xb4}, {0x00, 0xb5, 0xb5}, {0x00, 0xb6, 0xb6}, + {0x00, 0xb7, 0xb7}, {0x00, 0xb8, 0xb8}, {0x00, 0xb9, 0xb9}, + {0x00, 0xba, 0xba}, {0x00, 0xbb, 0xbb}, {0x00, 0xbc, 0xbc}, + {0x00, 0xbd, 0xbd}, {0x00, 0xbe, 0xbe}, {0x00, 0xbf, 0xbf}, + {0x00, 0xc0, 0xc0}, {0x00, 0xc1, 0xc1}, {0x00, 0xc2, 0xc2}, + {0x00, 0xc3, 0xc3}, {0x00, 0xc4, 0xc4}, {0x00, 0xc5, 0xc5}, + {0x00, 0xc6, 0xc6}, {0x00, 0xc7, 0xc7}, {0x00, 0xc8, 0xc8}, + {0x00, 0xc9, 0xc9}, {0x00, 0xca, 0xca}, {0x00, 0xcb, 0xcb}, + {0x00, 0xcc, 0xcc}, {0x00, 0xcd, 0xcd}, {0x00, 0xce, 0xce}, + {0x00, 0xcf, 0xcf}, {0x00, 0xd0, 0xd0}, {0x00, 0xd1, 0xd1}, + {0x00, 0xd2, 0xd2}, {0x00, 0xd3, 0xd3}, {0x00, 0xd4, 0xd4}, + {0x00, 0xd5, 0xd5}, {0x00, 0xd6, 0xd6}, {0x00, 0xd7, 0xd7}, + {0x00, 0xd8, 0xd8}, {0x00, 0xd9, 0xd9}, {0x00, 0xda, 0xda}, + {0x00, 0xdb, 0xdb}, {0x00, 0xdc, 0xdc}, {0x00, 0xdd, 0xdd}, + {0x00, 0xde, 0xde}, {0x00, 0xdf, 0xdf}, {0x00, 0xe0, 0xe0}, + {0x00, 0xe1, 0xe1}, {0x00, 0xe2, 0xe2}, {0x00, 0xe3, 0xe3}, + {0x00, 0xe4, 0xe4}, {0x00, 0xe5, 0xe5}, {0x00, 0xe6, 0xe6}, + {0x00, 0xe7, 0xe7}, {0x00, 0xe8, 0xe8}, {0x00, 0xe9, 0xe9}, + {0x00, 0xea, 0xea}, {0x00, 0xeb, 0xeb}, {0x00, 0xec, 0xec}, + {0x00, 0xed, 0xed}, {0x00, 0xee, 0xee}, {0x00, 0xef, 0xef}, + {0x00, 0xf0, 0xf0}, {0x00, 0xf1, 0xf1}, {0x00, 0xf2, 0xf2}, + {0x00, 0xf3, 0xf3}, {0x00, 0xf4, 0xf4}, {0x00, 0xf5, 0xf5}, + {0x00, 0xf6, 0xf6}, {0x00, 0xf7, 0xf7}, {0x00, 0xf8, 0xf8}, + {0x00, 0xf9, 0xf9}, {0x00, 0xfa, 0xfa}, {0x00, 0xfb, 0xfb}, + {0x00, 0xfc, 0xfc}, {0x00, 0xfd, 0xfd}, {0x00, 0xfe, 0xfe}, + {0x00, 0xff, 0xff}}; struct enc_entry { - const char * enc_name; - struct cs_info * cs_table; + const char* enc_name; + struct cs_info* cs_table; }; static struct enc_entry encds[] = { - {"iso88591",iso1_tbl}, //ISO-8859-1 - {"iso88592",iso2_tbl}, //ISO-8859-2 - {"iso88593",iso3_tbl}, //ISO-8859-3 - {"iso88594",iso4_tbl}, //ISO-8859-4 - {"iso88595",iso5_tbl}, //ISO-8859-5 - {"iso88596",iso6_tbl}, //ISO-8859-6 - {"iso88597",iso7_tbl}, //ISO-8859-7 - {"iso88598",iso8_tbl}, //ISO-8859-8 - {"iso88599",iso9_tbl}, //ISO-8859-9 - {"iso885910",iso10_tbl}, //ISO-8859-10 - {"tis620",tis620_tbl}, //TIS-620/ISO-8859-11 - {"tis6202533",tis620_tbl}, //TIS-620/ISO-8859-11 - {"iso885911",tis620_tbl}, //TIS-620/ISO-8859-11 - {"iso885913", iso13_tbl}, //ISO-8859-13 - {"iso885914", iso14_tbl}, //ISO-8859-14 - {"iso885915", iso15_tbl}, //ISO-8859-15 - {"koi8r",koi8r_tbl}, //KOI8-R - {"koi8u",koi8u_tbl}, //KOI8-U - {"cp1251",cp1251_tbl}, //CP-1251 - {"microsoftcp1251",cp1251_tbl}, //microsoft-cp1251 - {"xisciias", iscii_devanagari_tbl}, //x-iscii-as - {"isciidevanagari", iscii_devanagari_tbl} //ISCII-DEVANAGARI + {"iso88591", iso1_tbl}, // ISO-8859-1 + {"iso88592", iso2_tbl}, // ISO-8859-2 + {"iso88593", iso3_tbl}, // ISO-8859-3 + {"iso88594", iso4_tbl}, // ISO-8859-4 + {"iso88595", iso5_tbl}, // ISO-8859-5 + {"iso88596", iso6_tbl}, // ISO-8859-6 + {"iso88597", iso7_tbl}, // ISO-8859-7 + {"iso88598", iso8_tbl}, // ISO-8859-8 + {"iso88599", iso9_tbl}, // ISO-8859-9 + {"iso885910", iso10_tbl}, // ISO-8859-10 + {"tis620", tis620_tbl}, // TIS-620/ISO-8859-11 + {"tis6202533", tis620_tbl}, // TIS-620/ISO-8859-11 + {"iso885911", tis620_tbl}, // TIS-620/ISO-8859-11 + {"iso885913", iso13_tbl}, // ISO-8859-13 + {"iso885914", iso14_tbl}, // ISO-8859-14 + {"iso885915", iso15_tbl}, // ISO-8859-15 + {"koi8r", koi8r_tbl}, // KOI8-R + {"koi8u", koi8u_tbl}, // KOI8-U + {"cp1251", cp1251_tbl}, // CP-1251 + {"microsoftcp1251", cp1251_tbl}, // microsoft-cp1251 + {"xisciias", iscii_devanagari_tbl}, // x-iscii-as + {"isciidevanagari", iscii_devanagari_tbl} // ISCII-DEVANAGARI }; /* map to lower case and remove non alphanumeric chars */ -static void toAsciiLowerAndRemoveNonAlphanumeric( const char* pName, char* pBuf ) -{ - while ( *pName ) - { - /* A-Z */ - if ( (*pName >= 0x41) && (*pName <= 0x5A) ) - { - *pBuf = (*pName)+0x20; /* toAsciiLower */ - pBuf++; - } - /* a-z, 0-9 */ - else if ( ((*pName >= 0x61) && (*pName <= 0x7A)) || - ((*pName >= 0x30) && (*pName <= 0x39)) ) - { - *pBuf = *pName; - pBuf++; - } - - pName++; +static void toAsciiLowerAndRemoveNonAlphanumeric(const char* pName, + char* pBuf) { + while (*pName) { + /* A-Z */ + if ((*pName >= 0x41) && (*pName <= 0x5A)) { + *pBuf = (*pName) + 0x20; /* toAsciiLower */ + pBuf++; + } + /* a-z, 0-9 */ + else if (((*pName >= 0x61) && (*pName <= 0x7A)) || + ((*pName >= 0x30) && (*pName <= 0x39))) { + *pBuf = *pName; + pBuf++; } - *pBuf = '\0'; + pName++; + } + + *pBuf = '\0'; } -struct cs_info * get_current_cs(const char * es) { - char *normalized_encoding = new char[strlen(es)+1]; +struct cs_info* get_current_cs(const char* es) { + char* normalized_encoding = new char[strlen(es) + 1]; toAsciiLowerAndRemoveNonAlphanumeric(es, normalized_encoding); - struct cs_info * ccs = NULL; + struct cs_info* ccs = NULL; int n = sizeof(encds) / sizeof(encds[0]); for (int i = 0; i < n; i++) { - if (strcmp(normalized_encoding,encds[i].enc_name) == 0) { + if (strcmp(normalized_encoding, encds[i].enc_name) == 0) { ccs = encds[i].cs_table; break; } @@ -5480,7 +2473,9 @@ struct cs_info * get_current_cs(const char * es) { delete[] normalized_encoding; if (!ccs) { - HUNSPELL_WARNING(stderr, "error: unknown encoding %s: using %s as fallback\n", es, encds[0].enc_name); + HUNSPELL_WARNING(stderr, + "error: unknown encoding %s: using %s as fallback\n", es, + encds[0].enc_name); ccs = encds[0].cs_table; } @@ -5490,8 +2485,8 @@ struct cs_info * get_current_cs(const char * es) { // XXX This function was rewritten for mozilla. Instead of storing the // conversion tables static in this file, create them when needed // with help the mozilla backend. -struct cs_info * get_current_cs(const char * es) { - struct cs_info *ccs = new cs_info[256]; +struct cs_info* get_current_cs(const char* es) { + struct cs_info* ccs = new cs_info[256]; // Initialze the array with dummy data so that we wouldn't need // to return null in case of failures. for (int i = 0; i <= 0xff; ++i) { @@ -5500,29 +2495,23 @@ struct cs_info * get_current_cs(const char * es) { ccs[i].cupper = i; } - - nsCOMPtr encoder; - nsCOMPtr decoder; + nsCOMPtr encoder; + nsCOMPtr decoder; nsresult rv; - nsCOMPtr ccm = do_GetService(kCharsetConverterManagerCID, &rv); - if (NS_FAILED(rv)) - return ccs; - rv = ccm->GetUnicodeEncoder(es, getter_AddRefs(encoder)); - if (NS_FAILED(rv)) - return ccs; - encoder->SetOutputErrorBehavior(encoder->kOnError_Signal, nsnull, '?'); - rv = ccm->GetUnicodeDecoder(es, getter_AddRefs(decoder)); - if (NS_FAILED(rv)) + nsAutoCString label(es); + nsAutoCString encoding; + if (!EncodingUtils::FindEncodingForLabelNoReplacement(label, encoding)) { return ccs; + } + encoder = EncodingUtils::EncoderForEncoding(encoding); + decoder = EncodingUtils::DecoderForEncoding(encoding); + encoder->SetOutputErrorBehavior(encoder->kOnError_Signal, nullptr, '?'); decoder->SetInputErrorBehavior(decoder->kOnError_Signal); - if (NS_FAILED(rv)) - return ccs; - for (unsigned int i = 0; i <= 0xff; ++i) { - PRBool success = PR_FALSE; + bool success = false; // We want to find the upper/lowercase equivalents of each byte // in this 1-byte character encoding. Call our encoding/decoding // APIs separately for each byte since they may reject some of the @@ -5532,8 +2521,8 @@ struct cs_info * get_current_cs(const char * es) { if (i == 0) break; const char source = char(i); - PRUnichar uni, uniCased; - PRInt32 charLength = 1, uniLength = 1; + char16_t uni, uniCased; + int32_t charLength = 1, uniLength = 1; rv = decoder->Convert(&source, &charLength, &uni, &uniLength); // Explicitly check NS_OK because we don't want to allow @@ -5554,7 +2543,7 @@ struct cs_info * get_current_cs(const char * es) { if (rv != NS_OK || charLength != 1 || uniLength != 1) break; - success = PR_TRUE; + success = true; } while (0); if (success) { @@ -5576,63 +2565,48 @@ struct cs_info * get_current_cs(const char * es) { #endif // primitive isalpha() replacement for tokenization -char * get_casechars(const char * enc) { - struct cs_info * csconv = get_current_cs(enc); - char expw[MAXLNLEN]; - char * p = expw; - for (int i = 0; i <= 255; i++) { - if ((csconv[i].cupper != csconv[i].clower)) { - *p = (char) i; - p++; - } +char* get_casechars(const char* enc) { + struct cs_info* csconv = get_current_cs(enc); + char expw[MAXLNLEN]; + char* p = expw; + for (int i = 0; i <= 255; i++) { + if (cupper(csconv, i) != clower(csconv, i)) { + *p = static_cast(i); + p++; } - *p = '\0'; + } + *p = '\0'; #ifdef MOZILLA_CLIENT - delete [] csconv; + delete[] csconv; #endif - return mystrdup(expw); + return mystrdup(expw); } // language to encoding default map struct lang_map { - const char * lang; + const char* lang; int num; }; -static struct lang_map lang2enc[] = { -{"ar", LANG_ar}, -{"az", LANG_az}, -{"az_AZ", LANG_az}, // for back-compatibility -{"bg", LANG_bg}, -{"ca", LANG_ca}, -{"cs", LANG_cs}, -{"da", LANG_da}, -{"de", LANG_de}, -{"el", LANG_el}, -{"en", LANG_en}, -{"es", LANG_es}, -{"eu", LANG_eu}, -{"gl", LANG_gl}, -{"fr", LANG_fr}, -{"hr", LANG_hr}, -{"hu", LANG_hu}, -{"hu_HU", LANG_hu}, // for back-compatibility -{"it", LANG_it}, -{"la", LANG_la}, -{"lv", LANG_lv}, -{"nl", LANG_nl}, -{"pl", LANG_pl}, -{"pt", LANG_pt}, -{"sv", LANG_sv}, -{"tr", LANG_tr}, -{"tr_TR", LANG_tr}, // for back-compatibility -{"ru", LANG_ru}, -{"uk", LANG_uk} -}; - - -int get_lang_num(const char * lang) { +static struct lang_map lang2enc[] = + {{"ar", LANG_ar}, {"az", LANG_az}, + {"az_AZ", LANG_az}, // for back-compatibility + {"bg", LANG_bg}, {"ca", LANG_ca}, + {"cs", LANG_cs}, {"da", LANG_da}, + {"de", LANG_de}, {"el", LANG_el}, + {"en", LANG_en}, {"es", LANG_es}, + {"eu", LANG_eu}, {"gl", LANG_gl}, + {"fr", LANG_fr}, {"hr", LANG_hr}, + {"hu", LANG_hu}, {"hu_HU", LANG_hu}, // for back-compatibility + {"it", LANG_it}, {"la", LANG_la}, + {"lv", LANG_lv}, {"nl", LANG_nl}, + {"pl", LANG_pl}, {"pt", LANG_pt}, + {"sv", LANG_sv}, {"tr", LANG_tr}, + {"tr_TR", LANG_tr}, // for back-compatibility + {"ru", LANG_ru}, {"uk", LANG_uk}}; + +int get_lang_num(const char* lang) { int n = sizeof(lang2enc) / sizeof(lang2enc[0]); for (int i = 0; i < n; i++) { if (strcmp(lang, lang2enc[i].lang) == 0) { @@ -5646,72 +2620,72 @@ int get_lang_num(const char * lang) { #ifndef MOZILLA_CLIENT int initialize_utf_tbl() { utf_tbl_count++; - if (utf_tbl) return 0; - utf_tbl = (unicode_info2 *) malloc(CONTSIZE * sizeof(unicode_info2)); + if (utf_tbl) + return 0; + utf_tbl = (unicode_info2*)malloc(CONTSIZE * sizeof(unicode_info2)); if (utf_tbl) { size_t j; for (j = 0; j < CONTSIZE; j++) { utf_tbl[j].cletter = 0; - utf_tbl[j].clower = (unsigned short) j; - utf_tbl[j].cupper = (unsigned short) j; + utf_tbl[j].clower = (unsigned short)j; + utf_tbl[j].cupper = (unsigned short)j; } for (j = 0; j < UTF_LST_LEN; j++) { utf_tbl[utf_lst[j].c].cletter = 1; utf_tbl[utf_lst[j].c].clower = utf_lst[j].clower; utf_tbl[utf_lst[j].c].cupper = utf_lst[j].cupper; } - } else return 1; + } else + return 1; return 0; } #endif #endif void free_utf_tbl() { - if (utf_tbl_count > 0) utf_tbl_count--; + if (utf_tbl_count > 0) + utf_tbl_count--; if (utf_tbl && (utf_tbl_count == 0)) { free(utf_tbl); utf_tbl = NULL; } } -unsigned short unicodetoupper(unsigned short c, int langnum) -{ +unsigned short unicodetoupper(unsigned short c, int langnum) { // In Azeri and Turkish, I and i dictinct letters: // There are a dotless lower case i pair of upper `I', - // and an upper I with dot pair of lower `i'. + // and an upper I with dot pair of lower `i'. if (c == 0x0069 && ((langnum == LANG_az) || (langnum == LANG_tr))) return 0x0130; #ifdef OPENOFFICEORG return static_cast(u_toupper(c)); #else #ifdef MOZILLA_CLIENT - return ToUpperCase((PRUnichar) c); + return ToUpperCase((char16_t)c); #else return (utf_tbl) ? utf_tbl[c].cupper : c; #endif #endif } -unsigned short unicodetolower(unsigned short c, int langnum) -{ +unsigned short unicodetolower(unsigned short c, int langnum) { // In Azeri and Turkish, I and i dictinct letters: // There are a dotless lower case i pair of upper `I', - // and an upper I with dot pair of lower `i'. + // and an upper I with dot pair of lower `i'. if (c == 0x0049 && ((langnum == LANG_az) || (langnum == LANG_tr))) return 0x0131; #ifdef OPENOFFICEORG return static_cast(u_tolower(c)); #else #ifdef MOZILLA_CLIENT - return ToLowerCase((PRUnichar) c); + return ToLowerCase((char16_t)c); #else return (utf_tbl) ? utf_tbl[c].clower : c; #endif #endif } -int unicodeisalpha(unsigned short c) -{ +int unicodeisalpha(unsigned short c) { #ifdef OPENOFFICEORG return u_isalpha(c); #else @@ -5720,144 +2694,157 @@ int unicodeisalpha(unsigned short c) } /* get type of capitalization */ -int get_captype(char * word, int nl, cs_info * csconv) { - // now determine the capitalization type of the first nl letters - int ncap = 0; - int nneutral = 0; - int firstcap = 0; - if (csconv == NULL) return NOCAP; - for (char * q = word; *q != '\0'; q++) { - if (csconv[*((unsigned char *)q)].ccase) ncap++; - if (csconv[*((unsigned char *)q)].cupper == csconv[*((unsigned char *)q)].clower) nneutral++; - } - if (ncap) { - firstcap = csconv[*((unsigned char *) word)].ccase; - } +int get_captype(const std::string& word, cs_info* csconv) { + // now determine the capitalization type of the first nl letters + size_t ncap = 0; + size_t nneutral = 0; + size_t firstcap = 0; + if (csconv == NULL) + return NOCAP; + for (std::string::const_iterator q = word.begin(); q != word.end(); ++q) { + unsigned char nIndex = static_cast(*q); + if (ccase(csconv, nIndex)) + ncap++; + if (cupper(csconv, nIndex) == clower(csconv, nIndex)) + nneutral++; + } + if (ncap) { + unsigned char nIndex = static_cast(word[0]); + firstcap = csconv[nIndex].ccase; + } - // now finally set the captype - if (ncap == 0) { - return NOCAP; - } else if ((ncap == 1) && firstcap) { - return INITCAP; - } else if ((ncap == nl) || ((ncap + nneutral) == nl)) { - return ALLCAP; - } else if ((ncap > 1) && firstcap) { - return HUHINITCAP; - } - return HUHCAP; + // now finally set the captype + if (ncap == 0) { + return NOCAP; + } else if ((ncap == 1) && firstcap) { + return INITCAP; + } else if ((ncap == word.size()) || ((ncap + nneutral) == word.size())) { + return ALLCAP; + } else if ((ncap > 1) && firstcap) { + return HUHINITCAP; + } + return HUHCAP; } -int get_captype_utf8(w_char * word, int nl, int langnum) { - // now determine the capitalization type of the first nl letters - int ncap = 0; - int nneutral = 0; - int firstcap = 0; - unsigned short idx; - // don't check too long words - if (nl >= MAXWORDLEN) return 0; - // big Unicode character (non BMP area) - if (nl == -1) return NOCAP; - for (int i = 0; i < nl; i++) { - idx = (word[i].h << 8) + word[i].l; - if (idx != unicodetolower(idx, langnum)) ncap++; - if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) nneutral++; - } - if (ncap) { - idx = (word[0].h << 8) + word[0].l; - firstcap = (idx != unicodetolower(idx, langnum)); +int get_captype_utf8(const std::vector& word, int langnum) { + // now determine the capitalization type of the first nl letters + size_t ncap = 0; + size_t nneutral = 0; + size_t firstcap = 0; + for (size_t i = 0; i < word.size(); ++i) { + unsigned short idx = (word[i].h << 8) + word[i].l; + if (idx != unicodetolower(idx, langnum)) + ncap++; + if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) + nneutral++; + } + if (ncap) { + unsigned short idx = (word[0].h << 8) + word[0].l; + firstcap = (idx != unicodetolower(idx, langnum)); } - // now finally set the captype - if (ncap == 0) { - return NOCAP; - } else if ((ncap == 1) && firstcap) { - return INITCAP; - } else if ((ncap == nl) || ((ncap + nneutral) == nl)) { - return ALLCAP; - } else if ((ncap > 1) && firstcap) { - return HUHINITCAP; - } - return HUHCAP; + // now finally set the captype + if (ncap == 0) { + return NOCAP; + } else if ((ncap == 1) && firstcap) { + return INITCAP; + } else if ((ncap == word.size()) || ((ncap + nneutral) == word.size())) { + return ALLCAP; + } else if ((ncap > 1) && firstcap) { + return HUHINITCAP; + } + return HUHCAP; } - // strip all ignored characters in the string -void remove_ignored_chars_utf(char * word, unsigned short ignored_chars[], int ignored_len) -{ - w_char w[MAXWORDLEN]; - w_char w2[MAXWORDLEN]; - int i; - int j; - int len = u8_u16(w, MAXWORDLEN, word); - for (i = 0, j = 0; i < len; i++) { - if (!flag_bsearch(ignored_chars, ((unsigned short *) w)[i], ignored_len)) { - w2[j] = w[i]; - j++; - } - } - if (j < i) u16_u8(word, MAXWORDUTF8LEN, w2, j); +size_t remove_ignored_chars_utf(std::string& word, + const std::vector& ignored_chars) { + std::vector w; + std::vector w2; + u8_u16(w, word); + + for (size_t i = 0; i < w.size(); ++i) { + if (!std::binary_search(ignored_chars.begin(), + ignored_chars.end(), + w[i])) { + w2.push_back(w[i]); + } + } + + u16_u8(word, w2); + return w2.size(); +} + +namespace { +class is_any_of { + public: + is_any_of(const std::string& in) : chars(in) {} + + bool operator()(char c) { return chars.find(c) != std::string::npos; } + + private: + std::string chars; +}; } // strip all ignored characters in the string -void remove_ignored_chars(char * word, char * ignored_chars) -{ - for (char * p = word; *p != '\0'; p++) { - if (!strchr(ignored_chars, *p)) { - *word = *p; - word++; - } - } - *word = '\0'; +size_t remove_ignored_chars(std::string& word, + const std::string& ignored_chars) { + word.erase( + std::remove_if(word.begin(), word.end(), is_any_of(ignored_chars)), + word.end()); + return word.size(); } -int parse_string(char * line, char ** out, int ln) -{ - char * tp = line; - char * piece; - int i = 0; - int np = 0; - if (*out) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions\n", ln); - return 1; - } - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - *out = mystrdup(piece); - if (!*out) return 1; - np++; - break; - } - default: break; - } - i++; +int parse_string(char* line, char** out, int ln) { + char* tp = line; + char* piece; + int i = 0; + int np = 0; + if (*out) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions\n", ln); + return 1; + } + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + *out = mystrdup(piece); + if (!*out) + return 1; + np++; + break; + } + default: + break; } - // free(piece); - piece = mystrsep(&tp, 0); - } - if (np != 2) { - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", ln); - return 1; - } - return 0; + i++; + } + // free(piece); + piece = mystrsep(&tp, 0); + } + if (np != 2) { + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", ln); + return 1; + } + return 0; } -int parse_array(char * line, char ** out, unsigned short ** out_utf16, - int * out_utf16_len, int utf8, int ln) { - if (parse_string(line, out, ln)) return 1; - if (utf8) { - w_char w[MAXWORDLEN]; - int n = u8_u16(w, MAXWORDLEN, *out); - if (n > 0) { - flag_qsort((unsigned short *) w, 0, n); - *out_utf16 = (unsigned short *) malloc(n * sizeof(unsigned short)); - if (!*out_utf16) return 1; - memcpy(*out_utf16, w, n * sizeof(unsigned short)); - } - *out_utf16_len = n; - } - return 0; +bool parse_array(char* line, + char** out, + std::vector& out_utf16, + int utf8, + int ln) { + if (parse_string(line, out, ln)) + return false; + if (utf8) { + u8_u16(out_utf16, *out); + std::sort(out_utf16.begin(), out_utf16.end()); + } + return true; } diff --git a/src/spelling/hunspell/csutil.hxx b/src/spelling/hunspell/csutil.hxx index e034b53f..ce7091df 100644 --- a/src/spelling/hunspell/csutil.hxx +++ b/src/spelling/hunspell/csutil.hxx @@ -1,3 +1,76 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #ifndef __CSUTILHXX__ #define __CSUTILHXX__ @@ -5,112 +78,110 @@ // First some base level utility routines +#include +#include #include #include "w_char.hxx" #include "htypes.hxx" #ifdef MOZILLA_CLIENT -#include "nscore.h" // for mozalloc headers +#include "nscore.h" // for mozalloc headers #endif // casing -#define NOCAP 0 +#define NOCAP 0 #define INITCAP 1 -#define ALLCAP 2 -#define HUHCAP 3 -#define HUHINITCAP 4 +#define ALLCAP 2 +#define HUHCAP 3 +#define HUHINITCAP 4 // default encoding and keystring -#define SPELL_ENCODING "ISO8859-1" -#define SPELL_KEYSTRING "qwertyuiop|asdfghjkl|zxcvbnm" +#define SPELL_ENCODING "ISO8859-1" +#define SPELL_KEYSTRING "qwertyuiop|asdfghjkl|zxcvbnm" // default morphological fields -#define MORPH_STEM "st:" -#define MORPH_ALLOMORPH "al:" -#define MORPH_POS "po:" -#define MORPH_DERI_PFX "dp:" -#define MORPH_INFL_PFX "ip:" -#define MORPH_TERM_PFX "tp:" -#define MORPH_DERI_SFX "ds:" -#define MORPH_INFL_SFX "is:" -#define MORPH_TERM_SFX "ts:" -#define MORPH_SURF_PFX "sp:" -#define MORPH_FREQ "fr:" -#define MORPH_PHON "ph:" -#define MORPH_HYPH "hy:" -#define MORPH_PART "pa:" -#define MORPH_FLAG "fl:" -#define MORPH_HENTRY "_H:" -#define MORPH_TAG_LEN strlen(MORPH_STEM) +#define MORPH_STEM "st:" +#define MORPH_ALLOMORPH "al:" +#define MORPH_POS "po:" +#define MORPH_DERI_PFX "dp:" +#define MORPH_INFL_PFX "ip:" +#define MORPH_TERM_PFX "tp:" +#define MORPH_DERI_SFX "ds:" +#define MORPH_INFL_SFX "is:" +#define MORPH_TERM_SFX "ts:" +#define MORPH_SURF_PFX "sp:" +#define MORPH_FREQ "fr:" +#define MORPH_PHON "ph:" +#define MORPH_HYPH "hy:" +#define MORPH_PART "pa:" +#define MORPH_FLAG "fl:" +#define MORPH_HENTRY "_H:" +#define MORPH_TAG_LEN strlen(MORPH_STEM) #define MSEP_FLD ' ' #define MSEP_REC '\n' #define MSEP_ALT '\v' // default flags -#define DEFAULTFLAGS 65510 -#define FORBIDDENWORD 65510 +#define DEFAULTFLAGS 65510 +#define FORBIDDENWORD 65510 #define ONLYUPCASEFLAG 65511 // fopen or optional _wfopen to fix long pathname problem of WIN32 -LIBHUNSPELL_DLL_EXPORTED FILE * myfopen(const char * path, const char * mode); +LIBHUNSPELL_DLL_EXPORTED FILE* myfopen(const char* path, const char* mode); // convert UTF-16 characters to UTF-8 -LIBHUNSPELL_DLL_EXPORTED char * u16_u8(char * dest, int size, const w_char * src, int srclen); +LIBHUNSPELL_DLL_EXPORTED std::string& u16_u8(std::string& dest, + const std::vector& src); // convert UTF-8 characters to UTF-16 -LIBHUNSPELL_DLL_EXPORTED int u8_u16(w_char * dest, int size, const char * src); - -// sort 2-byte vector -LIBHUNSPELL_DLL_EXPORTED void flag_qsort(unsigned short flags[], int begin, int end); - -// binary search in 2-byte vector -LIBHUNSPELL_DLL_EXPORTED int flag_bsearch(unsigned short flags[], unsigned short flag, int right); +LIBHUNSPELL_DLL_EXPORTED int u8_u16(std::vector& dest, + const std::string& src); // remove end of line char(s) -LIBHUNSPELL_DLL_EXPORTED void mychomp(char * s); +LIBHUNSPELL_DLL_EXPORTED void mychomp(char* s); // duplicate string -LIBHUNSPELL_DLL_EXPORTED char * mystrdup(const char * s); +LIBHUNSPELL_DLL_EXPORTED char* mystrdup(const char* s); // strcat for limited length destination string -LIBHUNSPELL_DLL_EXPORTED char * mystrcat(char * dest, const char * st, int max); - -// duplicate reverse of string -LIBHUNSPELL_DLL_EXPORTED char * myrevstrdup(const char * s); +LIBHUNSPELL_DLL_EXPORTED char* mystrcat(char* dest, const char* st, int max); // parse into tokens with char delimiter -LIBHUNSPELL_DLL_EXPORTED char * mystrsep(char ** sptr, const char delim); -// parse into tokens with char delimiter -LIBHUNSPELL_DLL_EXPORTED char * mystrsep2(char ** sptr, const char delim); +LIBHUNSPELL_DLL_EXPORTED char* mystrsep(char** sptr, const char delim); -// parse into tokens with char delimiter -LIBHUNSPELL_DLL_EXPORTED char * mystrrep(char *, const char *, const char *); +// replace pat by rep in word and return word +LIBHUNSPELL_DLL_EXPORTED char* mystrrep(char* word, + const char* pat, + const char* rep); +LIBHUNSPELL_DLL_EXPORTED std::string& mystrrep(std::string& str, + const std::string& search, + const std::string& replace); // append s to ends of every lines in text -LIBHUNSPELL_DLL_EXPORTED void strlinecat(char * lines, const char * s); +LIBHUNSPELL_DLL_EXPORTED std::string& strlinecat(std::string& str, + const std::string& apd); // tokenize into lines with new line -LIBHUNSPELL_DLL_EXPORTED int line_tok(const char * text, char *** lines, char breakchar); +LIBHUNSPELL_DLL_EXPORTED int line_tok(const char* text, + char*** lines, + char breakchar); // tokenize into lines with new line and uniq in place -LIBHUNSPELL_DLL_EXPORTED char * line_uniq(char * text, char breakchar); -LIBHUNSPELL_DLL_EXPORTED char * line_uniq_app(char ** text, char breakchar); - -// change oldchar to newchar in place -LIBHUNSPELL_DLL_EXPORTED char * tr(char * text, char oldc, char newc); +LIBHUNSPELL_DLL_EXPORTED char* line_uniq(char* text, char breakchar); +LIBHUNSPELL_DLL_EXPORTED char* line_uniq_app(char** text, char breakchar); // reverse word -LIBHUNSPELL_DLL_EXPORTED int reverseword(char *); +LIBHUNSPELL_DLL_EXPORTED size_t reverseword(std::string& word); // reverse word -LIBHUNSPELL_DLL_EXPORTED int reverseword_utf(char *); +LIBHUNSPELL_DLL_EXPORTED size_t reverseword_utf(std::string&); // remove duplicates -LIBHUNSPELL_DLL_EXPORTED int uniqlist(char ** list, int n); +LIBHUNSPELL_DLL_EXPORTED int uniqlist(char** list, int n); // free character array list -LIBHUNSPELL_DLL_EXPORTED void freelist(char *** list, int n); +LIBHUNSPELL_DLL_EXPORTED void freelist(char*** list, int n); // character encoding information struct cs_info { @@ -121,103 +192,134 @@ struct cs_info { LIBHUNSPELL_DLL_EXPORTED int initialize_utf_tbl(); LIBHUNSPELL_DLL_EXPORTED void free_utf_tbl(); -LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetoupper(unsigned short c, int langnum); -LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetolower(unsigned short c, int langnum); +LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetoupper(unsigned short c, + int langnum); +LIBHUNSPELL_DLL_EXPORTED w_char upper_utf(w_char u, int langnum); +LIBHUNSPELL_DLL_EXPORTED w_char lower_utf(w_char u, int langnum); +LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetolower(unsigned short c, + int langnum); LIBHUNSPELL_DLL_EXPORTED int unicodeisalpha(unsigned short c); -LIBHUNSPELL_DLL_EXPORTED struct cs_info * get_current_cs(const char * es); +LIBHUNSPELL_DLL_EXPORTED struct cs_info* get_current_cs(const char* es); // get language identifiers of language codes -LIBHUNSPELL_DLL_EXPORTED int get_lang_num(const char * lang); +LIBHUNSPELL_DLL_EXPORTED int get_lang_num(const char* lang); // get characters of the given 8bit encoding with lower- and uppercase forms -LIBHUNSPELL_DLL_EXPORTED char * get_casechars(const char * enc); +LIBHUNSPELL_DLL_EXPORTED char* get_casechars(const char* enc); -// convert null terminated string to all caps using encoding -LIBHUNSPELL_DLL_EXPORTED void enmkallcap(char * d, const char * p, const char * encoding); +// convert std::string to all caps +LIBHUNSPELL_DLL_EXPORTED std::string& mkallcap(std::string& s, + const struct cs_info* csconv); -// convert null terminated string to all little using encoding -LIBHUNSPELL_DLL_EXPORTED void enmkallsmall(char * d, const char * p, const char * encoding); +// convert null terminated string to all little +LIBHUNSPELL_DLL_EXPORTED std::string& mkallsmall(std::string& s, + const struct cs_info* csconv); -// convert null terminated string to have initial capital using encoding -LIBHUNSPELL_DLL_EXPORTED void enmkinitcap(char * d, const char * p, const char * encoding); +// convert first letter of string to little +LIBHUNSPELL_DLL_EXPORTED std::string& mkinitsmall(std::string& s, + const struct cs_info* csconv); -// convert null terminated string to all caps -LIBHUNSPELL_DLL_EXPORTED void mkallcap(char * p, const struct cs_info * csconv); +// convert first letter of string to capital +LIBHUNSPELL_DLL_EXPORTED std::string& mkinitcap(std::string& s, + const struct cs_info* csconv); -// convert null terminated string to all little -LIBHUNSPELL_DLL_EXPORTED void mkallsmall(char * p, const struct cs_info * csconv); +// convert first letter of UTF-8 string to capital +LIBHUNSPELL_DLL_EXPORTED std::vector& +mkinitcap_utf(std::vector& u, int langnum); -// convert null terminated string to have initial capital -LIBHUNSPELL_DLL_EXPORTED void mkinitcap(char * p, const struct cs_info * csconv); +// convert UTF-8 string to little +LIBHUNSPELL_DLL_EXPORTED std::vector& +mkallsmall_utf(std::vector& u, int langnum); -// convert first nc characters of UTF-8 string to little -LIBHUNSPELL_DLL_EXPORTED void mkallsmall_utf(w_char * u, int nc, int langnum); +// convert first letter of UTF-8 string to little +LIBHUNSPELL_DLL_EXPORTED std::vector& +mkinitsmall_utf(std::vector& u, int langnum); -// convert first nc characters of UTF-8 string to capital -LIBHUNSPELL_DLL_EXPORTED void mkallcap_utf(w_char * u, int nc, int langnum); +// convert UTF-8 string to capital +LIBHUNSPELL_DLL_EXPORTED std::vector& +mkallcap_utf(std::vector& u, int langnum); // get type of capitalization -LIBHUNSPELL_DLL_EXPORTED int get_captype(char * q, int nl, cs_info *); +LIBHUNSPELL_DLL_EXPORTED int get_captype(const std::string& q, cs_info*); // get type of capitalization (UTF-8) -LIBHUNSPELL_DLL_EXPORTED int get_captype_utf8(w_char * q, int nl, int langnum); +LIBHUNSPELL_DLL_EXPORTED int get_captype_utf8(const std::vector& q, int langnum); // strip all ignored characters in the string -LIBHUNSPELL_DLL_EXPORTED void remove_ignored_chars_utf(char * word, unsigned short ignored_chars[], int ignored_len); +LIBHUNSPELL_DLL_EXPORTED size_t remove_ignored_chars_utf( + std::string& word, + const std::vector& ignored_chars); // strip all ignored characters in the string -LIBHUNSPELL_DLL_EXPORTED void remove_ignored_chars(char * word, char * ignored_chars); +LIBHUNSPELL_DLL_EXPORTED size_t remove_ignored_chars( + std::string& word, + const std::string& ignored_chars); + +LIBHUNSPELL_DLL_EXPORTED int parse_string(char* line, char** out, int ln); -LIBHUNSPELL_DLL_EXPORTED int parse_string(char * line, char ** out, int ln); +LIBHUNSPELL_DLL_EXPORTED bool parse_array(char* line, + char** out, + std::vector& out_utf16, + int utf8, + int ln); -LIBHUNSPELL_DLL_EXPORTED int parse_array(char * line, char ** out, unsigned short ** out_utf16, - int * out_utf16_len, int utf8, int ln); +LIBHUNSPELL_DLL_EXPORTED int fieldlen(const char* r); -LIBHUNSPELL_DLL_EXPORTED int fieldlen(const char * r); -LIBHUNSPELL_DLL_EXPORTED char * copy_field(char * dest, const char * morph, const char * var); +LIBHUNSPELL_DLL_EXPORTED bool copy_field(std::string& dest, + const std::string& morph, + const std::string& var); -LIBHUNSPELL_DLL_EXPORTED int morphcmp(const char * s, const char * t); +LIBHUNSPELL_DLL_EXPORTED int morphcmp(const char* s, const char* t); -LIBHUNSPELL_DLL_EXPORTED int get_sfxcount(const char * morph); +LIBHUNSPELL_DLL_EXPORTED int get_sfxcount(const char* morph); // conversion function for protected memory -LIBHUNSPELL_DLL_EXPORTED void store_pointer(char * dest, char * source); +LIBHUNSPELL_DLL_EXPORTED void store_pointer(char* dest, char* source); // conversion function for protected memory -LIBHUNSPELL_DLL_EXPORTED char * get_stored_pointer(const char * s); +LIBHUNSPELL_DLL_EXPORTED char* get_stored_pointer(const char* s); // hash entry macros -LIBHUNSPELL_DLL_EXPORTED inline char* HENTRY_DATA(struct hentry *h) -{ - char *ret; - if (!h->var) - ret = NULL; - else if (h->var & H_OPT_ALIASM) - ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1); - else - ret = HENTRY_WORD(h) + h->blen + 1; - return ret; +LIBHUNSPELL_DLL_EXPORTED inline char* HENTRY_DATA(struct hentry* h) { + char* ret; + if (!h->var) + ret = NULL; + else if (h->var & H_OPT_ALIASM) + ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1); + else + ret = HENTRY_WORD(h) + h->blen + 1; + return ret; } -// NULL-free version for warning-free OOo build -LIBHUNSPELL_DLL_EXPORTED inline const char* HENTRY_DATA2(const struct hentry *h) -{ - const char *ret; - if (!h->var) - ret = ""; - else if (h->var & H_OPT_ALIASM) - ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1); - else - ret = HENTRY_WORD(h) + h->blen + 1; - return ret; +LIBHUNSPELL_DLL_EXPORTED inline const char* HENTRY_DATA( + const struct hentry* h) { + const char* ret; + if (!h->var) + ret = NULL; + else if (h->var & H_OPT_ALIASM) + ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1); + else + ret = HENTRY_WORD(h) + h->blen + 1; + return ret; } -LIBHUNSPELL_DLL_EXPORTED inline char* HENTRY_FIND(struct hentry *h, const char *p) -{ - return (HENTRY_DATA(h) ? strstr(HENTRY_DATA(h), p) : NULL); +// NULL-free version for warning-free OOo build +LIBHUNSPELL_DLL_EXPORTED inline const char* HENTRY_DATA2( + const struct hentry* h) { + const char* ret; + if (!h->var) + ret = ""; + else if (h->var & H_OPT_ALIASM) + ret = get_stored_pointer(HENTRY_WORD(h) + h->blen + 1); + else + ret = HENTRY_WORD(h) + h->blen + 1; + return ret; } -#define w_char_eq(a,b) (((a).l == (b).l) && ((a).h == (b).h)) +LIBHUNSPELL_DLL_EXPORTED inline char* HENTRY_FIND(struct hentry* h, + const char* p) { + return (HENTRY_DATA(h) ? strstr(HENTRY_DATA(h), p) : NULL); +} #endif diff --git a/src/spelling/hunspell/dictmgr.cxx b/src/spelling/hunspell/dictmgr.cxx deleted file mode 100644 index a94429e5..00000000 --- a/src/spelling/hunspell/dictmgr.cxx +++ /dev/null @@ -1,182 +0,0 @@ - -#include -#include -#include -#include - -#include "dictmgr.hxx" -#include "csutil.hxx" - -DictMgr::DictMgr(const char * dictpath, const char * etype) : numdict(0) -{ - // load list of etype entries - pdentry = (dictentry *)malloc(MAXDICTIONARIES*sizeof(struct dictentry)); - if (pdentry) { - if (parse_file(dictpath, etype)) { - numdict = 0; - // no dictionary.lst found is okay - } - } -} - - -DictMgr::~DictMgr() -{ - dictentry * pdict = NULL; - if (pdentry) { - pdict = pdentry; - for (int i=0;ilang) { - free(pdict->lang); - pdict->lang = NULL; - } - if (pdict->region) { - free(pdict->region); - pdict->region=NULL; - } - if (pdict->filename) { - free(pdict->filename); - pdict->filename = NULL; - } - pdict++; - } - free(pdentry); - pdentry = NULL; - pdict = NULL; - } - numdict = 0; -} - - -// read in list of etype entries and build up structure to describe them -int DictMgr::parse_file(const char * dictpath, const char * etype) -{ - - int i; - char line[MAXDICTENTRYLEN+1]; - dictentry * pdict = pdentry; - - // open the dictionary list file - FILE * dictlst; - dictlst = myfopen(dictpath,"r"); - if (!dictlst) { - return 1; - } - - // step one is to parse the dictionary list building up the - // descriptive structures - - // read in each line ignoring any that dont start with etype - while (fgets(line,MAXDICTENTRYLEN,dictlst)) { - mychomp(line); - - /* parse in a dictionary entry */ - if (strncmp(line,etype,4) == 0) { - if (numdict < MAXDICTIONARIES) { - char * tp = line; - char * piece; - i = 0; - while ((piece=mystrsep(&tp,' '))) { - if (*piece != '\0') { - switch(i) { - case 0: break; - case 1: pdict->lang = mystrdup(piece); break; - case 2: if (strcmp (piece, "ANY") == 0) - pdict->region = mystrdup(""); - else - pdict->region = mystrdup(piece); - break; - case 3: pdict->filename = mystrdup(piece); break; - default: break; - } - i++; - } - free(piece); - } - if (i == 4) { - numdict++; - pdict++; - } else { - switch (i) { - case 3: - free(pdict->region); - pdict->region=NULL; - /* FALLTHROUGH */ - case 2: - free(pdict->lang); - pdict->lang=NULL; - default: - break; - } - fprintf(stderr,"dictionary list corruption in line \"%s\"\n",line); - fflush(stderr); - } - } - } - } - fclose(dictlst); - return 0; -} - -// return text encoding of dictionary -int DictMgr::get_list(dictentry ** ppentry) -{ - *ppentry = pdentry; - return numdict; -} - - - -// strip strings into token based on single char delimiter -// acts like strsep() but only uses a delim char and not -// a delim string - -char * DictMgr::mystrsep(char ** stringp, const char delim) -{ - char * rv = NULL; - char * mp = *stringp; - size_t n = strlen(mp); - if (n > 0) { - char * dp = (char *)memchr(mp,(int)((unsigned char)delim),n); - if (dp) { - *stringp = dp+1; - size_t nc = dp - mp; - rv = (char *) malloc(nc+1); - if (rv) { - memcpy(rv,mp,nc); - *(rv+nc) = '\0'; - } - } else { - rv = (char *) malloc(n+1); - if (rv) { - memcpy(rv, mp, n); - *(rv+n) = '\0'; - *stringp = mp + n; - } - } - } - return rv; -} - - -// replaces strdup with ansi version -char * DictMgr::mystrdup(const char * s) -{ - char * d = NULL; - if (s) { - int sl = strlen(s)+1; - d = (char *) malloc(sl); - if (d) memcpy(d,s,sl); - } - return d; -} - - -// remove cross-platform text line end characters -void DictMgr:: mychomp(char * s) -{ - int k = strlen(s); - if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0'; - if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0'; -} - diff --git a/src/spelling/hunspell/dictmgr.hxx b/src/spelling/hunspell/dictmgr.hxx deleted file mode 100644 index 692ed964..00000000 --- a/src/spelling/hunspell/dictmgr.hxx +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _DICTMGR_HXX_ -#define _DICTMGR_HXX_ - -#include "hunvisapi.h" - -#define MAXDICTIONARIES 100 -#define MAXDICTENTRYLEN 1024 - -struct dictentry { - char * filename; - char * lang; - char * region; -}; - - -class LIBHUNSPELL_DLL_EXPORTED DictMgr -{ -private: - DictMgr(const DictMgr&); - DictMgr& operator = (const DictMgr&); -private: - int numdict; - dictentry * pdentry; - -public: - - DictMgr(const char * dictpath, const char * etype); - ~DictMgr(); - int get_list(dictentry** ppentry); - -private: - int parse_file(const char * dictpath, const char * etype); - char * mystrsep(char ** stringp, const char delim); - char * mystrdup(const char * s); - void mychomp(char * s); - -}; - -#endif diff --git a/src/spelling/hunspell/filemgr.cxx b/src/spelling/hunspell/filemgr.cxx index e1fb80d9..2218bc79 100644 --- a/src/spelling/hunspell/filemgr.cxx +++ b/src/spelling/hunspell/filemgr.cxx @@ -1,5 +1,75 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #include #include @@ -8,46 +78,43 @@ #include "filemgr.hxx" #include "csutil.hxx" -int FileMgr::fail(const char * err, const char * par) { - fprintf(stderr, err, par); - return -1; +int FileMgr::fail(const char* err, const char* par) { + fprintf(stderr, err, par); + return -1; } -FileMgr::FileMgr(const char * file, const char * key) - : hin(NULL) - , linenum(0) -{ - in[0] = '\0'; - - fin = myfopen(file, "r"); - if (!fin) { - // check hzipped file - char * st = (char *) malloc(strlen(file) + strlen(HZIP_EXTENSION) + 1); - if (st) { - strcpy(st, file); - strcat(st, HZIP_EXTENSION); - hin = new Hunzip(st, key); - free(st); - } - } - if (!fin && !hin) fail(MSG_OPEN, file); +FileMgr::FileMgr(const char* file, const char* key) : hin(NULL), linenum(0) { + in[0] = '\0'; + + fin = myfopen(file, "r"); + if (!fin) { + // check hzipped file + std::string st(file); + st.append(HZIP_EXTENSION); + hin = new Hunzip(st.c_str(), key); + } + if (!fin && !hin) + fail(MSG_OPEN, file); } -FileMgr::~FileMgr() -{ - if (fin) fclose(fin); - if (hin) delete hin; +FileMgr::~FileMgr() { + if (fin) + fclose(fin); + if (hin) + delete hin; } -char * FileMgr::getline() { - const char * l; - linenum++; - if (fin) return fgets(in, BUFSIZE - 1, fin); - if (hin && ((l = hin->getline()) != NULL)) return strcpy(in, l); - linenum--; - return NULL; +char* FileMgr::getline() { + const char* l; + linenum++; + if (fin) + return fgets(in, BUFSIZE - 1, fin); + if (hin && ((l = hin->getline()) != NULL)) + return strcpy(in, l); + linenum--; + return NULL; } int FileMgr::getlinenum() { - return linenum; + return linenum; } diff --git a/src/spelling/hunspell/filemgr.hxx b/src/spelling/hunspell/filemgr.hxx index 37b2ae9e..8b69931d 100644 --- a/src/spelling/hunspell/filemgr.hxx +++ b/src/spelling/hunspell/filemgr.hxx @@ -1,3 +1,76 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + /* file manager class - read lines of files [filename] OR [filename.hz] */ #ifndef _FILEMGR_HXX_ #define _FILEMGR_HXX_ @@ -7,22 +80,22 @@ #include "hunzip.hxx" #include -class LIBHUNSPELL_DLL_EXPORTED FileMgr -{ -private: - FileMgr(const FileMgr&); - FileMgr& operator = (const FileMgr&); -protected: - FILE * fin; - Hunzip * hin; - char in[BUFSIZE + 50]; // input buffer - int fail(const char * err, const char * par); - int linenum; +class LIBHUNSPELL_DLL_EXPORTED FileMgr { + private: + FileMgr(const FileMgr&); + FileMgr& operator=(const FileMgr&); + + protected: + FILE* fin; + Hunzip* hin; + char in[BUFSIZE + 50]; // input buffer + int fail(const char* err, const char* par); + int linenum; -public: - FileMgr(const char * filename, const char * key = NULL); - ~FileMgr(); - char * getline(); - int getlinenum(); + public: + FileMgr(const char* filename, const char* key = NULL); + ~FileMgr(); + char* getline(); + int getlinenum(); }; #endif diff --git a/src/spelling/hunspell/hashmgr.cxx b/src/spelling/hunspell/hashmgr.cxx index 12adf420..c3cd9542 100644 --- a/src/spelling/hunspell/hashmgr.cxx +++ b/src/spelling/hunspell/hashmgr.cxx @@ -1,11 +1,82 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ -#include +#include #include -#include +#include #include #include +#include #include "hashmgr.hxx" #include "csutil.hxx" @@ -13,32 +84,29 @@ // build a hash table from a munched word list -HashMgr::HashMgr(const char * tpath, const char * apath, const char * key) - : tablesize(0) - , tableptr(NULL) - , userword(0) - , flag_mode(FLAG_CHAR) - , complexprefixes(0) - , utf8(0) - , forbiddenword(FORBIDDENWORD) // forbidden word signing flag - , numaliasf(0) - , aliasf(NULL) - , aliasflen(0) - , numaliasm(0) - , aliasm(NULL) -{ +HashMgr::HashMgr(const char* tpath, const char* apath, const char* key) + : tablesize(0), + tableptr(NULL), + flag_mode(FLAG_CHAR), + complexprefixes(0), + utf8(0), + forbiddenword(FORBIDDENWORD) // forbidden word signing flag + , + numaliasf(0), + aliasf(NULL), + aliasflen(0), + numaliasm(0), + aliasm(NULL) { langnum = 0; lang = NULL; enc = NULL; csconv = 0; ignorechars = NULL; - ignorechars_utf16 = NULL; - ignorechars_utf16_len = 0; load_config(apath, key); int ec = load_tables(tpath, key); if (ec) { /* error condition - what should we do here */ - HUNSPELL_WARNING(stderr, "Hash Manager Error : %d\n",ec); + HUNSPELL_WARNING(stderr, "Hash Manager Error : %d\n", ec); if (tableptr) { free(tableptr); tableptr = NULL; @@ -47,18 +115,18 @@ HashMgr::HashMgr(const char * tpath, const char * apath, const char * key) } } - -HashMgr::~HashMgr() -{ +HashMgr::~HashMgr() { if (tableptr) { // now pass through hash table freeing up everything // go through column by column of the table - for (int i=0; i < tablesize; i++) { - struct hentry * pt = tableptr[i]; - struct hentry * nt = NULL; - while(pt) { + for (int i = 0; i < tablesize; i++) { + struct hentry* pt = tableptr[i]; + struct hentry* nt = NULL; + while (pt) { nt = pt->next; - if (pt->astr && (!aliasf || TESTAFF(pt->astr, ONLYUPCASEFLAG, pt->alen))) free(pt->astr); + if (pt->astr && + (!aliasf || TESTAFF(pt->astr, ONLYUPCASEFLAG, pt->alen))) + free(pt->astr); free(pt); pt = nt; } @@ -68,7 +136,8 @@ HashMgr::~HashMgr() tablesize = 0; if (aliasf) { - for (int j = 0; j < (numaliasf); j++) free(aliasf[j]); + for (int j = 0; j < (numaliasf); j++) + free(aliasf[j]); free(aliasf); aliasf = NULL; if (aliasflen) { @@ -77,277 +146,343 @@ HashMgr::~HashMgr() } } if (aliasm) { - for (int j = 0; j < (numaliasm); j++) free(aliasm[j]); + for (int j = 0; j < (numaliasm); j++) + free(aliasm[j]); free(aliasm); aliasm = NULL; - } + } #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT - if (utf8) free_utf_tbl(); + if (utf8) + free_utf_tbl(); #endif #endif - if (enc) free(enc); - if (lang) free(lang); - - if (ignorechars) free(ignorechars); - if (ignorechars_utf16) free(ignorechars_utf16); + if (enc) + free(enc); + if (lang) + free(lang); + + if (ignorechars) + free(ignorechars); #ifdef MOZILLA_CLIENT - delete [] csconv; + delete[] csconv; #endif } // lookup a root word in the hashtable -struct hentry * HashMgr::lookup(const char *word) const -{ - struct hentry * dp; - if (tableptr) { - dp = tableptr[hash(word)]; - if (!dp) return NULL; - for ( ; dp != NULL; dp = dp->next) { - if (strcmp(word, dp->word) == 0) return dp; - } +struct hentry* HashMgr::lookup(const char* word) const { + struct hentry* dp; + if (tableptr) { + dp = tableptr[hash(word)]; + if (!dp) + return NULL; + for (; dp != NULL; dp = dp->next) { + if (strcmp(word, dp->word) == 0) + return dp; } - return NULL; + } + return NULL; } // add a word to the hash table (private) -int HashMgr::add_word(const char * word, int wbl, int wcl, unsigned short * aff, - int al, const char * desc, bool onlyupcase) -{ - bool upcasehomonym = false; - int descl = desc ? (aliasm ? sizeof(char *) : strlen(desc) + 1) : 0; - // variable-length hash record with word and optional fields - struct hentry* hp = - (struct hentry *) malloc (sizeof(struct hentry) + wbl + descl); - if (!hp) return 1; - char * hpw = hp->word; - strcpy(hpw, word); +int HashMgr::add_word(const char* word, + int wbl, + int wcl, + unsigned short* aff, + int al, + const char* desc, + bool onlyupcase) { + + std::string *word_copy = NULL; + std::string *desc_copy = NULL; + if (ignorechars || complexprefixes) { + word_copy = new std::string(word, wbl); + if (ignorechars != NULL) { if (utf8) { - remove_ignored_chars_utf(hpw, ignorechars_utf16, ignorechars_utf16_len); + wcl = remove_ignored_chars_utf(*word_copy, ignorechars_utf16); } else { - remove_ignored_chars(hpw, ignorechars); + remove_ignored_chars(*word_copy, ignorechars); } } + if (complexprefixes) { - if (utf8) reverseword_utf(hpw); else reverseword(hpw); + if (utf8) + wcl = reverseword_utf(*word_copy); + else + reverseword(*word_copy); + + if (desc && !aliasm) { + desc_copy = new std::string(desc); + + if (complexprefixes) { + if (utf8) + reverseword_utf(*desc_copy); + else + reverseword(*desc_copy); + } + desc = desc_copy->c_str(); + } } - int i = hash(hpw); + wbl = word_copy->size(); + word = word_copy->c_str(); + } + + bool upcasehomonym = false; + int descl = desc ? (aliasm ? sizeof(char*) : strlen(desc) + 1) : 0; + // variable-length hash record with word and optional fields + struct hentry* hp = + (struct hentry*)malloc(sizeof(struct hentry) + wbl + descl); + if (!hp) { + delete desc_copy; + delete word_copy; + return 1; + } + + char* hpw = hp->word; + strcpy(hpw, word); + + int i = hash(hpw); + + hp->blen = (unsigned char)wbl; + hp->clen = (unsigned char)wcl; + hp->alen = (short)al; + hp->astr = aff; + hp->next = NULL; + hp->next_homonym = NULL; - hp->blen = (unsigned char) wbl; - hp->clen = (unsigned char) wcl; - hp->alen = (short) al; - hp->astr = aff; - hp->next = NULL; - hp->next_homonym = NULL; + // store the description string or its pointer + if (desc) { + hp->var = H_OPT; + if (aliasm) { + hp->var += H_OPT_ALIASM; + store_pointer(hpw + wbl + 1, get_aliasm(atoi(desc))); + } else { + strcpy(hpw + wbl + 1, desc); + } + if (strstr(HENTRY_DATA(hp), MORPH_PHON)) + hp->var += H_OPT_PHON; + } else + hp->var = 0; - // store the description string or its pointer - if (desc) { - hp->var = H_OPT; - if (aliasm) { - hp->var += H_OPT_ALIASM; - store_pointer(hpw + wbl + 1, get_aliasm(atoi(desc))); + struct hentry* dp = tableptr[i]; + if (!dp) { + tableptr[i] = hp; + delete desc_copy; + delete word_copy; + return 0; + } + while (dp->next != NULL) { + if ((!dp->next_homonym) && (strcmp(hp->word, dp->word) == 0)) { + // remove hidden onlyupcase homonym + if (!onlyupcase) { + if ((dp->astr) && TESTAFF(dp->astr, ONLYUPCASEFLAG, dp->alen)) { + free(dp->astr); + dp->astr = hp->astr; + dp->alen = hp->alen; + free(hp); + delete desc_copy; + delete word_copy; + return 0; } else { - strcpy(hpw + wbl + 1, desc); - if (complexprefixes) { - if (utf8) reverseword_utf(HENTRY_DATA(hp)); - else reverseword(HENTRY_DATA(hp)); - } + dp->next_homonym = hp; } - if (strstr(HENTRY_DATA(hp), MORPH_PHON)) hp->var += H_OPT_PHON; - } else hp->var = 0; - - struct hentry * dp = tableptr[i]; - if (!dp) { - tableptr[i] = hp; - return 0; - } - while (dp->next != NULL) { - if ((!dp->next_homonym) && (strcmp(hp->word, dp->word) == 0)) { - // remove hidden onlyupcase homonym - if (!onlyupcase) { - if ((dp->astr) && TESTAFF(dp->astr, ONLYUPCASEFLAG, dp->alen)) { - free(dp->astr); - dp->astr = hp->astr; - dp->alen = hp->alen; - free(hp); - return 0; - } else { - dp->next_homonym = hp; - } - } else { - upcasehomonym = true; - } - } - dp=dp->next; - } - if (strcmp(hp->word, dp->word) == 0) { - // remove hidden onlyupcase homonym - if (!onlyupcase) { - if ((dp->astr) && TESTAFF(dp->astr, ONLYUPCASEFLAG, dp->alen)) { - free(dp->astr); - dp->astr = hp->astr; - dp->alen = hp->alen; - free(hp); - return 0; - } else { - dp->next_homonym = hp; - } - } else { - upcasehomonym = true; - } - } - if (!upcasehomonym) { - dp->next = hp; - } else { - // remove hidden onlyupcase homonym - if (hp->astr) free(hp->astr); - free(hp); - } - return 0; -} - -int HashMgr::add_hidden_capitalized_word(char * word, int wbl, int wcl, - unsigned short * flags, int flagslen, char * dp, int captype) -{ - if (flags == NULL) - flagslen = 0; - - // add inner capitalized forms to handle the following allcap forms: - // Mixed caps: OpenOffice.org -> OPENOFFICE.ORG - // Allcaps with suffixes: CIA's -> CIA'S - if (((captype == HUHCAP) || (captype == HUHINITCAP) || - ((captype == ALLCAP) && (flagslen != 0))) && - !((flagslen != 0) && TESTAFF(flags, forbiddenword, flagslen))) { - unsigned short * flags2 = (unsigned short *) malloc (sizeof(unsigned short) * (flagslen+1)); - if (!flags2) return 1; - if (flagslen) memcpy(flags2, flags, flagslen * sizeof(unsigned short)); - flags2[flagslen] = ONLYUPCASEFLAG; - if (utf8) { - char st[BUFSIZE]; - w_char w[BUFSIZE]; - int wlen = u8_u16(w, BUFSIZE, word); - mkallsmall_utf(w, wlen, langnum); - mkallcap_utf(w, 1, langnum); - u16_u8(st, BUFSIZE, w, wlen); - return add_word(st,wbl,wcl,flags2,flagslen+1,dp, true); - } else { - mkallsmall(word, csconv); - mkinitcap(word, csconv); - return add_word(word,wbl,wcl,flags2,flagslen+1,dp, true); - } + } else { + upcasehomonym = true; + } } - return 0; + dp = dp->next; + } + if (strcmp(hp->word, dp->word) == 0) { + // remove hidden onlyupcase homonym + if (!onlyupcase) { + if ((dp->astr) && TESTAFF(dp->astr, ONLYUPCASEFLAG, dp->alen)) { + free(dp->astr); + dp->astr = hp->astr; + dp->alen = hp->alen; + free(hp); + delete desc_copy; + delete word_copy; + return 0; + } else { + dp->next_homonym = hp; + } + } else { + upcasehomonym = true; + } + } + if (!upcasehomonym) { + dp->next = hp; + } else { + // remove hidden onlyupcase homonym + if (hp->astr) + free(hp->astr); + free(hp); + } + + delete desc_copy; + delete word_copy; + return 0; } -// detect captype and modify word length for UTF-8 encoding -int HashMgr::get_clen_and_captype(const char * word, int wbl, int * captype) { - int len; +int HashMgr::add_hidden_capitalized_word(const std::string& word, + int wcl, + unsigned short* flags, + int flagslen, + char* dp, + int captype) { + if (flags == NULL) + flagslen = 0; + + // add inner capitalized forms to handle the following allcap forms: + // Mixed caps: OpenOffice.org -> OPENOFFICE.ORG + // Allcaps with suffixes: CIA's -> CIA'S + if (((captype == HUHCAP) || (captype == HUHINITCAP) || + ((captype == ALLCAP) && (flagslen != 0))) && + !((flagslen != 0) && TESTAFF(flags, forbiddenword, flagslen))) { + unsigned short* flags2 = + (unsigned short*)malloc(sizeof(unsigned short) * (flagslen + 1)); + if (!flags2) + return 1; + if (flagslen) + memcpy(flags2, flags, flagslen * sizeof(unsigned short)); + flags2[flagslen] = ONLYUPCASEFLAG; if (utf8) { - w_char dest_utf[BUFSIZE]; - len = u8_u16(dest_utf, BUFSIZE, word); - *captype = get_captype_utf8(dest_utf, len, langnum); + std::string st; + std::vector w; + u8_u16(w, word); + mkallsmall_utf(w, langnum); + mkinitcap_utf(w, langnum); + u16_u8(st, w); + return add_word(st.c_str(), st.size(), wcl, flags2, flagslen + 1, dp, true); } else { - len = wbl; - *captype = get_captype((char *) word, len, csconv); + std::string new_word(word); + mkallsmall(new_word, csconv); + mkinitcap(new_word, csconv); + int ret = add_word(new_word.c_str(), new_word.size(), wcl, flags2, flagslen + 1, dp, true); + return ret; } - return len; + } + return 0; +} + +// detect captype and modify word length for UTF-8 encoding +int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { + int len; + if (utf8) { + std::vector dest_utf; + len = u8_u16(dest_utf, word); + *captype = get_captype_utf8(dest_utf, langnum); + } else { + len = word.size(); + *captype = get_captype(word, csconv); + } + return len; } // remove word (personal dictionary function for standalone applications) -int HashMgr::remove(const char * word) -{ - struct hentry * dp = lookup(word); - while (dp) { - if (dp->alen == 0 || !TESTAFF(dp->astr, forbiddenword, dp->alen)) { - unsigned short * flags = - (unsigned short *) malloc(sizeof(short) * (dp->alen + 1)); - if (!flags) return 1; - for (int i = 0; i < dp->alen; i++) flags[i] = dp->astr[i]; - flags[dp->alen] = forbiddenword; - dp->astr = flags; - dp->alen++; - flag_qsort(flags, 0, dp->alen); - } - dp = dp->next_homonym; +int HashMgr::remove(const char* word) { + struct hentry* dp = lookup(word); + while (dp) { + if (dp->alen == 0 || !TESTAFF(dp->astr, forbiddenword, dp->alen)) { + unsigned short* flags = + (unsigned short*)malloc(sizeof(unsigned short) * (dp->alen + 1)); + if (!flags) + return 1; + for (int i = 0; i < dp->alen; i++) + flags[i] = dp->astr[i]; + flags[dp->alen] = forbiddenword; + dp->astr = flags; + dp->alen++; + std::sort(flags, flags + dp->alen); } - return 0; + dp = dp->next_homonym; + } + return 0; } /* remove forbidden flag to add a personal word to the hash */ -int HashMgr::remove_forbidden_flag(const char * word) { - struct hentry * dp = lookup(word); - if (!dp) return 1; - while (dp) { - if (dp->astr && TESTAFF(dp->astr, forbiddenword, dp->alen)) { - if (dp->alen == 1) dp->alen = 0; // XXX forbidden words of personal dic. - else { - unsigned short * flags2 = - (unsigned short *) malloc(sizeof(short) * (dp->alen - 1)); - if (!flags2) return 1; - int i, j = 0; - for (i = 0; i < dp->alen; i++) { - if (dp->astr[i] != forbiddenword) flags2[j++] = dp->astr[i]; - } - dp->alen--; - dp->astr = flags2; // XXX allowed forbidden words - } - } - dp = dp->next_homonym; - } - return 0; +int HashMgr::remove_forbidden_flag(const std::string& word) { + struct hentry* dp = lookup(word.c_str()); + if (!dp) + return 1; + while (dp) { + if (dp->astr && TESTAFF(dp->astr, forbiddenword, dp->alen)) { + if (dp->alen == 1) + dp->alen = 0; // XXX forbidden words of personal dic. + else { + unsigned short* flags2 = + (unsigned short*)malloc(sizeof(unsigned short) * (dp->alen - 1)); + if (!flags2) + return 1; + int i, j = 0; + for (i = 0; i < dp->alen; i++) { + if (dp->astr[i] != forbiddenword) + flags2[j++] = dp->astr[i]; + } + dp->alen--; + dp->astr = flags2; // XXX allowed forbidden words + } + } + dp = dp->next_homonym; + } + return 0; } // add a custom dic. word to the hash table (public) -int HashMgr::add(const char * word) -{ - unsigned short * flags = NULL; - int al = 0; - if (remove_forbidden_flag(word)) { - int captype; - int wbl = strlen(word); - int wcl = get_clen_and_captype(word, wbl, &captype); - add_word(word, wbl, wcl, flags, al, NULL, false); - return add_hidden_capitalized_word((char *) word, wbl, wcl, flags, al, NULL, captype); - } - return 0; +int HashMgr::add(const std::string& word) { + unsigned short* flags = NULL; + int al = 0; + if (remove_forbidden_flag(word)) { + int captype; + int wbl = word.size(); + int wcl = get_clen_and_captype(word, &captype); + add_word(word.c_str(), wbl, wcl, flags, al, NULL, false); + return add_hidden_capitalized_word(word, wcl, flags, al, NULL, + captype); + } + return 0; } -int HashMgr::add_with_affix(const char * word, const char * example) -{ - // detect captype and modify word length for UTF-8 encoding - struct hentry * dp = lookup(example); - remove_forbidden_flag(word); - if (dp && dp->astr) { - int captype; - int wbl = strlen(word); - int wcl = get_clen_and_captype(word, wbl, &captype); - if (aliasf) { - add_word(word, wbl, wcl, dp->astr, dp->alen, NULL, false); - } else { - unsigned short * flags = (unsigned short *) malloc (dp->alen * sizeof(short)); - if (flags) { - memcpy((void *) flags, (void *) dp->astr, dp->alen * sizeof(short)); - add_word(word, wbl, wcl, flags, dp->alen, NULL, false); - } else return 1; - } - return add_hidden_capitalized_word((char *) word, wbl, wcl, dp->astr, dp->alen, NULL, captype); +int HashMgr::add_with_affix(const char* word, const char* example) { + // detect captype and modify word length for UTF-8 encoding + struct hentry* dp = lookup(example); + remove_forbidden_flag(word); + if (dp && dp->astr) { + int captype; + int wbl = strlen(word); + int wcl = get_clen_and_captype(word, &captype); + if (aliasf) { + add_word(word, wbl, wcl, dp->astr, dp->alen, NULL, false); + } else { + unsigned short* flags = + (unsigned short*)malloc(dp->alen * sizeof(unsigned short)); + if (flags) { + memcpy((void*)flags, (void*)dp->astr, + dp->alen * sizeof(unsigned short)); + add_word(word, wbl, wcl, flags, dp->alen, NULL, false); + } else + return 1; } - return 1; + return add_hidden_capitalized_word(word, wcl, dp->astr, + dp->alen, NULL, captype); + } + return 1; } // walk the hash table entry by entry - null at end // initialize: col=-1; hp = NULL; hp = walk_hashtable(&col, hp); -struct hentry * HashMgr::walk_hashtable(int &col, struct hentry * hp) const -{ - if (hp && hp->next != NULL) return hp->next; +struct hentry* HashMgr::walk_hashtable(int& col, struct hentry* hp) const { + if (hp && hp->next != NULL) + return hp->next; for (col++; col < tablesize; col++) { - if (tableptr[col]) return tableptr[col]; + if (tableptr[col]) + return tableptr[col]; } // null at end and reset to start col = -1; @@ -355,18 +490,18 @@ struct hentry * HashMgr::walk_hashtable(int &col, struct hentry * hp) const } // load a munched word list and build a hash table on the fly -int HashMgr::load_tables(const char * tpath, const char * key) -{ +int HashMgr::load_tables(const char* tpath, const char* key) { int al; - char * ap; - char * dp; - char * dp2; - unsigned short * flags; - char * ts; + char* ap; + char* dp; + char* dp2; + unsigned short* flags; + char* ts; // open dictionary file - FileMgr * dict = new FileMgr(tpath, key); - if (dict == NULL) return 1; + FileMgr* dict = new FileMgr(tpath, key); + if (dict == NULL) + return 1; // first read the first line of file to get hash table size */ if ((ts = dict->getline()) == NULL) { @@ -377,26 +512,31 @@ int HashMgr::load_tables(const char * tpath, const char * key) mychomp(ts); /* remove byte order mark */ - if (strncmp(ts,"\xEF\xBB\xBF",3) == 0) { - memmove(ts, ts+3, strlen(ts+3)+1); - // warning: dic file begins with byte order mark: possible incompatibility with old Hunspell versions + if (strncmp(ts, "\xEF\xBB\xBF", 3) == 0) { + memmove(ts, ts + 3, strlen(ts + 3) + 1); + // warning: dic file begins with byte order mark: possible incompatibility + // with old Hunspell versions } tablesize = atoi(ts); int nExtra = 5 + USERWORD; - if (tablesize <= 0 || (tablesize >= (std::numeric_limits::max() - 1 - nExtra) / int(sizeof(struct hentry *)))) { - HUNSPELL_WARNING(stderr, "error: line 1: missing or bad word count in the dic file\n"); + if (tablesize <= 0 || + (tablesize >= (std::numeric_limits::max() - 1 - nExtra) / + int(sizeof(struct hentry*)))) { + HUNSPELL_WARNING( + stderr, "error: line 1: missing or bad word count in the dic file\n"); delete dict; return 4; } tablesize += nExtra; - if ((tablesize % 2) == 0) tablesize++; + if ((tablesize % 2) == 0) + tablesize++; // allocate the hash table - tableptr = (struct hentry **) calloc(tablesize, sizeof(struct hentry *)); - if (! tableptr) { + tableptr = (struct hentry**)calloc(tablesize, sizeof(struct hentry*)); + if (!tableptr) { delete dict; return 3; } @@ -409,38 +549,41 @@ int HashMgr::load_tables(const char * tpath, const char * key) // split each line into word and morphological description dp = ts; while ((dp = strchr(dp, ':')) != NULL) { - if ((dp > ts + 3) && (*(dp - 3) == ' ' || *(dp - 3) == '\t')) { - for (dp -= 4; dp >= ts && (*dp == ' ' || *dp == '\t'); dp--); - if (dp < ts) { // missing word - dp = NULL; - } else { - *(dp + 1) = '\0'; - dp = dp + 2; - } - break; - } - dp++; + if ((dp > ts + 3) && (*(dp - 3) == ' ' || *(dp - 3) == '\t')) { + for (dp -= 4; dp >= ts && (*dp == ' ' || *dp == '\t'); dp--) + ; + if (dp < ts) { // missing word + dp = NULL; + } else { + *(dp + 1) = '\0'; + dp = dp + 2; + } + break; + } + dp++; } // tabulator is the old morphological field separator dp2 = strchr(ts, '\t'); if (dp2 && (!dp || dp2 < dp)) { - *dp2 = '\0'; - dp = dp2 + 1; + *dp2 = '\0'; + dp = dp2 + 1; } // split each line into word and affix char strings // "\/" signs slash in words (not affix separator) // "/" at beginning of the line is word character (not affix separator) - ap = strchr(ts,'/'); + ap = strchr(ts, '/'); while (ap) { - if (ap == ts) { - ap++; - continue; - } else if (*(ap - 1) != '\\') break; - // replace "\/" with "/" - for (char * sp = ap - 1; *sp; *sp = *(sp + 1), sp++); - ap = strchr(ap,'/'); + if (ap == ts) { + ap++; + continue; + } else if (*(ap - 1) != '\\') + break; + // replace "\/" with "/" + for (char *sp = ap - 1; *sp; *sp = *(sp + 1), sp++) + ; + ap = strchr(ap, '/'); } if (ap) { @@ -449,17 +592,18 @@ int HashMgr::load_tables(const char * tpath, const char * key) int index = atoi(ap + 1); al = get_aliasf(index, &flags, dict); if (!al) { - HUNSPELL_WARNING(stderr, "error: line %d: bad flag vector alias\n", dict->getlinenum()); - *ap = '\0'; + HUNSPELL_WARNING(stderr, "error: line %d: bad flag vector alias\n", + dict->getlinenum()); + *ap = '\0'; } } else { al = decode_flags(&flags, ap + 1, dict); if (al == -1) { - HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); - delete dict; - return 6; + HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); + delete dict; + return 6; } - flag_qsort(flags, 0, al); + std::sort(flags, flags + al); } } else { al = 0; @@ -469,12 +613,12 @@ int HashMgr::load_tables(const char * tpath, const char * key) int captype; int wbl = strlen(ts); - int wcl = get_clen_and_captype(ts, wbl, &captype); + int wcl = get_clen_and_captype(ts, &captype); // add the word and its index plus its capitalized form optionally - if (add_word(ts,wbl,wcl,flags,al,dp, false) || - add_hidden_capitalized_word(ts, wbl, wcl, flags, al, dp, captype)) { - delete dict; - return 5; + if (add_word(ts, wbl, wcl, flags, al, dp, false) || + add_hidden_capitalized_word(ts, wcl, flags, al, dp, captype)) { + delete dict; + return 5; } } @@ -484,453 +628,520 @@ int HashMgr::load_tables(const char * tpath, const char * key) // the hash function is a simple load and rotate // algorithm borrowed - -int HashMgr::hash(const char * word) const -{ - long hv = 0; - for (int i=0; i < 4 && *word != 0; i++) - hv = (hv << 8) | (*word++); - while (*word != 0) { - ROTATE(hv,ROTATE_LEN); - hv ^= (*word++); - } - return (unsigned long) hv % tablesize; +int HashMgr::hash(const char* word) const { + unsigned long hv = 0; + for (int i = 0; i < 4 && *word != 0; i++) + hv = (hv << 8) | (*word++); + while (*word != 0) { + ROTATE(hv, ROTATE_LEN); + hv ^= (*word++); + } + return (unsigned long)hv % tablesize; } -int HashMgr::decode_flags(unsigned short ** result, char * flags, FileMgr * af) { - int len; - if (*flags == '\0') { - *result = NULL; - return 0; - } - switch (flag_mode) { - case FLAG_LONG: { // two-character flags (1x2yZz -> 1x 2y Zz) - len = strlen(flags); - if (len%2 == 1) HUNSPELL_WARNING(stderr, "error: line %d: bad flagvector\n", af->getlinenum()); - len /= 2; - *result = (unsigned short *) malloc(len * sizeof(short)); - if (!*result) return -1; - for (int i = 0; i < len; i++) { - (*result)[i] = (((unsigned short) flags[i * 2]) << 8) + (unsigned short) flags[i * 2 + 1]; - } - break; +int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { + int len; + if (*flags == '\0') { + *result = NULL; + return 0; + } + switch (flag_mode) { + case FLAG_LONG: { // two-character flags (1x2yZz -> 1x 2y Zz) + len = strlen(flags); + if (len % 2 == 1) + HUNSPELL_WARNING(stderr, "error: line %d: bad flagvector\n", + af->getlinenum()); + len /= 2; + *result = (unsigned short*)malloc(len * sizeof(unsigned short)); + if (!*result) + return -1; + for (int i = 0; i < len; i++) { + (*result)[i] = (((unsigned short)flags[i * 2]) << 8) + + (unsigned short)flags[i * 2 + 1]; } - case FLAG_NUM: { // decimal numbers separated by comma (4521,23,233 -> 4521 23 233) - int i; - len = 1; - char * src = flags; - unsigned short * dest; - char * p; - for (p = flags; *p; p++) { - if (*p == ',') len++; - } - *result = (unsigned short *) malloc(len * sizeof(short)); - if (!*result) return -1; - dest = *result; - for (p = flags; *p; p++) { - if (*p == ',') { - i = atoi(src); - if (i >= DEFAULTFLAGS) HUNSPELL_WARNING(stderr, "error: line %d: flag id %d is too large (max: %d)\n", - af->getlinenum(), i, DEFAULTFLAGS - 1); - *dest = (unsigned short) i; - if (*dest == 0) HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", af->getlinenum()); - src = p + 1; - dest++; - } - } - i = atoi(src); - if (i >= DEFAULTFLAGS) HUNSPELL_WARNING(stderr, "error: line %d: flag id %d is too large (max: %d)\n", - af->getlinenum(), i, DEFAULTFLAGS - 1); - *dest = (unsigned short) i; - if (*dest == 0) HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", af->getlinenum()); - break; - } - case FLAG_UNI: { // UTF-8 characters - w_char w[BUFSIZE/2]; - len = u8_u16(w, BUFSIZE/2, flags); - *result = (unsigned short *) malloc(len * sizeof(short)); - if (!*result) return -1; - memcpy(*result, w, len * sizeof(short)); - break; + break; + } + case FLAG_NUM: { // decimal numbers separated by comma (4521,23,233 -> 4521 + // 23 233) + int i; + len = 1; + char* src = flags; + unsigned short* dest; + char* p; + for (p = flags; *p; p++) { + if (*p == ',') + len++; } - default: { // Ispell's one-character flags (erfg -> e r f g) - unsigned short * dest; - len = strlen(flags); - *result = (unsigned short *) malloc(len * sizeof(short)); - if (!*result) return -1; - dest = *result; - for (unsigned char * p = (unsigned char *) flags; *p; p++) { - *dest = (unsigned short) *p; + *result = (unsigned short*)malloc(len * sizeof(unsigned short)); + if (!*result) + return -1; + dest = *result; + for (p = flags; *p; p++) { + if (*p == ',') { + i = atoi(src); + if (i >= DEFAULTFLAGS) + HUNSPELL_WARNING( + stderr, "error: line %d: flag id %d is too large (max: %d)\n", + af->getlinenum(), i, DEFAULTFLAGS - 1); + *dest = (unsigned short)i; + if (*dest == 0) + HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", + af->getlinenum()); + src = p + 1; dest++; } } + i = atoi(src); + if (i >= DEFAULTFLAGS) + HUNSPELL_WARNING(stderr, + "error: line %d: flag id %d is too large (max: %d)\n", + af->getlinenum(), i, DEFAULTFLAGS - 1); + *dest = (unsigned short)i; + if (*dest == 0) + HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", + af->getlinenum()); + break; + } + case FLAG_UNI: { // UTF-8 characters + std::vector w; + u8_u16(w, flags); + len = w.size(); + *result = (unsigned short*)malloc(len * sizeof(unsigned short)); + if (!*result) + return -1; + memcpy(*result, &w[0], len * sizeof(short)); + break; + } + default: { // Ispell's one-character flags (erfg -> e r f g) + unsigned short* dest; + len = strlen(flags); + *result = (unsigned short*)malloc(len * sizeof(unsigned short)); + if (!*result) + return -1; + dest = *result; + for (unsigned char* p = (unsigned char*)flags; *p; p++) { + *dest = (unsigned short)*p; + dest++; + } } - return len; + } + return len; } -unsigned short HashMgr::decode_flag(const char * f) { - unsigned short s = 0; - int i; - switch (flag_mode) { - case FLAG_LONG: - s = ((unsigned short) f[0] << 8) + (unsigned short) f[1]; - break; - case FLAG_NUM: - i = atoi(f); - if (i >= DEFAULTFLAGS) HUNSPELL_WARNING(stderr, "error: flag id %d is too large (max: %d)\n", i, DEFAULTFLAGS - 1); - s = (unsigned short) i; - break; - case FLAG_UNI: - u8_u16((w_char *) &s, 1, f); - break; - default: - s = (unsigned short) *((unsigned char *)f); +unsigned short HashMgr::decode_flag(const char* f) { + unsigned short s = 0; + int i; + switch (flag_mode) { + case FLAG_LONG: + s = ((unsigned short)f[0] << 8) + (unsigned short)f[1]; + break; + case FLAG_NUM: + i = atoi(f); + if (i >= DEFAULTFLAGS) + HUNSPELL_WARNING(stderr, "error: flag id %d is too large (max: %d)\n", + i, DEFAULTFLAGS - 1); + s = (unsigned short)i; + break; + case FLAG_UNI: { + std::vector w; + u8_u16(w, f); + if (!w.empty()) + memcpy(&s, &w[0], 1 * sizeof(short)); + break; } - if (s == 0) HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n"); - return s; + default: + s = (unsigned short)*((unsigned char*)f); + } + if (s == 0) + HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n"); + return s; } -char * HashMgr::encode_flag(unsigned short f) { - unsigned char ch[10]; - if (f==0) return mystrdup("(NULL)"); - if (flag_mode == FLAG_LONG) { - ch[0] = (unsigned char) (f >> 8); - ch[1] = (unsigned char) (f - ((f >> 8) << 8)); - ch[2] = '\0'; - } else if (flag_mode == FLAG_NUM) { - sprintf((char *) ch, "%d", f); - } else if (flag_mode == FLAG_UNI) { - u16_u8((char *) &ch, 10, (w_char *) &f, 1); - } else { - ch[0] = (unsigned char) (f); - ch[1] = '\0'; - } - return mystrdup((char *) ch); +char* HashMgr::encode_flag(unsigned short f) { + if (f == 0) + return mystrdup("(NULL)"); + std::string ch; + if (flag_mode == FLAG_LONG) { + ch.push_back((unsigned char)(f >> 8)); + ch.push_back((unsigned char)(f - ((f >> 8) << 8))); + } else if (flag_mode == FLAG_NUM) { + std::ostringstream stream; + stream << f; + ch = stream.str(); + } else if (flag_mode == FLAG_UNI) { + const w_char* w_c = (const w_char*)&f; + std::vector w(w_c, w_c + 1); + u16_u8(ch, w); + } else { + ch.push_back((unsigned char)(f)); + } + return mystrdup(ch.c_str()); } // read in aff file and set flag mode -int HashMgr::load_config(const char * affpath, const char * key) -{ - char * line; // io buffers +int HashMgr::load_config(const char* affpath, const char* key) { + char* line; // io buffers int firstline = 1; - + // open the affix file - FileMgr * afflst = new FileMgr(affpath, key); + FileMgr* afflst = new FileMgr(affpath, key); if (!afflst) { - HUNSPELL_WARNING(stderr, "Error - could not open affix description file %s\n",affpath); + HUNSPELL_WARNING( + stderr, "Error - could not open affix description file %s\n", affpath); return 1; } - // read in each line ignoring any that do not - // start with a known line type indicator + // read in each line ignoring any that do not + // start with a known line type indicator - while ((line = afflst->getline()) != NULL) { - mychomp(line); + while ((line = afflst->getline()) != NULL) { + mychomp(line); - /* remove byte order mark */ - if (firstline) { - firstline = 0; - if (strncmp(line,"\xEF\xBB\xBF",3) == 0) memmove(line, line+3, strlen(line+3)+1); - } + /* remove byte order mark */ + if (firstline) { + firstline = 0; + if (strncmp(line, "\xEF\xBB\xBF", 3) == 0) + memmove(line, line + 3, strlen(line + 3) + 1); + } - /* parse in the try string */ - if ((strncmp(line,"FLAG",4) == 0) && isspace(line[4])) { - if (flag_mode != FLAG_CHAR) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of the FLAG affix file parameter\n", afflst->getlinenum()); - } - if (strstr(line, "long")) flag_mode = FLAG_LONG; - if (strstr(line, "num")) flag_mode = FLAG_NUM; - if (strstr(line, "UTF-8")) flag_mode = FLAG_UNI; - if (flag_mode == FLAG_CHAR) { - HUNSPELL_WARNING(stderr, "error: line %d: FLAG needs `num', `long' or `UTF-8' parameter\n", afflst->getlinenum()); - } - } - if (strncmp(line,"FORBIDDENWORD",13) == 0) { - char * st = NULL; - if (parse_string(line, &st, afflst->getlinenum())) { - delete afflst; - return 1; - } - forbiddenword = decode_flag(st); - free(st); - } - if (strncmp(line, "SET", 3) == 0) { - if (parse_string(line, &enc, afflst->getlinenum())) { - delete afflst; - return 1; - } - if (strcmp(enc, "UTF-8") == 0) { - utf8 = 1; + /* parse in the try string */ + if ((strncmp(line, "FLAG", 4) == 0) && isspace(line[4])) { + if (flag_mode != FLAG_CHAR) { + HUNSPELL_WARNING(stderr, + "error: line %d: multiple definitions of the FLAG " + "affix file parameter\n", + afflst->getlinenum()); + } + if (strstr(line, "long")) + flag_mode = FLAG_LONG; + if (strstr(line, "num")) + flag_mode = FLAG_NUM; + if (strstr(line, "UTF-8")) + flag_mode = FLAG_UNI; + if (flag_mode == FLAG_CHAR) { + HUNSPELL_WARNING( + stderr, + "error: line %d: FLAG needs `num', `long' or `UTF-8' parameter\n", + afflst->getlinenum()); + } + } + if (strncmp(line, "FORBIDDENWORD", 13) == 0) { + char* st = NULL; + if (parse_string(line, &st, afflst->getlinenum())) { + delete afflst; + return 1; + } + forbiddenword = decode_flag(st); + free(st); + } + if (strncmp(line, "SET", 3) == 0) { + if (parse_string(line, &enc, afflst->getlinenum())) { + delete afflst; + return 1; + } + if (strcmp(enc, "UTF-8") == 0) { + utf8 = 1; #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT - initialize_utf_tbl(); + initialize_utf_tbl(); #endif #endif - } else csconv = get_current_cs(enc); - } - if (strncmp(line, "LANG", 4) == 0) { - if (parse_string(line, &lang, afflst->getlinenum())) { - delete afflst; - return 1; - } - langnum = get_lang_num(lang); - } - - /* parse in the ignored characters (for example, Arabic optional diacritics characters */ - if (strncmp(line,"IGNORE",6) == 0) { - if (parse_array(line, &ignorechars, &ignorechars_utf16, - &ignorechars_utf16_len, utf8, afflst->getlinenum())) { - delete afflst; - return 1; - } - } + } else + csconv = get_current_cs(enc); + } + if (strncmp(line, "LANG", 4) == 0) { + if (parse_string(line, &lang, afflst->getlinenum())) { + delete afflst; + return 1; + } + langnum = get_lang_num(lang); + } - if ((strncmp(line,"AF",2) == 0) && isspace(line[2])) { - if (parse_aliasf(line, afflst)) { - delete afflst; - return 1; - } - } + /* parse in the ignored characters (for example, Arabic optional diacritics + * characters */ + if (strncmp(line, "IGNORE", 6) == 0) { + if (!parse_array(line, &ignorechars, ignorechars_utf16, + utf8, afflst->getlinenum())) { + delete afflst; + return 1; + } + } - if ((strncmp(line,"AM",2) == 0) && isspace(line[2])) { - if (parse_aliasm(line, afflst)) { - delete afflst; - return 1; - } - } + if ((strncmp(line, "AF", 2) == 0) && isspace(line[2])) { + if (parse_aliasf(line, afflst)) { + delete afflst; + return 1; + } + } - if (strncmp(line,"COMPLEXPREFIXES",15) == 0) complexprefixes = 1; - if (((strncmp(line,"SFX",3) == 0) || (strncmp(line,"PFX",3) == 0)) && isspace(line[3])) break; + if ((strncmp(line, "AM", 2) == 0) && isspace(line[2])) { + if (parse_aliasm(line, afflst)) { + delete afflst; + return 1; + } } - if (csconv == NULL) csconv = get_current_cs(SPELL_ENCODING); - delete afflst; - return 0; + + if (strncmp(line, "COMPLEXPREFIXES", 15) == 0) + complexprefixes = 1; + if (((strncmp(line, "SFX", 3) == 0) || (strncmp(line, "PFX", 3) == 0)) && + isspace(line[3])) + break; + } + if (csconv == NULL) + csconv = get_current_cs(SPELL_ENCODING); + delete afflst; + return 0; } /* parse in the ALIAS table */ -int HashMgr::parse_aliasf(char * line, FileMgr * af) -{ - if (numaliasf != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); +int HashMgr::parse_aliasf(char* line, FileMgr* af) { + if (numaliasf != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numaliasf = atoi(piece); + if (numaliasf < 1) { + numaliasf = 0; + aliasf = NULL; + aliasflen = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + aliasf = + (unsigned short**)malloc(numaliasf * sizeof(unsigned short*)); + aliasflen = + (unsigned short*)malloc(numaliasf * sizeof(unsigned short)); + if (!aliasf || !aliasflen) { + numaliasf = 0; + if (aliasf) + free(aliasf); + if (aliasflen) + free(aliasflen); + aliasf = NULL; + aliasflen = NULL; + return 1; + } + np++; + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + numaliasf = 0; + free(aliasf); + free(aliasflen); + aliasf = NULL; + aliasflen = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } + + /* now parse the numaliasf lines to read in the remainder of the table */ + char* nl; + for (int j = 0; j < numaliasf; j++) { + if ((nl = af->getline()) == NULL) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numaliasf = atoi(piece); - if (numaliasf < 1) { - numaliasf = 0; - aliasf = NULL; - aliasflen = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - aliasf = (unsigned short **) malloc(numaliasf * sizeof(unsigned short *)); - aliasflen = (unsigned short *) malloc(numaliasf * sizeof(short)); - if (!aliasf || !aliasflen) { - numaliasf = 0; - if (aliasf) free(aliasf); - if (aliasflen) free(aliasflen); - aliasf = NULL; - aliasflen = NULL; - return 1; - } - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + aliasf[j] = NULL; + aliasflen[j] = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "AF", 2) != 0) { + numaliasf = 0; + free(aliasf); + free(aliasflen); + aliasf = NULL; + aliasflen = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + return 1; + } + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { - numaliasf = 0; + case 1: { + aliasflen[j] = + (unsigned short)decode_flags(&(aliasf[j]), piece, af); + std::sort(aliasf[j], aliasf[j] + aliasflen[j]); + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (!aliasf[j]) { free(aliasf); free(aliasflen); aliasf = NULL; aliasflen = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + numaliasf = 0; + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); return 1; - } - - /* now parse the numaliasf lines to read in the remainder of the table */ - char * nl; - for (int j=0; j < numaliasf; j++) { - if ((nl = af->getline()) == NULL) return 1; - mychomp(nl); - tp = nl; - i = 0; - aliasf[j] = NULL; - aliasflen[j] = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"AF",2) != 0) { - numaliasf = 0; - free(aliasf); - free(aliasflen); - aliasf = NULL; - aliasflen = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; - } - break; - } - case 1: { - aliasflen[j] = (unsigned short) decode_flags(&(aliasf[j]), piece, af); - flag_qsort(aliasf[j], 0, aliasflen[j]); - break; - } - default: break; - } - i++; - } - piece = mystrsep(&tp, 0); - } - if (!aliasf[j]) { - free(aliasf); - free(aliasflen); - aliasf = NULL; - aliasflen = NULL; - numaliasf = 0; - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; - } - } - return 0; + } + } + return 0; } int HashMgr::is_aliasf() { - return (aliasf != NULL); + return (aliasf != NULL); } -int HashMgr::get_aliasf(int index, unsigned short ** fvec, FileMgr * af) { - if ((index > 0) && (index <= numaliasf)) { - *fvec = aliasf[index - 1]; - return aliasflen[index - 1]; - } - HUNSPELL_WARNING(stderr, "error: line %d: bad flag alias index: %d\n", af->getlinenum(), index); - *fvec = NULL; - return 0; +int HashMgr::get_aliasf(int index, unsigned short** fvec, FileMgr* af) { + if ((index > 0) && (index <= numaliasf)) { + *fvec = aliasf[index - 1]; + return aliasflen[index - 1]; + } + HUNSPELL_WARNING(stderr, "error: line %d: bad flag alias index: %d\n", + af->getlinenum(), index); + *fvec = NULL; + return 0; } /* parse morph alias definitions */ -int HashMgr::parse_aliasm(char * line, FileMgr * af) -{ - if (numaliasm != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); +int HashMgr::parse_aliasm(char* line, FileMgr* af) { + if (numaliasm != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", + af->getlinenum()); + return 1; + } + char* tp = line; + char* piece; + int i = 0; + int np = 0; + piece = mystrsep(&tp, 0); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numaliasm = atoi(piece); + if (numaliasm < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return 1; + } + aliasm = (char**)malloc(numaliasm * sizeof(char*)); + if (!aliasm) { + numaliasm = 0; + return 1; + } + np++; + break; + } + default: + break; + } + i++; + } + piece = mystrsep(&tp, 0); + } + if (np != 2) { + numaliasm = 0; + free(aliasm); + aliasm = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", + af->getlinenum()); + return 1; + } + + /* now parse the numaliasm lines to read in the remainder of the table */ + char* nl = line; + for (int j = 0; j < numaliasm; j++) { + if ((nl = af->getline()) == NULL) return 1; - } - char * tp = line; - char * piece; - int i = 0; - int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { np++; break; } - case 1: { - numaliasm = atoi(piece); - if (numaliasm < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", af->getlinenum()); - return 1; - } - aliasm = (char **) malloc(numaliasm * sizeof(char *)); - if (!aliasm) { - numaliasm = 0; - return 1; - } - np++; - break; - } - default: break; + mychomp(nl); + tp = nl; + i = 0; + aliasm[j] = NULL; + piece = mystrsep(&tp, ' '); + while (piece) { + if (*piece != '\0') { + switch (i) { + case 0: { + if (strncmp(piece, "AM", 2) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numaliasm = 0; + free(aliasm); + aliasm = NULL; + return 1; + } + break; + } + case 1: { + // add the remaining of the line + if (*tp) { + *(tp - 1) = ' '; + tp = tp + strlen(tp); + } + std::string chunk(piece); + if (complexprefixes) { + if (utf8) + reverseword_utf(chunk); + else + reverseword(chunk); + } + aliasm[j] = mystrdup(chunk.c_str()); + break; } - i++; - } - piece = mystrsep(&tp, 0); - } - if (np != 2) { + default: + break; + } + i++; + } + piece = mystrsep(&tp, ' '); + } + if (!aliasm[j]) { numaliasm = 0; free(aliasm); aliasm = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); return 1; - } - - /* now parse the numaliasm lines to read in the remainder of the table */ - char * nl = line; - for (int j=0; j < numaliasm; j++) { - if ((nl = af->getline()) == NULL) return 1; - mychomp(nl); - tp = nl; - i = 0; - aliasm[j] = NULL; - piece = mystrsep(&tp, ' '); - while (piece) { - if (*piece != '\0') { - switch(i) { - case 0: { - if (strncmp(piece,"AM",2) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numaliasm = 0; - free(aliasm); - aliasm = NULL; - return 1; - } - break; - } - case 1: { - // add the remaining of the line - if (*tp) { - *(tp - 1) = ' '; - tp = tp + strlen(tp); - } - if (complexprefixes) { - if (utf8) reverseword_utf(piece); - else reverseword(piece); - } - aliasm[j] = mystrdup(piece); - if (!aliasm[j]) { - numaliasm = 0; - free(aliasm); - aliasm = NULL; - return 1; - } - break; } - default: break; - } - i++; - } - piece = mystrsep(&tp, ' '); - } - if (!aliasm[j]) { - numaliasm = 0; - free(aliasm); - aliasm = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; - } - } - return 0; + } + } + return 0; } int HashMgr::is_aliasm() { - return (aliasm != NULL); + return (aliasm != NULL); } -char * HashMgr::get_aliasm(int index) { - if ((index > 0) && (index <= numaliasm)) return aliasm[index - 1]; - HUNSPELL_WARNING(stderr, "error: bad morph. alias index: %d\n", index); - return NULL; +char* HashMgr::get_aliasm(int index) { + if ((index > 0) && (index <= numaliasm)) + return aliasm[index - 1]; + HUNSPELL_WARNING(stderr, "error: bad morph. alias index: %d\n", index); + return NULL; } diff --git a/src/spelling/hunspell/hashmgr.hxx b/src/spelling/hunspell/hashmgr.hxx index 341b0813..95b06b13 100644 --- a/src/spelling/hunspell/hashmgr.hxx +++ b/src/spelling/hunspell/hashmgr.hxx @@ -1,69 +1,149 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #ifndef _HASHMGR_HXX_ #define _HASHMGR_HXX_ #include "hunvisapi.h" #include +#include +#include #include "htypes.hxx" #include "filemgr.hxx" +#include "w_char.hxx" enum flag { FLAG_CHAR, FLAG_LONG, FLAG_NUM, FLAG_UNI }; -class LIBHUNSPELL_DLL_EXPORTED HashMgr -{ - int tablesize; - struct hentry ** tableptr; - int userword; - flag flag_mode; - int complexprefixes; - int utf8; - unsigned short forbiddenword; - int langnum; - char * enc; - char * lang; - struct cs_info * csconv; - char * ignorechars; - unsigned short * ignorechars_utf16; - int ignorechars_utf16_len; - int numaliasf; // flag vector `compression' with aliases - unsigned short ** aliasf; - unsigned short * aliasflen; - int numaliasm; // morphological desciption `compression' with aliases - char ** aliasm; - +class LIBHUNSPELL_DLL_EXPORTED HashMgr { + int tablesize; + struct hentry** tableptr; + flag flag_mode; + int complexprefixes; + int utf8; + unsigned short forbiddenword; + int langnum; + char* enc; + char* lang; + struct cs_info* csconv; + char* ignorechars; + std::vector ignorechars_utf16; + int numaliasf; // flag vector `compression' with aliases + unsigned short** aliasf; + unsigned short* aliasflen; + int numaliasm; // morphological desciption `compression' with aliases + char** aliasm; -public: - HashMgr(const char * tpath, const char * apath, const char * key = NULL); + public: + HashMgr(const char* tpath, const char* apath, const char* key = NULL); ~HashMgr(); - struct hentry * lookup(const char *) const; - int hash(const char *) const; - struct hentry * walk_hashtable(int & col, struct hentry * hp) const; + struct hentry* lookup(const char*) const; + int hash(const char*) const; + struct hentry* walk_hashtable(int& col, struct hentry* hp) const; - int add(const char * word); - int add_with_affix(const char * word, const char * pattern); - int remove(const char * word); - int decode_flags(unsigned short ** result, char * flags, FileMgr * af); - unsigned short decode_flag(const char * flag); - char * encode_flag(unsigned short flag); + int add(const std::string& word); + int add_with_affix(const char* word, const char* pattern); + int remove(const char* word); + int decode_flags(unsigned short** result, char* flags, FileMgr* af); + unsigned short decode_flag(const char* flag); + char* encode_flag(unsigned short flag); int is_aliasf(); - int get_aliasf(int index, unsigned short ** fvec, FileMgr * af); + int get_aliasf(int index, unsigned short** fvec, FileMgr* af); int is_aliasm(); - char * get_aliasm(int index); - -private: - int get_clen_and_captype(const char * word, int wbl, int * captype); - int load_tables(const char * tpath, const char * key); - int add_word(const char * word, int wbl, int wcl, unsigned short * ap, - int al, const char * desc, bool onlyupcase); - int load_config(const char * affpath, const char * key); - int parse_aliasf(char * line, FileMgr * af); - int add_hidden_capitalized_word(char * word, int wbl, int wcl, - unsigned short * flags, int al, char * dp, int captype); - int parse_aliasm(char * line, FileMgr * af); - int remove_forbidden_flag(const char * word); + char* get_aliasm(int index); + private: + int get_clen_and_captype(const std::string& word, int* captype); + int load_tables(const char* tpath, const char* key); + int add_word(const char* word, + int wbl, + int wcl, + unsigned short* ap, + int al, + const char* desc, + bool onlyupcase); + int load_config(const char* affpath, const char* key); + int parse_aliasf(char* line, FileMgr* af); + int add_hidden_capitalized_word(const std::string& word, + int wcl, + unsigned short* flags, + int al, + char* dp, + int captype); + int parse_aliasm(char* line, FileMgr* af); + int remove_forbidden_flag(const std::string& word); }; #endif diff --git a/src/spelling/hunspell/htypes.hxx b/src/spelling/hunspell/htypes.hxx index 5b6c9096..d2443944 100644 --- a/src/spelling/hunspell/htypes.hxx +++ b/src/spelling/hunspell/htypes.hxx @@ -1,15 +1,55 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _HTYPES_HXX_ #define _HTYPES_HXX_ -#define ROTATE_LEN 5 +#define ROTATE_LEN 5 -#define ROTATE(v,q) \ - (v) = ((v) << (q)) | (((v) >> (32 - q)) & ((1 << (q))-1)); +#define ROTATE(v, q) \ + (v) = ((v) << (q)) | (((v) >> (32 - q)) & ((1 << (q)) - 1)); // hentry options -#define H_OPT (1 << 0) +#define H_OPT (1 << 0) #define H_OPT_ALIASM (1 << 1) -#define H_OPT_PHON (1 << 2) +#define H_OPT_PHON (1 << 2) // see also csutil.hxx #define HENTRY_WORD(h) &(h->word[0]) @@ -17,16 +57,15 @@ // approx. number of user defined words #define USERWORD 1000 -struct hentry -{ - unsigned char blen; // word length in bytes - unsigned char clen; // word length in characters (different for UTF-8 enc.) - short alen; // length of affix flag vector - unsigned short * astr; // affix flag vector - struct hentry * next; // next word with same hash code - struct hentry * next_homonym; // next homonym word (with same hash code) - char var; // variable fields (only for special pronounciation yet) - char word[1]; // variable-length word (8-bit or UTF-8 encoding) +struct hentry { + unsigned char blen; // word length in bytes + unsigned char clen; // word length in characters (different for UTF-8 enc.) + short alen; // length of affix flag vector + unsigned short* astr; // affix flag vector + struct hentry* next; // next word with same hash code + struct hentry* next_homonym; // next homonym word (with same hash code) + char var; // variable fields (only for special pronounciation yet) + char word[1]; // variable-length word (8-bit or UTF-8 encoding) }; #endif diff --git a/src/spelling/hunspell/hunspell.cxx b/src/spelling/hunspell/hunspell.cxx index 7dbcd2f9..f7c15810 100644 --- a/src/spelling/hunspell/hunspell.cxx +++ b/src/spelling/hunspell/hunspell.cxx @@ -1,5 +1,75 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #include #include @@ -8,69 +78,80 @@ #include "hunspell.hxx" #include "hunspell.h" #ifndef MOZILLA_CLIENT -# include "config.h" +#include "config.h" #endif #include "csutil.hxx" +#include #include -Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key) -{ - encoding = NULL; - csconv = NULL; - utf8 = 0; - complexprefixes = 0; - affixpath = mystrdup(affpath); - maxdic = 0; - - /* first set up the hash manager */ - pHMgr[0] = new HashMgr(dpath, affpath, key); - if (pHMgr[0]) maxdic = 1; - - /* next set up the affix manager */ - /* it needs access to the hash manager lookup methods */ - pAMgr = new AffixMgr(affpath, pHMgr, &maxdic, key); - - /* get the preferred try string and the dictionary */ - /* encoding from the Affix Manager for that dictionary */ - char * try_string = pAMgr->get_try_string(); - encoding = pAMgr->get_encoding(); - langnum = pAMgr->get_langnum(); - utf8 = pAMgr->get_utf8(); - if (!utf8) - csconv = get_current_cs(encoding); - complexprefixes = pAMgr->get_complexprefixes(); - wordbreak = pAMgr->get_breaktable(); - - /* and finally set up the suggestion manager */ - pSMgr = new SuggestMgr(try_string, MAXSUGGESTION, pAMgr); - if (try_string) free(try_string); +#define MAXWORDLEN 176 +#define MAXWORDUTF8LEN (MAXWORDLEN * 3) + +Hunspell::Hunspell(const char* affpath, const char* dpath, const char* key) { + encoding = NULL; + csconv = NULL; + utf8 = 0; + complexprefixes = 0; + affixpath = mystrdup(affpath); + maxdic = 0; + + /* first set up the hash manager */ + pHMgr[0] = new HashMgr(dpath, affpath, key); + if (pHMgr[0]) + maxdic = 1; + + /* next set up the affix manager */ + /* it needs access to the hash manager lookup methods */ + pAMgr = new AffixMgr(affpath, pHMgr, &maxdic, key); + + /* get the preferred try string and the dictionary */ + /* encoding from the Affix Manager for that dictionary */ + char* try_string = pAMgr->get_try_string(); + encoding = pAMgr->get_encoding(); + langnum = pAMgr->get_langnum(); + utf8 = pAMgr->get_utf8(); + if (!utf8) + csconv = get_current_cs(encoding); + complexprefixes = pAMgr->get_complexprefixes(); + wordbreak = pAMgr->get_breaktable(); + + /* and finally set up the suggestion manager */ + pSMgr = new SuggestMgr(try_string, MAXSUGGESTION, pAMgr); + if (try_string) + free(try_string); } -Hunspell::~Hunspell() -{ - if (pSMgr) delete pSMgr; - if (pAMgr) delete pAMgr; - for (int i = 0; i < maxdic; i++) delete pHMgr[i]; - maxdic = 0; - pSMgr = NULL; - pAMgr = NULL; +Hunspell::~Hunspell() { + delete pSMgr; + delete pAMgr; + for (int i = 0; i < maxdic; i++) + delete pHMgr[i]; + maxdic = 0; + pSMgr = NULL; + pAMgr = NULL; #ifdef MOZILLA_CLIENT - delete [] csconv; + delete[] csconv; #endif - csconv= NULL; - if (encoding) free(encoding); - encoding = NULL; - if (affixpath) free(affixpath); - affixpath = NULL; + csconv = NULL; + if (encoding) + free(encoding); + encoding = NULL; + if (affixpath) + free(affixpath); + affixpath = NULL; } // load extra dictionaries -int Hunspell::add_dic(const char * dpath, const char * key) { - if (maxdic == MAXDIC || !affixpath) return 1; - pHMgr[maxdic] = new HashMgr(dpath, affixpath, key); - if (pHMgr[maxdic]) maxdic++; else return 1; - return 0; +int Hunspell::add_dic(const char* dpath, const char* key) { + if (maxdic == MAXDIC || !affixpath) + return 1; + pHMgr[maxdic] = new HashMgr(dpath, affixpath, key); + if (pHMgr[maxdic]) + maxdic++; + else + return 1; + return 0; } // make a copy of src at destination while removing all leading @@ -80,485 +161,478 @@ int Hunspell::add_dic(const char * dpath, const char * key) { // set the capitalization type // return the length of the "cleaned" (and UTF-8 encoded) word -int Hunspell::cleanword2(char * dest, const char * src, - w_char * dest_utf, int * nc, int * pcaptype, int * pabbrev) -{ - unsigned char * p = (unsigned char *) dest; - const unsigned char * q = (const unsigned char * ) src; - - // first skip over any leading blanks - while ((*q != '\0') && (*q == ' ')) q++; - - // now strip off any trailing periods (recording their presence) - *pabbrev = 0; - int nl = strlen((const char *)q); - while ((nl > 0) && (*(q+nl-1)=='.')) { - nl--; - (*pabbrev)++; - } - - // if no characters are left it can't be capitalized - if (nl <= 0) { - *pcaptype = NOCAP; - *p = '\0'; - return 0; - } - - strncpy(dest, (char *) q, nl); - *(dest + nl) = '\0'; - nl = strlen(dest); - if (utf8) { - *nc = u8_u16(dest_utf, MAXWORDLEN, dest); - // don't check too long words - if (*nc >= MAXWORDLEN) return 0; - if (*nc == -1) { // big Unicode character (non BMP area) - *pcaptype = NOCAP; - return nl; - } - *pcaptype = get_captype_utf8(dest_utf, *nc, langnum); - } else { - *pcaptype = get_captype(dest, nl, csconv); - *nc = nl; - } - return nl; -} +size_t Hunspell::cleanword2(std::string& dest, + std::vector& dest_utf, + const char* src, + int* nc, + int* pcaptype, + size_t* pabbrev) { + dest.clear(); + dest_utf.clear(); + + const char* q = src; + + // first skip over any leading blanks + while ((*q != '\0') && (*q == ' ')) + q++; + + // now strip off any trailing periods (recording their presence) + *pabbrev = 0; + int nl = strlen(q); + while ((nl > 0) && (*(q + nl - 1) == '.')) { + nl--; + (*pabbrev)++; + } -int Hunspell::cleanword(char * dest, const char * src, - int * pcaptype, int * pabbrev) -{ - unsigned char * p = (unsigned char *) dest; - const unsigned char * q = (const unsigned char * ) src; - int firstcap = 0; - - // first skip over any leading blanks - while ((*q != '\0') && (*q == ' ')) q++; - - // now strip off any trailing periods (recording their presence) - *pabbrev = 0; - int nl = strlen((const char *)q); - while ((nl > 0) && (*(q+nl-1)=='.')) { - nl--; - (*pabbrev)++; - } - - // if no characters are left it can't be capitalized - if (nl <= 0) { - *pcaptype = NOCAP; - *p = '\0'; - return 0; - } - - // now determine the capitalization type of the first nl letters - int ncap = 0; - int nneutral = 0; - int nc = 0; - - if (!utf8) { - while (nl > 0) { - nc++; - if (csconv[(*q)].ccase) ncap++; - if (csconv[(*q)].cupper == csconv[(*q)].clower) nneutral++; - *p++ = *q++; - nl--; - } - // remember to terminate the destination string - *p = '\0'; - firstcap = csconv[(unsigned char)(*dest)].ccase; - } else { - unsigned short idx; - w_char t[MAXWORDLEN]; - nc = u8_u16(t, MAXWORDLEN, src); - for (int i = 0; i < nc; i++) { - idx = (t[i].h << 8) + t[i].l; - unsigned short low = unicodetolower(idx, langnum); - if (idx != low) ncap++; - if (unicodetoupper(idx, langnum) == low) nneutral++; - } - u16_u8(dest, MAXWORDUTF8LEN, t, nc); - if (ncap) { - idx = (t[0].h << 8) + t[0].l; - firstcap = (idx != unicodetolower(idx, langnum)); - } - } - - // now finally set the captype - if (ncap == 0) { - *pcaptype = NOCAP; - } else if ((ncap == 1) && firstcap) { - *pcaptype = INITCAP; - } else if ((ncap == nc) || ((ncap + nneutral) == nc)){ - *pcaptype = ALLCAP; - } else if ((ncap > 1) && firstcap) { - *pcaptype = HUHINITCAP; - } else { - *pcaptype = HUHCAP; - } - return strlen(dest); -} + // if no characters are left it can't be capitalized + if (nl <= 0) { + *pcaptype = NOCAP; + return 0; + } -void Hunspell::mkallcap(char * p) -{ + dest.append(q, nl); + nl = dest.size(); if (utf8) { - w_char u[MAXWORDLEN]; - int nc = u8_u16(u, MAXWORDLEN, p); - unsigned short idx; - for (int i = 0; i < nc; i++) { - idx = (u[i].h << 8) + u[i].l; - if (idx != unicodetoupper(idx, langnum)) { - u[i].h = (unsigned char) (unicodetoupper(idx, langnum) >> 8); - u[i].l = (unsigned char) (unicodetoupper(idx, langnum) & 0x00FF); - } - } - u16_u8(p, MAXWORDUTF8LEN, u, nc); + *nc = u8_u16(dest_utf, dest); + *pcaptype = get_captype_utf8(dest_utf, langnum); } else { - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].cupper; - p++; - } + *pcaptype = get_captype(dest, csconv); + *nc = nl; } + return nl; } -int Hunspell::mkallcap2(char * p, w_char * u, int nc) -{ - if (utf8) { - unsigned short idx; - for (int i = 0; i < nc; i++) { - idx = (u[i].h << 8) + u[i].l; - unsigned short up = unicodetoupper(idx, langnum); - if (idx != up) { - u[i].h = (unsigned char) (up >> 8); - u[i].l = (unsigned char) (up & 0x00FF); - } - } - u16_u8(p, MAXWORDUTF8LEN, u, nc); - return strlen(p); +void Hunspell::cleanword(std::string& dest, + const char* src, + int* pcaptype, + int* pabbrev) { + dest.clear(); + const unsigned char* q = (const unsigned char*)src; + int firstcap = 0; + + // first skip over any leading blanks + while ((*q != '\0') && (*q == ' ')) + q++; + + // now strip off any trailing periods (recording their presence) + *pabbrev = 0; + int nl = strlen((const char*)q); + while ((nl > 0) && (*(q + nl - 1) == '.')) { + nl--; + (*pabbrev)++; + } + + // if no characters are left it can't be capitalized + if (nl <= 0) { + *pcaptype = NOCAP; + return; + } + + // now determine the capitalization type of the first nl letters + int ncap = 0; + int nneutral = 0; + int nc = 0; + + if (!utf8) { + while (nl > 0) { + nc++; + if (csconv[(*q)].ccase) + ncap++; + if (csconv[(*q)].cupper == csconv[(*q)].clower) + nneutral++; + dest.push_back(*q++); + nl--; + } + // remember to terminate the destination string + firstcap = csconv[static_cast(dest[0])].ccase; } else { - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].cupper; - p++; + std::vector t; + u8_u16(t, src); + for (size_t i = 0; i < t.size(); ++i) { + unsigned short idx = (t[i].h << 8) + t[i].l; + unsigned short low = unicodetolower(idx, langnum); + if (idx != low) + ncap++; + if (unicodetoupper(idx, langnum) == low) + nneutral++; + } + u16_u8(dest, t); + if (ncap) { + unsigned short idx = (t[0].h << 8) + t[0].l; + firstcap = (idx != unicodetolower(idx, langnum)); } } - return nc; -} + // now finally set the captype + if (ncap == 0) { + *pcaptype = NOCAP; + } else if ((ncap == 1) && firstcap) { + *pcaptype = INITCAP; + } else if ((ncap == nc) || ((ncap + nneutral) == nc)) { + *pcaptype = ALLCAP; + } else if ((ncap > 1) && firstcap) { + *pcaptype = HUHINITCAP; + } else { + *pcaptype = HUHCAP; + } +} -void Hunspell::mkallsmall(char * p) -{ - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].clower; - p++; - } +void Hunspell::mkallcap(std::string& u8) { + if (utf8) { + std::vector u16; + u8_u16(u16, u8); + ::mkallcap_utf(u16, langnum); + u16_u8(u8, u16); + } else { + ::mkallcap(u8, csconv); + } } -int Hunspell::mkallsmall2(char * p, w_char * u, int nc) -{ +int Hunspell::mkallsmall2(std::string& u8, std::vector& u16) { if (utf8) { - unsigned short idx; - for (int i = 0; i < nc; i++) { - idx = (u[i].h << 8) + u[i].l; - unsigned short low = unicodetolower(idx, langnum); - if (idx != low) { - u[i].h = (unsigned char) (low >> 8); - u[i].l = (unsigned char) (low & 0x00FF); - } - } - u16_u8(p, MAXWORDUTF8LEN, u, nc); - return strlen(p); + ::mkallsmall_utf(u16, langnum); + u16_u8(u8, u16); } else { - while (*p != '\0') { - *p = csconv[((unsigned char) *p)].clower; - p++; - } + ::mkallsmall(u8, csconv); } - return nc; + return u8.size(); } // convert UTF-8 sharp S codes to latin 1 -char * Hunspell::sharps_u8_l1(char * dest, char * source) { - char * p = dest; - *p = *source; - for (p++, source++; *(source - 1); p++, source++) { - *p = *source; - if (*source == '\x9F') *--p = '\xDF'; - } - return dest; +std::string Hunspell::sharps_u8_l1(const std::string& source) { + std::string dest(source); + mystrrep(dest, "\xC3\x9F", "\xDF"); + return dest; } // recursive search for right ss - sharp s permutations -hentry * Hunspell::spellsharps(char * base, char * pos, int n, - int repnum, char * tmp, int * info, char **root) { - pos = strstr(pos, "ss"); - if (pos && (n < MAXSHARPS)) { - *pos = '\xC3'; - *(pos + 1) = '\x9F'; - hentry * h = spellsharps(base, pos + 2, n + 1, repnum + 1, tmp, info, root); - if (h) return h; - *pos = 's'; - *(pos + 1) = 's'; - h = spellsharps(base, pos + 2, n + 1, repnum, tmp, info, root); - if (h) return h; - } else if (repnum > 0) { - if (utf8) return checkword(base, info, root); - return checkword(sharps_u8_l1(tmp, base), info, root); - } - return NULL; +hentry* Hunspell::spellsharps(std::string& base, + size_t n_pos, + int n, + int repnum, + int* info, + char** root) { + size_t pos = base.find("ss", n_pos); + if (pos != std::string::npos && (n < MAXSHARPS)) { + base[pos] = '\xC3'; + base[pos + 1] = '\x9F'; + hentry* h = spellsharps(base, pos + 2, n + 1, repnum + 1, info, root); + if (h) + return h; + base[pos] = 's'; + base[pos + 1] = 's'; + h = spellsharps(base, pos + 2, n + 1, repnum, info, root); + if (h) + return h; + } else if (repnum > 0) { + if (utf8) + return checkword(base.c_str(), info, root); + std::string tmp(sharps_u8_l1(base)); + return checkword(tmp.c_str(), info, root); + } + return NULL; } -int Hunspell::is_keepcase(const hentry * rv) { - return pAMgr && rv->astr && pAMgr->get_keepcase() && - TESTAFF(rv->astr, pAMgr->get_keepcase(), rv->alen); +int Hunspell::is_keepcase(const hentry* rv) { + return pAMgr && rv->astr && pAMgr->get_keepcase() && + TESTAFF(rv->astr, pAMgr->get_keepcase(), rv->alen); } /* insert a word to the beginning of the suggestion array and return ns */ -int Hunspell::insert_sug(char ***slst, char * word, int ns) { - char * dup = mystrdup(word); - if (!dup) return ns; - if (ns == MAXSUGGESTION) { - ns--; - free((*slst)[ns]); - } - for (int k = ns; k > 0; k--) (*slst)[k] = (*slst)[k - 1]; - (*slst)[0] = dup; - return ns + 1; +int Hunspell::insert_sug(char*** slst, const char* word, int ns) { + if (!*slst) + return ns; + char* dup = mystrdup(word); + if (!dup) + return ns; + if (ns == MAXSUGGESTION) { + ns--; + free((*slst)[ns]); + } + for (int k = ns; k > 0; k--) + (*slst)[k] = (*slst)[k - 1]; + (*slst)[0] = dup; + return ns + 1; } -int Hunspell::spell(const char * word, int * info, char ** root) -{ - struct hentry * rv=NULL; - // need larger vector. For example, Turkish capital letter I converted a - // 2-byte UTF-8 character (dotless i) by mkallsmall. - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - w_char unicw[MAXWORDLEN]; +int Hunspell::spell(const char* word, int* info, char** root) { + struct hentry* rv = NULL; int info2 = 0; - if (!info) info = &info2; else *info = 0; + if (!info) + info = &info2; + else + *info = 0; // Hunspell supports XML input of the simplified API (see manual) - if (strcmp(word, SPELL_XML) == 0) return 1; + if (strcmp(word, SPELL_XML) == 0) + return 1; int nc = strlen(word); - int wl2 = 0; if (utf8) { - if (nc >= MAXWORDUTF8LEN) return 0; + if (nc >= MAXWORDUTF8LEN) + return 0; } else { - if (nc >= MAXWORDLEN) return 0; + if (nc >= MAXWORDLEN) + return 0; } - int captype = 0; - int abbv = 0; - int wl = 0; + int captype = NOCAP; + size_t abbv = 0; + size_t wl = 0; + + std::string scw; + std::vector sunicw; // input conversion - RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; - if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); - else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; + { + std::string wspace; + + int convstatus = rl ? rl->conv(word, wspace) : 0; + if (convstatus < 0) + return 0; + else if (convstatus > 0) + wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + else + wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + } + +#ifdef MOZILLA_CLIENT + // accept the abbreviated words without dots + // workaround for the incomplete tokenization of Mozilla + abbv = 1; +#endif - if (wl == 0 || maxdic == 0) return 1; - if (root) *root = NULL; + if (wl == 0 || maxdic == 0) + return 1; + if (root) + *root = NULL; - // allow numbers with dots, dashes and commas (but forbid double separators: "..", "--" etc.) + // allow numbers with dots, dashes and commas (but forbid double separators: + // "..", "--" etc.) enum { NBEGIN, NNUM, NSEP }; int nstate = NBEGIN; - int i; + size_t i; for (i = 0; (i < wl); i++) { - if ((cw[i] <= '9') && (cw[i] >= '0')) { - nstate = NNUM; - } else if ((cw[i] == ',') || (cw[i] == '.') || (cw[i] == '-')) { - if ((nstate == NSEP) || (i == 0)) break; - nstate = NSEP; - } else break; + if ((scw[i] <= '9') && (scw[i] >= '0')) { + nstate = NNUM; + } else if ((scw[i] == ',') || (scw[i] == '.') || (scw[i] == '-')) { + if ((nstate == NSEP) || (i == 0)) + break; + nstate = NSEP; + } else + break; } - if ((i == wl) && (nstate == NNUM)) return 1; - - switch(captype) { - case HUHCAP: - /* FALLTHROUGH */ - case HUHINITCAP: - *info += SPELL_ORIGCAP; - /* FALLTHROUGH */ - case NOCAP: - rv = checkword(cw, info, root); - if ((abbv) && !(rv)) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - rv = checkword(wspace, info, root); - } + if ((i == wl) && (nstate == NNUM)) + return 1; + + switch (captype) { + case HUHCAP: + /* FALLTHROUGH */ + case HUHINITCAP: + *info += SPELL_ORIGCAP; + /* FALLTHROUGH */ + case NOCAP: + rv = checkword(scw.c_str(), info, root); + if ((abbv) && !(rv)) { + std::string u8buffer(scw); + u8buffer.push_back('.'); + rv = checkword(u8buffer.c_str(), info, root); + } + break; + case ALLCAP: { + *info += SPELL_ORIGCAP; + rv = checkword(scw.c_str(), info, root); + if (rv) + break; + if (abbv) { + std::string u8buffer(scw); + u8buffer.push_back('.'); + rv = checkword(u8buffer.c_str(), info, root); + if (rv) + break; + } + // Spec. prefix handling for Catalan, French, Italian: + // prefixes separated by apostrophe (SANT'ELIA -> Sant'+Elia). + size_t apos = pAMgr ? scw.find('\'') : std::string::npos; + if (apos != std::string::npos) { + mkallsmall2(scw, sunicw); + //conversion may result in string with different len to pre-mkallsmall2 + //so re-scan + if (apos != std::string::npos && apos < scw.size() - 1) { + std::string part1 = scw.substr(0, apos+1); + std::string part2 = scw.substr(apos+1); + if (utf8) { + std::vector part1u, part2u; + u8_u16(part1u, part1); + u8_u16(part2u, part2); + mkinitcap2(part2, part2u); + scw = part1 + part2; + sunicw = part1u; + sunicw.insert(sunicw.end(), part2u.begin(), part2u.end()); + rv = checkword(scw.c_str(), info, root); + if (rv) + break; + } else { + mkinitcap2(part2, sunicw); + scw = part1 + part2; + rv = checkword(scw.c_str(), info, root); + if (rv) + break; + } + mkinitcap2(scw, sunicw); + rv = checkword(scw.c_str(), info, root); + if (rv) break; - case ALLCAP: { - *info += SPELL_ORIGCAP; - rv = checkword(cw, info, root); - if (rv) break; - if (abbv) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - rv = checkword(wspace, info, root); - if (rv) break; - } - // Spec. prefix handling for Catalan, French, Italian: - // prefixes separated by apostrophe (SANT'ELIA -> Sant'+Elia). - if (pAMgr && strchr(cw, '\'')) { - wl = mkallsmall2(cw, unicw, nc); - //There are no really sane circumstances where this could fail, - //but anyway... - if (char * apostrophe = strchr(cw, '\'')) { - if (utf8) { - w_char tmpword[MAXWORDLEN]; - *apostrophe = '\0'; - wl2 = u8_u16(tmpword, MAXWORDLEN, cw); - *apostrophe = '\''; - if (wl2 >= 0 && wl2 < nc) { - mkinitcap2(apostrophe + 1, unicw + wl2 + 1, nc - wl2 - 1); - rv = checkword(cw, info, root); - if (rv) break; - } - } else { - mkinitcap2(apostrophe + 1, unicw, nc); - rv = checkword(cw, info, root); - if (rv) break; - } - } - mkinitcap2(cw, unicw, nc); - rv = checkword(cw, info, root); - if (rv) break; - } - if (pAMgr && pAMgr->get_checksharps() && strstr(cw, "SS")) { - char tmpword[MAXWORDUTF8LEN]; - wl = mkallsmall2(cw, unicw, nc); - memcpy(wspace,cw,(wl+1)); - rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root); - if (!rv) { - wl2 = mkinitcap2(cw, unicw, nc); - rv = spellsharps(cw, cw, 0, 0, tmpword, info, root); - } - if ((abbv) && !(rv)) { - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root); - if (!rv) { - memcpy(wspace, cw, wl2); - *(wspace+wl2) = '.'; - *(wspace+wl2+1) = '\0'; - rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root); - } - } - if (rv) break; - } } - case INITCAP: { - *info += SPELL_ORIGCAP; - wl = mkallsmall2(cw, unicw, nc); - memcpy(wspace,cw,(wl+1)); - wl2 = mkinitcap2(cw, unicw, nc); - if (captype == INITCAP) *info += SPELL_INITCAP; - rv = checkword(cw, info, root); - if (captype == INITCAP) *info -= SPELL_INITCAP; - // forbid bad capitalization - // (for example, ijs -> Ijs instead of IJs in Dutch) - // use explicit forms in dic: Ijs/F (F = FORBIDDENWORD flag) - if (*info & SPELL_FORBIDDEN) { - rv = NULL; - break; - } - if (rv && is_keepcase(rv) && (captype == ALLCAP)) rv = NULL; - if (rv) break; - - rv = checkword(wspace, info, root); - if (abbv && !rv) { - - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - rv = checkword(wspace, info, root); - if (!rv) { - memcpy(wspace, cw, wl2); - *(wspace+wl2) = '.'; - *(wspace+wl2+1) = '\0'; - if (captype == INITCAP) *info += SPELL_INITCAP; - rv = checkword(wspace, info, root); - if (captype == INITCAP) *info -= SPELL_INITCAP; - if (rv && is_keepcase(rv) && (captype == ALLCAP)) rv = NULL; - break; - } - } - if (rv && is_keepcase(rv) && - ((captype == ALLCAP) || - // if CHECKSHARPS: KEEPCASE words with \xDF are allowed - // in INITCAP form, too. - !(pAMgr->get_checksharps() && - ((utf8 && strstr(wspace, "\xC3\x9F")) || - (!utf8 && strchr(wspace, '\xDF')))))) rv = NULL; - break; - } + } + if (pAMgr && pAMgr->get_checksharps() && scw.find("SS") != std::string::npos) { + + mkallsmall2(scw, sunicw); + std::string u8buffer(scw); + rv = spellsharps(u8buffer, 0, 0, 0, info, root); + if (!rv) { + mkinitcap2(scw, sunicw); + rv = spellsharps(scw, 0, 0, 0, info, root); + } + if ((abbv) && !(rv)) { + u8buffer.push_back('.'); + rv = spellsharps(u8buffer, 0, 0, 0, info, root); + if (!rv) { + u8buffer = std::string(scw); + u8buffer.push_back('.'); + rv = spellsharps(u8buffer, 0, 0, 0, info, root); + } + } + if (rv) + break; + } + } + case INITCAP: { + + *info += SPELL_ORIGCAP; + mkallsmall2(scw, sunicw); + std::string u8buffer(scw); + mkinitcap2(scw, sunicw); + if (captype == INITCAP) + *info += SPELL_INITCAP; + rv = checkword(scw.c_str(), info, root); + if (captype == INITCAP) + *info -= SPELL_INITCAP; + // forbid bad capitalization + // (for example, ijs -> Ijs instead of IJs in Dutch) + // use explicit forms in dic: Ijs/F (F = FORBIDDENWORD flag) + if (*info & SPELL_FORBIDDEN) { + rv = NULL; + break; + } + if (rv && is_keepcase(rv) && (captype == ALLCAP)) + rv = NULL; + if (rv) + break; + + rv = checkword(u8buffer.c_str(), info, root); + if (abbv && !rv) { + u8buffer.push_back('.'); + rv = checkword(u8buffer.c_str(), info, root); + if (!rv) { + u8buffer = scw; + u8buffer.push_back('.'); + if (captype == INITCAP) + *info += SPELL_INITCAP; + rv = checkword(u8buffer.c_str(), info, root); + if (captype == INITCAP) + *info -= SPELL_INITCAP; + if (rv && is_keepcase(rv) && (captype == ALLCAP)) + rv = NULL; + break; + } + } + if (rv && is_keepcase(rv) && + ((captype == ALLCAP) || + // if CHECKSHARPS: KEEPCASE words with \xDF are allowed + // in INITCAP form, too. + !(pAMgr->get_checksharps() && + ((utf8 && u8buffer.find("\xC3\x9F") != std::string::npos) || + (!utf8 && u8buffer.find('\xDF') != std::string::npos))))) + rv = NULL; + break; + } } if (rv) { - if (pAMgr && pAMgr->get_warn() && rv->astr && - TESTAFF(rv->astr, pAMgr->get_warn(), rv->alen)) { - *info += SPELL_WARN; - if (pAMgr->get_forbidwarn()) return 0; - return HUNSPELL_OK_WARN; - } - return HUNSPELL_OK; + if (pAMgr && pAMgr->get_warn() && rv->astr && + TESTAFF(rv->astr, pAMgr->get_warn(), rv->alen)) { + *info += SPELL_WARN; + if (pAMgr->get_forbidwarn()) + return 0; + return HUNSPELL_OK_WARN; + } + return HUNSPELL_OK; } // recursive breaking at break points if (wordbreak) { - char * s; - char r; + int nbr = 0; - wl = strlen(cw); + wl = scw.size(); int numbreak = pAMgr ? pAMgr->get_numbreak() : 0; // calculate break points for recursion limit for (int j = 0; j < numbreak; j++) { - s = cw; - do { - s = (char *) strstr(s, wordbreak[j]); - if (s) { - nbr++; - s++; - } - } while (s); - } - if (nbr >= 10) return 0; + size_t len = strlen(wordbreak[j]); + size_t pos = 0; + while ((pos = scw.find(wordbreak[j], pos, len)) != std::string::npos) { + ++nbr; + pos += len; + } + } + if (nbr >= 10) + return 0; // check boundary patterns (^begin and end$) for (int j = 0; j < numbreak; j++) { - int plen = strlen(wordbreak[j]); - if (plen == 1 || plen > wl) continue; - if (wordbreak[j][0] == '^' && strncmp(cw, wordbreak[j] + 1, plen - 1) == 0 - && spell(cw + plen - 1)) return 1; + size_t plen = strlen(wordbreak[j]); + if (plen == 1 || plen > wl) + continue; + + if (wordbreak[j][0] == '^' && + scw.compare(0, plen - 1, wordbreak[j] + 1, plen -1) == 0 && spell(scw.c_str() + plen - 1)) + return 1; + if (wordbreak[j][plen - 1] == '$' && - strncmp(cw + wl - plen + 1, wordbreak[j], plen - 1) == 0) { - r = cw[wl - plen + 1]; - cw[wl - plen + 1] = '\0'; - if (spell(cw)) return 1; - cw[wl - plen + 1] = r; - } + scw.compare(wl - plen + 1, plen - 1, wordbreak[j], plen - 1) == 0) { + char r = scw[wl - plen + 1]; + scw[wl - plen + 1] = '\0'; + if (spell(scw.c_str())) + return 1; + scw[wl - plen + 1] = r; + } } // other patterns for (int j = 0; j < numbreak; j++) { - int plen = strlen(wordbreak[j]); - s=(char *) strstr(cw, wordbreak[j]); - if (s && (s > cw) && (s < cw + wl - plen)) { - if (!spell(s + plen)) continue; - r = *s; - *s = '\0'; + size_t plen = strlen(wordbreak[j]); + size_t found = scw.find(wordbreak[j]); + if ((found > 0) && (found < wl - plen)) { + if (!spell(scw.c_str() + found + plen)) + continue; + char r = scw[found]; + scw[found] = '\0'; // examine 2 sides of the break point - if (spell(cw)) return 1; - *s = r; + if (spell(scw.c_str())) + return 1; + scw[found] = r; // LANG_hu: spec. dash rule - if (langnum == LANG_hu && strcmp(wordbreak[j], "-") == 0) { - r = s[1]; - s[1] = '\0'; - if (spell(cw)) return 1; // check the first part with dash - s[1] = r; - } - // end of LANG speficic region - + if (langnum == LANG_hu && strcmp(wordbreak[j], "-") == 0) { + r = scw[found + 1]; + scw[found + 1] = '\0'; + if (spell(scw.c_str())) + return 1; // check the first part with dash + scw[found + 1] = r; + } + // end of LANG specific region } } } @@ -566,441 +640,494 @@ int Hunspell::spell(const char * word, int * info, char ** root) return 0; } -struct hentry * Hunspell::checkword(const char * w, int * info, char ** root) -{ - struct hentry * he = NULL; +struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { + struct hentry* he = NULL; + bool usebuffer = false; int len, i; - char w2[MAXWORDUTF8LEN]; - const char * word; + std::string w2; + const char* word; - char * ignoredchars = pAMgr->get_ignore(); + char* ignoredchars = pAMgr ? pAMgr->get_ignore() : NULL; if (ignoredchars != NULL) { - strcpy(w2, w); - if (utf8) { - int ignoredchars_utf16_len; - unsigned short * ignoredchars_utf16 = pAMgr->get_ignore_utf16(&ignoredchars_utf16_len); - remove_ignored_chars_utf(w2, ignoredchars_utf16, ignoredchars_utf16_len); - } else { - remove_ignored_chars(w2,ignoredchars); - } - word = w2; - } else word = w; + w2.assign(w); + if (utf8) { + const std::vector& ignoredchars_utf16 = + pAMgr->get_ignore_utf16(); + remove_ignored_chars_utf(w2, ignoredchars_utf16); + } else { + remove_ignored_chars(w2, ignoredchars); + } + word = w2.c_str(); + usebuffer = true; + } else + word = w; len = strlen(word); if (!len) - return NULL; + return NULL; // word reversing wrapper for complex prefixes if (complexprefixes) { - if (word != w2) { - strcpy(w2, word); - word = w2; + if (!usebuffer) { + w2.assign(word); + usebuffer = true; } - if (utf8) reverseword_utf(w2); else reverseword(w2); + if (utf8) + reverseword_utf(w2); + else + reverseword(w2); + } + + if (usebuffer) { + word = w2.c_str(); } // look word in hash table - for (i = 0; (i < maxdic) && !he; i ++) { - he = (pHMgr[i])->lookup(word); - - // check forbidden and onlyincompound words - if ((he) && (he->astr) && (pAMgr) && TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) { - if (info) *info += SPELL_FORBIDDEN; - // LANG_hu section: set dash information for suggestions - if (langnum == LANG_hu) { + for (i = 0; (i < maxdic) && !he; i++) { + he = (pHMgr[i])->lookup(word); + + // check forbidden and onlyincompound words + if ((he) && (he->astr) && (pAMgr) && + TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) { + if (info) + *info += SPELL_FORBIDDEN; + // LANG_hu section: set dash information for suggestions + if (langnum == LANG_hu) { if (pAMgr->get_compoundflag() && TESTAFF(he->astr, pAMgr->get_compoundflag(), he->alen)) { - if (info) *info += SPELL_COMPOUND; + if (info) + *info += SPELL_COMPOUND; } + } + return NULL; } - return NULL; - } - // he = next not needaffix, onlyincompound homonym or onlyupcase word - while (he && (he->astr) && - ((pAMgr->get_needaffix() && TESTAFF(he->astr, pAMgr->get_needaffix(), he->alen)) || - (pAMgr->get_onlyincompound() && TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen)) || - (info && (*info & SPELL_INITCAP) && TESTAFF(he->astr, ONLYUPCASEFLAG, he->alen)) - )) he = he->next_homonym; + // he = next not needaffix, onlyincompound homonym or onlyupcase word + while (he && (he->astr) && pAMgr && + ((pAMgr->get_needaffix() && + TESTAFF(he->astr, pAMgr->get_needaffix(), he->alen)) || + (pAMgr->get_onlyincompound() && + TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen)) || + (info && (*info & SPELL_INITCAP) && + TESTAFF(he->astr, ONLYUPCASEFLAG, he->alen)))) + he = he->next_homonym; } // check with affixes if (!he && pAMgr) { - // try stripping off affixes */ - he = pAMgr->affix_check(word, len, 0); - - // check compound restriction and onlyupcase - if (he && he->astr && ( - (pAMgr->get_onlyincompound() && - TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen)) || - (info && (*info & SPELL_INITCAP) && - TESTAFF(he->astr, ONLYUPCASEFLAG, he->alen)))) { - he = NULL; - } - - if (he) { - if ((he->astr) && (pAMgr) && TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) { - if (info) *info += SPELL_FORBIDDEN; - return NULL; + // try stripping off affixes */ + he = pAMgr->affix_check(word, len, 0); + + // check compound restriction and onlyupcase + if (he && he->astr && + ((pAMgr->get_onlyincompound() && + TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen)) || + (info && (*info & SPELL_INITCAP) && + TESTAFF(he->astr, ONLYUPCASEFLAG, he->alen)))) { + he = NULL; + } + + if (he) { + if ((he->astr) && (pAMgr) && + TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) { + if (info) + *info += SPELL_FORBIDDEN; + return NULL; + } + if (root) { + std::string word_root(he->word); + if (complexprefixes) { + if (utf8) + reverseword_utf(word_root); + else + reverseword(word_root); } + *root = mystrdup(word_root.c_str()); + } + // try check compound word + } else if (pAMgr->get_compound()) { + struct hentry* rwords[100]; // buffer for COMPOUND pattern checking + he = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 0, info); + // LANG_hu section: `moving rule' with last dash + if ((!he) && (langnum == LANG_hu) && (word[len - 1] == '-')) { + char* dup = mystrdup(word); + if (!dup) + return NULL; + dup[len - 1] = '\0'; + he = pAMgr->compound_check(dup, len - 1, -5, 0, 100, 0, NULL, (hentry**)&rwords, 1, 0, + info); + free(dup); + } + // end of LANG specific region + if (he) { if (root) { - *root = mystrdup(he->word); - if (*root && complexprefixes) { - if (utf8) reverseword_utf(*root); else reverseword(*root); - } - } - // try check compound word - } else if (pAMgr->get_compound()) { - he = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, 0, 0, info); - // LANG_hu section: `moving rule' with last dash - if ((!he) && (langnum == LANG_hu) && (word[len-1] == '-')) { - char * dup = mystrdup(word); - if (!dup) return NULL; - dup[len-1] = '\0'; - he = pAMgr->compound_check(dup, len-1, -5, 0, 100, 0, NULL, 1, 0, info); - free(dup); - } - // end of LANG speficic region - if (he) { - if (root) { - *root = mystrdup(he->word); - if (*root && complexprefixes) { - if (utf8) reverseword_utf(*root); else reverseword(*root); - } - } - if (info) *info += SPELL_COMPOUND; + std::string word_root(he->word); + if (complexprefixes) { + if (utf8) + reverseword_utf(word_root); + else + reverseword(word_root); } - } - + *root = mystrdup(word_root.c_str()); + } + if (info) + *info += SPELL_COMPOUND; + } + } } return he; } -int Hunspell::suggest(char*** slst, const char * word) -{ +int Hunspell::suggest(char*** slst, const char* word) { int onlycmpdsug = 0; - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - if (!pSMgr || maxdic == 0) return 0; - w_char unicw[MAXWORDLEN]; + if (!pSMgr || maxdic == 0) + return 0; *slst = NULL; // process XML input of the simplified API (see manual) if (strncmp(word, SPELL_XML, sizeof(SPELL_XML) - 3) == 0) { - return spellml(slst, word); + return spellml(slst, word); } int nc = strlen(word); if (utf8) { - if (nc >= MAXWORDUTF8LEN) return 0; + if (nc >= MAXWORDUTF8LEN) + return 0; } else { - if (nc >= MAXWORDLEN) return 0; + if (nc >= MAXWORDLEN) + return 0; } - int captype = 0; - int abbv = 0; - int wl = 0; + int captype = NOCAP; + size_t abbv = 0; + size_t wl = 0; + + std::string scw; + std::vector sunicw; // input conversion - RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; - if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); - else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; + { + std::string wspace; + + int convstatus = rl ? rl->conv(word, wspace) : 0; + if (convstatus < 0) + return 0; + else if (convstatus > 0) + wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + else + wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + + if (wl == 0) + return 0; + } - if (wl == 0) return 0; int ns = 0; int capwords = 0; // check capitalized form for FORCEUCASE if (pAMgr && captype == NOCAP && pAMgr->get_forceucase()) { int info = SPELL_ORIGCAP; - char ** wlst; - if (checkword(cw, &info, NULL)) { - if (*slst) { - wlst = *slst; - } else { - wlst = (char **) malloc(MAXSUGGESTION * sizeof(char *)); - if (wlst == NULL) return -1; - *slst = wlst; - for (int i = 0; i < MAXSUGGESTION; i++) { - wlst[i] = NULL; + if (checkword(scw.c_str(), &info, NULL)) { + std::string form(scw); + mkinitcap(form); + + char** wlst = (char**)malloc(MAXSUGGESTION * sizeof(char*)); + if (wlst == NULL) + return -1; + *slst = wlst; + wlst[0] = mystrdup(form.c_str()); + for (int i = 1; i < MAXSUGGESTION; ++i) { + wlst[i] = NULL; + } + + return 1; + } + } + + switch (captype) { + case NOCAP: { + ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); + break; + } + + case INITCAP: { + capwords = 1; + ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); + if (ns == -1) + break; + std::string wspace(scw); + mkallsmall2(wspace, sunicw); + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + break; + } + case HUHINITCAP: + capwords = 1; + case HUHCAP: { + ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); + if (ns != -1) { + // something.The -> something. The + size_t dot_pos = scw.find('.'); + if (dot_pos != std::string::npos) { + std::string postdot = scw.substr(dot_pos + 1); + int captype_; + if (utf8) { + std::vector postdotu; + u8_u16(postdotu, postdot); + captype_ = get_captype_utf8(postdotu, langnum); + } else { + captype_ = get_captype(postdot, csconv); + } + if (captype_ == INITCAP) { + std::string str(scw); + str.insert(dot_pos + 1, 1, ' '); + ns = insert_sug(slst, str.c_str(), ns); + } + } + + std::string wspace; + + if (captype == HUHINITCAP) { + // TheOpenOffice.org -> The OpenOffice.org + wspace = scw; + mkinitsmall2(wspace, sunicw); + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + } + wspace = scw; + mkallsmall2(wspace, sunicw); + if (spell(wspace.c_str())) + ns = insert_sug(slst, wspace.c_str(), ns); + int prevns = ns; + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + if (captype == HUHINITCAP) { + mkinitcap2(wspace, sunicw); + if (spell(wspace.c_str())) + ns = insert_sug(slst, wspace.c_str(), ns); + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + } + // aNew -> "a New" (instead of "a new") + for (int j = prevns; j < ns; j++) { + char* space = strchr((*slst)[j], ' '); + if (space) { + size_t slen = strlen(space + 1); + // different case after space (need capitalisation) + if ((slen < wl) && strcmp(scw.c_str() + wl - slen, space + 1)) { + std::string first((*slst)[j], space + 1); + std::string second(space + 1); + std::vector w; + if (utf8) + u8_u16(w, second); + mkinitcap2(second, w); + // set as first suggestion + char* r = (*slst)[j]; + for (int k = j; k > 0; k--) + (*slst)[k] = (*slst)[k - 1]; + free(r); + (*slst)[0] = mystrdup((first + second).c_str()); } + } } - wlst[0] = mystrdup(cw); - mkinitcap(wlst[0]); - return 1; + } + break; + } + + case ALLCAP: { + std::string wspace(scw); + mkallsmall2(wspace, sunicw); + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + if (ns == -1) + break; + if (pAMgr && pAMgr->get_keepcase() && spell(wspace.c_str())) + ns = insert_sug(slst, wspace.c_str(), ns); + mkinitcap2(wspace, sunicw); + ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + for (int j = 0; j < ns; j++) { + std::string form((*slst)[j]); + mkallcap(form); + + if (pAMgr && pAMgr->get_checksharps()) { + if (utf8) { + mystrrep(form, "\xC3\x9F", "SS"); + } else { + mystrrep(form, "\xDF", "SS"); + } + } + + free((*slst)[j]); + (*slst)[j] = mystrdup(form.c_str()); + + } + break; } - } - - switch(captype) { - case NOCAP: { - ns = pSMgr->suggest(slst, cw, ns, &onlycmpdsug); - break; - } - - case INITCAP: { - capwords = 1; - ns = pSMgr->suggest(slst, cw, ns, &onlycmpdsug); - if (ns == -1) break; - memcpy(wspace,cw,(wl+1)); - mkallsmall2(wspace, unicw, nc); - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - break; - } - case HUHINITCAP: - capwords = 1; - case HUHCAP: { - ns = pSMgr->suggest(slst, cw, ns, &onlycmpdsug); - if (ns != -1) { - int prevns; - // something.The -> something. The - char * dot = strchr(cw, '.'); - if (dot && (dot > cw)) { - int captype_; - if (utf8) - { - w_char w_[MAXWORDLEN]; - int wl_ = u8_u16(w_, MAXWORDLEN, dot + 1); - captype_ = get_captype_utf8(w_, wl_, langnum); - } else captype_ = get_captype(dot+1, strlen(dot+1), csconv); - if (captype_ == INITCAP) - { - char * st = mystrdup(cw); - if (st) - { - char *newst = (char *) realloc(st, wl + 2); - if (newst == NULL) - free(st); - st = newst; - } - if (st) - { - st[(dot - cw) + 1] = ' '; - strcpy(st + (dot - cw) + 2, dot + 1); - ns = insert_sug(slst, st, ns); - free(st); - } - } - } - if (captype == HUHINITCAP) { - // TheOpenOffice.org -> The OpenOffice.org - memcpy(wspace,cw,(wl+1)); - mkinitsmall2(wspace, unicw, nc); - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - } - memcpy(wspace,cw,(wl+1)); - mkallsmall2(wspace, unicw, nc); - if (spell(wspace)) ns = insert_sug(slst, wspace, ns); - prevns = ns; - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - if (captype == HUHINITCAP) { - mkinitcap2(wspace, unicw, nc); - if (spell(wspace)) ns = insert_sug(slst, wspace, ns); - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - } - // aNew -> "a New" (instead of "a new") - for (int j = prevns; j < ns; j++) { - char * space = strchr((*slst)[j],' '); - if (space) { - int slen = strlen(space + 1); - // different case after space (need capitalisation) - if ((slen < wl) && strcmp(cw + wl - slen, space + 1)) { - w_char w[MAXWORDLEN]; - int wc = 0; - char * r = (*slst)[j]; - if (utf8) wc = u8_u16(w, MAXWORDLEN, space + 1); - mkinitcap2(space + 1, w, wc); - // set as first suggestion - for (int k = j; k > 0; k--) (*slst)[k] = (*slst)[k - 1]; - (*slst)[0] = r; - } - } - } - } - break; - } - - case ALLCAP: { - memcpy(wspace, cw, (wl+1)); - mkallsmall2(wspace, unicw, nc); - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - if (ns == -1) break; - if (pAMgr && pAMgr->get_keepcase() && spell(wspace)) - ns = insert_sug(slst, wspace, ns); - mkinitcap2(wspace, unicw, nc); - ns = pSMgr->suggest(slst, wspace, ns, &onlycmpdsug); - for (int j=0; j < ns; j++) { - mkallcap((*slst)[j]); - if (pAMgr && pAMgr->get_checksharps()) { - char * pos; - if (utf8) { - pos = strstr((*slst)[j], "\xC3\x9F"); - while (pos) { - *pos = 'S'; - *(pos+1) = 'S'; - pos = strstr(pos+2, "\xC3\x9F"); - } - } else { - pos = strchr((*slst)[j], '\xDF'); - while (pos) { - (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 2); - mystrrep((*slst)[j], "\xDF", "SS"); - pos = strchr((*slst)[j], '\xDF'); - } - } - } - } - break; - } } - // LANG_hu section: replace '-' with ' ' in Hungarian + // LANG_hu section: replace '-' with ' ' in Hungarian if (langnum == LANG_hu) { - for (int j=0; j < ns; j++) { - char * pos = strchr((*slst)[j],'-'); - if (pos) { - int info; - char w[MAXWORDUTF8LEN]; - *pos = '\0'; - strcpy(w, (*slst)[j]); - strcat(w, pos + 1); - (void)spell(w, &info, NULL); - if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) { - *pos = ' '; - } else *pos = '-'; - } + for (int j = 0; j < ns; j++) { + char* pos = strchr((*slst)[j], '-'); + if (pos) { + int info; + *pos = '\0'; + std::string w((*slst)[j]); + w.append(pos + 1); + (void)spell(w.c_str(), &info, NULL); + if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) { + *pos = ' '; + } else + *pos = '-'; } + } } // END OF LANG_hu section // try ngram approach since found nothing or only compound words - if (pAMgr && (ns == 0 || onlycmpdsug) && (pAMgr->get_maxngramsugs() != 0) && (*slst)) { - switch(captype) { - case NOCAP: { - ns = pSMgr->ngsuggest(*slst, cw, ns, pHMgr, maxdic); - break; - } - case HUHINITCAP: - capwords = 1; - case HUHCAP: { - memcpy(wspace,cw,(wl+1)); - mkallsmall2(wspace, unicw, nc); - ns = pSMgr->ngsuggest(*slst, wspace, ns, pHMgr, maxdic); - break; - } - case INITCAP: { - capwords = 1; - memcpy(wspace,cw,(wl+1)); - mkallsmall2(wspace, unicw, nc); - ns = pSMgr->ngsuggest(*slst, wspace, ns, pHMgr, maxdic); - break; - } - case ALLCAP: { - memcpy(wspace,cw,(wl+1)); - mkallsmall2(wspace, unicw, nc); - int oldns = ns; - ns = pSMgr->ngsuggest(*slst, wspace, ns, pHMgr, maxdic); - for (int j = oldns; j < ns; j++) - mkallcap((*slst)[j]); - break; - } + if (pAMgr && (ns == 0 || onlycmpdsug) && (pAMgr->get_maxngramsugs() != 0) && + (*slst)) { + switch (captype) { + case NOCAP: { + ns = pSMgr->ngsuggest(*slst, scw.c_str(), ns, pHMgr, maxdic); + break; + } + case HUHINITCAP: + capwords = 1; + case HUHCAP: { + std::string wspace(scw); + mkallsmall2(wspace, sunicw); + ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); + break; + } + case INITCAP: { + capwords = 1; + std::string wspace(scw); + mkallsmall2(wspace, sunicw); + ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); + break; } + case ALLCAP: { + std::string wspace(scw); + mkallsmall2(wspace, sunicw); + int oldns = ns; + ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); + for (int j = oldns; j < ns; j++) { + std::string form((*slst)[j]); + mkallcap(form); + free((*slst)[j]); + (*slst)[j] = mystrdup(form.c_str()); + } + break; + } + } } // try dash suggestion (Afo-American -> Afro-American) - if (char * pos = strchr(cw, '-')) { - char * ppos = cw; - int nodashsug = 1; - char ** nlst = NULL; - int nn = 0; - int last = 0; - if (*slst) { - for (int j = 0; j < ns && nodashsug == 1; j++) { - if (strchr((*slst)[j], '-')) nodashsug = 0; - } - } - while (nodashsug && !last) { - if (*pos == '\0') last = 1; else *pos = '\0'; - if (!spell(ppos)) { - nn = suggest(&nlst, ppos); - for (int j = nn - 1; j >= 0; j--) { - strncpy(wspace, cw, ppos - cw); - strcpy(wspace + (ppos - cw), nlst[j]); - if (!last) { - strcat(wspace, "-"); - strcat(wspace, pos + 1); - } - ns = insert_sug(slst, wspace, ns); - free(nlst[j]); + size_t dash_pos = scw.find('-'); + if (dash_pos != std::string::npos) { + int nodashsug = 1; + for (int j = 0; j < ns && nodashsug == 1; j++) { + if (strchr((*slst)[j], '-')) + nodashsug = 0; + } + + size_t prev_pos = 0; + bool last = false; + + while (nodashsug && !last) { + if (dash_pos == scw.size()) + last = 1; + std::string chunk = scw.substr(prev_pos, dash_pos - prev_pos); + if (!spell(chunk.c_str())) { + char** nlst = NULL; + int nn = suggest(&nlst, chunk.c_str()); + for (int j = nn - 1; j >= 0; j--) { + std::string wspace = scw.substr(0, prev_pos); + wspace.append(nlst[j]); + if (!last) { + wspace.append("-"); + wspace.append(scw.substr(dash_pos + 1)); } - if (nlst != NULL) free(nlst); - nodashsug = 0; - } - if (!last) { - *pos = '-'; - ppos = pos + 1; - pos = strchr(ppos, '-'); + ns = insert_sug(slst, wspace.c_str(), ns); + free(nlst[j]); } - if (!pos) pos = cw + strlen(cw); - } + if (nlst != NULL) + free(nlst); + nodashsug = 0; + } + if (!last) { + prev_pos = dash_pos + 1; + dash_pos = scw.find('-', prev_pos); + } + if (dash_pos == std::string::npos) + dash_pos = scw.size(); + } } // word reversing wrapper for complex prefixes if (complexprefixes) { for (int j = 0; j < ns; j++) { - if (utf8) reverseword_utf((*slst)[j]); else reverseword((*slst)[j]); + std::string root((*slst)[j]); + free((*slst)[j]); + if (utf8) + reverseword_utf(root); + else + reverseword(root); + (*slst)[j] = mystrdup(root.c_str()); } } // capitalize - if (capwords) for (int j=0; j < ns; j++) { - mkinitcap((*slst)[j]); - } + if (capwords) + for (int j = 0; j < ns; j++) { + std::string form((*slst)[j]); + free((*slst)[j]); + mkinitcap(form); + (*slst)[j] = mystrdup(form.c_str()); + } // expand suggestions with dot(s) if (abbv && pAMgr && pAMgr->get_sugswithdots()) { for (int j = 0; j < ns; j++) { - (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv); + (*slst)[j] = (char*)realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv); strcat((*slst)[j], word + strlen(word) - abbv); } } // remove bad capitalized and forbidden forms if (pAMgr && (pAMgr->get_keepcase() || pAMgr->get_forbiddenword())) { - switch (captype) { - case INITCAP: - case ALLCAP: { - int l = 0; - for (int j=0; j < ns; j++) { - if (!strchr((*slst)[j],' ') && !spell((*slst)[j])) { - char s[MAXSWUTF8L]; - w_char w[MAXSWL]; - int len; - if (utf8) { - len = u8_u16(w, MAXSWL, (*slst)[j]); - } else { - strcpy(s, (*slst)[j]); - len = strlen(s); - } - mkallsmall2(s, w, len); - free((*slst)[j]); - if (spell(s)) { - (*slst)[l] = mystrdup(s); - if ((*slst)[l]) l++; - } else { - mkinitcap2(s, w, len); - if (spell(s)) { - (*slst)[l] = mystrdup(s); - if ((*slst)[l]) l++; + switch (captype) { + case INITCAP: + case ALLCAP: { + int l = 0; + for (int j = 0; j < ns; j++) { + if (!strchr((*slst)[j], ' ') && !spell((*slst)[j])) { + std::string s; + std::vector w; + if (utf8) { + u8_u16(w, (*slst)[j]); + } else { + s = (*slst)[j]; + } + mkallsmall2(s, w); + free((*slst)[j]); + if (spell(s.c_str())) { + (*slst)[l] = mystrdup(s.c_str()); + if ((*slst)[l]) + l++; + } else { + mkinitcap2(s, w); + if (spell(s.c_str())) { + (*slst)[l] = mystrdup(s.c_str()); + if ((*slst)[l]) + l++; + } } + } else { + (*slst)[l] = (*slst)[j]; + l++; } - } else { - (*slst)[l] = (*slst)[j]; - l++; } + ns = l; } - ns = l; } } - } // remove duplications int l = 0; @@ -1020,9 +1147,10 @@ int Hunspell::suggest(char*** slst, const char * word) // output conversion rl = (pAMgr) ? pAMgr->get_oconvtable() : NULL; for (int j = 0; rl && j < ns; j++) { - if (rl->conv((*slst)[j], wspace)) { + std::string wspace; + if (rl->conv((*slst)[j], wspace) > 0) { free((*slst)[j]); - (*slst)[j] = mystrdup(wspace); + (*slst)[j] = mystrdup(wspace.c_str()); } } @@ -1034,629 +1162,468 @@ int Hunspell::suggest(char*** slst, const char * word) return l; } -void Hunspell::free_list(char *** slst, int n) { - freelist(slst, n); +void Hunspell::free_list(char*** slst, int n) { + freelist(slst, n); } -char * Hunspell::get_dic_encoding() -{ +char* Hunspell::get_dic_encoding() { return encoding; } -#ifdef HUNSPELL_EXPERIMENTAL -// XXX need UTF-8 support -int Hunspell::suggest_auto(char*** slst, const char * word) -{ - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - if (!pSMgr || maxdic == 0) return 0; - int wl = strlen(word); - if (utf8) { - if (wl >= MAXWORDUTF8LEN) return 0; - } else { - if (wl >= MAXWORDLEN) return 0; - } - int captype = 0; - int abbv = 0; - wl = cleanword(cw, word, &captype, &abbv); - if (wl == 0) return 0; - int ns = 0; - *slst = NULL; // HU, nsug in pSMgr->suggest - - switch(captype) { - case NOCAP: { - ns = pSMgr->suggest_auto(slst, cw, ns); - if (ns>0) break; - break; - } - - case INITCAP: { - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - ns = pSMgr->suggest_auto(slst, wspace, ns); - for (int j=0; j < ns; j++) - mkinitcap((*slst)[j]); - ns = pSMgr->suggest_auto(slst, cw, ns); - break; - - } - - case HUHINITCAP: - case HUHCAP: { - ns = pSMgr->suggest_auto(slst, cw, ns); - if (ns == 0) { - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - ns = pSMgr->suggest_auto(slst, wspace, ns); - } - break; - } - - case ALLCAP: { - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - ns = pSMgr->suggest_auto(slst, wspace, ns); - - mkinitcap(wspace); - ns = pSMgr->suggest_auto(slst, wspace, ns); - - for (int j=0; j < ns; j++) - mkallcap((*slst)[j]); - break; - } - } - - // word reversing wrapper for complex prefixes - if (complexprefixes) { - for (int j = 0; j < ns; j++) { - if (utf8) reverseword_utf((*slst)[j]); else reverseword((*slst)[j]); - } - } - - // expand suggestions with dot(s) - if (abbv && pAMgr && pAMgr->get_sugswithdots()) { - for (int j = 0; j < ns; j++) { - (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv); - strcat((*slst)[j], word + strlen(word) - abbv); - } - } - - // LANG_hu section: replace '-' with ' ' in Hungarian - if (langnum == LANG_hu) { - for (int j=0; j < ns; j++) { - char * pos = strchr((*slst)[j],'-'); - if (pos) { - int info; - char w[MAXWORDUTF8LEN]; - *pos = '\0'; - strcpy(w, (*slst)[j]); - strcat(w, pos + 1); - spell(w, &info, NULL); - if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) { - *pos = ' '; - } else *pos = '-'; - } - } - } - // END OF LANG_hu section - return ns; -} -#endif +int Hunspell::stem(char*** slst, char** desc, int n) { -int Hunspell::stem(char*** slst, char ** desc, int n) -{ - char result[MAXLNLEN]; - char result2[MAXLNLEN]; + std::string result2; *slst = NULL; - if (n == 0) return 0; - *result2 = '\0'; + if (n == 0) + return 0; for (int i = 0; i < n; i++) { - *result = '\0'; + + std::string result; + // add compound word parts (except the last one) - char * s = (char *) desc[i]; - char * part = strstr(s, MORPH_PART); + char* s = (char*)desc[i]; + char* part = strstr(s, MORPH_PART); if (part) { - char * nextpart = strstr(part + 1, MORPH_PART); - while (nextpart) { - copy_field(result + strlen(result), part, MORPH_PART); - part = nextpart; - nextpart = strstr(part + 1, MORPH_PART); - } - s = part; + char* nextpart = strstr(part + 1, MORPH_PART); + while (nextpart) { + std::string field; + copy_field(field, part, MORPH_PART); + result.append(field); + part = nextpart; + nextpart = strstr(part + 1, MORPH_PART); + } + s = part; } - char **pl; - char tok[MAXLNLEN]; - strcpy(tok, s); - char * alt = strstr(tok, " | "); - while (alt) { - alt[1] = MSEP_ALT; - alt = strstr(alt, " | "); + char** pl; + std::string tok(s); + size_t alt = 0; + while ((alt = tok.find(" | ", alt)) != std::string::npos) { + tok[alt + 1] = MSEP_ALT; } - int pln = line_tok(tok, &pl, MSEP_ALT); + int pln = line_tok(tok.c_str(), &pl, MSEP_ALT); for (int k = 0; k < pln; k++) { - // add derivational suffixes - if (strstr(pl[k], MORPH_DERI_SFX)) { - // remove inflectional suffixes - char * is = strstr(pl[k], MORPH_INFL_SFX); - if (is) *is = '\0'; - char * sg = pSMgr->suggest_gen(&(pl[k]), 1, pl[k]); - if (sg) { - char ** gen; - int genl = line_tok(sg, &gen, MSEP_REC); - free(sg); - for (int j = 0; j < genl; j++) { - sprintf(result2 + strlen(result2), "%c%s%s", - MSEP_REC, result, gen[j]); - } - freelist(&gen, genl); - } - } else { - sprintf(result2 + strlen(result2), "%c%s", MSEP_REC, result); - if (strstr(pl[k], MORPH_SURF_PFX)) { - copy_field(result2 + strlen(result2), pl[k], MORPH_SURF_PFX); - } - copy_field(result2 + strlen(result2), pl[k], MORPH_STEM); + // add derivational suffixes + if (strstr(pl[k], MORPH_DERI_SFX)) { + // remove inflectional suffixes + char* is = strstr(pl[k], MORPH_INFL_SFX); + if (is) + *is = '\0'; + char* sg = pSMgr->suggest_gen(&(pl[k]), 1, pl[k]); + if (sg) { + char** gen; + int genl = line_tok(sg, &gen, MSEP_REC); + free(sg); + for (int j = 0; j < genl; j++) { + result2.push_back(MSEP_REC); + result2.append(result); + result2.append(gen[j]); + } + freelist(&gen, genl); } + } else { + result2.push_back(MSEP_REC); + result2.append(result); + if (strstr(pl[k], MORPH_SURF_PFX)) { + std::string field; + copy_field(field, pl[k], MORPH_SURF_PFX); + result2.append(field); + } + std::string field; + copy_field(field, pl[k], MORPH_STEM); + result2.append(field); + } } freelist(&pl, pln); } - int sln = line_tok(result2, slst, MSEP_REC); + int sln = line_tok(result2.c_str(), slst, MSEP_REC); return uniqlist(*slst, sln); - } -int Hunspell::stem(char*** slst, const char * word) -{ - char ** pl; +int Hunspell::stem(char*** slst, const char* word) { + char** pl; int pln = analyze(&pl, word); int pln2 = stem(slst, pl, pln); freelist(&pl, pln); return pln2; } -#ifdef HUNSPELL_EXPERIMENTAL -int Hunspell::suggest_pos_stems(char*** slst, const char * word) -{ - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - if (! pSMgr || maxdic == 0) return 0; - int wl = strlen(word); - if (utf8) { - if (wl >= MAXWORDUTF8LEN) return 0; - } else { - if (wl >= MAXWORDLEN) return 0; - } - int captype = 0; - int abbv = 0; - wl = cleanword(cw, word, &captype, &abbv); - if (wl == 0) return 0; - - int ns = 0; // ns=0 = normalized input - - *slst = NULL; // HU, nsug in pSMgr->suggest - - switch(captype) { - case HUHCAP: - case NOCAP: { - ns = pSMgr->suggest_pos_stems(slst, cw, ns); - - if ((abbv) && (ns == 0)) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - ns = pSMgr->suggest_pos_stems(slst, wspace, ns); - } - - break; - } - - case INITCAP: { - - ns = pSMgr->suggest_pos_stems(slst, cw, ns); - - if (ns == 0 || ((*slst)[0][0] == '#')) { - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - ns = pSMgr->suggest_pos_stems(slst, wspace, ns); - } - - break; - - } - - case ALLCAP: { - ns = pSMgr->suggest_pos_stems(slst, cw, ns); - if (ns != 0) break; - - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - ns = pSMgr->suggest_pos_stems(slst, wspace, ns); - - if (ns == 0) { - mkinitcap(wspace); - ns = pSMgr->suggest_pos_stems(slst, wspace, ns); - } - break; - } - } - - return ns; -} -#endif // END OF HUNSPELL_EXPERIMENTAL CODE - -const char * Hunspell::get_wordchars() -{ +const char* Hunspell::get_wordchars() { return pAMgr->get_wordchars(); } -unsigned short * Hunspell::get_wordchars_utf16(int * len) -{ - return pAMgr->get_wordchars_utf16(len); +const std::vector& Hunspell::get_wordchars_utf16() { + return pAMgr->get_wordchars_utf16(); } -void Hunspell::mkinitcap(char * p) -{ - if (!utf8) { - if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper; +void Hunspell::mkinitcap(std::string& u8) { + if (utf8) { + std::vector u16; + u8_u16(u16, u8); + ::mkinitcap_utf(u16, langnum); + u16_u8(u8, u16); } else { - int len; - w_char u[MAXWORDLEN]; - len = u8_u16(u, MAXWORDLEN, p); - unsigned short i = unicodetoupper((u[0].h << 8) + u[0].l, langnum); - u[0].h = (unsigned char) (i >> 8); - u[0].l = (unsigned char) (i & 0x00FF); - u16_u8(p, MAXWORDUTF8LEN, u, len); + ::mkinitcap(u8, csconv); } } -int Hunspell::mkinitcap2(char * p, w_char * u, int nc) -{ - if (!utf8) { - if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper; - } else if (nc > 0) { - unsigned short i = unicodetoupper((u[0].h << 8) + u[0].l, langnum); - u[0].h = (unsigned char) (i >> 8); - u[0].l = (unsigned char) (i & 0x00FF); - u16_u8(p, MAXWORDUTF8LEN, u, nc); - return strlen(p); +int Hunspell::mkinitcap2(std::string& u8, std::vector& u16) { + if (utf8) { + ::mkinitcap_utf(u16, langnum); + u16_u8(u8, u16); + } else { + ::mkinitcap(u8, csconv); } - return nc; + return u8.size(); } -int Hunspell::mkinitsmall2(char * p, w_char * u, int nc) -{ - if (!utf8) { - if (*p != '\0') *p = csconv[((unsigned char)*p)].clower; - } else if (nc > 0) { - unsigned short i = unicodetolower((u[0].h << 8) + u[0].l, langnum); - u[0].h = (unsigned char) (i >> 8); - u[0].l = (unsigned char) (i & 0x00FF); - u16_u8(p, MAXWORDUTF8LEN, u, nc); - return strlen(p); +int Hunspell::mkinitsmall2(std::string& u8, std::vector& u16) { + if (utf8) { + ::mkinitsmall_utf(u16, langnum); + u16_u8(u8, u16); + } else { + ::mkinitsmall(u8, csconv); } - return nc; + return u8.size(); } -int Hunspell::add(const char * word) -{ - if (pHMgr[0]) return (pHMgr[0])->add(word); - return 0; +int Hunspell::add(const char* word) { + if (pHMgr[0]) + return (pHMgr[0])->add(word); + return 0; } -int Hunspell::add_with_affix(const char * word, const char * example) -{ - if (pHMgr[0]) return (pHMgr[0])->add_with_affix(word, example); - return 0; +int Hunspell::add_with_affix(const char* word, const char* example) { + if (pHMgr[0]) + return (pHMgr[0])->add_with_affix(word, example); + return 0; } -int Hunspell::remove(const char * word) -{ - if (pHMgr[0]) return (pHMgr[0])->remove(word); - return 0; +int Hunspell::remove(const char* word) { + if (pHMgr[0]) + return (pHMgr[0])->remove(word); + return 0; } -const char * Hunspell::get_version() -{ +const char* Hunspell::get_version() { return pAMgr->get_version(); } -struct cs_info * Hunspell::get_csconv() -{ +struct cs_info* Hunspell::get_csconv() { return csconv; } -void Hunspell::cat_result(char * result, char * st) -{ - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } +void Hunspell::cat_result(std::string& result, char* st) { + if (st) { + if (!result.empty()) + result.append("\n"); + result.append(st); + free(st); + } } -int Hunspell::analyze(char*** slst, const char * word) -{ - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - w_char unicw[MAXWORDLEN]; - int wl2 = 0; +int Hunspell::analyze(char*** slst, const char* word) { *slst = NULL; - if (! pSMgr || maxdic == 0) return 0; + if (!pSMgr || maxdic == 0) + return 0; int nc = strlen(word); if (utf8) { - if (nc >= MAXWORDUTF8LEN) return 0; + if (nc >= MAXWORDUTF8LEN) + return 0; } else { - if (nc >= MAXWORDLEN) return 0; + if (nc >= MAXWORDLEN) + return 0; } - int captype = 0; - int abbv = 0; - int wl = 0; + int captype = NOCAP; + size_t abbv = 0; + size_t wl = 0; + + std::string scw; + std::vector sunicw; // input conversion - RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; - if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); - else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; + { + std::string wspace; + + int convstatus = rl ? rl->conv(word, wspace) : 0; + if (convstatus < 0) + return 0; + else if (convstatus > 0) + wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + else + wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + } if (wl == 0) { - if (abbv) { - for (wl = 0; wl < abbv; wl++) cw[wl] = '.'; - cw[wl] = '\0'; - abbv = 0; - } else return 0; + if (abbv) { + scw.clear(); + for (wl = 0; wl < abbv; wl++) + scw.push_back('.'); + abbv = 0; + } else + return 0; } - char result[MAXLNLEN]; - char * st = NULL; - - *result = '\0'; + std::string result; - int n = 0; - int n2 = 0; - int n3 = 0; + size_t n = 0; + size_t n2 = 0; + size_t n3 = 0; // test numbers // LANG_hu section: set dash information for suggestions if (langnum == LANG_hu) { - while ((n < wl) && - (((cw[n] <= '9') && (cw[n] >= '0')) || (((cw[n] == '.') || (cw[n] == ',')) && (n > 0)))) { - n++; - if ((cw[n] == '.') || (cw[n] == ',')) { - if (((n2 == 0) && (n > 3)) || - ((n2 > 0) && ((cw[n-1] == '.') || (cw[n-1] == ',')))) break; - n2++; - n3 = n; - } - } + while ((n < wl) && (((scw[n] <= '9') && (scw[n] >= '0')) || + (((scw[n] == '.') || (scw[n] == ',')) && (n > 0)))) { + n++; + if ((scw[n] == '.') || (scw[n] == ',')) { + if (((n2 == 0) && (n > 3)) || + ((n2 > 0) && ((scw[n - 1] == '.') || (scw[n - 1] == ',')))) + break; + n2++; + n3 = n; + } + } - if ((n == wl) && (n3 > 0) && (n - n3 > 3)) return 0; - if ((n == wl) || ((n>0) && ((cw[n]=='%') || (cw[n]=='\xB0')) && checkword(cw+n, NULL, NULL))) { - mystrcat(result, cw, MAXLNLEN); - result[n - 1] = '\0'; - if (n == wl) cat_result(result, pSMgr->suggest_morph(cw + n - 1)); - else { - char sign = cw[n]; - cw[n] = '\0'; - cat_result(result, pSMgr->suggest_morph(cw + n - 1)); - mystrcat(result, "+", MAXLNLEN); // XXX SPEC. MORPHCODE - cw[n] = sign; - cat_result(result, pSMgr->suggest_morph(cw + n)); - } - return line_tok(result, slst, MSEP_REC); - } + if ((n == wl) && (n3 > 0) && (n - n3 > 3)) + return 0; + if ((n == wl) || ((n > 0) && ((scw[n] == '%') || (scw[n] == '\xB0')) && + checkword(scw.c_str() + n, NULL, NULL))) { + result.append(scw); + result.resize(n - 1); + if (n == wl) + cat_result(result, pSMgr->suggest_morph(scw.c_str() + n - 1)); + else { + char sign = scw[n]; + scw[n] = '\0'; + cat_result(result, pSMgr->suggest_morph(scw.c_str() + n - 1)); + result.push_back('+'); // XXX SPEC. MORPHCODE + scw[n] = sign; + cat_result(result, pSMgr->suggest_morph(scw.c_str() + n)); + } + return line_tok(result.c_str(), slst, MSEP_REC); + } } // END OF LANG_hu section - switch(captype) { - case HUHCAP: - case HUHINITCAP: - case NOCAP: { - cat_result(result, pSMgr->suggest_morph(cw)); - if (abbv) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - cat_result(result, pSMgr->suggest_morph(wspace)); - } - break; - } - case INITCAP: { - wl = mkallsmall2(cw, unicw, nc); - memcpy(wspace,cw,(wl+1)); - wl2 = mkinitcap2(cw, unicw, nc); - cat_result(result, pSMgr->suggest_morph(wspace)); - cat_result(result, pSMgr->suggest_morph(cw)); - if (abbv) { - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - cat_result(result, pSMgr->suggest_morph(wspace)); - - memcpy(wspace, cw, wl2); - *(wspace+wl2) = '.'; - *(wspace+wl2+1) = '\0'; - - cat_result(result, pSMgr->suggest_morph(wspace)); - } - break; - } - case ALLCAP: { - cat_result(result, pSMgr->suggest_morph(cw)); - if (abbv) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - cat_result(result, pSMgr->suggest_morph(cw)); - } - wl = mkallsmall2(cw, unicw, nc); - memcpy(wspace,cw,(wl+1)); - wl2 = mkinitcap2(cw, unicw, nc); - - cat_result(result, pSMgr->suggest_morph(wspace)); - cat_result(result, pSMgr->suggest_morph(cw)); - if (abbv) { - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - cat_result(result, pSMgr->suggest_morph(wspace)); - - memcpy(wspace, cw, wl2); - *(wspace+wl2) = '.'; - *(wspace+wl2+1) = '\0'; - - cat_result(result, pSMgr->suggest_morph(wspace)); - } - break; - } + switch (captype) { + case HUHCAP: + case HUHINITCAP: + case NOCAP: { + cat_result(result, pSMgr->suggest_morph(scw.c_str())); + if (abbv) { + std::string u8buffer(scw); + u8buffer.push_back('.'); + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + } + break; + } + case INITCAP: { + wl = mkallsmall2(scw, sunicw); + std::string u8buffer(scw); + mkinitcap2(scw, sunicw); + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(scw.c_str())); + if (abbv) { + u8buffer.push_back('.'); + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + + u8buffer = scw; + u8buffer.push_back('.'); + + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + } + break; + } + case ALLCAP: { + cat_result(result, pSMgr->suggest_morph(scw.c_str())); + if (abbv) { + std::string u8buffer(scw); + u8buffer.push_back('.'); + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + } + mkallsmall2(scw, sunicw); + std::string u8buffer(scw); + mkinitcap2(scw, sunicw); + + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(scw.c_str())); + if (abbv) { + u8buffer.push_back('.'); + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + + u8buffer = scw; + u8buffer.push_back('.'); + + cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + } + break; + } } - if (*result) { + if (!result.empty()) { // word reversing wrapper for complex prefixes if (complexprefixes) { - if (utf8) reverseword_utf(result); else reverseword(result); + if (utf8) + reverseword_utf(result); + else + reverseword(result); } - return line_tok(result, slst, MSEP_REC); + return line_tok(result.c_str(), slst, MSEP_REC); } // compound word with dash (HU) I18n - char * dash = NULL; - int nresult = 0; // LANG_hu section: set dash information for suggestions - if (langnum == LANG_hu) dash = (char *) strchr(cw,'-'); - if ((langnum == LANG_hu) && dash) { - *dash='\0'; - // examine 2 sides of the dash - if (dash[1] == '\0') { // base word ending with dash - if (spell(cw)) { - char * p = pSMgr->suggest_morph(cw); - if (p) { - int ret = line_tok(p, slst, MSEP_REC); - free(p); - return ret; - } - - } - } else if ((dash[1] == 'e') && (dash[2] == '\0')) { // XXX (HU) -e hat. - if (spell(cw) && (spell("-e"))) { - st = pSMgr->suggest_morph(cw); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - mystrcat(result,"+", MAXLNLEN); // XXX spec. separator in MORPHCODE - st = pSMgr->suggest_morph("-e"); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - return line_tok(result, slst, MSEP_REC); - } - } else { + + size_t dash_pos = langnum == LANG_hu ? scw.find('-') : std::string::npos; + int nresult = 0; + if (dash_pos != std::string::npos) { + std::string part1 = scw.substr(0, dash_pos); + std::string part2 = scw.substr(dash_pos+1); + + // examine 2 sides of the dash + if (part2.empty()) { // base word ending with dash + if (spell(part1.c_str())) { + char* p = pSMgr->suggest_morph(part1.c_str()); + if (p) { + int ret = line_tok(p, slst, MSEP_REC); + free(p); + return ret; + } + } + } else if (part2.size() == 1 && part2[0] == 'e') { // XXX (HU) -e hat. + if (spell(part1.c_str()) && (spell("-e"))) { + char* st = pSMgr->suggest_morph(part1.c_str()); + if (st) { + result.append(st); + free(st); + } + result.push_back('+'); // XXX spec. separator in MORPHCODE + st = pSMgr->suggest_morph("-e"); + if (st) { + result.append(st); + free(st); + } + return line_tok(result.c_str(), slst, MSEP_REC); + } + } else { // first word ending with dash: word- XXX ??? - char r2 = *(dash + 1); - dash[0]='-'; - dash[1]='\0'; - nresult = spell(cw); - dash[1] = r2; - dash[0]='\0'; - if (nresult && spell(dash+1) && ((strlen(dash+1) > 1) || - ((dash[1] > '0') && (dash[1] < '9')))) { - st = pSMgr->suggest_morph(cw); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - mystrcat(result,"+", MAXLNLEN); // XXX spec. separator in MORPHCODE - } - st = pSMgr->suggest_morph(dash+1); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - return line_tok(result, slst, MSEP_REC); - } + part1.push_back(' '); + nresult = spell(part1.c_str()); + part1.erase(part1.size() - 1); + if (nresult && spell(part2.c_str()) && + ((part2.size() > 1) || ((part2[0] > '0') && (part2[0] < '9')))) { + char* st = pSMgr->suggest_morph(part1.c_str()); + if (st) { + result.append(st); + free(st); + result.push_back('+'); // XXX spec. separator in MORPHCODE + } + st = pSMgr->suggest_morph(part2.c_str()); + if (st) { + result.append(st); + free(st); + } + return line_tok(result.c_str(), slst, MSEP_REC); } - // affixed number in correct word - if (nresult && (dash > cw) && (((*(dash-1)<='9') && - (*(dash-1)>='0')) || (*(dash-1)=='.'))) { - *dash='-'; - n = 1; - if (*(dash - n) == '.') n++; - // search first not a number character to left from dash - while (((dash - n)>=cw) && ((*(dash - n)=='0') || (n < 3)) && (n < 6)) { - n++; - } - if ((dash - n) < cw) n--; - // numbers: valami1000000-hoz - // examine 100000-hoz, 10000-hoz 1000-hoz, 10-hoz, - // 56-hoz, 6-hoz - for(; n >= 1; n--) { - if ((*(dash - n) >= '0') && (*(dash - n) <= '9') && checkword(dash - n, NULL, NULL)) { - mystrcat(result, cw, MAXLNLEN); - result[dash - cw - n] = '\0'; - st = pSMgr->suggest_morph(dash - n); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - return line_tok(result, slst, MSEP_REC); - } - } - } + } + // affixed number in correct word + if (nresult && (dash_pos > 0) && + (((scw[dash_pos - 1] <= '9') && (scw[dash_pos - 1] >= '0')) || + (scw[dash_pos - 1] == '.'))) { + n = 1; + if (scw[dash_pos - n] == '.') + n++; + // search first not a number character to left from dash + while ((dash_pos >= n) && ((scw[dash_pos - n] == '0') || (n < 3)) && + (n < 6)) { + n++; + } + if (dash_pos < n) + n--; + // numbers: valami1000000-hoz + // examine 100000-hoz, 10000-hoz 1000-hoz, 10-hoz, + // 56-hoz, 6-hoz + for (; n >= 1; n--) { + if (scw[dash_pos - n] < '0' || scw[dash_pos - n] > '9') { + continue; + } + std::string chunk = scw.substr(dash_pos - n); + if (checkword(chunk.c_str(), NULL, NULL)) { + result.append(chunk); + char* st = pSMgr->suggest_morph(chunk.c_str()); + if (st) { + result.append(st); + free(st); + } + return line_tok(result.c_str(), slst, MSEP_REC); + } + } + } } return 0; } -int Hunspell::generate(char*** slst, const char * word, char ** pl, int pln) -{ +int Hunspell::generate(char*** slst, const char* word, char** pl, int pln) { *slst = NULL; - if (!pSMgr || !pln) return 0; - char **pl2; + if (!pSMgr || !pln) + return 0; + char** pl2; int pl2n = analyze(&pl2, word); - int captype = 0; + int captype = NOCAP; int abbv = 0; - char cw[MAXWORDUTF8LEN]; + std::string cw; cleanword(cw, word, &captype, &abbv); - char result[MAXLNLEN]; - *result = '\0'; + std::string result; for (int i = 0; i < pln; i++) { cat_result(result, pSMgr->suggest_gen(pl2, pl2n, pl[i])); } freelist(&pl2, pl2n); - if (*result) { + if (!result.empty()) { // allcap - if (captype == ALLCAP) mkallcap(result); + if (captype == ALLCAP) + mkallcap(result); // line split - int linenum = line_tok(result, slst, MSEP_REC); + int linenum = line_tok(result.c_str(), slst, MSEP_REC); // capitalize if (captype == INITCAP || captype == HUHINITCAP) { - for (int j=0; j < linenum; j++) mkinitcap((*slst)[j]); + for (int j = 0; j < linenum; j++) { + std::string form((*slst)[j]); + free((*slst)[j]); + mkinitcap(form); + (*slst)[j] = mystrdup(form.c_str()); + } } // temporary filtering of prefix related errors (eg. // generate("undrinkable", "eats") --> "undrinkables" and "*undrinks") int r = 0; - for (int j=0; j < linenum; j++) { - if (!spell((*slst)[j])) { - free((*slst)[j]); - (*slst)[j] = NULL; - } else { - if (r < j) (*slst)[r] = (*slst)[j]; - r++; - } + for (int j = 0; j < linenum; j++) { + if (!spell((*slst)[j])) { + free((*slst)[j]); + (*slst)[j] = NULL; + } else { + if (r < j) + (*slst)[r] = (*slst)[j]; + r++; + } } - if (r > 0) return r; + if (r > 0) + return r; free(*slst); *slst = NULL; } return 0; } -int Hunspell::generate(char*** slst, const char * word, const char * pattern) -{ - char **pl; +int Hunspell::generate(char*** slst, const char* word, const char* pattern) { + char** pl; int pln = analyze(&pl, pattern); int n = generate(slst, word, pl, pln); freelist(&pl, pln); @@ -1664,377 +1631,265 @@ int Hunspell::generate(char*** slst, const char * word, const char * pattern) } // minimal XML parser functions -int Hunspell::get_xml_par(char * dest, const char * par, int max) -{ - char * d = dest; - if (!par) return 0; - char end = *par; - char * dmax = dest + max; - if (end == '>') end = '<'; - else if (end != '\'' && end != '"') return 0; // bad XML - for (par++; d < dmax && *par != '\0' && *par != end; par++, d++) *d = *par; - *d = '\0'; - mystrrep(dest, "<", "<"); - mystrrep(dest, "&", "&"); - return (int)(d - dest); +std::string Hunspell::get_xml_par(const char* par) { + std::string dest; + if (!par) + return dest; + char end = *par; + if (end == '>') + end = '<'; + else if (end != '\'' && end != '"') + return 0; // bad XML + for (par++; *par != '\0' && *par != end; ++par) { + dest.push_back(*par); + } + mystrrep(dest, "<", "<"); + mystrrep(dest, "&", "&"); + return dest; } -int Hunspell::get_langnum() const -{ - return langnum; +int Hunspell::get_langnum() const { + return langnum; } -int Hunspell::input_conv(const char * word, char * dest) -{ - RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; - return (rl && rl->conv(word, dest)); +int Hunspell::input_conv(const char* word, char* dest, size_t destsize) { + RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; + return (rl && rl->conv(word, dest, destsize) > 0); } - // return the beginning of the element (attr == NULL) or the attribute -const char * Hunspell::get_xml_pos(const char * s, const char * attr) -{ - const char * end = strchr(s, '>'); - const char * p = s; - if (attr == NULL) return end; +const char* Hunspell::get_xml_pos(const char* s, const char* attr) { + const char* end = strchr(s, '>'); + const char* p = s; + if (attr == NULL) + return end; do { p = strstr(p, attr); - if (!p || p >= end) return 0; - } while (*(p-1) != ' ' && *(p-1) != '\n'); + if (!p || p >= end) + return 0; + } while (*(p - 1) != ' ' && *(p - 1) != '\n'); return p + strlen(attr); } -int Hunspell::check_xml_par(const char * q, const char * attr, const char * value) { - char cw[MAXWORDUTF8LEN]; - if (get_xml_par(cw, get_xml_pos(q, attr), MAXWORDUTF8LEN - 1) && - strcmp(cw, value) == 0) return 1; +int Hunspell::check_xml_par(const char* q, + const char* attr, + const char* value) { + std::string cw = get_xml_par(get_xml_pos(q, attr)); + if (cw == value) + return 1; return 0; } -int Hunspell::get_xml_list(char ***slst, char * list, const char * tag) { - int n = 0; - char * p; - if (!list) return 0; - for (p = list; ((p = strstr(p, tag)) != NULL); p++) n++; - if (n == 0) return 0; - *slst = (char **) malloc(sizeof(char *) * n); - if (!*slst) return 0; - for (p = list, n = 0; ((p = strstr(p, tag)) != NULL); p++, n++) { - int l = strlen(p); - (*slst)[n] = (char *) malloc(l + 1); - if (!(*slst)[n]) return n; - if (!get_xml_par((*slst)[n], p + strlen(tag) - 1, l)) { - free((*slst)[n]); - break; - } - } - return n; -} - -namespace -{ - void myrep(std::string& str, const std::string& search, const std::string& replace) - { - size_t pos = 0; - while ((pos = str.find(search, pos)) != std::string::npos) - { - str.replace(pos, search.length(), replace); - pos += replace.length(); - } +int Hunspell::get_xml_list(char*** slst, const char* list, const char* tag) { + if (!list) + return 0; + int n = 0; + const char* p; + for (p = list; ((p = strstr(p, tag)) != NULL); p++) + n++; + if (n == 0) + return 0; + *slst = (char**)malloc(sizeof(char*) * n); + if (!*slst) + return 0; + for (p = list, n = 0; ((p = strstr(p, tag)) != NULL); p++, n++) { + std::string cw = get_xml_par(p + strlen(tag) - 1); + if (cw.empty()) { + break; } + (*slst)[n] = mystrdup(cw.c_str()); + } + return n; } -int Hunspell::spellml(char*** slst, const char * word) -{ - char *q, *q2; - char cw[MAXWORDUTF8LEN], cw2[MAXWORDUTF8LEN]; - q = (char *) strstr(word, "'); - if (!q2) return 0; // bad XML input +int Hunspell::spellml(char*** slst, const char* word) { + const char* q = strstr(word, "'); + if (!q2) + return 0; // bad XML input q2 = strstr(q2, "'), MAXWORDUTF8LEN - 10)) n = analyze(slst, cw); - if (n == 0) return 0; - // convert the result to ana1ana2 format - std::string r; - r.append(""); - for (int i = 0; i < n; i++) { - r.append(""); - - std::string entry((*slst)[i]); - free((*slst)[i]); - myrep(entry, "\t", " "); - myrep(entry, "&", "&"); - myrep(entry, "<", "<"); - r.append(entry); - - r.append(""); - } - r.append(""); - (*slst)[0] = mystrdup(r.c_str()); - return 1; + int n = 0; + std::string cw = get_xml_par(strchr(q2, '>')); + if (!cw.empty()) + n = analyze(slst, cw.c_str()); + if (n == 0) + return 0; + // convert the result to ana1ana2 format + std::string r; + r.append(""); + for (int i = 0; i < n; i++) { + r.append(""); + + std::string entry((*slst)[i]); + free((*slst)[i]); + mystrrep(entry, "\t", " "); + mystrrep(entry, "&", "&"); + mystrrep(entry, "<", "<"); + r.append(entry); + + r.append(""); + } + r.append(""); + (*slst)[0] = mystrdup(r.c_str()); + return 1; } else if (check_xml_par(q, "type=", "stem")) { - if (get_xml_par(cw, strchr(q2, '>'), MAXWORDUTF8LEN - 1)) return stem(slst, cw); + std::string cw = get_xml_par(strchr(q2, '>')); + if (!cw.empty()) + return stem(slst, cw.c_str()); } else if (check_xml_par(q, "type=", "generate")) { - int n = get_xml_par(cw, strchr(q2, '>'), MAXWORDUTF8LEN - 1); - if (n == 0) return 0; - char * q3 = strstr(q2 + 1, "'), MAXWORDUTF8LEN - 1)) { - return generate(slst, cw, cw2); - } - } else { - if ((q2 = strstr(q2 + 1, "'), "")) != 0) { - int n2 = generate(slst, cw, slst2, n); - freelist(&slst2, n); - return uniqlist(*slst, n2); - } + std::string cw = get_xml_par(strchr(q2, '>')); + if (cw.empty()) + return 0; + const char* q3 = strstr(q2 + 1, "')); + if (!cw2.empty()) { + return generate(slst, cw.c_str(), cw2.c_str()); + } + } else { + if ((q2 = strstr(q2 + 1, "'), ""); + if (n != 0) { + int n2 = generate(slst, cw.c_str(), slst2, n); freelist(&slst2, n); + return uniqlist(*slst, n2); } + freelist(&slst2, n); } + } } return 0; } - -#ifdef HUNSPELL_EXPERIMENTAL -// XXX need UTF-8 support -char * Hunspell::morph_with_correction(const char * word) -{ - char cw[MAXWORDUTF8LEN]; - char wspace[MAXWORDUTF8LEN]; - if (! pSMgr || maxdic == 0) return NULL; - int wl = strlen(word); - if (utf8) { - if (wl >= MAXWORDUTF8LEN) return NULL; - } else { - if (wl >= MAXWORDLEN) return NULL; - } - int captype = 0; - int abbv = 0; - wl = cleanword(cw, word, &captype, &abbv); - if (wl == 0) return NULL; - - char result[MAXLNLEN]; - char * st = NULL; - - *result = '\0'; - - - switch(captype) { - case NOCAP: { - st = pSMgr->suggest_morph_for_spelling_error(cw); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - if (abbv) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - } - break; - } - case INITCAP: { - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - st = pSMgr->suggest_morph_for_spelling_error(cw); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - if (abbv) { - memcpy(wspace,cw,wl); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - mkallsmall(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - mkinitcap(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - } - break; - } - case HUHCAP: { - st = pSMgr->suggest_morph_for_spelling_error(cw); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - memcpy(wspace,cw,(wl+1)); - mkallsmall(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - break; - } - case ALLCAP: { - memcpy(wspace,cw,(wl+1)); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - mkallsmall(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - mkinitcap(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - if (abbv) { - memcpy(wspace,cw,(wl+1)); - *(wspace+wl) = '.'; - *(wspace+wl+1) = '\0'; - if (*result) mystrcat(result, "\n", MAXLNLEN); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } - mkallsmall(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - mkinitcap(wspace); - st = pSMgr->suggest_morph_for_spelling_error(wspace); - if (st) { - if (*result) mystrcat(result, "\n", MAXLNLEN); - mystrcat(result, st, MAXLNLEN); - free(st); - } - } - break; - } - } - - if (*result) return mystrdup(result); - return NULL; +Hunhandle* Hunspell_create(const char* affpath, const char* dpath) { + return (Hunhandle*)(new Hunspell(affpath, dpath)); } -#endif // END OF HUNSPELL_EXPERIMENTAL CODE - -Hunhandle *Hunspell_create(const char * affpath, const char * dpath) -{ - return (Hunhandle*)(new Hunspell(affpath, dpath)); +Hunhandle* Hunspell_create_key(const char* affpath, + const char* dpath, + const char* key) { + return (Hunhandle*)(new Hunspell(affpath, dpath, key)); } -Hunhandle *Hunspell_create_key(const char * affpath, const char * dpath, - const char * key) -{ - return (Hunhandle*)(new Hunspell(affpath, dpath, key)); +void Hunspell_destroy(Hunhandle* pHunspell) { + delete (Hunspell*)(pHunspell); } -void Hunspell_destroy(Hunhandle *pHunspell) -{ - delete (Hunspell*)(pHunspell); +int Hunspell_add_dic(Hunhandle* pHunspell, const char* dpath) { + return ((Hunspell*)pHunspell)->add_dic(dpath); } -int Hunspell_spell(Hunhandle *pHunspell, const char *word) -{ - return ((Hunspell*)pHunspell)->spell(word); +int Hunspell_spell(Hunhandle* pHunspell, const char* word) { + return ((Hunspell*)pHunspell)->spell(word); } -char *Hunspell_get_dic_encoding(Hunhandle *pHunspell) -{ - return ((Hunspell*)pHunspell)->get_dic_encoding(); +char* Hunspell_get_dic_encoding(Hunhandle* pHunspell) { + return ((Hunspell*)pHunspell)->get_dic_encoding(); } -int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word) -{ - return ((Hunspell*)pHunspell)->suggest(slst, word); +int Hunspell_suggest(Hunhandle* pHunspell, char*** slst, const char* word) { + return ((Hunspell*)pHunspell)->suggest(slst, word); } -int Hunspell_analyze(Hunhandle *pHunspell, char*** slst, const char * word) -{ - return ((Hunspell*)pHunspell)->analyze(slst, word); +int Hunspell_analyze(Hunhandle* pHunspell, char*** slst, const char* word) { + return ((Hunspell*)pHunspell)->analyze(slst, word); } -int Hunspell_stem(Hunhandle *pHunspell, char*** slst, const char * word) -{ - return ((Hunspell*)pHunspell)->stem(slst, word); +int Hunspell_stem(Hunhandle* pHunspell, char*** slst, const char* word) { + return ((Hunspell*)pHunspell)->stem(slst, word); } -int Hunspell_stem2(Hunhandle *pHunspell, char*** slst, char** desc, int n) -{ - return ((Hunspell*)pHunspell)->stem(slst, desc, n); +int Hunspell_stem2(Hunhandle* pHunspell, char*** slst, char** desc, int n) { + return ((Hunspell*)pHunspell)->stem(slst, desc, n); } -int Hunspell_generate(Hunhandle *pHunspell, char*** slst, const char * word, - const char * word2) -{ - return ((Hunspell*)pHunspell)->generate(slst, word, word2); +int Hunspell_generate(Hunhandle* pHunspell, + char*** slst, + const char* word, + const char* word2) { + return ((Hunspell*)pHunspell)->generate(slst, word, word2); } -int Hunspell_generate2(Hunhandle *pHunspell, char*** slst, const char * word, - char** desc, int n) -{ - return ((Hunspell*)pHunspell)->generate(slst, word, desc, n); +int Hunspell_generate2(Hunhandle* pHunspell, + char*** slst, + const char* word, + char** desc, + int n) { + return ((Hunspell*)pHunspell)->generate(slst, word, desc, n); } - /* functions for run-time modification of the dictionary */ +/* functions for run-time modification of the dictionary */ - /* add word to the run-time dictionary */ +/* add word to the run-time dictionary */ -int Hunspell_add(Hunhandle *pHunspell, const char * word) { - return ((Hunspell*)pHunspell)->add(word); +int Hunspell_add(Hunhandle* pHunspell, const char* word) { + return ((Hunspell*)pHunspell)->add(word); } - /* add word to the run-time dictionary with affix flags of - * the example (a dictionary word): Hunspell will recognize - * affixed forms of the new word, too. - */ +/* add word to the run-time dictionary with affix flags of + * the example (a dictionary word): Hunspell will recognize + * affixed forms of the new word, too. + */ -int Hunspell_add_with_affix(Hunhandle *pHunspell, const char * word, - const char * example) { - return ((Hunspell*)pHunspell)->add_with_affix(word, example); +int Hunspell_add_with_affix(Hunhandle* pHunspell, + const char* word, + const char* example) { + return ((Hunspell*)pHunspell)->add_with_affix(word, example); } - /* remove word from the run-time dictionary */ +/* remove word from the run-time dictionary */ + +int Hunspell_remove(Hunhandle* pHunspell, const char* word) { + return ((Hunspell*)pHunspell)->remove(word); +} -int Hunspell_remove(Hunhandle *pHunspell, const char * word) { - return ((Hunspell*)pHunspell)->remove(word); +void Hunspell_free_list(Hunhandle*, char*** slst, int n) { + freelist(slst, n); } -void Hunspell_free_list(Hunhandle *, char *** slst, int n) { - freelist(slst, n); +int Hunspell::suffix_suggest(char*** slst, const char* root_word) { + struct hentry* he = NULL; + int len; + std::string w2; + const char* word; + char* ignoredchars = pAMgr->get_ignore(); + if (ignoredchars != NULL) { + w2.assign(root_word); + if (utf8) { + const std::vector& ignoredchars_utf16 = + pAMgr->get_ignore_utf16(); + remove_ignored_chars_utf(w2, ignoredchars_utf16); + } else { + remove_ignored_chars(w2, ignoredchars); + } + word = w2.c_str(); + } else + word = root_word; + + len = strlen(word); + + if (!len) + return 0; + + char** wlst = (char**)malloc(MAXSUGGESTION * sizeof(char*)); + if (wlst == NULL) + return -1; + *slst = wlst; + for (int i = 0; i < MAXSUGGESTION; i++) { + wlst[i] = NULL; + } + + for (int i = 0; (i < maxdic) && !he; i++) { + he = (pHMgr[i])->lookup(word); + } + if (he) { + return pAMgr->get_suffix_words(he->astr, he->alen, root_word, *slst); + } + return 0; } diff --git a/src/spelling/hunspell/hunspell.dsp b/src/spelling/hunspell/hunspell.dsp index c1826217..660d807c 100644 --- a/src/spelling/hunspell/hunspell.dsp +++ b/src/spelling/hunspell/hunspell.dsp @@ -97,10 +97,6 @@ SOURCE=.\csutil.cxx # End Source File # Begin Source File -SOURCE=.\dictmgr.cxx -# End Source File -# Begin Source File - SOURCE=.\hashmgr.cxx # End Source File # Begin Source File @@ -137,10 +133,6 @@ SOURCE=.\csutil.hxx # End Source File # Begin Source File -SOURCE=.\dictmgr.hxx -# End Source File -# Begin Source File - SOURCE=.\hashmgr.hxx # End Source File # Begin Source File diff --git a/src/spelling/hunspell/hunspell.h b/src/spelling/hunspell/hunspell.h index 627968a3..726bbe20 100644 --- a/src/spelling/hunspell/hunspell.h +++ b/src/spelling/hunspell/hunspell.h @@ -1,3 +1,43 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _MYSPELLMGR_H_ #define _MYSPELLMGR_H_ @@ -9,19 +49,26 @@ extern "C" { typedef struct Hunhandle Hunhandle; -LIBHUNSPELL_DLL_EXPORTED Hunhandle *Hunspell_create(const char * affpath, const char * dpath); +LIBHUNSPELL_DLL_EXPORTED Hunhandle* Hunspell_create(const char* affpath, + const char* dpath); + +LIBHUNSPELL_DLL_EXPORTED Hunhandle* Hunspell_create_key(const char* affpath, + const char* dpath, + const char* key); -LIBHUNSPELL_DLL_EXPORTED Hunhandle *Hunspell_create_key(const char * affpath, const char * dpath, - const char * key); +LIBHUNSPELL_DLL_EXPORTED void Hunspell_destroy(Hunhandle* pHunspell); -LIBHUNSPELL_DLL_EXPORTED void Hunspell_destroy(Hunhandle *pHunspell); +/* load extra dictionaries (only dic files) + * output: 0 = additional dictionary slots available, 1 = slots are now full*/ +LIBHUNSPELL_DLL_EXPORTED int Hunspell_add_dic(Hunhandle* pHunspell, + const char* dpath); /* spell(word) - spellcheck word * output: 0 = bad word, not 0 = good word */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_spell(Hunhandle *pHunspell, const char *); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_spell(Hunhandle* pHunspell, const char*); -LIBHUNSPELL_DLL_EXPORTED char *Hunspell_get_dic_encoding(Hunhandle *pHunspell); +LIBHUNSPELL_DLL_EXPORTED char* Hunspell_get_dic_encoding(Hunhandle* pHunspell); /* suggest(suggestions, word) - search suggestions * input: pointer to an array of strings pointer and the (bad) word @@ -30,63 +77,83 @@ LIBHUNSPELL_DLL_EXPORTED char *Hunspell_get_dic_encoding(Hunhandle *pHunspell); * a newly allocated array of strings (*slts will be NULL when number * of suggestion equals 0.) */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_suggest(Hunhandle* pHunspell, + char*** slst, + const char* word); - /* morphological functions */ +/* morphological functions */ - /* analyze(result, word) - morphological analysis of the word */ +/* analyze(result, word) - morphological analysis of the word */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_analyze(Hunhandle *pHunspell, char*** slst, const char * word); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_analyze(Hunhandle* pHunspell, + char*** slst, + const char* word); - /* stem(result, word) - stemmer function */ +/* stem(result, word) - stemmer function */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_stem(Hunhandle *pHunspell, char*** slst, const char * word); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_stem(Hunhandle* pHunspell, + char*** slst, + const char* word); - /* stem(result, analysis, n) - get stems from a morph. analysis - * example: - * char ** result, result2; - * int n1 = Hunspell_analyze(result, "words"); - * int n2 = Hunspell_stem2(result2, result, n1); - */ +/* stem(result, analysis, n) - get stems from a morph. analysis + * example: + * char ** result, result2; + * int n1 = Hunspell_analyze(result, "words"); + * int n2 = Hunspell_stem2(result2, result, n1); + */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_stem2(Hunhandle *pHunspell, char*** slst, char** desc, int n); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_stem2(Hunhandle* pHunspell, + char*** slst, + char** desc, + int n); - /* generate(result, word, word2) - morphological generation by example(s) */ +/* generate(result, word, word2) - morphological generation by example(s) */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_generate(Hunhandle *pHunspell, char*** slst, const char * word, - const char * word2); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_generate(Hunhandle* pHunspell, + char*** slst, + const char* word, + const char* word2); - /* generate(result, word, desc, n) - generation by morph. description(s) - * example: - * char ** result; - * char * affix = "is:plural"; // description depends from dictionaries, too - * int n = Hunspell_generate2(result, "word", &affix, 1); - * for (int i = 0; i < n; i++) printf("%s\n", result[i]); - */ +/* generate(result, word, desc, n) - generation by morph. description(s) + * example: + * char ** result; + * char * affix = "is:plural"; // description depends from dictionaries, too + * int n = Hunspell_generate2(result, "word", &affix, 1); + * for (int i = 0; i < n; i++) printf("%s\n", result[i]); + */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_generate2(Hunhandle *pHunspell, char*** slst, const char * word, - char** desc, int n); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_generate2(Hunhandle* pHunspell, + char*** slst, + const char* word, + char** desc, + int n); - /* functions for run-time modification of the dictionary */ +/* functions for run-time modification of the dictionary */ - /* add word to the run-time dictionary */ - -LIBHUNSPELL_DLL_EXPORTED int Hunspell_add(Hunhandle *pHunspell, const char * word); +/* add word to the run-time dictionary */ + +LIBHUNSPELL_DLL_EXPORTED int Hunspell_add(Hunhandle* pHunspell, + const char* word); + +/* add word to the run-time dictionary with affix flags of + * the example (a dictionary word): Hunspell will recognize + * affixed forms of the new word, too. + */ - /* add word to the run-time dictionary with affix flags of - * the example (a dictionary word): Hunspell will recognize - * affixed forms of the new word, too. - */ - -LIBHUNSPELL_DLL_EXPORTED int Hunspell_add_with_affix(Hunhandle *pHunspell, const char * word, const char * example); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_add_with_affix(Hunhandle* pHunspell, + const char* word, + const char* example); - /* remove word from the run-time dictionary */ +/* remove word from the run-time dictionary */ -LIBHUNSPELL_DLL_EXPORTED int Hunspell_remove(Hunhandle *pHunspell, const char * word); +LIBHUNSPELL_DLL_EXPORTED int Hunspell_remove(Hunhandle* pHunspell, + const char* word); - /* free suggestion lists */ +/* free suggestion lists */ -LIBHUNSPELL_DLL_EXPORTED void Hunspell_free_list(Hunhandle *pHunspell, char *** slst, int n); +LIBHUNSPELL_DLL_EXPORTED void Hunspell_free_list(Hunhandle* pHunspell, + char*** slst, + int n); #ifdef __cplusplus } diff --git a/src/spelling/hunspell/hunspell.hxx b/src/spelling/hunspell/hunspell.hxx index 1c119fd0..40147530 100644 --- a/src/spelling/hunspell/hunspell.hxx +++ b/src/spelling/hunspell/hunspell.hxx @@ -1,42 +1,115 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #include "hunvisapi.h" #include "hashmgr.hxx" #include "affixmgr.hxx" #include "suggestmgr.hxx" #include "langnum.hxx" +#include -#define SPELL_XML "" +#define SPELL_XML "" #define MAXDIC 20 #define MAXSUGGESTION 15 #define MAXSHARPS 5 -#define HUNSPELL_OK (1 << 0) -#define HUNSPELL_OK_WARN (1 << 1) +#define HUNSPELL_OK (1 << 0) +#define HUNSPELL_OK_WARN (1 << 1) #ifndef _MYSPELLMGR_HXX_ #define _MYSPELLMGR_HXX_ -class LIBHUNSPELL_DLL_EXPORTED Hunspell -{ -private: +class LIBHUNSPELL_DLL_EXPORTED Hunspell { + private: Hunspell(const Hunspell&); - Hunspell& operator = (const Hunspell&); -private: - AffixMgr* pAMgr; - HashMgr* pHMgr[MAXDIC]; - int maxdic; - SuggestMgr* pSMgr; - char * affixpath; - char * encoding; - struct cs_info * csconv; - int langnum; - int utf8; - int complexprefixes; - char** wordbreak; - -public: - + Hunspell& operator=(const Hunspell&); + + private: + AffixMgr* pAMgr; + HashMgr* pHMgr[MAXDIC]; + int maxdic; + SuggestMgr* pSMgr; + char* affixpath; + char* encoding; + struct cs_info* csconv; + int langnum; + int utf8; + int complexprefixes; + char** wordbreak; + + public: /* Hunspell(aff, dic) - constructor of Hunspell class * input: path of affix file and dictionary file * @@ -46,23 +119,23 @@ public: * with system-dependent character encoding instead of _wfopen()). */ - Hunspell(const char * affpath, const char * dpath, const char * key = NULL); + Hunspell(const char* affpath, const char* dpath, const char* key = NULL); ~Hunspell(); /* load extra dictionaries (only dic files) */ - int add_dic(const char * dpath, const char * key = NULL); + int add_dic(const char* dpath, const char* key = NULL); /* spell(word) - spellcheck word * output: 0 = bad word, not 0 = good word - * + * * plus output: * info: information bit array, fields: - * SPELL_COMPOUND = a compound word + * SPELL_COMPOUND = a compound word * SPELL_FORBIDDEN = an explicit forbidden word * root: root (stem), when input is a word with affix(es) */ - - int spell(const char * word, int * info = NULL, char ** root = NULL); + + int spell(const char* word, int* info = NULL, char** root = NULL); /* suggest(suggestions, word) - search suggestions * input: pointer to an array of strings pointer and the (bad) word @@ -72,113 +145,114 @@ public: * of suggestion equals 0.) */ - int suggest(char*** slst, const char * word); + int suggest(char*** slst, const char* word); + + /* Suggest words from suffix rules + * suffix_suggest(suggestions, root_word) + * input: pointer to an array of strings pointer and the word + * array of strings pointer (here *slst) may not be initialized + * output: number of suggestions in string array, and suggestions in + * a newly allocated array of strings (*slts will be NULL when number + * of suggestion equals 0.) + */ + int suffix_suggest(char*** slst, const char* root_word); /* deallocate suggestion lists */ - void free_list(char *** slst, int n); + void free_list(char*** slst, int n); - char * get_dic_encoding(); + char* get_dic_encoding(); - /* morphological functions */ + /* morphological functions */ - /* analyze(result, word) - morphological analysis of the word */ - - int analyze(char*** slst, const char * word); + /* analyze(result, word) - morphological analysis of the word */ - /* stem(result, word) - stemmer function */ - - int stem(char*** slst, const char * word); - - /* stem(result, analysis, n) - get stems from a morph. analysis - * example: - * char ** result, result2; - * int n1 = analyze(&result, "words"); - * int n2 = stem(&result2, result, n1); - */ - - int stem(char*** slst, char ** morph, int n); + int analyze(char*** slst, const char* word); - /* generate(result, word, word2) - morphological generation by example(s) */ + /* stem(result, word) - stemmer function */ - int generate(char*** slst, const char * word, const char * word2); + int stem(char*** slst, const char* word); - /* generate(result, word, desc, n) - generation by morph. description(s) - * example: - * char ** result; - * char * affix = "is:plural"; // description depends from dictionaries, too - * int n = generate(&result, "word", &affix, 1); - * for (int i = 0; i < n; i++) printf("%s\n", result[i]); - */ + /* stem(result, analysis, n) - get stems from a morph. analysis + * example: + * char ** result, result2; + * int n1 = analyze(&result, "words"); + * int n2 = stem(&result2, result, n1); + */ - int generate(char*** slst, const char * word, char ** desc, int n); + int stem(char*** slst, char** morph, int n); + + /* generate(result, word, word2) - morphological generation by example(s) */ + + int generate(char*** slst, const char* word, const char* word2); + + /* generate(result, word, desc, n) - generation by morph. description(s) + * example: + * char ** result; + * char * affix = "is:plural"; // description depends from dictionaries, too + * int n = generate(&result, "word", &affix, 1); + * for (int i = 0; i < n; i++) printf("%s\n", result[i]); + */ + + int generate(char*** slst, const char* word, char** desc, int n); /* functions for run-time modification of the dictionary */ /* add word to the run-time dictionary */ - - int add(const char * word); + + int add(const char* word); /* add word to the run-time dictionary with affix flags of * the example (a dictionary word): Hunspell will recognize * affixed forms of the new word, too. */ - - int add_with_affix(const char * word, const char * example); + + int add_with_affix(const char* word, const char* example); /* remove word from the run-time dictionary */ - int remove(const char * word); + int remove(const char* word); /* other */ /* get extra word characters definied in affix file for tokenization */ - const char * get_wordchars(); - unsigned short * get_wordchars_utf16(int * len); + const char* get_wordchars(); + const std::vector& get_wordchars_utf16(); - struct cs_info * get_csconv(); - const char * get_version(); + struct cs_info* get_csconv(); + const char* get_version(); int get_langnum() const; /* need for putdic */ - int input_conv(const char * word, char * dest); - - /* experimental and deprecated functions */ - -#ifdef HUNSPELL_EXPERIMENTAL - /* suffix is an affix flag string, similarly in dictionary files */ - int put_word_suffix(const char * word, const char * suffix); - char * morph_with_correction(const char * word); - - /* spec. suggestions */ - int suggest_auto(char*** slst, const char * word); - int suggest_pos_stems(char*** slst, const char * word); -#endif - -private: - int cleanword(char *, const char *, int * pcaptype, int * pabbrev); - int cleanword2(char *, const char *, w_char *, int * w_len, int * pcaptype, int * pabbrev); - void mkinitcap(char *); - int mkinitcap2(char * p, w_char * u, int nc); - int mkinitsmall2(char * p, w_char * u, int nc); - void mkallcap(char *); - int mkallcap2(char * p, w_char * u, int nc); - void mkallsmall(char *); - int mkallsmall2(char * p, w_char * u, int nc); - struct hentry * checkword(const char *, int * info, char **root); - char * sharps_u8_l1(char * dest, char * source); - hentry * spellsharps(char * base, char *, int, int, char * tmp, int * info, char **root); - int is_keepcase(const hentry * rv); - int insert_sug(char ***slst, char * word, int ns); - void cat_result(char * result, char * st); - char * stem_description(const char * desc); - int spellml(char*** slst, const char * word); - int get_xml_par(char * dest, const char * par, int maxl); - const char * get_xml_pos(const char * s, const char * attr); - int get_xml_list(char ***slst, char * list, const char * tag); - int check_xml_par(const char * q, const char * attr, const char * value); - + int input_conv(const char* word, char* dest, size_t destsize); + + private: + void cleanword(std::string& dest, const char*, int* pcaptype, int* pabbrev); + size_t cleanword2(std::string& dest, + std::vector& dest_u, + const char*, + int* w_len, + int* pcaptype, + size_t* pabbrev); + void mkinitcap(std::string& u8); + int mkinitcap2(std::string& u8, std::vector& u16); + int mkinitsmall2(std::string& u8, std::vector& u16); + void mkallcap(std::string& u8); + int mkallsmall2(std::string& u8, std::vector& u16); + struct hentry* checkword(const char*, int* info, char** root); + std::string sharps_u8_l1(const std::string& source); + hentry* + spellsharps(std::string& base, size_t start_pos, int, int, int* info, char** root); + int is_keepcase(const hentry* rv); + int insert_sug(char*** slst, const char* word, int ns); + void cat_result(std::string& result, char* st); + char* stem_description(const char* desc); + int spellml(char*** slst, const char* word); + std::string get_xml_par(const char* par); + const char* get_xml_pos(const char* s, const char* attr); + int get_xml_list(char*** slst, const char* list, const char* tag); + int check_xml_par(const char* q, const char* attr, const char* value); }; #endif diff --git a/src/spelling/hunspell/hunzip.cxx b/src/spelling/hunspell/hunzip.cxx index db5a881a..b2788a10 100644 --- a/src/spelling/hunspell/hunzip.cxx +++ b/src/spelling/hunspell/hunzip.cxx @@ -1,11 +1,51 @@ -#include +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include #include -#include +#include #include "hunzip.hxx" #include "csutil.hxx" -#define CODELEN 65536 +#define CODELEN 65536 #define BASEBITREC 5000 #define UNCOMPRESSED '\002' @@ -13,184 +53,211 @@ #define MAGIC_ENCRYPT "hz1" #define MAGICLEN (sizeof(MAGIC) - 1) -int Hunzip::fail(const char * err, const char * par) { - fprintf(stderr, err, par); - return -1; +int Hunzip::fail(const char* err, const char* par) { + fprintf(stderr, err, par); + return -1; } -Hunzip::Hunzip(const char * file, const char * key) - : fin(NULL) - , bufsiz(0) - , lastbit(0) - , inc(0) - , inbits(0) - , outc(0) - , dec(NULL) -{ - in[0] = out[0] = line[0] = '\0'; - filename = mystrdup(file); - if (getcode(key) == -1) bufsiz = -1; - else bufsiz = getbuf(); +Hunzip::Hunzip(const char* file, const char* key) + : fin(NULL), bufsiz(0), lastbit(0), inc(0), inbits(0), outc(0), dec(NULL) { + in[0] = out[0] = line[0] = '\0'; + filename = mystrdup(file); + if (getcode(key) == -1) + bufsiz = -1; + else + bufsiz = getbuf(); } -int Hunzip::getcode(const char * key) { - unsigned char c[2]; - int i, j, n, p; - int allocatedbit = BASEBITREC; - const char * enc = key; +int Hunzip::getcode(const char* key) { + unsigned char c[2]; + int i, j, n, p; + int allocatedbit = BASEBITREC; + const char* enc = key; - if (!filename) return -1; + if (!filename) + return -1; - fin = myfopen(filename, "rb"); - if (!fin) return -1; + fin = myfopen(filename, "rb"); + if (!fin) + return -1; - // read magic number - if ((fread(in, 1, 3, fin) < MAGICLEN) - || !(strncmp(MAGIC, in, MAGICLEN) == 0 || - strncmp(MAGIC_ENCRYPT, in, MAGICLEN) == 0)) { - return fail(MSG_FORMAT, filename); - } + // read magic number + if ((fread(in, 1, 3, fin) < MAGICLEN) || + !(strncmp(MAGIC, in, MAGICLEN) == 0 || + strncmp(MAGIC_ENCRYPT, in, MAGICLEN) == 0)) { + return fail(MSG_FORMAT, filename); + } - // check encryption - if (strncmp(MAGIC_ENCRYPT, in, MAGICLEN) == 0) { - unsigned char cs; - if (!key) return fail(MSG_KEY, filename); - if (fread(&c, 1, 1, fin) < 1) return fail(MSG_FORMAT, filename); - for (cs = 0; *enc; enc++) cs ^= *enc; - if (cs != c[0]) return fail(MSG_KEY, filename); - enc = key; - } else key = NULL; + // check encryption + if (strncmp(MAGIC_ENCRYPT, in, MAGICLEN) == 0) { + unsigned char cs; + if (!key) + return fail(MSG_KEY, filename); + if (fread(&c, 1, 1, fin) < 1) + return fail(MSG_FORMAT, filename); + for (cs = 0; *enc; enc++) + cs ^= *enc; + if (cs != c[0]) + return fail(MSG_KEY, filename); + enc = key; + } else + key = NULL; - // read record count - if (fread(&c, 1, 2, fin) < 2) return fail(MSG_FORMAT, filename); + // read record count + if (fread(&c, 1, 2, fin) < 2) + return fail(MSG_FORMAT, filename); + + if (key) { + c[0] ^= *enc; + if (*(++enc) == '\0') + enc = key; + c[1] ^= *enc; + } + n = ((int)c[0] << 8) + c[1]; + dec = (struct bit*)malloc(BASEBITREC * sizeof(struct bit)); + if (!dec) + return fail(MSG_MEMORY, filename); + dec[0].v[0] = 0; + dec[0].v[1] = 0; + + // read codes + for (i = 0; i < n; i++) { + unsigned char l; + if (fread(c, 1, 2, fin) < 2) + return fail(MSG_FORMAT, filename); if (key) { - c[0] ^= *enc; - if (*(++enc) == '\0') enc = key; - c[1] ^= *enc; - } - - n = ((int) c[0] << 8) + c[1]; - dec = (struct bit *) malloc(BASEBITREC * sizeof(struct bit)); - if (!dec) return fail(MSG_MEMORY, filename); - dec[0].v[0] = 0; - dec[0].v[1] = 0; - - // read codes - for (i = 0; i < n; i++) { - unsigned char l; - if (fread(c, 1, 2, fin) < 2) return fail(MSG_FORMAT, filename); - if (key) { - if (*(++enc) == '\0') enc = key; - c[0] ^= *enc; - if (*(++enc) == '\0') enc = key; - c[1] ^= *enc; - } - if (fread(&l, 1, 1, fin) < 1) return fail(MSG_FORMAT, filename); - if (key) { - if (*(++enc) == '\0') enc = key; - l ^= *enc; - } - if (fread(in, 1, l/8+1, fin) < (size_t) l/8+1) return fail(MSG_FORMAT, filename); - if (key) for (j = 0; j <= l/8; j++) { - if (*(++enc) == '\0') enc = key; - in[j] ^= *enc; - } - p = 0; - for (j = 0; j < l; j++) { - int b = (in[j/8] & (1 << (7 - (j % 8)))) ? 1 : 0; - int oldp = p; - p = dec[p].v[b]; - if (p == 0) { - lastbit++; - if (lastbit == allocatedbit) { - allocatedbit += BASEBITREC; - dec = (struct bit *) realloc(dec, allocatedbit * sizeof(struct bit)); - } - dec[lastbit].v[0] = 0; - dec[lastbit].v[1] = 0; - dec[oldp].v[b] = lastbit; - p = lastbit; - } + if (*(++enc) == '\0') + enc = key; + c[0] ^= *enc; + if (*(++enc) == '\0') + enc = key; + c[1] ^= *enc; + } + if (fread(&l, 1, 1, fin) < 1) + return fail(MSG_FORMAT, filename); + if (key) { + if (*(++enc) == '\0') + enc = key; + l ^= *enc; + } + if (fread(in, 1, l / 8 + 1, fin) < (size_t)l / 8 + 1) + return fail(MSG_FORMAT, filename); + if (key) + for (j = 0; j <= l / 8; j++) { + if (*(++enc) == '\0') + enc = key; + in[j] ^= *enc; + } + p = 0; + for (j = 0; j < l; j++) { + int b = (in[j / 8] & (1 << (7 - (j % 8)))) ? 1 : 0; + int oldp = p; + p = dec[p].v[b]; + if (p == 0) { + lastbit++; + if (lastbit == allocatedbit) { + allocatedbit += BASEBITREC; + dec = (struct bit*)realloc(dec, allocatedbit * sizeof(struct bit)); } - dec[p].c[0] = c[0]; - dec[p].c[1] = c[1]; + dec[lastbit].v[0] = 0; + dec[lastbit].v[1] = 0; + dec[oldp].v[b] = lastbit; + p = lastbit; + } } - return 0; + dec[p].c[0] = c[0]; + dec[p].c[1] = c[1]; + } + return 0; } -Hunzip::~Hunzip() -{ - if (dec) free(dec); - if (fin) fclose(fin); - if (filename) free(filename); +Hunzip::~Hunzip() { + if (dec) + free(dec); + if (fin) + fclose(fin); + if (filename) + free(filename); } int Hunzip::getbuf() { - int p = 0; - int o = 0; - do { - if (inc == 0) inbits = fread(in, 1, BUFSIZE, fin) * 8; - for (; inc < inbits; inc++) { - int b = (in[inc / 8] & (1 << (7 - (inc % 8)))) ? 1 : 0; - int oldp = p; - p = dec[p].v[b]; - if (p == 0) { - if (oldp == lastbit) { - fclose(fin); - fin = NULL; - // add last odd byte - if (dec[lastbit].c[0]) out[o++] = dec[lastbit].c[1]; - return o; - } - out[o++] = dec[oldp].c[0]; - out[o++] = dec[oldp].c[1]; - if (o == BUFSIZE) return o; - p = dec[p].v[b]; - } + int p = 0; + int o = 0; + do { + if (inc == 0) + inbits = fread(in, 1, BUFSIZE, fin) * 8; + for (; inc < inbits; inc++) { + int b = (in[inc / 8] & (1 << (7 - (inc % 8)))) ? 1 : 0; + int oldp = p; + p = dec[p].v[b]; + if (p == 0) { + if (oldp == lastbit) { + fclose(fin); + fin = NULL; + // add last odd byte + if (dec[lastbit].c[0]) + out[o++] = dec[lastbit].c[1]; + return o; } - inc = 0; - } while (inbits == BUFSIZE * 8); - return fail(MSG_FORMAT, filename); + out[o++] = dec[oldp].c[0]; + out[o++] = dec[oldp].c[1]; + if (o == BUFSIZE) + return o; + p = dec[p].v[b]; + } + } + inc = 0; + } while (inbits == BUFSIZE * 8); + return fail(MSG_FORMAT, filename); } -const char * Hunzip::getline() { - char linebuf[BUFSIZE]; - int l = 0, eol = 0, left = 0, right = 0; - if (bufsiz == -1) return NULL; - while (l < bufsiz && !eol) { - linebuf[l++] = out[outc]; - switch (out[outc]) { - case '\t': break; - case 31: { // escape - if (++outc == bufsiz) { - bufsiz = getbuf(); - outc = 0; - } - linebuf[l - 1] = out[outc]; - break; - } - case ' ': break; - default: if (((unsigned char) out[outc]) < 47) { - if (out[outc] > 32) { - right = out[outc] - 31; - if (++outc == bufsiz) { - bufsiz = getbuf(); - outc = 0; - } - } - if (out[outc] == 30) left = 9; else left = out[outc]; - linebuf[l-1] = '\n'; - eol = 1; - } - } +const char* Hunzip::getline() { + char linebuf[BUFSIZE]; + int l = 0, eol = 0, left = 0, right = 0; + if (bufsiz == -1) + return NULL; + while (l < bufsiz && !eol) { + linebuf[l++] = out[outc]; + switch (out[outc]) { + case '\t': + break; + case 31: { // escape if (++outc == bufsiz) { - outc = 0; - bufsiz = fin ? getbuf(): -1; + bufsiz = getbuf(); + outc = 0; } + linebuf[l - 1] = out[outc]; + break; + } + case ' ': + break; + default: + if (((unsigned char)out[outc]) < 47) { + if (out[outc] > 32) { + right = out[outc] - 31; + if (++outc == bufsiz) { + bufsiz = getbuf(); + outc = 0; + } + } + if (out[outc] == 30) + left = 9; + else + left = out[outc]; + linebuf[l - 1] = '\n'; + eol = 1; + } + } + if (++outc == bufsiz) { + outc = 0; + bufsiz = fin ? getbuf() : -1; } - if (right) strcpy(linebuf + l - 1, line + strlen(line) - right - 1); - else linebuf[l] = '\0'; - strcpy(line + left, linebuf); - return line; + } + if (right) + strcpy(linebuf + l - 1, line + strlen(line) - right - 1); + else + linebuf[l] = '\0'; + strcpy(line + left, linebuf); + return line; } diff --git a/src/spelling/hunspell/hunzip.hxx b/src/spelling/hunspell/hunzip.hxx index bd02fd8f..5082addd 100644 --- a/src/spelling/hunspell/hunzip.hxx +++ b/src/spelling/hunspell/hunzip.hxx @@ -1,3 +1,43 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + /* hunzip: file decompression for sorted dictionaries with optional encryption, * algorithm: prefix-suffix encoding and 16-bit Huffman encoding */ @@ -8,40 +48,40 @@ #include -#define BUFSIZE 65536 +#define BUFSIZE 65536 #define HZIP_EXTENSION ".hz" -#define MSG_OPEN "error: %s: cannot open\n" +#define MSG_OPEN "error: %s: cannot open\n" #define MSG_FORMAT "error: %s: not in hzip format\n" #define MSG_MEMORY "error: %s: missing memory\n" -#define MSG_KEY "error: %s: missing or bad password\n" +#define MSG_KEY "error: %s: missing or bad password\n" struct bit { - unsigned char c[2]; - int v[2]; + unsigned char c[2]; + int v[2]; }; -class LIBHUNSPELL_DLL_EXPORTED Hunzip -{ -private: - Hunzip(const Hunzip&); - Hunzip& operator = (const Hunzip&); -protected: - char * filename; - FILE * fin; - int bufsiz, lastbit, inc, inbits, outc; - struct bit * dec; // code table - char in[BUFSIZE]; // input buffer - char out[BUFSIZE + 1]; // Huffman-decoded buffer - char line[BUFSIZE + 50]; // decoded line - int getcode(const char * key); - int getbuf(); - int fail(const char * err, const char * par); - -public: - Hunzip(const char * filename, const char * key = NULL); - ~Hunzip(); - const char * getline(); +class LIBHUNSPELL_DLL_EXPORTED Hunzip { + private: + Hunzip(const Hunzip&); + Hunzip& operator=(const Hunzip&); + + protected: + char* filename; + FILE* fin; + int bufsiz, lastbit, inc, inbits, outc; + struct bit* dec; // code table + char in[BUFSIZE]; // input buffer + char out[BUFSIZE + 1]; // Huffman-decoded buffer + char line[BUFSIZE + 50]; // decoded line + int getcode(const char* key); + int getbuf(); + int fail(const char* err, const char* par); + + public: + Hunzip(const char* filename, const char* key = NULL); + ~Hunzip(); + const char* getline(); }; #endif diff --git a/src/spelling/hunspell/langnum.hxx b/src/spelling/hunspell/langnum.hxx index 1d140a70..af5c86e4 100644 --- a/src/spelling/hunspell/langnum.hxx +++ b/src/spelling/hunspell/langnum.hxx @@ -1,3 +1,43 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _LANGNUM_HXX_ #define _LANGNUM_HXX_ @@ -7,32 +47,32 @@ */ enum { -LANG_ar=96, -LANG_az=100, // custom number -LANG_bg=41, -LANG_ca=37, -LANG_cs=42, -LANG_da=45, -LANG_de=49, -LANG_el=30, -LANG_en=01, -LANG_es=34, -LANG_eu=10, -LANG_fr=02, -LANG_gl=38, -LANG_hr=78, -LANG_hu=36, -LANG_it=39, -LANG_la=99, // custom number -LANG_lv=101, // custom number -LANG_nl=31, -LANG_pl=48, -LANG_pt=03, -LANG_ru=07, -LANG_sv=50, -LANG_tr=90, -LANG_uk=80, -LANG_xx=999 + LANG_ar = 96, + LANG_az = 100, // custom number + LANG_bg = 41, + LANG_ca = 37, + LANG_cs = 42, + LANG_da = 45, + LANG_de = 49, + LANG_el = 30, + LANG_en = 01, + LANG_es = 34, + LANG_eu = 10, + LANG_fr = 02, + LANG_gl = 38, + LANG_hr = 78, + LANG_hu = 36, + LANG_it = 39, + LANG_la = 99, // custom number + LANG_lv = 101, // custom number + LANG_nl = 31, + LANG_pl = 48, + LANG_pt = 03, + LANG_ru = 07, + LANG_sv = 50, + LANG_tr = 90, + LANG_uk = 80, + LANG_xx = 999 }; #endif diff --git a/src/spelling/hunspell/license.hunspell b/src/spelling/hunspell/license.hunspell index 490e440c..dc2ce9c1 100644 --- a/src/spelling/hunspell/license.hunspell +++ b/src/spelling/hunspell/license.hunspell @@ -56,4 +56,6 @@ * * ***** END LICENSE BLOCK ***** */ -#include "config.h" +#ifndef MOZILLA_CLIENT +# include "config.h" +#endif diff --git a/src/spelling/hunspell/makefile.mk b/src/spelling/hunspell/makefile.mk deleted file mode 100644 index ca8ce42a..00000000 --- a/src/spelling/hunspell/makefile.mk +++ /dev/null @@ -1,65 +0,0 @@ -#************************************************************************* -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -#************************************************************************* - -PRJ = ../../../../../.. - -PRJNAME = hunspell -TARGET = hunspell -LIBTARGET=YES -EXTERNAL_WARNINGS_NOT_ERRORS := TRUE -UWINAPILIB= - -#----- Settings --------------------------------------------------------- - -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - -CFLAGS+=-I..$/..$/ -CDEFS+=-DOPENOFFICEORG - -SLOFILES= \ - $(SLO)$/affentry.obj \ - $(SLO)$/affixmgr.obj \ - $(SLO)$/dictmgr.obj \ - $(SLO)$/csutil.obj \ - $(SLO)$/hashmgr.obj \ - $(SLO)$/suggestmgr.obj \ - $(SLO)$/phonet.obj \ - $(SLO)$/hunzip.obj \ - $(SLO)$/filemgr.obj \ - $(SLO)$/replist.obj \ - $(SLO)$/hunspell.obj - -LIB1TARGET= $(SLB)$/lib$(TARGET).lib -LIB1ARCHIV= $(LB)/lib$(TARGET).a -LIB1OBJFILES= $(SLOFILES) - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk - diff --git a/src/spelling/hunspell/phonet.cxx b/src/spelling/hunspell/phonet.cxx index b33edeb0..17350e74 100644 --- a/src/spelling/hunspell/phonet.cxx +++ b/src/spelling/hunspell/phonet.cxx @@ -4,12 +4,12 @@ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation; - + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with this library; If not, see . @@ -21,273 +21,254 @@ transformations out of c't 25/1999 2007-07-26 Bjoern Jacke - Released under MPL/GPL/LGPL tri-license for Hunspell - + Released under MPL/GPL/LGPL tri-license for Hunspell + 2007-08-23 Laszlo Nemeth Porting from Aspell to Hunspell using C-like structs */ -#include +#include #include -#include +#include #include #include "csutil.hxx" #include "phonet.hxx" -void init_phonet_hash(phonetable & parms) - { - int i, k; +void init_phonet_hash(phonetable& parms) { + int i, k; - for (i = 0; i < HASHSIZE; i++) { - parms.hash[i] = -1; - } + for (i = 0; i < HASHSIZE; i++) { + parms.hash[i] = -1; + } - for (i = 0; parms.rules[i][0] != '\0'; i += 2) { - /** set hash value **/ - k = (unsigned char) parms.rules[i][0]; + for (i = 0; parms.rules[i][0] != '\0'; i += 2) { + /** set hash value **/ + k = (unsigned char)parms.rules[i][0]; - if (parms.hash[k] < 0) { - parms.hash[k] = i; - } + if (parms.hash[k] < 0) { + parms.hash[k] = i; } } +} // like strcpy but safe if the strings overlap // but only if dest < src -static inline void strmove(char * dest, char * src) { - while (*src) +static inline void strmove(char* dest, char* src) { + while (*src) *dest++ = *src++; *dest = '\0'; } static int myisalpha(char ch) { - if ((unsigned char) ch < 128) return isalpha(ch); + if ((unsigned char)ch < 128) + return isalpha(ch); return 1; } +/* Do phonetic transformation. */ /* phonetic transcription algorithm */ /* see: http://aspell.net/man-html/Phonetic-Code.html */ /* convert string to uppercase before this call */ -int phonet (const char * inword, char * target, - int len, - phonetable & parms) - { - /** Do phonetic transformation. **/ - /** "len" = length of "inword" incl. '\0'. **/ +std::string phonet(const std::string& inword, phonetable& parms) { - /** result: >= 0: length of "target" **/ - /** otherwise: error **/ + int i, k = 0, p, z; + int k0, n0, p0 = -333, z0; + char c; + const char* s; + typedef unsigned char uchar; - int i,j,k=0,n,p,z; - int k0,n0,p0=-333,z0; - char c, c0; - const char * s; - typedef unsigned char uchar; - char word[MAXPHONETUTF8LEN + 1]; - if (len == -1) len = strlen(inword); - if (len > MAXPHONETUTF8LEN) return 0; - strncpy(word, inword, MAXPHONETUTF8LEN); - word[MAXPHONETUTF8LEN] = '\0'; - - /** check word **/ - i = j = z = 0; - while ((c = word[i]) != '\0') { - n = parms.hash[(uchar) c]; - z0 = 0; + size_t len = inword.size(); + if (len > MAXPHONETUTF8LEN) + return std::string(); + char word[MAXPHONETUTF8LEN + 1]; + strncpy(word, inword.c_str(), MAXPHONETUTF8LEN); + word[MAXPHONETUTF8LEN] = '\0'; - if (n >= 0) { - /** check all rules for the same letter **/ - while (parms.rules[n][0] == c) { + std::string target; + /** check word **/ + i = z = 0; + while ((c = word[i]) != '\0') { + int n = parms.hash[(uchar)c]; + z0 = 0; - /** check whole string **/ - k = 1; /** number of found letters **/ - p = 5; /** default priority **/ - s = parms.rules[n]; - s++; /** important for (see below) "*(s-1)" **/ - - while (*s != '\0' && word[i+k] == *s - && !isdigit ((unsigned char) *s) && strchr ("(-<^$", *s) == NULL) { + if (n >= 0) { + /** check all rules for the same letter **/ + while (parms.rules[n][0] == c) { + /** check whole string **/ + k = 1; /** number of found letters **/ + p = 5; /** default priority **/ + s = parms.rules[n]; + s++; /** important for (see below) "*(s-1)" **/ + + while (*s != '\0' && word[i + k] == *s && !isdigit((unsigned char)*s) && + strchr("(-<^$", *s) == NULL) { + k++; + s++; + } + if (*s == '(') { + /** check letters in "(..)" **/ + if (myisalpha(word[i + k]) // ...could be implied? + && strchr(s + 1, word[i + k]) != NULL) { k++; - s++; - } - if (*s == '(') { - /** check letters in "(..)" **/ - if (myisalpha(word[i+k]) // ...could be implied? - && strchr(s+1, word[i+k]) != NULL) { - k++; - while (*s != ')') - s++; + while (*s != ')') s++; - } - } - p0 = (int) *s; - k0 = k; - while (*s == '-' && k > 1) { - k--; s++; } - if (*s == '<') - s++; - if (isdigit ((unsigned char) *s)) { - /** determine priority **/ - p = *s - '0'; - s++; - } - if (*s == '^' && *(s+1) == '^') - s++; - - if (*s == '\0' - || (*s == '^' - && (i == 0 || ! myisalpha(word[i-1])) - && (*(s+1) != '$' - || (! myisalpha(word[i+k0]) ))) - || (*s == '$' && i > 0 - && myisalpha(word[i-1]) - && (! myisalpha(word[i+k0]) ))) - { - /** search for followup rules, if: **/ - /** parms.followup and k > 1 and NO '-' in searchstring **/ - c0 = word[i+k-1]; - n0 = parms.hash[(uchar) c0]; + } + p0 = (int)*s; + k0 = k; + while (*s == '-' && k > 1) { + k--; + s++; + } + if (*s == '<') + s++; + if (isdigit((unsigned char)*s)) { + /** determine priority **/ + p = *s - '0'; + s++; + } + if (*s == '^' && *(s + 1) == '^') + s++; -// if (parms.followup && k > 1 && n0 >= 0 - if (k > 1 && n0 >= 0 - && p0 != (int) '-' && word[i+k] != '\0') { - /** test follow-up rule for "word[i+k]" **/ - while (parms.rules[n0][0] == c0) { + if (*s == '\0' || (*s == '^' && (i == 0 || !myisalpha(word[i - 1])) && + (*(s + 1) != '$' || (!myisalpha(word[i + k0])))) || + (*s == '$' && i > 0 && myisalpha(word[i - 1]) && + (!myisalpha(word[i + k0])))) { + /** search for followup rules, if: **/ + /** parms.followup and k > 1 and NO '-' in searchstring **/ + char c0 = word[i + k - 1]; + n0 = parms.hash[(uchar)c0]; - /** check whole string **/ - k0 = k; - p0 = 5; - s = parms.rules[n0]; + // if (parms.followup && k > 1 && n0 >= 0 + if (k > 1 && n0 >= 0 && p0 != (int)'-' && word[i + k] != '\0') { + /** test follow-up rule for "word[i+k]" **/ + while (parms.rules[n0][0] == c0) { + /** check whole string **/ + k0 = k; + p0 = 5; + s = parms.rules[n0]; + s++; + while (*s != '\0' && word[i + k0] == *s && + !isdigit((unsigned char)*s) && + strchr("(-<^$", *s) == NULL) { + k0++; s++; - while (*s != '\0' && word[i+k0] == *s - && ! isdigit((unsigned char) *s) && strchr("(-<^$",*s) == NULL) { + } + if (*s == '(') { + /** check letters **/ + if (myisalpha(word[i + k0]) && + strchr(s + 1, word[i + k0]) != NULL) { k0++; - s++; - } - if (*s == '(') { - /** check letters **/ - if (myisalpha(word[i+k0]) - && strchr (s+1, word[i+k0]) != NULL) { - k0++; - while (*s != ')' && *s != '\0') - s++; - if (*s == ')') - s++; - } - } - while (*s == '-') { - /** "k0" gets NOT reduced **/ - /** because "if (k0 == k)" **/ - s++; - } - if (*s == '<') - s++; - if (isdigit ((unsigned char) *s)) { - p0 = *s - '0'; - s++; + while (*s != ')' && *s != '\0') + s++; + if (*s == ')') + s++; } - - if (*s == '\0' - /** *s == '^' cuts **/ - || (*s == '$' && ! myisalpha(word[i+k0]))) - { - if (k0 == k) { - /** this is just a piece of the string **/ - n0 += 2; - continue; - } - - if (p0 < p) { - /** priority too low **/ - n0 += 2; - continue; - } - /** rule fits; stop search **/ - break; - } - n0 += 2; - } /** End of "while (parms.rules[n0][0] == c0)" **/ - - if (p0 >= p && parms.rules[n0][0] == c0) { - n += 2; - continue; } - } /** end of follow-up stuff **/ - - /** replace string **/ - s = parms.rules[n+1]; - p0 = (parms.rules[n][0] != '\0' - && strchr (parms.rules[n]+1,'<') != NULL) ? 1:0; - if (p0 == 1 && z == 0) { - /** rule with '<' is used **/ - if (j > 0 && *s != '\0' - && (target[j-1] == c || target[j-1] == *s)) { - j--; + while (*s == '-') { + /** "k0" gets NOT reduced **/ + /** because "if (k0 == k)" **/ + s++; } - z0 = 1; - z = 1; - k0 = 0; - while (*s != '\0' && word[i+k0] != '\0') { - word[i+k0] = *s; - k0++; + if (*s == '<') + s++; + if (isdigit((unsigned char)*s)) { + p0 = *s - '0'; s++; } - if (k > k0) - strmove (&word[0]+i+k0, &word[0]+i+k); - /** new "actual letter" **/ - c = word[i]; - } - else { /** no '<' rule used **/ - i += k - 1; - z = 0; - while (*s != '\0' - && *(s+1) != '\0' && j < len) { - if (j == 0 || target[j-1] != *s) { - target[j] = *s; - j++; + if (*s == '\0' + /** *s == '^' cuts **/ + || (*s == '$' && !myisalpha(word[i + k0]))) { + if (k0 == k) { + /** this is just a piece of the string **/ + n0 += 2; + continue; } - s++; - } - /** new "actual letter" **/ - c = *s; - if (parms.rules[n][0] != '\0' - && strstr (parms.rules[n]+1, "^^") != NULL) { - if (c != '\0') { - target[j] = c; - j++; + + if (p0 < p) { + /** priority too low **/ + n0 += 2; + continue; } - strmove (&word[0], &word[0]+i+1); - i = 0; - z0 = 1; + /** rule fits; stop search **/ + break; } + n0 += 2; + } /** End of "while (parms.rules[n0][0] == c0)" **/ + + if (p0 >= p && parms.rules[n0][0] == c0) { + n += 2; + continue; } - break; - } /** end of follow-up stuff **/ - n += 2; - } /** end of while (parms.rules[n][0] == c) **/ - } /** end of if (n >= 0) **/ - if (z0 == 0) { -// if (k && (assert(p0!=-333),!p0) && j < len && c != '\0' -// && (!parms.collapse_result || j == 0 || target[j-1] != c)){ - if (k && !p0 && j < len && c != '\0' - && (1 || j == 0 || target[j-1] != c)){ - /** condense only double letters **/ - target[j] = c; - ///printf("\n setting \n"); - j++; - } + } /** end of follow-up stuff **/ - i++; - z = 0; - k=0; + /** replace string **/ + s = parms.rules[n + 1]; + p0 = (parms.rules[n][0] != '\0' && + strchr(parms.rules[n] + 1, '<') != NULL) + ? 1 + : 0; + if (p0 == 1 && z == 0) { + /** rule with '<' is used **/ + if (!target.empty() && *s != '\0' && + (target[target.size()-1] == c || target[target.size()-1] == *s)) { + target.erase(target.size() - 1); + } + z0 = 1; + z = 1; + k0 = 0; + while (*s != '\0' && word[i + k0] != '\0') { + word[i + k0] = *s; + k0++; + s++; + } + if (k > k0) + strmove(&word[0] + i + k0, &word[0] + i + k); + + /** new "actual letter" **/ + c = word[i]; + } else { /** no '<' rule used **/ + i += k - 1; + z = 0; + while (*s != '\0' && *(s + 1) != '\0' && target.size() < len) { + if (target.empty() || target[target.size()-1] != *s) { + target.push_back(*s); + } + s++; + } + /** new "actual letter" **/ + c = *s; + if (parms.rules[n][0] != '\0' && + strstr(parms.rules[n] + 1, "^^") != NULL) { + if (c != '\0') { + target.push_back(c); + } + strmove(&word[0], &word[0] + i + 1); + i = 0; + z0 = 1; + } + } + break; + } /** end of follow-up stuff **/ + n += 2; + } /** end of while (parms.rules[n][0] == c) **/ + } /** end of if (n >= 0) **/ + if (z0 == 0) { + if (k && !p0 && target.size() < len && c != '\0' && + (1 || target.empty() || target[target.size()-1] != c)) { + /** condense only double letters **/ + target.push_back(c); + /// printf("\n setting \n"); } - } /** end of while ((c = word[i]) != '\0') **/ - target[j] = '\0'; - return (j); + i++; + z = 0; + k = 0; + } + } /** end of while ((c = word[i]) != '\0') **/ - } /** end of function "phonet" **/ + return target; +} /** end of function "phonet" **/ diff --git a/src/spelling/hunspell/phonet.hxx b/src/spelling/hunspell/phonet.hxx index f91d3b02..eb9fd0c6 100644 --- a/src/spelling/hunspell/phonet.hxx +++ b/src/spelling/hunspell/phonet.hxx @@ -4,12 +4,12 @@ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation; - + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with this library; If not, see . @@ -21,8 +21,8 @@ transformations out of c't 25/1999 2007-07-26 Bjoern Jacke - Released under MPL/GPL/LGPL tri-license for Hunspell - + Released under MPL/GPL/LGPL tri-license for Hunspell + 2007-08-23 Laszlo Nemeth Porting from Aspell to Hunspell using C-like structs */ @@ -30,23 +30,23 @@ #ifndef __PHONETHXX__ #define __PHONETHXX__ -#define HASHSIZE 256 -#define MAXPHONETLEN 256 -#define MAXPHONETUTF8LEN (MAXPHONETLEN * 4) +#define HASHSIZE 256 +#define MAXPHONETLEN 256 +#define MAXPHONETUTF8LEN (MAXPHONETLEN * 4) #include "hunvisapi.h" struct phonetable { char utf8; - cs_info * lang; + cs_info* lang; int num; - char * * rules; + char** rules; int hash[HASHSIZE]; }; -LIBHUNSPELL_DLL_EXPORTED void init_phonet_hash(phonetable & parms); +LIBHUNSPELL_DLL_EXPORTED void init_phonet_hash(phonetable& parms); -LIBHUNSPELL_DLL_EXPORTED int phonet (const char * inword, char * target, - int len, phonetable & phone); +LIBHUNSPELL_DLL_EXPORTED std::string phonet(const std::string& inword, + phonetable& phone); #endif diff --git a/src/spelling/hunspell/replist.cxx b/src/spelling/hunspell/replist.cxx index 080cd68a..b3e6b37d 100644 --- a/src/spelling/hunspell/replist.cxx +++ b/src/spelling/hunspell/replist.cxx @@ -1,87 +1,193 @@ -#include "license.hunspell" -#include "license.myspell" +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ #include #include #include +#include #include "replist.hxx" #include "csutil.hxx" RepList::RepList(int n) { - dat = (replentry **) malloc(sizeof(replentry *) * n); - if (dat == 0) size = 0; else size = n; - pos = 0; + dat = (replentry**)malloc(sizeof(replentry*) * n); + if (dat == 0) + size = 0; + else + size = n; + pos = 0; } -RepList::~RepList() -{ - for (int i = 0; i < pos; i++) { - free(dat[i]->pattern); - free(dat[i]->pattern2); - free(dat[i]); - } - free(dat); +RepList::~RepList() { + for (int i = 0; i < pos; i++) { + free(dat[i]->pattern); + free(dat[i]->pattern2); + free(dat[i]); + } + free(dat); } int RepList::get_pos() { - return pos; + return pos; } -replentry * RepList::item(int n) { - return dat[n]; +replentry* RepList::item(int n) { + return dat[n]; } -int RepList::near(const char * word) { - int p1 = 0; - int p2 = pos; - while ((p2 - p1) > 1) { - int m = (p1 + p2) / 2; - int c = strcmp(word, dat[m]->pattern); - if (c <= 0) { - if (c < 0) p2 = m; else p1 = p2 = m; - } else p1 = m; - } - return p1; +int RepList::near(const char* word) { + int p1 = 0; + int p2 = pos; + while ((p2 - p1) > 1) { + int m = (p1 + p2) / 2; + int c = strcmp(word, dat[m]->pattern); + if (c <= 0) { + if (c < 0) + p2 = m; + else + p1 = p2 = m; + } else + p1 = m; + } + return p1; } -int RepList::match(const char * word, int n) { - if (strncmp(word, dat[n]->pattern, strlen(dat[n]->pattern)) == 0) return strlen(dat[n]->pattern); - return 0; +int RepList::match(const char* word, int n) { + if (strncmp(word, dat[n]->pattern, strlen(dat[n]->pattern)) == 0) + return strlen(dat[n]->pattern); + return 0; } -int RepList::add(char * pat1, char * pat2) { - if (pos >= size || pat1 == NULL || pat2 == NULL) return 1; - replentry * r = (replentry *) malloc(sizeof(replentry)); - if (r == NULL) return 1; - r->pattern = mystrrep(pat1, "_", " "); - r->pattern2 = mystrrep(pat2, "_", " "); - r->start = false; - r->end = false; - dat[pos++] = r; - for (int i = pos - 1; i > 0; i--) { - r = dat[i]; - if (strcmp(r->pattern, dat[i - 1]->pattern) < 0) { - dat[i] = dat[i - 1]; - dat[i - 1] = r; - } else break; +int RepList::add(char* pat1, char* pat2) { + if (pos >= size || pat1 == NULL || pat2 == NULL) + return 1; + replentry* r = (replentry*)malloc(sizeof(replentry)); + if (r == NULL) + return 1; + r->pattern = mystrrep(pat1, "_", " "); + r->pattern2 = mystrrep(pat2, "_", " "); + r->start = false; + r->end = false; + dat[pos++] = r; + for (int i = pos - 1; i > 0; i--) { + r = dat[i]; + if (strcmp(r->pattern, dat[i - 1]->pattern) < 0) { + dat[i] = dat[i - 1]; + dat[i - 1] = r; + } else + break; + } + return 0; +} + +int RepList::conv(const char* word, char* dest, size_t destsize) { + size_t stl = 0; + int change = 0; + for (size_t i = 0; i < strlen(word); i++) { + int n = near(word + i); + int l = match(word + i, n); + if (l) { + size_t replen = strlen(dat[n]->pattern2); + if (stl + replen >= destsize) + return -1; + strcpy(dest + stl, dat[n]->pattern2); + stl += replen; + i += l - 1; + change = 1; + } else { + if (stl + 1 >= destsize) + return -1; + dest[stl++] = word[i]; } - return 0; + } + dest[stl] = '\0'; + return change; } -int RepList::conv(const char * word, char * dest) { - int stl = 0; - int change = 0; - for (size_t i = 0; i < strlen(word); i++) { - int n = near(word + i); - int l = match(word + i, n); - if (l) { - strcpy(dest + stl, dat[n]->pattern2); - stl += strlen(dat[n]->pattern2); - i += l - 1; - change = 1; - } else dest[stl++] = word[i]; +bool RepList::conv(const char* word, std::string& dest) { + dest.clear(); + + bool change = false; + for (size_t i = 0; i < strlen(word); i++) { + int n = near(word + i); + int l = match(word + i, n); + if (l) { + dest.append(dat[n]->pattern2); + i += l - 1; + change = true; + } else { + dest.push_back(word[i]); } - dest[stl] = '\0'; - return change; + } + return change; } diff --git a/src/spelling/hunspell/replist.hxx b/src/spelling/hunspell/replist.hxx index 2dbc0160..0c515362 100644 --- a/src/spelling/hunspell/replist.hxx +++ b/src/spelling/hunspell/replist.hxx @@ -1,3 +1,76 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + /* string replacement list class */ #ifndef _REPLIST_HXX_ #define _REPLIST_HXX_ @@ -6,25 +79,29 @@ #include "w_char.hxx" -class LIBHUNSPELL_DLL_EXPORTED RepList -{ -private: - RepList(const RepList&); - RepList& operator = (const RepList&); -protected: - replentry ** dat; - int size; - int pos; - -public: - RepList(int n); - ~RepList(); - - int get_pos(); - int add(char * pat1, char * pat2); - replentry * item(int n); - int near(const char * word); - int match(const char * word, int n); - int conv(const char * word, char * dest); +#include +#include + +class LIBHUNSPELL_DLL_EXPORTED RepList { + private: + RepList(const RepList&); + RepList& operator=(const RepList&); + + protected: + replentry** dat; + int size; + int pos; + + public: + RepList(int n); + ~RepList(); + + int get_pos(); + int add(char* pat1, char* pat2); + replentry* item(int n); + int near(const char* word); + int match(const char* word, int n); + int conv(const char* word, char* dest, size_t destsize); + bool conv(const char* word, std::string& dest); }; #endif diff --git a/src/spelling/hunspell/suggestmgr.cxx b/src/spelling/hunspell/suggestmgr.cxx index f0e336c9..17becd75 100644 --- a/src/spelling/hunspell/suggestmgr.cxx +++ b/src/spelling/hunspell/suggestmgr.cxx @@ -1,22 +1,89 @@ -#include "license.hunspell" -#include "license.myspell" - -#include +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include #include -#include +#include #include #include "suggestmgr.hxx" #include "htypes.hxx" #include "csutil.hxx" -const w_char W_VLINE = { '\0', '|' }; - -SuggestMgr::SuggestMgr(const char * tryme, int maxn, - AffixMgr * aptr) -{ +const w_char W_VLINE = {'\0', '|'}; - // register affix manager and check in string of chars to +SuggestMgr::SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr) { + // register affix manager and check in string of chars to // try when building candidate suggestions pAMgr = aptr; @@ -32,558 +99,578 @@ SuggestMgr::SuggestMgr(const char * tryme, int maxn, utf8 = 0; langnum = 0; - complexprefixes = 0; - + complexprefixes = 0; + maxSug = maxn; nosplitsugs = 0; maxngramsugs = MAXNGRAMSUGS; maxcpdsugs = MAXCOMPOUNDSUGS; if (pAMgr) { - langnum = pAMgr->get_langnum(); - ckey = pAMgr->get_key_string(); - nosplitsugs = pAMgr->get_nosplitsugs(); - if (pAMgr->get_maxngramsugs() >= 0) - maxngramsugs = pAMgr->get_maxngramsugs(); - utf8 = pAMgr->get_utf8(); - if (pAMgr->get_maxcpdsugs() >= 0) - maxcpdsugs = pAMgr->get_maxcpdsugs(); - if (!utf8) - { - char * enc = pAMgr->get_encoding(); - csconv = get_current_cs(enc); - free(enc); - } - complexprefixes = pAMgr->get_complexprefixes(); + langnum = pAMgr->get_langnum(); + ckey = pAMgr->get_key_string(); + nosplitsugs = pAMgr->get_nosplitsugs(); + if (pAMgr->get_maxngramsugs() >= 0) + maxngramsugs = pAMgr->get_maxngramsugs(); + utf8 = pAMgr->get_utf8(); + if (pAMgr->get_maxcpdsugs() >= 0) + maxcpdsugs = pAMgr->get_maxcpdsugs(); + if (!utf8) { + char* enc = pAMgr->get_encoding(); + csconv = get_current_cs(enc); + free(enc); + } + complexprefixes = pAMgr->get_complexprefixes(); } - if (ckey) { + if (ckey) { if (utf8) { - w_char t[MAXSWL]; - ckeyl = u8_u16(t, MAXSWL, ckey); - ckey_utf = (w_char *) malloc(ckeyl * sizeof(w_char)); - if (ckey_utf) memcpy(ckey_utf, t, ckeyl * sizeof(w_char)); - else ckeyl = 0; + std::vector t; + ckeyl = u8_u16(t, ckey); + ckey_utf = (w_char*)malloc(ckeyl * sizeof(w_char)); + if (ckey_utf) + memcpy(ckey_utf, &t[0], ckeyl * sizeof(w_char)); + else + ckeyl = 0; } else { - ckeyl = strlen(ckey); + ckeyl = strlen(ckey); } } - - if (tryme) { + + if (tryme) { ctry = mystrdup(tryme); - if (ctry) ctryl = strlen(ctry); + if (ctry) + ctryl = strlen(ctry); if (ctry && utf8) { - w_char t[MAXSWL]; - ctryl = u8_u16(t, MAXSWL, tryme); - ctry_utf = (w_char *) malloc(ctryl * sizeof(w_char)); - if (ctry_utf) memcpy(ctry_utf, t, ctryl * sizeof(w_char)); - else ctryl = 0; + std::vector t; + ctryl = u8_u16(t, tryme); + ctry_utf = (w_char*)malloc(ctryl * sizeof(w_char)); + if (ctry_utf) + memcpy(ctry_utf, &t[0], ctryl * sizeof(w_char)); + else + ctryl = 0; } } } - -SuggestMgr::~SuggestMgr() -{ +SuggestMgr::~SuggestMgr() { pAMgr = NULL; - if (ckey) free(ckey); + if (ckey) + free(ckey); ckey = NULL; - if (ckey_utf) free(ckey_utf); + if (ckey_utf) + free(ckey_utf); ckey_utf = NULL; ckeyl = 0; - if (ctry) free(ctry); + if (ctry) + free(ctry); ctry = NULL; - if (ctry_utf) free(ctry_utf); + if (ctry_utf) + free(ctry_utf); ctry_utf = NULL; ctryl = 0; maxSug = 0; #ifdef MOZILLA_CLIENT - delete [] csconv; + delete[] csconv; #endif } -int SuggestMgr::testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest, - int * timer, clock_t * timelimit) { - int cwrd = 1; - if (ns == maxSug) return maxSug; - for (int k=0; k < ns; k++) { - if (strcmp(candidate,wlst[k]) == 0) { - cwrd = 0; - break; - } - } - if ((cwrd) && checkword(candidate, wl, cpdsuggest, timer, timelimit)) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) { - for (int j=0; j word_utf; int wl = 0; int nsugorig = nsug; - char w2[MAXWORDUTF8LEN]; - const char * word = w; + std::string w2; + const char* word = w; int oldSug = 0; // word reversing wrapper for complex prefixes if (complexprefixes) { - strcpy(w2, w); - if (utf8) reverseword_utf(w2); else reverseword(w2); - word = w2; + w2.assign(w); + if (utf8) + reverseword_utf(w2); + else + reverseword(w2); + word = w2.c_str(); } - - if (*slst) { - wlst = *slst; - } else { - wlst = (char **) malloc(maxSug * sizeof(char *)); - if (wlst == NULL) return -1; - for (int i = 0; i < maxSug; i++) { - wlst[i] = NULL; - } - } - - if (utf8) { - wl = u8_u16(word_utf, MAXSWL, word); - if (wl == -1) { - *slst = wlst; - return nsug; - } + + if (*slst) { + wlst = *slst; + } else { + wlst = (char**)malloc(maxSug * sizeof(char*)); + if (wlst == NULL) + return -1; + for (int i = 0; i < maxSug; i++) { + wlst[i] = NULL; } + } - for (int cpdsuggest=0; (cpdsuggest<2) && (nocompoundtwowords==0); cpdsuggest++) { + if (utf8) { + wl = u8_u16(word_utf, word); + if (wl == -1) { + *slst = wlst; + return nsug; + } + } + for (int cpdsuggest = 0; (cpdsuggest < 2) && (nocompoundtwowords == 0); + cpdsuggest++) { // limit compound suggestion - if (cpdsuggest > 0) oldSug = nsug; + if (cpdsuggest > 0) + oldSug = nsug; // suggestions for an uppercase word (html -> HTML) if ((nsug < maxSug) && (nsug > -1)) { - nsug = (utf8) ? capchars_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - capchars(wlst, word, nsug, cpdsuggest); + nsug = (utf8) ? capchars_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : capchars(wlst, word, nsug, cpdsuggest); } // perhaps we made a typical fault of spelling - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { nsug = replchars(wlst, word, nsug, cpdsuggest); } // perhaps we made chose the wrong char from a related set - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { nsug = mapchars(wlst, word, nsug, cpdsuggest); } // only suggest compound words when no other suggestion - if ((cpdsuggest == 0) && (nsug > nsugorig)) nocompoundtwowords=1; + if ((cpdsuggest == 0) && (nsug > nsugorig)) + nocompoundtwowords = 1; // did we swap the order of chars by mistake - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? swapchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - swapchar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? swapchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : swapchar(wlst, word, nsug, cpdsuggest); } // did we swap the order of non adjacent chars by mistake - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? longswapchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - longswapchar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? longswapchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : longswapchar(wlst, word, nsug, cpdsuggest); } // did we just hit the wrong key in place of a good char (case and keyboard) - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? badcharkey_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - badcharkey(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? badcharkey_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : badcharkey(wlst, word, nsug, cpdsuggest); } // did we add a char that should not be there - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? extrachar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - extrachar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? extrachar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : extrachar(wlst, word, nsug, cpdsuggest); } - // did we forgot a char - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? forgotchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - forgotchar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? forgotchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : forgotchar(wlst, word, nsug, cpdsuggest); } // did we move a char - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? movechar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - movechar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? movechar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : movechar(wlst, word, nsug, cpdsuggest); } // did we just hit the wrong key in place of a good char - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? badchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - badchar(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? badchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : badchar(wlst, word, nsug, cpdsuggest); } // did we double two characters - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? doubletwochars_utf(wlst, word_utf, wl, nsug, cpdsuggest) : - doubletwochars(wlst, word, nsug, cpdsuggest); + if ((nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = (utf8) ? doubletwochars_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) + : doubletwochars(wlst, word, nsug, cpdsuggest); } // perhaps we forgot to hit space and two words ran together - if (!nosplitsugs && (nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = twowords(wlst, word, nsug, cpdsuggest); + if (!nosplitsugs && (nsug < maxSug) && (nsug > -1) && + (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { + nsug = twowords(wlst, word, nsug, cpdsuggest); } - } // repeating ``for'' statement compounding support - - if (nsug < 0) { - // we ran out of memory - we should free up as much as possible - for (int i = 0; i < maxSug; i++) - if (wlst[i] != NULL) free(wlst[i]); - free(wlst); - wlst = NULL; - } - - if (!nocompoundtwowords && (nsug > 0) && onlycompoundsug) *onlycompoundsug = 1; - - *slst = wlst; - return nsug; -} - -// generate suggestions for a word with typical mistake -// pass in address of array of char * pointers -#ifdef HUNSPELL_EXPERIMENTAL -int SuggestMgr::suggest_auto(char*** slst, const char * w, int nsug) -{ - int nocompoundtwowords = 0; - char ** wlst; - int oldSug; - - char w2[MAXWORDUTF8LEN]; - const char * word = w; + } // repeating ``for'' statement compounding support - // word reversing wrapper for complex prefixes - if (complexprefixes) { - strcpy(w2, w); - if (utf8) reverseword_utf(w2); else reverseword(w2); - word = w2; + if (nsug < 0) { + // we ran out of memory - we should free up as much as possible + for (int i = 0; i < maxSug; i++) + if (wlst[i] != NULL) + free(wlst[i]); + free(wlst); + wlst = NULL; } - if (*slst) { - wlst = *slst; - } else { - wlst = (char **) malloc(maxSug * sizeof(char *)); - if (wlst == NULL) return -1; - } - - for (int cpdsuggest=0; (cpdsuggest<2) && (nocompoundtwowords==0); cpdsuggest++) { + if (!nocompoundtwowords && (nsug > 0) && onlycompoundsug) + *onlycompoundsug = 1; - // limit compound suggestion - if (cpdsuggest > 0) oldSug = nsug; - - // perhaps we made a typical fault of spelling - if ((nsug < maxSug) && (nsug > -1)) - nsug = replchars(wlst, word, nsug, cpdsuggest); - - // perhaps we made chose the wrong char from a related set - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) - nsug = mapchars(wlst, word, nsug, cpdsuggest); - - if ((cpdsuggest==0) && (nsug>0)) nocompoundtwowords=1; - - // perhaps we forgot to hit space and two words ran together - - if ((nsug < maxSug) && (nsug > -1) && (!cpdsuggest || (nsug < oldSug + maxcpdsugs)) && check_forbidden(word, strlen(word))) { - nsug = twowords(wlst, word, nsug, cpdsuggest); - } - - } // repeating ``for'' statement compounding support - - if (nsug < 0) { - for (int i=0;i HTML) -int SuggestMgr::capchars_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - w_char candidate_utf[MAXSWL]; - memcpy(candidate_utf, word, wl * sizeof(w_char)); - mkallcap_utf(candidate_utf, wl, langnum); - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - return testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); +int SuggestMgr::capchars_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + mkallcap_utf(candidate_utf, langnum); + std::string candidate; + u16_u8(candidate, candidate_utf); + return testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); } // suggestions for an uppercase word (html -> HTML) -int SuggestMgr::capchars(char** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - strcpy(candidate, word); +int SuggestMgr::capchars(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); mkallcap(candidate, csconv); - return testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); + return testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); } // suggestions for when chose the wrong char out of a related set -int SuggestMgr::mapchars(char** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; +int SuggestMgr::mapchars(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate; clock_t timelimit; int timer; - candidate[0] = '\0'; int wl = strlen(word); - if (wl < 2 || ! pAMgr) return ns; + if (wl < 2 || !pAMgr) + return ns; int nummap = pAMgr->get_nummap(); struct mapentry* maptable = pAMgr->get_maptable(); - if (maptable==NULL) return ns; + if (maptable == NULL) + return ns; timelimit = clock(); timer = MINTIMER; - return map_related(word, (char *) &candidate, 0, 0, wlst, cpdsuggest, ns, maptable, nummap, &timer, &timelimit); + return map_related(word, candidate, 0, wlst, cpdsuggest, ns, + maptable, nummap, &timer, &timelimit); } -int SuggestMgr::map_related(const char * word, char * candidate, int wn, int cn, - char** wlst, int cpdsuggest, int ns, - const mapentry* maptable, int nummap, int * timer, clock_t * timelimit) -{ +int SuggestMgr::map_related(const char* word, + std::string& candidate, + int wn, + char** wlst, + int cpdsuggest, + int ns, + const mapentry* maptable, + int nummap, + int* timer, + clock_t* timelimit) { if (*(word + wn) == '\0') { - int cwrd = 1; - *(candidate + cn) = '\0'; - int wl = strlen(candidate); - for (int m=0; m < ns; m++) { - if (strcmp(candidate, wlst[m]) == 0) { - cwrd = 0; - break; - } + int cwrd = 1; + for (int m = 0; m < ns; m++) { + if (candidate == wlst[m]) { + cwrd = 0; + break; } - if ((cwrd) && checkword(candidate, wl, cpdsuggest, timer, timelimit)) { - if (ns < maxSug) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) return -1; - ns++; - } + } + if ((cwrd) && checkword(candidate.c_str(), candidate.size(), cpdsuggest, timer, timelimit)) { + if (ns < maxSug) { + wlst[ns] = mystrdup(candidate.c_str()); + if (wlst[ns] == NULL) + return -1; + ns++; } - return ns; - } + } + return ns; + } int in_map = 0; for (int j = 0; j < nummap; j++) { for (int k = 0; k < maptable[j].len; k++) { int len = strlen(maptable[j].set[k]); if (strncmp(maptable[j].set[k], word + wn, len) == 0) { in_map = 1; + size_t cn = candidate.size(); for (int l = 0; l < maptable[j].len; l++) { - strcpy(candidate + cn, maptable[j].set[l]); - ns = map_related(word, candidate, wn + len, strlen(candidate), wlst, - cpdsuggest, ns, maptable, nummap, timer, timelimit); - if (!(*timer)) return ns; - } + candidate.resize(cn); + candidate.append(maptable[j].set[l]); + ns = map_related(word, candidate, wn + len, wlst, + cpdsuggest, ns, maptable, nummap, timer, timelimit); + if (!(*timer)) + return ns; + } } } } if (!in_map) { - *(candidate + cn) = *(word + wn); - ns = map_related(word, candidate, wn + 1, cn + 1, wlst, cpdsuggest, - ns, maptable, nummap, timer, timelimit); + candidate.push_back(*(word + wn)); + ns = map_related(word, candidate, wn + 1, wlst, cpdsuggest, ns, + maptable, nummap, timer, timelimit); } return ns; } // suggestions for a typical fault of spelling, that // differs with more, than 1 letter from the right form. -int SuggestMgr::replchars(char** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - const char * r; - int lenr, lenp; +int SuggestMgr::replchars(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate; int wl = strlen(word); - if (wl < 2 || ! pAMgr) return ns; + if (wl < 2 || !pAMgr) + return ns; int numrep = pAMgr->get_numrep(); struct replentry* reptable = pAMgr->get_reptable(); - if (reptable==NULL) return ns; - for (int i=0; i < numrep; i++ ) { - r = word; - lenr = strlen(reptable[i].pattern2); - lenp = strlen(reptable[i].pattern); - // search every occurence of the pattern in the word - while ((r=strstr(r, reptable[i].pattern)) != NULL && (!reptable[i].end || strlen(r) == strlen(reptable[i].pattern)) && - (!reptable[i].start || r == word)) { - strcpy(candidate, word); - if (r-word + lenr + strlen(r+lenp) >= MAXSWUTF8L) break; - strcpy(candidate+(r-word),reptable[i].pattern2); - strcpy(candidate+(r-word)+lenr, r+lenp); - ns = testsug(wlst, candidate, wl-lenp+lenr, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - // check REP suggestions with space - char * sp = strchr(candidate, ' '); - if (sp) { - char * prev = candidate; - while (sp) { - *sp = '\0'; - if (checkword(prev, strlen(prev), 0, NULL, NULL)) { - int oldns = ns; - *sp = ' '; - ns = testsug(wlst, sp + 1, strlen(sp + 1), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - if (oldns < ns) { - free(wlst[ns - 1]); - wlst[ns - 1] = mystrdup(candidate); - if (!wlst[ns - 1]) return -1; - } - } - *sp = ' '; - prev = sp + 1; - sp = strchr(prev, ' '); + if (reptable == NULL) + return ns; + for (int i = 0; i < numrep; i++) { + const char* r = word; + // search every occurence of the pattern in the word + while ((r = strstr(r, reptable[i].pattern)) != NULL && + (!reptable[i].end || strlen(r) == strlen(reptable[i].pattern)) && + (!reptable[i].start || r == word)) { + candidate.assign(word); + candidate.resize(r - word); + candidate.append(reptable[i].pattern2); + int lenp = strlen(reptable[i].pattern); + candidate.append(r + lenp); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + // check REP suggestions with space + size_t sp = candidate.find(' '); + if (sp != std::string::npos) { + size_t prev = 0; + while (sp != std::string::npos) { + std::string prev_chunk = candidate.substr(prev, sp - prev); + if (checkword(prev_chunk.c_str(), prev_chunk.size(), 0, NULL, NULL)) { + int oldns = ns; + std::string post_chunk = candidate.substr(sp + 1); + ns = testsug(wlst, post_chunk.c_str(), post_chunk.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + if (oldns < ns) { + free(wlst[ns - 1]); + wlst[ns - 1] = mystrdup(candidate.c_str()); + if (!wlst[ns - 1]) + return -1; } } - r++; // search for the next letter + prev = sp + 1; + sp = candidate.find(' ', prev); + } } - } - return ns; + r++; // search for the next letter + } + } + return ns; } -// perhaps we doubled two characters (pattern aba -> ababa, for example vacation -> vacacation) -int SuggestMgr::doubletwochars(char** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - int state=0; +// perhaps we doubled two characters (pattern aba -> ababa, for example vacation +// -> vacacation) +int SuggestMgr::doubletwochars(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + int state = 0; int wl = strlen(word); - if (wl < 5 || ! pAMgr) return ns; - for (int i=2; i < wl; i++ ) { - if (word[i]==word[i-2]) { - state++; - if (state==3) { - strcpy(candidate,word); - strcpy(candidate+i-1,word+i+1); - ns = testsug(wlst, candidate, wl-2, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - state=0; - } - } else { - state=0; + if (wl < 5 || !pAMgr) + return ns; + for (int i = 2; i < wl; i++) { + if (word[i] == word[i - 2]) { + state++; + if (state == 3) { + std::string candidate(word, word + i - 1); + candidate.insert(candidate.end(), word + i + 1, word + wl); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + state = 0; } + } else { + state = 0; + } } return ns; } -// perhaps we doubled two characters (pattern aba -> ababa, for example vacation -> vacacation) -int SuggestMgr::doubletwochars_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; - int state=0; - if (wl < 5 || ! pAMgr) return ns; - for (int i=2; i < wl; i++) { - if (w_char_eq(word[i], word[i-2])) { - state++; - if (state==3) { - memcpy(candidate_utf, word, (i - 1) * sizeof(w_char)); - memcpy(candidate_utf+i-1, word+i+1, (wl-i-1) * sizeof(w_char)); - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl-2); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - state=0; - } - } else { - state=0; +// perhaps we doubled two characters (pattern aba -> ababa, for example vacation +// -> vacacation) +int SuggestMgr::doubletwochars_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + int state = 0; + if (wl < 5 || !pAMgr) + return ns; + for (int i = 2; i < wl; i++) { + if (word[i] == word[i - 2]) { + state++; + if (state == 3) { + std::vector candidate_utf(word, word + i - 1); + candidate_utf.insert(candidate_utf.end(), word + i + 1, word + wl); + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + state = 0; } + } else { + state = 0; + } } return ns; } -// error is wrong char in place of correct one (case and keyboard related version) -int SuggestMgr::badcharkey(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char tmpc; - char candidate[MAXSWUTF8L]; - int wl = strlen(word); - strcpy(candidate, word); +// error is wrong char in place of correct one (case and keyboard related +// version) +int SuggestMgr::badcharkey(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + // swap out each char one by one and try uppercase and neighbor // keyboard chars in its place to see if that makes a good word - - for (int i=0; i < wl; i++) { - tmpc = candidate[i]; + for (size_t i = 0; i < candidate.size(); ++i) { + char tmpc = candidate[i]; // check with uppercase letters candidate[i] = csconv[((unsigned char)tmpc)].cupper; if (tmpc != candidate[i]) { - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - candidate[i] = tmpc; + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + candidate[i] = tmpc; } // check neighbor characters in keyboard string - if (!ckey) continue; - char * loc = strchr(ckey, tmpc); + if (!ckey) + continue; + char* loc = strchr(ckey, tmpc); while (loc) { - if ((loc > ckey) && (*(loc - 1) != '|')) { - candidate[i] = *(loc - 1); - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - if ((*(loc + 1) != '|') && (*(loc + 1) != '\0')) { - candidate[i] = *(loc + 1); - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - loc = strchr(loc + 1, tmpc); + if ((loc > ckey) && (*(loc - 1) != '|')) { + candidate[i] = *(loc - 1); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + if ((*(loc + 1) != '|') && (*(loc + 1) != '\0')) { + candidate[i] = *(loc + 1); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + loc = strchr(loc + 1, tmpc); } candidate[i] = tmpc; } return ns; } -// error is wrong char in place of correct one (case and keyboard related version) -int SuggestMgr::badcharkey_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char tmpc; - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; - memcpy(candidate_utf, word, wl * sizeof(w_char)); +// error is wrong char in place of correct one (case and keyboard related +// version) +int SuggestMgr::badcharkey_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::string candidate; + std::vector candidate_utf(word, word + wl); // swap out each char one by one and try all the tryme // chars in its place to see if that makes a good word - for (int i=0; i < wl; i++) { - tmpc = candidate_utf[i]; + for (int i = 0; i < wl; i++) { + w_char tmpc = candidate_utf[i]; // check with uppercase letters - mkallcap_utf(candidate_utf + i, 1, langnum); - if (!w_char_eq(tmpc, candidate_utf[i])) { - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - candidate_utf[i] = tmpc; + candidate_utf[i] = upper_utf(candidate_utf[i], 1); + if (tmpc != candidate_utf[i]) { + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + candidate_utf[i] = tmpc; } // check neighbor characters in keyboard string - if (!ckey) continue; - w_char * loc = ckey_utf; - while ((loc < (ckey_utf + ckeyl)) && !w_char_eq(*loc, tmpc)) loc++; + if (!ckey) + continue; + w_char* loc = ckey_utf; + while ((loc < (ckey_utf + ckeyl)) && *loc != tmpc) + loc++; while (loc < (ckey_utf + ckeyl)) { - if ((loc > ckey_utf) && !w_char_eq(*(loc - 1), W_VLINE)) { - candidate_utf[i] = *(loc - 1); - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - if (((loc + 1) < (ckey_utf + ckeyl)) && !w_char_eq(*(loc + 1), W_VLINE)) { - candidate_utf[i] = *(loc + 1); - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - do { loc++; } while ((loc < (ckey_utf + ckeyl)) && !w_char_eq(*loc, tmpc)); + if ((loc > ckey_utf) && *(loc - 1) != W_VLINE) { + candidate_utf[i] = *(loc - 1); + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + } + if (((loc + 1) < (ckey_utf + ckeyl)) && (*(loc + 1) != W_VLINE)) { + candidate_utf[i] = *(loc + 1); + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + } + do { + loc++; + } while ((loc < (ckey_utf + ckeyl)) && *loc != tmpc); } candidate_utf[i] = tmpc; } @@ -591,448 +678,491 @@ int SuggestMgr::badcharkey_utf(char ** wlst, const w_char * word, int wl, int ns } // error is wrong char in place of correct one -int SuggestMgr::badchar(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char tmpc; - char candidate[MAXSWUTF8L]; +int SuggestMgr::badchar(char** wlst, const char* word, int ns, int cpdsuggest) { + std::string candidate(word); clock_t timelimit = clock(); int timer = MINTIMER; - int wl = strlen(word); - strcpy(candidate, word); // swap out each char one by one and try all the tryme // chars in its place to see if that makes a good word - for (int j=0; j < ctryl; j++) { - for (int i=wl-1; i >= 0; i--) { - tmpc = candidate[i]; - if (ctry[j] == tmpc) continue; - candidate[i] = ctry[j]; - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) return -1; - if (!timer) return ns; - candidate[i] = tmpc; + for (int j = 0; j < ctryl; j++) { + for (std::string::reverse_iterator aI = candidate.rbegin(), aEnd = candidate.rend(); aI != aEnd; ++aI) { + char tmpc = *aI; + if (ctry[j] == tmpc) + continue; + *aI = ctry[j]; + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, &timelimit); + if (ns == -1) + return -1; + if (!timer) + return ns; + *aI = tmpc; } } return ns; } // error is wrong char in place of correct one -int SuggestMgr::badchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char tmpc; - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; +int SuggestMgr::badchar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + std::string candidate; clock_t timelimit = clock(); - int timer = MINTIMER; - memcpy(candidate_utf, word, wl * sizeof(w_char)); + int timer = MINTIMER; // swap out each char one by one and try all the tryme // chars in its place to see if that makes a good word - for (int j=0; j < ctryl; j++) { - for (int i=wl-1; i >= 0; i--) { - tmpc = candidate_utf[i]; - if (w_char_eq(tmpc, ctry_utf[j])) continue; - candidate_utf[i] = ctry_utf[j]; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) return -1; - if (!timer) return ns; - candidate_utf[i] = tmpc; + for (int j = 0; j < ctryl; j++) { + for (int i = wl - 1; i >= 0; i--) { + w_char tmpc = candidate_utf[i]; + if (tmpc == ctry_utf[j]) + continue; + candidate_utf[i] = ctry_utf[j]; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, + &timelimit); + if (ns == -1) + return -1; + if (!timer) + return ns; + candidate_utf[i] = tmpc; } } return ns; } -// error is word has an extra letter it does not need -int SuggestMgr::extrachar_utf(char** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - w_char candidate_utf[MAXSWL]; - w_char * p; - w_char tmpc = W_VLINE; // not used value, only for VCC warning message - if (wl < 2) return ns; - // try omitting one char of word at a time - memcpy(candidate_utf, word, wl * sizeof(w_char)); - for (p = candidate_utf + wl - 1; p >= candidate_utf; p--) { - w_char tmpc2 = *p; - if (p < candidate_utf + wl - 1) *p = tmpc; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl - 1); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - tmpc = tmpc2; - } - return ns; +// error is word has an extra letter it does not need +int SuggestMgr::extrachar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + if (candidate_utf.size() < 2) + return ns; + // try omitting one char of word at a time + for (size_t i = 0; i < candidate_utf.size(); ++i) { + size_t index = candidate_utf.size() - 1 - i; + w_char tmpc = candidate_utf[index]; + candidate_utf.erase(candidate_utf.begin() + index); + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + candidate_utf.insert(candidate_utf.begin() + index, tmpc); + } + return ns; } -// error is word has an extra letter it does not need -int SuggestMgr::extrachar(char** wlst, const char * word, int ns, int cpdsuggest) -{ - char tmpc = '\0'; - char candidate[MAXSWUTF8L]; - char * p; - int wl = strlen(word); - if (wl < 2) return ns; - // try omitting one char of word at a time - strcpy (candidate, word); - for (p = candidate + wl - 1; p >=candidate; p--) { - char tmpc2 = *p; - *p = tmpc; - ns = testsug(wlst, candidate, wl-1, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - tmpc = tmpc2; - } - return ns; +// error is word has an extra letter it does not need +int SuggestMgr::extrachar(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + if (candidate.size() < 2) + return ns; + // try omitting one char of word at a time + for (size_t i = 0; i < candidate.size(); ++i) { + size_t index = candidate.size() - 1 - i; + char tmpc = candidate[index]; + candidate.erase(candidate.begin() + index); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + candidate.insert(candidate.begin() + index, tmpc); + } + return ns; } // error is missing a letter it needs -int SuggestMgr::forgotchar(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L + 4]; - char * p; - clock_t timelimit = clock(); - int timer = MINTIMER; - int wl = strlen(word); - // try inserting a tryme character before every letter (and the null terminator) - for (int i = 0; i < ctryl; i++) { - strcpy(candidate, word); - for (p = candidate + wl; p >= candidate; p--) { - *(p+1) = *p; - *p = ctry[i]; - ns = testsug(wlst, candidate, wl+1, ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) return -1; - if (!timer) return ns; - } - } - return ns; +int SuggestMgr::forgotchar(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + clock_t timelimit = clock(); + int timer = MINTIMER; + + // try inserting a tryme character before every letter (and the null + // terminator) + for (int k = 0; k < ctryl; ++k) { + for (size_t i = 0; i <= candidate.size(); ++i) { + size_t index = candidate.size() - i; + candidate.insert(candidate.begin() + index, ctry[k]); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, &timelimit); + if (ns == -1) + return -1; + if (!timer) + return ns; + candidate.erase(candidate.begin() + index); + } + } + return ns; } // error is missing a letter it needs -int SuggestMgr::forgotchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char candidate_utf[MAXSWL + 1]; - char candidate[MAXSWUTF8L + 4]; - w_char * p; - clock_t timelimit = clock(); - int timer = MINTIMER; - // try inserting a tryme character at the end of the word and before every letter - for (int i = 0; i < ctryl; i++) { - memcpy (candidate_utf, word, wl * sizeof(w_char)); - for (p = candidate_utf + wl; p >= candidate_utf; p--) { - *(p + 1) = *p; - *p = ctry_utf[i]; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl + 1); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) return -1; - if (!timer) return ns; - } - } - return ns; -} +int SuggestMgr::forgotchar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + clock_t timelimit = clock(); + int timer = MINTIMER; + // try inserting a tryme character at the end of the word and before every + // letter + for (int k = 0; k < ctryl; ++k) { + for (size_t i = 0; i <= candidate_utf.size(); ++i) { + size_t index = candidate_utf.size() - i; + candidate_utf.insert(candidate_utf.begin() + index, ctry_utf[k]); + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, + &timelimit); + if (ns == -1) + return -1; + if (!timer) + return ns; + candidate_utf.erase(candidate_utf.begin() + index); + } + } + return ns; +} /* error is should have been two words */ -int SuggestMgr::twowords(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - char * p; - int c1, c2; - int forbidden = 0; - int cwrd; - - int wl=strlen(word); - if (wl < 3) return ns; - - if (langnum == LANG_hu) forbidden = check_forbidden(word, wl); - - strcpy(candidate + 1, word); - // split the string into two pieces after every char - // if both pieces are good words make them a suggestion - for (p = candidate + 1; p[1] != '\0'; p++) { - p[-1] = *p; - // go to end of the UTF-8 character - while (utf8 && ((p[1] & 0xc0) == 0x80)) { - *p = p[1]; - p++; - } - if (utf8 && p[1] == '\0') break; // last UTF-8 character - *p = '\0'; - c1 = checkword(candidate,strlen(candidate), cpdsuggest, NULL, NULL); - if (c1) { - c2 = checkword((p+1),strlen(p+1), cpdsuggest, NULL, NULL); - if (c2) { - *p = ' '; - - // spec. Hungarian code (need a better compound word support) - if ((langnum == LANG_hu) && !forbidden && - // if 3 repeating letter, use - instead of space - (((p[-1] == p[1]) && (((p>candidate+1) && (p[-1] == p[-2])) || (p[-1] == p[2]))) || - // or multiple compounding, with more, than 6 syllables - ((c1 == 3) && (c2 >= 2)))) *p = '-'; - - cwrd = 1; - for (int k=0; k < ns; k++) { - if (strcmp(candidate,wlst[k]) == 0) { - cwrd = 0; - break; - } +int SuggestMgr::twowords(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + int c1, c2; + int forbidden = 0; + int cwrd; + + int wl = strlen(word); + if (wl < 3) + return ns; + + if (langnum == LANG_hu) + forbidden = check_forbidden(word, wl); + + char* candidate = (char*)malloc(wl + 2); + strcpy(candidate + 1, word); + + // split the string into two pieces after every char + // if both pieces are good words make them a suggestion + for (char* p = candidate + 1; p[1] != '\0'; p++) { + p[-1] = *p; + // go to end of the UTF-8 character + while (utf8 && ((p[1] & 0xc0) == 0x80)) { + *p = p[1]; + p++; + } + if (utf8 && p[1] == '\0') + break; // last UTF-8 character + *p = '\0'; + c1 = checkword(candidate, strlen(candidate), cpdsuggest, NULL, NULL); + if (c1) { + c2 = checkword((p + 1), strlen(p + 1), cpdsuggest, NULL, NULL); + if (c2) { + *p = ' '; + + // spec. Hungarian code (need a better compound word support) + if ((langnum == LANG_hu) && !forbidden && + // if 3 repeating letter, use - instead of space + (((p[-1] == p[1]) && + (((p > candidate + 1) && (p[-1] == p[-2])) || (p[-1] == p[2]))) || + // or multiple compounding, with more, than 6 syllables + ((c1 == 3) && (c2 >= 2)))) + *p = '-'; + + cwrd = 1; + for (int k = 0; k < ns; k++) { + if (strcmp(candidate, wlst[k]) == 0) { + cwrd = 0; + break; + } + } + if (ns < maxSug) { + if (cwrd) { + wlst[ns] = mystrdup(candidate); + if (wlst[ns] == NULL) { + free(candidate); + return -1; } - if (ns < maxSug) { - if (cwrd) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) return -1; - ns++; - } - } else return ns; - // add two word suggestion with dash, if TRY string contains - // "a" or "-" - // NOTE: cwrd doesn't modified for REP twoword sugg. - if (ctry && (strchr(ctry, 'a') || strchr(ctry, '-')) && - mystrlen(p + 1) > 1 && - mystrlen(candidate) - mystrlen(p) > 1) { - *p = '-'; - for (int k=0; k < ns; k++) { - if (strcmp(candidate,wlst[k]) == 0) { - cwrd = 0; - break; - } - } - if (ns < maxSug) { - if (cwrd) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) return -1; - ns++; - } - } else return ns; + ns++; + } + } else { + free(candidate); + return ns; + } + // add two word suggestion with dash, if TRY string contains + // "a" or "-" + // NOTE: cwrd doesn't modified for REP twoword sugg. + if (ctry && (strchr(ctry, 'a') || strchr(ctry, '-')) && + mystrlen(p + 1) > 1 && mystrlen(candidate) - mystrlen(p) > 1) { + *p = '-'; + for (int k = 0; k < ns; k++) { + if (strcmp(candidate, wlst[k]) == 0) { + cwrd = 0; + break; + } + } + if (ns < maxSug) { + if (cwrd) { + wlst[ns] = mystrdup(candidate); + if (wlst[ns] == NULL) { + free(candidate); + return -1; + } + ns++; } - } - } + } else { + free(candidate); + return ns; + } + } + } } - return ns; + } + free(candidate); + return ns; } - // error is adjacent letter were swapped -int SuggestMgr::swapchar(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - char * p; - char tmpc; - int wl=strlen(word); - // try swapping adjacent chars one by one - strcpy(candidate, word); - for (p = candidate; p[1] != 0; p++) { - tmpc = *p; - *p = p[1]; - p[1] = tmpc; - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - p[1] = *p; - *p = tmpc; - } - // try double swaps for short words - // ahev -> have, owudl -> would - if (wl == 4 || wl == 5) { - candidate[0] = word[1]; - candidate[1] = word[0]; - candidate[2] = word[2]; - candidate[wl - 2] = word[wl - 1]; - candidate[wl - 1] = word[wl - 2]; - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - if (wl == 5) { - candidate[0] = word[0]; - candidate[1] = word[2]; - candidate[2] = word[1]; - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - } - return ns; +int SuggestMgr::swapchar(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + if (candidate.size() < 2) + return ns; + + // try swapping adjacent chars one by one + for (size_t i = 0; i < candidate.size() - 1; ++i) { + std::swap(candidate[i], candidate[i+1]); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + std::swap(candidate[i], candidate[i+1]); + } + + // try double swaps for short words + // ahev -> have, owudl -> would + if (candidate.size() == 4 || candidate.size() == 5) { + candidate[0] = word[1]; + candidate[1] = word[0]; + candidate[2] = word[2]; + candidate[candidate.size() - 2] = word[candidate.size() - 1]; + candidate[candidate.size() - 1] = word[candidate.size() - 2]; + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + if (candidate.size() == 5) { + candidate[0] = word[0]; + candidate[1] = word[2]; + candidate[2] = word[1]; + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + } + + return ns; } // error is adjacent letter were swapped -int SuggestMgr::swapchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; - w_char * p; - w_char tmpc; - int len = 0; - // try swapping adjacent chars one by one - memcpy (candidate_utf, word, wl * sizeof(w_char)); - for (p = candidate_utf; p < (candidate_utf + wl - 1); p++) { - tmpc = *p; - *p = p[1]; - p[1] = tmpc; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - if (len == 0) len = strlen(candidate); - ns = testsug(wlst, candidate, len, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - p[1] = *p; - *p = tmpc; - } - // try double swaps for short words - // ahev -> have, owudl -> would, suodn -> sound - if (wl == 4 || wl == 5) { - candidate_utf[0] = word[1]; - candidate_utf[1] = word[0]; - candidate_utf[2] = word[2]; - candidate_utf[wl - 2] = word[wl - 1]; - candidate_utf[wl - 1] = word[wl - 2]; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, len, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - if (wl == 5) { - candidate_utf[0] = word[0]; - candidate_utf[1] = word[2]; - candidate_utf[2] = word[1]; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, len, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - } - return ns; +int SuggestMgr::swapchar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + if (candidate_utf.size() < 2) + return ns; + + std::string candidate; + // try swapping adjacent chars one by one + for (size_t i = 0; i < candidate_utf.size() - 1; ++i) { + std::swap(candidate_utf[i], candidate_utf[i+1]); + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + std::swap(candidate_utf[i], candidate_utf[i+1]); + } + + // try double swaps for short words + // ahev -> have, owudl -> would, suodn -> sound + if (candidate_utf.size() == 4 || candidate_utf.size() == 5) { + candidate_utf[0] = word[1]; + candidate_utf[1] = word[0]; + candidate_utf[2] = word[2]; + candidate_utf[candidate_utf.size() - 2] = word[candidate_utf.size() - 1]; + candidate_utf[candidate_utf.size() - 1] = word[candidate_utf.size() - 2]; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + if (candidate_utf.size() == 5) { + candidate_utf[0] = word[0]; + candidate_utf[1] = word[2]; + candidate_utf[2] = word[1]; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + } + return ns; } // error is not adjacent letter were swapped -int SuggestMgr::longswapchar(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - char * p; - char * q; - char tmpc; - int wl=strlen(word); - // try swapping not adjacent chars one by one - strcpy(candidate, word); - for (p = candidate; *p != 0; p++) { - for (q = candidate; *q != 0; q++) { - if (abs((int)(p-q)) > 1) { - tmpc = *p; - *p = *q; - *q = tmpc; - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - *q = *p; - *p = tmpc; - } - } - } - return ns; +int SuggestMgr::longswapchar(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + // try swapping not adjacent chars one by one + for (std::string::iterator p = candidate.begin(); p < candidate.end(); ++p) { + for (std::string::iterator q = candidate.begin(); q < candidate.end(); ++q) { + if (abs(std::distance(q, p)) > 1) { + std::swap(*p, *q); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + std::swap(*p, *q); + } + } + } + return ns; } - // error is adjacent letter were swapped -int SuggestMgr::longswapchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; - w_char * p; - w_char * q; - w_char tmpc; - // try swapping not adjacent chars - memcpy (candidate_utf, word, wl * sizeof(w_char)); - for (p = candidate_utf; p < (candidate_utf + wl); p++) { - for (q = candidate_utf; q < (candidate_utf + wl); q++) { - if (abs((int)(p-q)) > 1) { - tmpc = *p; - *p = *q; - *q = tmpc; - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - *q = *p; - *p = tmpc; - } - } - } - return ns; +int SuggestMgr::longswapchar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + // try swapping not adjacent chars + for (std::vector::iterator p = candidate_utf.begin(); p < candidate_utf.end(); ++p) { + for (std::vector::iterator q = candidate_utf.begin(); q < candidate_utf.end(); ++q) { + if (abs(std::distance(q, p)) > 1) { + std::swap(*p, *q); + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + std::swap(*p, *q); + } + } + } + return ns; } // error is a letter was moved -int SuggestMgr::movechar(char ** wlst, const char * word, int ns, int cpdsuggest) -{ - char candidate[MAXSWUTF8L]; - char * p; - char * q; - char tmpc; - - int wl=strlen(word); - // try moving a char - strcpy(candidate, word); - for (p = candidate; *p != 0; p++) { - for (q = p + 1; (*q != 0) && ((q - p) < 10); q++) { - tmpc = *(q-1); - *(q-1) = *q; - *q = tmpc; - if ((q-p) < 2) continue; // omit swap char - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - strcpy(candidate, word); - } - for (p = candidate + wl - 1; p > candidate; p--) { - for (q = p - 1; (q >= candidate) && ((p - q) < 10); q--) { - tmpc = *(q+1); - *(q+1) = *q; - *q = tmpc; - if ((p-q) < 2) continue; // omit swap char - ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - strcpy(candidate, word); - } - return ns; +int SuggestMgr::movechar(char** wlst, + const char* word, + int ns, + int cpdsuggest) { + std::string candidate(word); + if (candidate.size() < 2) + return ns; + + // try moving a char + for (std::string::iterator p = candidate.begin(); p < candidate.end(); ++p) { + for (std::string::iterator q = p + 1; q < candidate.end() && std::distance(p, q) < 10; ++q) { + std::swap(*q, *(q - 1)); + if (std::distance(p, q) < 2) + continue; // omit swap char + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + std::copy(word, word + candidate.size(), candidate.begin()); + } + + for (std::string::reverse_iterator p = candidate.rbegin(), pEnd = candidate.rend() - 1; p != pEnd; ++p) { + for (std::string::reverse_iterator q = p + 1, qEnd = candidate.rend(); q != qEnd && std::distance(p, q) < 10; ++q) { + std::swap(*q, *(q - 1)); + if (std::distance(p, q) < 2) + continue; // omit swap char + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); + if (ns == -1) + return -1; + } + std::copy(word, word + candidate.size(), candidate.begin()); + } + + return ns; } // error is a letter was moved -int SuggestMgr::movechar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest) -{ - w_char candidate_utf[MAXSWL]; - char candidate[MAXSWUTF8L]; - w_char * p; - w_char * q; - w_char tmpc; - // try moving a char - memcpy (candidate_utf, word, wl * sizeof(w_char)); - for (p = candidate_utf; p < (candidate_utf + wl); p++) { - for (q = p + 1; (q < (candidate_utf + wl)) && ((q - p) < 10); q++) { - tmpc = *(q-1); - *(q-1) = *q; - *q = tmpc; - if ((q-p) < 2) continue; // omit swap char - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - memcpy (candidate_utf, word, wl * sizeof(w_char)); - } - for (p = candidate_utf + wl - 1; p > candidate_utf; p--) { - for (q = p - 1; (q >= candidate_utf) && ((p - q) < 10); q--) { - tmpc = *(q+1); - *(q+1) = *q; - *q = tmpc; - if ((p-q) < 2) continue; // omit swap char - u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl); - ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL); - if (ns == -1) return -1; - } - memcpy (candidate_utf, word, wl * sizeof(w_char)); - } - return ns; +int SuggestMgr::movechar_utf(char** wlst, + const w_char* word, + int wl, + int ns, + int cpdsuggest) { + std::vector candidate_utf(word, word + wl); + if (candidate_utf.size() < 2) + return ns; + + // try moving a char + for (std::vector::iterator p = candidate_utf.begin(); p < candidate_utf.end(); ++p) { + for (std::vector::iterator q = p + 1; q < candidate_utf.end() && std::distance(p, q) < 10; ++q) { + std::swap(*q, *(q - 1)); + if (std::distance(p, q) < 2) + continue; // omit swap char + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + } + std::copy(word, word + candidate_utf.size(), candidate_utf.begin()); + } + + for (std::vector::iterator p = candidate_utf.begin() + candidate_utf.size() - 1; p > candidate_utf.begin(); --p) { + for (std::vector::iterator q = p - 1; q >= candidate_utf.begin() && std::distance(q, p) < 10; --q) { + std::swap(*q, *(q + 1)); + if (std::distance(q, p) < 2) + continue; // omit swap char + std::string candidate; + u16_u8(candidate, candidate_utf); + ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, + NULL); + if (ns == -1) + return -1; + } + std::copy(word, word + candidate_utf.size(), candidate_utf.begin()); + } + + return ns; } // generate a set of suggestions for very poorly spelled words -int SuggestMgr::ngsuggest(char** wlst, char * w, int ns, HashMgr** pHMgr, int md) -{ - +int SuggestMgr::ngsuggest(char** wlst, + const char* w, + int ns, + HashMgr** pHMgr, + int md) { int i, j; int lval; - int sc, scphon; + int sc; int lp, lpphon; int nonbmp = 0; // exhaustively search through all root words // keeping track of the MAX_ROOTS most similar root words - struct hentry * roots[MAX_ROOTS]; - char * rootsphon[MAX_ROOTS]; + struct hentry* roots[MAX_ROOTS]; + char* rootsphon[MAX_ROOTS]; int scores[MAX_ROOTS]; int scoresphon[MAX_ROOTS]; for (i = 0; i < MAX_ROOTS; i++) { @@ -1043,28 +1173,29 @@ int SuggestMgr::ngsuggest(char** wlst, char * w, int ns, HashMgr** pHMgr, int md } lp = MAX_ROOTS - 1; lpphon = MAX_ROOTS - 1; - scphon = -20000; int low = NGRAM_LOWERING; - - char w2[MAXWORDUTF8LEN]; - char f[MAXSWUTF8L]; - char * word = w; + + std::string w2; + const char* word = w; // word reversing wrapper for complex prefixes if (complexprefixes) { - strcpy(w2, w); - if (utf8) reverseword_utf(w2); else reverseword(w2); - word = w2; + w2.assign(w); + if (utf8) + reverseword_utf(w2); + else + reverseword(w2); + word = w2.c_str(); } - char mw[MAXSWUTF8L]; - w_char u8[MAXSWL]; + std::vector u8; int nc = strlen(word); - int n = (utf8) ? u8_u16(u8, MAXSWL, word) : nc; - - // set character based ngram suggestion for words with non-BMP Unicode characters + int n = (utf8) ? u8_u16(u8, word) : nc; + + // set character based ngram suggestion for words with non-BMP Unicode + // characters if (n == -1) { - utf8 = 0; // XXX not state-free + utf8 = 0; // XXX not state-free n = nc; nonbmp = 1; low = 0; @@ -1072,20 +1203,21 @@ int SuggestMgr::ngsuggest(char** wlst, char * w, int ns, HashMgr** pHMgr, int md struct hentry* hp = NULL; int col = -1; - phonetable * ph = (pAMgr) ? pAMgr->get_phonetable() : NULL; - char target[MAXSWUTF8L]; - char candidate[MAXSWUTF8L]; + phonetable* ph = (pAMgr) ? pAMgr->get_phonetable() : NULL; + std::string target; + std::string candidate; if (ph) { if (utf8) { - w_char _w[MAXSWL]; - int _wl = u8_u16(_w, MAXSWL, word); - mkallcap_utf(_w, _wl, langnum); - u16_u8(candidate, MAXSWUTF8L, _w, _wl); + std::vector _w; + u8_u16(_w, word); + mkallcap_utf(_w, langnum); + u16_u8(candidate, _w); } else { - strcpy(candidate, word); - if (!nonbmp) mkallcap(candidate, csconv); + candidate.assign(word); + if (!nonbmp) + mkallcap(candidate, csconv); } - phonet(candidate, target, nc, *ph); // XXX phonet() is 8-bit (nc, not n) + target = phonet(candidate, *ph); // XXX phonet() is 8-bit (nc, not n) } FLAG forbiddenword = pAMgr ? pAMgr->get_forbiddenword() : FLAG_NULL; @@ -1093,152 +1225,168 @@ int SuggestMgr::ngsuggest(char** wlst, char * w, int ns, HashMgr** pHMgr, int md FLAG nongramsuggest = pAMgr ? pAMgr->get_nongramsuggest() : FLAG_NULL; FLAG onlyincompound = pAMgr ? pAMgr->get_onlyincompound() : FLAG_NULL; - for (i = 0; i < md; i++) { - while (0 != (hp = (pHMgr[i])->walk_hashtable(col, hp))) { - if ((hp->astr) && (pAMgr) && - (TESTAFF(hp->astr, forbiddenword, hp->alen) || - TESTAFF(hp->astr, ONLYUPCASEFLAG, hp->alen) || - TESTAFF(hp->astr, nosuggest, hp->alen) || - TESTAFF(hp->astr, nongramsuggest, hp->alen) || - TESTAFF(hp->astr, onlyincompound, hp->alen))) continue; - - sc = ngram(3, word, HENTRY_WORD(hp), NGRAM_LONGER_WORSE + low) + - leftcommonsubstring(word, HENTRY_WORD(hp)); - - // check special pronounciation - if ((hp->var & H_OPT_PHON) && copy_field(f, HENTRY_DATA(hp), MORPH_PHON)) { - int sc2 = ngram(3, word, f, NGRAM_LONGER_WORSE + low) + - + leftcommonsubstring(word, f); - if (sc2 > sc) sc = sc2; - } - - scphon = -20000; - if (ph && (sc > 2) && (abs(n - (int) hp->clen) <= 3)) { - char target2[MAXSWUTF8L]; - if (utf8) { - w_char _w[MAXSWL]; - int _wl = u8_u16(_w, MAXSWL, HENTRY_WORD(hp)); - mkallcap_utf(_w, _wl, langnum); - u16_u8(candidate, MAXSWUTF8L, _w, _wl); - } else { - strcpy(candidate, HENTRY_WORD(hp)); - mkallcap(candidate, csconv); + for (i = 0; i < md; i++) { + while (0 != (hp = (pHMgr[i])->walk_hashtable(col, hp))) { + if ((hp->astr) && (pAMgr) && + (TESTAFF(hp->astr, forbiddenword, hp->alen) || + TESTAFF(hp->astr, ONLYUPCASEFLAG, hp->alen) || + TESTAFF(hp->astr, nosuggest, hp->alen) || + TESTAFF(hp->astr, nongramsuggest, hp->alen) || + TESTAFF(hp->astr, onlyincompound, hp->alen))) + continue; + + sc = ngram(3, word, HENTRY_WORD(hp), NGRAM_LONGER_WORSE + low) + + leftcommonsubstring(word, HENTRY_WORD(hp)); + + // check special pronounciation + std::string f; + if ((hp->var & H_OPT_PHON) && + copy_field(f, HENTRY_DATA(hp), MORPH_PHON)) { + int sc2 = ngram(3, word, f, NGRAM_LONGER_WORSE + low) + + +leftcommonsubstring(word, f.c_str()); + if (sc2 > sc) + sc = sc2; } - phonet(candidate, target2, -1, *ph); - scphon = 2 * ngram(3, target, target2, NGRAM_LONGER_WORSE); - } - - if (sc > scores[lp]) { - scores[lp] = sc; - roots[lp] = hp; - lval = sc; - for (j=0; j < MAX_ROOTS; j++) - if (scores[j] < lval) { - lp = j; - lval = scores[j]; + + int scphon = -20000; + if (ph && (sc > 2) && (abs(n - (int)hp->clen) <= 3)) { + if (utf8) { + std::vector _w; + u8_u16(_w, HENTRY_WORD(hp)); + mkallcap_utf(_w, langnum); + u16_u8(candidate, _w); + } else { + candidate.assign(HENTRY_WORD(hp)); + mkallcap(candidate, csconv); } - } + std::string target2 = phonet(candidate, *ph); + scphon = 2 * ngram(3, target, target2, NGRAM_LONGER_WORSE); + } + if (sc > scores[lp]) { + scores[lp] = sc; + roots[lp] = hp; + lval = sc; + for (j = 0; j < MAX_ROOTS; j++) + if (scores[j] < lval) { + lp = j; + lval = scores[j]; + } + } - if (scphon > scoresphon[lpphon]) { - scoresphon[lpphon] = scphon; - rootsphon[lpphon] = HENTRY_WORD(hp); - lval = scphon; - for (j=0; j < MAX_ROOTS; j++) - if (scoresphon[j] < lval) { - lpphon = j; - lval = scoresphon[j]; - } + if (scphon > scoresphon[lpphon]) { + scoresphon[lpphon] = scphon; + rootsphon[lpphon] = HENTRY_WORD(hp); + lval = scphon; + for (j = 0; j < MAX_ROOTS; j++) + if (scoresphon[j] < lval) { + lpphon = j; + lval = scoresphon[j]; + } + } } - }} + } // find minimum threshold for a passable suggestion // mangle original word three differnt ways // and score them to generate a minimum acceptable score int thresh = 0; for (int sp = 1; sp < 4; sp++) { - if (utf8) { - for (int k=sp; k < n; k+=4) *((unsigned short *) u8 + k) = '*'; - u16_u8(mw, MAXSWUTF8L, u8, n); - thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); - } else { - strcpy(mw, word); - for (int k=sp; k < n; k+=4) *(mw + k) = '*'; - thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); - } + if (utf8) { + for (int k = sp; k < n; k += 4) { + u8[k].l = '*'; + u8[k].h = 0; + } + std::string mw; + u16_u8(mw, u8); + thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); + } else { + std::string mw(word); + for (int k = sp; k < n; k += 4) + mw[k] = '*'; + thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); + } } thresh = thresh / 3; thresh--; - // now expand affixes on each of these root words and + // now expand affixes on each of these root words and // and use length adjusted ngram scores to select // possible suggestions - char * guess[MAX_GUESS]; - char * guessorig[MAX_GUESS]; + char* guess[MAX_GUESS]; + char* guessorig[MAX_GUESS]; int gscore[MAX_GUESS]; - for(i=0;iexpand_rootword(glst, MAX_WORDS, HENTRY_WORD(rp), rp->blen, - rp->astr, rp->alen, word, nc, - ((rp->var & H_OPT_PHON) ? copy_field(f, HENTRY_DATA(rp), MORPH_PHON) : NULL)); - - for (int k = 0; k < nw ; k++) { - sc = ngram(n, word, glst[k].word, NGRAM_ANY_MISMATCH + low) + - leftcommonsubstring(word, glst[k].word); - - if (sc > thresh) { - if (sc > gscore[lp]) { - if (guess[lp]) { - free (guess[lp]); - if (guessorig[lp]) { - free(guessorig[lp]); - guessorig[lp] = NULL; - } - } - gscore[lp] = sc; - guess[lp] = glst[k].word; - guessorig[lp] = glst[k].orig; - lval = sc; - for (j=0; j < MAX_GUESS; j++) - if (gscore[j] < lval) { - lp = j; - lval = gscore[j]; - } - } else { - free(glst[k].word); - if (glst[k].orig) free(glst[k].orig); + if (roots[i]) { + struct hentry* rp = roots[i]; + + std::string f; + const char *field = NULL; + if ((rp->var & H_OPT_PHON) && copy_field(f, HENTRY_DATA(rp), MORPH_PHON)) + field = f.c_str(); + int nw = pAMgr->expand_rootword( + glst, MAX_WORDS, HENTRY_WORD(rp), rp->blen, rp->astr, rp->alen, word, + nc, field); + + for (int k = 0; k < nw; k++) { + sc = ngram(n, word, glst[k].word, NGRAM_ANY_MISMATCH + low) + + leftcommonsubstring(word, glst[k].word); + + if (sc > thresh) { + if (sc > gscore[lp]) { + if (guess[lp]) { + free(guess[lp]); + if (guessorig[lp]) { + free(guessorig[lp]); + guessorig[lp] = NULL; + } + } + gscore[lp] = sc; + guess[lp] = glst[k].word; + guessorig[lp] = glst[k].orig; + lval = sc; + for (j = 0; j < MAX_GUESS; j++) + if (gscore[j] < lval) { + lp = j; + lval = gscore[j]; } - } else { - free(glst[k].word); - if (glst[k].orig) free(glst[k].orig); - } + } else { + free(glst[k].word); + if (glst[k].orig) + free(glst[k].orig); + } + } else { + free(glst[k].word); + if (glst[k].orig) + free(glst[k].orig); } } + } } free(glst); // now we are done generating guesses // sort in order of decreasing score - - + bubblesort(&guess[0], &guessorig[0], &gscore[0], MAX_GUESS); - if (ph) bubblesort(&rootsphon[0], NULL, &scoresphon[0], MAX_ROOTS); + if (ph) + bubblesort(&rootsphon[0], NULL, &scoresphon[0], MAX_ROOTS); // weight suggestions with a similarity index, based on // the longest common subsequent algorithm and resort @@ -1247,511 +1395,497 @@ int SuggestMgr::ngsuggest(char** wlst, char * w, int ns, HashMgr** pHMgr, int md int re = 0; double fact = 1.0; if (pAMgr) { - int maxd = pAMgr->get_maxdiff(); - if (maxd >= 0) fact = (10.0 - maxd)/5.0; + int maxd = pAMgr->get_maxdiff(); + if (maxd >= 0) + fact = (10.0 - maxd) / 5.0; } - for (i=0; i < MAX_GUESS; i++) { - if (guess[i]) { - // lowering guess[i] - char gl[MAXSWUTF8L]; - int len; - if (utf8) { - w_char _w[MAXSWL]; - len = u8_u16(_w, MAXSWL, guess[i]); - mkallsmall_utf(_w, len, langnum); - u16_u8(gl, MAXSWUTF8L, _w, len); - } else { - strcpy(gl, guess[i]); - if (!nonbmp) mkallsmall(gl, csconv); - len = strlen(guess[i]); - } + for (i = 0; i < MAX_GUESS; i++) { + if (guess[i]) { + // lowering guess[i] + std::string gl; + int len; + if (utf8) { + std::vector _w; + len = u8_u16(_w, guess[i]); + mkallsmall_utf(_w, langnum); + u16_u8(gl, _w); + } else { + gl.assign(guess[i]); + if (!nonbmp) + mkallsmall(gl, csconv); + len = strlen(guess[i]); + } - int _lcs = lcslen(word, gl); + int _lcs = lcslen(word, gl.c_str()); - // same characters with different casing - if ((n == len) && (n == _lcs)) { - gscore[i] += 2000; - break; - } - // using 2-gram instead of 3, and other weightening + // same characters with different casing + if ((n == len) && (n == _lcs)) { + gscore[i] += 2000; + break; + } + // using 2-gram instead of 3, and other weightening + + re = ngram(2, word, gl, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED) + + ngram(2, gl, word, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED); - re = ngram(2, word, gl, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED) + - ngram(2, gl, word, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED); - - gscore[i] = + gscore[i] = // length of longest common subsequent minus length difference - 2 * _lcs - abs((int) (n - len)) + + 2 * _lcs - abs((int)(n - len)) + // weight length of the left common substring - leftcommonsubstring(word, gl) + + leftcommonsubstring(word, gl.c_str()) + // weight equal character positions - (!nonbmp && commoncharacterpositions(word, gl, &is_swap) ? 1: 0) + + (!nonbmp && commoncharacterpositions(word, gl.c_str(), &is_swap) + ? 1 + : 0) + // swap character (not neighboring) ((is_swap) ? 10 : 0) + // ngram ngram(4, word, gl, NGRAM_ANY_MISMATCH + low) + // weighted ngrams - re + - // different limit for dictionaries with PHONE rules - (ph ? (re < len * fact ? -1000 : 0) : (re < (n + len)*fact? -1000 : 0)); - } + re + + // different limit for dictionaries with PHONE rules + (ph ? (re < len * fact ? -1000 : 0) + : (re < (n + len) * fact ? -1000 : 0)); + } } bubblesort(&guess[0], &guessorig[0], &gscore[0], MAX_GUESS); -// phonetic version - if (ph) for (i=0; i < MAX_ROOTS; i++) { + // phonetic version + if (ph) + for (i = 0; i < MAX_ROOTS; i++) { if (rootsphon[i]) { // lowering rootphon[i] - char gl[MAXSWUTF8L]; + std::string gl; int len; if (utf8) { - w_char _w[MAXSWL]; - len = u8_u16(_w, MAXSWL, rootsphon[i]); - mkallsmall_utf(_w, len, langnum); - u16_u8(gl, MAXSWUTF8L, _w, len); + std::vector _w; + len = u8_u16(_w, rootsphon[i]); + mkallsmall_utf(_w, langnum); + u16_u8(gl, _w); } else { - strcpy(gl, rootsphon[i]); - if (!nonbmp) mkallsmall(gl, csconv); + gl.assign(rootsphon[i]); + if (!nonbmp) + mkallsmall(gl, csconv); len = strlen(rootsphon[i]); } // heuristic weigthing of ngram scores - scoresphon[i] += 2 * lcslen(word, gl) - abs((int) (n - len)) + - // weight length of the left common substring - leftcommonsubstring(word, gl); + scoresphon[i] += 2 * lcslen(word, gl) - abs((int)(n - len)) + + // weight length of the left common substring + leftcommonsubstring(word, gl.c_str()); } - } + } - if (ph) bubblesort(&rootsphon[0], NULL, &scoresphon[0], MAX_ROOTS); + if (ph) + bubblesort(&rootsphon[0], NULL, &scoresphon[0], MAX_ROOTS); // copy over int oldns = ns; int same = 0; - for (i=0; i < MAX_GUESS; i++) { + for (i = 0; i < MAX_GUESS; i++) { if (guess[i]) { - if ((ns < oldns + maxngramsugs) && (ns < maxSug) && (!same || (gscore[i] > 1000))) { + if ((ns < oldns + maxngramsugs) && (ns < maxSug) && + (!same || (gscore[i] > 1000))) { int unique = 1; // leave only excellent suggestions, if exists - if (gscore[i] > 1000) same = 1; else if (gscore[i] < -100) { - same = 1; - // keep the best ngram suggestions, unless in ONLYMAXDIFF mode - if (ns > oldns || (pAMgr && pAMgr->get_onlymaxdiff())) { - free(guess[i]); - if (guessorig[i]) free(guessorig[i]); - continue; - } + if (gscore[i] > 1000) + same = 1; + else if (gscore[i] < -100) { + same = 1; + // keep the best ngram suggestions, unless in ONLYMAXDIFF mode + if (ns > oldns || (pAMgr && pAMgr->get_onlymaxdiff())) { + free(guess[i]); + if (guessorig[i]) + free(guessorig[i]); + continue; + } } for (j = 0; j < ns; j++) { - // don't suggest previous suggestions or a previous suggestion with prefixes or affixes + // don't suggest previous suggestions or a previous suggestion with + // prefixes or affixes if ((!guessorig[i] && strstr(guess[i], wlst[j])) || - (guessorig[i] && strstr(guessorig[i], wlst[j])) || - // check forbidden words - !checkword(guess[i], strlen(guess[i]), 0, NULL, NULL)) { + (guessorig[i] && strstr(guessorig[i], wlst[j])) || + // check forbidden words + !checkword(guess[i], strlen(guess[i]), 0, NULL, NULL)) { unique = 0; break; } } if (unique) { - wlst[ns++] = guess[i]; - if (guessorig[i]) { - free(guess[i]); - wlst[ns-1] = guessorig[i]; - } - } else { - free(guess[i]); - if (guessorig[i]) free(guessorig[i]); - } + wlst[ns++] = guess[i]; + if (guessorig[i]) { + free(guess[i]); + wlst[ns - 1] = guessorig[i]; + } + } else { + free(guess[i]); + if (guessorig[i]) + free(guessorig[i]); + } } else { free(guess[i]); - if (guessorig[i]) free(guessorig[i]); + if (guessorig[i]) + free(guessorig[i]); } } } oldns = ns; - if (ph) for (i=0; i < MAX_ROOTS; i++) { - if (rootsphon[i]) { - if ((ns < oldns + MAXPHONSUGS) && (ns < maxSug)) { - int unique = 1; - for (j = 0; j < ns; j++) { - // don't suggest previous suggestions or a previous suggestion with prefixes or affixes - if (strstr(rootsphon[i], wlst[j]) || - // check forbidden words - !checkword(rootsphon[i], strlen(rootsphon[i]), 0, NULL, NULL)) { - unique = 0; - break; + if (ph) + for (i = 0; i < MAX_ROOTS; i++) { + if (rootsphon[i]) { + if ((ns < oldns + MAXPHONSUGS) && (ns < maxSug)) { + int unique = 1; + for (j = 0; j < ns; j++) { + // don't suggest previous suggestions or a previous suggestion with + // prefixes or affixes + if (strstr(rootsphon[i], wlst[j]) || + // check forbidden words + !checkword(rootsphon[i], strlen(rootsphon[i]), 0, NULL, NULL)) { + unique = 0; + break; + } } - } - if (unique) { + if (unique) { wlst[ns++] = mystrdup(rootsphon[i]); - if (!wlst[ns - 1]) return ns - 1; + if (!wlst[ns - 1]) + return ns - 1; + } } } } - } - if (nonbmp) utf8 = 1; + if (nonbmp) + utf8 = 1; return ns; } - // see if a candidate suggestion is spelled correctly // needs to check both root words and words with affixes // obsolote MySpell-HU modifications: // return value 2 and 3 marks compounding with hyphen (-) // `3' marks roots without suffix -int SuggestMgr::checkword(const char * word, int len, int cpdsuggest, int * timer, clock_t * timelimit) -{ - struct hentry * rv=NULL; - struct hentry * rv2=NULL; +int SuggestMgr::checkword(const char* word, + int len, + int cpdsuggest, + int* timer, + clock_t* timelimit) { + struct hentry* rv = NULL; + struct hentry* rv2 = NULL; int nosuffix = 0; // check time limit if (timer) { (*timer)--; if (!(*timer) && timelimit) { - if ((clock() - *timelimit) > TIMELIMIT) return 0; + if ((clock() - *timelimit) > TIMELIMIT) + return 0; *timer = MAXPLUSTIMER; } } - - if (pAMgr) { - if (cpdsuggest==1) { + + if (pAMgr) { + if (cpdsuggest == 1) { if (pAMgr->get_compound()) { - rv = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, 0, 1, 0); //EXT - if (rv && (!(rv2 = pAMgr->lookup(word)) || !rv2->astr || - !(TESTAFF(rv2->astr,pAMgr->get_forbiddenword(),rv2->alen) || - TESTAFF(rv2->astr,pAMgr->get_nosuggest(),rv2->alen)))) return 3; // XXX obsolote categorisation + only ICONV needs affix flag check? - } - return 0; + struct hentry* rwords[100]; // buffer for COMPOUND pattern checking + rv = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 1, + 0); // EXT + if (rv && + (!(rv2 = pAMgr->lookup(word)) || !rv2->astr || + !(TESTAFF(rv2->astr, pAMgr->get_forbiddenword(), rv2->alen) || + TESTAFF(rv2->astr, pAMgr->get_nosuggest(), rv2->alen)))) + return 3; // XXX obsolote categorisation + only ICONV needs affix + // flag check? + } + return 0; } rv = pAMgr->lookup(word); if (rv) { - if ((rv->astr) && (TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen) - || TESTAFF(rv->astr,pAMgr->get_nosuggest(),rv->alen))) return 0; - while (rv) { - if (rv->astr && (TESTAFF(rv->astr,pAMgr->get_needaffix(),rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) { - rv = rv->next_homonym; - } else break; - } - } else rv = pAMgr->prefix_check(word, len, 0); // only prefix, and prefix + suffix XXX + if ((rv->astr) && + (TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen) || + TESTAFF(rv->astr, pAMgr->get_nosuggest(), rv->alen))) + return 0; + while (rv) { + if (rv->astr && + (TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) { + rv = rv->next_homonym; + } else + break; + } + } else + rv = pAMgr->prefix_check(word, len, + 0); // only prefix, and prefix + suffix XXX if (rv) { - nosuffix=1; + nosuffix = 1; } else { - rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, NULL); // only suffix + rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, + NULL); // only suffix } if (!rv && pAMgr->have_contclass()) { - rv = pAMgr->suffix_check_twosfx(word, len, 0, NULL, FLAG_NULL); - if (!rv) rv = pAMgr->prefix_check_twosfx(word, len, 1, FLAG_NULL); + rv = pAMgr->suffix_check_twosfx(word, len, 0, NULL, FLAG_NULL); + if (!rv) + rv = pAMgr->prefix_check_twosfx(word, len, 1, FLAG_NULL); } // check forbidden words - if ((rv) && (rv->astr) && (TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen) || - TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || - TESTAFF(rv->astr,pAMgr->get_nosuggest(),rv->alen) || - TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) return 0; - - if (rv) { // XXX obsolote - if ((pAMgr->get_compoundflag()) && - TESTAFF(rv->astr, pAMgr->get_compoundflag(), rv->alen)) return 2 + nosuffix; + if ((rv) && (rv->astr) && + (TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen) || + TESTAFF(rv->astr, ONLYUPCASEFLAG, rv->alen) || + TESTAFF(rv->astr, pAMgr->get_nosuggest(), rv->alen) || + TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) + return 0; + + if (rv) { // XXX obsolote + if ((pAMgr->get_compoundflag()) && + TESTAFF(rv->astr, pAMgr->get_compoundflag(), rv->alen)) + return 2 + nosuffix; return 1; } } return 0; } -int SuggestMgr::check_forbidden(const char * word, int len) -{ - struct hentry * rv = NULL; +int SuggestMgr::check_forbidden(const char* word, int len) { + struct hentry* rv = NULL; - if (pAMgr) { + if (pAMgr) { rv = pAMgr->lookup(word); - if (rv && rv->astr && (TESTAFF(rv->astr,pAMgr->get_needaffix(),rv->alen) || - TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) rv = NULL; - if (!(pAMgr->prefix_check(word,len,1))) - rv = pAMgr->suffix_check(word,len, 0, NULL, NULL, 0, NULL); // prefix+suffix, suffix + if (rv && rv->astr && + (TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || + TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) + rv = NULL; + if (!(pAMgr->prefix_check(word, len, 1))) + rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, + NULL); // prefix+suffix, suffix // check forbidden words - if ((rv) && (rv->astr) && TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen)) return 1; - } - return 0; -} - -#ifdef HUNSPELL_EXPERIMENTAL -// suggest possible stems -int SuggestMgr::suggest_pos_stems(char*** slst, const char * w, int nsug) -{ - char ** wlst; - - struct hentry * rv = NULL; - - char w2[MAXSWUTF8L]; - const char * word = w; - - // word reversing wrapper for complex prefixes - if (complexprefixes) { - strcpy(w2, w); - if (utf8) reverseword_utf(w2); else reverseword(w2); - word = w2; + if ((rv) && (rv->astr) && + TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen)) + return 1; } - - int wl = strlen(word); - - - if (*slst) { - wlst = *slst; - } else { - wlst = (char **) calloc(maxSug, sizeof(char *)); - if (wlst == NULL) return -1; - } - - rv = pAMgr->suffix_check(word, wl, 0, NULL, wlst, maxSug, &nsug); - - // delete dash from end of word - if (nsug > 0) { - for (int j=0; j < nsug; j++) { - if (wlst[j][strlen(wlst[j]) - 1] == '-') wlst[j][strlen(wlst[j]) - 1] = '\0'; - } - } - - *slst = wlst; - return nsug; + return 0; } -#endif // END OF HUNSPELL_EXPERIMENTAL CODE - -char * SuggestMgr::suggest_morph(const char * w) -{ - char result[MAXLNLEN]; - char * r = (char *) result; - char * st; +char* SuggestMgr::suggest_morph(const char* w) { + char result[MAXLNLEN]; + char* r = (char*)result; + char* st; - struct hentry * rv = NULL; + struct hentry* rv = NULL; - *result = '\0'; + *result = '\0'; - if (! pAMgr) return NULL; + if (!pAMgr) + return NULL; - char w2[MAXSWUTF8L]; - const char * word = w; + std::string w2; + const char* word = w; // word reversing wrapper for complex prefixes if (complexprefixes) { - strcpy(w2, w); - if (utf8) reverseword_utf(w2); else reverseword(w2); - word = w2; + w2.assign(w); + if (utf8) + reverseword_utf(w2); + else + reverseword(w2); + word = w2.c_str(); } - rv = pAMgr->lookup(word); - - while (rv) { - if ((!rv->astr) || !(TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen) || - TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || - TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) { - if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, word, MAXLNLEN); - } - if (HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); - } - mystrcat(result, "\n", MAXLNLEN); - } - rv = rv->next_homonym; - } - - st = pAMgr->affix_check_morph(word,strlen(word)); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + rv = pAMgr->lookup(word); + + while (rv) { + if ((!rv->astr) || + !(TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen) || + TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || + TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) { + if (!HENTRY_FIND(rv, MORPH_STEM)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, MORPH_STEM, MAXLNLEN); + mystrcat(result, word, MAXLNLEN); + } + if (HENTRY_DATA(rv)) { + mystrcat(result, " ", MAXLNLEN); + mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + } + mystrcat(result, "\n", MAXLNLEN); } + rv = rv->next_homonym; + } - if (pAMgr->get_compound() && (*result == '\0')) - pAMgr->compound_check_morph(word, strlen(word), - 0, 0, 100, 0,NULL, 0, &r, NULL); - - return (*result) ? mystrdup(line_uniq(result, MSEP_REC)) : NULL; -} + st = pAMgr->affix_check_morph(word, strlen(word)); + if (st) { + mystrcat(result, st, MAXLNLEN); + free(st); + } -#ifdef HUNSPELL_EXPERIMENTAL -char * SuggestMgr::suggest_morph_for_spelling_error(const char * word) -{ - char * p = NULL; - char ** wlst = (char **) calloc(maxSug, sizeof(char *)); - if (!**wlst) return NULL; - // we will use only the first suggestion - for (int i = 0; i < maxSug - 1; i++) wlst[i] = ""; - int ns = suggest(&wlst, word, maxSug - 1, NULL); - if (ns == maxSug) { - p = suggest_morph(wlst[maxSug - 1]); - free(wlst[maxSug - 1]); - } - if (wlst) free(wlst); - return p; + if (pAMgr->get_compound() && (*result == '\0')) { + struct hentry* rwords[100]; // buffer for COMPOUND pattern checking + pAMgr->compound_check_morph(word, strlen(word), 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, &r, + NULL); + } + + return (*result) ? mystrdup(line_uniq(result, MSEP_REC)) : NULL; } -#endif // END OF HUNSPELL_EXPERIMENTAL CODE /* affixation */ -char * SuggestMgr::suggest_hentry_gen(hentry * rv, char * pattern) -{ - char result[MAXLNLEN]; - *result = '\0'; - int sfxcount = get_sfxcount(pattern); - - if (get_sfxcount(HENTRY_DATA(rv)) > sfxcount) return NULL; - - if (HENTRY_DATA(rv)) { - char * aff = pAMgr->morphgen(HENTRY_WORD(rv), rv->blen, rv->astr, rv->alen, - HENTRY_DATA(rv), pattern, 0); - if (aff) { +char* SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { + char result[MAXLNLEN]; + *result = '\0'; + int sfxcount = get_sfxcount(pattern); + + if (get_sfxcount(HENTRY_DATA(rv)) > sfxcount) + return NULL; + + if (HENTRY_DATA(rv)) { + char* aff = pAMgr->morphgen(HENTRY_WORD(rv), rv->blen, rv->astr, rv->alen, + HENTRY_DATA(rv), pattern, 0); + if (aff) { + mystrcat(result, aff, MAXLNLEN); + mystrcat(result, "\n", MAXLNLEN); + free(aff); + } + } + + // check all allomorphs + char allomorph[MAXLNLEN]; + char* p = NULL; + if (HENTRY_DATA(rv)) + p = (char*)strstr(HENTRY_DATA2(rv), MORPH_ALLOMORPH); + while (p) { + struct hentry* rv2 = NULL; + p += MORPH_TAG_LEN; + int plen = fieldlen(p); + strncpy(allomorph, p, plen); + allomorph[plen] = '\0'; + rv2 = pAMgr->lookup(allomorph); + while (rv2) { + // if (HENTRY_DATA(rv2) && get_sfxcount(HENTRY_DATA(rv2)) <= + // sfxcount) { + if (HENTRY_DATA(rv2)) { + char* st = (char*)strstr(HENTRY_DATA2(rv2), MORPH_STEM); + if (st && (strncmp(st + MORPH_TAG_LEN, HENTRY_WORD(rv), + fieldlen(st + MORPH_TAG_LEN)) == 0)) { + char* aff = pAMgr->morphgen(HENTRY_WORD(rv2), rv2->blen, rv2->astr, + rv2->alen, HENTRY_DATA(rv2), pattern, 0); + if (aff) { mystrcat(result, aff, MAXLNLEN); mystrcat(result, "\n", MAXLNLEN); free(aff); + } } + } + rv2 = rv2->next_homonym; } + p = strstr(p + plen, MORPH_ALLOMORPH); + } - // check all allomorphs - char allomorph[MAXLNLEN]; - char * p = NULL; - if (HENTRY_DATA(rv)) p = (char *) strstr(HENTRY_DATA2(rv), MORPH_ALLOMORPH); - while (p) { - struct hentry * rv2 = NULL; - p += MORPH_TAG_LEN; - int plen = fieldlen(p); - strncpy(allomorph, p, plen); - allomorph[plen] = '\0'; - rv2 = pAMgr->lookup(allomorph); - while (rv2) { -// if (HENTRY_DATA(rv2) && get_sfxcount(HENTRY_DATA(rv2)) <= sfxcount) { - if (HENTRY_DATA(rv2)) { - char * st = (char *) strstr(HENTRY_DATA2(rv2), MORPH_STEM); - if (st && (strncmp(st + MORPH_TAG_LEN, - HENTRY_WORD(rv), fieldlen(st + MORPH_TAG_LEN)) == 0)) { - char * aff = pAMgr->morphgen(HENTRY_WORD(rv2), rv2->blen, rv2->astr, rv2->alen, - HENTRY_DATA(rv2), pattern, 0); - if (aff) { - mystrcat(result, aff, MAXLNLEN); - mystrcat(result, "\n", MAXLNLEN); - free(aff); - } - } - } - rv2 = rv2->next_homonym; - } - p = strstr(p + plen, MORPH_ALLOMORPH); - } - - return (*result) ? mystrdup(result) : NULL; + return (*result) ? mystrdup(result) : NULL; } -char * SuggestMgr::suggest_gen(char ** desc, int n, char * pattern) { - char result[MAXLNLEN]; - char result2[MAXLNLEN]; - char newpattern[MAXLNLEN]; - *newpattern = '\0'; - if (n == 0) return 0; - *result2 = '\0'; - struct hentry * rv = NULL; - if (!pAMgr) return NULL; - -// search affixed forms with and without derivational suffixes - while(1) { - - for (int k = 0; k < n; k++) { - *result = '\0'; - // add compound word parts (except the last one) - char * s = (char *) desc[k]; - char * part = strstr(s, MORPH_PART); - if (part) { - char * nextpart = strstr(part + 1, MORPH_PART); +char* SuggestMgr::suggest_gen(char** desc, int n, const char* pattern) { + if (n == 0 || !pAMgr) + return NULL; + + std::string result2; + std::string newpattern; + struct hentry* rv = NULL; + + // search affixed forms with and without derivational suffixes + while (1) { + for (int k = 0; k < n; k++) { + std::string result; + + // add compound word parts (except the last one) + char* s = (char*)desc[k]; + char* part = strstr(s, MORPH_PART); + if (part) { + char* nextpart = strstr(part + 1, MORPH_PART); while (nextpart) { - copy_field(result + strlen(result), part, MORPH_PART); - part = nextpart; - nextpart = strstr(part + 1, MORPH_PART); + std::string field; + copy_field(field, part, MORPH_PART); + result.append(field); + part = nextpart; + nextpart = strstr(part + 1, MORPH_PART); } s = part; - } + } - char **pl; - char tok[MAXLNLEN]; - strcpy(tok, s); - char * alt = strstr(tok, " | "); - while (alt) { - alt[1] = MSEP_ALT; - alt = strstr(alt, " | "); - } - int pln = line_tok(tok, &pl, MSEP_ALT); - for (int i = 0; i < pln; i++) { - // remove inflectional and terminal suffixes - char * is = strstr(pl[i], MORPH_INFL_SFX); - if (is) *is = '\0'; - char * ts = strstr(pl[i], MORPH_TERM_SFX); - while (ts) { - *ts = '_'; - ts = strstr(pl[i], MORPH_TERM_SFX); - } - char * st = strstr(s, MORPH_STEM); - if (st) { - copy_field(tok, st, MORPH_STEM); - rv = pAMgr->lookup(tok); - while (rv) { - char newpat[MAXLNLEN]; - strcpy(newpat, pl[i]); - strcat(newpat, pattern); - char * sg = suggest_hentry_gen(rv, newpat); - if (!sg) sg = suggest_hentry_gen(rv, pattern); - if (sg) { - char ** gen; - int genl = line_tok(sg, &gen, MSEP_REC); - free(sg); - sg = NULL; - for (int j = 0; j < genl; j++) { - if (strstr(pl[i], MORPH_SURF_PFX)) { - int r2l = strlen(result2); - result2[r2l] = MSEP_REC; - strcpy(result2 + r2l + 1, result); - copy_field(result2 + strlen(result2), pl[i], MORPH_SURF_PFX); - mystrcat(result2, gen[j], MAXLNLEN); - } else { - sprintf(result2 + strlen(result2), "%c%s%s", - MSEP_REC, result, gen[j]); - } - } - freelist(&gen, genl); - } - rv = rv->next_homonym; + char** pl; + std::string tok(s); + size_t pos = tok.find(" | "); + while (pos != std::string::npos) { + tok[pos + 1] = MSEP_ALT; + pos = tok.find(" | ", pos); + } + int pln = line_tok(tok.c_str(), &pl, MSEP_ALT); + for (int i = 0; i < pln; i++) { + // remove inflectional and terminal suffixes + char* is = strstr(pl[i], MORPH_INFL_SFX); + if (is) + *is = '\0'; + char* ts = strstr(pl[i], MORPH_TERM_SFX); + while (ts) { + *ts = '_'; + ts = strstr(pl[i], MORPH_TERM_SFX); + } + char* st = strstr(s, MORPH_STEM); + if (st) { + copy_field(tok, st, MORPH_STEM); + rv = pAMgr->lookup(tok.c_str()); + while (rv) { + std::string newpat(pl[i]); + newpat.append(pattern); + char* sg = suggest_hentry_gen(rv, newpat.c_str()); + if (!sg) + sg = suggest_hentry_gen(rv, pattern); + if (sg) { + char** gen; + int genl = line_tok(sg, &gen, MSEP_REC); + free(sg); + sg = NULL; + for (int j = 0; j < genl; j++) { + result2.push_back(MSEP_REC); + result2.append(result); + if (strstr(pl[i], MORPH_SURF_PFX)) { + std::string field; + copy_field(field, pl[i], MORPH_SURF_PFX); + result2.append(field); } + result2.append(gen[j]); + } + freelist(&gen, genl); } + rv = rv->next_homonym; + } + } + } + freelist(&pl, pln); } - freelist(&pl, pln); - } - if (*result2 || !strstr(pattern, MORPH_DERI_SFX)) break; - strcpy(newpattern, pattern); - pattern = newpattern; - char * ds = strstr(pattern, MORPH_DERI_SFX); - while (ds) { - strncpy(ds, MORPH_TERM_SFX, MORPH_TAG_LEN); - ds = strstr(pattern, MORPH_DERI_SFX); + if (!result2.empty() || !strstr(pattern, MORPH_DERI_SFX)) + break; + + newpattern.assign(pattern); + mystrrep(newpattern, MORPH_DERI_SFX, MORPH_TERM_SFX); + pattern = newpattern.c_str(); } - } - return (*result2 ? mystrdup(result2) : NULL); + return (!result2.empty() ? mystrdup(result2.c_str()) : NULL); } - // generate an n-gram score comparing s1 and s2 -int SuggestMgr::ngram(int n, char * s1, const char * s2, int opt) -{ +int SuggestMgr::ngram(int n, + const std::string& s1, + const std::string& s2, + int opt) { int nscore = 0; int ns; int l1; @@ -1759,106 +1893,115 @@ int SuggestMgr::ngram(int n, char * s1, const char * s2, int opt) int test = 0; if (utf8) { - w_char su1[MAXSWL]; - w_char su2[MAXSWL]; - l1 = u8_u16(su1, MAXSWL, s1); - l2 = u8_u16(su2, MAXSWL, s2); - if ((l2 <= 0) || (l1 == -1)) return 0; + std::vector su1; + std::vector su2; + l1 = u8_u16(su1, s1); + l2 = u8_u16(su2, s2); + if ((l2 <= 0) || (l1 == -1)) + return 0; // lowering dictionary word - if (opt & NGRAM_LOWERING) mkallsmall_utf(su2, l2, langnum); + if (opt & NGRAM_LOWERING) + mkallsmall_utf(su2, langnum); for (int j = 1; j <= n; j++) { ns = 0; - for (int i = 0; i <= (l1-j); i++) { - int k = 0; - for (int l = 0; l <= (l2-j); l++) { - for (k = 0; k < j; k++) { - w_char * c1 = su1 + i + k; - w_char * c2 = su2 + l + k; - if ((c1->l != c2->l) || (c1->h != c2->h)) break; - } - if (k == j) { - ns++; - break; - } - } - if (k != j && opt & NGRAM_WEIGHTED) { - ns--; - test++; - if (i == 0 || i == l1-j) ns--; // side weight - } + for (int i = 0; i <= (l1 - j); i++) { + int k = 0; + for (int l = 0; l <= (l2 - j); l++) { + for (k = 0; k < j; k++) { + w_char& c1 = su1[i + k]; + w_char& c2 = su2[l + k]; + if ((c1.l != c2.l) || (c1.h != c2.h)) + break; + } + if (k == j) { + ns++; + break; + } + } + if (k != j && opt & NGRAM_WEIGHTED) { + ns--; + test++; + if (i == 0 || i == l1 - j) + ns--; // side weight + } } nscore = nscore + ns; - if (ns < 2 && !(opt & NGRAM_WEIGHTED)) break; - } - } else { - l2 = strlen(s2); - if (l2 == 0) return 0; - l1 = strlen(s1); - char *t = mystrdup(s2); - if (opt & NGRAM_LOWERING) mkallsmall(t, csconv); + if (ns < 2 && !(opt & NGRAM_WEIGHTED)) + break; + } + } else { + l2 = s2.size(); + if (l2 == 0) + return 0; + l1 = s1.size(); + std::string t(s2); + if (opt & NGRAM_LOWERING) + mkallsmall(t, csconv); for (int j = 1; j <= n; j++) { ns = 0; - for (int i = 0; i <= (l1-j); i++) { - char c = *(s1 + i + j); - *(s1 + i + j) = '\0'; - if (strstr(t,(s1+i))) { - ns++; - } else if (opt & NGRAM_WEIGHTED) { - ns--; -test++; - if (i == 0 || i == l1-j) ns--; // side weight - } - *(s1 + i + j ) = c; + for (int i = 0; i <= (l1 - j); i++) { + std::string temp(s1.substr(i, j)); + if (t.find(temp) != std::string::npos) { + ns++; + } else if (opt & NGRAM_WEIGHTED) { + ns--; + test++; + if (i == 0 || i == l1 - j) + ns--; // side weight + } } nscore = nscore + ns; - if (ns < 2 && !(opt & NGRAM_WEIGHTED)) break; + if (ns < 2 && !(opt & NGRAM_WEIGHTED)) + break; } - free(t); } - + ns = 0; - if (opt & NGRAM_LONGER_WORSE) ns = (l2-l1)-2; - if (opt & NGRAM_ANY_MISMATCH) ns = abs(l2-l1)-2; + if (opt & NGRAM_LONGER_WORSE) + ns = (l2 - l1) - 2; + if (opt & NGRAM_ANY_MISMATCH) + ns = abs(l2 - l1) - 2; ns = (nscore - ((ns > 0) ? ns : 0)); return ns; } // length of the left common substring of s1 and (decapitalised) s2 -int SuggestMgr::leftcommonsubstring(char * s1, const char * s2) { +int SuggestMgr::leftcommonsubstring(const char* s1, const char* s2) { if (utf8) { - w_char su1[MAXSWL]; - w_char su2[MAXSWL]; - su1[0].l = su2[0].l = su1[0].h = su2[0].h = 0; + std::vector su1; + std::vector su2; + int l1 = u8_u16(su1, s1); + int l2 = u8_u16(su2, s2); // decapitalize dictionary word if (complexprefixes) { - int l1 = u8_u16(su1, MAXSWL, s1); - int l2 = u8_u16(su2, MAXSWL, s2); - if (*((short *)su1+l1-1) == *((short *)su2+l2-1)) return 1; + if (su1[l1 - 1] == su2[l2 - 1]) + return 1; } else { + unsigned short idx = su2.empty() ? 0 : (su2[0].h << 8) + su2[0].l; + unsigned short otheridx = su1.empty() ? 0 : (su1[0].h << 8) + su1[0].l; + if (otheridx != idx && (otheridx != unicodetolower(idx, langnum))) + return 0; int i; - u8_u16(su1, 1, s1); - u8_u16(su2, 1, s2); - unsigned short idx = (su2->h << 8) + su2->l; - unsigned short otheridx = (su1->h << 8) + su1->l; - if (otheridx != idx && - (otheridx != unicodetolower(idx, langnum))) return 0; - int l1 = u8_u16(su1, MAXSWL, s1); - int l2 = u8_u16(su2, MAXSWL, s2); - for(i = 1; (i < l1) && (i < l2) && - (su1[i].l == su2[i].l) && (su1[i].h == su2[i].h); i++); + for (i = 1; (i < l1) && (i < l2) && (su1[i].l == su2[i].l) && + (su1[i].h == su2[i].h); + i++) + ; return i; } } else { if (complexprefixes) { int l1 = strlen(s1); int l2 = strlen(s2); - if (*(s2+l1-1) == *(s2+l2-1)) return 1; - } else { - char * olds = s1; + if (l1 <= l2 && s2[l1 - 1] == s2[l2 - 1]) + return 1; + } else if (csconv) { + const char* olds = s1; // decapitalise dictionary word - if ((*s1 != *s2) && (*s1 != csconv[((unsigned char)*s2)].clower)) return 0; + if ((*s1 != *s2) && (*s1 != csconv[((unsigned char)*s2)].clower)) + return 0; do { - s1++; s2++; + s1++; + s2++; } while ((*s1 == *s2) && (*s1 != '\0')); return (int)(s1 - olds); } @@ -1866,135 +2009,149 @@ int SuggestMgr::leftcommonsubstring(char * s1, const char * s2) { return 0; } -int SuggestMgr::commoncharacterpositions(char * s1, const char * s2, int * is_swap) { +int SuggestMgr::commoncharacterpositions(const char* s1, + const char* s2, + int* is_swap) { int num = 0; int diff = 0; int diffpos[2]; *is_swap = 0; if (utf8) { - w_char su1[MAXSWL]; - w_char su2[MAXSWL]; - int l1 = u8_u16(su1, MAXSWL, s1); - int l2 = u8_u16(su2, MAXSWL, s2); + std::vector su1; + std::vector su2; + int l1 = u8_u16(su1, s1); + int l2 = u8_u16(su2, s2); if (l1 <= 0 || l2 <= 0) - return 0; + return 0; // decapitalize dictionary word if (complexprefixes) { - mkallsmall_utf(su2+l2-1, 1, langnum); + su2[l2 - 1] = lower_utf(su2[l2 - 1], langnum); } else { - mkallsmall_utf(su2, 1, langnum); + su2[0] = lower_utf(su2[0], langnum); } for (int i = 0; (i < l1) && (i < l2); i++) { - if (((short *) su1)[i] == ((short *) su2)[i]) { + if (su1[i] == su2[i]) { num++; } else { - if (diff < 2) diffpos[diff] = i; + if (diff < 2) + diffpos[diff] = i; diff++; } } if ((diff == 2) && (l1 == l2) && - (((short *) su1)[diffpos[0]] == ((short *) su2)[diffpos[1]]) && - (((short *) su1)[diffpos[1]] == ((short *) su2)[diffpos[0]])) *is_swap = 1; + (su1[diffpos[0]] == su2[diffpos[1]]) && + (su1[diffpos[1]] == su2[diffpos[0]])) + *is_swap = 1; } else { - int i; - char t[MAXSWUTF8L]; - strcpy(t, s2); + size_t i; + std::string t(s2); // decapitalize dictionary word if (complexprefixes) { - int l2 = strlen(t); - *(t+l2-1) = csconv[((unsigned char)*(t+l2-1))].clower; + size_t l2 = t.size(); + t[l2 - 1] = csconv[(unsigned char)t[l2 - 1]].clower; } else { mkallsmall(t, csconv); } - for (i = 0; (*(s1+i) != 0) && (*(t+i) != 0); i++) { - if (*(s1+i) == *(t+i)) { + for (i = 0; (*(s1 + i) != 0) && i < t.size(); i++) { + if (*(s1 + i) == t[i]) { num++; } else { - if (diff < 2) diffpos[diff] = i; + if (diff < 2) + diffpos[diff] = i; diff++; } } - if ((diff == 2) && (*(s1+i) == 0) && (*(t+i) == 0) && - (*(s1+diffpos[0]) == *(t+diffpos[1])) && - (*(s1+diffpos[1]) == *(t+diffpos[0]))) *is_swap = 1; + if ((diff == 2) && (*(s1 + i) == 0) && i == t.size() && + (*(s1 + diffpos[0]) == t[diffpos[1]]) && + (*(s1 + diffpos[1]) == t[diffpos[0]])) + *is_swap = 1; } return num; } -int SuggestMgr::mystrlen(const char * word) { +int SuggestMgr::mystrlen(const char* word) { if (utf8) { - w_char w[MAXSWL]; - return u8_u16(w, MAXSWL, word); - } else return strlen(word); + std::vector w; + return u8_u16(w, word); + } else + return strlen(word); } // sort in decreasing order of score -void SuggestMgr::bubblesort(char** rword, char** rword2, int* rsc, int n ) -{ - int m = 1; - while (m < n) { - int j = m; - while (j > 0) { - if (rsc[j-1] < rsc[j]) { - int sctmp = rsc[j-1]; - char * wdtmp = rword[j-1]; - rsc[j-1] = rsc[j]; - rword[j-1] = rword[j]; - rsc[j] = sctmp; - rword[j] = wdtmp; - if (rword2) { - wdtmp = rword2[j-1]; - rword2[j-1] = rword2[j]; - rword2[j] = wdtmp; - } - j--; - } else break; - } - m++; - } - return; +void SuggestMgr::bubblesort(char** rword, char** rword2, int* rsc, int n) { + int m = 1; + while (m < n) { + int j = m; + while (j > 0) { + if (rsc[j - 1] < rsc[j]) { + int sctmp = rsc[j - 1]; + char* wdtmp = rword[j - 1]; + rsc[j - 1] = rsc[j]; + rword[j - 1] = rword[j]; + rsc[j] = sctmp; + rword[j] = wdtmp; + if (rword2) { + wdtmp = rword2[j - 1]; + rword2[j - 1] = rword2[j]; + rword2[j] = wdtmp; + } + j--; + } else + break; + } + m++; + } + return; } // longest common subsequence -void SuggestMgr::lcs(const char * s, const char * s2, int * l1, int * l2, char ** result) { +void SuggestMgr::lcs(const char* s, + const char* s2, + int* l1, + int* l2, + char** result) { int n, m; - w_char su[MAXSWL]; - w_char su2[MAXSWL]; - char * b; - char * c; + std::vector su; + std::vector su2; + char* b; + char* c; int i; int j; if (utf8) { - m = u8_u16(su, MAXSWL, s); - n = u8_u16(su2, MAXSWL, s2); + m = u8_u16(su, s); + n = u8_u16(su2, s2); } else { m = strlen(s); n = strlen(s2); } - c = (char *) malloc((m + 1) * (n + 1)); - b = (char *) malloc((m + 1) * (n + 1)); + c = (char*)malloc((m + 1) * (n + 1)); + b = (char*)malloc((m + 1) * (n + 1)); if (!c || !b) { - if (c) free(c); - if (b) free(b); + if (c) + free(c); + if (b) + free(b); *result = NULL; return; } - for (i = 1; i <= m; i++) c[i*(n+1)] = 0; - for (j = 0; j <= n; j++) c[j] = 0; + for (i = 1; i <= m; i++) + c[i * (n + 1)] = 0; + for (j = 0; j <= n; j++) + c[j] = 0; for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { - if ( ((utf8) && (*((short *) su+i-1) == *((short *)su2+j-1))) - || ((!utf8) && ((*(s+i-1)) == (*(s2+j-1))))) { - c[i*(n+1) + j] = c[(i-1)*(n+1) + j-1]+1; - b[i*(n+1) + j] = LCS_UPLEFT; - } else if (c[(i-1)*(n+1) + j] >= c[i*(n+1) + j-1]) { - c[i*(n+1) + j] = c[(i-1)*(n+1) + j]; - b[i*(n+1) + j] = LCS_UP; + if (((utf8) && (su[i - 1] == su2[j - 1])) || + ((!utf8) && (s[i - 1] == s2[j - 1]))) { + c[i * (n + 1) + j] = c[(i - 1) * (n + 1) + j - 1] + 1; + b[i * (n + 1) + j] = LCS_UPLEFT; + } else if (c[(i - 1) * (n + 1) + j] >= c[i * (n + 1) + j - 1]) { + c[i * (n + 1) + j] = c[(i - 1) * (n + 1) + j]; + b[i * (n + 1) + j] = LCS_UP; } else { - c[i*(n+1) + j] = c[i*(n+1) + j-1]; - b[i*(n+1) + j] = LCS_LEFT; + c[i * (n + 1) + j] = c[i * (n + 1) + j - 1]; + b[i * (n + 1) + j] = LCS_LEFT; } } } @@ -2004,26 +2161,32 @@ void SuggestMgr::lcs(const char * s, const char * s2, int * l1, int * l2, char * *l2 = n; } -int SuggestMgr::lcslen(const char * s, const char* s2) { +int SuggestMgr::lcslen(const char* s, const char* s2) { int m; int n; int i; int j; - char * result; + char* result; int len = 0; lcs(s, s2, &m, &n, &result); - if (!result) return 0; + if (!result) + return 0; i = m; j = n; while ((i != 0) && (j != 0)) { - if (result[i*(n+1) + j] == LCS_UPLEFT) { + if (result[i * (n + 1) + j] == LCS_UPLEFT) { len++; i--; j--; - } else if (result[i*(n+1) + j] == LCS_UP) { + } else if (result[i * (n + 1) + j] == LCS_UP) { i--; - } else j--; + } else + j--; } free(result); return len; } + +int SuggestMgr::lcslen(const std::string& s, const std::string& s2) { + return lcslen(s.c_str(), s2.c_str()); +} diff --git a/src/spelling/hunspell/suggestmgr.hxx b/src/spelling/hunspell/suggestmgr.hxx index 8456b5b3..675d98eb 100644 --- a/src/spelling/hunspell/suggestmgr.hxx +++ b/src/spelling/hunspell/suggestmgr.hxx @@ -1,8 +1,79 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + * And Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + #ifndef _SUGGESTMGR_HXX_ #define _SUGGESTMGR_HXX_ -#define MAXSWL 100 -#define MAXSWUTF8L (MAXSWL * 4) #define MAX_ROOTS 100 #define MAX_WORDS 100 #define MAX_GUESS 200 @@ -15,10 +86,10 @@ #define MINTIMER 100 #define MAXPLUSTIMER 100 -#define NGRAM_LONGER_WORSE (1 << 0) -#define NGRAM_ANY_MISMATCH (1 << 1) -#define NGRAM_LOWERING (1 << 2) -#define NGRAM_WEIGHTED (1 << 3) +#define NGRAM_LONGER_WORSE (1 << 0) +#define NGRAM_ANY_MISMATCH (1 << 1) +#define NGRAM_LOWERING (1 << 2) +#define NGRAM_WEIGHTED (1 << 3) #include "hunvisapi.h" @@ -30,86 +101,98 @@ enum { LCS_UP, LCS_LEFT, LCS_UPLEFT }; -class LIBHUNSPELL_DLL_EXPORTED SuggestMgr -{ -private: +class LIBHUNSPELL_DLL_EXPORTED SuggestMgr { + private: SuggestMgr(const SuggestMgr&); - SuggestMgr& operator = (const SuggestMgr&); -private: - char * ckey; - int ckeyl; - w_char * ckey_utf; - - char * ctry; - int ctryl; - w_char * ctry_utf; - - AffixMgr* pAMgr; - int maxSug; - struct cs_info * csconv; - int utf8; - int langnum; - int nosplitsugs; - int maxngramsugs; - int maxcpdsugs; - int complexprefixes; - - -public: - SuggestMgr(const char * tryme, int maxn, AffixMgr *aptr); + SuggestMgr& operator=(const SuggestMgr&); + + private: + char* ckey; + int ckeyl; + w_char* ckey_utf; + + char* ctry; + int ctryl; + w_char* ctry_utf; + + AffixMgr* pAMgr; + int maxSug; + struct cs_info* csconv; + int utf8; + int langnum; + int nosplitsugs; + int maxngramsugs; + int maxcpdsugs; + int complexprefixes; + + public: + SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr); ~SuggestMgr(); - int suggest(char*** slst, const char * word, int nsug, int * onlycmpdsug); - int ngsuggest(char ** wlst, char * word, int ns, HashMgr** pHMgr, int md); - int suggest_auto(char*** slst, const char * word, int nsug); - int suggest_stems(char*** slst, const char * word, int nsug); - int suggest_pos_stems(char*** slst, const char * word, int nsug); - - char * suggest_morph(const char * word); - char * suggest_gen(char ** pl, int pln, char * pattern); - char * suggest_morph_for_spelling_error(const char * word); - -private: - int testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest, - int * timer, clock_t * timelimit); - int checkword(const char *, int, int, int *, clock_t *); - int check_forbidden(const char *, int); - - int capchars(char **, const char *, int, int); - int replchars(char**, const char *, int, int); - int doubletwochars(char**, const char *, int, int); - int forgotchar(char **, const char *, int, int); - int swapchar(char **, const char *, int, int); - int longswapchar(char **, const char *, int, int); - int movechar(char **, const char *, int, int); - int extrachar(char **, const char *, int, int); - int badcharkey(char **, const char *, int, int); - int badchar(char **, const char *, int, int); - int twowords(char **, const char *, int, int); - int fixstems(char **, const char *, int); - - int capchars_utf(char **, const w_char *, int wl, int, int); - int doubletwochars_utf(char**, const w_char *, int wl, int, int); - int forgotchar_utf(char**, const w_char *, int wl, int, int); - int extrachar_utf(char**, const w_char *, int wl, int, int); - int badcharkey_utf(char **, const w_char *, int wl, int, int); - int badchar_utf(char **, const w_char *, int wl, int, int); - int swapchar_utf(char **, const w_char *, int wl, int, int); - int longswapchar_utf(char **, const w_char *, int, int, int); - int movechar_utf(char **, const w_char *, int, int, int); - - int mapchars(char**, const char *, int, int); - int map_related(const char *, char *, int, int, char ** wlst, int, int, const mapentry*, int, int *, clock_t *); - int ngram(int n, char * s1, const char * s2, int opt); - int mystrlen(const char * word); - int leftcommonsubstring(char * s1, const char * s2); - int commoncharacterpositions(char * s1, const char * s2, int * is_swap); - void bubblesort( char ** rwd, char ** rwd2, int * rsc, int n); - void lcs(const char * s, const char * s2, int * l1, int * l2, char ** result); - int lcslen(const char * s, const char* s2); - char * suggest_hentry_gen(hentry * rv, char * pattern); - + int suggest(char*** slst, const char* word, int nsug, int* onlycmpdsug); + int ngsuggest(char** wlst, const char* word, int ns, HashMgr** pHMgr, int md); + int suggest_auto(char*** slst, const char* word, int nsug); + int suggest_stems(char*** slst, const char* word, int nsug); + int suggest_pos_stems(char*** slst, const char* word, int nsug); + + char* suggest_morph(const char* word); + char* suggest_gen(char** pl, int pln, const char* pattern); + char* suggest_morph_for_spelling_error(const char* word); + + private: + int testsug(char** wlst, + const char* candidate, + int wl, + int ns, + int cpdsuggest, + int* timer, + clock_t* timelimit); + int checkword(const char*, int, int, int*, clock_t*); + int check_forbidden(const char*, int); + + int capchars(char**, const char*, int, int); + int replchars(char**, const char*, int, int); + int doubletwochars(char**, const char*, int, int); + int forgotchar(char**, const char*, int, int); + int swapchar(char**, const char*, int, int); + int longswapchar(char**, const char*, int, int); + int movechar(char**, const char*, int, int); + int extrachar(char**, const char*, int, int); + int badcharkey(char**, const char*, int, int); + int badchar(char**, const char*, int, int); + int twowords(char**, const char*, int, int); + int fixstems(char**, const char*, int); + + int capchars_utf(char**, const w_char*, int wl, int, int); + int doubletwochars_utf(char**, const w_char*, int wl, int, int); + int forgotchar_utf(char**, const w_char*, int wl, int, int); + int extrachar_utf(char**, const w_char*, int wl, int, int); + int badcharkey_utf(char**, const w_char*, int wl, int, int); + int badchar_utf(char**, const w_char*, int wl, int, int); + int swapchar_utf(char**, const w_char*, int wl, int, int); + int longswapchar_utf(char**, const w_char*, int, int, int); + int movechar_utf(char**, const w_char*, int, int, int); + + int mapchars(char**, const char*, int, int); + int map_related(const char*, + std::string&, + int, + char** wlst, + int, + int, + const mapentry*, + int, + int*, + clock_t*); + int ngram(int n, const std::string& s1, const std::string& s2, int opt); + int mystrlen(const char* word); + int leftcommonsubstring(const char* s1, const char* s2); + int commoncharacterpositions(const char* s1, const char* s2, int* is_swap); + void bubblesort(char** rwd, char** rwd2, int* rsc, int n); + void lcs(const char* s, const char* s2, int* l1, int* l2, char** result); + int lcslen(const char* s, const char* s2); + int lcslen(const std::string& s, const std::string& s2); + char* suggest_hentry_gen(hentry* rv, const char* pattern); }; #endif - diff --git a/src/spelling/hunspell/utf_info.cxx b/src/spelling/hunspell/utf_info.cxx index 4a8e203c..d1541b01 100644 --- a/src/spelling/hunspell/utf_info.cxx +++ b/src/spelling/hunspell/utf_info.cxx @@ -1,19676 +1,9879 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #include "csutil.hxx" /* fields: Unicode letter, toupper, tolower */ static struct unicode_info utf_lst[] = { -{ 0x0041, 0x0041, 0x0061 }, -{ 0x0042, 0x0042, 0x0062 }, -{ 0x0043, 0x0043, 0x0063 }, -{ 0x0044, 0x0044, 0x0064 }, -{ 0x0045, 0x0045, 0x0065 }, -{ 0x0046, 0x0046, 0x0066 }, -{ 0x0047, 0x0047, 0x0067 }, -{ 0x0048, 0x0048, 0x0068 }, -{ 0x0049, 0x0049, 0x0069 }, -{ 0x004A, 0x004A, 0x006A }, -{ 0x004B, 0x004B, 0x006B }, -{ 0x004C, 0x004C, 0x006C }, -{ 0x004D, 0x004D, 0x006D }, -{ 0x004E, 0x004E, 0x006E }, -{ 0x004F, 0x004F, 0x006F }, -{ 0x0050, 0x0050, 0x0070 }, -{ 0x0051, 0x0051, 0x0071 }, -{ 0x0052, 0x0052, 0x0072 }, -{ 0x0053, 0x0053, 0x0073 }, -{ 0x0054, 0x0054, 0x0074 }, -{ 0x0055, 0x0055, 0x0075 }, -{ 0x0056, 0x0056, 0x0076 }, -{ 0x0057, 0x0057, 0x0077 }, -{ 0x0058, 0x0058, 0x0078 }, -{ 0x0059, 0x0059, 0x0079 }, -{ 0x005A, 0x005A, 0x007A }, -{ 0x0061, 0x0041, 0x0061 }, -{ 0x0062, 0x0042, 0x0062 }, -{ 0x0063, 0x0043, 0x0063 }, -{ 0x0064, 0x0044, 0x0064 }, -{ 0x0065, 0x0045, 0x0065 }, -{ 0x0066, 0x0046, 0x0066 }, -{ 0x0067, 0x0047, 0x0067 }, -{ 0x0068, 0x0048, 0x0068 }, -{ 0x0069, 0x0049, 0x0069 }, -{ 0x006A, 0x004A, 0x006A }, -{ 0x006B, 0x004B, 0x006B }, -{ 0x006C, 0x004C, 0x006C }, -{ 0x006D, 0x004D, 0x006D }, -{ 0x006E, 0x004E, 0x006E }, -{ 0x006F, 0x004F, 0x006F }, -{ 0x0070, 0x0050, 0x0070 }, -{ 0x0071, 0x0051, 0x0071 }, -{ 0x0072, 0x0052, 0x0072 }, -{ 0x0073, 0x0053, 0x0073 }, -{ 0x0074, 0x0054, 0x0074 }, -{ 0x0075, 0x0055, 0x0075 }, -{ 0x0076, 0x0056, 0x0076 }, -{ 0x0077, 0x0057, 0x0077 }, -{ 0x0078, 0x0058, 0x0078 }, -{ 0x0079, 0x0059, 0x0079 }, -{ 0x007A, 0x005A, 0x007A }, -{ 0x00AA, 0x00AA, 0x00AA }, -{ 0x00B5, 0x039C, 0x00B5 }, -{ 0x00BA, 0x00BA, 0x00BA }, -{ 0x00C0, 0x00C0, 0x00E0 }, -{ 0x00C1, 0x00C1, 0x00E1 }, -{ 0x00C2, 0x00C2, 0x00E2 }, -{ 0x00C3, 0x00C3, 0x00E3 }, -{ 0x00C4, 0x00C4, 0x00E4 }, -{ 0x00C5, 0x00C5, 0x00E5 }, -{ 0x00C6, 0x00C6, 0x00E6 }, -{ 0x00C7, 0x00C7, 0x00E7 }, -{ 0x00C8, 0x00C8, 0x00E8 }, -{ 0x00C9, 0x00C9, 0x00E9 }, -{ 0x00CA, 0x00CA, 0x00EA }, -{ 0x00CB, 0x00CB, 0x00EB }, -{ 0x00CC, 0x00CC, 0x00EC }, -{ 0x00CD, 0x00CD, 0x00ED }, -{ 0x00CE, 0x00CE, 0x00EE }, -{ 0x00CF, 0x00CF, 0x00EF }, -{ 0x00D0, 0x00D0, 0x00F0 }, -{ 0x00D1, 0x00D1, 0x00F1 }, -{ 0x00D2, 0x00D2, 0x00F2 }, -{ 0x00D3, 0x00D3, 0x00F3 }, -{ 0x00D4, 0x00D4, 0x00F4 }, -{ 0x00D5, 0x00D5, 0x00F5 }, -{ 0x00D6, 0x00D6, 0x00F6 }, -{ 0x00D8, 0x00D8, 0x00F8 }, -{ 0x00D9, 0x00D9, 0x00F9 }, -{ 0x00DA, 0x00DA, 0x00FA }, -{ 0x00DB, 0x00DB, 0x00FB }, -{ 0x00DC, 0x00DC, 0x00FC }, -{ 0x00DD, 0x00DD, 0x00FD }, -{ 0x00DE, 0x00DE, 0x00FE }, -{ 0x00DF, 0x00DF, 0x00DF }, -{ 0x00E0, 0x00C0, 0x00E0 }, -{ 0x00E1, 0x00C1, 0x00E1 }, -{ 0x00E2, 0x00C2, 0x00E2 }, -{ 0x00E3, 0x00C3, 0x00E3 }, -{ 0x00E4, 0x00C4, 0x00E4 }, -{ 0x00E5, 0x00C5, 0x00E5 }, -{ 0x00E6, 0x00C6, 0x00E6 }, -{ 0x00E7, 0x00C7, 0x00E7 }, -{ 0x00E8, 0x00C8, 0x00E8 }, -{ 0x00E9, 0x00C9, 0x00E9 }, -{ 0x00EA, 0x00CA, 0x00EA }, -{ 0x00EB, 0x00CB, 0x00EB }, -{ 0x00EC, 0x00CC, 0x00EC }, -{ 0x00ED, 0x00CD, 0x00ED }, -{ 0x00EE, 0x00CE, 0x00EE }, -{ 0x00EF, 0x00CF, 0x00EF }, -{ 0x00F0, 0x00D0, 0x00F0 }, -{ 0x00F1, 0x00D1, 0x00F1 }, -{ 0x00F2, 0x00D2, 0x00F2 }, -{ 0x00F3, 0x00D3, 0x00F3 }, -{ 0x00F4, 0x00D4, 0x00F4 }, -{ 0x00F5, 0x00D5, 0x00F5 }, -{ 0x00F6, 0x00D6, 0x00F6 }, -{ 0x00F8, 0x00D8, 0x00F8 }, -{ 0x00F9, 0x00D9, 0x00F9 }, -{ 0x00FA, 0x00DA, 0x00FA }, -{ 0x00FB, 0x00DB, 0x00FB }, -{ 0x00FC, 0x00DC, 0x00FC }, -{ 0x00FD, 0x00DD, 0x00FD }, -{ 0x00FE, 0x00DE, 0x00FE }, -{ 0x00FF, 0x0178, 0x00FF }, -{ 0x0100, 0x0100, 0x0101 }, -{ 0x0101, 0x0100, 0x0101 }, -{ 0x0102, 0x0102, 0x0103 }, -{ 0x0103, 0x0102, 0x0103 }, -{ 0x0104, 0x0104, 0x0105 }, -{ 0x0105, 0x0104, 0x0105 }, -{ 0x0106, 0x0106, 0x0107 }, -{ 0x0107, 0x0106, 0x0107 }, -{ 0x0108, 0x0108, 0x0109 }, -{ 0x0109, 0x0108, 0x0109 }, -{ 0x010A, 0x010A, 0x010B }, -{ 0x010B, 0x010A, 0x010B }, -{ 0x010C, 0x010C, 0x010D }, -{ 0x010D, 0x010C, 0x010D }, -{ 0x010E, 0x010E, 0x010F }, -{ 0x010F, 0x010E, 0x010F }, -{ 0x0110, 0x0110, 0x0111 }, -{ 0x0111, 0x0110, 0x0111 }, -{ 0x0112, 0x0112, 0x0113 }, -{ 0x0113, 0x0112, 0x0113 }, -{ 0x0114, 0x0114, 0x0115 }, -{ 0x0115, 0x0114, 0x0115 }, -{ 0x0116, 0x0116, 0x0117 }, -{ 0x0117, 0x0116, 0x0117 }, -{ 0x0118, 0x0118, 0x0119 }, -{ 0x0119, 0x0118, 0x0119 }, -{ 0x011A, 0x011A, 0x011B }, -{ 0x011B, 0x011A, 0x011B }, -{ 0x011C, 0x011C, 0x011D }, -{ 0x011D, 0x011C, 0x011D }, -{ 0x011E, 0x011E, 0x011F }, -{ 0x011F, 0x011E, 0x011F }, -{ 0x0120, 0x0120, 0x0121 }, -{ 0x0121, 0x0120, 0x0121 }, -{ 0x0122, 0x0122, 0x0123 }, -{ 0x0123, 0x0122, 0x0123 }, -{ 0x0124, 0x0124, 0x0125 }, -{ 0x0125, 0x0124, 0x0125 }, -{ 0x0126, 0x0126, 0x0127 }, -{ 0x0127, 0x0126, 0x0127 }, -{ 0x0128, 0x0128, 0x0129 }, -{ 0x0129, 0x0128, 0x0129 }, -{ 0x012A, 0x012A, 0x012B }, -{ 0x012B, 0x012A, 0x012B }, -{ 0x012C, 0x012C, 0x012D }, -{ 0x012D, 0x012C, 0x012D }, -{ 0x012E, 0x012E, 0x012F }, -{ 0x012F, 0x012E, 0x012F }, -{ 0x0130, 0x0130, 0x0069 }, -{ 0x0131, 0x0049, 0x0131 }, -{ 0x0132, 0x0132, 0x0133 }, -{ 0x0133, 0x0132, 0x0133 }, -{ 0x0134, 0x0134, 0x0135 }, -{ 0x0135, 0x0134, 0x0135 }, -{ 0x0136, 0x0136, 0x0137 }, -{ 0x0137, 0x0136, 0x0137 }, -{ 0x0138, 0x0138, 0x0138 }, -{ 0x0139, 0x0139, 0x013A }, -{ 0x013A, 0x0139, 0x013A }, -{ 0x013B, 0x013B, 0x013C }, -{ 0x013C, 0x013B, 0x013C }, -{ 0x013D, 0x013D, 0x013E }, -{ 0x013E, 0x013D, 0x013E }, -{ 0x013F, 0x013F, 0x0140 }, -{ 0x0140, 0x013F, 0x0140 }, -{ 0x0141, 0x0141, 0x0142 }, -{ 0x0142, 0x0141, 0x0142 }, -{ 0x0143, 0x0143, 0x0144 }, -{ 0x0144, 0x0143, 0x0144 }, -{ 0x0145, 0x0145, 0x0146 }, -{ 0x0146, 0x0145, 0x0146 }, -{ 0x0147, 0x0147, 0x0148 }, -{ 0x0148, 0x0147, 0x0148 }, -{ 0x0149, 0x0149, 0x0149 }, -{ 0x014A, 0x014A, 0x014B }, -{ 0x014B, 0x014A, 0x014B }, -{ 0x014C, 0x014C, 0x014D }, -{ 0x014D, 0x014C, 0x014D }, -{ 0x014E, 0x014E, 0x014F }, -{ 0x014F, 0x014E, 0x014F }, -{ 0x0150, 0x0150, 0x0151 }, -{ 0x0151, 0x0150, 0x0151 }, -{ 0x0152, 0x0152, 0x0153 }, -{ 0x0153, 0x0152, 0x0153 }, -{ 0x0154, 0x0154, 0x0155 }, -{ 0x0155, 0x0154, 0x0155 }, -{ 0x0156, 0x0156, 0x0157 }, -{ 0x0157, 0x0156, 0x0157 }, -{ 0x0158, 0x0158, 0x0159 }, -{ 0x0159, 0x0158, 0x0159 }, -{ 0x015A, 0x015A, 0x015B }, -{ 0x015B, 0x015A, 0x015B }, -{ 0x015C, 0x015C, 0x015D }, -{ 0x015D, 0x015C, 0x015D }, -{ 0x015E, 0x015E, 0x015F }, -{ 0x015F, 0x015E, 0x015F }, -{ 0x0160, 0x0160, 0x0161 }, -{ 0x0161, 0x0160, 0x0161 }, -{ 0x0162, 0x0162, 0x0163 }, -{ 0x0163, 0x0162, 0x0163 }, -{ 0x0164, 0x0164, 0x0165 }, -{ 0x0165, 0x0164, 0x0165 }, -{ 0x0166, 0x0166, 0x0167 }, -{ 0x0167, 0x0166, 0x0167 }, -{ 0x0168, 0x0168, 0x0169 }, -{ 0x0169, 0x0168, 0x0169 }, -{ 0x016A, 0x016A, 0x016B }, -{ 0x016B, 0x016A, 0x016B }, -{ 0x016C, 0x016C, 0x016D }, -{ 0x016D, 0x016C, 0x016D }, -{ 0x016E, 0x016E, 0x016F }, -{ 0x016F, 0x016E, 0x016F }, -{ 0x0170, 0x0170, 0x0171 }, -{ 0x0171, 0x0170, 0x0171 }, -{ 0x0172, 0x0172, 0x0173 }, -{ 0x0173, 0x0172, 0x0173 }, -{ 0x0174, 0x0174, 0x0175 }, -{ 0x0175, 0x0174, 0x0175 }, -{ 0x0176, 0x0176, 0x0177 }, -{ 0x0177, 0x0176, 0x0177 }, -{ 0x0178, 0x0178, 0x00FF }, -{ 0x0179, 0x0179, 0x017A }, -{ 0x017A, 0x0179, 0x017A }, -{ 0x017B, 0x017B, 0x017C }, -{ 0x017C, 0x017B, 0x017C }, -{ 0x017D, 0x017D, 0x017E }, -{ 0x017E, 0x017D, 0x017E }, -{ 0x017F, 0x0053, 0x017F }, -{ 0x0180, 0x0180, 0x0180 }, -{ 0x0181, 0x0181, 0x0253 }, -{ 0x0182, 0x0182, 0x0183 }, -{ 0x0183, 0x0182, 0x0183 }, -{ 0x0184, 0x0184, 0x0185 }, -{ 0x0185, 0x0184, 0x0185 }, -{ 0x0186, 0x0186, 0x0254 }, -{ 0x0187, 0x0187, 0x0188 }, -{ 0x0188, 0x0187, 0x0188 }, -{ 0x0189, 0x0189, 0x0256 }, -{ 0x018A, 0x018A, 0x0257 }, -{ 0x018B, 0x018B, 0x018C }, -{ 0x018C, 0x018B, 0x018C }, -{ 0x018D, 0x018D, 0x018D }, -{ 0x018E, 0x018E, 0x01DD }, -{ 0x018F, 0x018F, 0x0259 }, -{ 0x0190, 0x0190, 0x025B }, -{ 0x0191, 0x0191, 0x0192 }, -{ 0x0192, 0x0191, 0x0192 }, -{ 0x0193, 0x0193, 0x0260 }, -{ 0x0194, 0x0194, 0x0263 }, -{ 0x0195, 0x01F6, 0x0195 }, -{ 0x0196, 0x0196, 0x0269 }, -{ 0x0197, 0x0197, 0x0268 }, -{ 0x0198, 0x0198, 0x0199 }, -{ 0x0199, 0x0198, 0x0199 }, -{ 0x019A, 0x023D, 0x019A }, -{ 0x019B, 0x019B, 0x019B }, -{ 0x019C, 0x019C, 0x026F }, -{ 0x019D, 0x019D, 0x0272 }, -{ 0x019E, 0x0220, 0x019E }, -{ 0x019F, 0x019F, 0x0275 }, -{ 0x01A0, 0x01A0, 0x01A1 }, -{ 0x01A1, 0x01A0, 0x01A1 }, -{ 0x01A2, 0x01A2, 0x01A3 }, -{ 0x01A3, 0x01A2, 0x01A3 }, -{ 0x01A4, 0x01A4, 0x01A5 }, -{ 0x01A5, 0x01A4, 0x01A5 }, -{ 0x01A6, 0x01A6, 0x0280 }, -{ 0x01A7, 0x01A7, 0x01A8 }, -{ 0x01A8, 0x01A7, 0x01A8 }, -{ 0x01A9, 0x01A9, 0x0283 }, -{ 0x01AA, 0x01AA, 0x01AA }, -{ 0x01AB, 0x01AB, 0x01AB }, -{ 0x01AC, 0x01AC, 0x01AD }, -{ 0x01AD, 0x01AC, 0x01AD }, -{ 0x01AE, 0x01AE, 0x0288 }, -{ 0x01AF, 0x01AF, 0x01B0 }, -{ 0x01B0, 0x01AF, 0x01B0 }, -{ 0x01B1, 0x01B1, 0x028A }, -{ 0x01B2, 0x01B2, 0x028B }, -{ 0x01B3, 0x01B3, 0x01B4 }, -{ 0x01B4, 0x01B3, 0x01B4 }, -{ 0x01B5, 0x01B5, 0x01B6 }, -{ 0x01B6, 0x01B5, 0x01B6 }, -{ 0x01B7, 0x01B7, 0x0292 }, -{ 0x01B8, 0x01B8, 0x01B9 }, -{ 0x01B9, 0x01B8, 0x01B9 }, -{ 0x01BA, 0x01BA, 0x01BA }, -{ 0x01BB, 0x01BB, 0x01BB }, -{ 0x01BC, 0x01BC, 0x01BD }, -{ 0x01BD, 0x01BC, 0x01BD }, -{ 0x01BE, 0x01BE, 0x01BE }, -{ 0x01BF, 0x01F7, 0x01BF }, -{ 0x01C0, 0x01C0, 0x01C0 }, -{ 0x01C1, 0x01C1, 0x01C1 }, -{ 0x01C2, 0x01C2, 0x01C2 }, -{ 0x01C3, 0x01C3, 0x01C3 }, -{ 0x01C4, 0x01C4, 0x01C6 }, -{ 0x01C5, 0x01C4, 0x01C6 }, -{ 0x01C6, 0x01C4, 0x01C6 }, -{ 0x01C7, 0x01C7, 0x01C9 }, -{ 0x01C8, 0x01C7, 0x01C9 }, -{ 0x01C9, 0x01C7, 0x01C9 }, -{ 0x01CA, 0x01CA, 0x01CC }, -{ 0x01CB, 0x01CA, 0x01CC }, -{ 0x01CC, 0x01CA, 0x01CC }, -{ 0x01CD, 0x01CD, 0x01CE }, -{ 0x01CE, 0x01CD, 0x01CE }, -{ 0x01CF, 0x01CF, 0x01D0 }, -{ 0x01D0, 0x01CF, 0x01D0 }, -{ 0x01D1, 0x01D1, 0x01D2 }, -{ 0x01D2, 0x01D1, 0x01D2 }, -{ 0x01D3, 0x01D3, 0x01D4 }, -{ 0x01D4, 0x01D3, 0x01D4 }, -{ 0x01D5, 0x01D5, 0x01D6 }, -{ 0x01D6, 0x01D5, 0x01D6 }, -{ 0x01D7, 0x01D7, 0x01D8 }, -{ 0x01D8, 0x01D7, 0x01D8 }, -{ 0x01D9, 0x01D9, 0x01DA }, -{ 0x01DA, 0x01D9, 0x01DA }, -{ 0x01DB, 0x01DB, 0x01DC }, -{ 0x01DC, 0x01DB, 0x01DC }, -{ 0x01DD, 0x018E, 0x01DD }, -{ 0x01DE, 0x01DE, 0x01DF }, -{ 0x01DF, 0x01DE, 0x01DF }, -{ 0x01E0, 0x01E0, 0x01E1 }, -{ 0x01E1, 0x01E0, 0x01E1 }, -{ 0x01E2, 0x01E2, 0x01E3 }, -{ 0x01E3, 0x01E2, 0x01E3 }, -{ 0x01E4, 0x01E4, 0x01E5 }, -{ 0x01E5, 0x01E4, 0x01E5 }, -{ 0x01E6, 0x01E6, 0x01E7 }, -{ 0x01E7, 0x01E6, 0x01E7 }, -{ 0x01E8, 0x01E8, 0x01E9 }, -{ 0x01E9, 0x01E8, 0x01E9 }, -{ 0x01EA, 0x01EA, 0x01EB }, -{ 0x01EB, 0x01EA, 0x01EB }, -{ 0x01EC, 0x01EC, 0x01ED }, -{ 0x01ED, 0x01EC, 0x01ED }, -{ 0x01EE, 0x01EE, 0x01EF }, -{ 0x01EF, 0x01EE, 0x01EF }, -{ 0x01F0, 0x01F0, 0x01F0 }, -{ 0x01F1, 0x01F1, 0x01F3 }, -{ 0x01F2, 0x01F1, 0x01F3 }, -{ 0x01F3, 0x01F1, 0x01F3 }, -{ 0x01F4, 0x01F4, 0x01F5 }, -{ 0x01F5, 0x01F4, 0x01F5 }, -{ 0x01F6, 0x01F6, 0x0195 }, -{ 0x01F7, 0x01F7, 0x01BF }, -{ 0x01F8, 0x01F8, 0x01F9 }, -{ 0x01F9, 0x01F8, 0x01F9 }, -{ 0x01FA, 0x01FA, 0x01FB }, -{ 0x01FB, 0x01FA, 0x01FB }, -{ 0x01FC, 0x01FC, 0x01FD }, -{ 0x01FD, 0x01FC, 0x01FD }, -{ 0x01FE, 0x01FE, 0x01FF }, -{ 0x01FF, 0x01FE, 0x01FF }, -{ 0x0200, 0x0200, 0x0201 }, -{ 0x0201, 0x0200, 0x0201 }, -{ 0x0202, 0x0202, 0x0203 }, -{ 0x0203, 0x0202, 0x0203 }, -{ 0x0204, 0x0204, 0x0205 }, -{ 0x0205, 0x0204, 0x0205 }, -{ 0x0206, 0x0206, 0x0207 }, -{ 0x0207, 0x0206, 0x0207 }, -{ 0x0208, 0x0208, 0x0209 }, -{ 0x0209, 0x0208, 0x0209 }, -{ 0x020A, 0x020A, 0x020B }, -{ 0x020B, 0x020A, 0x020B }, -{ 0x020C, 0x020C, 0x020D }, -{ 0x020D, 0x020C, 0x020D }, -{ 0x020E, 0x020E, 0x020F }, -{ 0x020F, 0x020E, 0x020F }, -{ 0x0210, 0x0210, 0x0211 }, -{ 0x0211, 0x0210, 0x0211 }, -{ 0x0212, 0x0212, 0x0213 }, -{ 0x0213, 0x0212, 0x0213 }, -{ 0x0214, 0x0214, 0x0215 }, -{ 0x0215, 0x0214, 0x0215 }, -{ 0x0216, 0x0216, 0x0217 }, -{ 0x0217, 0x0216, 0x0217 }, -{ 0x0218, 0x0218, 0x0219 }, -{ 0x0219, 0x0218, 0x0219 }, -{ 0x021A, 0x021A, 0x021B }, -{ 0x021B, 0x021A, 0x021B }, -{ 0x021C, 0x021C, 0x021D }, -{ 0x021D, 0x021C, 0x021D }, -{ 0x021E, 0x021E, 0x021F }, -{ 0x021F, 0x021E, 0x021F }, -{ 0x0220, 0x0220, 0x019E }, -{ 0x0221, 0x0221, 0x0221 }, -{ 0x0222, 0x0222, 0x0223 }, -{ 0x0223, 0x0222, 0x0223 }, -{ 0x0224, 0x0224, 0x0225 }, -{ 0x0225, 0x0224, 0x0225 }, -{ 0x0226, 0x0226, 0x0227 }, -{ 0x0227, 0x0226, 0x0227 }, -{ 0x0228, 0x0228, 0x0229 }, -{ 0x0229, 0x0228, 0x0229 }, -{ 0x022A, 0x022A, 0x022B }, -{ 0x022B, 0x022A, 0x022B }, -{ 0x022C, 0x022C, 0x022D }, -{ 0x022D, 0x022C, 0x022D }, -{ 0x022E, 0x022E, 0x022F }, -{ 0x022F, 0x022E, 0x022F }, -{ 0x0230, 0x0230, 0x0231 }, -{ 0x0231, 0x0230, 0x0231 }, -{ 0x0232, 0x0232, 0x0233 }, -{ 0x0233, 0x0232, 0x0233 }, -{ 0x0234, 0x0234, 0x0234 }, -{ 0x0235, 0x0235, 0x0235 }, -{ 0x0236, 0x0236, 0x0236 }, -{ 0x0237, 0x0237, 0x0237 }, -{ 0x0238, 0x0238, 0x0238 }, -{ 0x0239, 0x0239, 0x0239 }, -{ 0x023A, 0x023A, 0x023A }, -{ 0x023B, 0x023B, 0x023C }, -{ 0x023C, 0x023B, 0x023C }, -{ 0x023D, 0x023D, 0x019A }, -{ 0x023E, 0x023E, 0x023E }, -{ 0x023F, 0x023F, 0x023F }, -{ 0x0240, 0x0240, 0x0240 }, -{ 0x0241, 0x0241, 0x0294 }, -{ 0x0250, 0x0250, 0x0250 }, -{ 0x0251, 0x0251, 0x0251 }, -{ 0x0252, 0x0252, 0x0252 }, -{ 0x0253, 0x0181, 0x0253 }, -{ 0x0254, 0x0186, 0x0254 }, -{ 0x0255, 0x0255, 0x0255 }, -{ 0x0256, 0x0189, 0x0256 }, -{ 0x0257, 0x018A, 0x0257 }, -{ 0x0258, 0x0258, 0x0258 }, -{ 0x0259, 0x018F, 0x0259 }, -{ 0x025A, 0x025A, 0x025A }, -{ 0x025B, 0x0190, 0x025B }, -{ 0x025C, 0x025C, 0x025C }, -{ 0x025D, 0x025D, 0x025D }, -{ 0x025E, 0x025E, 0x025E }, -{ 0x025F, 0x025F, 0x025F }, -{ 0x0260, 0x0193, 0x0260 }, -{ 0x0261, 0x0261, 0x0261 }, -{ 0x0262, 0x0262, 0x0262 }, -{ 0x0263, 0x0194, 0x0263 }, -{ 0x0264, 0x0264, 0x0264 }, -{ 0x0265, 0x0265, 0x0265 }, -{ 0x0266, 0x0266, 0x0266 }, -{ 0x0267, 0x0267, 0x0267 }, -{ 0x0268, 0x0197, 0x0268 }, -{ 0x0269, 0x0196, 0x0269 }, -{ 0x026A, 0x026A, 0x026A }, -{ 0x026B, 0x026B, 0x026B }, -{ 0x026C, 0x026C, 0x026C }, -{ 0x026D, 0x026D, 0x026D }, -{ 0x026E, 0x026E, 0x026E }, -{ 0x026F, 0x019C, 0x026F }, -{ 0x0270, 0x0270, 0x0270 }, -{ 0x0271, 0x0271, 0x0271 }, -{ 0x0272, 0x019D, 0x0272 }, -{ 0x0273, 0x0273, 0x0273 }, -{ 0x0274, 0x0274, 0x0274 }, -{ 0x0275, 0x019F, 0x0275 }, -{ 0x0276, 0x0276, 0x0276 }, -{ 0x0277, 0x0277, 0x0277 }, -{ 0x0278, 0x0278, 0x0278 }, -{ 0x0279, 0x0279, 0x0279 }, -{ 0x027A, 0x027A, 0x027A }, -{ 0x027B, 0x027B, 0x027B }, -{ 0x027C, 0x027C, 0x027C }, -{ 0x027D, 0x027D, 0x027D }, -{ 0x027E, 0x027E, 0x027E }, -{ 0x027F, 0x027F, 0x027F }, -{ 0x0280, 0x01A6, 0x0280 }, -{ 0x0281, 0x0281, 0x0281 }, -{ 0x0282, 0x0282, 0x0282 }, -{ 0x0283, 0x01A9, 0x0283 }, -{ 0x0284, 0x0284, 0x0284 }, -{ 0x0285, 0x0285, 0x0285 }, -{ 0x0286, 0x0286, 0x0286 }, -{ 0x0287, 0x0287, 0x0287 }, -{ 0x0288, 0x01AE, 0x0288 }, -{ 0x0289, 0x0289, 0x0289 }, -{ 0x028A, 0x01B1, 0x028A }, -{ 0x028B, 0x01B2, 0x028B }, -{ 0x028C, 0x028C, 0x028C }, -{ 0x028D, 0x028D, 0x028D }, -{ 0x028E, 0x028E, 0x028E }, -{ 0x028F, 0x028F, 0x028F }, -{ 0x0290, 0x0290, 0x0290 }, -{ 0x0291, 0x0291, 0x0291 }, -{ 0x0292, 0x01B7, 0x0292 }, -{ 0x0293, 0x0293, 0x0293 }, -{ 0x0294, 0x0241, 0x0294 }, -{ 0x0295, 0x0295, 0x0295 }, -{ 0x0296, 0x0296, 0x0296 }, -{ 0x0297, 0x0297, 0x0297 }, -{ 0x0298, 0x0298, 0x0298 }, -{ 0x0299, 0x0299, 0x0299 }, -{ 0x029A, 0x029A, 0x029A }, -{ 0x029B, 0x029B, 0x029B }, -{ 0x029C, 0x029C, 0x029C }, -{ 0x029D, 0x029D, 0x029D }, -{ 0x029E, 0x029E, 0x029E }, -{ 0x029F, 0x029F, 0x029F }, -{ 0x02A0, 0x02A0, 0x02A0 }, -{ 0x02A1, 0x02A1, 0x02A1 }, -{ 0x02A2, 0x02A2, 0x02A2 }, -{ 0x02A3, 0x02A3, 0x02A3 }, -{ 0x02A4, 0x02A4, 0x02A4 }, -{ 0x02A5, 0x02A5, 0x02A5 }, -{ 0x02A6, 0x02A6, 0x02A6 }, -{ 0x02A7, 0x02A7, 0x02A7 }, -{ 0x02A8, 0x02A8, 0x02A8 }, -{ 0x02A9, 0x02A9, 0x02A9 }, -{ 0x02AA, 0x02AA, 0x02AA }, -{ 0x02AB, 0x02AB, 0x02AB }, -{ 0x02AC, 0x02AC, 0x02AC }, -{ 0x02AD, 0x02AD, 0x02AD }, -{ 0x02AE, 0x02AE, 0x02AE }, -{ 0x02AF, 0x02AF, 0x02AF }, -{ 0x02B0, 0x02B0, 0x02B0 }, -{ 0x02B1, 0x02B1, 0x02B1 }, -{ 0x02B2, 0x02B2, 0x02B2 }, -{ 0x02B3, 0x02B3, 0x02B3 }, -{ 0x02B4, 0x02B4, 0x02B4 }, -{ 0x02B5, 0x02B5, 0x02B5 }, -{ 0x02B6, 0x02B6, 0x02B6 }, -{ 0x02B7, 0x02B7, 0x02B7 }, -{ 0x02B8, 0x02B8, 0x02B8 }, -{ 0x02B9, 0x02B9, 0x02B9 }, -{ 0x02BA, 0x02BA, 0x02BA }, -{ 0x02BB, 0x02BB, 0x02BB }, -{ 0x02BC, 0x02BC, 0x02BC }, -{ 0x02BD, 0x02BD, 0x02BD }, -{ 0x02BE, 0x02BE, 0x02BE }, -{ 0x02BF, 0x02BF, 0x02BF }, -{ 0x02C0, 0x02C0, 0x02C0 }, -{ 0x02C1, 0x02C1, 0x02C1 }, -{ 0x02C6, 0x02C6, 0x02C6 }, -{ 0x02C7, 0x02C7, 0x02C7 }, -{ 0x02C8, 0x02C8, 0x02C8 }, -{ 0x02C9, 0x02C9, 0x02C9 }, -{ 0x02CA, 0x02CA, 0x02CA }, -{ 0x02CB, 0x02CB, 0x02CB }, -{ 0x02CC, 0x02CC, 0x02CC }, -{ 0x02CD, 0x02CD, 0x02CD }, -{ 0x02CE, 0x02CE, 0x02CE }, -{ 0x02CF, 0x02CF, 0x02CF }, -{ 0x02D0, 0x02D0, 0x02D0 }, -{ 0x02D1, 0x02D1, 0x02D1 }, -{ 0x02E0, 0x02E0, 0x02E0 }, -{ 0x02E1, 0x02E1, 0x02E1 }, -{ 0x02E2, 0x02E2, 0x02E2 }, -{ 0x02E3, 0x02E3, 0x02E3 }, -{ 0x02E4, 0x02E4, 0x02E4 }, -{ 0x02EE, 0x02EE, 0x02EE }, -{ 0x0300, 0x0300, 0x0300 }, -{ 0x0301, 0x0301, 0x0301 }, -{ 0x0302, 0x0302, 0x0302 }, -{ 0x0303, 0x0303, 0x0303 }, -{ 0x0304, 0x0304, 0x0304 }, -{ 0x0305, 0x0305, 0x0305 }, -{ 0x0306, 0x0306, 0x0306 }, -{ 0x0307, 0x0307, 0x0307 }, -{ 0x0308, 0x0308, 0x0308 }, -{ 0x0309, 0x0309, 0x0309 }, -{ 0x030A, 0x030A, 0x030A }, -{ 0x030B, 0x030B, 0x030B }, -{ 0x030C, 0x030C, 0x030C }, -{ 0x030D, 0x030D, 0x030D }, -{ 0x030E, 0x030E, 0x030E }, -{ 0x030F, 0x030F, 0x030F }, -{ 0x0310, 0x0310, 0x0310 }, -{ 0x0311, 0x0311, 0x0311 }, -{ 0x0312, 0x0312, 0x0312 }, -{ 0x0313, 0x0313, 0x0313 }, -{ 0x0314, 0x0314, 0x0314 }, -{ 0x0315, 0x0315, 0x0315 }, -{ 0x0316, 0x0316, 0x0316 }, -{ 0x0317, 0x0317, 0x0317 }, -{ 0x0318, 0x0318, 0x0318 }, -{ 0x0319, 0x0319, 0x0319 }, -{ 0x031A, 0x031A, 0x031A }, -{ 0x031B, 0x031B, 0x031B }, -{ 0x031C, 0x031C, 0x031C }, -{ 0x031D, 0x031D, 0x031D }, -{ 0x031E, 0x031E, 0x031E }, -{ 0x031F, 0x031F, 0x031F }, -{ 0x0320, 0x0320, 0x0320 }, -{ 0x0321, 0x0321, 0x0321 }, -{ 0x0322, 0x0322, 0x0322 }, -{ 0x0323, 0x0323, 0x0323 }, -{ 0x0324, 0x0324, 0x0324 }, -{ 0x0325, 0x0325, 0x0325 }, -{ 0x0326, 0x0326, 0x0326 }, -{ 0x0327, 0x0327, 0x0327 }, -{ 0x0328, 0x0328, 0x0328 }, -{ 0x0329, 0x0329, 0x0329 }, -{ 0x032A, 0x032A, 0x032A }, -{ 0x032B, 0x032B, 0x032B }, -{ 0x032C, 0x032C, 0x032C }, -{ 0x032D, 0x032D, 0x032D }, -{ 0x032E, 0x032E, 0x032E }, -{ 0x032F, 0x032F, 0x032F }, -{ 0x0330, 0x0330, 0x0330 }, -{ 0x0331, 0x0331, 0x0331 }, -{ 0x0332, 0x0332, 0x0332 }, -{ 0x0333, 0x0333, 0x0333 }, -{ 0x0334, 0x0334, 0x0334 }, -{ 0x0335, 0x0335, 0x0335 }, -{ 0x0336, 0x0336, 0x0336 }, -{ 0x0337, 0x0337, 0x0337 }, -{ 0x0338, 0x0338, 0x0338 }, -{ 0x0339, 0x0339, 0x0339 }, -{ 0x033A, 0x033A, 0x033A }, -{ 0x033B, 0x033B, 0x033B }, -{ 0x033C, 0x033C, 0x033C }, -{ 0x033D, 0x033D, 0x033D }, -{ 0x033E, 0x033E, 0x033E }, -{ 0x033F, 0x033F, 0x033F }, -{ 0x0340, 0x0340, 0x0340 }, -{ 0x0341, 0x0341, 0x0341 }, -{ 0x0342, 0x0342, 0x0342 }, -{ 0x0343, 0x0343, 0x0343 }, -{ 0x0344, 0x0344, 0x0344 }, -{ 0x0345, 0x0399, 0x0345 }, -{ 0x0346, 0x0346, 0x0346 }, -{ 0x0347, 0x0347, 0x0347 }, -{ 0x0348, 0x0348, 0x0348 }, -{ 0x0349, 0x0349, 0x0349 }, -{ 0x034A, 0x034A, 0x034A }, -{ 0x034B, 0x034B, 0x034B }, -{ 0x034C, 0x034C, 0x034C }, -{ 0x034D, 0x034D, 0x034D }, -{ 0x034E, 0x034E, 0x034E }, -{ 0x034F, 0x034F, 0x034F }, -{ 0x0350, 0x0350, 0x0350 }, -{ 0x0351, 0x0351, 0x0351 }, -{ 0x0352, 0x0352, 0x0352 }, -{ 0x0353, 0x0353, 0x0353 }, -{ 0x0354, 0x0354, 0x0354 }, -{ 0x0355, 0x0355, 0x0355 }, -{ 0x0356, 0x0356, 0x0356 }, -{ 0x0357, 0x0357, 0x0357 }, -{ 0x0358, 0x0358, 0x0358 }, -{ 0x0359, 0x0359, 0x0359 }, -{ 0x035A, 0x035A, 0x035A }, -{ 0x035B, 0x035B, 0x035B }, -{ 0x035C, 0x035C, 0x035C }, -{ 0x035D, 0x035D, 0x035D }, -{ 0x035E, 0x035E, 0x035E }, -{ 0x035F, 0x035F, 0x035F }, -{ 0x0360, 0x0360, 0x0360 }, -{ 0x0361, 0x0361, 0x0361 }, -{ 0x0362, 0x0362, 0x0362 }, -{ 0x0363, 0x0363, 0x0363 }, -{ 0x0364, 0x0364, 0x0364 }, -{ 0x0365, 0x0365, 0x0365 }, -{ 0x0366, 0x0366, 0x0366 }, -{ 0x0367, 0x0367, 0x0367 }, -{ 0x0368, 0x0368, 0x0368 }, -{ 0x0369, 0x0369, 0x0369 }, -{ 0x036A, 0x036A, 0x036A }, -{ 0x036B, 0x036B, 0x036B }, -{ 0x036C, 0x036C, 0x036C }, -{ 0x036D, 0x036D, 0x036D }, -{ 0x036E, 0x036E, 0x036E }, -{ 0x036F, 0x036F, 0x036F }, -{ 0x037A, 0x037A, 0x037A }, -{ 0x0386, 0x0386, 0x03AC }, -{ 0x0388, 0x0388, 0x03AD }, -{ 0x0389, 0x0389, 0x03AE }, -{ 0x038A, 0x038A, 0x03AF }, -{ 0x038C, 0x038C, 0x03CC }, -{ 0x038E, 0x038E, 0x03CD }, -{ 0x038F, 0x038F, 0x03CE }, -{ 0x0390, 0x0390, 0x0390 }, -{ 0x0391, 0x0391, 0x03B1 }, -{ 0x0392, 0x0392, 0x03B2 }, -{ 0x0393, 0x0393, 0x03B3 }, -{ 0x0394, 0x0394, 0x03B4 }, -{ 0x0395, 0x0395, 0x03B5 }, -{ 0x0396, 0x0396, 0x03B6 }, -{ 0x0397, 0x0397, 0x03B7 }, -{ 0x0398, 0x0398, 0x03B8 }, -{ 0x0399, 0x0399, 0x03B9 }, -{ 0x039A, 0x039A, 0x03BA }, -{ 0x039B, 0x039B, 0x03BB }, -{ 0x039C, 0x039C, 0x03BC }, -{ 0x039D, 0x039D, 0x03BD }, -{ 0x039E, 0x039E, 0x03BE }, -{ 0x039F, 0x039F, 0x03BF }, -{ 0x03A0, 0x03A0, 0x03C0 }, -{ 0x03A1, 0x03A1, 0x03C1 }, -{ 0x03A3, 0x03A3, 0x03C3 }, -{ 0x03A4, 0x03A4, 0x03C4 }, -{ 0x03A5, 0x03A5, 0x03C5 }, -{ 0x03A6, 0x03A6, 0x03C6 }, -{ 0x03A7, 0x03A7, 0x03C7 }, -{ 0x03A8, 0x03A8, 0x03C8 }, -{ 0x03A9, 0x03A9, 0x03C9 }, -{ 0x03AA, 0x03AA, 0x03CA }, -{ 0x03AB, 0x03AB, 0x03CB }, -{ 0x03AC, 0x0386, 0x03AC }, -{ 0x03AD, 0x0388, 0x03AD }, -{ 0x03AE, 0x0389, 0x03AE }, -{ 0x03AF, 0x038A, 0x03AF }, -{ 0x03B0, 0x03B0, 0x03B0 }, -{ 0x03B1, 0x0391, 0x03B1 }, -{ 0x03B2, 0x0392, 0x03B2 }, -{ 0x03B3, 0x0393, 0x03B3 }, -{ 0x03B4, 0x0394, 0x03B4 }, -{ 0x03B5, 0x0395, 0x03B5 }, -{ 0x03B6, 0x0396, 0x03B6 }, -{ 0x03B7, 0x0397, 0x03B7 }, -{ 0x03B8, 0x0398, 0x03B8 }, -{ 0x03B9, 0x0399, 0x03B9 }, -{ 0x03BA, 0x039A, 0x03BA }, -{ 0x03BB, 0x039B, 0x03BB }, -{ 0x03BC, 0x039C, 0x03BC }, -{ 0x03BD, 0x039D, 0x03BD }, -{ 0x03BE, 0x039E, 0x03BE }, -{ 0x03BF, 0x039F, 0x03BF }, -{ 0x03C0, 0x03A0, 0x03C0 }, -{ 0x03C1, 0x03A1, 0x03C1 }, -{ 0x03C2, 0x03A3, 0x03C2 }, -{ 0x03C3, 0x03A3, 0x03C3 }, -{ 0x03C4, 0x03A4, 0x03C4 }, -{ 0x03C5, 0x03A5, 0x03C5 }, -{ 0x03C6, 0x03A6, 0x03C6 }, -{ 0x03C7, 0x03A7, 0x03C7 }, -{ 0x03C8, 0x03A8, 0x03C8 }, -{ 0x03C9, 0x03A9, 0x03C9 }, -{ 0x03CA, 0x03AA, 0x03CA }, -{ 0x03CB, 0x03AB, 0x03CB }, -{ 0x03CC, 0x038C, 0x03CC }, -{ 0x03CD, 0x038E, 0x03CD }, -{ 0x03CE, 0x038F, 0x03CE }, -{ 0x03D0, 0x0392, 0x03D0 }, -{ 0x03D1, 0x0398, 0x03D1 }, -{ 0x03D2, 0x03D2, 0x03D2 }, -{ 0x03D3, 0x03D3, 0x03D3 }, -{ 0x03D4, 0x03D4, 0x03D4 }, -{ 0x03D5, 0x03A6, 0x03D5 }, -{ 0x03D6, 0x03A0, 0x03D6 }, -{ 0x03D7, 0x03D7, 0x03D7 }, -{ 0x03D8, 0x03D8, 0x03D9 }, -{ 0x03D9, 0x03D8, 0x03D9 }, -{ 0x03DA, 0x03DA, 0x03DB }, -{ 0x03DB, 0x03DA, 0x03DB }, -{ 0x03DC, 0x03DC, 0x03DD }, -{ 0x03DD, 0x03DC, 0x03DD }, -{ 0x03DE, 0x03DE, 0x03DF }, -{ 0x03DF, 0x03DE, 0x03DF }, -{ 0x03E0, 0x03E0, 0x03E1 }, -{ 0x03E1, 0x03E0, 0x03E1 }, -{ 0x03E2, 0x03E2, 0x03E3 }, -{ 0x03E3, 0x03E2, 0x03E3 }, -{ 0x03E4, 0x03E4, 0x03E5 }, -{ 0x03E5, 0x03E4, 0x03E5 }, -{ 0x03E6, 0x03E6, 0x03E7 }, -{ 0x03E7, 0x03E6, 0x03E7 }, -{ 0x03E8, 0x03E8, 0x03E9 }, -{ 0x03E9, 0x03E8, 0x03E9 }, -{ 0x03EA, 0x03EA, 0x03EB }, -{ 0x03EB, 0x03EA, 0x03EB }, -{ 0x03EC, 0x03EC, 0x03ED }, -{ 0x03ED, 0x03EC, 0x03ED }, -{ 0x03EE, 0x03EE, 0x03EF }, -{ 0x03EF, 0x03EE, 0x03EF }, -{ 0x03F0, 0x039A, 0x03F0 }, -{ 0x03F1, 0x03A1, 0x03F1 }, -{ 0x03F2, 0x03F9, 0x03F2 }, -{ 0x03F3, 0x03F3, 0x03F3 }, -{ 0x03F4, 0x03F4, 0x03B8 }, -{ 0x03F5, 0x0395, 0x03F5 }, -{ 0x03F7, 0x03F7, 0x03F8 }, -{ 0x03F8, 0x03F7, 0x03F8 }, -{ 0x03F9, 0x03F9, 0x03F2 }, -{ 0x03FA, 0x03FA, 0x03FB }, -{ 0x03FB, 0x03FA, 0x03FB }, -{ 0x03FC, 0x03FC, 0x03FC }, -{ 0x03FD, 0x03FD, 0x03FD }, -{ 0x03FE, 0x03FE, 0x03FE }, -{ 0x03FF, 0x03FF, 0x03FF }, -{ 0x0400, 0x0400, 0x0450 }, -{ 0x0401, 0x0401, 0x0451 }, -{ 0x0402, 0x0402, 0x0452 }, -{ 0x0403, 0x0403, 0x0453 }, -{ 0x0404, 0x0404, 0x0454 }, -{ 0x0405, 0x0405, 0x0455 }, -{ 0x0406, 0x0406, 0x0456 }, -{ 0x0407, 0x0407, 0x0457 }, -{ 0x0408, 0x0408, 0x0458 }, -{ 0x0409, 0x0409, 0x0459 }, -{ 0x040A, 0x040A, 0x045A }, -{ 0x040B, 0x040B, 0x045B }, -{ 0x040C, 0x040C, 0x045C }, -{ 0x040D, 0x040D, 0x045D }, -{ 0x040E, 0x040E, 0x045E }, -{ 0x040F, 0x040F, 0x045F }, -{ 0x0410, 0x0410, 0x0430 }, -{ 0x0411, 0x0411, 0x0431 }, -{ 0x0412, 0x0412, 0x0432 }, -{ 0x0413, 0x0413, 0x0433 }, -{ 0x0414, 0x0414, 0x0434 }, -{ 0x0415, 0x0415, 0x0435 }, -{ 0x0416, 0x0416, 0x0436 }, -{ 0x0417, 0x0417, 0x0437 }, -{ 0x0418, 0x0418, 0x0438 }, -{ 0x0419, 0x0419, 0x0439 }, -{ 0x041A, 0x041A, 0x043A }, -{ 0x041B, 0x041B, 0x043B }, -{ 0x041C, 0x041C, 0x043C }, -{ 0x041D, 0x041D, 0x043D }, -{ 0x041E, 0x041E, 0x043E }, -{ 0x041F, 0x041F, 0x043F }, -{ 0x0420, 0x0420, 0x0440 }, -{ 0x0421, 0x0421, 0x0441 }, -{ 0x0422, 0x0422, 0x0442 }, -{ 0x0423, 0x0423, 0x0443 }, -{ 0x0424, 0x0424, 0x0444 }, -{ 0x0425, 0x0425, 0x0445 }, -{ 0x0426, 0x0426, 0x0446 }, -{ 0x0427, 0x0427, 0x0447 }, -{ 0x0428, 0x0428, 0x0448 }, -{ 0x0429, 0x0429, 0x0449 }, -{ 0x042A, 0x042A, 0x044A }, -{ 0x042B, 0x042B, 0x044B }, -{ 0x042C, 0x042C, 0x044C }, -{ 0x042D, 0x042D, 0x044D }, -{ 0x042E, 0x042E, 0x044E }, -{ 0x042F, 0x042F, 0x044F }, -{ 0x0430, 0x0410, 0x0430 }, -{ 0x0431, 0x0411, 0x0431 }, -{ 0x0432, 0x0412, 0x0432 }, -{ 0x0433, 0x0413, 0x0433 }, -{ 0x0434, 0x0414, 0x0434 }, -{ 0x0435, 0x0415, 0x0435 }, -{ 0x0436, 0x0416, 0x0436 }, -{ 0x0437, 0x0417, 0x0437 }, -{ 0x0438, 0x0418, 0x0438 }, -{ 0x0439, 0x0419, 0x0439 }, -{ 0x043A, 0x041A, 0x043A }, -{ 0x043B, 0x041B, 0x043B }, -{ 0x043C, 0x041C, 0x043C }, -{ 0x043D, 0x041D, 0x043D }, -{ 0x043E, 0x041E, 0x043E }, -{ 0x043F, 0x041F, 0x043F }, -{ 0x0440, 0x0420, 0x0440 }, -{ 0x0441, 0x0421, 0x0441 }, -{ 0x0442, 0x0422, 0x0442 }, -{ 0x0443, 0x0423, 0x0443 }, -{ 0x0444, 0x0424, 0x0444 }, -{ 0x0445, 0x0425, 0x0445 }, -{ 0x0446, 0x0426, 0x0446 }, -{ 0x0447, 0x0427, 0x0447 }, -{ 0x0448, 0x0428, 0x0448 }, -{ 0x0449, 0x0429, 0x0449 }, -{ 0x044A, 0x042A, 0x044A }, -{ 0x044B, 0x042B, 0x044B }, -{ 0x044C, 0x042C, 0x044C }, -{ 0x044D, 0x042D, 0x044D }, -{ 0x044E, 0x042E, 0x044E }, -{ 0x044F, 0x042F, 0x044F }, -{ 0x0450, 0x0400, 0x0450 }, -{ 0x0451, 0x0401, 0x0451 }, -{ 0x0452, 0x0402, 0x0452 }, -{ 0x0453, 0x0403, 0x0453 }, -{ 0x0454, 0x0404, 0x0454 }, -{ 0x0455, 0x0405, 0x0455 }, -{ 0x0456, 0x0406, 0x0456 }, -{ 0x0457, 0x0407, 0x0457 }, -{ 0x0458, 0x0408, 0x0458 }, -{ 0x0459, 0x0409, 0x0459 }, -{ 0x045A, 0x040A, 0x045A }, -{ 0x045B, 0x040B, 0x045B }, -{ 0x045C, 0x040C, 0x045C }, -{ 0x045D, 0x040D, 0x045D }, -{ 0x045E, 0x040E, 0x045E }, -{ 0x045F, 0x040F, 0x045F }, -{ 0x0460, 0x0460, 0x0461 }, -{ 0x0461, 0x0460, 0x0461 }, -{ 0x0462, 0x0462, 0x0463 }, -{ 0x0463, 0x0462, 0x0463 }, -{ 0x0464, 0x0464, 0x0465 }, -{ 0x0465, 0x0464, 0x0465 }, -{ 0x0466, 0x0466, 0x0467 }, -{ 0x0467, 0x0466, 0x0467 }, -{ 0x0468, 0x0468, 0x0469 }, -{ 0x0469, 0x0468, 0x0469 }, -{ 0x046A, 0x046A, 0x046B }, -{ 0x046B, 0x046A, 0x046B }, -{ 0x046C, 0x046C, 0x046D }, -{ 0x046D, 0x046C, 0x046D }, -{ 0x046E, 0x046E, 0x046F }, -{ 0x046F, 0x046E, 0x046F }, -{ 0x0470, 0x0470, 0x0471 }, -{ 0x0471, 0x0470, 0x0471 }, -{ 0x0472, 0x0472, 0x0473 }, -{ 0x0473, 0x0472, 0x0473 }, -{ 0x0474, 0x0474, 0x0475 }, -{ 0x0475, 0x0474, 0x0475 }, -{ 0x0476, 0x0476, 0x0477 }, -{ 0x0477, 0x0476, 0x0477 }, -{ 0x0478, 0x0478, 0x0479 }, -{ 0x0479, 0x0478, 0x0479 }, -{ 0x047A, 0x047A, 0x047B }, -{ 0x047B, 0x047A, 0x047B }, -{ 0x047C, 0x047C, 0x047D }, -{ 0x047D, 0x047C, 0x047D }, -{ 0x047E, 0x047E, 0x047F }, -{ 0x047F, 0x047E, 0x047F }, -{ 0x0480, 0x0480, 0x0481 }, -{ 0x0481, 0x0480, 0x0481 }, -{ 0x0483, 0x0483, 0x0483 }, -{ 0x0484, 0x0484, 0x0484 }, -{ 0x0485, 0x0485, 0x0485 }, -{ 0x0486, 0x0486, 0x0486 }, -{ 0x048A, 0x048A, 0x048B }, -{ 0x048B, 0x048A, 0x048B }, -{ 0x048C, 0x048C, 0x048D }, -{ 0x048D, 0x048C, 0x048D }, -{ 0x048E, 0x048E, 0x048F }, -{ 0x048F, 0x048E, 0x048F }, -{ 0x0490, 0x0490, 0x0491 }, -{ 0x0491, 0x0490, 0x0491 }, -{ 0x0492, 0x0492, 0x0493 }, -{ 0x0493, 0x0492, 0x0493 }, -{ 0x0494, 0x0494, 0x0495 }, -{ 0x0495, 0x0494, 0x0495 }, -{ 0x0496, 0x0496, 0x0497 }, -{ 0x0497, 0x0496, 0x0497 }, -{ 0x0498, 0x0498, 0x0499 }, -{ 0x0499, 0x0498, 0x0499 }, -{ 0x049A, 0x049A, 0x049B }, -{ 0x049B, 0x049A, 0x049B }, -{ 0x049C, 0x049C, 0x049D }, -{ 0x049D, 0x049C, 0x049D }, -{ 0x049E, 0x049E, 0x049F }, -{ 0x049F, 0x049E, 0x049F }, -{ 0x04A0, 0x04A0, 0x04A1 }, -{ 0x04A1, 0x04A0, 0x04A1 }, -{ 0x04A2, 0x04A2, 0x04A3 }, -{ 0x04A3, 0x04A2, 0x04A3 }, -{ 0x04A4, 0x04A4, 0x04A5 }, -{ 0x04A5, 0x04A4, 0x04A5 }, -{ 0x04A6, 0x04A6, 0x04A7 }, -{ 0x04A7, 0x04A6, 0x04A7 }, -{ 0x04A8, 0x04A8, 0x04A9 }, -{ 0x04A9, 0x04A8, 0x04A9 }, -{ 0x04AA, 0x04AA, 0x04AB }, -{ 0x04AB, 0x04AA, 0x04AB }, -{ 0x04AC, 0x04AC, 0x04AD }, -{ 0x04AD, 0x04AC, 0x04AD }, -{ 0x04AE, 0x04AE, 0x04AF }, -{ 0x04AF, 0x04AE, 0x04AF }, -{ 0x04B0, 0x04B0, 0x04B1 }, -{ 0x04B1, 0x04B0, 0x04B1 }, -{ 0x04B2, 0x04B2, 0x04B3 }, -{ 0x04B3, 0x04B2, 0x04B3 }, -{ 0x04B4, 0x04B4, 0x04B5 }, -{ 0x04B5, 0x04B4, 0x04B5 }, -{ 0x04B6, 0x04B6, 0x04B7 }, -{ 0x04B7, 0x04B6, 0x04B7 }, -{ 0x04B8, 0x04B8, 0x04B9 }, -{ 0x04B9, 0x04B8, 0x04B9 }, -{ 0x04BA, 0x04BA, 0x04BB }, -{ 0x04BB, 0x04BA, 0x04BB }, -{ 0x04BC, 0x04BC, 0x04BD }, -{ 0x04BD, 0x04BC, 0x04BD }, -{ 0x04BE, 0x04BE, 0x04BF }, -{ 0x04BF, 0x04BE, 0x04BF }, -{ 0x04C0, 0x04C0, 0x04C0 }, -{ 0x04C1, 0x04C1, 0x04C2 }, -{ 0x04C2, 0x04C1, 0x04C2 }, -{ 0x04C3, 0x04C3, 0x04C4 }, -{ 0x04C4, 0x04C3, 0x04C4 }, -{ 0x04C5, 0x04C5, 0x04C6 }, -{ 0x04C6, 0x04C5, 0x04C6 }, -{ 0x04C7, 0x04C7, 0x04C8 }, -{ 0x04C8, 0x04C7, 0x04C8 }, -{ 0x04C9, 0x04C9, 0x04CA }, -{ 0x04CA, 0x04C9, 0x04CA }, -{ 0x04CB, 0x04CB, 0x04CC }, -{ 0x04CC, 0x04CB, 0x04CC }, -{ 0x04CD, 0x04CD, 0x04CE }, -{ 0x04CE, 0x04CD, 0x04CE }, -{ 0x04D0, 0x04D0, 0x04D1 }, -{ 0x04D1, 0x04D0, 0x04D1 }, -{ 0x04D2, 0x04D2, 0x04D3 }, -{ 0x04D3, 0x04D2, 0x04D3 }, -{ 0x04D4, 0x04D4, 0x04D5 }, -{ 0x04D5, 0x04D4, 0x04D5 }, -{ 0x04D6, 0x04D6, 0x04D7 }, -{ 0x04D7, 0x04D6, 0x04D7 }, -{ 0x04D8, 0x04D8, 0x04D9 }, -{ 0x04D9, 0x04D8, 0x04D9 }, -{ 0x04DA, 0x04DA, 0x04DB }, -{ 0x04DB, 0x04DA, 0x04DB }, -{ 0x04DC, 0x04DC, 0x04DD }, -{ 0x04DD, 0x04DC, 0x04DD }, -{ 0x04DE, 0x04DE, 0x04DF }, -{ 0x04DF, 0x04DE, 0x04DF }, -{ 0x04E0, 0x04E0, 0x04E1 }, -{ 0x04E1, 0x04E0, 0x04E1 }, -{ 0x04E2, 0x04E2, 0x04E3 }, -{ 0x04E3, 0x04E2, 0x04E3 }, -{ 0x04E4, 0x04E4, 0x04E5 }, -{ 0x04E5, 0x04E4, 0x04E5 }, -{ 0x04E6, 0x04E6, 0x04E7 }, -{ 0x04E7, 0x04E6, 0x04E7 }, -{ 0x04E8, 0x04E8, 0x04E9 }, -{ 0x04E9, 0x04E8, 0x04E9 }, -{ 0x04EA, 0x04EA, 0x04EB }, -{ 0x04EB, 0x04EA, 0x04EB }, -{ 0x04EC, 0x04EC, 0x04ED }, -{ 0x04ED, 0x04EC, 0x04ED }, -{ 0x04EE, 0x04EE, 0x04EF }, -{ 0x04EF, 0x04EE, 0x04EF }, -{ 0x04F0, 0x04F0, 0x04F1 }, -{ 0x04F1, 0x04F0, 0x04F1 }, -{ 0x04F2, 0x04F2, 0x04F3 }, -{ 0x04F3, 0x04F2, 0x04F3 }, -{ 0x04F4, 0x04F4, 0x04F5 }, -{ 0x04F5, 0x04F4, 0x04F5 }, -{ 0x04F6, 0x04F6, 0x04F7 }, -{ 0x04F7, 0x04F6, 0x04F7 }, -{ 0x04F8, 0x04F8, 0x04F9 }, -{ 0x04F9, 0x04F8, 0x04F9 }, -{ 0x0500, 0x0500, 0x0501 }, -{ 0x0501, 0x0500, 0x0501 }, -{ 0x0502, 0x0502, 0x0503 }, -{ 0x0503, 0x0502, 0x0503 }, -{ 0x0504, 0x0504, 0x0505 }, -{ 0x0505, 0x0504, 0x0505 }, -{ 0x0506, 0x0506, 0x0507 }, -{ 0x0507, 0x0506, 0x0507 }, -{ 0x0508, 0x0508, 0x0509 }, -{ 0x0509, 0x0508, 0x0509 }, -{ 0x050A, 0x050A, 0x050B }, -{ 0x050B, 0x050A, 0x050B }, -{ 0x050C, 0x050C, 0x050D }, -{ 0x050D, 0x050C, 0x050D }, -{ 0x050E, 0x050E, 0x050F }, -{ 0x050F, 0x050E, 0x050F }, -{ 0x0531, 0x0531, 0x0561 }, -{ 0x0532, 0x0532, 0x0562 }, -{ 0x0533, 0x0533, 0x0563 }, -{ 0x0534, 0x0534, 0x0564 }, -{ 0x0535, 0x0535, 0x0565 }, -{ 0x0536, 0x0536, 0x0566 }, -{ 0x0537, 0x0537, 0x0567 }, -{ 0x0538, 0x0538, 0x0568 }, -{ 0x0539, 0x0539, 0x0569 }, -{ 0x053A, 0x053A, 0x056A }, -{ 0x053B, 0x053B, 0x056B }, -{ 0x053C, 0x053C, 0x056C }, -{ 0x053D, 0x053D, 0x056D }, -{ 0x053E, 0x053E, 0x056E }, -{ 0x053F, 0x053F, 0x056F }, -{ 0x0540, 0x0540, 0x0570 }, -{ 0x0541, 0x0541, 0x0571 }, -{ 0x0542, 0x0542, 0x0572 }, -{ 0x0543, 0x0543, 0x0573 }, -{ 0x0544, 0x0544, 0x0574 }, -{ 0x0545, 0x0545, 0x0575 }, -{ 0x0546, 0x0546, 0x0576 }, -{ 0x0547, 0x0547, 0x0577 }, -{ 0x0548, 0x0548, 0x0578 }, -{ 0x0549, 0x0549, 0x0579 }, -{ 0x054A, 0x054A, 0x057A }, -{ 0x054B, 0x054B, 0x057B }, -{ 0x054C, 0x054C, 0x057C }, -{ 0x054D, 0x054D, 0x057D }, -{ 0x054E, 0x054E, 0x057E }, -{ 0x054F, 0x054F, 0x057F }, -{ 0x0550, 0x0550, 0x0580 }, -{ 0x0551, 0x0551, 0x0581 }, -{ 0x0552, 0x0552, 0x0582 }, -{ 0x0553, 0x0553, 0x0583 }, -{ 0x0554, 0x0554, 0x0584 }, -{ 0x0555, 0x0555, 0x0585 }, -{ 0x0556, 0x0556, 0x0586 }, -{ 0x0559, 0x0559, 0x0559 }, -{ 0x0561, 0x0531, 0x0561 }, -{ 0x0562, 0x0532, 0x0562 }, -{ 0x0563, 0x0533, 0x0563 }, -{ 0x0564, 0x0534, 0x0564 }, -{ 0x0565, 0x0535, 0x0565 }, -{ 0x0566, 0x0536, 0x0566 }, -{ 0x0567, 0x0537, 0x0567 }, -{ 0x0568, 0x0538, 0x0568 }, -{ 0x0569, 0x0539, 0x0569 }, -{ 0x056A, 0x053A, 0x056A }, -{ 0x056B, 0x053B, 0x056B }, -{ 0x056C, 0x053C, 0x056C }, -{ 0x056D, 0x053D, 0x056D }, -{ 0x056E, 0x053E, 0x056E }, -{ 0x056F, 0x053F, 0x056F }, -{ 0x0570, 0x0540, 0x0570 }, -{ 0x0571, 0x0541, 0x0571 }, -{ 0x0572, 0x0542, 0x0572 }, -{ 0x0573, 0x0543, 0x0573 }, -{ 0x0574, 0x0544, 0x0574 }, -{ 0x0575, 0x0545, 0x0575 }, -{ 0x0576, 0x0546, 0x0576 }, -{ 0x0577, 0x0547, 0x0577 }, -{ 0x0578, 0x0548, 0x0578 }, -{ 0x0579, 0x0549, 0x0579 }, -{ 0x057A, 0x054A, 0x057A }, -{ 0x057B, 0x054B, 0x057B }, -{ 0x057C, 0x054C, 0x057C }, -{ 0x057D, 0x054D, 0x057D }, -{ 0x057E, 0x054E, 0x057E }, -{ 0x057F, 0x054F, 0x057F }, -{ 0x0580, 0x0550, 0x0580 }, -{ 0x0581, 0x0551, 0x0581 }, -{ 0x0582, 0x0552, 0x0582 }, -{ 0x0583, 0x0553, 0x0583 }, -{ 0x0584, 0x0554, 0x0584 }, -{ 0x0585, 0x0555, 0x0585 }, -{ 0x0586, 0x0556, 0x0586 }, -{ 0x0587, 0x0587, 0x0587 }, -{ 0x0591, 0x0591, 0x0591 }, -{ 0x0592, 0x0592, 0x0592 }, -{ 0x0593, 0x0593, 0x0593 }, -{ 0x0594, 0x0594, 0x0594 }, -{ 0x0595, 0x0595, 0x0595 }, -{ 0x0596, 0x0596, 0x0596 }, -{ 0x0597, 0x0597, 0x0597 }, -{ 0x0598, 0x0598, 0x0598 }, -{ 0x0599, 0x0599, 0x0599 }, -{ 0x059A, 0x059A, 0x059A }, -{ 0x059B, 0x059B, 0x059B }, -{ 0x059C, 0x059C, 0x059C }, -{ 0x059D, 0x059D, 0x059D }, -{ 0x059E, 0x059E, 0x059E }, -{ 0x059F, 0x059F, 0x059F }, -{ 0x05A0, 0x05A0, 0x05A0 }, -{ 0x05A1, 0x05A1, 0x05A1 }, -{ 0x05A2, 0x05A2, 0x05A2 }, -{ 0x05A3, 0x05A3, 0x05A3 }, -{ 0x05A4, 0x05A4, 0x05A4 }, -{ 0x05A5, 0x05A5, 0x05A5 }, -{ 0x05A6, 0x05A6, 0x05A6 }, -{ 0x05A7, 0x05A7, 0x05A7 }, -{ 0x05A8, 0x05A8, 0x05A8 }, -{ 0x05A9, 0x05A9, 0x05A9 }, -{ 0x05AA, 0x05AA, 0x05AA }, -{ 0x05AB, 0x05AB, 0x05AB }, -{ 0x05AC, 0x05AC, 0x05AC }, -{ 0x05AD, 0x05AD, 0x05AD }, -{ 0x05AE, 0x05AE, 0x05AE }, -{ 0x05AF, 0x05AF, 0x05AF }, -{ 0x05B0, 0x05B0, 0x05B0 }, -{ 0x05B1, 0x05B1, 0x05B1 }, -{ 0x05B2, 0x05B2, 0x05B2 }, -{ 0x05B3, 0x05B3, 0x05B3 }, -{ 0x05B4, 0x05B4, 0x05B4 }, -{ 0x05B5, 0x05B5, 0x05B5 }, -{ 0x05B6, 0x05B6, 0x05B6 }, -{ 0x05B7, 0x05B7, 0x05B7 }, -{ 0x05B8, 0x05B8, 0x05B8 }, -{ 0x05B9, 0x05B9, 0x05B9 }, -{ 0x05BB, 0x05BB, 0x05BB }, -{ 0x05BC, 0x05BC, 0x05BC }, -{ 0x05BD, 0x05BD, 0x05BD }, -{ 0x05BF, 0x05BF, 0x05BF }, -{ 0x05C1, 0x05C1, 0x05C1 }, -{ 0x05C2, 0x05C2, 0x05C2 }, -{ 0x05C4, 0x05C4, 0x05C4 }, -{ 0x05C5, 0x05C5, 0x05C5 }, -{ 0x05C7, 0x05C7, 0x05C7 }, -{ 0x05D0, 0x05D0, 0x05D0 }, -{ 0x05D1, 0x05D1, 0x05D1 }, -{ 0x05D2, 0x05D2, 0x05D2 }, -{ 0x05D3, 0x05D3, 0x05D3 }, -{ 0x05D4, 0x05D4, 0x05D4 }, -{ 0x05D5, 0x05D5, 0x05D5 }, -{ 0x05D6, 0x05D6, 0x05D6 }, -{ 0x05D7, 0x05D7, 0x05D7 }, -{ 0x05D8, 0x05D8, 0x05D8 }, -{ 0x05D9, 0x05D9, 0x05D9 }, -{ 0x05DA, 0x05DA, 0x05DA }, -{ 0x05DB, 0x05DB, 0x05DB }, -{ 0x05DC, 0x05DC, 0x05DC }, -{ 0x05DD, 0x05DD, 0x05DD }, -{ 0x05DE, 0x05DE, 0x05DE }, -{ 0x05DF, 0x05DF, 0x05DF }, -{ 0x05E0, 0x05E0, 0x05E0 }, -{ 0x05E1, 0x05E1, 0x05E1 }, -{ 0x05E2, 0x05E2, 0x05E2 }, -{ 0x05E3, 0x05E3, 0x05E3 }, -{ 0x05E4, 0x05E4, 0x05E4 }, -{ 0x05E5, 0x05E5, 0x05E5 }, -{ 0x05E6, 0x05E6, 0x05E6 }, -{ 0x05E7, 0x05E7, 0x05E7 }, -{ 0x05E8, 0x05E8, 0x05E8 }, -{ 0x05E9, 0x05E9, 0x05E9 }, -{ 0x05EA, 0x05EA, 0x05EA }, -{ 0x05F0, 0x05F0, 0x05F0 }, -{ 0x05F1, 0x05F1, 0x05F1 }, -{ 0x05F2, 0x05F2, 0x05F2 }, -{ 0x0610, 0x0610, 0x0610 }, -{ 0x0611, 0x0611, 0x0611 }, -{ 0x0612, 0x0612, 0x0612 }, -{ 0x0613, 0x0613, 0x0613 }, -{ 0x0614, 0x0614, 0x0614 }, -{ 0x0615, 0x0615, 0x0615 }, -{ 0x0621, 0x0621, 0x0621 }, -{ 0x0622, 0x0622, 0x0622 }, -{ 0x0623, 0x0623, 0x0623 }, -{ 0x0624, 0x0624, 0x0624 }, -{ 0x0625, 0x0625, 0x0625 }, -{ 0x0626, 0x0626, 0x0626 }, -{ 0x0627, 0x0627, 0x0627 }, -{ 0x0628, 0x0628, 0x0628 }, -{ 0x0629, 0x0629, 0x0629 }, -{ 0x062A, 0x062A, 0x062A }, -{ 0x062B, 0x062B, 0x062B }, -{ 0x062C, 0x062C, 0x062C }, -{ 0x062D, 0x062D, 0x062D }, -{ 0x062E, 0x062E, 0x062E }, -{ 0x062F, 0x062F, 0x062F }, -{ 0x0630, 0x0630, 0x0630 }, -{ 0x0631, 0x0631, 0x0631 }, -{ 0x0632, 0x0632, 0x0632 }, -{ 0x0633, 0x0633, 0x0633 }, -{ 0x0634, 0x0634, 0x0634 }, -{ 0x0635, 0x0635, 0x0635 }, -{ 0x0636, 0x0636, 0x0636 }, -{ 0x0637, 0x0637, 0x0637 }, -{ 0x0638, 0x0638, 0x0638 }, -{ 0x0639, 0x0639, 0x0639 }, -{ 0x063A, 0x063A, 0x063A }, -{ 0x0640, 0x0640, 0x0640 }, -{ 0x0641, 0x0641, 0x0641 }, -{ 0x0642, 0x0642, 0x0642 }, -{ 0x0643, 0x0643, 0x0643 }, -{ 0x0644, 0x0644, 0x0644 }, -{ 0x0645, 0x0645, 0x0645 }, -{ 0x0646, 0x0646, 0x0646 }, -{ 0x0647, 0x0647, 0x0647 }, -{ 0x0648, 0x0648, 0x0648 }, -{ 0x0649, 0x0649, 0x0649 }, -{ 0x064A, 0x064A, 0x064A }, -{ 0x064B, 0x064B, 0x064B }, -{ 0x064C, 0x064C, 0x064C }, -{ 0x064D, 0x064D, 0x064D }, -{ 0x064E, 0x064E, 0x064E }, -{ 0x064F, 0x064F, 0x064F }, -{ 0x0650, 0x0650, 0x0650 }, -{ 0x0651, 0x0651, 0x0651 }, -{ 0x0652, 0x0652, 0x0652 }, -{ 0x0653, 0x0653, 0x0653 }, -{ 0x0654, 0x0654, 0x0654 }, -{ 0x0655, 0x0655, 0x0655 }, -{ 0x0656, 0x0656, 0x0656 }, -{ 0x0657, 0x0657, 0x0657 }, -{ 0x0658, 0x0658, 0x0658 }, -{ 0x0659, 0x0659, 0x0659 }, -{ 0x065A, 0x065A, 0x065A }, -{ 0x065B, 0x065B, 0x065B }, -{ 0x065C, 0x065C, 0x065C }, -{ 0x065D, 0x065D, 0x065D }, -{ 0x065E, 0x065E, 0x065E }, -{ 0x066E, 0x066E, 0x066E }, -{ 0x066F, 0x066F, 0x066F }, -{ 0x0670, 0x0670, 0x0670 }, -{ 0x0671, 0x0671, 0x0671 }, -{ 0x0672, 0x0672, 0x0672 }, -{ 0x0673, 0x0673, 0x0673 }, -{ 0x0674, 0x0674, 0x0674 }, -{ 0x0675, 0x0675, 0x0675 }, -{ 0x0676, 0x0676, 0x0676 }, -{ 0x0677, 0x0677, 0x0677 }, -{ 0x0678, 0x0678, 0x0678 }, -{ 0x0679, 0x0679, 0x0679 }, -{ 0x067A, 0x067A, 0x067A }, -{ 0x067B, 0x067B, 0x067B }, -{ 0x067C, 0x067C, 0x067C }, -{ 0x067D, 0x067D, 0x067D }, -{ 0x067E, 0x067E, 0x067E }, -{ 0x067F, 0x067F, 0x067F }, -{ 0x0680, 0x0680, 0x0680 }, -{ 0x0681, 0x0681, 0x0681 }, -{ 0x0682, 0x0682, 0x0682 }, -{ 0x0683, 0x0683, 0x0683 }, -{ 0x0684, 0x0684, 0x0684 }, -{ 0x0685, 0x0685, 0x0685 }, -{ 0x0686, 0x0686, 0x0686 }, -{ 0x0687, 0x0687, 0x0687 }, -{ 0x0688, 0x0688, 0x0688 }, -{ 0x0689, 0x0689, 0x0689 }, -{ 0x068A, 0x068A, 0x068A }, -{ 0x068B, 0x068B, 0x068B }, -{ 0x068C, 0x068C, 0x068C }, -{ 0x068D, 0x068D, 0x068D }, -{ 0x068E, 0x068E, 0x068E }, -{ 0x068F, 0x068F, 0x068F }, -{ 0x0690, 0x0690, 0x0690 }, -{ 0x0691, 0x0691, 0x0691 }, -{ 0x0692, 0x0692, 0x0692 }, -{ 0x0693, 0x0693, 0x0693 }, -{ 0x0694, 0x0694, 0x0694 }, -{ 0x0695, 0x0695, 0x0695 }, -{ 0x0696, 0x0696, 0x0696 }, -{ 0x0697, 0x0697, 0x0697 }, -{ 0x0698, 0x0698, 0x0698 }, -{ 0x0699, 0x0699, 0x0699 }, -{ 0x069A, 0x069A, 0x069A }, -{ 0x069B, 0x069B, 0x069B }, -{ 0x069C, 0x069C, 0x069C }, -{ 0x069D, 0x069D, 0x069D }, -{ 0x069E, 0x069E, 0x069E }, -{ 0x069F, 0x069F, 0x069F }, -{ 0x06A0, 0x06A0, 0x06A0 }, -{ 0x06A1, 0x06A1, 0x06A1 }, -{ 0x06A2, 0x06A2, 0x06A2 }, -{ 0x06A3, 0x06A3, 0x06A3 }, -{ 0x06A4, 0x06A4, 0x06A4 }, -{ 0x06A5, 0x06A5, 0x06A5 }, -{ 0x06A6, 0x06A6, 0x06A6 }, -{ 0x06A7, 0x06A7, 0x06A7 }, -{ 0x06A8, 0x06A8, 0x06A8 }, -{ 0x06A9, 0x06A9, 0x06A9 }, -{ 0x06AA, 0x06AA, 0x06AA }, -{ 0x06AB, 0x06AB, 0x06AB }, -{ 0x06AC, 0x06AC, 0x06AC }, -{ 0x06AD, 0x06AD, 0x06AD }, -{ 0x06AE, 0x06AE, 0x06AE }, -{ 0x06AF, 0x06AF, 0x06AF }, -{ 0x06B0, 0x06B0, 0x06B0 }, -{ 0x06B1, 0x06B1, 0x06B1 }, -{ 0x06B2, 0x06B2, 0x06B2 }, -{ 0x06B3, 0x06B3, 0x06B3 }, -{ 0x06B4, 0x06B4, 0x06B4 }, -{ 0x06B5, 0x06B5, 0x06B5 }, -{ 0x06B6, 0x06B6, 0x06B6 }, -{ 0x06B7, 0x06B7, 0x06B7 }, -{ 0x06B8, 0x06B8, 0x06B8 }, -{ 0x06B9, 0x06B9, 0x06B9 }, -{ 0x06BA, 0x06BA, 0x06BA }, -{ 0x06BB, 0x06BB, 0x06BB }, -{ 0x06BC, 0x06BC, 0x06BC }, -{ 0x06BD, 0x06BD, 0x06BD }, -{ 0x06BE, 0x06BE, 0x06BE }, -{ 0x06BF, 0x06BF, 0x06BF }, -{ 0x06C0, 0x06C0, 0x06C0 }, -{ 0x06C1, 0x06C1, 0x06C1 }, -{ 0x06C2, 0x06C2, 0x06C2 }, -{ 0x06C3, 0x06C3, 0x06C3 }, -{ 0x06C4, 0x06C4, 0x06C4 }, -{ 0x06C5, 0x06C5, 0x06C5 }, -{ 0x06C6, 0x06C6, 0x06C6 }, -{ 0x06C7, 0x06C7, 0x06C7 }, -{ 0x06C8, 0x06C8, 0x06C8 }, -{ 0x06C9, 0x06C9, 0x06C9 }, -{ 0x06CA, 0x06CA, 0x06CA }, -{ 0x06CB, 0x06CB, 0x06CB }, -{ 0x06CC, 0x06CC, 0x06CC }, -{ 0x06CD, 0x06CD, 0x06CD }, -{ 0x06CE, 0x06CE, 0x06CE }, -{ 0x06CF, 0x06CF, 0x06CF }, -{ 0x06D0, 0x06D0, 0x06D0 }, -{ 0x06D1, 0x06D1, 0x06D1 }, -{ 0x06D2, 0x06D2, 0x06D2 }, -{ 0x06D3, 0x06D3, 0x06D3 }, -{ 0x06D5, 0x06D5, 0x06D5 }, -{ 0x06D6, 0x06D6, 0x06D6 }, -{ 0x06D7, 0x06D7, 0x06D7 }, -{ 0x06D8, 0x06D8, 0x06D8 }, -{ 0x06D9, 0x06D9, 0x06D9 }, -{ 0x06DA, 0x06DA, 0x06DA }, -{ 0x06DB, 0x06DB, 0x06DB }, -{ 0x06DC, 0x06DC, 0x06DC }, -{ 0x06DF, 0x06DF, 0x06DF }, -{ 0x06E0, 0x06E0, 0x06E0 }, -{ 0x06E1, 0x06E1, 0x06E1 }, -{ 0x06E2, 0x06E2, 0x06E2 }, -{ 0x06E3, 0x06E3, 0x06E3 }, -{ 0x06E4, 0x06E4, 0x06E4 }, -{ 0x06E5, 0x06E5, 0x06E5 }, -{ 0x06E6, 0x06E6, 0x06E6 }, -{ 0x06E7, 0x06E7, 0x06E7 }, -{ 0x06E8, 0x06E8, 0x06E8 }, -{ 0x06EA, 0x06EA, 0x06EA }, -{ 0x06EB, 0x06EB, 0x06EB }, -{ 0x06EC, 0x06EC, 0x06EC }, -{ 0x06ED, 0x06ED, 0x06ED }, -{ 0x06EE, 0x06EE, 0x06EE }, -{ 0x06EF, 0x06EF, 0x06EF }, -{ 0x06FA, 0x06FA, 0x06FA }, -{ 0x06FB, 0x06FB, 0x06FB }, -{ 0x06FC, 0x06FC, 0x06FC }, -{ 0x06FF, 0x06FF, 0x06FF }, -{ 0x0710, 0x0710, 0x0710 }, -{ 0x0711, 0x0711, 0x0711 }, -{ 0x0712, 0x0712, 0x0712 }, -{ 0x0713, 0x0713, 0x0713 }, -{ 0x0714, 0x0714, 0x0714 }, -{ 0x0715, 0x0715, 0x0715 }, -{ 0x0716, 0x0716, 0x0716 }, -{ 0x0717, 0x0717, 0x0717 }, -{ 0x0718, 0x0718, 0x0718 }, -{ 0x0719, 0x0719, 0x0719 }, -{ 0x071A, 0x071A, 0x071A }, -{ 0x071B, 0x071B, 0x071B }, -{ 0x071C, 0x071C, 0x071C }, -{ 0x071D, 0x071D, 0x071D }, -{ 0x071E, 0x071E, 0x071E }, -{ 0x071F, 0x071F, 0x071F }, -{ 0x0720, 0x0720, 0x0720 }, -{ 0x0721, 0x0721, 0x0721 }, -{ 0x0722, 0x0722, 0x0722 }, -{ 0x0723, 0x0723, 0x0723 }, -{ 0x0724, 0x0724, 0x0724 }, -{ 0x0725, 0x0725, 0x0725 }, -{ 0x0726, 0x0726, 0x0726 }, -{ 0x0727, 0x0727, 0x0727 }, -{ 0x0728, 0x0728, 0x0728 }, -{ 0x0729, 0x0729, 0x0729 }, -{ 0x072A, 0x072A, 0x072A }, -{ 0x072B, 0x072B, 0x072B }, -{ 0x072C, 0x072C, 0x072C }, -{ 0x072D, 0x072D, 0x072D }, -{ 0x072E, 0x072E, 0x072E }, -{ 0x072F, 0x072F, 0x072F }, -{ 0x0730, 0x0730, 0x0730 }, -{ 0x0731, 0x0731, 0x0731 }, -{ 0x0732, 0x0732, 0x0732 }, -{ 0x0733, 0x0733, 0x0733 }, -{ 0x0734, 0x0734, 0x0734 }, -{ 0x0735, 0x0735, 0x0735 }, -{ 0x0736, 0x0736, 0x0736 }, -{ 0x0737, 0x0737, 0x0737 }, -{ 0x0738, 0x0738, 0x0738 }, -{ 0x0739, 0x0739, 0x0739 }, -{ 0x073A, 0x073A, 0x073A }, -{ 0x073B, 0x073B, 0x073B }, -{ 0x073C, 0x073C, 0x073C }, -{ 0x073D, 0x073D, 0x073D }, -{ 0x073E, 0x073E, 0x073E }, -{ 0x073F, 0x073F, 0x073F }, -{ 0x0740, 0x0740, 0x0740 }, -{ 0x0741, 0x0741, 0x0741 }, -{ 0x0742, 0x0742, 0x0742 }, -{ 0x0743, 0x0743, 0x0743 }, -{ 0x0744, 0x0744, 0x0744 }, -{ 0x0745, 0x0745, 0x0745 }, -{ 0x0746, 0x0746, 0x0746 }, -{ 0x0747, 0x0747, 0x0747 }, -{ 0x0748, 0x0748, 0x0748 }, -{ 0x0749, 0x0749, 0x0749 }, -{ 0x074A, 0x074A, 0x074A }, -{ 0x074D, 0x074D, 0x074D }, -{ 0x074E, 0x074E, 0x074E }, -{ 0x074F, 0x074F, 0x074F }, -{ 0x0750, 0x0750, 0x0750 }, -{ 0x0751, 0x0751, 0x0751 }, -{ 0x0752, 0x0752, 0x0752 }, -{ 0x0753, 0x0753, 0x0753 }, -{ 0x0754, 0x0754, 0x0754 }, -{ 0x0755, 0x0755, 0x0755 }, -{ 0x0756, 0x0756, 0x0756 }, -{ 0x0757, 0x0757, 0x0757 }, -{ 0x0758, 0x0758, 0x0758 }, -{ 0x0759, 0x0759, 0x0759 }, -{ 0x075A, 0x075A, 0x075A }, -{ 0x075B, 0x075B, 0x075B }, -{ 0x075C, 0x075C, 0x075C }, -{ 0x075D, 0x075D, 0x075D }, -{ 0x075E, 0x075E, 0x075E }, -{ 0x075F, 0x075F, 0x075F }, -{ 0x0760, 0x0760, 0x0760 }, -{ 0x0761, 0x0761, 0x0761 }, -{ 0x0762, 0x0762, 0x0762 }, -{ 0x0763, 0x0763, 0x0763 }, -{ 0x0764, 0x0764, 0x0764 }, -{ 0x0765, 0x0765, 0x0765 }, -{ 0x0766, 0x0766, 0x0766 }, -{ 0x0767, 0x0767, 0x0767 }, -{ 0x0768, 0x0768, 0x0768 }, -{ 0x0769, 0x0769, 0x0769 }, -{ 0x076A, 0x076A, 0x076A }, -{ 0x076B, 0x076B, 0x076B }, -{ 0x076C, 0x076C, 0x076C }, -{ 0x076D, 0x076D, 0x076D }, -{ 0x0780, 0x0780, 0x0780 }, -{ 0x0781, 0x0781, 0x0781 }, -{ 0x0782, 0x0782, 0x0782 }, -{ 0x0783, 0x0783, 0x0783 }, -{ 0x0784, 0x0784, 0x0784 }, -{ 0x0785, 0x0785, 0x0785 }, -{ 0x0786, 0x0786, 0x0786 }, -{ 0x0787, 0x0787, 0x0787 }, -{ 0x0788, 0x0788, 0x0788 }, -{ 0x0789, 0x0789, 0x0789 }, -{ 0x078A, 0x078A, 0x078A }, -{ 0x078B, 0x078B, 0x078B }, -{ 0x078C, 0x078C, 0x078C }, -{ 0x078D, 0x078D, 0x078D }, -{ 0x078E, 0x078E, 0x078E }, -{ 0x078F, 0x078F, 0x078F }, -{ 0x0790, 0x0790, 0x0790 }, -{ 0x0791, 0x0791, 0x0791 }, -{ 0x0792, 0x0792, 0x0792 }, -{ 0x0793, 0x0793, 0x0793 }, -{ 0x0794, 0x0794, 0x0794 }, -{ 0x0795, 0x0795, 0x0795 }, -{ 0x0796, 0x0796, 0x0796 }, -{ 0x0797, 0x0797, 0x0797 }, -{ 0x0798, 0x0798, 0x0798 }, -{ 0x0799, 0x0799, 0x0799 }, -{ 0x079A, 0x079A, 0x079A }, -{ 0x079B, 0x079B, 0x079B }, -{ 0x079C, 0x079C, 0x079C }, -{ 0x079D, 0x079D, 0x079D }, -{ 0x079E, 0x079E, 0x079E }, -{ 0x079F, 0x079F, 0x079F }, -{ 0x07A0, 0x07A0, 0x07A0 }, -{ 0x07A1, 0x07A1, 0x07A1 }, -{ 0x07A2, 0x07A2, 0x07A2 }, -{ 0x07A3, 0x07A3, 0x07A3 }, -{ 0x07A4, 0x07A4, 0x07A4 }, -{ 0x07A5, 0x07A5, 0x07A5 }, -{ 0x07A6, 0x07A6, 0x07A6 }, -{ 0x07A7, 0x07A7, 0x07A7 }, -{ 0x07A8, 0x07A8, 0x07A8 }, -{ 0x07A9, 0x07A9, 0x07A9 }, -{ 0x07AA, 0x07AA, 0x07AA }, -{ 0x07AB, 0x07AB, 0x07AB }, -{ 0x07AC, 0x07AC, 0x07AC }, -{ 0x07AD, 0x07AD, 0x07AD }, -{ 0x07AE, 0x07AE, 0x07AE }, -{ 0x07AF, 0x07AF, 0x07AF }, -{ 0x07B0, 0x07B0, 0x07B0 }, -{ 0x07B1, 0x07B1, 0x07B1 }, -{ 0x0901, 0x0901, 0x0901 }, -{ 0x0902, 0x0902, 0x0902 }, -{ 0x0904, 0x0904, 0x0904 }, -{ 0x0905, 0x0905, 0x0905 }, -{ 0x0906, 0x0906, 0x0906 }, -{ 0x0907, 0x0907, 0x0907 }, -{ 0x0908, 0x0908, 0x0908 }, -{ 0x0909, 0x0909, 0x0909 }, -{ 0x090A, 0x090A, 0x090A }, -{ 0x090B, 0x090B, 0x090B }, -{ 0x090C, 0x090C, 0x090C }, -{ 0x090D, 0x090D, 0x090D }, -{ 0x090E, 0x090E, 0x090E }, -{ 0x090F, 0x090F, 0x090F }, -{ 0x0910, 0x0910, 0x0910 }, -{ 0x0911, 0x0911, 0x0911 }, -{ 0x0912, 0x0912, 0x0912 }, -{ 0x0913, 0x0913, 0x0913 }, -{ 0x0914, 0x0914, 0x0914 }, -{ 0x0915, 0x0915, 0x0915 }, -{ 0x0916, 0x0916, 0x0916 }, -{ 0x0917, 0x0917, 0x0917 }, -{ 0x0918, 0x0918, 0x0918 }, -{ 0x0919, 0x0919, 0x0919 }, -{ 0x091A, 0x091A, 0x091A }, -{ 0x091B, 0x091B, 0x091B }, -{ 0x091C, 0x091C, 0x091C }, -{ 0x091D, 0x091D, 0x091D }, -{ 0x091E, 0x091E, 0x091E }, -{ 0x091F, 0x091F, 0x091F }, -{ 0x0920, 0x0920, 0x0920 }, -{ 0x0921, 0x0921, 0x0921 }, -{ 0x0922, 0x0922, 0x0922 }, -{ 0x0923, 0x0923, 0x0923 }, -{ 0x0924, 0x0924, 0x0924 }, -{ 0x0925, 0x0925, 0x0925 }, -{ 0x0926, 0x0926, 0x0926 }, -{ 0x0927, 0x0927, 0x0927 }, -{ 0x0928, 0x0928, 0x0928 }, -{ 0x0929, 0x0929, 0x0929 }, -{ 0x092A, 0x092A, 0x092A }, -{ 0x092B, 0x092B, 0x092B }, -{ 0x092C, 0x092C, 0x092C }, -{ 0x092D, 0x092D, 0x092D }, -{ 0x092E, 0x092E, 0x092E }, -{ 0x092F, 0x092F, 0x092F }, -{ 0x0930, 0x0930, 0x0930 }, -{ 0x0931, 0x0931, 0x0931 }, -{ 0x0932, 0x0932, 0x0932 }, -{ 0x0933, 0x0933, 0x0933 }, -{ 0x0934, 0x0934, 0x0934 }, -{ 0x0935, 0x0935, 0x0935 }, -{ 0x0936, 0x0936, 0x0936 }, -{ 0x0937, 0x0937, 0x0937 }, -{ 0x0938, 0x0938, 0x0938 }, -{ 0x0939, 0x0939, 0x0939 }, -{ 0x093C, 0x093C, 0x093C }, -{ 0x093D, 0x093D, 0x093D }, -{ 0x0941, 0x0941, 0x0941 }, -{ 0x0942, 0x0942, 0x0942 }, -{ 0x0943, 0x0943, 0x0943 }, -{ 0x0944, 0x0944, 0x0944 }, -{ 0x0945, 0x0945, 0x0945 }, -{ 0x0946, 0x0946, 0x0946 }, -{ 0x0947, 0x0947, 0x0947 }, -{ 0x0948, 0x0948, 0x0948 }, -{ 0x094D, 0x094D, 0x094D }, -{ 0x0950, 0x0950, 0x0950 }, -{ 0x0951, 0x0951, 0x0951 }, -{ 0x0952, 0x0952, 0x0952 }, -{ 0x0953, 0x0953, 0x0953 }, -{ 0x0954, 0x0954, 0x0954 }, -{ 0x0958, 0x0958, 0x0958 }, -{ 0x0959, 0x0959, 0x0959 }, -{ 0x095A, 0x095A, 0x095A }, -{ 0x095B, 0x095B, 0x095B }, -{ 0x095C, 0x095C, 0x095C }, -{ 0x095D, 0x095D, 0x095D }, -{ 0x095E, 0x095E, 0x095E }, -{ 0x095F, 0x095F, 0x095F }, -{ 0x0960, 0x0960, 0x0960 }, -{ 0x0961, 0x0961, 0x0961 }, -{ 0x0962, 0x0962, 0x0962 }, -{ 0x0963, 0x0963, 0x0963 }, -{ 0x097D, 0x097D, 0x097D }, -{ 0x0981, 0x0981, 0x0981 }, -{ 0x0985, 0x0985, 0x0985 }, -{ 0x0986, 0x0986, 0x0986 }, -{ 0x0987, 0x0987, 0x0987 }, -{ 0x0988, 0x0988, 0x0988 }, -{ 0x0989, 0x0989, 0x0989 }, -{ 0x098A, 0x098A, 0x098A }, -{ 0x098B, 0x098B, 0x098B }, -{ 0x098C, 0x098C, 0x098C }, -{ 0x098F, 0x098F, 0x098F }, -{ 0x0990, 0x0990, 0x0990 }, -{ 0x0993, 0x0993, 0x0993 }, -{ 0x0994, 0x0994, 0x0994 }, -{ 0x0995, 0x0995, 0x0995 }, -{ 0x0996, 0x0996, 0x0996 }, -{ 0x0997, 0x0997, 0x0997 }, -{ 0x0998, 0x0998, 0x0998 }, -{ 0x0999, 0x0999, 0x0999 }, -{ 0x099A, 0x099A, 0x099A }, -{ 0x099B, 0x099B, 0x099B }, -{ 0x099C, 0x099C, 0x099C }, -{ 0x099D, 0x099D, 0x099D }, -{ 0x099E, 0x099E, 0x099E }, -{ 0x099F, 0x099F, 0x099F }, -{ 0x09A0, 0x09A0, 0x09A0 }, -{ 0x09A1, 0x09A1, 0x09A1 }, -{ 0x09A2, 0x09A2, 0x09A2 }, -{ 0x09A3, 0x09A3, 0x09A3 }, -{ 0x09A4, 0x09A4, 0x09A4 }, -{ 0x09A5, 0x09A5, 0x09A5 }, -{ 0x09A6, 0x09A6, 0x09A6 }, -{ 0x09A7, 0x09A7, 0x09A7 }, -{ 0x09A8, 0x09A8, 0x09A8 }, -{ 0x09AA, 0x09AA, 0x09AA }, -{ 0x09AB, 0x09AB, 0x09AB }, -{ 0x09AC, 0x09AC, 0x09AC }, -{ 0x09AD, 0x09AD, 0x09AD }, -{ 0x09AE, 0x09AE, 0x09AE }, -{ 0x09AF, 0x09AF, 0x09AF }, -{ 0x09B0, 0x09B0, 0x09B0 }, -{ 0x09B2, 0x09B2, 0x09B2 }, -{ 0x09B6, 0x09B6, 0x09B6 }, -{ 0x09B7, 0x09B7, 0x09B7 }, -{ 0x09B8, 0x09B8, 0x09B8 }, -{ 0x09B9, 0x09B9, 0x09B9 }, -{ 0x09BC, 0x09BC, 0x09BC }, -{ 0x09BD, 0x09BD, 0x09BD }, -{ 0x09C1, 0x09C1, 0x09C1 }, -{ 0x09C2, 0x09C2, 0x09C2 }, -{ 0x09C3, 0x09C3, 0x09C3 }, -{ 0x09C4, 0x09C4, 0x09C4 }, -{ 0x09CD, 0x09CD, 0x09CD }, -{ 0x09CE, 0x09CE, 0x09CE }, -{ 0x09DC, 0x09DC, 0x09DC }, -{ 0x09DD, 0x09DD, 0x09DD }, -{ 0x09DF, 0x09DF, 0x09DF }, -{ 0x09E0, 0x09E0, 0x09E0 }, -{ 0x09E1, 0x09E1, 0x09E1 }, -{ 0x09E2, 0x09E2, 0x09E2 }, -{ 0x09E3, 0x09E3, 0x09E3 }, -{ 0x09F0, 0x09F0, 0x09F0 }, -{ 0x09F1, 0x09F1, 0x09F1 }, -{ 0x0A01, 0x0A01, 0x0A01 }, -{ 0x0A02, 0x0A02, 0x0A02 }, -{ 0x0A05, 0x0A05, 0x0A05 }, -{ 0x0A06, 0x0A06, 0x0A06 }, -{ 0x0A07, 0x0A07, 0x0A07 }, -{ 0x0A08, 0x0A08, 0x0A08 }, -{ 0x0A09, 0x0A09, 0x0A09 }, -{ 0x0A0A, 0x0A0A, 0x0A0A }, -{ 0x0A0F, 0x0A0F, 0x0A0F }, -{ 0x0A10, 0x0A10, 0x0A10 }, -{ 0x0A13, 0x0A13, 0x0A13 }, -{ 0x0A14, 0x0A14, 0x0A14 }, -{ 0x0A15, 0x0A15, 0x0A15 }, -{ 0x0A16, 0x0A16, 0x0A16 }, -{ 0x0A17, 0x0A17, 0x0A17 }, -{ 0x0A18, 0x0A18, 0x0A18 }, -{ 0x0A19, 0x0A19, 0x0A19 }, -{ 0x0A1A, 0x0A1A, 0x0A1A }, -{ 0x0A1B, 0x0A1B, 0x0A1B }, -{ 0x0A1C, 0x0A1C, 0x0A1C }, -{ 0x0A1D, 0x0A1D, 0x0A1D }, -{ 0x0A1E, 0x0A1E, 0x0A1E }, -{ 0x0A1F, 0x0A1F, 0x0A1F }, -{ 0x0A20, 0x0A20, 0x0A20 }, -{ 0x0A21, 0x0A21, 0x0A21 }, -{ 0x0A22, 0x0A22, 0x0A22 }, -{ 0x0A23, 0x0A23, 0x0A23 }, -{ 0x0A24, 0x0A24, 0x0A24 }, -{ 0x0A25, 0x0A25, 0x0A25 }, -{ 0x0A26, 0x0A26, 0x0A26 }, -{ 0x0A27, 0x0A27, 0x0A27 }, -{ 0x0A28, 0x0A28, 0x0A28 }, -{ 0x0A2A, 0x0A2A, 0x0A2A }, -{ 0x0A2B, 0x0A2B, 0x0A2B }, -{ 0x0A2C, 0x0A2C, 0x0A2C }, -{ 0x0A2D, 0x0A2D, 0x0A2D }, -{ 0x0A2E, 0x0A2E, 0x0A2E }, -{ 0x0A2F, 0x0A2F, 0x0A2F }, -{ 0x0A30, 0x0A30, 0x0A30 }, -{ 0x0A32, 0x0A32, 0x0A32 }, -{ 0x0A33, 0x0A33, 0x0A33 }, -{ 0x0A35, 0x0A35, 0x0A35 }, -{ 0x0A36, 0x0A36, 0x0A36 }, -{ 0x0A38, 0x0A38, 0x0A38 }, -{ 0x0A39, 0x0A39, 0x0A39 }, -{ 0x0A3C, 0x0A3C, 0x0A3C }, -{ 0x0A41, 0x0A41, 0x0A41 }, -{ 0x0A42, 0x0A42, 0x0A42 }, -{ 0x0A47, 0x0A47, 0x0A47 }, -{ 0x0A48, 0x0A48, 0x0A48 }, -{ 0x0A4B, 0x0A4B, 0x0A4B }, -{ 0x0A4C, 0x0A4C, 0x0A4C }, -{ 0x0A4D, 0x0A4D, 0x0A4D }, -{ 0x0A59, 0x0A59, 0x0A59 }, -{ 0x0A5A, 0x0A5A, 0x0A5A }, -{ 0x0A5B, 0x0A5B, 0x0A5B }, -{ 0x0A5C, 0x0A5C, 0x0A5C }, -{ 0x0A5E, 0x0A5E, 0x0A5E }, -{ 0x0A70, 0x0A70, 0x0A70 }, -{ 0x0A71, 0x0A71, 0x0A71 }, -{ 0x0A72, 0x0A72, 0x0A72 }, -{ 0x0A73, 0x0A73, 0x0A73 }, -{ 0x0A74, 0x0A74, 0x0A74 }, -{ 0x0A81, 0x0A81, 0x0A81 }, -{ 0x0A82, 0x0A82, 0x0A82 }, -{ 0x0A85, 0x0A85, 0x0A85 }, -{ 0x0A86, 0x0A86, 0x0A86 }, -{ 0x0A87, 0x0A87, 0x0A87 }, -{ 0x0A88, 0x0A88, 0x0A88 }, -{ 0x0A89, 0x0A89, 0x0A89 }, -{ 0x0A8A, 0x0A8A, 0x0A8A }, -{ 0x0A8B, 0x0A8B, 0x0A8B }, -{ 0x0A8C, 0x0A8C, 0x0A8C }, -{ 0x0A8D, 0x0A8D, 0x0A8D }, -{ 0x0A8F, 0x0A8F, 0x0A8F }, -{ 0x0A90, 0x0A90, 0x0A90 }, -{ 0x0A91, 0x0A91, 0x0A91 }, -{ 0x0A93, 0x0A93, 0x0A93 }, -{ 0x0A94, 0x0A94, 0x0A94 }, -{ 0x0A95, 0x0A95, 0x0A95 }, -{ 0x0A96, 0x0A96, 0x0A96 }, -{ 0x0A97, 0x0A97, 0x0A97 }, -{ 0x0A98, 0x0A98, 0x0A98 }, -{ 0x0A99, 0x0A99, 0x0A99 }, -{ 0x0A9A, 0x0A9A, 0x0A9A }, -{ 0x0A9B, 0x0A9B, 0x0A9B }, -{ 0x0A9C, 0x0A9C, 0x0A9C }, -{ 0x0A9D, 0x0A9D, 0x0A9D }, -{ 0x0A9E, 0x0A9E, 0x0A9E }, -{ 0x0A9F, 0x0A9F, 0x0A9F }, -{ 0x0AA0, 0x0AA0, 0x0AA0 }, -{ 0x0AA1, 0x0AA1, 0x0AA1 }, -{ 0x0AA2, 0x0AA2, 0x0AA2 }, -{ 0x0AA3, 0x0AA3, 0x0AA3 }, -{ 0x0AA4, 0x0AA4, 0x0AA4 }, -{ 0x0AA5, 0x0AA5, 0x0AA5 }, -{ 0x0AA6, 0x0AA6, 0x0AA6 }, -{ 0x0AA7, 0x0AA7, 0x0AA7 }, -{ 0x0AA8, 0x0AA8, 0x0AA8 }, -{ 0x0AAA, 0x0AAA, 0x0AAA }, -{ 0x0AAB, 0x0AAB, 0x0AAB }, -{ 0x0AAC, 0x0AAC, 0x0AAC }, -{ 0x0AAD, 0x0AAD, 0x0AAD }, -{ 0x0AAE, 0x0AAE, 0x0AAE }, -{ 0x0AAF, 0x0AAF, 0x0AAF }, -{ 0x0AB0, 0x0AB0, 0x0AB0 }, -{ 0x0AB2, 0x0AB2, 0x0AB2 }, -{ 0x0AB3, 0x0AB3, 0x0AB3 }, -{ 0x0AB5, 0x0AB5, 0x0AB5 }, -{ 0x0AB6, 0x0AB6, 0x0AB6 }, -{ 0x0AB7, 0x0AB7, 0x0AB7 }, -{ 0x0AB8, 0x0AB8, 0x0AB8 }, -{ 0x0AB9, 0x0AB9, 0x0AB9 }, -{ 0x0ABC, 0x0ABC, 0x0ABC }, -{ 0x0ABD, 0x0ABD, 0x0ABD }, -{ 0x0AC1, 0x0AC1, 0x0AC1 }, -{ 0x0AC2, 0x0AC2, 0x0AC2 }, -{ 0x0AC3, 0x0AC3, 0x0AC3 }, -{ 0x0AC4, 0x0AC4, 0x0AC4 }, -{ 0x0AC5, 0x0AC5, 0x0AC5 }, -{ 0x0AC7, 0x0AC7, 0x0AC7 }, -{ 0x0AC8, 0x0AC8, 0x0AC8 }, -{ 0x0ACD, 0x0ACD, 0x0ACD }, -{ 0x0AD0, 0x0AD0, 0x0AD0 }, -{ 0x0AE0, 0x0AE0, 0x0AE0 }, -{ 0x0AE1, 0x0AE1, 0x0AE1 }, -{ 0x0AE2, 0x0AE2, 0x0AE2 }, -{ 0x0AE3, 0x0AE3, 0x0AE3 }, -{ 0x0B01, 0x0B01, 0x0B01 }, -{ 0x0B05, 0x0B05, 0x0B05 }, -{ 0x0B06, 0x0B06, 0x0B06 }, -{ 0x0B07, 0x0B07, 0x0B07 }, -{ 0x0B08, 0x0B08, 0x0B08 }, -{ 0x0B09, 0x0B09, 0x0B09 }, -{ 0x0B0A, 0x0B0A, 0x0B0A }, -{ 0x0B0B, 0x0B0B, 0x0B0B }, -{ 0x0B0C, 0x0B0C, 0x0B0C }, -{ 0x0B0F, 0x0B0F, 0x0B0F }, -{ 0x0B10, 0x0B10, 0x0B10 }, -{ 0x0B13, 0x0B13, 0x0B13 }, -{ 0x0B14, 0x0B14, 0x0B14 }, -{ 0x0B15, 0x0B15, 0x0B15 }, -{ 0x0B16, 0x0B16, 0x0B16 }, -{ 0x0B17, 0x0B17, 0x0B17 }, -{ 0x0B18, 0x0B18, 0x0B18 }, -{ 0x0B19, 0x0B19, 0x0B19 }, -{ 0x0B1A, 0x0B1A, 0x0B1A }, -{ 0x0B1B, 0x0B1B, 0x0B1B }, -{ 0x0B1C, 0x0B1C, 0x0B1C }, -{ 0x0B1D, 0x0B1D, 0x0B1D }, -{ 0x0B1E, 0x0B1E, 0x0B1E }, -{ 0x0B1F, 0x0B1F, 0x0B1F }, -{ 0x0B20, 0x0B20, 0x0B20 }, -{ 0x0B21, 0x0B21, 0x0B21 }, -{ 0x0B22, 0x0B22, 0x0B22 }, -{ 0x0B23, 0x0B23, 0x0B23 }, -{ 0x0B24, 0x0B24, 0x0B24 }, -{ 0x0B25, 0x0B25, 0x0B25 }, -{ 0x0B26, 0x0B26, 0x0B26 }, -{ 0x0B27, 0x0B27, 0x0B27 }, -{ 0x0B28, 0x0B28, 0x0B28 }, -{ 0x0B2A, 0x0B2A, 0x0B2A }, -{ 0x0B2B, 0x0B2B, 0x0B2B }, -{ 0x0B2C, 0x0B2C, 0x0B2C }, -{ 0x0B2D, 0x0B2D, 0x0B2D }, -{ 0x0B2E, 0x0B2E, 0x0B2E }, -{ 0x0B2F, 0x0B2F, 0x0B2F }, -{ 0x0B30, 0x0B30, 0x0B30 }, -{ 0x0B32, 0x0B32, 0x0B32 }, -{ 0x0B33, 0x0B33, 0x0B33 }, -{ 0x0B35, 0x0B35, 0x0B35 }, -{ 0x0B36, 0x0B36, 0x0B36 }, -{ 0x0B37, 0x0B37, 0x0B37 }, -{ 0x0B38, 0x0B38, 0x0B38 }, -{ 0x0B39, 0x0B39, 0x0B39 }, -{ 0x0B3C, 0x0B3C, 0x0B3C }, -{ 0x0B3D, 0x0B3D, 0x0B3D }, -{ 0x0B3F, 0x0B3F, 0x0B3F }, -{ 0x0B41, 0x0B41, 0x0B41 }, -{ 0x0B42, 0x0B42, 0x0B42 }, -{ 0x0B43, 0x0B43, 0x0B43 }, -{ 0x0B4D, 0x0B4D, 0x0B4D }, -{ 0x0B56, 0x0B56, 0x0B56 }, -{ 0x0B5C, 0x0B5C, 0x0B5C }, -{ 0x0B5D, 0x0B5D, 0x0B5D }, -{ 0x0B5F, 0x0B5F, 0x0B5F }, -{ 0x0B60, 0x0B60, 0x0B60 }, -{ 0x0B61, 0x0B61, 0x0B61 }, -{ 0x0B71, 0x0B71, 0x0B71 }, -{ 0x0B82, 0x0B82, 0x0B82 }, -{ 0x0B83, 0x0B83, 0x0B83 }, -{ 0x0B85, 0x0B85, 0x0B85 }, -{ 0x0B86, 0x0B86, 0x0B86 }, -{ 0x0B87, 0x0B87, 0x0B87 }, -{ 0x0B88, 0x0B88, 0x0B88 }, -{ 0x0B89, 0x0B89, 0x0B89 }, -{ 0x0B8A, 0x0B8A, 0x0B8A }, -{ 0x0B8E, 0x0B8E, 0x0B8E }, -{ 0x0B8F, 0x0B8F, 0x0B8F }, -{ 0x0B90, 0x0B90, 0x0B90 }, -{ 0x0B92, 0x0B92, 0x0B92 }, -{ 0x0B93, 0x0B93, 0x0B93 }, -{ 0x0B94, 0x0B94, 0x0B94 }, -{ 0x0B95, 0x0B95, 0x0B95 }, -{ 0x0B99, 0x0B99, 0x0B99 }, -{ 0x0B9A, 0x0B9A, 0x0B9A }, -{ 0x0B9C, 0x0B9C, 0x0B9C }, -{ 0x0B9E, 0x0B9E, 0x0B9E }, -{ 0x0B9F, 0x0B9F, 0x0B9F }, -{ 0x0BA3, 0x0BA3, 0x0BA3 }, -{ 0x0BA4, 0x0BA4, 0x0BA4 }, -{ 0x0BA8, 0x0BA8, 0x0BA8 }, -{ 0x0BA9, 0x0BA9, 0x0BA9 }, -{ 0x0BAA, 0x0BAA, 0x0BAA }, -{ 0x0BAE, 0x0BAE, 0x0BAE }, -{ 0x0BAF, 0x0BAF, 0x0BAF }, -{ 0x0BB0, 0x0BB0, 0x0BB0 }, -{ 0x0BB1, 0x0BB1, 0x0BB1 }, -{ 0x0BB2, 0x0BB2, 0x0BB2 }, -{ 0x0BB3, 0x0BB3, 0x0BB3 }, -{ 0x0BB4, 0x0BB4, 0x0BB4 }, -{ 0x0BB5, 0x0BB5, 0x0BB5 }, -{ 0x0BB6, 0x0BB6, 0x0BB6 }, -{ 0x0BB7, 0x0BB7, 0x0BB7 }, -{ 0x0BB8, 0x0BB8, 0x0BB8 }, -{ 0x0BB9, 0x0BB9, 0x0BB9 }, -{ 0x0BC0, 0x0BC0, 0x0BC0 }, -{ 0x0BCD, 0x0BCD, 0x0BCD }, -{ 0x0C05, 0x0C05, 0x0C05 }, -{ 0x0C06, 0x0C06, 0x0C06 }, -{ 0x0C07, 0x0C07, 0x0C07 }, -{ 0x0C08, 0x0C08, 0x0C08 }, -{ 0x0C09, 0x0C09, 0x0C09 }, -{ 0x0C0A, 0x0C0A, 0x0C0A }, -{ 0x0C0B, 0x0C0B, 0x0C0B }, -{ 0x0C0C, 0x0C0C, 0x0C0C }, -{ 0x0C0E, 0x0C0E, 0x0C0E }, -{ 0x0C0F, 0x0C0F, 0x0C0F }, -{ 0x0C10, 0x0C10, 0x0C10 }, -{ 0x0C12, 0x0C12, 0x0C12 }, -{ 0x0C13, 0x0C13, 0x0C13 }, -{ 0x0C14, 0x0C14, 0x0C14 }, -{ 0x0C15, 0x0C15, 0x0C15 }, -{ 0x0C16, 0x0C16, 0x0C16 }, -{ 0x0C17, 0x0C17, 0x0C17 }, -{ 0x0C18, 0x0C18, 0x0C18 }, -{ 0x0C19, 0x0C19, 0x0C19 }, -{ 0x0C1A, 0x0C1A, 0x0C1A }, -{ 0x0C1B, 0x0C1B, 0x0C1B }, -{ 0x0C1C, 0x0C1C, 0x0C1C }, -{ 0x0C1D, 0x0C1D, 0x0C1D }, -{ 0x0C1E, 0x0C1E, 0x0C1E }, -{ 0x0C1F, 0x0C1F, 0x0C1F }, -{ 0x0C20, 0x0C20, 0x0C20 }, -{ 0x0C21, 0x0C21, 0x0C21 }, -{ 0x0C22, 0x0C22, 0x0C22 }, -{ 0x0C23, 0x0C23, 0x0C23 }, -{ 0x0C24, 0x0C24, 0x0C24 }, -{ 0x0C25, 0x0C25, 0x0C25 }, -{ 0x0C26, 0x0C26, 0x0C26 }, -{ 0x0C27, 0x0C27, 0x0C27 }, -{ 0x0C28, 0x0C28, 0x0C28 }, -{ 0x0C2A, 0x0C2A, 0x0C2A }, -{ 0x0C2B, 0x0C2B, 0x0C2B }, -{ 0x0C2C, 0x0C2C, 0x0C2C }, -{ 0x0C2D, 0x0C2D, 0x0C2D }, -{ 0x0C2E, 0x0C2E, 0x0C2E }, -{ 0x0C2F, 0x0C2F, 0x0C2F }, -{ 0x0C30, 0x0C30, 0x0C30 }, -{ 0x0C31, 0x0C31, 0x0C31 }, -{ 0x0C32, 0x0C32, 0x0C32 }, -{ 0x0C33, 0x0C33, 0x0C33 }, -{ 0x0C35, 0x0C35, 0x0C35 }, -{ 0x0C36, 0x0C36, 0x0C36 }, -{ 0x0C37, 0x0C37, 0x0C37 }, -{ 0x0C38, 0x0C38, 0x0C38 }, -{ 0x0C39, 0x0C39, 0x0C39 }, -{ 0x0C3E, 0x0C3E, 0x0C3E }, -{ 0x0C3F, 0x0C3F, 0x0C3F }, -{ 0x0C40, 0x0C40, 0x0C40 }, -{ 0x0C46, 0x0C46, 0x0C46 }, -{ 0x0C47, 0x0C47, 0x0C47 }, -{ 0x0C48, 0x0C48, 0x0C48 }, -{ 0x0C4A, 0x0C4A, 0x0C4A }, -{ 0x0C4B, 0x0C4B, 0x0C4B }, -{ 0x0C4C, 0x0C4C, 0x0C4C }, -{ 0x0C4D, 0x0C4D, 0x0C4D }, -{ 0x0C55, 0x0C55, 0x0C55 }, -{ 0x0C56, 0x0C56, 0x0C56 }, -{ 0x0C60, 0x0C60, 0x0C60 }, -{ 0x0C61, 0x0C61, 0x0C61 }, -{ 0x0C85, 0x0C85, 0x0C85 }, -{ 0x0C86, 0x0C86, 0x0C86 }, -{ 0x0C87, 0x0C87, 0x0C87 }, -{ 0x0C88, 0x0C88, 0x0C88 }, -{ 0x0C89, 0x0C89, 0x0C89 }, -{ 0x0C8A, 0x0C8A, 0x0C8A }, -{ 0x0C8B, 0x0C8B, 0x0C8B }, -{ 0x0C8C, 0x0C8C, 0x0C8C }, -{ 0x0C8E, 0x0C8E, 0x0C8E }, -{ 0x0C8F, 0x0C8F, 0x0C8F }, -{ 0x0C90, 0x0C90, 0x0C90 }, -{ 0x0C92, 0x0C92, 0x0C92 }, -{ 0x0C93, 0x0C93, 0x0C93 }, -{ 0x0C94, 0x0C94, 0x0C94 }, -{ 0x0C95, 0x0C95, 0x0C95 }, -{ 0x0C96, 0x0C96, 0x0C96 }, -{ 0x0C97, 0x0C97, 0x0C97 }, -{ 0x0C98, 0x0C98, 0x0C98 }, -{ 0x0C99, 0x0C99, 0x0C99 }, -{ 0x0C9A, 0x0C9A, 0x0C9A }, -{ 0x0C9B, 0x0C9B, 0x0C9B }, -{ 0x0C9C, 0x0C9C, 0x0C9C }, -{ 0x0C9D, 0x0C9D, 0x0C9D }, -{ 0x0C9E, 0x0C9E, 0x0C9E }, -{ 0x0C9F, 0x0C9F, 0x0C9F }, -{ 0x0CA0, 0x0CA0, 0x0CA0 }, -{ 0x0CA1, 0x0CA1, 0x0CA1 }, -{ 0x0CA2, 0x0CA2, 0x0CA2 }, -{ 0x0CA3, 0x0CA3, 0x0CA3 }, -{ 0x0CA4, 0x0CA4, 0x0CA4 }, -{ 0x0CA5, 0x0CA5, 0x0CA5 }, -{ 0x0CA6, 0x0CA6, 0x0CA6 }, -{ 0x0CA7, 0x0CA7, 0x0CA7 }, -{ 0x0CA8, 0x0CA8, 0x0CA8 }, -{ 0x0CAA, 0x0CAA, 0x0CAA }, -{ 0x0CAB, 0x0CAB, 0x0CAB }, -{ 0x0CAC, 0x0CAC, 0x0CAC }, -{ 0x0CAD, 0x0CAD, 0x0CAD }, -{ 0x0CAE, 0x0CAE, 0x0CAE }, -{ 0x0CAF, 0x0CAF, 0x0CAF }, -{ 0x0CB0, 0x0CB0, 0x0CB0 }, -{ 0x0CB1, 0x0CB1, 0x0CB1 }, -{ 0x0CB2, 0x0CB2, 0x0CB2 }, -{ 0x0CB3, 0x0CB3, 0x0CB3 }, -{ 0x0CB5, 0x0CB5, 0x0CB5 }, -{ 0x0CB6, 0x0CB6, 0x0CB6 }, -{ 0x0CB7, 0x0CB7, 0x0CB7 }, -{ 0x0CB8, 0x0CB8, 0x0CB8 }, -{ 0x0CB9, 0x0CB9, 0x0CB9 }, -{ 0x0CBC, 0x0CBC, 0x0CBC }, -{ 0x0CBD, 0x0CBD, 0x0CBD }, -{ 0x0CBF, 0x0CBF, 0x0CBF }, -{ 0x0CC6, 0x0CC6, 0x0CC6 }, -{ 0x0CCC, 0x0CCC, 0x0CCC }, -{ 0x0CCD, 0x0CCD, 0x0CCD }, -{ 0x0CDE, 0x0CDE, 0x0CDE }, -{ 0x0CE0, 0x0CE0, 0x0CE0 }, -{ 0x0CE1, 0x0CE1, 0x0CE1 }, -{ 0x0D05, 0x0D05, 0x0D05 }, -{ 0x0D06, 0x0D06, 0x0D06 }, -{ 0x0D07, 0x0D07, 0x0D07 }, -{ 0x0D08, 0x0D08, 0x0D08 }, -{ 0x0D09, 0x0D09, 0x0D09 }, -{ 0x0D0A, 0x0D0A, 0x0D0A }, -{ 0x0D0B, 0x0D0B, 0x0D0B }, -{ 0x0D0C, 0x0D0C, 0x0D0C }, -{ 0x0D0E, 0x0D0E, 0x0D0E }, -{ 0x0D0F, 0x0D0F, 0x0D0F }, -{ 0x0D10, 0x0D10, 0x0D10 }, -{ 0x0D12, 0x0D12, 0x0D12 }, -{ 0x0D13, 0x0D13, 0x0D13 }, -{ 0x0D14, 0x0D14, 0x0D14 }, -{ 0x0D15, 0x0D15, 0x0D15 }, -{ 0x0D16, 0x0D16, 0x0D16 }, -{ 0x0D17, 0x0D17, 0x0D17 }, -{ 0x0D18, 0x0D18, 0x0D18 }, -{ 0x0D19, 0x0D19, 0x0D19 }, -{ 0x0D1A, 0x0D1A, 0x0D1A }, -{ 0x0D1B, 0x0D1B, 0x0D1B }, -{ 0x0D1C, 0x0D1C, 0x0D1C }, -{ 0x0D1D, 0x0D1D, 0x0D1D }, -{ 0x0D1E, 0x0D1E, 0x0D1E }, -{ 0x0D1F, 0x0D1F, 0x0D1F }, -{ 0x0D20, 0x0D20, 0x0D20 }, -{ 0x0D21, 0x0D21, 0x0D21 }, -{ 0x0D22, 0x0D22, 0x0D22 }, -{ 0x0D23, 0x0D23, 0x0D23 }, -{ 0x0D24, 0x0D24, 0x0D24 }, -{ 0x0D25, 0x0D25, 0x0D25 }, -{ 0x0D26, 0x0D26, 0x0D26 }, -{ 0x0D27, 0x0D27, 0x0D27 }, -{ 0x0D28, 0x0D28, 0x0D28 }, -{ 0x0D2A, 0x0D2A, 0x0D2A }, -{ 0x0D2B, 0x0D2B, 0x0D2B }, -{ 0x0D2C, 0x0D2C, 0x0D2C }, -{ 0x0D2D, 0x0D2D, 0x0D2D }, -{ 0x0D2E, 0x0D2E, 0x0D2E }, -{ 0x0D2F, 0x0D2F, 0x0D2F }, -{ 0x0D30, 0x0D30, 0x0D30 }, -{ 0x0D31, 0x0D31, 0x0D31 }, -{ 0x0D32, 0x0D32, 0x0D32 }, -{ 0x0D33, 0x0D33, 0x0D33 }, -{ 0x0D34, 0x0D34, 0x0D34 }, -{ 0x0D35, 0x0D35, 0x0D35 }, -{ 0x0D36, 0x0D36, 0x0D36 }, -{ 0x0D37, 0x0D37, 0x0D37 }, -{ 0x0D38, 0x0D38, 0x0D38 }, -{ 0x0D39, 0x0D39, 0x0D39 }, -{ 0x0D41, 0x0D41, 0x0D41 }, -{ 0x0D42, 0x0D42, 0x0D42 }, -{ 0x0D43, 0x0D43, 0x0D43 }, -{ 0x0D4D, 0x0D4D, 0x0D4D }, -{ 0x0D60, 0x0D60, 0x0D60 }, -{ 0x0D61, 0x0D61, 0x0D61 }, -{ 0x0D85, 0x0D85, 0x0D85 }, -{ 0x0D86, 0x0D86, 0x0D86 }, -{ 0x0D87, 0x0D87, 0x0D87 }, -{ 0x0D88, 0x0D88, 0x0D88 }, -{ 0x0D89, 0x0D89, 0x0D89 }, -{ 0x0D8A, 0x0D8A, 0x0D8A }, -{ 0x0D8B, 0x0D8B, 0x0D8B }, -{ 0x0D8C, 0x0D8C, 0x0D8C }, -{ 0x0D8D, 0x0D8D, 0x0D8D }, -{ 0x0D8E, 0x0D8E, 0x0D8E }, -{ 0x0D8F, 0x0D8F, 0x0D8F }, -{ 0x0D90, 0x0D90, 0x0D90 }, -{ 0x0D91, 0x0D91, 0x0D91 }, -{ 0x0D92, 0x0D92, 0x0D92 }, -{ 0x0D93, 0x0D93, 0x0D93 }, -{ 0x0D94, 0x0D94, 0x0D94 }, -{ 0x0D95, 0x0D95, 0x0D95 }, -{ 0x0D96, 0x0D96, 0x0D96 }, -{ 0x0D9A, 0x0D9A, 0x0D9A }, -{ 0x0D9B, 0x0D9B, 0x0D9B }, -{ 0x0D9C, 0x0D9C, 0x0D9C }, -{ 0x0D9D, 0x0D9D, 0x0D9D }, -{ 0x0D9E, 0x0D9E, 0x0D9E }, -{ 0x0D9F, 0x0D9F, 0x0D9F }, -{ 0x0DA0, 0x0DA0, 0x0DA0 }, -{ 0x0DA1, 0x0DA1, 0x0DA1 }, -{ 0x0DA2, 0x0DA2, 0x0DA2 }, -{ 0x0DA3, 0x0DA3, 0x0DA3 }, -{ 0x0DA4, 0x0DA4, 0x0DA4 }, -{ 0x0DA5, 0x0DA5, 0x0DA5 }, -{ 0x0DA6, 0x0DA6, 0x0DA6 }, -{ 0x0DA7, 0x0DA7, 0x0DA7 }, -{ 0x0DA8, 0x0DA8, 0x0DA8 }, -{ 0x0DA9, 0x0DA9, 0x0DA9 }, -{ 0x0DAA, 0x0DAA, 0x0DAA }, -{ 0x0DAB, 0x0DAB, 0x0DAB }, -{ 0x0DAC, 0x0DAC, 0x0DAC }, -{ 0x0DAD, 0x0DAD, 0x0DAD }, -{ 0x0DAE, 0x0DAE, 0x0DAE }, -{ 0x0DAF, 0x0DAF, 0x0DAF }, -{ 0x0DB0, 0x0DB0, 0x0DB0 }, -{ 0x0DB1, 0x0DB1, 0x0DB1 }, -{ 0x0DB3, 0x0DB3, 0x0DB3 }, -{ 0x0DB4, 0x0DB4, 0x0DB4 }, -{ 0x0DB5, 0x0DB5, 0x0DB5 }, -{ 0x0DB6, 0x0DB6, 0x0DB6 }, -{ 0x0DB7, 0x0DB7, 0x0DB7 }, -{ 0x0DB8, 0x0DB8, 0x0DB8 }, -{ 0x0DB9, 0x0DB9, 0x0DB9 }, -{ 0x0DBA, 0x0DBA, 0x0DBA }, -{ 0x0DBB, 0x0DBB, 0x0DBB }, -{ 0x0DBD, 0x0DBD, 0x0DBD }, -{ 0x0DC0, 0x0DC0, 0x0DC0 }, -{ 0x0DC1, 0x0DC1, 0x0DC1 }, -{ 0x0DC2, 0x0DC2, 0x0DC2 }, -{ 0x0DC3, 0x0DC3, 0x0DC3 }, -{ 0x0DC4, 0x0DC4, 0x0DC4 }, -{ 0x0DC5, 0x0DC5, 0x0DC5 }, -{ 0x0DC6, 0x0DC6, 0x0DC6 }, -{ 0x0DCA, 0x0DCA, 0x0DCA }, -{ 0x0DD2, 0x0DD2, 0x0DD2 }, -{ 0x0DD3, 0x0DD3, 0x0DD3 }, -{ 0x0DD4, 0x0DD4, 0x0DD4 }, -{ 0x0DD6, 0x0DD6, 0x0DD6 }, -{ 0x0E01, 0x0E01, 0x0E01 }, -{ 0x0E02, 0x0E02, 0x0E02 }, -{ 0x0E03, 0x0E03, 0x0E03 }, -{ 0x0E04, 0x0E04, 0x0E04 }, -{ 0x0E05, 0x0E05, 0x0E05 }, -{ 0x0E06, 0x0E06, 0x0E06 }, -{ 0x0E07, 0x0E07, 0x0E07 }, -{ 0x0E08, 0x0E08, 0x0E08 }, -{ 0x0E09, 0x0E09, 0x0E09 }, -{ 0x0E0A, 0x0E0A, 0x0E0A }, -{ 0x0E0B, 0x0E0B, 0x0E0B }, -{ 0x0E0C, 0x0E0C, 0x0E0C }, -{ 0x0E0D, 0x0E0D, 0x0E0D }, -{ 0x0E0E, 0x0E0E, 0x0E0E }, -{ 0x0E0F, 0x0E0F, 0x0E0F }, -{ 0x0E10, 0x0E10, 0x0E10 }, -{ 0x0E11, 0x0E11, 0x0E11 }, -{ 0x0E12, 0x0E12, 0x0E12 }, -{ 0x0E13, 0x0E13, 0x0E13 }, -{ 0x0E14, 0x0E14, 0x0E14 }, -{ 0x0E15, 0x0E15, 0x0E15 }, -{ 0x0E16, 0x0E16, 0x0E16 }, -{ 0x0E17, 0x0E17, 0x0E17 }, -{ 0x0E18, 0x0E18, 0x0E18 }, -{ 0x0E19, 0x0E19, 0x0E19 }, -{ 0x0E1A, 0x0E1A, 0x0E1A }, -{ 0x0E1B, 0x0E1B, 0x0E1B }, -{ 0x0E1C, 0x0E1C, 0x0E1C }, -{ 0x0E1D, 0x0E1D, 0x0E1D }, -{ 0x0E1E, 0x0E1E, 0x0E1E }, -{ 0x0E1F, 0x0E1F, 0x0E1F }, -{ 0x0E20, 0x0E20, 0x0E20 }, -{ 0x0E21, 0x0E21, 0x0E21 }, -{ 0x0E22, 0x0E22, 0x0E22 }, -{ 0x0E23, 0x0E23, 0x0E23 }, -{ 0x0E24, 0x0E24, 0x0E24 }, -{ 0x0E25, 0x0E25, 0x0E25 }, -{ 0x0E26, 0x0E26, 0x0E26 }, -{ 0x0E27, 0x0E27, 0x0E27 }, -{ 0x0E28, 0x0E28, 0x0E28 }, -{ 0x0E29, 0x0E29, 0x0E29 }, -{ 0x0E2A, 0x0E2A, 0x0E2A }, -{ 0x0E2B, 0x0E2B, 0x0E2B }, -{ 0x0E2C, 0x0E2C, 0x0E2C }, -{ 0x0E2D, 0x0E2D, 0x0E2D }, -{ 0x0E2E, 0x0E2E, 0x0E2E }, -{ 0x0E2F, 0x0E2F, 0x0E2F }, -{ 0x0E30, 0x0E30, 0x0E30 }, -{ 0x0E31, 0x0E31, 0x0E31 }, -{ 0x0E32, 0x0E32, 0x0E32 }, -{ 0x0E33, 0x0E33, 0x0E33 }, -{ 0x0E34, 0x0E34, 0x0E34 }, -{ 0x0E35, 0x0E35, 0x0E35 }, -{ 0x0E36, 0x0E36, 0x0E36 }, -{ 0x0E37, 0x0E37, 0x0E37 }, -{ 0x0E38, 0x0E38, 0x0E38 }, -{ 0x0E39, 0x0E39, 0x0E39 }, -{ 0x0E3A, 0x0E3A, 0x0E3A }, -{ 0x0E40, 0x0E40, 0x0E40 }, -{ 0x0E41, 0x0E41, 0x0E41 }, -{ 0x0E42, 0x0E42, 0x0E42 }, -{ 0x0E43, 0x0E43, 0x0E43 }, -{ 0x0E44, 0x0E44, 0x0E44 }, -{ 0x0E45, 0x0E45, 0x0E45 }, -{ 0x0E46, 0x0E46, 0x0E46 }, -{ 0x0E47, 0x0E47, 0x0E47 }, -{ 0x0E48, 0x0E48, 0x0E48 }, -{ 0x0E49, 0x0E49, 0x0E49 }, -{ 0x0E4A, 0x0E4A, 0x0E4A }, -{ 0x0E4B, 0x0E4B, 0x0E4B }, -{ 0x0E4C, 0x0E4C, 0x0E4C }, -{ 0x0E4D, 0x0E4D, 0x0E4D }, -{ 0x0E4E, 0x0E4E, 0x0E4E }, -{ 0x0E81, 0x0E81, 0x0E81 }, -{ 0x0E82, 0x0E82, 0x0E82 }, -{ 0x0E84, 0x0E84, 0x0E84 }, -{ 0x0E87, 0x0E87, 0x0E87 }, -{ 0x0E88, 0x0E88, 0x0E88 }, -{ 0x0E8A, 0x0E8A, 0x0E8A }, -{ 0x0E8D, 0x0E8D, 0x0E8D }, -{ 0x0E94, 0x0E94, 0x0E94 }, -{ 0x0E95, 0x0E95, 0x0E95 }, -{ 0x0E96, 0x0E96, 0x0E96 }, -{ 0x0E97, 0x0E97, 0x0E97 }, -{ 0x0E99, 0x0E99, 0x0E99 }, -{ 0x0E9A, 0x0E9A, 0x0E9A }, -{ 0x0E9B, 0x0E9B, 0x0E9B }, -{ 0x0E9C, 0x0E9C, 0x0E9C }, -{ 0x0E9D, 0x0E9D, 0x0E9D }, -{ 0x0E9E, 0x0E9E, 0x0E9E }, -{ 0x0E9F, 0x0E9F, 0x0E9F }, -{ 0x0EA1, 0x0EA1, 0x0EA1 }, -{ 0x0EA2, 0x0EA2, 0x0EA2 }, -{ 0x0EA3, 0x0EA3, 0x0EA3 }, -{ 0x0EA5, 0x0EA5, 0x0EA5 }, -{ 0x0EA7, 0x0EA7, 0x0EA7 }, -{ 0x0EAA, 0x0EAA, 0x0EAA }, -{ 0x0EAB, 0x0EAB, 0x0EAB }, -{ 0x0EAD, 0x0EAD, 0x0EAD }, -{ 0x0EAE, 0x0EAE, 0x0EAE }, -{ 0x0EAF, 0x0EAF, 0x0EAF }, -{ 0x0EB0, 0x0EB0, 0x0EB0 }, -{ 0x0EB1, 0x0EB1, 0x0EB1 }, -{ 0x0EB2, 0x0EB2, 0x0EB2 }, -{ 0x0EB3, 0x0EB3, 0x0EB3 }, -{ 0x0EB4, 0x0EB4, 0x0EB4 }, -{ 0x0EB5, 0x0EB5, 0x0EB5 }, -{ 0x0EB6, 0x0EB6, 0x0EB6 }, -{ 0x0EB7, 0x0EB7, 0x0EB7 }, -{ 0x0EB8, 0x0EB8, 0x0EB8 }, -{ 0x0EB9, 0x0EB9, 0x0EB9 }, -{ 0x0EBB, 0x0EBB, 0x0EBB }, -{ 0x0EBC, 0x0EBC, 0x0EBC }, -{ 0x0EBD, 0x0EBD, 0x0EBD }, -{ 0x0EC0, 0x0EC0, 0x0EC0 }, -{ 0x0EC1, 0x0EC1, 0x0EC1 }, -{ 0x0EC2, 0x0EC2, 0x0EC2 }, -{ 0x0EC3, 0x0EC3, 0x0EC3 }, -{ 0x0EC4, 0x0EC4, 0x0EC4 }, -{ 0x0EC6, 0x0EC6, 0x0EC6 }, -{ 0x0EC8, 0x0EC8, 0x0EC8 }, -{ 0x0EC9, 0x0EC9, 0x0EC9 }, -{ 0x0ECA, 0x0ECA, 0x0ECA }, -{ 0x0ECB, 0x0ECB, 0x0ECB }, -{ 0x0ECC, 0x0ECC, 0x0ECC }, -{ 0x0ECD, 0x0ECD, 0x0ECD }, -{ 0x0EDC, 0x0EDC, 0x0EDC }, -{ 0x0EDD, 0x0EDD, 0x0EDD }, -{ 0x0F00, 0x0F00, 0x0F00 }, -{ 0x0F18, 0x0F18, 0x0F18 }, -{ 0x0F19, 0x0F19, 0x0F19 }, -{ 0x0F35, 0x0F35, 0x0F35 }, -{ 0x0F37, 0x0F37, 0x0F37 }, -{ 0x0F39, 0x0F39, 0x0F39 }, -{ 0x0F40, 0x0F40, 0x0F40 }, -{ 0x0F41, 0x0F41, 0x0F41 }, -{ 0x0F42, 0x0F42, 0x0F42 }, -{ 0x0F43, 0x0F43, 0x0F43 }, -{ 0x0F44, 0x0F44, 0x0F44 }, -{ 0x0F45, 0x0F45, 0x0F45 }, -{ 0x0F46, 0x0F46, 0x0F46 }, -{ 0x0F47, 0x0F47, 0x0F47 }, -{ 0x0F49, 0x0F49, 0x0F49 }, -{ 0x0F4A, 0x0F4A, 0x0F4A }, -{ 0x0F4B, 0x0F4B, 0x0F4B }, -{ 0x0F4C, 0x0F4C, 0x0F4C }, -{ 0x0F4D, 0x0F4D, 0x0F4D }, -{ 0x0F4E, 0x0F4E, 0x0F4E }, -{ 0x0F4F, 0x0F4F, 0x0F4F }, -{ 0x0F50, 0x0F50, 0x0F50 }, -{ 0x0F51, 0x0F51, 0x0F51 }, -{ 0x0F52, 0x0F52, 0x0F52 }, -{ 0x0F53, 0x0F53, 0x0F53 }, -{ 0x0F54, 0x0F54, 0x0F54 }, -{ 0x0F55, 0x0F55, 0x0F55 }, -{ 0x0F56, 0x0F56, 0x0F56 }, -{ 0x0F57, 0x0F57, 0x0F57 }, -{ 0x0F58, 0x0F58, 0x0F58 }, -{ 0x0F59, 0x0F59, 0x0F59 }, -{ 0x0F5A, 0x0F5A, 0x0F5A }, -{ 0x0F5B, 0x0F5B, 0x0F5B }, -{ 0x0F5C, 0x0F5C, 0x0F5C }, -{ 0x0F5D, 0x0F5D, 0x0F5D }, -{ 0x0F5E, 0x0F5E, 0x0F5E }, -{ 0x0F5F, 0x0F5F, 0x0F5F }, -{ 0x0F60, 0x0F60, 0x0F60 }, -{ 0x0F61, 0x0F61, 0x0F61 }, -{ 0x0F62, 0x0F62, 0x0F62 }, -{ 0x0F63, 0x0F63, 0x0F63 }, -{ 0x0F64, 0x0F64, 0x0F64 }, -{ 0x0F65, 0x0F65, 0x0F65 }, -{ 0x0F66, 0x0F66, 0x0F66 }, -{ 0x0F67, 0x0F67, 0x0F67 }, -{ 0x0F68, 0x0F68, 0x0F68 }, -{ 0x0F69, 0x0F69, 0x0F69 }, -{ 0x0F6A, 0x0F6A, 0x0F6A }, -{ 0x0F71, 0x0F71, 0x0F71 }, -{ 0x0F72, 0x0F72, 0x0F72 }, -{ 0x0F73, 0x0F73, 0x0F73 }, -{ 0x0F74, 0x0F74, 0x0F74 }, -{ 0x0F75, 0x0F75, 0x0F75 }, -{ 0x0F76, 0x0F76, 0x0F76 }, -{ 0x0F77, 0x0F77, 0x0F77 }, -{ 0x0F78, 0x0F78, 0x0F78 }, -{ 0x0F79, 0x0F79, 0x0F79 }, -{ 0x0F7A, 0x0F7A, 0x0F7A }, -{ 0x0F7B, 0x0F7B, 0x0F7B }, -{ 0x0F7C, 0x0F7C, 0x0F7C }, -{ 0x0F7D, 0x0F7D, 0x0F7D }, -{ 0x0F7E, 0x0F7E, 0x0F7E }, -{ 0x0F80, 0x0F80, 0x0F80 }, -{ 0x0F81, 0x0F81, 0x0F81 }, -{ 0x0F82, 0x0F82, 0x0F82 }, -{ 0x0F83, 0x0F83, 0x0F83 }, -{ 0x0F84, 0x0F84, 0x0F84 }, -{ 0x0F86, 0x0F86, 0x0F86 }, -{ 0x0F87, 0x0F87, 0x0F87 }, -{ 0x0F88, 0x0F88, 0x0F88 }, -{ 0x0F89, 0x0F89, 0x0F89 }, -{ 0x0F8A, 0x0F8A, 0x0F8A }, -{ 0x0F8B, 0x0F8B, 0x0F8B }, -{ 0x0F90, 0x0F90, 0x0F90 }, -{ 0x0F91, 0x0F91, 0x0F91 }, -{ 0x0F92, 0x0F92, 0x0F92 }, -{ 0x0F93, 0x0F93, 0x0F93 }, -{ 0x0F94, 0x0F94, 0x0F94 }, -{ 0x0F95, 0x0F95, 0x0F95 }, -{ 0x0F96, 0x0F96, 0x0F96 }, -{ 0x0F97, 0x0F97, 0x0F97 }, -{ 0x0F99, 0x0F99, 0x0F99 }, -{ 0x0F9A, 0x0F9A, 0x0F9A }, -{ 0x0F9B, 0x0F9B, 0x0F9B }, -{ 0x0F9C, 0x0F9C, 0x0F9C }, -{ 0x0F9D, 0x0F9D, 0x0F9D }, -{ 0x0F9E, 0x0F9E, 0x0F9E }, -{ 0x0F9F, 0x0F9F, 0x0F9F }, -{ 0x0FA0, 0x0FA0, 0x0FA0 }, -{ 0x0FA1, 0x0FA1, 0x0FA1 }, -{ 0x0FA2, 0x0FA2, 0x0FA2 }, -{ 0x0FA3, 0x0FA3, 0x0FA3 }, -{ 0x0FA4, 0x0FA4, 0x0FA4 }, -{ 0x0FA5, 0x0FA5, 0x0FA5 }, -{ 0x0FA6, 0x0FA6, 0x0FA6 }, -{ 0x0FA7, 0x0FA7, 0x0FA7 }, -{ 0x0FA8, 0x0FA8, 0x0FA8 }, -{ 0x0FA9, 0x0FA9, 0x0FA9 }, -{ 0x0FAA, 0x0FAA, 0x0FAA }, -{ 0x0FAB, 0x0FAB, 0x0FAB }, -{ 0x0FAC, 0x0FAC, 0x0FAC }, -{ 0x0FAD, 0x0FAD, 0x0FAD }, -{ 0x0FAE, 0x0FAE, 0x0FAE }, -{ 0x0FAF, 0x0FAF, 0x0FAF }, -{ 0x0FB0, 0x0FB0, 0x0FB0 }, -{ 0x0FB1, 0x0FB1, 0x0FB1 }, -{ 0x0FB2, 0x0FB2, 0x0FB2 }, -{ 0x0FB3, 0x0FB3, 0x0FB3 }, -{ 0x0FB4, 0x0FB4, 0x0FB4 }, -{ 0x0FB5, 0x0FB5, 0x0FB5 }, -{ 0x0FB6, 0x0FB6, 0x0FB6 }, -{ 0x0FB7, 0x0FB7, 0x0FB7 }, -{ 0x0FB8, 0x0FB8, 0x0FB8 }, -{ 0x0FB9, 0x0FB9, 0x0FB9 }, -{ 0x0FBA, 0x0FBA, 0x0FBA }, -{ 0x0FBB, 0x0FBB, 0x0FBB }, -{ 0x0FBC, 0x0FBC, 0x0FBC }, -{ 0x0FC6, 0x0FC6, 0x0FC6 }, -{ 0x1000, 0x1000, 0x1000 }, -{ 0x1001, 0x1001, 0x1001 }, -{ 0x1002, 0x1002, 0x1002 }, -{ 0x1003, 0x1003, 0x1003 }, -{ 0x1004, 0x1004, 0x1004 }, -{ 0x1005, 0x1005, 0x1005 }, -{ 0x1006, 0x1006, 0x1006 }, -{ 0x1007, 0x1007, 0x1007 }, -{ 0x1008, 0x1008, 0x1008 }, -{ 0x1009, 0x1009, 0x1009 }, -{ 0x100A, 0x100A, 0x100A }, -{ 0x100B, 0x100B, 0x100B }, -{ 0x100C, 0x100C, 0x100C }, -{ 0x100D, 0x100D, 0x100D }, -{ 0x100E, 0x100E, 0x100E }, -{ 0x100F, 0x100F, 0x100F }, -{ 0x1010, 0x1010, 0x1010 }, -{ 0x1011, 0x1011, 0x1011 }, -{ 0x1012, 0x1012, 0x1012 }, -{ 0x1013, 0x1013, 0x1013 }, -{ 0x1014, 0x1014, 0x1014 }, -{ 0x1015, 0x1015, 0x1015 }, -{ 0x1016, 0x1016, 0x1016 }, -{ 0x1017, 0x1017, 0x1017 }, -{ 0x1018, 0x1018, 0x1018 }, -{ 0x1019, 0x1019, 0x1019 }, -{ 0x101A, 0x101A, 0x101A }, -{ 0x101B, 0x101B, 0x101B }, -{ 0x101C, 0x101C, 0x101C }, -{ 0x101D, 0x101D, 0x101D }, -{ 0x101E, 0x101E, 0x101E }, -{ 0x101F, 0x101F, 0x101F }, -{ 0x1020, 0x1020, 0x1020 }, -{ 0x1021, 0x1021, 0x1021 }, -{ 0x1023, 0x1023, 0x1023 }, -{ 0x1024, 0x1024, 0x1024 }, -{ 0x1025, 0x1025, 0x1025 }, -{ 0x1026, 0x1026, 0x1026 }, -{ 0x1027, 0x1027, 0x1027 }, -{ 0x1029, 0x1029, 0x1029 }, -{ 0x102A, 0x102A, 0x102A }, -{ 0x102D, 0x102D, 0x102D }, -{ 0x102E, 0x102E, 0x102E }, -{ 0x102F, 0x102F, 0x102F }, -{ 0x1030, 0x1030, 0x1030 }, -{ 0x1032, 0x1032, 0x1032 }, -{ 0x1036, 0x1036, 0x1036 }, -{ 0x1037, 0x1037, 0x1037 }, -{ 0x1039, 0x1039, 0x1039 }, -{ 0x1050, 0x1050, 0x1050 }, -{ 0x1051, 0x1051, 0x1051 }, -{ 0x1052, 0x1052, 0x1052 }, -{ 0x1053, 0x1053, 0x1053 }, -{ 0x1054, 0x1054, 0x1054 }, -{ 0x1055, 0x1055, 0x1055 }, -{ 0x1058, 0x1058, 0x1058 }, -{ 0x1059, 0x1059, 0x1059 }, -{ 0x10A0, 0x10A0, 0x2D00 }, -{ 0x10A1, 0x10A1, 0x2D01 }, -{ 0x10A2, 0x10A2, 0x2D02 }, -{ 0x10A3, 0x10A3, 0x2D03 }, -{ 0x10A4, 0x10A4, 0x2D04 }, -{ 0x10A5, 0x10A5, 0x2D05 }, -{ 0x10A6, 0x10A6, 0x2D06 }, -{ 0x10A7, 0x10A7, 0x2D07 }, -{ 0x10A8, 0x10A8, 0x2D08 }, -{ 0x10A9, 0x10A9, 0x2D09 }, -{ 0x10AA, 0x10AA, 0x2D0A }, -{ 0x10AB, 0x10AB, 0x2D0B }, -{ 0x10AC, 0x10AC, 0x2D0C }, -{ 0x10AD, 0x10AD, 0x2D0D }, -{ 0x10AE, 0x10AE, 0x2D0E }, -{ 0x10AF, 0x10AF, 0x2D0F }, -{ 0x10B0, 0x10B0, 0x2D10 }, -{ 0x10B1, 0x10B1, 0x2D11 }, -{ 0x10B2, 0x10B2, 0x2D12 }, -{ 0x10B3, 0x10B3, 0x2D13 }, -{ 0x10B4, 0x10B4, 0x2D14 }, -{ 0x10B5, 0x10B5, 0x2D15 }, -{ 0x10B6, 0x10B6, 0x2D16 }, -{ 0x10B7, 0x10B7, 0x2D17 }, -{ 0x10B8, 0x10B8, 0x2D18 }, -{ 0x10B9, 0x10B9, 0x2D19 }, -{ 0x10BA, 0x10BA, 0x2D1A }, -{ 0x10BB, 0x10BB, 0x2D1B }, -{ 0x10BC, 0x10BC, 0x2D1C }, -{ 0x10BD, 0x10BD, 0x2D1D }, -{ 0x10BE, 0x10BE, 0x2D1E }, -{ 0x10BF, 0x10BF, 0x2D1F }, -{ 0x10C0, 0x10C0, 0x2D20 }, -{ 0x10C1, 0x10C1, 0x2D21 }, -{ 0x10C2, 0x10C2, 0x2D22 }, -{ 0x10C3, 0x10C3, 0x2D23 }, -{ 0x10C4, 0x10C4, 0x2D24 }, -{ 0x10C5, 0x10C5, 0x2D25 }, -{ 0x10D0, 0x10D0, 0x10D0 }, -{ 0x10D1, 0x10D1, 0x10D1 }, -{ 0x10D2, 0x10D2, 0x10D2 }, -{ 0x10D3, 0x10D3, 0x10D3 }, -{ 0x10D4, 0x10D4, 0x10D4 }, -{ 0x10D5, 0x10D5, 0x10D5 }, -{ 0x10D6, 0x10D6, 0x10D6 }, -{ 0x10D7, 0x10D7, 0x10D7 }, -{ 0x10D8, 0x10D8, 0x10D8 }, -{ 0x10D9, 0x10D9, 0x10D9 }, -{ 0x10DA, 0x10DA, 0x10DA }, -{ 0x10DB, 0x10DB, 0x10DB }, -{ 0x10DC, 0x10DC, 0x10DC }, -{ 0x10DD, 0x10DD, 0x10DD }, -{ 0x10DE, 0x10DE, 0x10DE }, -{ 0x10DF, 0x10DF, 0x10DF }, -{ 0x10E0, 0x10E0, 0x10E0 }, -{ 0x10E1, 0x10E1, 0x10E1 }, -{ 0x10E2, 0x10E2, 0x10E2 }, -{ 0x10E3, 0x10E3, 0x10E3 }, -{ 0x10E4, 0x10E4, 0x10E4 }, -{ 0x10E5, 0x10E5, 0x10E5 }, -{ 0x10E6, 0x10E6, 0x10E6 }, -{ 0x10E7, 0x10E7, 0x10E7 }, -{ 0x10E8, 0x10E8, 0x10E8 }, -{ 0x10E9, 0x10E9, 0x10E9 }, -{ 0x10EA, 0x10EA, 0x10EA }, -{ 0x10EB, 0x10EB, 0x10EB }, -{ 0x10EC, 0x10EC, 0x10EC }, -{ 0x10ED, 0x10ED, 0x10ED }, -{ 0x10EE, 0x10EE, 0x10EE }, -{ 0x10EF, 0x10EF, 0x10EF }, -{ 0x10F0, 0x10F0, 0x10F0 }, -{ 0x10F1, 0x10F1, 0x10F1 }, -{ 0x10F2, 0x10F2, 0x10F2 }, -{ 0x10F3, 0x10F3, 0x10F3 }, -{ 0x10F4, 0x10F4, 0x10F4 }, -{ 0x10F5, 0x10F5, 0x10F5 }, -{ 0x10F6, 0x10F6, 0x10F6 }, -{ 0x10F7, 0x10F7, 0x10F7 }, -{ 0x10F8, 0x10F8, 0x10F8 }, -{ 0x10F9, 0x10F9, 0x10F9 }, -{ 0x10FA, 0x10FA, 0x10FA }, -{ 0x10FC, 0x10FC, 0x10FC }, -{ 0x1100, 0x1100, 0x1100 }, -{ 0x1101, 0x1101, 0x1101 }, -{ 0x1102, 0x1102, 0x1102 }, -{ 0x1103, 0x1103, 0x1103 }, -{ 0x1104, 0x1104, 0x1104 }, -{ 0x1105, 0x1105, 0x1105 }, -{ 0x1106, 0x1106, 0x1106 }, -{ 0x1107, 0x1107, 0x1107 }, -{ 0x1108, 0x1108, 0x1108 }, -{ 0x1109, 0x1109, 0x1109 }, -{ 0x110A, 0x110A, 0x110A }, -{ 0x110B, 0x110B, 0x110B }, -{ 0x110C, 0x110C, 0x110C }, -{ 0x110D, 0x110D, 0x110D }, -{ 0x110E, 0x110E, 0x110E }, -{ 0x110F, 0x110F, 0x110F }, -{ 0x1110, 0x1110, 0x1110 }, -{ 0x1111, 0x1111, 0x1111 }, -{ 0x1112, 0x1112, 0x1112 }, -{ 0x1113, 0x1113, 0x1113 }, -{ 0x1114, 0x1114, 0x1114 }, -{ 0x1115, 0x1115, 0x1115 }, -{ 0x1116, 0x1116, 0x1116 }, -{ 0x1117, 0x1117, 0x1117 }, -{ 0x1118, 0x1118, 0x1118 }, -{ 0x1119, 0x1119, 0x1119 }, -{ 0x111A, 0x111A, 0x111A }, -{ 0x111B, 0x111B, 0x111B }, -{ 0x111C, 0x111C, 0x111C }, -{ 0x111D, 0x111D, 0x111D }, -{ 0x111E, 0x111E, 0x111E }, -{ 0x111F, 0x111F, 0x111F }, -{ 0x1120, 0x1120, 0x1120 }, -{ 0x1121, 0x1121, 0x1121 }, -{ 0x1122, 0x1122, 0x1122 }, -{ 0x1123, 0x1123, 0x1123 }, -{ 0x1124, 0x1124, 0x1124 }, -{ 0x1125, 0x1125, 0x1125 }, -{ 0x1126, 0x1126, 0x1126 }, -{ 0x1127, 0x1127, 0x1127 }, -{ 0x1128, 0x1128, 0x1128 }, -{ 0x1129, 0x1129, 0x1129 }, -{ 0x112A, 0x112A, 0x112A }, -{ 0x112B, 0x112B, 0x112B }, -{ 0x112C, 0x112C, 0x112C }, -{ 0x112D, 0x112D, 0x112D }, -{ 0x112E, 0x112E, 0x112E }, -{ 0x112F, 0x112F, 0x112F }, -{ 0x1130, 0x1130, 0x1130 }, -{ 0x1131, 0x1131, 0x1131 }, -{ 0x1132, 0x1132, 0x1132 }, -{ 0x1133, 0x1133, 0x1133 }, -{ 0x1134, 0x1134, 0x1134 }, -{ 0x1135, 0x1135, 0x1135 }, -{ 0x1136, 0x1136, 0x1136 }, -{ 0x1137, 0x1137, 0x1137 }, -{ 0x1138, 0x1138, 0x1138 }, -{ 0x1139, 0x1139, 0x1139 }, -{ 0x113A, 0x113A, 0x113A }, -{ 0x113B, 0x113B, 0x113B }, -{ 0x113C, 0x113C, 0x113C }, -{ 0x113D, 0x113D, 0x113D }, -{ 0x113E, 0x113E, 0x113E }, -{ 0x113F, 0x113F, 0x113F }, -{ 0x1140, 0x1140, 0x1140 }, -{ 0x1141, 0x1141, 0x1141 }, -{ 0x1142, 0x1142, 0x1142 }, -{ 0x1143, 0x1143, 0x1143 }, -{ 0x1144, 0x1144, 0x1144 }, -{ 0x1145, 0x1145, 0x1145 }, -{ 0x1146, 0x1146, 0x1146 }, -{ 0x1147, 0x1147, 0x1147 }, -{ 0x1148, 0x1148, 0x1148 }, -{ 0x1149, 0x1149, 0x1149 }, -{ 0x114A, 0x114A, 0x114A }, -{ 0x114B, 0x114B, 0x114B }, -{ 0x114C, 0x114C, 0x114C }, -{ 0x114D, 0x114D, 0x114D }, -{ 0x114E, 0x114E, 0x114E }, -{ 0x114F, 0x114F, 0x114F }, -{ 0x1150, 0x1150, 0x1150 }, -{ 0x1151, 0x1151, 0x1151 }, -{ 0x1152, 0x1152, 0x1152 }, -{ 0x1153, 0x1153, 0x1153 }, -{ 0x1154, 0x1154, 0x1154 }, -{ 0x1155, 0x1155, 0x1155 }, -{ 0x1156, 0x1156, 0x1156 }, -{ 0x1157, 0x1157, 0x1157 }, -{ 0x1158, 0x1158, 0x1158 }, -{ 0x1159, 0x1159, 0x1159 }, -{ 0x115F, 0x115F, 0x115F }, -{ 0x1160, 0x1160, 0x1160 }, -{ 0x1161, 0x1161, 0x1161 }, -{ 0x1162, 0x1162, 0x1162 }, -{ 0x1163, 0x1163, 0x1163 }, -{ 0x1164, 0x1164, 0x1164 }, -{ 0x1165, 0x1165, 0x1165 }, -{ 0x1166, 0x1166, 0x1166 }, -{ 0x1167, 0x1167, 0x1167 }, -{ 0x1168, 0x1168, 0x1168 }, -{ 0x1169, 0x1169, 0x1169 }, -{ 0x116A, 0x116A, 0x116A }, -{ 0x116B, 0x116B, 0x116B }, -{ 0x116C, 0x116C, 0x116C }, -{ 0x116D, 0x116D, 0x116D }, -{ 0x116E, 0x116E, 0x116E }, -{ 0x116F, 0x116F, 0x116F }, -{ 0x1170, 0x1170, 0x1170 }, -{ 0x1171, 0x1171, 0x1171 }, -{ 0x1172, 0x1172, 0x1172 }, -{ 0x1173, 0x1173, 0x1173 }, -{ 0x1174, 0x1174, 0x1174 }, -{ 0x1175, 0x1175, 0x1175 }, -{ 0x1176, 0x1176, 0x1176 }, -{ 0x1177, 0x1177, 0x1177 }, -{ 0x1178, 0x1178, 0x1178 }, -{ 0x1179, 0x1179, 0x1179 }, -{ 0x117A, 0x117A, 0x117A }, -{ 0x117B, 0x117B, 0x117B }, -{ 0x117C, 0x117C, 0x117C }, -{ 0x117D, 0x117D, 0x117D }, -{ 0x117E, 0x117E, 0x117E }, -{ 0x117F, 0x117F, 0x117F }, -{ 0x1180, 0x1180, 0x1180 }, -{ 0x1181, 0x1181, 0x1181 }, -{ 0x1182, 0x1182, 0x1182 }, -{ 0x1183, 0x1183, 0x1183 }, -{ 0x1184, 0x1184, 0x1184 }, -{ 0x1185, 0x1185, 0x1185 }, -{ 0x1186, 0x1186, 0x1186 }, -{ 0x1187, 0x1187, 0x1187 }, -{ 0x1188, 0x1188, 0x1188 }, -{ 0x1189, 0x1189, 0x1189 }, -{ 0x118A, 0x118A, 0x118A }, -{ 0x118B, 0x118B, 0x118B }, -{ 0x118C, 0x118C, 0x118C }, -{ 0x118D, 0x118D, 0x118D }, -{ 0x118E, 0x118E, 0x118E }, -{ 0x118F, 0x118F, 0x118F }, -{ 0x1190, 0x1190, 0x1190 }, -{ 0x1191, 0x1191, 0x1191 }, -{ 0x1192, 0x1192, 0x1192 }, -{ 0x1193, 0x1193, 0x1193 }, -{ 0x1194, 0x1194, 0x1194 }, -{ 0x1195, 0x1195, 0x1195 }, -{ 0x1196, 0x1196, 0x1196 }, -{ 0x1197, 0x1197, 0x1197 }, -{ 0x1198, 0x1198, 0x1198 }, -{ 0x1199, 0x1199, 0x1199 }, -{ 0x119A, 0x119A, 0x119A }, -{ 0x119B, 0x119B, 0x119B }, -{ 0x119C, 0x119C, 0x119C }, -{ 0x119D, 0x119D, 0x119D }, -{ 0x119E, 0x119E, 0x119E }, -{ 0x119F, 0x119F, 0x119F }, -{ 0x11A0, 0x11A0, 0x11A0 }, -{ 0x11A1, 0x11A1, 0x11A1 }, -{ 0x11A2, 0x11A2, 0x11A2 }, -{ 0x11A8, 0x11A8, 0x11A8 }, -{ 0x11A9, 0x11A9, 0x11A9 }, -{ 0x11AA, 0x11AA, 0x11AA }, -{ 0x11AB, 0x11AB, 0x11AB }, -{ 0x11AC, 0x11AC, 0x11AC }, -{ 0x11AD, 0x11AD, 0x11AD }, -{ 0x11AE, 0x11AE, 0x11AE }, -{ 0x11AF, 0x11AF, 0x11AF }, -{ 0x11B0, 0x11B0, 0x11B0 }, -{ 0x11B1, 0x11B1, 0x11B1 }, -{ 0x11B2, 0x11B2, 0x11B2 }, -{ 0x11B3, 0x11B3, 0x11B3 }, -{ 0x11B4, 0x11B4, 0x11B4 }, -{ 0x11B5, 0x11B5, 0x11B5 }, -{ 0x11B6, 0x11B6, 0x11B6 }, -{ 0x11B7, 0x11B7, 0x11B7 }, -{ 0x11B8, 0x11B8, 0x11B8 }, -{ 0x11B9, 0x11B9, 0x11B9 }, -{ 0x11BA, 0x11BA, 0x11BA }, -{ 0x11BB, 0x11BB, 0x11BB }, -{ 0x11BC, 0x11BC, 0x11BC }, -{ 0x11BD, 0x11BD, 0x11BD }, -{ 0x11BE, 0x11BE, 0x11BE }, -{ 0x11BF, 0x11BF, 0x11BF }, -{ 0x11C0, 0x11C0, 0x11C0 }, -{ 0x11C1, 0x11C1, 0x11C1 }, -{ 0x11C2, 0x11C2, 0x11C2 }, -{ 0x11C3, 0x11C3, 0x11C3 }, -{ 0x11C4, 0x11C4, 0x11C4 }, -{ 0x11C5, 0x11C5, 0x11C5 }, -{ 0x11C6, 0x11C6, 0x11C6 }, -{ 0x11C7, 0x11C7, 0x11C7 }, -{ 0x11C8, 0x11C8, 0x11C8 }, -{ 0x11C9, 0x11C9, 0x11C9 }, -{ 0x11CA, 0x11CA, 0x11CA }, -{ 0x11CB, 0x11CB, 0x11CB }, -{ 0x11CC, 0x11CC, 0x11CC }, -{ 0x11CD, 0x11CD, 0x11CD }, -{ 0x11CE, 0x11CE, 0x11CE }, -{ 0x11CF, 0x11CF, 0x11CF }, -{ 0x11D0, 0x11D0, 0x11D0 }, -{ 0x11D1, 0x11D1, 0x11D1 }, -{ 0x11D2, 0x11D2, 0x11D2 }, -{ 0x11D3, 0x11D3, 0x11D3 }, -{ 0x11D4, 0x11D4, 0x11D4 }, -{ 0x11D5, 0x11D5, 0x11D5 }, -{ 0x11D6, 0x11D6, 0x11D6 }, -{ 0x11D7, 0x11D7, 0x11D7 }, -{ 0x11D8, 0x11D8, 0x11D8 }, -{ 0x11D9, 0x11D9, 0x11D9 }, -{ 0x11DA, 0x11DA, 0x11DA }, -{ 0x11DB, 0x11DB, 0x11DB }, -{ 0x11DC, 0x11DC, 0x11DC }, -{ 0x11DD, 0x11DD, 0x11DD }, -{ 0x11DE, 0x11DE, 0x11DE }, -{ 0x11DF, 0x11DF, 0x11DF }, -{ 0x11E0, 0x11E0, 0x11E0 }, -{ 0x11E1, 0x11E1, 0x11E1 }, -{ 0x11E2, 0x11E2, 0x11E2 }, -{ 0x11E3, 0x11E3, 0x11E3 }, -{ 0x11E4, 0x11E4, 0x11E4 }, -{ 0x11E5, 0x11E5, 0x11E5 }, -{ 0x11E6, 0x11E6, 0x11E6 }, -{ 0x11E7, 0x11E7, 0x11E7 }, -{ 0x11E8, 0x11E8, 0x11E8 }, -{ 0x11E9, 0x11E9, 0x11E9 }, -{ 0x11EA, 0x11EA, 0x11EA }, -{ 0x11EB, 0x11EB, 0x11EB }, -{ 0x11EC, 0x11EC, 0x11EC }, -{ 0x11ED, 0x11ED, 0x11ED }, -{ 0x11EE, 0x11EE, 0x11EE }, -{ 0x11EF, 0x11EF, 0x11EF }, -{ 0x11F0, 0x11F0, 0x11F0 }, -{ 0x11F1, 0x11F1, 0x11F1 }, -{ 0x11F2, 0x11F2, 0x11F2 }, -{ 0x11F3, 0x11F3, 0x11F3 }, -{ 0x11F4, 0x11F4, 0x11F4 }, -{ 0x11F5, 0x11F5, 0x11F5 }, -{ 0x11F6, 0x11F6, 0x11F6 }, -{ 0x11F7, 0x11F7, 0x11F7 }, -{ 0x11F8, 0x11F8, 0x11F8 }, -{ 0x11F9, 0x11F9, 0x11F9 }, -{ 0x1200, 0x1200, 0x1200 }, -{ 0x1201, 0x1201, 0x1201 }, -{ 0x1202, 0x1202, 0x1202 }, -{ 0x1203, 0x1203, 0x1203 }, -{ 0x1204, 0x1204, 0x1204 }, -{ 0x1205, 0x1205, 0x1205 }, -{ 0x1206, 0x1206, 0x1206 }, -{ 0x1207, 0x1207, 0x1207 }, -{ 0x1208, 0x1208, 0x1208 }, -{ 0x1209, 0x1209, 0x1209 }, -{ 0x120A, 0x120A, 0x120A }, -{ 0x120B, 0x120B, 0x120B }, -{ 0x120C, 0x120C, 0x120C }, -{ 0x120D, 0x120D, 0x120D }, -{ 0x120E, 0x120E, 0x120E }, -{ 0x120F, 0x120F, 0x120F }, -{ 0x1210, 0x1210, 0x1210 }, -{ 0x1211, 0x1211, 0x1211 }, -{ 0x1212, 0x1212, 0x1212 }, -{ 0x1213, 0x1213, 0x1213 }, -{ 0x1214, 0x1214, 0x1214 }, -{ 0x1215, 0x1215, 0x1215 }, -{ 0x1216, 0x1216, 0x1216 }, -{ 0x1217, 0x1217, 0x1217 }, -{ 0x1218, 0x1218, 0x1218 }, -{ 0x1219, 0x1219, 0x1219 }, -{ 0x121A, 0x121A, 0x121A }, -{ 0x121B, 0x121B, 0x121B }, -{ 0x121C, 0x121C, 0x121C }, -{ 0x121D, 0x121D, 0x121D }, -{ 0x121E, 0x121E, 0x121E }, -{ 0x121F, 0x121F, 0x121F }, -{ 0x1220, 0x1220, 0x1220 }, -{ 0x1221, 0x1221, 0x1221 }, -{ 0x1222, 0x1222, 0x1222 }, -{ 0x1223, 0x1223, 0x1223 }, -{ 0x1224, 0x1224, 0x1224 }, -{ 0x1225, 0x1225, 0x1225 }, -{ 0x1226, 0x1226, 0x1226 }, -{ 0x1227, 0x1227, 0x1227 }, -{ 0x1228, 0x1228, 0x1228 }, -{ 0x1229, 0x1229, 0x1229 }, -{ 0x122A, 0x122A, 0x122A }, -{ 0x122B, 0x122B, 0x122B }, -{ 0x122C, 0x122C, 0x122C }, -{ 0x122D, 0x122D, 0x122D }, -{ 0x122E, 0x122E, 0x122E }, -{ 0x122F, 0x122F, 0x122F }, -{ 0x1230, 0x1230, 0x1230 }, -{ 0x1231, 0x1231, 0x1231 }, -{ 0x1232, 0x1232, 0x1232 }, -{ 0x1233, 0x1233, 0x1233 }, -{ 0x1234, 0x1234, 0x1234 }, -{ 0x1235, 0x1235, 0x1235 }, -{ 0x1236, 0x1236, 0x1236 }, -{ 0x1237, 0x1237, 0x1237 }, -{ 0x1238, 0x1238, 0x1238 }, -{ 0x1239, 0x1239, 0x1239 }, -{ 0x123A, 0x123A, 0x123A }, -{ 0x123B, 0x123B, 0x123B }, -{ 0x123C, 0x123C, 0x123C }, -{ 0x123D, 0x123D, 0x123D }, -{ 0x123E, 0x123E, 0x123E }, -{ 0x123F, 0x123F, 0x123F }, -{ 0x1240, 0x1240, 0x1240 }, -{ 0x1241, 0x1241, 0x1241 }, -{ 0x1242, 0x1242, 0x1242 }, -{ 0x1243, 0x1243, 0x1243 }, -{ 0x1244, 0x1244, 0x1244 }, -{ 0x1245, 0x1245, 0x1245 }, -{ 0x1246, 0x1246, 0x1246 }, -{ 0x1247, 0x1247, 0x1247 }, -{ 0x1248, 0x1248, 0x1248 }, -{ 0x124A, 0x124A, 0x124A }, -{ 0x124B, 0x124B, 0x124B }, -{ 0x124C, 0x124C, 0x124C }, -{ 0x124D, 0x124D, 0x124D }, -{ 0x1250, 0x1250, 0x1250 }, -{ 0x1251, 0x1251, 0x1251 }, -{ 0x1252, 0x1252, 0x1252 }, -{ 0x1253, 0x1253, 0x1253 }, -{ 0x1254, 0x1254, 0x1254 }, -{ 0x1255, 0x1255, 0x1255 }, -{ 0x1256, 0x1256, 0x1256 }, -{ 0x1258, 0x1258, 0x1258 }, -{ 0x125A, 0x125A, 0x125A }, -{ 0x125B, 0x125B, 0x125B }, -{ 0x125C, 0x125C, 0x125C }, -{ 0x125D, 0x125D, 0x125D }, -{ 0x1260, 0x1260, 0x1260 }, -{ 0x1261, 0x1261, 0x1261 }, -{ 0x1262, 0x1262, 0x1262 }, -{ 0x1263, 0x1263, 0x1263 }, -{ 0x1264, 0x1264, 0x1264 }, -{ 0x1265, 0x1265, 0x1265 }, -{ 0x1266, 0x1266, 0x1266 }, -{ 0x1267, 0x1267, 0x1267 }, -{ 0x1268, 0x1268, 0x1268 }, -{ 0x1269, 0x1269, 0x1269 }, -{ 0x126A, 0x126A, 0x126A }, -{ 0x126B, 0x126B, 0x126B }, -{ 0x126C, 0x126C, 0x126C }, -{ 0x126D, 0x126D, 0x126D }, -{ 0x126E, 0x126E, 0x126E }, -{ 0x126F, 0x126F, 0x126F }, -{ 0x1270, 0x1270, 0x1270 }, -{ 0x1271, 0x1271, 0x1271 }, -{ 0x1272, 0x1272, 0x1272 }, -{ 0x1273, 0x1273, 0x1273 }, -{ 0x1274, 0x1274, 0x1274 }, -{ 0x1275, 0x1275, 0x1275 }, -{ 0x1276, 0x1276, 0x1276 }, -{ 0x1277, 0x1277, 0x1277 }, -{ 0x1278, 0x1278, 0x1278 }, -{ 0x1279, 0x1279, 0x1279 }, -{ 0x127A, 0x127A, 0x127A }, -{ 0x127B, 0x127B, 0x127B }, -{ 0x127C, 0x127C, 0x127C }, -{ 0x127D, 0x127D, 0x127D }, -{ 0x127E, 0x127E, 0x127E }, -{ 0x127F, 0x127F, 0x127F }, -{ 0x1280, 0x1280, 0x1280 }, -{ 0x1281, 0x1281, 0x1281 }, -{ 0x1282, 0x1282, 0x1282 }, -{ 0x1283, 0x1283, 0x1283 }, -{ 0x1284, 0x1284, 0x1284 }, -{ 0x1285, 0x1285, 0x1285 }, -{ 0x1286, 0x1286, 0x1286 }, -{ 0x1287, 0x1287, 0x1287 }, -{ 0x1288, 0x1288, 0x1288 }, -{ 0x128A, 0x128A, 0x128A }, -{ 0x128B, 0x128B, 0x128B }, -{ 0x128C, 0x128C, 0x128C }, -{ 0x128D, 0x128D, 0x128D }, -{ 0x1290, 0x1290, 0x1290 }, -{ 0x1291, 0x1291, 0x1291 }, -{ 0x1292, 0x1292, 0x1292 }, -{ 0x1293, 0x1293, 0x1293 }, -{ 0x1294, 0x1294, 0x1294 }, -{ 0x1295, 0x1295, 0x1295 }, -{ 0x1296, 0x1296, 0x1296 }, -{ 0x1297, 0x1297, 0x1297 }, -{ 0x1298, 0x1298, 0x1298 }, -{ 0x1299, 0x1299, 0x1299 }, -{ 0x129A, 0x129A, 0x129A }, -{ 0x129B, 0x129B, 0x129B }, -{ 0x129C, 0x129C, 0x129C }, -{ 0x129D, 0x129D, 0x129D }, -{ 0x129E, 0x129E, 0x129E }, -{ 0x129F, 0x129F, 0x129F }, -{ 0x12A0, 0x12A0, 0x12A0 }, -{ 0x12A1, 0x12A1, 0x12A1 }, -{ 0x12A2, 0x12A2, 0x12A2 }, -{ 0x12A3, 0x12A3, 0x12A3 }, -{ 0x12A4, 0x12A4, 0x12A4 }, -{ 0x12A5, 0x12A5, 0x12A5 }, -{ 0x12A6, 0x12A6, 0x12A6 }, -{ 0x12A7, 0x12A7, 0x12A7 }, -{ 0x12A8, 0x12A8, 0x12A8 }, -{ 0x12A9, 0x12A9, 0x12A9 }, -{ 0x12AA, 0x12AA, 0x12AA }, -{ 0x12AB, 0x12AB, 0x12AB }, -{ 0x12AC, 0x12AC, 0x12AC }, -{ 0x12AD, 0x12AD, 0x12AD }, -{ 0x12AE, 0x12AE, 0x12AE }, -{ 0x12AF, 0x12AF, 0x12AF }, -{ 0x12B0, 0x12B0, 0x12B0 }, -{ 0x12B2, 0x12B2, 0x12B2 }, -{ 0x12B3, 0x12B3, 0x12B3 }, -{ 0x12B4, 0x12B4, 0x12B4 }, -{ 0x12B5, 0x12B5, 0x12B5 }, -{ 0x12B8, 0x12B8, 0x12B8 }, -{ 0x12B9, 0x12B9, 0x12B9 }, -{ 0x12BA, 0x12BA, 0x12BA }, -{ 0x12BB, 0x12BB, 0x12BB }, -{ 0x12BC, 0x12BC, 0x12BC }, -{ 0x12BD, 0x12BD, 0x12BD }, -{ 0x12BE, 0x12BE, 0x12BE }, -{ 0x12C0, 0x12C0, 0x12C0 }, -{ 0x12C2, 0x12C2, 0x12C2 }, -{ 0x12C3, 0x12C3, 0x12C3 }, -{ 0x12C4, 0x12C4, 0x12C4 }, -{ 0x12C5, 0x12C5, 0x12C5 }, -{ 0x12C8, 0x12C8, 0x12C8 }, -{ 0x12C9, 0x12C9, 0x12C9 }, -{ 0x12CA, 0x12CA, 0x12CA }, -{ 0x12CB, 0x12CB, 0x12CB }, -{ 0x12CC, 0x12CC, 0x12CC }, -{ 0x12CD, 0x12CD, 0x12CD }, -{ 0x12CE, 0x12CE, 0x12CE }, -{ 0x12CF, 0x12CF, 0x12CF }, -{ 0x12D0, 0x12D0, 0x12D0 }, -{ 0x12D1, 0x12D1, 0x12D1 }, -{ 0x12D2, 0x12D2, 0x12D2 }, -{ 0x12D3, 0x12D3, 0x12D3 }, -{ 0x12D4, 0x12D4, 0x12D4 }, -{ 0x12D5, 0x12D5, 0x12D5 }, -{ 0x12D6, 0x12D6, 0x12D6 }, -{ 0x12D8, 0x12D8, 0x12D8 }, -{ 0x12D9, 0x12D9, 0x12D9 }, -{ 0x12DA, 0x12DA, 0x12DA }, -{ 0x12DB, 0x12DB, 0x12DB }, -{ 0x12DC, 0x12DC, 0x12DC }, -{ 0x12DD, 0x12DD, 0x12DD }, -{ 0x12DE, 0x12DE, 0x12DE }, -{ 0x12DF, 0x12DF, 0x12DF }, -{ 0x12E0, 0x12E0, 0x12E0 }, -{ 0x12E1, 0x12E1, 0x12E1 }, -{ 0x12E2, 0x12E2, 0x12E2 }, -{ 0x12E3, 0x12E3, 0x12E3 }, -{ 0x12E4, 0x12E4, 0x12E4 }, -{ 0x12E5, 0x12E5, 0x12E5 }, -{ 0x12E6, 0x12E6, 0x12E6 }, -{ 0x12E7, 0x12E7, 0x12E7 }, -{ 0x12E8, 0x12E8, 0x12E8 }, -{ 0x12E9, 0x12E9, 0x12E9 }, -{ 0x12EA, 0x12EA, 0x12EA }, -{ 0x12EB, 0x12EB, 0x12EB }, -{ 0x12EC, 0x12EC, 0x12EC }, -{ 0x12ED, 0x12ED, 0x12ED }, -{ 0x12EE, 0x12EE, 0x12EE }, -{ 0x12EF, 0x12EF, 0x12EF }, -{ 0x12F0, 0x12F0, 0x12F0 }, -{ 0x12F1, 0x12F1, 0x12F1 }, -{ 0x12F2, 0x12F2, 0x12F2 }, -{ 0x12F3, 0x12F3, 0x12F3 }, -{ 0x12F4, 0x12F4, 0x12F4 }, -{ 0x12F5, 0x12F5, 0x12F5 }, -{ 0x12F6, 0x12F6, 0x12F6 }, -{ 0x12F7, 0x12F7, 0x12F7 }, -{ 0x12F8, 0x12F8, 0x12F8 }, -{ 0x12F9, 0x12F9, 0x12F9 }, -{ 0x12FA, 0x12FA, 0x12FA }, -{ 0x12FB, 0x12FB, 0x12FB }, -{ 0x12FC, 0x12FC, 0x12FC }, -{ 0x12FD, 0x12FD, 0x12FD }, -{ 0x12FE, 0x12FE, 0x12FE }, -{ 0x12FF, 0x12FF, 0x12FF }, -{ 0x1300, 0x1300, 0x1300 }, -{ 0x1301, 0x1301, 0x1301 }, -{ 0x1302, 0x1302, 0x1302 }, -{ 0x1303, 0x1303, 0x1303 }, -{ 0x1304, 0x1304, 0x1304 }, -{ 0x1305, 0x1305, 0x1305 }, -{ 0x1306, 0x1306, 0x1306 }, -{ 0x1307, 0x1307, 0x1307 }, -{ 0x1308, 0x1308, 0x1308 }, -{ 0x1309, 0x1309, 0x1309 }, -{ 0x130A, 0x130A, 0x130A }, -{ 0x130B, 0x130B, 0x130B }, -{ 0x130C, 0x130C, 0x130C }, -{ 0x130D, 0x130D, 0x130D }, -{ 0x130E, 0x130E, 0x130E }, -{ 0x130F, 0x130F, 0x130F }, -{ 0x1310, 0x1310, 0x1310 }, -{ 0x1312, 0x1312, 0x1312 }, -{ 0x1313, 0x1313, 0x1313 }, -{ 0x1314, 0x1314, 0x1314 }, -{ 0x1315, 0x1315, 0x1315 }, -{ 0x1318, 0x1318, 0x1318 }, -{ 0x1319, 0x1319, 0x1319 }, -{ 0x131A, 0x131A, 0x131A }, -{ 0x131B, 0x131B, 0x131B }, -{ 0x131C, 0x131C, 0x131C }, -{ 0x131D, 0x131D, 0x131D }, -{ 0x131E, 0x131E, 0x131E }, -{ 0x131F, 0x131F, 0x131F }, -{ 0x1320, 0x1320, 0x1320 }, -{ 0x1321, 0x1321, 0x1321 }, -{ 0x1322, 0x1322, 0x1322 }, -{ 0x1323, 0x1323, 0x1323 }, -{ 0x1324, 0x1324, 0x1324 }, -{ 0x1325, 0x1325, 0x1325 }, -{ 0x1326, 0x1326, 0x1326 }, -{ 0x1327, 0x1327, 0x1327 }, -{ 0x1328, 0x1328, 0x1328 }, -{ 0x1329, 0x1329, 0x1329 }, -{ 0x132A, 0x132A, 0x132A }, -{ 0x132B, 0x132B, 0x132B }, -{ 0x132C, 0x132C, 0x132C }, -{ 0x132D, 0x132D, 0x132D }, -{ 0x132E, 0x132E, 0x132E }, -{ 0x132F, 0x132F, 0x132F }, -{ 0x1330, 0x1330, 0x1330 }, -{ 0x1331, 0x1331, 0x1331 }, -{ 0x1332, 0x1332, 0x1332 }, -{ 0x1333, 0x1333, 0x1333 }, -{ 0x1334, 0x1334, 0x1334 }, -{ 0x1335, 0x1335, 0x1335 }, -{ 0x1336, 0x1336, 0x1336 }, -{ 0x1337, 0x1337, 0x1337 }, -{ 0x1338, 0x1338, 0x1338 }, -{ 0x1339, 0x1339, 0x1339 }, -{ 0x133A, 0x133A, 0x133A }, -{ 0x133B, 0x133B, 0x133B }, -{ 0x133C, 0x133C, 0x133C }, -{ 0x133D, 0x133D, 0x133D }, -{ 0x133E, 0x133E, 0x133E }, -{ 0x133F, 0x133F, 0x133F }, -{ 0x1340, 0x1340, 0x1340 }, -{ 0x1341, 0x1341, 0x1341 }, -{ 0x1342, 0x1342, 0x1342 }, -{ 0x1343, 0x1343, 0x1343 }, -{ 0x1344, 0x1344, 0x1344 }, -{ 0x1345, 0x1345, 0x1345 }, -{ 0x1346, 0x1346, 0x1346 }, -{ 0x1347, 0x1347, 0x1347 }, -{ 0x1348, 0x1348, 0x1348 }, -{ 0x1349, 0x1349, 0x1349 }, -{ 0x134A, 0x134A, 0x134A }, -{ 0x134B, 0x134B, 0x134B }, -{ 0x134C, 0x134C, 0x134C }, -{ 0x134D, 0x134D, 0x134D }, -{ 0x134E, 0x134E, 0x134E }, -{ 0x134F, 0x134F, 0x134F }, -{ 0x1350, 0x1350, 0x1350 }, -{ 0x1351, 0x1351, 0x1351 }, -{ 0x1352, 0x1352, 0x1352 }, -{ 0x1353, 0x1353, 0x1353 }, -{ 0x1354, 0x1354, 0x1354 }, -{ 0x1355, 0x1355, 0x1355 }, -{ 0x1356, 0x1356, 0x1356 }, -{ 0x1357, 0x1357, 0x1357 }, -{ 0x1358, 0x1358, 0x1358 }, -{ 0x1359, 0x1359, 0x1359 }, -{ 0x135A, 0x135A, 0x135A }, -{ 0x135F, 0x135F, 0x135F }, -{ 0x1380, 0x1380, 0x1380 }, -{ 0x1381, 0x1381, 0x1381 }, -{ 0x1382, 0x1382, 0x1382 }, -{ 0x1383, 0x1383, 0x1383 }, -{ 0x1384, 0x1384, 0x1384 }, -{ 0x1385, 0x1385, 0x1385 }, -{ 0x1386, 0x1386, 0x1386 }, -{ 0x1387, 0x1387, 0x1387 }, -{ 0x1388, 0x1388, 0x1388 }, -{ 0x1389, 0x1389, 0x1389 }, -{ 0x138A, 0x138A, 0x138A }, -{ 0x138B, 0x138B, 0x138B }, -{ 0x138C, 0x138C, 0x138C }, -{ 0x138D, 0x138D, 0x138D }, -{ 0x138E, 0x138E, 0x138E }, -{ 0x138F, 0x138F, 0x138F }, -{ 0x13A0, 0x13A0, 0x13A0 }, -{ 0x13A1, 0x13A1, 0x13A1 }, -{ 0x13A2, 0x13A2, 0x13A2 }, -{ 0x13A3, 0x13A3, 0x13A3 }, -{ 0x13A4, 0x13A4, 0x13A4 }, -{ 0x13A5, 0x13A5, 0x13A5 }, -{ 0x13A6, 0x13A6, 0x13A6 }, -{ 0x13A7, 0x13A7, 0x13A7 }, -{ 0x13A8, 0x13A8, 0x13A8 }, -{ 0x13A9, 0x13A9, 0x13A9 }, -{ 0x13AA, 0x13AA, 0x13AA }, -{ 0x13AB, 0x13AB, 0x13AB }, -{ 0x13AC, 0x13AC, 0x13AC }, -{ 0x13AD, 0x13AD, 0x13AD }, -{ 0x13AE, 0x13AE, 0x13AE }, -{ 0x13AF, 0x13AF, 0x13AF }, -{ 0x13B0, 0x13B0, 0x13B0 }, -{ 0x13B1, 0x13B1, 0x13B1 }, -{ 0x13B2, 0x13B2, 0x13B2 }, -{ 0x13B3, 0x13B3, 0x13B3 }, -{ 0x13B4, 0x13B4, 0x13B4 }, -{ 0x13B5, 0x13B5, 0x13B5 }, -{ 0x13B6, 0x13B6, 0x13B6 }, -{ 0x13B7, 0x13B7, 0x13B7 }, -{ 0x13B8, 0x13B8, 0x13B8 }, -{ 0x13B9, 0x13B9, 0x13B9 }, -{ 0x13BA, 0x13BA, 0x13BA }, -{ 0x13BB, 0x13BB, 0x13BB }, -{ 0x13BC, 0x13BC, 0x13BC }, -{ 0x13BD, 0x13BD, 0x13BD }, -{ 0x13BE, 0x13BE, 0x13BE }, -{ 0x13BF, 0x13BF, 0x13BF }, -{ 0x13C0, 0x13C0, 0x13C0 }, -{ 0x13C1, 0x13C1, 0x13C1 }, -{ 0x13C2, 0x13C2, 0x13C2 }, -{ 0x13C3, 0x13C3, 0x13C3 }, -{ 0x13C4, 0x13C4, 0x13C4 }, -{ 0x13C5, 0x13C5, 0x13C5 }, -{ 0x13C6, 0x13C6, 0x13C6 }, -{ 0x13C7, 0x13C7, 0x13C7 }, -{ 0x13C8, 0x13C8, 0x13C8 }, -{ 0x13C9, 0x13C9, 0x13C9 }, -{ 0x13CA, 0x13CA, 0x13CA }, -{ 0x13CB, 0x13CB, 0x13CB }, -{ 0x13CC, 0x13CC, 0x13CC }, -{ 0x13CD, 0x13CD, 0x13CD }, -{ 0x13CE, 0x13CE, 0x13CE }, -{ 0x13CF, 0x13CF, 0x13CF }, -{ 0x13D0, 0x13D0, 0x13D0 }, -{ 0x13D1, 0x13D1, 0x13D1 }, -{ 0x13D2, 0x13D2, 0x13D2 }, -{ 0x13D3, 0x13D3, 0x13D3 }, -{ 0x13D4, 0x13D4, 0x13D4 }, -{ 0x13D5, 0x13D5, 0x13D5 }, -{ 0x13D6, 0x13D6, 0x13D6 }, -{ 0x13D7, 0x13D7, 0x13D7 }, -{ 0x13D8, 0x13D8, 0x13D8 }, -{ 0x13D9, 0x13D9, 0x13D9 }, -{ 0x13DA, 0x13DA, 0x13DA }, -{ 0x13DB, 0x13DB, 0x13DB }, -{ 0x13DC, 0x13DC, 0x13DC }, -{ 0x13DD, 0x13DD, 0x13DD }, -{ 0x13DE, 0x13DE, 0x13DE }, -{ 0x13DF, 0x13DF, 0x13DF }, -{ 0x13E0, 0x13E0, 0x13E0 }, -{ 0x13E1, 0x13E1, 0x13E1 }, -{ 0x13E2, 0x13E2, 0x13E2 }, -{ 0x13E3, 0x13E3, 0x13E3 }, -{ 0x13E4, 0x13E4, 0x13E4 }, -{ 0x13E5, 0x13E5, 0x13E5 }, -{ 0x13E6, 0x13E6, 0x13E6 }, -{ 0x13E7, 0x13E7, 0x13E7 }, -{ 0x13E8, 0x13E8, 0x13E8 }, -{ 0x13E9, 0x13E9, 0x13E9 }, -{ 0x13EA, 0x13EA, 0x13EA }, -{ 0x13EB, 0x13EB, 0x13EB }, -{ 0x13EC, 0x13EC, 0x13EC }, -{ 0x13ED, 0x13ED, 0x13ED }, -{ 0x13EE, 0x13EE, 0x13EE }, -{ 0x13EF, 0x13EF, 0x13EF }, -{ 0x13F0, 0x13F0, 0x13F0 }, -{ 0x13F1, 0x13F1, 0x13F1 }, -{ 0x13F2, 0x13F2, 0x13F2 }, -{ 0x13F3, 0x13F3, 0x13F3 }, -{ 0x13F4, 0x13F4, 0x13F4 }, -{ 0x1401, 0x1401, 0x1401 }, -{ 0x1402, 0x1402, 0x1402 }, -{ 0x1403, 0x1403, 0x1403 }, -{ 0x1404, 0x1404, 0x1404 }, -{ 0x1405, 0x1405, 0x1405 }, -{ 0x1406, 0x1406, 0x1406 }, -{ 0x1407, 0x1407, 0x1407 }, -{ 0x1408, 0x1408, 0x1408 }, -{ 0x1409, 0x1409, 0x1409 }, -{ 0x140A, 0x140A, 0x140A }, -{ 0x140B, 0x140B, 0x140B }, -{ 0x140C, 0x140C, 0x140C }, -{ 0x140D, 0x140D, 0x140D }, -{ 0x140E, 0x140E, 0x140E }, -{ 0x140F, 0x140F, 0x140F }, -{ 0x1410, 0x1410, 0x1410 }, -{ 0x1411, 0x1411, 0x1411 }, -{ 0x1412, 0x1412, 0x1412 }, -{ 0x1413, 0x1413, 0x1413 }, -{ 0x1414, 0x1414, 0x1414 }, -{ 0x1415, 0x1415, 0x1415 }, -{ 0x1416, 0x1416, 0x1416 }, -{ 0x1417, 0x1417, 0x1417 }, -{ 0x1418, 0x1418, 0x1418 }, -{ 0x1419, 0x1419, 0x1419 }, -{ 0x141A, 0x141A, 0x141A }, -{ 0x141B, 0x141B, 0x141B }, -{ 0x141C, 0x141C, 0x141C }, -{ 0x141D, 0x141D, 0x141D }, -{ 0x141E, 0x141E, 0x141E }, -{ 0x141F, 0x141F, 0x141F }, -{ 0x1420, 0x1420, 0x1420 }, -{ 0x1421, 0x1421, 0x1421 }, -{ 0x1422, 0x1422, 0x1422 }, -{ 0x1423, 0x1423, 0x1423 }, -{ 0x1424, 0x1424, 0x1424 }, -{ 0x1425, 0x1425, 0x1425 }, -{ 0x1426, 0x1426, 0x1426 }, -{ 0x1427, 0x1427, 0x1427 }, -{ 0x1428, 0x1428, 0x1428 }, -{ 0x1429, 0x1429, 0x1429 }, -{ 0x142A, 0x142A, 0x142A }, -{ 0x142B, 0x142B, 0x142B }, -{ 0x142C, 0x142C, 0x142C }, -{ 0x142D, 0x142D, 0x142D }, -{ 0x142E, 0x142E, 0x142E }, -{ 0x142F, 0x142F, 0x142F }, -{ 0x1430, 0x1430, 0x1430 }, -{ 0x1431, 0x1431, 0x1431 }, -{ 0x1432, 0x1432, 0x1432 }, -{ 0x1433, 0x1433, 0x1433 }, -{ 0x1434, 0x1434, 0x1434 }, -{ 0x1435, 0x1435, 0x1435 }, -{ 0x1436, 0x1436, 0x1436 }, -{ 0x1437, 0x1437, 0x1437 }, -{ 0x1438, 0x1438, 0x1438 }, -{ 0x1439, 0x1439, 0x1439 }, -{ 0x143A, 0x143A, 0x143A }, -{ 0x143B, 0x143B, 0x143B }, -{ 0x143C, 0x143C, 0x143C }, -{ 0x143D, 0x143D, 0x143D }, -{ 0x143E, 0x143E, 0x143E }, -{ 0x143F, 0x143F, 0x143F }, -{ 0x1440, 0x1440, 0x1440 }, -{ 0x1441, 0x1441, 0x1441 }, -{ 0x1442, 0x1442, 0x1442 }, -{ 0x1443, 0x1443, 0x1443 }, -{ 0x1444, 0x1444, 0x1444 }, -{ 0x1445, 0x1445, 0x1445 }, -{ 0x1446, 0x1446, 0x1446 }, -{ 0x1447, 0x1447, 0x1447 }, -{ 0x1448, 0x1448, 0x1448 }, -{ 0x1449, 0x1449, 0x1449 }, -{ 0x144A, 0x144A, 0x144A }, -{ 0x144B, 0x144B, 0x144B }, -{ 0x144C, 0x144C, 0x144C }, -{ 0x144D, 0x144D, 0x144D }, -{ 0x144E, 0x144E, 0x144E }, -{ 0x144F, 0x144F, 0x144F }, -{ 0x1450, 0x1450, 0x1450 }, -{ 0x1451, 0x1451, 0x1451 }, -{ 0x1452, 0x1452, 0x1452 }, -{ 0x1453, 0x1453, 0x1453 }, -{ 0x1454, 0x1454, 0x1454 }, -{ 0x1455, 0x1455, 0x1455 }, -{ 0x1456, 0x1456, 0x1456 }, -{ 0x1457, 0x1457, 0x1457 }, -{ 0x1458, 0x1458, 0x1458 }, -{ 0x1459, 0x1459, 0x1459 }, -{ 0x145A, 0x145A, 0x145A }, -{ 0x145B, 0x145B, 0x145B }, -{ 0x145C, 0x145C, 0x145C }, -{ 0x145D, 0x145D, 0x145D }, -{ 0x145E, 0x145E, 0x145E }, -{ 0x145F, 0x145F, 0x145F }, -{ 0x1460, 0x1460, 0x1460 }, -{ 0x1461, 0x1461, 0x1461 }, -{ 0x1462, 0x1462, 0x1462 }, -{ 0x1463, 0x1463, 0x1463 }, -{ 0x1464, 0x1464, 0x1464 }, -{ 0x1465, 0x1465, 0x1465 }, -{ 0x1466, 0x1466, 0x1466 }, -{ 0x1467, 0x1467, 0x1467 }, -{ 0x1468, 0x1468, 0x1468 }, -{ 0x1469, 0x1469, 0x1469 }, -{ 0x146A, 0x146A, 0x146A }, -{ 0x146B, 0x146B, 0x146B }, -{ 0x146C, 0x146C, 0x146C }, -{ 0x146D, 0x146D, 0x146D }, -{ 0x146E, 0x146E, 0x146E }, -{ 0x146F, 0x146F, 0x146F }, -{ 0x1470, 0x1470, 0x1470 }, -{ 0x1471, 0x1471, 0x1471 }, -{ 0x1472, 0x1472, 0x1472 }, -{ 0x1473, 0x1473, 0x1473 }, -{ 0x1474, 0x1474, 0x1474 }, -{ 0x1475, 0x1475, 0x1475 }, -{ 0x1476, 0x1476, 0x1476 }, -{ 0x1477, 0x1477, 0x1477 }, -{ 0x1478, 0x1478, 0x1478 }, -{ 0x1479, 0x1479, 0x1479 }, -{ 0x147A, 0x147A, 0x147A }, -{ 0x147B, 0x147B, 0x147B }, -{ 0x147C, 0x147C, 0x147C }, -{ 0x147D, 0x147D, 0x147D }, -{ 0x147E, 0x147E, 0x147E }, -{ 0x147F, 0x147F, 0x147F }, -{ 0x1480, 0x1480, 0x1480 }, -{ 0x1481, 0x1481, 0x1481 }, -{ 0x1482, 0x1482, 0x1482 }, -{ 0x1483, 0x1483, 0x1483 }, -{ 0x1484, 0x1484, 0x1484 }, -{ 0x1485, 0x1485, 0x1485 }, -{ 0x1486, 0x1486, 0x1486 }, -{ 0x1487, 0x1487, 0x1487 }, -{ 0x1488, 0x1488, 0x1488 }, -{ 0x1489, 0x1489, 0x1489 }, -{ 0x148A, 0x148A, 0x148A }, -{ 0x148B, 0x148B, 0x148B }, -{ 0x148C, 0x148C, 0x148C }, -{ 0x148D, 0x148D, 0x148D }, -{ 0x148E, 0x148E, 0x148E }, -{ 0x148F, 0x148F, 0x148F }, -{ 0x1490, 0x1490, 0x1490 }, -{ 0x1491, 0x1491, 0x1491 }, -{ 0x1492, 0x1492, 0x1492 }, -{ 0x1493, 0x1493, 0x1493 }, -{ 0x1494, 0x1494, 0x1494 }, -{ 0x1495, 0x1495, 0x1495 }, -{ 0x1496, 0x1496, 0x1496 }, -{ 0x1497, 0x1497, 0x1497 }, -{ 0x1498, 0x1498, 0x1498 }, -{ 0x1499, 0x1499, 0x1499 }, -{ 0x149A, 0x149A, 0x149A }, -{ 0x149B, 0x149B, 0x149B }, -{ 0x149C, 0x149C, 0x149C }, -{ 0x149D, 0x149D, 0x149D }, -{ 0x149E, 0x149E, 0x149E }, -{ 0x149F, 0x149F, 0x149F }, -{ 0x14A0, 0x14A0, 0x14A0 }, -{ 0x14A1, 0x14A1, 0x14A1 }, -{ 0x14A2, 0x14A2, 0x14A2 }, -{ 0x14A3, 0x14A3, 0x14A3 }, -{ 0x14A4, 0x14A4, 0x14A4 }, -{ 0x14A5, 0x14A5, 0x14A5 }, -{ 0x14A6, 0x14A6, 0x14A6 }, -{ 0x14A7, 0x14A7, 0x14A7 }, -{ 0x14A8, 0x14A8, 0x14A8 }, -{ 0x14A9, 0x14A9, 0x14A9 }, -{ 0x14AA, 0x14AA, 0x14AA }, -{ 0x14AB, 0x14AB, 0x14AB }, -{ 0x14AC, 0x14AC, 0x14AC }, -{ 0x14AD, 0x14AD, 0x14AD }, -{ 0x14AE, 0x14AE, 0x14AE }, -{ 0x14AF, 0x14AF, 0x14AF }, -{ 0x14B0, 0x14B0, 0x14B0 }, -{ 0x14B1, 0x14B1, 0x14B1 }, -{ 0x14B2, 0x14B2, 0x14B2 }, -{ 0x14B3, 0x14B3, 0x14B3 }, -{ 0x14B4, 0x14B4, 0x14B4 }, -{ 0x14B5, 0x14B5, 0x14B5 }, -{ 0x14B6, 0x14B6, 0x14B6 }, -{ 0x14B7, 0x14B7, 0x14B7 }, -{ 0x14B8, 0x14B8, 0x14B8 }, -{ 0x14B9, 0x14B9, 0x14B9 }, -{ 0x14BA, 0x14BA, 0x14BA }, -{ 0x14BB, 0x14BB, 0x14BB }, -{ 0x14BC, 0x14BC, 0x14BC }, -{ 0x14BD, 0x14BD, 0x14BD }, -{ 0x14BE, 0x14BE, 0x14BE }, -{ 0x14BF, 0x14BF, 0x14BF }, -{ 0x14C0, 0x14C0, 0x14C0 }, -{ 0x14C1, 0x14C1, 0x14C1 }, -{ 0x14C2, 0x14C2, 0x14C2 }, -{ 0x14C3, 0x14C3, 0x14C3 }, -{ 0x14C4, 0x14C4, 0x14C4 }, -{ 0x14C5, 0x14C5, 0x14C5 }, -{ 0x14C6, 0x14C6, 0x14C6 }, -{ 0x14C7, 0x14C7, 0x14C7 }, -{ 0x14C8, 0x14C8, 0x14C8 }, -{ 0x14C9, 0x14C9, 0x14C9 }, -{ 0x14CA, 0x14CA, 0x14CA }, -{ 0x14CB, 0x14CB, 0x14CB }, -{ 0x14CC, 0x14CC, 0x14CC }, -{ 0x14CD, 0x14CD, 0x14CD }, -{ 0x14CE, 0x14CE, 0x14CE }, -{ 0x14CF, 0x14CF, 0x14CF }, -{ 0x14D0, 0x14D0, 0x14D0 }, -{ 0x14D1, 0x14D1, 0x14D1 }, -{ 0x14D2, 0x14D2, 0x14D2 }, -{ 0x14D3, 0x14D3, 0x14D3 }, -{ 0x14D4, 0x14D4, 0x14D4 }, -{ 0x14D5, 0x14D5, 0x14D5 }, -{ 0x14D6, 0x14D6, 0x14D6 }, -{ 0x14D7, 0x14D7, 0x14D7 }, -{ 0x14D8, 0x14D8, 0x14D8 }, -{ 0x14D9, 0x14D9, 0x14D9 }, -{ 0x14DA, 0x14DA, 0x14DA }, -{ 0x14DB, 0x14DB, 0x14DB }, -{ 0x14DC, 0x14DC, 0x14DC }, -{ 0x14DD, 0x14DD, 0x14DD }, -{ 0x14DE, 0x14DE, 0x14DE }, -{ 0x14DF, 0x14DF, 0x14DF }, -{ 0x14E0, 0x14E0, 0x14E0 }, -{ 0x14E1, 0x14E1, 0x14E1 }, -{ 0x14E2, 0x14E2, 0x14E2 }, -{ 0x14E3, 0x14E3, 0x14E3 }, -{ 0x14E4, 0x14E4, 0x14E4 }, -{ 0x14E5, 0x14E5, 0x14E5 }, -{ 0x14E6, 0x14E6, 0x14E6 }, -{ 0x14E7, 0x14E7, 0x14E7 }, -{ 0x14E8, 0x14E8, 0x14E8 }, -{ 0x14E9, 0x14E9, 0x14E9 }, -{ 0x14EA, 0x14EA, 0x14EA }, -{ 0x14EB, 0x14EB, 0x14EB }, -{ 0x14EC, 0x14EC, 0x14EC }, -{ 0x14ED, 0x14ED, 0x14ED }, -{ 0x14EE, 0x14EE, 0x14EE }, -{ 0x14EF, 0x14EF, 0x14EF }, -{ 0x14F0, 0x14F0, 0x14F0 }, -{ 0x14F1, 0x14F1, 0x14F1 }, -{ 0x14F2, 0x14F2, 0x14F2 }, -{ 0x14F3, 0x14F3, 0x14F3 }, -{ 0x14F4, 0x14F4, 0x14F4 }, -{ 0x14F5, 0x14F5, 0x14F5 }, -{ 0x14F6, 0x14F6, 0x14F6 }, -{ 0x14F7, 0x14F7, 0x14F7 }, -{ 0x14F8, 0x14F8, 0x14F8 }, -{ 0x14F9, 0x14F9, 0x14F9 }, -{ 0x14FA, 0x14FA, 0x14FA }, -{ 0x14FB, 0x14FB, 0x14FB }, -{ 0x14FC, 0x14FC, 0x14FC }, -{ 0x14FD, 0x14FD, 0x14FD }, -{ 0x14FE, 0x14FE, 0x14FE }, -{ 0x14FF, 0x14FF, 0x14FF }, -{ 0x1500, 0x1500, 0x1500 }, -{ 0x1501, 0x1501, 0x1501 }, -{ 0x1502, 0x1502, 0x1502 }, -{ 0x1503, 0x1503, 0x1503 }, -{ 0x1504, 0x1504, 0x1504 }, -{ 0x1505, 0x1505, 0x1505 }, -{ 0x1506, 0x1506, 0x1506 }, -{ 0x1507, 0x1507, 0x1507 }, -{ 0x1508, 0x1508, 0x1508 }, -{ 0x1509, 0x1509, 0x1509 }, -{ 0x150A, 0x150A, 0x150A }, -{ 0x150B, 0x150B, 0x150B }, -{ 0x150C, 0x150C, 0x150C }, -{ 0x150D, 0x150D, 0x150D }, -{ 0x150E, 0x150E, 0x150E }, -{ 0x150F, 0x150F, 0x150F }, -{ 0x1510, 0x1510, 0x1510 }, -{ 0x1511, 0x1511, 0x1511 }, -{ 0x1512, 0x1512, 0x1512 }, -{ 0x1513, 0x1513, 0x1513 }, -{ 0x1514, 0x1514, 0x1514 }, -{ 0x1515, 0x1515, 0x1515 }, -{ 0x1516, 0x1516, 0x1516 }, -{ 0x1517, 0x1517, 0x1517 }, -{ 0x1518, 0x1518, 0x1518 }, -{ 0x1519, 0x1519, 0x1519 }, -{ 0x151A, 0x151A, 0x151A }, -{ 0x151B, 0x151B, 0x151B }, -{ 0x151C, 0x151C, 0x151C }, -{ 0x151D, 0x151D, 0x151D }, -{ 0x151E, 0x151E, 0x151E }, -{ 0x151F, 0x151F, 0x151F }, -{ 0x1520, 0x1520, 0x1520 }, -{ 0x1521, 0x1521, 0x1521 }, -{ 0x1522, 0x1522, 0x1522 }, -{ 0x1523, 0x1523, 0x1523 }, -{ 0x1524, 0x1524, 0x1524 }, -{ 0x1525, 0x1525, 0x1525 }, -{ 0x1526, 0x1526, 0x1526 }, -{ 0x1527, 0x1527, 0x1527 }, -{ 0x1528, 0x1528, 0x1528 }, -{ 0x1529, 0x1529, 0x1529 }, -{ 0x152A, 0x152A, 0x152A }, -{ 0x152B, 0x152B, 0x152B }, -{ 0x152C, 0x152C, 0x152C }, -{ 0x152D, 0x152D, 0x152D }, -{ 0x152E, 0x152E, 0x152E }, -{ 0x152F, 0x152F, 0x152F }, -{ 0x1530, 0x1530, 0x1530 }, -{ 0x1531, 0x1531, 0x1531 }, -{ 0x1532, 0x1532, 0x1532 }, -{ 0x1533, 0x1533, 0x1533 }, -{ 0x1534, 0x1534, 0x1534 }, -{ 0x1535, 0x1535, 0x1535 }, -{ 0x1536, 0x1536, 0x1536 }, -{ 0x1537, 0x1537, 0x1537 }, -{ 0x1538, 0x1538, 0x1538 }, -{ 0x1539, 0x1539, 0x1539 }, -{ 0x153A, 0x153A, 0x153A }, -{ 0x153B, 0x153B, 0x153B }, -{ 0x153C, 0x153C, 0x153C }, -{ 0x153D, 0x153D, 0x153D }, -{ 0x153E, 0x153E, 0x153E }, -{ 0x153F, 0x153F, 0x153F }, -{ 0x1540, 0x1540, 0x1540 }, -{ 0x1541, 0x1541, 0x1541 }, -{ 0x1542, 0x1542, 0x1542 }, -{ 0x1543, 0x1543, 0x1543 }, -{ 0x1544, 0x1544, 0x1544 }, -{ 0x1545, 0x1545, 0x1545 }, -{ 0x1546, 0x1546, 0x1546 }, -{ 0x1547, 0x1547, 0x1547 }, -{ 0x1548, 0x1548, 0x1548 }, -{ 0x1549, 0x1549, 0x1549 }, -{ 0x154A, 0x154A, 0x154A }, -{ 0x154B, 0x154B, 0x154B }, -{ 0x154C, 0x154C, 0x154C }, -{ 0x154D, 0x154D, 0x154D }, -{ 0x154E, 0x154E, 0x154E }, -{ 0x154F, 0x154F, 0x154F }, -{ 0x1550, 0x1550, 0x1550 }, -{ 0x1551, 0x1551, 0x1551 }, -{ 0x1552, 0x1552, 0x1552 }, -{ 0x1553, 0x1553, 0x1553 }, -{ 0x1554, 0x1554, 0x1554 }, -{ 0x1555, 0x1555, 0x1555 }, -{ 0x1556, 0x1556, 0x1556 }, -{ 0x1557, 0x1557, 0x1557 }, -{ 0x1558, 0x1558, 0x1558 }, -{ 0x1559, 0x1559, 0x1559 }, -{ 0x155A, 0x155A, 0x155A }, -{ 0x155B, 0x155B, 0x155B }, -{ 0x155C, 0x155C, 0x155C }, -{ 0x155D, 0x155D, 0x155D }, -{ 0x155E, 0x155E, 0x155E }, -{ 0x155F, 0x155F, 0x155F }, -{ 0x1560, 0x1560, 0x1560 }, -{ 0x1561, 0x1561, 0x1561 }, -{ 0x1562, 0x1562, 0x1562 }, -{ 0x1563, 0x1563, 0x1563 }, -{ 0x1564, 0x1564, 0x1564 }, -{ 0x1565, 0x1565, 0x1565 }, -{ 0x1566, 0x1566, 0x1566 }, -{ 0x1567, 0x1567, 0x1567 }, -{ 0x1568, 0x1568, 0x1568 }, -{ 0x1569, 0x1569, 0x1569 }, -{ 0x156A, 0x156A, 0x156A }, -{ 0x156B, 0x156B, 0x156B }, -{ 0x156C, 0x156C, 0x156C }, -{ 0x156D, 0x156D, 0x156D }, -{ 0x156E, 0x156E, 0x156E }, -{ 0x156F, 0x156F, 0x156F }, -{ 0x1570, 0x1570, 0x1570 }, -{ 0x1571, 0x1571, 0x1571 }, -{ 0x1572, 0x1572, 0x1572 }, -{ 0x1573, 0x1573, 0x1573 }, -{ 0x1574, 0x1574, 0x1574 }, -{ 0x1575, 0x1575, 0x1575 }, -{ 0x1576, 0x1576, 0x1576 }, -{ 0x1577, 0x1577, 0x1577 }, -{ 0x1578, 0x1578, 0x1578 }, -{ 0x1579, 0x1579, 0x1579 }, -{ 0x157A, 0x157A, 0x157A }, -{ 0x157B, 0x157B, 0x157B }, -{ 0x157C, 0x157C, 0x157C }, -{ 0x157D, 0x157D, 0x157D }, -{ 0x157E, 0x157E, 0x157E }, -{ 0x157F, 0x157F, 0x157F }, -{ 0x1580, 0x1580, 0x1580 }, -{ 0x1581, 0x1581, 0x1581 }, -{ 0x1582, 0x1582, 0x1582 }, -{ 0x1583, 0x1583, 0x1583 }, -{ 0x1584, 0x1584, 0x1584 }, -{ 0x1585, 0x1585, 0x1585 }, -{ 0x1586, 0x1586, 0x1586 }, -{ 0x1587, 0x1587, 0x1587 }, -{ 0x1588, 0x1588, 0x1588 }, -{ 0x1589, 0x1589, 0x1589 }, -{ 0x158A, 0x158A, 0x158A }, -{ 0x158B, 0x158B, 0x158B }, -{ 0x158C, 0x158C, 0x158C }, -{ 0x158D, 0x158D, 0x158D }, -{ 0x158E, 0x158E, 0x158E }, -{ 0x158F, 0x158F, 0x158F }, -{ 0x1590, 0x1590, 0x1590 }, -{ 0x1591, 0x1591, 0x1591 }, -{ 0x1592, 0x1592, 0x1592 }, -{ 0x1593, 0x1593, 0x1593 }, -{ 0x1594, 0x1594, 0x1594 }, -{ 0x1595, 0x1595, 0x1595 }, -{ 0x1596, 0x1596, 0x1596 }, -{ 0x1597, 0x1597, 0x1597 }, -{ 0x1598, 0x1598, 0x1598 }, -{ 0x1599, 0x1599, 0x1599 }, -{ 0x159A, 0x159A, 0x159A }, -{ 0x159B, 0x159B, 0x159B }, -{ 0x159C, 0x159C, 0x159C }, -{ 0x159D, 0x159D, 0x159D }, -{ 0x159E, 0x159E, 0x159E }, -{ 0x159F, 0x159F, 0x159F }, -{ 0x15A0, 0x15A0, 0x15A0 }, -{ 0x15A1, 0x15A1, 0x15A1 }, -{ 0x15A2, 0x15A2, 0x15A2 }, -{ 0x15A3, 0x15A3, 0x15A3 }, -{ 0x15A4, 0x15A4, 0x15A4 }, -{ 0x15A5, 0x15A5, 0x15A5 }, -{ 0x15A6, 0x15A6, 0x15A6 }, -{ 0x15A7, 0x15A7, 0x15A7 }, -{ 0x15A8, 0x15A8, 0x15A8 }, -{ 0x15A9, 0x15A9, 0x15A9 }, -{ 0x15AA, 0x15AA, 0x15AA }, -{ 0x15AB, 0x15AB, 0x15AB }, -{ 0x15AC, 0x15AC, 0x15AC }, -{ 0x15AD, 0x15AD, 0x15AD }, -{ 0x15AE, 0x15AE, 0x15AE }, -{ 0x15AF, 0x15AF, 0x15AF }, -{ 0x15B0, 0x15B0, 0x15B0 }, -{ 0x15B1, 0x15B1, 0x15B1 }, -{ 0x15B2, 0x15B2, 0x15B2 }, -{ 0x15B3, 0x15B3, 0x15B3 }, -{ 0x15B4, 0x15B4, 0x15B4 }, -{ 0x15B5, 0x15B5, 0x15B5 }, -{ 0x15B6, 0x15B6, 0x15B6 }, -{ 0x15B7, 0x15B7, 0x15B7 }, -{ 0x15B8, 0x15B8, 0x15B8 }, -{ 0x15B9, 0x15B9, 0x15B9 }, -{ 0x15BA, 0x15BA, 0x15BA }, -{ 0x15BB, 0x15BB, 0x15BB }, -{ 0x15BC, 0x15BC, 0x15BC }, -{ 0x15BD, 0x15BD, 0x15BD }, -{ 0x15BE, 0x15BE, 0x15BE }, -{ 0x15BF, 0x15BF, 0x15BF }, -{ 0x15C0, 0x15C0, 0x15C0 }, -{ 0x15C1, 0x15C1, 0x15C1 }, -{ 0x15C2, 0x15C2, 0x15C2 }, -{ 0x15C3, 0x15C3, 0x15C3 }, -{ 0x15C4, 0x15C4, 0x15C4 }, -{ 0x15C5, 0x15C5, 0x15C5 }, -{ 0x15C6, 0x15C6, 0x15C6 }, -{ 0x15C7, 0x15C7, 0x15C7 }, -{ 0x15C8, 0x15C8, 0x15C8 }, -{ 0x15C9, 0x15C9, 0x15C9 }, -{ 0x15CA, 0x15CA, 0x15CA }, -{ 0x15CB, 0x15CB, 0x15CB }, -{ 0x15CC, 0x15CC, 0x15CC }, -{ 0x15CD, 0x15CD, 0x15CD }, -{ 0x15CE, 0x15CE, 0x15CE }, -{ 0x15CF, 0x15CF, 0x15CF }, -{ 0x15D0, 0x15D0, 0x15D0 }, -{ 0x15D1, 0x15D1, 0x15D1 }, -{ 0x15D2, 0x15D2, 0x15D2 }, -{ 0x15D3, 0x15D3, 0x15D3 }, -{ 0x15D4, 0x15D4, 0x15D4 }, -{ 0x15D5, 0x15D5, 0x15D5 }, -{ 0x15D6, 0x15D6, 0x15D6 }, -{ 0x15D7, 0x15D7, 0x15D7 }, -{ 0x15D8, 0x15D8, 0x15D8 }, -{ 0x15D9, 0x15D9, 0x15D9 }, -{ 0x15DA, 0x15DA, 0x15DA }, -{ 0x15DB, 0x15DB, 0x15DB }, -{ 0x15DC, 0x15DC, 0x15DC }, -{ 0x15DD, 0x15DD, 0x15DD }, -{ 0x15DE, 0x15DE, 0x15DE }, -{ 0x15DF, 0x15DF, 0x15DF }, -{ 0x15E0, 0x15E0, 0x15E0 }, -{ 0x15E1, 0x15E1, 0x15E1 }, -{ 0x15E2, 0x15E2, 0x15E2 }, -{ 0x15E3, 0x15E3, 0x15E3 }, -{ 0x15E4, 0x15E4, 0x15E4 }, -{ 0x15E5, 0x15E5, 0x15E5 }, -{ 0x15E6, 0x15E6, 0x15E6 }, -{ 0x15E7, 0x15E7, 0x15E7 }, -{ 0x15E8, 0x15E8, 0x15E8 }, -{ 0x15E9, 0x15E9, 0x15E9 }, -{ 0x15EA, 0x15EA, 0x15EA }, -{ 0x15EB, 0x15EB, 0x15EB }, -{ 0x15EC, 0x15EC, 0x15EC }, -{ 0x15ED, 0x15ED, 0x15ED }, -{ 0x15EE, 0x15EE, 0x15EE }, -{ 0x15EF, 0x15EF, 0x15EF }, -{ 0x15F0, 0x15F0, 0x15F0 }, -{ 0x15F1, 0x15F1, 0x15F1 }, -{ 0x15F2, 0x15F2, 0x15F2 }, -{ 0x15F3, 0x15F3, 0x15F3 }, -{ 0x15F4, 0x15F4, 0x15F4 }, -{ 0x15F5, 0x15F5, 0x15F5 }, -{ 0x15F6, 0x15F6, 0x15F6 }, -{ 0x15F7, 0x15F7, 0x15F7 }, -{ 0x15F8, 0x15F8, 0x15F8 }, -{ 0x15F9, 0x15F9, 0x15F9 }, -{ 0x15FA, 0x15FA, 0x15FA }, -{ 0x15FB, 0x15FB, 0x15FB }, -{ 0x15FC, 0x15FC, 0x15FC }, -{ 0x15FD, 0x15FD, 0x15FD }, -{ 0x15FE, 0x15FE, 0x15FE }, -{ 0x15FF, 0x15FF, 0x15FF }, -{ 0x1600, 0x1600, 0x1600 }, -{ 0x1601, 0x1601, 0x1601 }, -{ 0x1602, 0x1602, 0x1602 }, -{ 0x1603, 0x1603, 0x1603 }, -{ 0x1604, 0x1604, 0x1604 }, -{ 0x1605, 0x1605, 0x1605 }, -{ 0x1606, 0x1606, 0x1606 }, -{ 0x1607, 0x1607, 0x1607 }, -{ 0x1608, 0x1608, 0x1608 }, -{ 0x1609, 0x1609, 0x1609 }, -{ 0x160A, 0x160A, 0x160A }, -{ 0x160B, 0x160B, 0x160B }, -{ 0x160C, 0x160C, 0x160C }, -{ 0x160D, 0x160D, 0x160D }, -{ 0x160E, 0x160E, 0x160E }, -{ 0x160F, 0x160F, 0x160F }, -{ 0x1610, 0x1610, 0x1610 }, -{ 0x1611, 0x1611, 0x1611 }, -{ 0x1612, 0x1612, 0x1612 }, -{ 0x1613, 0x1613, 0x1613 }, -{ 0x1614, 0x1614, 0x1614 }, -{ 0x1615, 0x1615, 0x1615 }, -{ 0x1616, 0x1616, 0x1616 }, -{ 0x1617, 0x1617, 0x1617 }, -{ 0x1618, 0x1618, 0x1618 }, -{ 0x1619, 0x1619, 0x1619 }, -{ 0x161A, 0x161A, 0x161A }, -{ 0x161B, 0x161B, 0x161B }, -{ 0x161C, 0x161C, 0x161C }, -{ 0x161D, 0x161D, 0x161D }, -{ 0x161E, 0x161E, 0x161E }, -{ 0x161F, 0x161F, 0x161F }, -{ 0x1620, 0x1620, 0x1620 }, -{ 0x1621, 0x1621, 0x1621 }, -{ 0x1622, 0x1622, 0x1622 }, -{ 0x1623, 0x1623, 0x1623 }, -{ 0x1624, 0x1624, 0x1624 }, -{ 0x1625, 0x1625, 0x1625 }, -{ 0x1626, 0x1626, 0x1626 }, -{ 0x1627, 0x1627, 0x1627 }, -{ 0x1628, 0x1628, 0x1628 }, -{ 0x1629, 0x1629, 0x1629 }, -{ 0x162A, 0x162A, 0x162A }, -{ 0x162B, 0x162B, 0x162B }, -{ 0x162C, 0x162C, 0x162C }, -{ 0x162D, 0x162D, 0x162D }, -{ 0x162E, 0x162E, 0x162E }, -{ 0x162F, 0x162F, 0x162F }, -{ 0x1630, 0x1630, 0x1630 }, -{ 0x1631, 0x1631, 0x1631 }, -{ 0x1632, 0x1632, 0x1632 }, -{ 0x1633, 0x1633, 0x1633 }, -{ 0x1634, 0x1634, 0x1634 }, -{ 0x1635, 0x1635, 0x1635 }, -{ 0x1636, 0x1636, 0x1636 }, -{ 0x1637, 0x1637, 0x1637 }, -{ 0x1638, 0x1638, 0x1638 }, -{ 0x1639, 0x1639, 0x1639 }, -{ 0x163A, 0x163A, 0x163A }, -{ 0x163B, 0x163B, 0x163B }, -{ 0x163C, 0x163C, 0x163C }, -{ 0x163D, 0x163D, 0x163D }, -{ 0x163E, 0x163E, 0x163E }, -{ 0x163F, 0x163F, 0x163F }, -{ 0x1640, 0x1640, 0x1640 }, -{ 0x1641, 0x1641, 0x1641 }, -{ 0x1642, 0x1642, 0x1642 }, -{ 0x1643, 0x1643, 0x1643 }, -{ 0x1644, 0x1644, 0x1644 }, -{ 0x1645, 0x1645, 0x1645 }, -{ 0x1646, 0x1646, 0x1646 }, -{ 0x1647, 0x1647, 0x1647 }, -{ 0x1648, 0x1648, 0x1648 }, -{ 0x1649, 0x1649, 0x1649 }, -{ 0x164A, 0x164A, 0x164A }, -{ 0x164B, 0x164B, 0x164B }, -{ 0x164C, 0x164C, 0x164C }, -{ 0x164D, 0x164D, 0x164D }, -{ 0x164E, 0x164E, 0x164E }, -{ 0x164F, 0x164F, 0x164F }, -{ 0x1650, 0x1650, 0x1650 }, -{ 0x1651, 0x1651, 0x1651 }, -{ 0x1652, 0x1652, 0x1652 }, -{ 0x1653, 0x1653, 0x1653 }, -{ 0x1654, 0x1654, 0x1654 }, -{ 0x1655, 0x1655, 0x1655 }, -{ 0x1656, 0x1656, 0x1656 }, -{ 0x1657, 0x1657, 0x1657 }, -{ 0x1658, 0x1658, 0x1658 }, -{ 0x1659, 0x1659, 0x1659 }, -{ 0x165A, 0x165A, 0x165A }, -{ 0x165B, 0x165B, 0x165B }, -{ 0x165C, 0x165C, 0x165C }, -{ 0x165D, 0x165D, 0x165D }, -{ 0x165E, 0x165E, 0x165E }, -{ 0x165F, 0x165F, 0x165F }, -{ 0x1660, 0x1660, 0x1660 }, -{ 0x1661, 0x1661, 0x1661 }, -{ 0x1662, 0x1662, 0x1662 }, -{ 0x1663, 0x1663, 0x1663 }, -{ 0x1664, 0x1664, 0x1664 }, -{ 0x1665, 0x1665, 0x1665 }, -{ 0x1666, 0x1666, 0x1666 }, -{ 0x1667, 0x1667, 0x1667 }, -{ 0x1668, 0x1668, 0x1668 }, -{ 0x1669, 0x1669, 0x1669 }, -{ 0x166A, 0x166A, 0x166A }, -{ 0x166B, 0x166B, 0x166B }, -{ 0x166C, 0x166C, 0x166C }, -{ 0x166F, 0x166F, 0x166F }, -{ 0x1670, 0x1670, 0x1670 }, -{ 0x1671, 0x1671, 0x1671 }, -{ 0x1672, 0x1672, 0x1672 }, -{ 0x1673, 0x1673, 0x1673 }, -{ 0x1674, 0x1674, 0x1674 }, -{ 0x1675, 0x1675, 0x1675 }, -{ 0x1676, 0x1676, 0x1676 }, -{ 0x1681, 0x1681, 0x1681 }, -{ 0x1682, 0x1682, 0x1682 }, -{ 0x1683, 0x1683, 0x1683 }, -{ 0x1684, 0x1684, 0x1684 }, -{ 0x1685, 0x1685, 0x1685 }, -{ 0x1686, 0x1686, 0x1686 }, -{ 0x1687, 0x1687, 0x1687 }, -{ 0x1688, 0x1688, 0x1688 }, -{ 0x1689, 0x1689, 0x1689 }, -{ 0x168A, 0x168A, 0x168A }, -{ 0x168B, 0x168B, 0x168B }, -{ 0x168C, 0x168C, 0x168C }, -{ 0x168D, 0x168D, 0x168D }, -{ 0x168E, 0x168E, 0x168E }, -{ 0x168F, 0x168F, 0x168F }, -{ 0x1690, 0x1690, 0x1690 }, -{ 0x1691, 0x1691, 0x1691 }, -{ 0x1692, 0x1692, 0x1692 }, -{ 0x1693, 0x1693, 0x1693 }, -{ 0x1694, 0x1694, 0x1694 }, -{ 0x1695, 0x1695, 0x1695 }, -{ 0x1696, 0x1696, 0x1696 }, -{ 0x1697, 0x1697, 0x1697 }, -{ 0x1698, 0x1698, 0x1698 }, -{ 0x1699, 0x1699, 0x1699 }, -{ 0x169A, 0x169A, 0x169A }, -{ 0x16A0, 0x16A0, 0x16A0 }, -{ 0x16A1, 0x16A1, 0x16A1 }, -{ 0x16A2, 0x16A2, 0x16A2 }, -{ 0x16A3, 0x16A3, 0x16A3 }, -{ 0x16A4, 0x16A4, 0x16A4 }, -{ 0x16A5, 0x16A5, 0x16A5 }, -{ 0x16A6, 0x16A6, 0x16A6 }, -{ 0x16A7, 0x16A7, 0x16A7 }, -{ 0x16A8, 0x16A8, 0x16A8 }, -{ 0x16A9, 0x16A9, 0x16A9 }, -{ 0x16AA, 0x16AA, 0x16AA }, -{ 0x16AB, 0x16AB, 0x16AB }, -{ 0x16AC, 0x16AC, 0x16AC }, -{ 0x16AD, 0x16AD, 0x16AD }, -{ 0x16AE, 0x16AE, 0x16AE }, -{ 0x16AF, 0x16AF, 0x16AF }, -{ 0x16B0, 0x16B0, 0x16B0 }, -{ 0x16B1, 0x16B1, 0x16B1 }, -{ 0x16B2, 0x16B2, 0x16B2 }, -{ 0x16B3, 0x16B3, 0x16B3 }, -{ 0x16B4, 0x16B4, 0x16B4 }, -{ 0x16B5, 0x16B5, 0x16B5 }, -{ 0x16B6, 0x16B6, 0x16B6 }, -{ 0x16B7, 0x16B7, 0x16B7 }, -{ 0x16B8, 0x16B8, 0x16B8 }, -{ 0x16B9, 0x16B9, 0x16B9 }, -{ 0x16BA, 0x16BA, 0x16BA }, -{ 0x16BB, 0x16BB, 0x16BB }, -{ 0x16BC, 0x16BC, 0x16BC }, -{ 0x16BD, 0x16BD, 0x16BD }, -{ 0x16BE, 0x16BE, 0x16BE }, -{ 0x16BF, 0x16BF, 0x16BF }, -{ 0x16C0, 0x16C0, 0x16C0 }, -{ 0x16C1, 0x16C1, 0x16C1 }, -{ 0x16C2, 0x16C2, 0x16C2 }, -{ 0x16C3, 0x16C3, 0x16C3 }, -{ 0x16C4, 0x16C4, 0x16C4 }, -{ 0x16C5, 0x16C5, 0x16C5 }, -{ 0x16C6, 0x16C6, 0x16C6 }, -{ 0x16C7, 0x16C7, 0x16C7 }, -{ 0x16C8, 0x16C8, 0x16C8 }, -{ 0x16C9, 0x16C9, 0x16C9 }, -{ 0x16CA, 0x16CA, 0x16CA }, -{ 0x16CB, 0x16CB, 0x16CB }, -{ 0x16CC, 0x16CC, 0x16CC }, -{ 0x16CD, 0x16CD, 0x16CD }, -{ 0x16CE, 0x16CE, 0x16CE }, -{ 0x16CF, 0x16CF, 0x16CF }, -{ 0x16D0, 0x16D0, 0x16D0 }, -{ 0x16D1, 0x16D1, 0x16D1 }, -{ 0x16D2, 0x16D2, 0x16D2 }, -{ 0x16D3, 0x16D3, 0x16D3 }, -{ 0x16D4, 0x16D4, 0x16D4 }, -{ 0x16D5, 0x16D5, 0x16D5 }, -{ 0x16D6, 0x16D6, 0x16D6 }, -{ 0x16D7, 0x16D7, 0x16D7 }, -{ 0x16D8, 0x16D8, 0x16D8 }, -{ 0x16D9, 0x16D9, 0x16D9 }, -{ 0x16DA, 0x16DA, 0x16DA }, -{ 0x16DB, 0x16DB, 0x16DB }, -{ 0x16DC, 0x16DC, 0x16DC }, -{ 0x16DD, 0x16DD, 0x16DD }, -{ 0x16DE, 0x16DE, 0x16DE }, -{ 0x16DF, 0x16DF, 0x16DF }, -{ 0x16E0, 0x16E0, 0x16E0 }, -{ 0x16E1, 0x16E1, 0x16E1 }, -{ 0x16E2, 0x16E2, 0x16E2 }, -{ 0x16E3, 0x16E3, 0x16E3 }, -{ 0x16E4, 0x16E4, 0x16E4 }, -{ 0x16E5, 0x16E5, 0x16E5 }, -{ 0x16E6, 0x16E6, 0x16E6 }, -{ 0x16E7, 0x16E7, 0x16E7 }, -{ 0x16E8, 0x16E8, 0x16E8 }, -{ 0x16E9, 0x16E9, 0x16E9 }, -{ 0x16EA, 0x16EA, 0x16EA }, -{ 0x1700, 0x1700, 0x1700 }, -{ 0x1701, 0x1701, 0x1701 }, -{ 0x1702, 0x1702, 0x1702 }, -{ 0x1703, 0x1703, 0x1703 }, -{ 0x1704, 0x1704, 0x1704 }, -{ 0x1705, 0x1705, 0x1705 }, -{ 0x1706, 0x1706, 0x1706 }, -{ 0x1707, 0x1707, 0x1707 }, -{ 0x1708, 0x1708, 0x1708 }, -{ 0x1709, 0x1709, 0x1709 }, -{ 0x170A, 0x170A, 0x170A }, -{ 0x170B, 0x170B, 0x170B }, -{ 0x170C, 0x170C, 0x170C }, -{ 0x170E, 0x170E, 0x170E }, -{ 0x170F, 0x170F, 0x170F }, -{ 0x1710, 0x1710, 0x1710 }, -{ 0x1711, 0x1711, 0x1711 }, -{ 0x1712, 0x1712, 0x1712 }, -{ 0x1713, 0x1713, 0x1713 }, -{ 0x1714, 0x1714, 0x1714 }, -{ 0x1720, 0x1720, 0x1720 }, -{ 0x1721, 0x1721, 0x1721 }, -{ 0x1722, 0x1722, 0x1722 }, -{ 0x1723, 0x1723, 0x1723 }, -{ 0x1724, 0x1724, 0x1724 }, -{ 0x1725, 0x1725, 0x1725 }, -{ 0x1726, 0x1726, 0x1726 }, -{ 0x1727, 0x1727, 0x1727 }, -{ 0x1728, 0x1728, 0x1728 }, -{ 0x1729, 0x1729, 0x1729 }, -{ 0x172A, 0x172A, 0x172A }, -{ 0x172B, 0x172B, 0x172B }, -{ 0x172C, 0x172C, 0x172C }, -{ 0x172D, 0x172D, 0x172D }, -{ 0x172E, 0x172E, 0x172E }, -{ 0x172F, 0x172F, 0x172F }, -{ 0x1730, 0x1730, 0x1730 }, -{ 0x1731, 0x1731, 0x1731 }, -{ 0x1732, 0x1732, 0x1732 }, -{ 0x1733, 0x1733, 0x1733 }, -{ 0x1734, 0x1734, 0x1734 }, -{ 0x1740, 0x1740, 0x1740 }, -{ 0x1741, 0x1741, 0x1741 }, -{ 0x1742, 0x1742, 0x1742 }, -{ 0x1743, 0x1743, 0x1743 }, -{ 0x1744, 0x1744, 0x1744 }, -{ 0x1745, 0x1745, 0x1745 }, -{ 0x1746, 0x1746, 0x1746 }, -{ 0x1747, 0x1747, 0x1747 }, -{ 0x1748, 0x1748, 0x1748 }, -{ 0x1749, 0x1749, 0x1749 }, -{ 0x174A, 0x174A, 0x174A }, -{ 0x174B, 0x174B, 0x174B }, -{ 0x174C, 0x174C, 0x174C }, -{ 0x174D, 0x174D, 0x174D }, -{ 0x174E, 0x174E, 0x174E }, -{ 0x174F, 0x174F, 0x174F }, -{ 0x1750, 0x1750, 0x1750 }, -{ 0x1751, 0x1751, 0x1751 }, -{ 0x1752, 0x1752, 0x1752 }, -{ 0x1753, 0x1753, 0x1753 }, -{ 0x1760, 0x1760, 0x1760 }, -{ 0x1761, 0x1761, 0x1761 }, -{ 0x1762, 0x1762, 0x1762 }, -{ 0x1763, 0x1763, 0x1763 }, -{ 0x1764, 0x1764, 0x1764 }, -{ 0x1765, 0x1765, 0x1765 }, -{ 0x1766, 0x1766, 0x1766 }, -{ 0x1767, 0x1767, 0x1767 }, -{ 0x1768, 0x1768, 0x1768 }, -{ 0x1769, 0x1769, 0x1769 }, -{ 0x176A, 0x176A, 0x176A }, -{ 0x176B, 0x176B, 0x176B }, -{ 0x176C, 0x176C, 0x176C }, -{ 0x176E, 0x176E, 0x176E }, -{ 0x176F, 0x176F, 0x176F }, -{ 0x1770, 0x1770, 0x1770 }, -{ 0x1772, 0x1772, 0x1772 }, -{ 0x1773, 0x1773, 0x1773 }, -{ 0x1780, 0x1780, 0x1780 }, -{ 0x1781, 0x1781, 0x1781 }, -{ 0x1782, 0x1782, 0x1782 }, -{ 0x1783, 0x1783, 0x1783 }, -{ 0x1784, 0x1784, 0x1784 }, -{ 0x1785, 0x1785, 0x1785 }, -{ 0x1786, 0x1786, 0x1786 }, -{ 0x1787, 0x1787, 0x1787 }, -{ 0x1788, 0x1788, 0x1788 }, -{ 0x1789, 0x1789, 0x1789 }, -{ 0x178A, 0x178A, 0x178A }, -{ 0x178B, 0x178B, 0x178B }, -{ 0x178C, 0x178C, 0x178C }, -{ 0x178D, 0x178D, 0x178D }, -{ 0x178E, 0x178E, 0x178E }, -{ 0x178F, 0x178F, 0x178F }, -{ 0x1790, 0x1790, 0x1790 }, -{ 0x1791, 0x1791, 0x1791 }, -{ 0x1792, 0x1792, 0x1792 }, -{ 0x1793, 0x1793, 0x1793 }, -{ 0x1794, 0x1794, 0x1794 }, -{ 0x1795, 0x1795, 0x1795 }, -{ 0x1796, 0x1796, 0x1796 }, -{ 0x1797, 0x1797, 0x1797 }, -{ 0x1798, 0x1798, 0x1798 }, -{ 0x1799, 0x1799, 0x1799 }, -{ 0x179A, 0x179A, 0x179A }, -{ 0x179B, 0x179B, 0x179B }, -{ 0x179C, 0x179C, 0x179C }, -{ 0x179D, 0x179D, 0x179D }, -{ 0x179E, 0x179E, 0x179E }, -{ 0x179F, 0x179F, 0x179F }, -{ 0x17A0, 0x17A0, 0x17A0 }, -{ 0x17A1, 0x17A1, 0x17A1 }, -{ 0x17A2, 0x17A2, 0x17A2 }, -{ 0x17A3, 0x17A3, 0x17A3 }, -{ 0x17A4, 0x17A4, 0x17A4 }, -{ 0x17A5, 0x17A5, 0x17A5 }, -{ 0x17A6, 0x17A6, 0x17A6 }, -{ 0x17A7, 0x17A7, 0x17A7 }, -{ 0x17A8, 0x17A8, 0x17A8 }, -{ 0x17A9, 0x17A9, 0x17A9 }, -{ 0x17AA, 0x17AA, 0x17AA }, -{ 0x17AB, 0x17AB, 0x17AB }, -{ 0x17AC, 0x17AC, 0x17AC }, -{ 0x17AD, 0x17AD, 0x17AD }, -{ 0x17AE, 0x17AE, 0x17AE }, -{ 0x17AF, 0x17AF, 0x17AF }, -{ 0x17B0, 0x17B0, 0x17B0 }, -{ 0x17B1, 0x17B1, 0x17B1 }, -{ 0x17B2, 0x17B2, 0x17B2 }, -{ 0x17B3, 0x17B3, 0x17B3 }, -{ 0x17B7, 0x17B7, 0x17B7 }, -{ 0x17B8, 0x17B8, 0x17B8 }, -{ 0x17B9, 0x17B9, 0x17B9 }, -{ 0x17BA, 0x17BA, 0x17BA }, -{ 0x17BB, 0x17BB, 0x17BB }, -{ 0x17BC, 0x17BC, 0x17BC }, -{ 0x17BD, 0x17BD, 0x17BD }, -{ 0x17C6, 0x17C6, 0x17C6 }, -{ 0x17C9, 0x17C9, 0x17C9 }, -{ 0x17CA, 0x17CA, 0x17CA }, -{ 0x17CB, 0x17CB, 0x17CB }, -{ 0x17CC, 0x17CC, 0x17CC }, -{ 0x17CD, 0x17CD, 0x17CD }, -{ 0x17CE, 0x17CE, 0x17CE }, -{ 0x17CF, 0x17CF, 0x17CF }, -{ 0x17D0, 0x17D0, 0x17D0 }, -{ 0x17D1, 0x17D1, 0x17D1 }, -{ 0x17D2, 0x17D2, 0x17D2 }, -{ 0x17D3, 0x17D3, 0x17D3 }, -{ 0x17D7, 0x17D7, 0x17D7 }, -{ 0x17DC, 0x17DC, 0x17DC }, -{ 0x17DD, 0x17DD, 0x17DD }, -{ 0x180B, 0x180B, 0x180B }, -{ 0x180C, 0x180C, 0x180C }, -{ 0x180D, 0x180D, 0x180D }, -{ 0x1820, 0x1820, 0x1820 }, -{ 0x1821, 0x1821, 0x1821 }, -{ 0x1822, 0x1822, 0x1822 }, -{ 0x1823, 0x1823, 0x1823 }, -{ 0x1824, 0x1824, 0x1824 }, -{ 0x1825, 0x1825, 0x1825 }, -{ 0x1826, 0x1826, 0x1826 }, -{ 0x1827, 0x1827, 0x1827 }, -{ 0x1828, 0x1828, 0x1828 }, -{ 0x1829, 0x1829, 0x1829 }, -{ 0x182A, 0x182A, 0x182A }, -{ 0x182B, 0x182B, 0x182B }, -{ 0x182C, 0x182C, 0x182C }, -{ 0x182D, 0x182D, 0x182D }, -{ 0x182E, 0x182E, 0x182E }, -{ 0x182F, 0x182F, 0x182F }, -{ 0x1830, 0x1830, 0x1830 }, -{ 0x1831, 0x1831, 0x1831 }, -{ 0x1832, 0x1832, 0x1832 }, -{ 0x1833, 0x1833, 0x1833 }, -{ 0x1834, 0x1834, 0x1834 }, -{ 0x1835, 0x1835, 0x1835 }, -{ 0x1836, 0x1836, 0x1836 }, -{ 0x1837, 0x1837, 0x1837 }, -{ 0x1838, 0x1838, 0x1838 }, -{ 0x1839, 0x1839, 0x1839 }, -{ 0x183A, 0x183A, 0x183A }, -{ 0x183B, 0x183B, 0x183B }, -{ 0x183C, 0x183C, 0x183C }, -{ 0x183D, 0x183D, 0x183D }, -{ 0x183E, 0x183E, 0x183E }, -{ 0x183F, 0x183F, 0x183F }, -{ 0x1840, 0x1840, 0x1840 }, -{ 0x1841, 0x1841, 0x1841 }, -{ 0x1842, 0x1842, 0x1842 }, -{ 0x1843, 0x1843, 0x1843 }, -{ 0x1844, 0x1844, 0x1844 }, -{ 0x1845, 0x1845, 0x1845 }, -{ 0x1846, 0x1846, 0x1846 }, -{ 0x1847, 0x1847, 0x1847 }, -{ 0x1848, 0x1848, 0x1848 }, -{ 0x1849, 0x1849, 0x1849 }, -{ 0x184A, 0x184A, 0x184A }, -{ 0x184B, 0x184B, 0x184B }, -{ 0x184C, 0x184C, 0x184C }, -{ 0x184D, 0x184D, 0x184D }, -{ 0x184E, 0x184E, 0x184E }, -{ 0x184F, 0x184F, 0x184F }, -{ 0x1850, 0x1850, 0x1850 }, -{ 0x1851, 0x1851, 0x1851 }, -{ 0x1852, 0x1852, 0x1852 }, -{ 0x1853, 0x1853, 0x1853 }, -{ 0x1854, 0x1854, 0x1854 }, -{ 0x1855, 0x1855, 0x1855 }, -{ 0x1856, 0x1856, 0x1856 }, -{ 0x1857, 0x1857, 0x1857 }, -{ 0x1858, 0x1858, 0x1858 }, -{ 0x1859, 0x1859, 0x1859 }, -{ 0x185A, 0x185A, 0x185A }, -{ 0x185B, 0x185B, 0x185B }, -{ 0x185C, 0x185C, 0x185C }, -{ 0x185D, 0x185D, 0x185D }, -{ 0x185E, 0x185E, 0x185E }, -{ 0x185F, 0x185F, 0x185F }, -{ 0x1860, 0x1860, 0x1860 }, -{ 0x1861, 0x1861, 0x1861 }, -{ 0x1862, 0x1862, 0x1862 }, -{ 0x1863, 0x1863, 0x1863 }, -{ 0x1864, 0x1864, 0x1864 }, -{ 0x1865, 0x1865, 0x1865 }, -{ 0x1866, 0x1866, 0x1866 }, -{ 0x1867, 0x1867, 0x1867 }, -{ 0x1868, 0x1868, 0x1868 }, -{ 0x1869, 0x1869, 0x1869 }, -{ 0x186A, 0x186A, 0x186A }, -{ 0x186B, 0x186B, 0x186B }, -{ 0x186C, 0x186C, 0x186C }, -{ 0x186D, 0x186D, 0x186D }, -{ 0x186E, 0x186E, 0x186E }, -{ 0x186F, 0x186F, 0x186F }, -{ 0x1870, 0x1870, 0x1870 }, -{ 0x1871, 0x1871, 0x1871 }, -{ 0x1872, 0x1872, 0x1872 }, -{ 0x1873, 0x1873, 0x1873 }, -{ 0x1874, 0x1874, 0x1874 }, -{ 0x1875, 0x1875, 0x1875 }, -{ 0x1876, 0x1876, 0x1876 }, -{ 0x1877, 0x1877, 0x1877 }, -{ 0x1880, 0x1880, 0x1880 }, -{ 0x1881, 0x1881, 0x1881 }, -{ 0x1882, 0x1882, 0x1882 }, -{ 0x1883, 0x1883, 0x1883 }, -{ 0x1884, 0x1884, 0x1884 }, -{ 0x1885, 0x1885, 0x1885 }, -{ 0x1886, 0x1886, 0x1886 }, -{ 0x1887, 0x1887, 0x1887 }, -{ 0x1888, 0x1888, 0x1888 }, -{ 0x1889, 0x1889, 0x1889 }, -{ 0x188A, 0x188A, 0x188A }, -{ 0x188B, 0x188B, 0x188B }, -{ 0x188C, 0x188C, 0x188C }, -{ 0x188D, 0x188D, 0x188D }, -{ 0x188E, 0x188E, 0x188E }, -{ 0x188F, 0x188F, 0x188F }, -{ 0x1890, 0x1890, 0x1890 }, -{ 0x1891, 0x1891, 0x1891 }, -{ 0x1892, 0x1892, 0x1892 }, -{ 0x1893, 0x1893, 0x1893 }, -{ 0x1894, 0x1894, 0x1894 }, -{ 0x1895, 0x1895, 0x1895 }, -{ 0x1896, 0x1896, 0x1896 }, -{ 0x1897, 0x1897, 0x1897 }, -{ 0x1898, 0x1898, 0x1898 }, -{ 0x1899, 0x1899, 0x1899 }, -{ 0x189A, 0x189A, 0x189A }, -{ 0x189B, 0x189B, 0x189B }, -{ 0x189C, 0x189C, 0x189C }, -{ 0x189D, 0x189D, 0x189D }, -{ 0x189E, 0x189E, 0x189E }, -{ 0x189F, 0x189F, 0x189F }, -{ 0x18A0, 0x18A0, 0x18A0 }, -{ 0x18A1, 0x18A1, 0x18A1 }, -{ 0x18A2, 0x18A2, 0x18A2 }, -{ 0x18A3, 0x18A3, 0x18A3 }, -{ 0x18A4, 0x18A4, 0x18A4 }, -{ 0x18A5, 0x18A5, 0x18A5 }, -{ 0x18A6, 0x18A6, 0x18A6 }, -{ 0x18A7, 0x18A7, 0x18A7 }, -{ 0x18A8, 0x18A8, 0x18A8 }, -{ 0x18A9, 0x18A9, 0x18A9 }, -{ 0x1900, 0x1900, 0x1900 }, -{ 0x1901, 0x1901, 0x1901 }, -{ 0x1902, 0x1902, 0x1902 }, -{ 0x1903, 0x1903, 0x1903 }, -{ 0x1904, 0x1904, 0x1904 }, -{ 0x1905, 0x1905, 0x1905 }, -{ 0x1906, 0x1906, 0x1906 }, -{ 0x1907, 0x1907, 0x1907 }, -{ 0x1908, 0x1908, 0x1908 }, -{ 0x1909, 0x1909, 0x1909 }, -{ 0x190A, 0x190A, 0x190A }, -{ 0x190B, 0x190B, 0x190B }, -{ 0x190C, 0x190C, 0x190C }, -{ 0x190D, 0x190D, 0x190D }, -{ 0x190E, 0x190E, 0x190E }, -{ 0x190F, 0x190F, 0x190F }, -{ 0x1910, 0x1910, 0x1910 }, -{ 0x1911, 0x1911, 0x1911 }, -{ 0x1912, 0x1912, 0x1912 }, -{ 0x1913, 0x1913, 0x1913 }, -{ 0x1914, 0x1914, 0x1914 }, -{ 0x1915, 0x1915, 0x1915 }, -{ 0x1916, 0x1916, 0x1916 }, -{ 0x1917, 0x1917, 0x1917 }, -{ 0x1918, 0x1918, 0x1918 }, -{ 0x1919, 0x1919, 0x1919 }, -{ 0x191A, 0x191A, 0x191A }, -{ 0x191B, 0x191B, 0x191B }, -{ 0x191C, 0x191C, 0x191C }, -{ 0x1920, 0x1920, 0x1920 }, -{ 0x1921, 0x1921, 0x1921 }, -{ 0x1922, 0x1922, 0x1922 }, -{ 0x1927, 0x1927, 0x1927 }, -{ 0x1928, 0x1928, 0x1928 }, -{ 0x1932, 0x1932, 0x1932 }, -{ 0x1939, 0x1939, 0x1939 }, -{ 0x193A, 0x193A, 0x193A }, -{ 0x193B, 0x193B, 0x193B }, -{ 0x1950, 0x1950, 0x1950 }, -{ 0x1951, 0x1951, 0x1951 }, -{ 0x1952, 0x1952, 0x1952 }, -{ 0x1953, 0x1953, 0x1953 }, -{ 0x1954, 0x1954, 0x1954 }, -{ 0x1955, 0x1955, 0x1955 }, -{ 0x1956, 0x1956, 0x1956 }, -{ 0x1957, 0x1957, 0x1957 }, -{ 0x1958, 0x1958, 0x1958 }, -{ 0x1959, 0x1959, 0x1959 }, -{ 0x195A, 0x195A, 0x195A }, -{ 0x195B, 0x195B, 0x195B }, -{ 0x195C, 0x195C, 0x195C }, -{ 0x195D, 0x195D, 0x195D }, -{ 0x195E, 0x195E, 0x195E }, -{ 0x195F, 0x195F, 0x195F }, -{ 0x1960, 0x1960, 0x1960 }, -{ 0x1961, 0x1961, 0x1961 }, -{ 0x1962, 0x1962, 0x1962 }, -{ 0x1963, 0x1963, 0x1963 }, -{ 0x1964, 0x1964, 0x1964 }, -{ 0x1965, 0x1965, 0x1965 }, -{ 0x1966, 0x1966, 0x1966 }, -{ 0x1967, 0x1967, 0x1967 }, -{ 0x1968, 0x1968, 0x1968 }, -{ 0x1969, 0x1969, 0x1969 }, -{ 0x196A, 0x196A, 0x196A }, -{ 0x196B, 0x196B, 0x196B }, -{ 0x196C, 0x196C, 0x196C }, -{ 0x196D, 0x196D, 0x196D }, -{ 0x1970, 0x1970, 0x1970 }, -{ 0x1971, 0x1971, 0x1971 }, -{ 0x1972, 0x1972, 0x1972 }, -{ 0x1973, 0x1973, 0x1973 }, -{ 0x1974, 0x1974, 0x1974 }, -{ 0x1980, 0x1980, 0x1980 }, -{ 0x1981, 0x1981, 0x1981 }, -{ 0x1982, 0x1982, 0x1982 }, -{ 0x1983, 0x1983, 0x1983 }, -{ 0x1984, 0x1984, 0x1984 }, -{ 0x1985, 0x1985, 0x1985 }, -{ 0x1986, 0x1986, 0x1986 }, -{ 0x1987, 0x1987, 0x1987 }, -{ 0x1988, 0x1988, 0x1988 }, -{ 0x1989, 0x1989, 0x1989 }, -{ 0x198A, 0x198A, 0x198A }, -{ 0x198B, 0x198B, 0x198B }, -{ 0x198C, 0x198C, 0x198C }, -{ 0x198D, 0x198D, 0x198D }, -{ 0x198E, 0x198E, 0x198E }, -{ 0x198F, 0x198F, 0x198F }, -{ 0x1990, 0x1990, 0x1990 }, -{ 0x1991, 0x1991, 0x1991 }, -{ 0x1992, 0x1992, 0x1992 }, -{ 0x1993, 0x1993, 0x1993 }, -{ 0x1994, 0x1994, 0x1994 }, -{ 0x1995, 0x1995, 0x1995 }, -{ 0x1996, 0x1996, 0x1996 }, -{ 0x1997, 0x1997, 0x1997 }, -{ 0x1998, 0x1998, 0x1998 }, -{ 0x1999, 0x1999, 0x1999 }, -{ 0x199A, 0x199A, 0x199A }, -{ 0x199B, 0x199B, 0x199B }, -{ 0x199C, 0x199C, 0x199C }, -{ 0x199D, 0x199D, 0x199D }, -{ 0x199E, 0x199E, 0x199E }, -{ 0x199F, 0x199F, 0x199F }, -{ 0x19A0, 0x19A0, 0x19A0 }, -{ 0x19A1, 0x19A1, 0x19A1 }, -{ 0x19A2, 0x19A2, 0x19A2 }, -{ 0x19A3, 0x19A3, 0x19A3 }, -{ 0x19A4, 0x19A4, 0x19A4 }, -{ 0x19A5, 0x19A5, 0x19A5 }, -{ 0x19A6, 0x19A6, 0x19A6 }, -{ 0x19A7, 0x19A7, 0x19A7 }, -{ 0x19A8, 0x19A8, 0x19A8 }, -{ 0x19A9, 0x19A9, 0x19A9 }, -{ 0x19C1, 0x19C1, 0x19C1 }, -{ 0x19C2, 0x19C2, 0x19C2 }, -{ 0x19C3, 0x19C3, 0x19C3 }, -{ 0x19C4, 0x19C4, 0x19C4 }, -{ 0x19C5, 0x19C5, 0x19C5 }, -{ 0x19C6, 0x19C6, 0x19C6 }, -{ 0x19C7, 0x19C7, 0x19C7 }, -{ 0x1A00, 0x1A00, 0x1A00 }, -{ 0x1A01, 0x1A01, 0x1A01 }, -{ 0x1A02, 0x1A02, 0x1A02 }, -{ 0x1A03, 0x1A03, 0x1A03 }, -{ 0x1A04, 0x1A04, 0x1A04 }, -{ 0x1A05, 0x1A05, 0x1A05 }, -{ 0x1A06, 0x1A06, 0x1A06 }, -{ 0x1A07, 0x1A07, 0x1A07 }, -{ 0x1A08, 0x1A08, 0x1A08 }, -{ 0x1A09, 0x1A09, 0x1A09 }, -{ 0x1A0A, 0x1A0A, 0x1A0A }, -{ 0x1A0B, 0x1A0B, 0x1A0B }, -{ 0x1A0C, 0x1A0C, 0x1A0C }, -{ 0x1A0D, 0x1A0D, 0x1A0D }, -{ 0x1A0E, 0x1A0E, 0x1A0E }, -{ 0x1A0F, 0x1A0F, 0x1A0F }, -{ 0x1A10, 0x1A10, 0x1A10 }, -{ 0x1A11, 0x1A11, 0x1A11 }, -{ 0x1A12, 0x1A12, 0x1A12 }, -{ 0x1A13, 0x1A13, 0x1A13 }, -{ 0x1A14, 0x1A14, 0x1A14 }, -{ 0x1A15, 0x1A15, 0x1A15 }, -{ 0x1A16, 0x1A16, 0x1A16 }, -{ 0x1A17, 0x1A17, 0x1A17 }, -{ 0x1A18, 0x1A18, 0x1A18 }, -{ 0x1D00, 0x1D00, 0x1D00 }, -{ 0x1D01, 0x1D01, 0x1D01 }, -{ 0x1D02, 0x1D02, 0x1D02 }, -{ 0x1D03, 0x1D03, 0x1D03 }, -{ 0x1D04, 0x1D04, 0x1D04 }, -{ 0x1D05, 0x1D05, 0x1D05 }, -{ 0x1D06, 0x1D06, 0x1D06 }, -{ 0x1D07, 0x1D07, 0x1D07 }, -{ 0x1D08, 0x1D08, 0x1D08 }, -{ 0x1D09, 0x1D09, 0x1D09 }, -{ 0x1D0A, 0x1D0A, 0x1D0A }, -{ 0x1D0B, 0x1D0B, 0x1D0B }, -{ 0x1D0C, 0x1D0C, 0x1D0C }, -{ 0x1D0D, 0x1D0D, 0x1D0D }, -{ 0x1D0E, 0x1D0E, 0x1D0E }, -{ 0x1D0F, 0x1D0F, 0x1D0F }, -{ 0x1D10, 0x1D10, 0x1D10 }, -{ 0x1D11, 0x1D11, 0x1D11 }, -{ 0x1D12, 0x1D12, 0x1D12 }, -{ 0x1D13, 0x1D13, 0x1D13 }, -{ 0x1D14, 0x1D14, 0x1D14 }, -{ 0x1D15, 0x1D15, 0x1D15 }, -{ 0x1D16, 0x1D16, 0x1D16 }, -{ 0x1D17, 0x1D17, 0x1D17 }, -{ 0x1D18, 0x1D18, 0x1D18 }, -{ 0x1D19, 0x1D19, 0x1D19 }, -{ 0x1D1A, 0x1D1A, 0x1D1A }, -{ 0x1D1B, 0x1D1B, 0x1D1B }, -{ 0x1D1C, 0x1D1C, 0x1D1C }, -{ 0x1D1D, 0x1D1D, 0x1D1D }, -{ 0x1D1E, 0x1D1E, 0x1D1E }, -{ 0x1D1F, 0x1D1F, 0x1D1F }, -{ 0x1D20, 0x1D20, 0x1D20 }, -{ 0x1D21, 0x1D21, 0x1D21 }, -{ 0x1D22, 0x1D22, 0x1D22 }, -{ 0x1D23, 0x1D23, 0x1D23 }, -{ 0x1D24, 0x1D24, 0x1D24 }, -{ 0x1D25, 0x1D25, 0x1D25 }, -{ 0x1D26, 0x1D26, 0x1D26 }, -{ 0x1D27, 0x1D27, 0x1D27 }, -{ 0x1D28, 0x1D28, 0x1D28 }, -{ 0x1D29, 0x1D29, 0x1D29 }, -{ 0x1D2A, 0x1D2A, 0x1D2A }, -{ 0x1D2B, 0x1D2B, 0x1D2B }, -{ 0x1D2C, 0x1D2C, 0x1D2C }, -{ 0x1D2D, 0x1D2D, 0x1D2D }, -{ 0x1D2E, 0x1D2E, 0x1D2E }, -{ 0x1D2F, 0x1D2F, 0x1D2F }, -{ 0x1D30, 0x1D30, 0x1D30 }, -{ 0x1D31, 0x1D31, 0x1D31 }, -{ 0x1D32, 0x1D32, 0x1D32 }, -{ 0x1D33, 0x1D33, 0x1D33 }, -{ 0x1D34, 0x1D34, 0x1D34 }, -{ 0x1D35, 0x1D35, 0x1D35 }, -{ 0x1D36, 0x1D36, 0x1D36 }, -{ 0x1D37, 0x1D37, 0x1D37 }, -{ 0x1D38, 0x1D38, 0x1D38 }, -{ 0x1D39, 0x1D39, 0x1D39 }, -{ 0x1D3A, 0x1D3A, 0x1D3A }, -{ 0x1D3B, 0x1D3B, 0x1D3B }, -{ 0x1D3C, 0x1D3C, 0x1D3C }, -{ 0x1D3D, 0x1D3D, 0x1D3D }, -{ 0x1D3E, 0x1D3E, 0x1D3E }, -{ 0x1D3F, 0x1D3F, 0x1D3F }, -{ 0x1D40, 0x1D40, 0x1D40 }, -{ 0x1D41, 0x1D41, 0x1D41 }, -{ 0x1D42, 0x1D42, 0x1D42 }, -{ 0x1D43, 0x1D43, 0x1D43 }, -{ 0x1D44, 0x1D44, 0x1D44 }, -{ 0x1D45, 0x1D45, 0x1D45 }, -{ 0x1D46, 0x1D46, 0x1D46 }, -{ 0x1D47, 0x1D47, 0x1D47 }, -{ 0x1D48, 0x1D48, 0x1D48 }, -{ 0x1D49, 0x1D49, 0x1D49 }, -{ 0x1D4A, 0x1D4A, 0x1D4A }, -{ 0x1D4B, 0x1D4B, 0x1D4B }, -{ 0x1D4C, 0x1D4C, 0x1D4C }, -{ 0x1D4D, 0x1D4D, 0x1D4D }, -{ 0x1D4E, 0x1D4E, 0x1D4E }, -{ 0x1D4F, 0x1D4F, 0x1D4F }, -{ 0x1D50, 0x1D50, 0x1D50 }, -{ 0x1D51, 0x1D51, 0x1D51 }, -{ 0x1D52, 0x1D52, 0x1D52 }, -{ 0x1D53, 0x1D53, 0x1D53 }, -{ 0x1D54, 0x1D54, 0x1D54 }, -{ 0x1D55, 0x1D55, 0x1D55 }, -{ 0x1D56, 0x1D56, 0x1D56 }, -{ 0x1D57, 0x1D57, 0x1D57 }, -{ 0x1D58, 0x1D58, 0x1D58 }, -{ 0x1D59, 0x1D59, 0x1D59 }, -{ 0x1D5A, 0x1D5A, 0x1D5A }, -{ 0x1D5B, 0x1D5B, 0x1D5B }, -{ 0x1D5C, 0x1D5C, 0x1D5C }, -{ 0x1D5D, 0x1D5D, 0x1D5D }, -{ 0x1D5E, 0x1D5E, 0x1D5E }, -{ 0x1D5F, 0x1D5F, 0x1D5F }, -{ 0x1D60, 0x1D60, 0x1D60 }, -{ 0x1D61, 0x1D61, 0x1D61 }, -{ 0x1D62, 0x1D62, 0x1D62 }, -{ 0x1D63, 0x1D63, 0x1D63 }, -{ 0x1D64, 0x1D64, 0x1D64 }, -{ 0x1D65, 0x1D65, 0x1D65 }, -{ 0x1D66, 0x1D66, 0x1D66 }, -{ 0x1D67, 0x1D67, 0x1D67 }, -{ 0x1D68, 0x1D68, 0x1D68 }, -{ 0x1D69, 0x1D69, 0x1D69 }, -{ 0x1D6A, 0x1D6A, 0x1D6A }, -{ 0x1D6B, 0x1D6B, 0x1D6B }, -{ 0x1D6C, 0x1D6C, 0x1D6C }, -{ 0x1D6D, 0x1D6D, 0x1D6D }, -{ 0x1D6E, 0x1D6E, 0x1D6E }, -{ 0x1D6F, 0x1D6F, 0x1D6F }, -{ 0x1D70, 0x1D70, 0x1D70 }, -{ 0x1D71, 0x1D71, 0x1D71 }, -{ 0x1D72, 0x1D72, 0x1D72 }, -{ 0x1D73, 0x1D73, 0x1D73 }, -{ 0x1D74, 0x1D74, 0x1D74 }, -{ 0x1D75, 0x1D75, 0x1D75 }, -{ 0x1D76, 0x1D76, 0x1D76 }, -{ 0x1D77, 0x1D77, 0x1D77 }, -{ 0x1D78, 0x1D78, 0x1D78 }, -{ 0x1D79, 0x1D79, 0x1D79 }, -{ 0x1D7A, 0x1D7A, 0x1D7A }, -{ 0x1D7B, 0x1D7B, 0x1D7B }, -{ 0x1D7C, 0x1D7C, 0x1D7C }, -{ 0x1D7D, 0x1D7D, 0x1D7D }, -{ 0x1D7E, 0x1D7E, 0x1D7E }, -{ 0x1D7F, 0x1D7F, 0x1D7F }, -{ 0x1D80, 0x1D80, 0x1D80 }, -{ 0x1D81, 0x1D81, 0x1D81 }, -{ 0x1D82, 0x1D82, 0x1D82 }, -{ 0x1D83, 0x1D83, 0x1D83 }, -{ 0x1D84, 0x1D84, 0x1D84 }, -{ 0x1D85, 0x1D85, 0x1D85 }, -{ 0x1D86, 0x1D86, 0x1D86 }, -{ 0x1D87, 0x1D87, 0x1D87 }, -{ 0x1D88, 0x1D88, 0x1D88 }, -{ 0x1D89, 0x1D89, 0x1D89 }, -{ 0x1D8A, 0x1D8A, 0x1D8A }, -{ 0x1D8B, 0x1D8B, 0x1D8B }, -{ 0x1D8C, 0x1D8C, 0x1D8C }, -{ 0x1D8D, 0x1D8D, 0x1D8D }, -{ 0x1D8E, 0x1D8E, 0x1D8E }, -{ 0x1D8F, 0x1D8F, 0x1D8F }, -{ 0x1D90, 0x1D90, 0x1D90 }, -{ 0x1D91, 0x1D91, 0x1D91 }, -{ 0x1D92, 0x1D92, 0x1D92 }, -{ 0x1D93, 0x1D93, 0x1D93 }, -{ 0x1D94, 0x1D94, 0x1D94 }, -{ 0x1D95, 0x1D95, 0x1D95 }, -{ 0x1D96, 0x1D96, 0x1D96 }, -{ 0x1D97, 0x1D97, 0x1D97 }, -{ 0x1D98, 0x1D98, 0x1D98 }, -{ 0x1D99, 0x1D99, 0x1D99 }, -{ 0x1D9A, 0x1D9A, 0x1D9A }, -{ 0x1D9B, 0x1D9B, 0x1D9B }, -{ 0x1D9C, 0x1D9C, 0x1D9C }, -{ 0x1D9D, 0x1D9D, 0x1D9D }, -{ 0x1D9E, 0x1D9E, 0x1D9E }, -{ 0x1D9F, 0x1D9F, 0x1D9F }, -{ 0x1DA0, 0x1DA0, 0x1DA0 }, -{ 0x1DA1, 0x1DA1, 0x1DA1 }, -{ 0x1DA2, 0x1DA2, 0x1DA2 }, -{ 0x1DA3, 0x1DA3, 0x1DA3 }, -{ 0x1DA4, 0x1DA4, 0x1DA4 }, -{ 0x1DA5, 0x1DA5, 0x1DA5 }, -{ 0x1DA6, 0x1DA6, 0x1DA6 }, -{ 0x1DA7, 0x1DA7, 0x1DA7 }, -{ 0x1DA8, 0x1DA8, 0x1DA8 }, -{ 0x1DA9, 0x1DA9, 0x1DA9 }, -{ 0x1DAA, 0x1DAA, 0x1DAA }, -{ 0x1DAB, 0x1DAB, 0x1DAB }, -{ 0x1DAC, 0x1DAC, 0x1DAC }, -{ 0x1DAD, 0x1DAD, 0x1DAD }, -{ 0x1DAE, 0x1DAE, 0x1DAE }, -{ 0x1DAF, 0x1DAF, 0x1DAF }, -{ 0x1DB0, 0x1DB0, 0x1DB0 }, -{ 0x1DB1, 0x1DB1, 0x1DB1 }, -{ 0x1DB2, 0x1DB2, 0x1DB2 }, -{ 0x1DB3, 0x1DB3, 0x1DB3 }, -{ 0x1DB4, 0x1DB4, 0x1DB4 }, -{ 0x1DB5, 0x1DB5, 0x1DB5 }, -{ 0x1DB6, 0x1DB6, 0x1DB6 }, -{ 0x1DB7, 0x1DB7, 0x1DB7 }, -{ 0x1DB8, 0x1DB8, 0x1DB8 }, -{ 0x1DB9, 0x1DB9, 0x1DB9 }, -{ 0x1DBA, 0x1DBA, 0x1DBA }, -{ 0x1DBB, 0x1DBB, 0x1DBB }, -{ 0x1DBC, 0x1DBC, 0x1DBC }, -{ 0x1DBD, 0x1DBD, 0x1DBD }, -{ 0x1DBE, 0x1DBE, 0x1DBE }, -{ 0x1DBF, 0x1DBF, 0x1DBF }, -{ 0x1DC0, 0x1DC0, 0x1DC0 }, -{ 0x1DC1, 0x1DC1, 0x1DC1 }, -{ 0x1DC2, 0x1DC2, 0x1DC2 }, -{ 0x1DC3, 0x1DC3, 0x1DC3 }, -{ 0x1E00, 0x1E00, 0x1E01 }, -{ 0x1E01, 0x1E00, 0x1E01 }, -{ 0x1E02, 0x1E02, 0x1E03 }, -{ 0x1E03, 0x1E02, 0x1E03 }, -{ 0x1E04, 0x1E04, 0x1E05 }, -{ 0x1E05, 0x1E04, 0x1E05 }, -{ 0x1E06, 0x1E06, 0x1E07 }, -{ 0x1E07, 0x1E06, 0x1E07 }, -{ 0x1E08, 0x1E08, 0x1E09 }, -{ 0x1E09, 0x1E08, 0x1E09 }, -{ 0x1E0A, 0x1E0A, 0x1E0B }, -{ 0x1E0B, 0x1E0A, 0x1E0B }, -{ 0x1E0C, 0x1E0C, 0x1E0D }, -{ 0x1E0D, 0x1E0C, 0x1E0D }, -{ 0x1E0E, 0x1E0E, 0x1E0F }, -{ 0x1E0F, 0x1E0E, 0x1E0F }, -{ 0x1E10, 0x1E10, 0x1E11 }, -{ 0x1E11, 0x1E10, 0x1E11 }, -{ 0x1E12, 0x1E12, 0x1E13 }, -{ 0x1E13, 0x1E12, 0x1E13 }, -{ 0x1E14, 0x1E14, 0x1E15 }, -{ 0x1E15, 0x1E14, 0x1E15 }, -{ 0x1E16, 0x1E16, 0x1E17 }, -{ 0x1E17, 0x1E16, 0x1E17 }, -{ 0x1E18, 0x1E18, 0x1E19 }, -{ 0x1E19, 0x1E18, 0x1E19 }, -{ 0x1E1A, 0x1E1A, 0x1E1B }, -{ 0x1E1B, 0x1E1A, 0x1E1B }, -{ 0x1E1C, 0x1E1C, 0x1E1D }, -{ 0x1E1D, 0x1E1C, 0x1E1D }, -{ 0x1E1E, 0x1E1E, 0x1E1F }, -{ 0x1E1F, 0x1E1E, 0x1E1F }, -{ 0x1E20, 0x1E20, 0x1E21 }, -{ 0x1E21, 0x1E20, 0x1E21 }, -{ 0x1E22, 0x1E22, 0x1E23 }, -{ 0x1E23, 0x1E22, 0x1E23 }, -{ 0x1E24, 0x1E24, 0x1E25 }, -{ 0x1E25, 0x1E24, 0x1E25 }, -{ 0x1E26, 0x1E26, 0x1E27 }, -{ 0x1E27, 0x1E26, 0x1E27 }, -{ 0x1E28, 0x1E28, 0x1E29 }, -{ 0x1E29, 0x1E28, 0x1E29 }, -{ 0x1E2A, 0x1E2A, 0x1E2B }, -{ 0x1E2B, 0x1E2A, 0x1E2B }, -{ 0x1E2C, 0x1E2C, 0x1E2D }, -{ 0x1E2D, 0x1E2C, 0x1E2D }, -{ 0x1E2E, 0x1E2E, 0x1E2F }, -{ 0x1E2F, 0x1E2E, 0x1E2F }, -{ 0x1E30, 0x1E30, 0x1E31 }, -{ 0x1E31, 0x1E30, 0x1E31 }, -{ 0x1E32, 0x1E32, 0x1E33 }, -{ 0x1E33, 0x1E32, 0x1E33 }, -{ 0x1E34, 0x1E34, 0x1E35 }, -{ 0x1E35, 0x1E34, 0x1E35 }, -{ 0x1E36, 0x1E36, 0x1E37 }, -{ 0x1E37, 0x1E36, 0x1E37 }, -{ 0x1E38, 0x1E38, 0x1E39 }, -{ 0x1E39, 0x1E38, 0x1E39 }, -{ 0x1E3A, 0x1E3A, 0x1E3B }, -{ 0x1E3B, 0x1E3A, 0x1E3B }, -{ 0x1E3C, 0x1E3C, 0x1E3D }, -{ 0x1E3D, 0x1E3C, 0x1E3D }, -{ 0x1E3E, 0x1E3E, 0x1E3F }, -{ 0x1E3F, 0x1E3E, 0x1E3F }, -{ 0x1E40, 0x1E40, 0x1E41 }, -{ 0x1E41, 0x1E40, 0x1E41 }, -{ 0x1E42, 0x1E42, 0x1E43 }, -{ 0x1E43, 0x1E42, 0x1E43 }, -{ 0x1E44, 0x1E44, 0x1E45 }, -{ 0x1E45, 0x1E44, 0x1E45 }, -{ 0x1E46, 0x1E46, 0x1E47 }, -{ 0x1E47, 0x1E46, 0x1E47 }, -{ 0x1E48, 0x1E48, 0x1E49 }, -{ 0x1E49, 0x1E48, 0x1E49 }, -{ 0x1E4A, 0x1E4A, 0x1E4B }, -{ 0x1E4B, 0x1E4A, 0x1E4B }, -{ 0x1E4C, 0x1E4C, 0x1E4D }, -{ 0x1E4D, 0x1E4C, 0x1E4D }, -{ 0x1E4E, 0x1E4E, 0x1E4F }, -{ 0x1E4F, 0x1E4E, 0x1E4F }, -{ 0x1E50, 0x1E50, 0x1E51 }, -{ 0x1E51, 0x1E50, 0x1E51 }, -{ 0x1E52, 0x1E52, 0x1E53 }, -{ 0x1E53, 0x1E52, 0x1E53 }, -{ 0x1E54, 0x1E54, 0x1E55 }, -{ 0x1E55, 0x1E54, 0x1E55 }, -{ 0x1E56, 0x1E56, 0x1E57 }, -{ 0x1E57, 0x1E56, 0x1E57 }, -{ 0x1E58, 0x1E58, 0x1E59 }, -{ 0x1E59, 0x1E58, 0x1E59 }, -{ 0x1E5A, 0x1E5A, 0x1E5B }, -{ 0x1E5B, 0x1E5A, 0x1E5B }, -{ 0x1E5C, 0x1E5C, 0x1E5D }, -{ 0x1E5D, 0x1E5C, 0x1E5D }, -{ 0x1E5E, 0x1E5E, 0x1E5F }, -{ 0x1E5F, 0x1E5E, 0x1E5F }, -{ 0x1E60, 0x1E60, 0x1E61 }, -{ 0x1E61, 0x1E60, 0x1E61 }, -{ 0x1E62, 0x1E62, 0x1E63 }, -{ 0x1E63, 0x1E62, 0x1E63 }, -{ 0x1E64, 0x1E64, 0x1E65 }, -{ 0x1E65, 0x1E64, 0x1E65 }, -{ 0x1E66, 0x1E66, 0x1E67 }, -{ 0x1E67, 0x1E66, 0x1E67 }, -{ 0x1E68, 0x1E68, 0x1E69 }, -{ 0x1E69, 0x1E68, 0x1E69 }, -{ 0x1E6A, 0x1E6A, 0x1E6B }, -{ 0x1E6B, 0x1E6A, 0x1E6B }, -{ 0x1E6C, 0x1E6C, 0x1E6D }, -{ 0x1E6D, 0x1E6C, 0x1E6D }, -{ 0x1E6E, 0x1E6E, 0x1E6F }, -{ 0x1E6F, 0x1E6E, 0x1E6F }, -{ 0x1E70, 0x1E70, 0x1E71 }, -{ 0x1E71, 0x1E70, 0x1E71 }, -{ 0x1E72, 0x1E72, 0x1E73 }, -{ 0x1E73, 0x1E72, 0x1E73 }, -{ 0x1E74, 0x1E74, 0x1E75 }, -{ 0x1E75, 0x1E74, 0x1E75 }, -{ 0x1E76, 0x1E76, 0x1E77 }, -{ 0x1E77, 0x1E76, 0x1E77 }, -{ 0x1E78, 0x1E78, 0x1E79 }, -{ 0x1E79, 0x1E78, 0x1E79 }, -{ 0x1E7A, 0x1E7A, 0x1E7B }, -{ 0x1E7B, 0x1E7A, 0x1E7B }, -{ 0x1E7C, 0x1E7C, 0x1E7D }, -{ 0x1E7D, 0x1E7C, 0x1E7D }, -{ 0x1E7E, 0x1E7E, 0x1E7F }, -{ 0x1E7F, 0x1E7E, 0x1E7F }, -{ 0x1E80, 0x1E80, 0x1E81 }, -{ 0x1E81, 0x1E80, 0x1E81 }, -{ 0x1E82, 0x1E82, 0x1E83 }, -{ 0x1E83, 0x1E82, 0x1E83 }, -{ 0x1E84, 0x1E84, 0x1E85 }, -{ 0x1E85, 0x1E84, 0x1E85 }, -{ 0x1E86, 0x1E86, 0x1E87 }, -{ 0x1E87, 0x1E86, 0x1E87 }, -{ 0x1E88, 0x1E88, 0x1E89 }, -{ 0x1E89, 0x1E88, 0x1E89 }, -{ 0x1E8A, 0x1E8A, 0x1E8B }, -{ 0x1E8B, 0x1E8A, 0x1E8B }, -{ 0x1E8C, 0x1E8C, 0x1E8D }, -{ 0x1E8D, 0x1E8C, 0x1E8D }, -{ 0x1E8E, 0x1E8E, 0x1E8F }, -{ 0x1E8F, 0x1E8E, 0x1E8F }, -{ 0x1E90, 0x1E90, 0x1E91 }, -{ 0x1E91, 0x1E90, 0x1E91 }, -{ 0x1E92, 0x1E92, 0x1E93 }, -{ 0x1E93, 0x1E92, 0x1E93 }, -{ 0x1E94, 0x1E94, 0x1E95 }, -{ 0x1E95, 0x1E94, 0x1E95 }, -{ 0x1E96, 0x1E96, 0x1E96 }, -{ 0x1E97, 0x1E97, 0x1E97 }, -{ 0x1E98, 0x1E98, 0x1E98 }, -{ 0x1E99, 0x1E99, 0x1E99 }, -{ 0x1E9A, 0x1E9A, 0x1E9A }, -{ 0x1E9B, 0x1E60, 0x1E9B }, -{ 0x1EA0, 0x1EA0, 0x1EA1 }, -{ 0x1EA1, 0x1EA0, 0x1EA1 }, -{ 0x1EA2, 0x1EA2, 0x1EA3 }, -{ 0x1EA3, 0x1EA2, 0x1EA3 }, -{ 0x1EA4, 0x1EA4, 0x1EA5 }, -{ 0x1EA5, 0x1EA4, 0x1EA5 }, -{ 0x1EA6, 0x1EA6, 0x1EA7 }, -{ 0x1EA7, 0x1EA6, 0x1EA7 }, -{ 0x1EA8, 0x1EA8, 0x1EA9 }, -{ 0x1EA9, 0x1EA8, 0x1EA9 }, -{ 0x1EAA, 0x1EAA, 0x1EAB }, -{ 0x1EAB, 0x1EAA, 0x1EAB }, -{ 0x1EAC, 0x1EAC, 0x1EAD }, -{ 0x1EAD, 0x1EAC, 0x1EAD }, -{ 0x1EAE, 0x1EAE, 0x1EAF }, -{ 0x1EAF, 0x1EAE, 0x1EAF }, -{ 0x1EB0, 0x1EB0, 0x1EB1 }, -{ 0x1EB1, 0x1EB0, 0x1EB1 }, -{ 0x1EB2, 0x1EB2, 0x1EB3 }, -{ 0x1EB3, 0x1EB2, 0x1EB3 }, -{ 0x1EB4, 0x1EB4, 0x1EB5 }, -{ 0x1EB5, 0x1EB4, 0x1EB5 }, -{ 0x1EB6, 0x1EB6, 0x1EB7 }, -{ 0x1EB7, 0x1EB6, 0x1EB7 }, -{ 0x1EB8, 0x1EB8, 0x1EB9 }, -{ 0x1EB9, 0x1EB8, 0x1EB9 }, -{ 0x1EBA, 0x1EBA, 0x1EBB }, -{ 0x1EBB, 0x1EBA, 0x1EBB }, -{ 0x1EBC, 0x1EBC, 0x1EBD }, -{ 0x1EBD, 0x1EBC, 0x1EBD }, -{ 0x1EBE, 0x1EBE, 0x1EBF }, -{ 0x1EBF, 0x1EBE, 0x1EBF }, -{ 0x1EC0, 0x1EC0, 0x1EC1 }, -{ 0x1EC1, 0x1EC0, 0x1EC1 }, -{ 0x1EC2, 0x1EC2, 0x1EC3 }, -{ 0x1EC3, 0x1EC2, 0x1EC3 }, -{ 0x1EC4, 0x1EC4, 0x1EC5 }, -{ 0x1EC5, 0x1EC4, 0x1EC5 }, -{ 0x1EC6, 0x1EC6, 0x1EC7 }, -{ 0x1EC7, 0x1EC6, 0x1EC7 }, -{ 0x1EC8, 0x1EC8, 0x1EC9 }, -{ 0x1EC9, 0x1EC8, 0x1EC9 }, -{ 0x1ECA, 0x1ECA, 0x1ECB }, -{ 0x1ECB, 0x1ECA, 0x1ECB }, -{ 0x1ECC, 0x1ECC, 0x1ECD }, -{ 0x1ECD, 0x1ECC, 0x1ECD }, -{ 0x1ECE, 0x1ECE, 0x1ECF }, -{ 0x1ECF, 0x1ECE, 0x1ECF }, -{ 0x1ED0, 0x1ED0, 0x1ED1 }, -{ 0x1ED1, 0x1ED0, 0x1ED1 }, -{ 0x1ED2, 0x1ED2, 0x1ED3 }, -{ 0x1ED3, 0x1ED2, 0x1ED3 }, -{ 0x1ED4, 0x1ED4, 0x1ED5 }, -{ 0x1ED5, 0x1ED4, 0x1ED5 }, -{ 0x1ED6, 0x1ED6, 0x1ED7 }, -{ 0x1ED7, 0x1ED6, 0x1ED7 }, -{ 0x1ED8, 0x1ED8, 0x1ED9 }, -{ 0x1ED9, 0x1ED8, 0x1ED9 }, -{ 0x1EDA, 0x1EDA, 0x1EDB }, -{ 0x1EDB, 0x1EDA, 0x1EDB }, -{ 0x1EDC, 0x1EDC, 0x1EDD }, -{ 0x1EDD, 0x1EDC, 0x1EDD }, -{ 0x1EDE, 0x1EDE, 0x1EDF }, -{ 0x1EDF, 0x1EDE, 0x1EDF }, -{ 0x1EE0, 0x1EE0, 0x1EE1 }, -{ 0x1EE1, 0x1EE0, 0x1EE1 }, -{ 0x1EE2, 0x1EE2, 0x1EE3 }, -{ 0x1EE3, 0x1EE2, 0x1EE3 }, -{ 0x1EE4, 0x1EE4, 0x1EE5 }, -{ 0x1EE5, 0x1EE4, 0x1EE5 }, -{ 0x1EE6, 0x1EE6, 0x1EE7 }, -{ 0x1EE7, 0x1EE6, 0x1EE7 }, -{ 0x1EE8, 0x1EE8, 0x1EE9 }, -{ 0x1EE9, 0x1EE8, 0x1EE9 }, -{ 0x1EEA, 0x1EEA, 0x1EEB }, -{ 0x1EEB, 0x1EEA, 0x1EEB }, -{ 0x1EEC, 0x1EEC, 0x1EED }, -{ 0x1EED, 0x1EEC, 0x1EED }, -{ 0x1EEE, 0x1EEE, 0x1EEF }, -{ 0x1EEF, 0x1EEE, 0x1EEF }, -{ 0x1EF0, 0x1EF0, 0x1EF1 }, -{ 0x1EF1, 0x1EF0, 0x1EF1 }, -{ 0x1EF2, 0x1EF2, 0x1EF3 }, -{ 0x1EF3, 0x1EF2, 0x1EF3 }, -{ 0x1EF4, 0x1EF4, 0x1EF5 }, -{ 0x1EF5, 0x1EF4, 0x1EF5 }, -{ 0x1EF6, 0x1EF6, 0x1EF7 }, -{ 0x1EF7, 0x1EF6, 0x1EF7 }, -{ 0x1EF8, 0x1EF8, 0x1EF9 }, -{ 0x1EF9, 0x1EF8, 0x1EF9 }, -{ 0x1F00, 0x1F08, 0x1F00 }, -{ 0x1F01, 0x1F09, 0x1F01 }, -{ 0x1F02, 0x1F0A, 0x1F02 }, -{ 0x1F03, 0x1F0B, 0x1F03 }, -{ 0x1F04, 0x1F0C, 0x1F04 }, -{ 0x1F05, 0x1F0D, 0x1F05 }, -{ 0x1F06, 0x1F0E, 0x1F06 }, -{ 0x1F07, 0x1F0F, 0x1F07 }, -{ 0x1F08, 0x1F08, 0x1F00 }, -{ 0x1F09, 0x1F09, 0x1F01 }, -{ 0x1F0A, 0x1F0A, 0x1F02 }, -{ 0x1F0B, 0x1F0B, 0x1F03 }, -{ 0x1F0C, 0x1F0C, 0x1F04 }, -{ 0x1F0D, 0x1F0D, 0x1F05 }, -{ 0x1F0E, 0x1F0E, 0x1F06 }, -{ 0x1F0F, 0x1F0F, 0x1F07 }, -{ 0x1F10, 0x1F18, 0x1F10 }, -{ 0x1F11, 0x1F19, 0x1F11 }, -{ 0x1F12, 0x1F1A, 0x1F12 }, -{ 0x1F13, 0x1F1B, 0x1F13 }, -{ 0x1F14, 0x1F1C, 0x1F14 }, -{ 0x1F15, 0x1F1D, 0x1F15 }, -{ 0x1F18, 0x1F18, 0x1F10 }, -{ 0x1F19, 0x1F19, 0x1F11 }, -{ 0x1F1A, 0x1F1A, 0x1F12 }, -{ 0x1F1B, 0x1F1B, 0x1F13 }, -{ 0x1F1C, 0x1F1C, 0x1F14 }, -{ 0x1F1D, 0x1F1D, 0x1F15 }, -{ 0x1F20, 0x1F28, 0x1F20 }, -{ 0x1F21, 0x1F29, 0x1F21 }, -{ 0x1F22, 0x1F2A, 0x1F22 }, -{ 0x1F23, 0x1F2B, 0x1F23 }, -{ 0x1F24, 0x1F2C, 0x1F24 }, -{ 0x1F25, 0x1F2D, 0x1F25 }, -{ 0x1F26, 0x1F2E, 0x1F26 }, -{ 0x1F27, 0x1F2F, 0x1F27 }, -{ 0x1F28, 0x1F28, 0x1F20 }, -{ 0x1F29, 0x1F29, 0x1F21 }, -{ 0x1F2A, 0x1F2A, 0x1F22 }, -{ 0x1F2B, 0x1F2B, 0x1F23 }, -{ 0x1F2C, 0x1F2C, 0x1F24 }, -{ 0x1F2D, 0x1F2D, 0x1F25 }, -{ 0x1F2E, 0x1F2E, 0x1F26 }, -{ 0x1F2F, 0x1F2F, 0x1F27 }, -{ 0x1F30, 0x1F38, 0x1F30 }, -{ 0x1F31, 0x1F39, 0x1F31 }, -{ 0x1F32, 0x1F3A, 0x1F32 }, -{ 0x1F33, 0x1F3B, 0x1F33 }, -{ 0x1F34, 0x1F3C, 0x1F34 }, -{ 0x1F35, 0x1F3D, 0x1F35 }, -{ 0x1F36, 0x1F3E, 0x1F36 }, -{ 0x1F37, 0x1F3F, 0x1F37 }, -{ 0x1F38, 0x1F38, 0x1F30 }, -{ 0x1F39, 0x1F39, 0x1F31 }, -{ 0x1F3A, 0x1F3A, 0x1F32 }, -{ 0x1F3B, 0x1F3B, 0x1F33 }, -{ 0x1F3C, 0x1F3C, 0x1F34 }, -{ 0x1F3D, 0x1F3D, 0x1F35 }, -{ 0x1F3E, 0x1F3E, 0x1F36 }, -{ 0x1F3F, 0x1F3F, 0x1F37 }, -{ 0x1F40, 0x1F48, 0x1F40 }, -{ 0x1F41, 0x1F49, 0x1F41 }, -{ 0x1F42, 0x1F4A, 0x1F42 }, -{ 0x1F43, 0x1F4B, 0x1F43 }, -{ 0x1F44, 0x1F4C, 0x1F44 }, -{ 0x1F45, 0x1F4D, 0x1F45 }, -{ 0x1F48, 0x1F48, 0x1F40 }, -{ 0x1F49, 0x1F49, 0x1F41 }, -{ 0x1F4A, 0x1F4A, 0x1F42 }, -{ 0x1F4B, 0x1F4B, 0x1F43 }, -{ 0x1F4C, 0x1F4C, 0x1F44 }, -{ 0x1F4D, 0x1F4D, 0x1F45 }, -{ 0x1F50, 0x1F50, 0x1F50 }, -{ 0x1F51, 0x1F59, 0x1F51 }, -{ 0x1F52, 0x1F52, 0x1F52 }, -{ 0x1F53, 0x1F5B, 0x1F53 }, -{ 0x1F54, 0x1F54, 0x1F54 }, -{ 0x1F55, 0x1F5D, 0x1F55 }, -{ 0x1F56, 0x1F56, 0x1F56 }, -{ 0x1F57, 0x1F5F, 0x1F57 }, -{ 0x1F59, 0x1F59, 0x1F51 }, -{ 0x1F5B, 0x1F5B, 0x1F53 }, -{ 0x1F5D, 0x1F5D, 0x1F55 }, -{ 0x1F5F, 0x1F5F, 0x1F57 }, -{ 0x1F60, 0x1F68, 0x1F60 }, -{ 0x1F61, 0x1F69, 0x1F61 }, -{ 0x1F62, 0x1F6A, 0x1F62 }, -{ 0x1F63, 0x1F6B, 0x1F63 }, -{ 0x1F64, 0x1F6C, 0x1F64 }, -{ 0x1F65, 0x1F6D, 0x1F65 }, -{ 0x1F66, 0x1F6E, 0x1F66 }, -{ 0x1F67, 0x1F6F, 0x1F67 }, -{ 0x1F68, 0x1F68, 0x1F60 }, -{ 0x1F69, 0x1F69, 0x1F61 }, -{ 0x1F6A, 0x1F6A, 0x1F62 }, -{ 0x1F6B, 0x1F6B, 0x1F63 }, -{ 0x1F6C, 0x1F6C, 0x1F64 }, -{ 0x1F6D, 0x1F6D, 0x1F65 }, -{ 0x1F6E, 0x1F6E, 0x1F66 }, -{ 0x1F6F, 0x1F6F, 0x1F67 }, -{ 0x1F70, 0x1FBA, 0x1F70 }, -{ 0x1F71, 0x1FBB, 0x1F71 }, -{ 0x1F72, 0x1FC8, 0x1F72 }, -{ 0x1F73, 0x1FC9, 0x1F73 }, -{ 0x1F74, 0x1FCA, 0x1F74 }, -{ 0x1F75, 0x1FCB, 0x1F75 }, -{ 0x1F76, 0x1FDA, 0x1F76 }, -{ 0x1F77, 0x1FDB, 0x1F77 }, -{ 0x1F78, 0x1FF8, 0x1F78 }, -{ 0x1F79, 0x1FF9, 0x1F79 }, -{ 0x1F7A, 0x1FEA, 0x1F7A }, -{ 0x1F7B, 0x1FEB, 0x1F7B }, -{ 0x1F7C, 0x1FFA, 0x1F7C }, -{ 0x1F7D, 0x1FFB, 0x1F7D }, -{ 0x1F80, 0x1F88, 0x1F80 }, -{ 0x1F81, 0x1F89, 0x1F81 }, -{ 0x1F82, 0x1F8A, 0x1F82 }, -{ 0x1F83, 0x1F8B, 0x1F83 }, -{ 0x1F84, 0x1F8C, 0x1F84 }, -{ 0x1F85, 0x1F8D, 0x1F85 }, -{ 0x1F86, 0x1F8E, 0x1F86 }, -{ 0x1F87, 0x1F8F, 0x1F87 }, -{ 0x1F88, 0x1F88, 0x1F80 }, -{ 0x1F89, 0x1F89, 0x1F81 }, -{ 0x1F8A, 0x1F8A, 0x1F82 }, -{ 0x1F8B, 0x1F8B, 0x1F83 }, -{ 0x1F8C, 0x1F8C, 0x1F84 }, -{ 0x1F8D, 0x1F8D, 0x1F85 }, -{ 0x1F8E, 0x1F8E, 0x1F86 }, -{ 0x1F8F, 0x1F8F, 0x1F87 }, -{ 0x1F90, 0x1F98, 0x1F90 }, -{ 0x1F91, 0x1F99, 0x1F91 }, -{ 0x1F92, 0x1F9A, 0x1F92 }, -{ 0x1F93, 0x1F9B, 0x1F93 }, -{ 0x1F94, 0x1F9C, 0x1F94 }, -{ 0x1F95, 0x1F9D, 0x1F95 }, -{ 0x1F96, 0x1F9E, 0x1F96 }, -{ 0x1F97, 0x1F9F, 0x1F97 }, -{ 0x1F98, 0x1F98, 0x1F90 }, -{ 0x1F99, 0x1F99, 0x1F91 }, -{ 0x1F9A, 0x1F9A, 0x1F92 }, -{ 0x1F9B, 0x1F9B, 0x1F93 }, -{ 0x1F9C, 0x1F9C, 0x1F94 }, -{ 0x1F9D, 0x1F9D, 0x1F95 }, -{ 0x1F9E, 0x1F9E, 0x1F96 }, -{ 0x1F9F, 0x1F9F, 0x1F97 }, -{ 0x1FA0, 0x1FA8, 0x1FA0 }, -{ 0x1FA1, 0x1FA9, 0x1FA1 }, -{ 0x1FA2, 0x1FAA, 0x1FA2 }, -{ 0x1FA3, 0x1FAB, 0x1FA3 }, -{ 0x1FA4, 0x1FAC, 0x1FA4 }, -{ 0x1FA5, 0x1FAD, 0x1FA5 }, -{ 0x1FA6, 0x1FAE, 0x1FA6 }, -{ 0x1FA7, 0x1FAF, 0x1FA7 }, -{ 0x1FA8, 0x1FA8, 0x1FA0 }, -{ 0x1FA9, 0x1FA9, 0x1FA1 }, -{ 0x1FAA, 0x1FAA, 0x1FA2 }, -{ 0x1FAB, 0x1FAB, 0x1FA3 }, -{ 0x1FAC, 0x1FAC, 0x1FA4 }, -{ 0x1FAD, 0x1FAD, 0x1FA5 }, -{ 0x1FAE, 0x1FAE, 0x1FA6 }, -{ 0x1FAF, 0x1FAF, 0x1FA7 }, -{ 0x1FB0, 0x1FB8, 0x1FB0 }, -{ 0x1FB1, 0x1FB9, 0x1FB1 }, -{ 0x1FB2, 0x1FB2, 0x1FB2 }, -{ 0x1FB3, 0x1FBC, 0x1FB3 }, -{ 0x1FB4, 0x1FB4, 0x1FB4 }, -{ 0x1FB6, 0x1FB6, 0x1FB6 }, -{ 0x1FB7, 0x1FB7, 0x1FB7 }, -{ 0x1FB8, 0x1FB8, 0x1FB0 }, -{ 0x1FB9, 0x1FB9, 0x1FB1 }, -{ 0x1FBA, 0x1FBA, 0x1F70 }, -{ 0x1FBB, 0x1FBB, 0x1F71 }, -{ 0x1FBC, 0x1FBC, 0x1FB3 }, -{ 0x1FBE, 0x0399, 0x1FBE }, -{ 0x1FC2, 0x1FC2, 0x1FC2 }, -{ 0x1FC3, 0x1FCC, 0x1FC3 }, -{ 0x1FC4, 0x1FC4, 0x1FC4 }, -{ 0x1FC6, 0x1FC6, 0x1FC6 }, -{ 0x1FC7, 0x1FC7, 0x1FC7 }, -{ 0x1FC8, 0x1FC8, 0x1F72 }, -{ 0x1FC9, 0x1FC9, 0x1F73 }, -{ 0x1FCA, 0x1FCA, 0x1F74 }, -{ 0x1FCB, 0x1FCB, 0x1F75 }, -{ 0x1FCC, 0x1FCC, 0x1FC3 }, -{ 0x1FD0, 0x1FD8, 0x1FD0 }, -{ 0x1FD1, 0x1FD9, 0x1FD1 }, -{ 0x1FD2, 0x1FD2, 0x1FD2 }, -{ 0x1FD3, 0x1FD3, 0x1FD3 }, -{ 0x1FD6, 0x1FD6, 0x1FD6 }, -{ 0x1FD7, 0x1FD7, 0x1FD7 }, -{ 0x1FD8, 0x1FD8, 0x1FD0 }, -{ 0x1FD9, 0x1FD9, 0x1FD1 }, -{ 0x1FDA, 0x1FDA, 0x1F76 }, -{ 0x1FDB, 0x1FDB, 0x1F77 }, -{ 0x1FE0, 0x1FE8, 0x1FE0 }, -{ 0x1FE1, 0x1FE9, 0x1FE1 }, -{ 0x1FE2, 0x1FE2, 0x1FE2 }, -{ 0x1FE3, 0x1FE3, 0x1FE3 }, -{ 0x1FE4, 0x1FE4, 0x1FE4 }, -{ 0x1FE5, 0x1FEC, 0x1FE5 }, -{ 0x1FE6, 0x1FE6, 0x1FE6 }, -{ 0x1FE7, 0x1FE7, 0x1FE7 }, -{ 0x1FE8, 0x1FE8, 0x1FE0 }, -{ 0x1FE9, 0x1FE9, 0x1FE1 }, -{ 0x1FEA, 0x1FEA, 0x1F7A }, -{ 0x1FEB, 0x1FEB, 0x1F7B }, -{ 0x1FEC, 0x1FEC, 0x1FE5 }, -{ 0x1FF2, 0x1FF2, 0x1FF2 }, -{ 0x1FF3, 0x1FFC, 0x1FF3 }, -{ 0x1FF4, 0x1FF4, 0x1FF4 }, -{ 0x1FF6, 0x1FF6, 0x1FF6 }, -{ 0x1FF7, 0x1FF7, 0x1FF7 }, -{ 0x1FF8, 0x1FF8, 0x1F78 }, -{ 0x1FF9, 0x1FF9, 0x1F79 }, -{ 0x1FFA, 0x1FFA, 0x1F7C }, -{ 0x1FFB, 0x1FFB, 0x1F7D }, -{ 0x1FFC, 0x1FFC, 0x1FF3 }, -{ 0x2071, 0x2071, 0x2071 }, -{ 0x207F, 0x207F, 0x207F }, -{ 0x2090, 0x2090, 0x2090 }, -{ 0x2091, 0x2091, 0x2091 }, -{ 0x2092, 0x2092, 0x2092 }, -{ 0x2093, 0x2093, 0x2093 }, -{ 0x2094, 0x2094, 0x2094 }, -{ 0x20D0, 0x20D0, 0x20D0 }, -{ 0x20D1, 0x20D1, 0x20D1 }, -{ 0x20D2, 0x20D2, 0x20D2 }, -{ 0x20D3, 0x20D3, 0x20D3 }, -{ 0x20D4, 0x20D4, 0x20D4 }, -{ 0x20D5, 0x20D5, 0x20D5 }, -{ 0x20D6, 0x20D6, 0x20D6 }, -{ 0x20D7, 0x20D7, 0x20D7 }, -{ 0x20D8, 0x20D8, 0x20D8 }, -{ 0x20D9, 0x20D9, 0x20D9 }, -{ 0x20DA, 0x20DA, 0x20DA }, -{ 0x20DB, 0x20DB, 0x20DB }, -{ 0x20DC, 0x20DC, 0x20DC }, -{ 0x20E1, 0x20E1, 0x20E1 }, -{ 0x20E5, 0x20E5, 0x20E5 }, -{ 0x20E6, 0x20E6, 0x20E6 }, -{ 0x20E7, 0x20E7, 0x20E7 }, -{ 0x20E8, 0x20E8, 0x20E8 }, -{ 0x20E9, 0x20E9, 0x20E9 }, -{ 0x20EA, 0x20EA, 0x20EA }, -{ 0x20EB, 0x20EB, 0x20EB }, -{ 0x2102, 0x2102, 0x2102 }, -{ 0x2107, 0x2107, 0x2107 }, -{ 0x210A, 0x210A, 0x210A }, -{ 0x210B, 0x210B, 0x210B }, -{ 0x210C, 0x210C, 0x210C }, -{ 0x210D, 0x210D, 0x210D }, -{ 0x210E, 0x210E, 0x210E }, -{ 0x210F, 0x210F, 0x210F }, -{ 0x2110, 0x2110, 0x2110 }, -{ 0x2111, 0x2111, 0x2111 }, -{ 0x2112, 0x2112, 0x2112 }, -{ 0x2113, 0x2113, 0x2113 }, -{ 0x2115, 0x2115, 0x2115 }, -{ 0x2119, 0x2119, 0x2119 }, -{ 0x211A, 0x211A, 0x211A }, -{ 0x211B, 0x211B, 0x211B }, -{ 0x211C, 0x211C, 0x211C }, -{ 0x211D, 0x211D, 0x211D }, -{ 0x2124, 0x2124, 0x2124 }, -{ 0x2126, 0x2126, 0x03C9 }, -{ 0x2128, 0x2128, 0x2128 }, -{ 0x212A, 0x212A, 0x006B }, -{ 0x212B, 0x212B, 0x00E5 }, -{ 0x212C, 0x212C, 0x212C }, -{ 0x212D, 0x212D, 0x212D }, -{ 0x212F, 0x212F, 0x212F }, -{ 0x2130, 0x2130, 0x2130 }, -{ 0x2131, 0x2131, 0x2131 }, -{ 0x2133, 0x2133, 0x2133 }, -{ 0x2134, 0x2134, 0x2134 }, -{ 0x2135, 0x2135, 0x2135 }, -{ 0x2136, 0x2136, 0x2136 }, -{ 0x2137, 0x2137, 0x2137 }, -{ 0x2138, 0x2138, 0x2138 }, -{ 0x2139, 0x2139, 0x2139 }, -{ 0x213C, 0x213C, 0x213C }, -{ 0x213D, 0x213D, 0x213D }, -{ 0x213E, 0x213E, 0x213E }, -{ 0x213F, 0x213F, 0x213F }, -{ 0x2145, 0x2145, 0x2145 }, -{ 0x2146, 0x2146, 0x2146 }, -{ 0x2147, 0x2147, 0x2147 }, -{ 0x2148, 0x2148, 0x2148 }, -{ 0x2149, 0x2149, 0x2149 }, -{ 0x2C00, 0x2C00, 0x2C30 }, -{ 0x2C01, 0x2C01, 0x2C31 }, -{ 0x2C02, 0x2C02, 0x2C32 }, -{ 0x2C03, 0x2C03, 0x2C33 }, -{ 0x2C04, 0x2C04, 0x2C34 }, -{ 0x2C05, 0x2C05, 0x2C35 }, -{ 0x2C06, 0x2C06, 0x2C36 }, -{ 0x2C07, 0x2C07, 0x2C37 }, -{ 0x2C08, 0x2C08, 0x2C38 }, -{ 0x2C09, 0x2C09, 0x2C39 }, -{ 0x2C0A, 0x2C0A, 0x2C3A }, -{ 0x2C0B, 0x2C0B, 0x2C3B }, -{ 0x2C0C, 0x2C0C, 0x2C3C }, -{ 0x2C0D, 0x2C0D, 0x2C3D }, -{ 0x2C0E, 0x2C0E, 0x2C3E }, -{ 0x2C0F, 0x2C0F, 0x2C3F }, -{ 0x2C10, 0x2C10, 0x2C40 }, -{ 0x2C11, 0x2C11, 0x2C41 }, -{ 0x2C12, 0x2C12, 0x2C42 }, -{ 0x2C13, 0x2C13, 0x2C43 }, -{ 0x2C14, 0x2C14, 0x2C44 }, -{ 0x2C15, 0x2C15, 0x2C45 }, -{ 0x2C16, 0x2C16, 0x2C46 }, -{ 0x2C17, 0x2C17, 0x2C47 }, -{ 0x2C18, 0x2C18, 0x2C48 }, -{ 0x2C19, 0x2C19, 0x2C49 }, -{ 0x2C1A, 0x2C1A, 0x2C4A }, -{ 0x2C1B, 0x2C1B, 0x2C4B }, -{ 0x2C1C, 0x2C1C, 0x2C4C }, -{ 0x2C1D, 0x2C1D, 0x2C4D }, -{ 0x2C1E, 0x2C1E, 0x2C4E }, -{ 0x2C1F, 0x2C1F, 0x2C4F }, -{ 0x2C20, 0x2C20, 0x2C50 }, -{ 0x2C21, 0x2C21, 0x2C51 }, -{ 0x2C22, 0x2C22, 0x2C52 }, -{ 0x2C23, 0x2C23, 0x2C53 }, -{ 0x2C24, 0x2C24, 0x2C54 }, -{ 0x2C25, 0x2C25, 0x2C55 }, -{ 0x2C26, 0x2C26, 0x2C56 }, -{ 0x2C27, 0x2C27, 0x2C57 }, -{ 0x2C28, 0x2C28, 0x2C58 }, -{ 0x2C29, 0x2C29, 0x2C59 }, -{ 0x2C2A, 0x2C2A, 0x2C5A }, -{ 0x2C2B, 0x2C2B, 0x2C5B }, -{ 0x2C2C, 0x2C2C, 0x2C5C }, -{ 0x2C2D, 0x2C2D, 0x2C5D }, -{ 0x2C2E, 0x2C2E, 0x2C5E }, -{ 0x2C30, 0x2C00, 0x2C30 }, -{ 0x2C31, 0x2C01, 0x2C31 }, -{ 0x2C32, 0x2C02, 0x2C32 }, -{ 0x2C33, 0x2C03, 0x2C33 }, -{ 0x2C34, 0x2C04, 0x2C34 }, -{ 0x2C35, 0x2C05, 0x2C35 }, -{ 0x2C36, 0x2C06, 0x2C36 }, -{ 0x2C37, 0x2C07, 0x2C37 }, -{ 0x2C38, 0x2C08, 0x2C38 }, -{ 0x2C39, 0x2C09, 0x2C39 }, -{ 0x2C3A, 0x2C0A, 0x2C3A }, -{ 0x2C3B, 0x2C0B, 0x2C3B }, -{ 0x2C3C, 0x2C0C, 0x2C3C }, -{ 0x2C3D, 0x2C0D, 0x2C3D }, -{ 0x2C3E, 0x2C0E, 0x2C3E }, -{ 0x2C3F, 0x2C0F, 0x2C3F }, -{ 0x2C40, 0x2C10, 0x2C40 }, -{ 0x2C41, 0x2C11, 0x2C41 }, -{ 0x2C42, 0x2C12, 0x2C42 }, -{ 0x2C43, 0x2C13, 0x2C43 }, -{ 0x2C44, 0x2C14, 0x2C44 }, -{ 0x2C45, 0x2C15, 0x2C45 }, -{ 0x2C46, 0x2C16, 0x2C46 }, -{ 0x2C47, 0x2C17, 0x2C47 }, -{ 0x2C48, 0x2C18, 0x2C48 }, -{ 0x2C49, 0x2C19, 0x2C49 }, -{ 0x2C4A, 0x2C1A, 0x2C4A }, -{ 0x2C4B, 0x2C1B, 0x2C4B }, -{ 0x2C4C, 0x2C1C, 0x2C4C }, -{ 0x2C4D, 0x2C1D, 0x2C4D }, -{ 0x2C4E, 0x2C1E, 0x2C4E }, -{ 0x2C4F, 0x2C1F, 0x2C4F }, -{ 0x2C50, 0x2C20, 0x2C50 }, -{ 0x2C51, 0x2C21, 0x2C51 }, -{ 0x2C52, 0x2C22, 0x2C52 }, -{ 0x2C53, 0x2C23, 0x2C53 }, -{ 0x2C54, 0x2C24, 0x2C54 }, -{ 0x2C55, 0x2C25, 0x2C55 }, -{ 0x2C56, 0x2C26, 0x2C56 }, -{ 0x2C57, 0x2C27, 0x2C57 }, -{ 0x2C58, 0x2C28, 0x2C58 }, -{ 0x2C59, 0x2C29, 0x2C59 }, -{ 0x2C5A, 0x2C2A, 0x2C5A }, -{ 0x2C5B, 0x2C2B, 0x2C5B }, -{ 0x2C5C, 0x2C2C, 0x2C5C }, -{ 0x2C5D, 0x2C2D, 0x2C5D }, -{ 0x2C5E, 0x2C2E, 0x2C5E }, -{ 0x2C80, 0x2C80, 0x2C81 }, -{ 0x2C81, 0x2C80, 0x2C81 }, -{ 0x2C82, 0x2C82, 0x2C83 }, -{ 0x2C83, 0x2C82, 0x2C83 }, -{ 0x2C84, 0x2C84, 0x2C85 }, -{ 0x2C85, 0x2C84, 0x2C85 }, -{ 0x2C86, 0x2C86, 0x2C87 }, -{ 0x2C87, 0x2C86, 0x2C87 }, -{ 0x2C88, 0x2C88, 0x2C89 }, -{ 0x2C89, 0x2C88, 0x2C89 }, -{ 0x2C8A, 0x2C8A, 0x2C8B }, -{ 0x2C8B, 0x2C8A, 0x2C8B }, -{ 0x2C8C, 0x2C8C, 0x2C8D }, -{ 0x2C8D, 0x2C8C, 0x2C8D }, -{ 0x2C8E, 0x2C8E, 0x2C8F }, -{ 0x2C8F, 0x2C8E, 0x2C8F }, -{ 0x2C90, 0x2C90, 0x2C91 }, -{ 0x2C91, 0x2C90, 0x2C91 }, -{ 0x2C92, 0x2C92, 0x2C93 }, -{ 0x2C93, 0x2C92, 0x2C93 }, -{ 0x2C94, 0x2C94, 0x2C95 }, -{ 0x2C95, 0x2C94, 0x2C95 }, -{ 0x2C96, 0x2C96, 0x2C97 }, -{ 0x2C97, 0x2C96, 0x2C97 }, -{ 0x2C98, 0x2C98, 0x2C99 }, -{ 0x2C99, 0x2C98, 0x2C99 }, -{ 0x2C9A, 0x2C9A, 0x2C9B }, -{ 0x2C9B, 0x2C9A, 0x2C9B }, -{ 0x2C9C, 0x2C9C, 0x2C9D }, -{ 0x2C9D, 0x2C9C, 0x2C9D }, -{ 0x2C9E, 0x2C9E, 0x2C9F }, -{ 0x2C9F, 0x2C9E, 0x2C9F }, -{ 0x2CA0, 0x2CA0, 0x2CA1 }, -{ 0x2CA1, 0x2CA0, 0x2CA1 }, -{ 0x2CA2, 0x2CA2, 0x2CA3 }, -{ 0x2CA3, 0x2CA2, 0x2CA3 }, -{ 0x2CA4, 0x2CA4, 0x2CA5 }, -{ 0x2CA5, 0x2CA4, 0x2CA5 }, -{ 0x2CA6, 0x2CA6, 0x2CA7 }, -{ 0x2CA7, 0x2CA6, 0x2CA7 }, -{ 0x2CA8, 0x2CA8, 0x2CA9 }, -{ 0x2CA9, 0x2CA8, 0x2CA9 }, -{ 0x2CAA, 0x2CAA, 0x2CAB }, -{ 0x2CAB, 0x2CAA, 0x2CAB }, -{ 0x2CAC, 0x2CAC, 0x2CAD }, -{ 0x2CAD, 0x2CAC, 0x2CAD }, -{ 0x2CAE, 0x2CAE, 0x2CAF }, -{ 0x2CAF, 0x2CAE, 0x2CAF }, -{ 0x2CB0, 0x2CB0, 0x2CB1 }, -{ 0x2CB1, 0x2CB0, 0x2CB1 }, -{ 0x2CB2, 0x2CB2, 0x2CB3 }, -{ 0x2CB3, 0x2CB2, 0x2CB3 }, -{ 0x2CB4, 0x2CB4, 0x2CB5 }, -{ 0x2CB5, 0x2CB4, 0x2CB5 }, -{ 0x2CB6, 0x2CB6, 0x2CB7 }, -{ 0x2CB7, 0x2CB6, 0x2CB7 }, -{ 0x2CB8, 0x2CB8, 0x2CB9 }, -{ 0x2CB9, 0x2CB8, 0x2CB9 }, -{ 0x2CBA, 0x2CBA, 0x2CBB }, -{ 0x2CBB, 0x2CBA, 0x2CBB }, -{ 0x2CBC, 0x2CBC, 0x2CBD }, -{ 0x2CBD, 0x2CBC, 0x2CBD }, -{ 0x2CBE, 0x2CBE, 0x2CBF }, -{ 0x2CBF, 0x2CBE, 0x2CBF }, -{ 0x2CC0, 0x2CC0, 0x2CC1 }, -{ 0x2CC1, 0x2CC0, 0x2CC1 }, -{ 0x2CC2, 0x2CC2, 0x2CC3 }, -{ 0x2CC3, 0x2CC2, 0x2CC3 }, -{ 0x2CC4, 0x2CC4, 0x2CC5 }, -{ 0x2CC5, 0x2CC4, 0x2CC5 }, -{ 0x2CC6, 0x2CC6, 0x2CC7 }, -{ 0x2CC7, 0x2CC6, 0x2CC7 }, -{ 0x2CC8, 0x2CC8, 0x2CC9 }, -{ 0x2CC9, 0x2CC8, 0x2CC9 }, -{ 0x2CCA, 0x2CCA, 0x2CCB }, -{ 0x2CCB, 0x2CCA, 0x2CCB }, -{ 0x2CCC, 0x2CCC, 0x2CCD }, -{ 0x2CCD, 0x2CCC, 0x2CCD }, -{ 0x2CCE, 0x2CCE, 0x2CCF }, -{ 0x2CCF, 0x2CCE, 0x2CCF }, -{ 0x2CD0, 0x2CD0, 0x2CD1 }, -{ 0x2CD1, 0x2CD0, 0x2CD1 }, -{ 0x2CD2, 0x2CD2, 0x2CD3 }, -{ 0x2CD3, 0x2CD2, 0x2CD3 }, -{ 0x2CD4, 0x2CD4, 0x2CD5 }, -{ 0x2CD5, 0x2CD4, 0x2CD5 }, -{ 0x2CD6, 0x2CD6, 0x2CD7 }, -{ 0x2CD7, 0x2CD6, 0x2CD7 }, -{ 0x2CD8, 0x2CD8, 0x2CD9 }, -{ 0x2CD9, 0x2CD8, 0x2CD9 }, -{ 0x2CDA, 0x2CDA, 0x2CDB }, -{ 0x2CDB, 0x2CDA, 0x2CDB }, -{ 0x2CDC, 0x2CDC, 0x2CDD }, -{ 0x2CDD, 0x2CDC, 0x2CDD }, -{ 0x2CDE, 0x2CDE, 0x2CDF }, -{ 0x2CDF, 0x2CDE, 0x2CDF }, -{ 0x2CE0, 0x2CE0, 0x2CE1 }, -{ 0x2CE1, 0x2CE0, 0x2CE1 }, -{ 0x2CE2, 0x2CE2, 0x2CE3 }, -{ 0x2CE3, 0x2CE2, 0x2CE3 }, -{ 0x2CE4, 0x2CE4, 0x2CE4 }, -{ 0x2D00, 0x10A0, 0x2D00 }, -{ 0x2D01, 0x10A1, 0x2D01 }, -{ 0x2D02, 0x10A2, 0x2D02 }, -{ 0x2D03, 0x10A3, 0x2D03 }, -{ 0x2D04, 0x10A4, 0x2D04 }, -{ 0x2D05, 0x10A5, 0x2D05 }, -{ 0x2D06, 0x10A6, 0x2D06 }, -{ 0x2D07, 0x10A7, 0x2D07 }, -{ 0x2D08, 0x10A8, 0x2D08 }, -{ 0x2D09, 0x10A9, 0x2D09 }, -{ 0x2D0A, 0x10AA, 0x2D0A }, -{ 0x2D0B, 0x10AB, 0x2D0B }, -{ 0x2D0C, 0x10AC, 0x2D0C }, -{ 0x2D0D, 0x10AD, 0x2D0D }, -{ 0x2D0E, 0x10AE, 0x2D0E }, -{ 0x2D0F, 0x10AF, 0x2D0F }, -{ 0x2D10, 0x10B0, 0x2D10 }, -{ 0x2D11, 0x10B1, 0x2D11 }, -{ 0x2D12, 0x10B2, 0x2D12 }, -{ 0x2D13, 0x10B3, 0x2D13 }, -{ 0x2D14, 0x10B4, 0x2D14 }, -{ 0x2D15, 0x10B5, 0x2D15 }, -{ 0x2D16, 0x10B6, 0x2D16 }, -{ 0x2D17, 0x10B7, 0x2D17 }, -{ 0x2D18, 0x10B8, 0x2D18 }, -{ 0x2D19, 0x10B9, 0x2D19 }, -{ 0x2D1A, 0x10BA, 0x2D1A }, -{ 0x2D1B, 0x10BB, 0x2D1B }, -{ 0x2D1C, 0x10BC, 0x2D1C }, -{ 0x2D1D, 0x10BD, 0x2D1D }, -{ 0x2D1E, 0x10BE, 0x2D1E }, -{ 0x2D1F, 0x10BF, 0x2D1F }, -{ 0x2D20, 0x10C0, 0x2D20 }, -{ 0x2D21, 0x10C1, 0x2D21 }, -{ 0x2D22, 0x10C2, 0x2D22 }, -{ 0x2D23, 0x10C3, 0x2D23 }, -{ 0x2D24, 0x10C4, 0x2D24 }, -{ 0x2D25, 0x10C5, 0x2D25 }, -{ 0x2D30, 0x2D30, 0x2D30 }, -{ 0x2D31, 0x2D31, 0x2D31 }, -{ 0x2D32, 0x2D32, 0x2D32 }, -{ 0x2D33, 0x2D33, 0x2D33 }, -{ 0x2D34, 0x2D34, 0x2D34 }, -{ 0x2D35, 0x2D35, 0x2D35 }, -{ 0x2D36, 0x2D36, 0x2D36 }, -{ 0x2D37, 0x2D37, 0x2D37 }, -{ 0x2D38, 0x2D38, 0x2D38 }, -{ 0x2D39, 0x2D39, 0x2D39 }, -{ 0x2D3A, 0x2D3A, 0x2D3A }, -{ 0x2D3B, 0x2D3B, 0x2D3B }, -{ 0x2D3C, 0x2D3C, 0x2D3C }, -{ 0x2D3D, 0x2D3D, 0x2D3D }, -{ 0x2D3E, 0x2D3E, 0x2D3E }, -{ 0x2D3F, 0x2D3F, 0x2D3F }, -{ 0x2D40, 0x2D40, 0x2D40 }, -{ 0x2D41, 0x2D41, 0x2D41 }, -{ 0x2D42, 0x2D42, 0x2D42 }, -{ 0x2D43, 0x2D43, 0x2D43 }, -{ 0x2D44, 0x2D44, 0x2D44 }, -{ 0x2D45, 0x2D45, 0x2D45 }, -{ 0x2D46, 0x2D46, 0x2D46 }, -{ 0x2D47, 0x2D47, 0x2D47 }, -{ 0x2D48, 0x2D48, 0x2D48 }, -{ 0x2D49, 0x2D49, 0x2D49 }, -{ 0x2D4A, 0x2D4A, 0x2D4A }, -{ 0x2D4B, 0x2D4B, 0x2D4B }, -{ 0x2D4C, 0x2D4C, 0x2D4C }, -{ 0x2D4D, 0x2D4D, 0x2D4D }, -{ 0x2D4E, 0x2D4E, 0x2D4E }, -{ 0x2D4F, 0x2D4F, 0x2D4F }, -{ 0x2D50, 0x2D50, 0x2D50 }, -{ 0x2D51, 0x2D51, 0x2D51 }, -{ 0x2D52, 0x2D52, 0x2D52 }, -{ 0x2D53, 0x2D53, 0x2D53 }, -{ 0x2D54, 0x2D54, 0x2D54 }, -{ 0x2D55, 0x2D55, 0x2D55 }, -{ 0x2D56, 0x2D56, 0x2D56 }, -{ 0x2D57, 0x2D57, 0x2D57 }, -{ 0x2D58, 0x2D58, 0x2D58 }, -{ 0x2D59, 0x2D59, 0x2D59 }, -{ 0x2D5A, 0x2D5A, 0x2D5A }, -{ 0x2D5B, 0x2D5B, 0x2D5B }, -{ 0x2D5C, 0x2D5C, 0x2D5C }, -{ 0x2D5D, 0x2D5D, 0x2D5D }, -{ 0x2D5E, 0x2D5E, 0x2D5E }, -{ 0x2D5F, 0x2D5F, 0x2D5F }, -{ 0x2D60, 0x2D60, 0x2D60 }, -{ 0x2D61, 0x2D61, 0x2D61 }, -{ 0x2D62, 0x2D62, 0x2D62 }, -{ 0x2D63, 0x2D63, 0x2D63 }, -{ 0x2D64, 0x2D64, 0x2D64 }, -{ 0x2D65, 0x2D65, 0x2D65 }, -{ 0x2D6F, 0x2D6F, 0x2D6F }, -{ 0x2D80, 0x2D80, 0x2D80 }, -{ 0x2D81, 0x2D81, 0x2D81 }, -{ 0x2D82, 0x2D82, 0x2D82 }, -{ 0x2D83, 0x2D83, 0x2D83 }, -{ 0x2D84, 0x2D84, 0x2D84 }, -{ 0x2D85, 0x2D85, 0x2D85 }, -{ 0x2D86, 0x2D86, 0x2D86 }, -{ 0x2D87, 0x2D87, 0x2D87 }, -{ 0x2D88, 0x2D88, 0x2D88 }, -{ 0x2D89, 0x2D89, 0x2D89 }, -{ 0x2D8A, 0x2D8A, 0x2D8A }, -{ 0x2D8B, 0x2D8B, 0x2D8B }, -{ 0x2D8C, 0x2D8C, 0x2D8C }, -{ 0x2D8D, 0x2D8D, 0x2D8D }, -{ 0x2D8E, 0x2D8E, 0x2D8E }, -{ 0x2D8F, 0x2D8F, 0x2D8F }, -{ 0x2D90, 0x2D90, 0x2D90 }, -{ 0x2D91, 0x2D91, 0x2D91 }, -{ 0x2D92, 0x2D92, 0x2D92 }, -{ 0x2D93, 0x2D93, 0x2D93 }, -{ 0x2D94, 0x2D94, 0x2D94 }, -{ 0x2D95, 0x2D95, 0x2D95 }, -{ 0x2D96, 0x2D96, 0x2D96 }, -{ 0x2DA0, 0x2DA0, 0x2DA0 }, -{ 0x2DA1, 0x2DA1, 0x2DA1 }, -{ 0x2DA2, 0x2DA2, 0x2DA2 }, -{ 0x2DA3, 0x2DA3, 0x2DA3 }, -{ 0x2DA4, 0x2DA4, 0x2DA4 }, -{ 0x2DA5, 0x2DA5, 0x2DA5 }, -{ 0x2DA6, 0x2DA6, 0x2DA6 }, -{ 0x2DA8, 0x2DA8, 0x2DA8 }, -{ 0x2DA9, 0x2DA9, 0x2DA9 }, -{ 0x2DAA, 0x2DAA, 0x2DAA }, -{ 0x2DAB, 0x2DAB, 0x2DAB }, -{ 0x2DAC, 0x2DAC, 0x2DAC }, -{ 0x2DAD, 0x2DAD, 0x2DAD }, -{ 0x2DAE, 0x2DAE, 0x2DAE }, -{ 0x2DB0, 0x2DB0, 0x2DB0 }, -{ 0x2DB1, 0x2DB1, 0x2DB1 }, -{ 0x2DB2, 0x2DB2, 0x2DB2 }, -{ 0x2DB3, 0x2DB3, 0x2DB3 }, -{ 0x2DB4, 0x2DB4, 0x2DB4 }, -{ 0x2DB5, 0x2DB5, 0x2DB5 }, -{ 0x2DB6, 0x2DB6, 0x2DB6 }, -{ 0x2DB8, 0x2DB8, 0x2DB8 }, -{ 0x2DB9, 0x2DB9, 0x2DB9 }, -{ 0x2DBA, 0x2DBA, 0x2DBA }, -{ 0x2DBB, 0x2DBB, 0x2DBB }, -{ 0x2DBC, 0x2DBC, 0x2DBC }, -{ 0x2DBD, 0x2DBD, 0x2DBD }, -{ 0x2DBE, 0x2DBE, 0x2DBE }, -{ 0x2DC0, 0x2DC0, 0x2DC0 }, -{ 0x2DC1, 0x2DC1, 0x2DC1 }, -{ 0x2DC2, 0x2DC2, 0x2DC2 }, -{ 0x2DC3, 0x2DC3, 0x2DC3 }, -{ 0x2DC4, 0x2DC4, 0x2DC4 }, -{ 0x2DC5, 0x2DC5, 0x2DC5 }, -{ 0x2DC6, 0x2DC6, 0x2DC6 }, -{ 0x2DC8, 0x2DC8, 0x2DC8 }, -{ 0x2DC9, 0x2DC9, 0x2DC9 }, -{ 0x2DCA, 0x2DCA, 0x2DCA }, -{ 0x2DCB, 0x2DCB, 0x2DCB }, -{ 0x2DCC, 0x2DCC, 0x2DCC }, -{ 0x2DCD, 0x2DCD, 0x2DCD }, -{ 0x2DCE, 0x2DCE, 0x2DCE }, -{ 0x2DD0, 0x2DD0, 0x2DD0 }, -{ 0x2DD1, 0x2DD1, 0x2DD1 }, -{ 0x2DD2, 0x2DD2, 0x2DD2 }, -{ 0x2DD3, 0x2DD3, 0x2DD3 }, -{ 0x2DD4, 0x2DD4, 0x2DD4 }, -{ 0x2DD5, 0x2DD5, 0x2DD5 }, -{ 0x2DD6, 0x2DD6, 0x2DD6 }, -{ 0x2DD8, 0x2DD8, 0x2DD8 }, -{ 0x2DD9, 0x2DD9, 0x2DD9 }, -{ 0x2DDA, 0x2DDA, 0x2DDA }, -{ 0x2DDB, 0x2DDB, 0x2DDB }, -{ 0x2DDC, 0x2DDC, 0x2DDC }, -{ 0x2DDD, 0x2DDD, 0x2DDD }, -{ 0x2DDE, 0x2DDE, 0x2DDE }, -{ 0x3005, 0x3005, 0x3005 }, -{ 0x3006, 0x3006, 0x3006 }, -{ 0x302A, 0x302A, 0x302A }, -{ 0x302B, 0x302B, 0x302B }, -{ 0x302C, 0x302C, 0x302C }, -{ 0x302D, 0x302D, 0x302D }, -{ 0x302E, 0x302E, 0x302E }, -{ 0x302F, 0x302F, 0x302F }, -{ 0x3031, 0x3031, 0x3031 }, -{ 0x3032, 0x3032, 0x3032 }, -{ 0x3033, 0x3033, 0x3033 }, -{ 0x3034, 0x3034, 0x3034 }, -{ 0x3035, 0x3035, 0x3035 }, -{ 0x303B, 0x303B, 0x303B }, -{ 0x303C, 0x303C, 0x303C }, -{ 0x3041, 0x3041, 0x3041 }, -{ 0x3042, 0x3042, 0x3042 }, -{ 0x3043, 0x3043, 0x3043 }, -{ 0x3044, 0x3044, 0x3044 }, -{ 0x3045, 0x3045, 0x3045 }, -{ 0x3046, 0x3046, 0x3046 }, -{ 0x3047, 0x3047, 0x3047 }, -{ 0x3048, 0x3048, 0x3048 }, -{ 0x3049, 0x3049, 0x3049 }, -{ 0x304A, 0x304A, 0x304A }, -{ 0x304B, 0x304B, 0x304B }, -{ 0x304C, 0x304C, 0x304C }, -{ 0x304D, 0x304D, 0x304D }, -{ 0x304E, 0x304E, 0x304E }, -{ 0x304F, 0x304F, 0x304F }, -{ 0x3050, 0x3050, 0x3050 }, -{ 0x3051, 0x3051, 0x3051 }, -{ 0x3052, 0x3052, 0x3052 }, -{ 0x3053, 0x3053, 0x3053 }, -{ 0x3054, 0x3054, 0x3054 }, -{ 0x3055, 0x3055, 0x3055 }, -{ 0x3056, 0x3056, 0x3056 }, -{ 0x3057, 0x3057, 0x3057 }, -{ 0x3058, 0x3058, 0x3058 }, -{ 0x3059, 0x3059, 0x3059 }, -{ 0x305A, 0x305A, 0x305A }, -{ 0x305B, 0x305B, 0x305B }, -{ 0x305C, 0x305C, 0x305C }, -{ 0x305D, 0x305D, 0x305D }, -{ 0x305E, 0x305E, 0x305E }, -{ 0x305F, 0x305F, 0x305F }, -{ 0x3060, 0x3060, 0x3060 }, -{ 0x3061, 0x3061, 0x3061 }, -{ 0x3062, 0x3062, 0x3062 }, -{ 0x3063, 0x3063, 0x3063 }, -{ 0x3064, 0x3064, 0x3064 }, -{ 0x3065, 0x3065, 0x3065 }, -{ 0x3066, 0x3066, 0x3066 }, -{ 0x3067, 0x3067, 0x3067 }, -{ 0x3068, 0x3068, 0x3068 }, -{ 0x3069, 0x3069, 0x3069 }, -{ 0x306A, 0x306A, 0x306A }, -{ 0x306B, 0x306B, 0x306B }, -{ 0x306C, 0x306C, 0x306C }, -{ 0x306D, 0x306D, 0x306D }, -{ 0x306E, 0x306E, 0x306E }, -{ 0x306F, 0x306F, 0x306F }, -{ 0x3070, 0x3070, 0x3070 }, -{ 0x3071, 0x3071, 0x3071 }, -{ 0x3072, 0x3072, 0x3072 }, -{ 0x3073, 0x3073, 0x3073 }, -{ 0x3074, 0x3074, 0x3074 }, -{ 0x3075, 0x3075, 0x3075 }, -{ 0x3076, 0x3076, 0x3076 }, -{ 0x3077, 0x3077, 0x3077 }, -{ 0x3078, 0x3078, 0x3078 }, -{ 0x3079, 0x3079, 0x3079 }, -{ 0x307A, 0x307A, 0x307A }, -{ 0x307B, 0x307B, 0x307B }, -{ 0x307C, 0x307C, 0x307C }, -{ 0x307D, 0x307D, 0x307D }, -{ 0x307E, 0x307E, 0x307E }, -{ 0x307F, 0x307F, 0x307F }, -{ 0x3080, 0x3080, 0x3080 }, -{ 0x3081, 0x3081, 0x3081 }, -{ 0x3082, 0x3082, 0x3082 }, -{ 0x3083, 0x3083, 0x3083 }, -{ 0x3084, 0x3084, 0x3084 }, -{ 0x3085, 0x3085, 0x3085 }, -{ 0x3086, 0x3086, 0x3086 }, -{ 0x3087, 0x3087, 0x3087 }, -{ 0x3088, 0x3088, 0x3088 }, -{ 0x3089, 0x3089, 0x3089 }, -{ 0x308A, 0x308A, 0x308A }, -{ 0x308B, 0x308B, 0x308B }, -{ 0x308C, 0x308C, 0x308C }, -{ 0x308D, 0x308D, 0x308D }, -{ 0x308E, 0x308E, 0x308E }, -{ 0x308F, 0x308F, 0x308F }, -{ 0x3090, 0x3090, 0x3090 }, -{ 0x3091, 0x3091, 0x3091 }, -{ 0x3092, 0x3092, 0x3092 }, -{ 0x3093, 0x3093, 0x3093 }, -{ 0x3094, 0x3094, 0x3094 }, -{ 0x3095, 0x3095, 0x3095 }, -{ 0x3096, 0x3096, 0x3096 }, -{ 0x3099, 0x3099, 0x3099 }, -{ 0x309A, 0x309A, 0x309A }, -{ 0x309D, 0x309D, 0x309D }, -{ 0x309E, 0x309E, 0x309E }, -{ 0x309F, 0x309F, 0x309F }, -{ 0x30A1, 0x30A1, 0x30A1 }, -{ 0x30A2, 0x30A2, 0x30A2 }, -{ 0x30A3, 0x30A3, 0x30A3 }, -{ 0x30A4, 0x30A4, 0x30A4 }, -{ 0x30A5, 0x30A5, 0x30A5 }, -{ 0x30A6, 0x30A6, 0x30A6 }, -{ 0x30A7, 0x30A7, 0x30A7 }, -{ 0x30A8, 0x30A8, 0x30A8 }, -{ 0x30A9, 0x30A9, 0x30A9 }, -{ 0x30AA, 0x30AA, 0x30AA }, -{ 0x30AB, 0x30AB, 0x30AB }, -{ 0x30AC, 0x30AC, 0x30AC }, -{ 0x30AD, 0x30AD, 0x30AD }, -{ 0x30AE, 0x30AE, 0x30AE }, -{ 0x30AF, 0x30AF, 0x30AF }, -{ 0x30B0, 0x30B0, 0x30B0 }, -{ 0x30B1, 0x30B1, 0x30B1 }, -{ 0x30B2, 0x30B2, 0x30B2 }, -{ 0x30B3, 0x30B3, 0x30B3 }, -{ 0x30B4, 0x30B4, 0x30B4 }, -{ 0x30B5, 0x30B5, 0x30B5 }, -{ 0x30B6, 0x30B6, 0x30B6 }, -{ 0x30B7, 0x30B7, 0x30B7 }, -{ 0x30B8, 0x30B8, 0x30B8 }, -{ 0x30B9, 0x30B9, 0x30B9 }, -{ 0x30BA, 0x30BA, 0x30BA }, -{ 0x30BB, 0x30BB, 0x30BB }, -{ 0x30BC, 0x30BC, 0x30BC }, -{ 0x30BD, 0x30BD, 0x30BD }, -{ 0x30BE, 0x30BE, 0x30BE }, -{ 0x30BF, 0x30BF, 0x30BF }, -{ 0x30C0, 0x30C0, 0x30C0 }, -{ 0x30C1, 0x30C1, 0x30C1 }, -{ 0x30C2, 0x30C2, 0x30C2 }, -{ 0x30C3, 0x30C3, 0x30C3 }, -{ 0x30C4, 0x30C4, 0x30C4 }, -{ 0x30C5, 0x30C5, 0x30C5 }, -{ 0x30C6, 0x30C6, 0x30C6 }, -{ 0x30C7, 0x30C7, 0x30C7 }, -{ 0x30C8, 0x30C8, 0x30C8 }, -{ 0x30C9, 0x30C9, 0x30C9 }, -{ 0x30CA, 0x30CA, 0x30CA }, -{ 0x30CB, 0x30CB, 0x30CB }, -{ 0x30CC, 0x30CC, 0x30CC }, -{ 0x30CD, 0x30CD, 0x30CD }, -{ 0x30CE, 0x30CE, 0x30CE }, -{ 0x30CF, 0x30CF, 0x30CF }, -{ 0x30D0, 0x30D0, 0x30D0 }, -{ 0x30D1, 0x30D1, 0x30D1 }, -{ 0x30D2, 0x30D2, 0x30D2 }, -{ 0x30D3, 0x30D3, 0x30D3 }, -{ 0x30D4, 0x30D4, 0x30D4 }, -{ 0x30D5, 0x30D5, 0x30D5 }, -{ 0x30D6, 0x30D6, 0x30D6 }, -{ 0x30D7, 0x30D7, 0x30D7 }, -{ 0x30D8, 0x30D8, 0x30D8 }, -{ 0x30D9, 0x30D9, 0x30D9 }, -{ 0x30DA, 0x30DA, 0x30DA }, -{ 0x30DB, 0x30DB, 0x30DB }, -{ 0x30DC, 0x30DC, 0x30DC }, -{ 0x30DD, 0x30DD, 0x30DD }, -{ 0x30DE, 0x30DE, 0x30DE }, -{ 0x30DF, 0x30DF, 0x30DF }, -{ 0x30E0, 0x30E0, 0x30E0 }, -{ 0x30E1, 0x30E1, 0x30E1 }, -{ 0x30E2, 0x30E2, 0x30E2 }, -{ 0x30E3, 0x30E3, 0x30E3 }, -{ 0x30E4, 0x30E4, 0x30E4 }, -{ 0x30E5, 0x30E5, 0x30E5 }, -{ 0x30E6, 0x30E6, 0x30E6 }, -{ 0x30E7, 0x30E7, 0x30E7 }, -{ 0x30E8, 0x30E8, 0x30E8 }, -{ 0x30E9, 0x30E9, 0x30E9 }, -{ 0x30EA, 0x30EA, 0x30EA }, -{ 0x30EB, 0x30EB, 0x30EB }, -{ 0x30EC, 0x30EC, 0x30EC }, -{ 0x30ED, 0x30ED, 0x30ED }, -{ 0x30EE, 0x30EE, 0x30EE }, -{ 0x30EF, 0x30EF, 0x30EF }, -{ 0x30F0, 0x30F0, 0x30F0 }, -{ 0x30F1, 0x30F1, 0x30F1 }, -{ 0x30F2, 0x30F2, 0x30F2 }, -{ 0x30F3, 0x30F3, 0x30F3 }, -{ 0x30F4, 0x30F4, 0x30F4 }, -{ 0x30F5, 0x30F5, 0x30F5 }, -{ 0x30F6, 0x30F6, 0x30F6 }, -{ 0x30F7, 0x30F7, 0x30F7 }, -{ 0x30F8, 0x30F8, 0x30F8 }, -{ 0x30F9, 0x30F9, 0x30F9 }, -{ 0x30FA, 0x30FA, 0x30FA }, -{ 0x30FC, 0x30FC, 0x30FC }, -{ 0x30FD, 0x30FD, 0x30FD }, -{ 0x30FE, 0x30FE, 0x30FE }, -{ 0x30FF, 0x30FF, 0x30FF }, -{ 0x3105, 0x3105, 0x3105 }, -{ 0x3106, 0x3106, 0x3106 }, -{ 0x3107, 0x3107, 0x3107 }, -{ 0x3108, 0x3108, 0x3108 }, -{ 0x3109, 0x3109, 0x3109 }, -{ 0x310A, 0x310A, 0x310A }, -{ 0x310B, 0x310B, 0x310B }, -{ 0x310C, 0x310C, 0x310C }, -{ 0x310D, 0x310D, 0x310D }, -{ 0x310E, 0x310E, 0x310E }, -{ 0x310F, 0x310F, 0x310F }, -{ 0x3110, 0x3110, 0x3110 }, -{ 0x3111, 0x3111, 0x3111 }, -{ 0x3112, 0x3112, 0x3112 }, -{ 0x3113, 0x3113, 0x3113 }, -{ 0x3114, 0x3114, 0x3114 }, -{ 0x3115, 0x3115, 0x3115 }, -{ 0x3116, 0x3116, 0x3116 }, -{ 0x3117, 0x3117, 0x3117 }, -{ 0x3118, 0x3118, 0x3118 }, -{ 0x3119, 0x3119, 0x3119 }, -{ 0x311A, 0x311A, 0x311A }, -{ 0x311B, 0x311B, 0x311B }, -{ 0x311C, 0x311C, 0x311C }, -{ 0x311D, 0x311D, 0x311D }, -{ 0x311E, 0x311E, 0x311E }, -{ 0x311F, 0x311F, 0x311F }, -{ 0x3120, 0x3120, 0x3120 }, -{ 0x3121, 0x3121, 0x3121 }, -{ 0x3122, 0x3122, 0x3122 }, -{ 0x3123, 0x3123, 0x3123 }, -{ 0x3124, 0x3124, 0x3124 }, -{ 0x3125, 0x3125, 0x3125 }, -{ 0x3126, 0x3126, 0x3126 }, -{ 0x3127, 0x3127, 0x3127 }, -{ 0x3128, 0x3128, 0x3128 }, -{ 0x3129, 0x3129, 0x3129 }, -{ 0x312A, 0x312A, 0x312A }, -{ 0x312B, 0x312B, 0x312B }, -{ 0x312C, 0x312C, 0x312C }, -{ 0x3131, 0x3131, 0x3131 }, -{ 0x3132, 0x3132, 0x3132 }, -{ 0x3133, 0x3133, 0x3133 }, -{ 0x3134, 0x3134, 0x3134 }, -{ 0x3135, 0x3135, 0x3135 }, -{ 0x3136, 0x3136, 0x3136 }, -{ 0x3137, 0x3137, 0x3137 }, -{ 0x3138, 0x3138, 0x3138 }, -{ 0x3139, 0x3139, 0x3139 }, -{ 0x313A, 0x313A, 0x313A }, -{ 0x313B, 0x313B, 0x313B }, -{ 0x313C, 0x313C, 0x313C }, -{ 0x313D, 0x313D, 0x313D }, -{ 0x313E, 0x313E, 0x313E }, -{ 0x313F, 0x313F, 0x313F }, -{ 0x3140, 0x3140, 0x3140 }, -{ 0x3141, 0x3141, 0x3141 }, -{ 0x3142, 0x3142, 0x3142 }, -{ 0x3143, 0x3143, 0x3143 }, -{ 0x3144, 0x3144, 0x3144 }, -{ 0x3145, 0x3145, 0x3145 }, -{ 0x3146, 0x3146, 0x3146 }, -{ 0x3147, 0x3147, 0x3147 }, -{ 0x3148, 0x3148, 0x3148 }, -{ 0x3149, 0x3149, 0x3149 }, -{ 0x314A, 0x314A, 0x314A }, -{ 0x314B, 0x314B, 0x314B }, -{ 0x314C, 0x314C, 0x314C }, -{ 0x314D, 0x314D, 0x314D }, -{ 0x314E, 0x314E, 0x314E }, -{ 0x314F, 0x314F, 0x314F }, -{ 0x3150, 0x3150, 0x3150 }, -{ 0x3151, 0x3151, 0x3151 }, -{ 0x3152, 0x3152, 0x3152 }, -{ 0x3153, 0x3153, 0x3153 }, -{ 0x3154, 0x3154, 0x3154 }, -{ 0x3155, 0x3155, 0x3155 }, -{ 0x3156, 0x3156, 0x3156 }, -{ 0x3157, 0x3157, 0x3157 }, -{ 0x3158, 0x3158, 0x3158 }, -{ 0x3159, 0x3159, 0x3159 }, -{ 0x315A, 0x315A, 0x315A }, -{ 0x315B, 0x315B, 0x315B }, -{ 0x315C, 0x315C, 0x315C }, -{ 0x315D, 0x315D, 0x315D }, -{ 0x315E, 0x315E, 0x315E }, -{ 0x315F, 0x315F, 0x315F }, -{ 0x3160, 0x3160, 0x3160 }, -{ 0x3161, 0x3161, 0x3161 }, -{ 0x3162, 0x3162, 0x3162 }, -{ 0x3163, 0x3163, 0x3163 }, -{ 0x3164, 0x3164, 0x3164 }, -{ 0x3165, 0x3165, 0x3165 }, -{ 0x3166, 0x3166, 0x3166 }, -{ 0x3167, 0x3167, 0x3167 }, -{ 0x3168, 0x3168, 0x3168 }, -{ 0x3169, 0x3169, 0x3169 }, -{ 0x316A, 0x316A, 0x316A }, -{ 0x316B, 0x316B, 0x316B }, -{ 0x316C, 0x316C, 0x316C }, -{ 0x316D, 0x316D, 0x316D }, -{ 0x316E, 0x316E, 0x316E }, -{ 0x316F, 0x316F, 0x316F }, -{ 0x3170, 0x3170, 0x3170 }, -{ 0x3171, 0x3171, 0x3171 }, -{ 0x3172, 0x3172, 0x3172 }, -{ 0x3173, 0x3173, 0x3173 }, -{ 0x3174, 0x3174, 0x3174 }, -{ 0x3175, 0x3175, 0x3175 }, -{ 0x3176, 0x3176, 0x3176 }, -{ 0x3177, 0x3177, 0x3177 }, -{ 0x3178, 0x3178, 0x3178 }, -{ 0x3179, 0x3179, 0x3179 }, -{ 0x317A, 0x317A, 0x317A }, -{ 0x317B, 0x317B, 0x317B }, -{ 0x317C, 0x317C, 0x317C }, -{ 0x317D, 0x317D, 0x317D }, -{ 0x317E, 0x317E, 0x317E }, -{ 0x317F, 0x317F, 0x317F }, -{ 0x3180, 0x3180, 0x3180 }, -{ 0x3181, 0x3181, 0x3181 }, -{ 0x3182, 0x3182, 0x3182 }, -{ 0x3183, 0x3183, 0x3183 }, -{ 0x3184, 0x3184, 0x3184 }, -{ 0x3185, 0x3185, 0x3185 }, -{ 0x3186, 0x3186, 0x3186 }, -{ 0x3187, 0x3187, 0x3187 }, -{ 0x3188, 0x3188, 0x3188 }, -{ 0x3189, 0x3189, 0x3189 }, -{ 0x318A, 0x318A, 0x318A }, -{ 0x318B, 0x318B, 0x318B }, -{ 0x318C, 0x318C, 0x318C }, -{ 0x318D, 0x318D, 0x318D }, -{ 0x318E, 0x318E, 0x318E }, -{ 0x31A0, 0x31A0, 0x31A0 }, -{ 0x31A1, 0x31A1, 0x31A1 }, -{ 0x31A2, 0x31A2, 0x31A2 }, -{ 0x31A3, 0x31A3, 0x31A3 }, -{ 0x31A4, 0x31A4, 0x31A4 }, -{ 0x31A5, 0x31A5, 0x31A5 }, -{ 0x31A6, 0x31A6, 0x31A6 }, -{ 0x31A7, 0x31A7, 0x31A7 }, -{ 0x31A8, 0x31A8, 0x31A8 }, -{ 0x31A9, 0x31A9, 0x31A9 }, -{ 0x31AA, 0x31AA, 0x31AA }, -{ 0x31AB, 0x31AB, 0x31AB }, -{ 0x31AC, 0x31AC, 0x31AC }, -{ 0x31AD, 0x31AD, 0x31AD }, -{ 0x31AE, 0x31AE, 0x31AE }, -{ 0x31AF, 0x31AF, 0x31AF }, -{ 0x31B0, 0x31B0, 0x31B0 }, -{ 0x31B1, 0x31B1, 0x31B1 }, -{ 0x31B2, 0x31B2, 0x31B2 }, -{ 0x31B3, 0x31B3, 0x31B3 }, -{ 0x31B4, 0x31B4, 0x31B4 }, -{ 0x31B5, 0x31B5, 0x31B5 }, -{ 0x31B6, 0x31B6, 0x31B6 }, -{ 0x31B7, 0x31B7, 0x31B7 }, -{ 0x31F0, 0x31F0, 0x31F0 }, -{ 0x31F1, 0x31F1, 0x31F1 }, -{ 0x31F2, 0x31F2, 0x31F2 }, -{ 0x31F3, 0x31F3, 0x31F3 }, -{ 0x31F4, 0x31F4, 0x31F4 }, -{ 0x31F5, 0x31F5, 0x31F5 }, -{ 0x31F6, 0x31F6, 0x31F6 }, -{ 0x31F7, 0x31F7, 0x31F7 }, -{ 0x31F8, 0x31F8, 0x31F8 }, -{ 0x31F9, 0x31F9, 0x31F9 }, -{ 0x31FA, 0x31FA, 0x31FA }, -{ 0x31FB, 0x31FB, 0x31FB }, -{ 0x31FC, 0x31FC, 0x31FC }, -{ 0x31FD, 0x31FD, 0x31FD }, -{ 0x31FE, 0x31FE, 0x31FE }, -{ 0x31FF, 0x31FF, 0x31FF }, -{ 0x3400, 0x3400, 0x3400 }, -{ 0x4DB5, 0x4DB5, 0x4DB5 }, -{ 0x4E00, 0x4E00, 0x4E00 }, -{ 0x9FBB, 0x9FBB, 0x9FBB }, -{ 0xA000, 0xA000, 0xA000 }, -{ 0xA001, 0xA001, 0xA001 }, -{ 0xA002, 0xA002, 0xA002 }, -{ 0xA003, 0xA003, 0xA003 }, -{ 0xA004, 0xA004, 0xA004 }, -{ 0xA005, 0xA005, 0xA005 }, -{ 0xA006, 0xA006, 0xA006 }, -{ 0xA007, 0xA007, 0xA007 }, -{ 0xA008, 0xA008, 0xA008 }, -{ 0xA009, 0xA009, 0xA009 }, -{ 0xA00A, 0xA00A, 0xA00A }, -{ 0xA00B, 0xA00B, 0xA00B }, -{ 0xA00C, 0xA00C, 0xA00C }, -{ 0xA00D, 0xA00D, 0xA00D }, -{ 0xA00E, 0xA00E, 0xA00E }, -{ 0xA00F, 0xA00F, 0xA00F }, -{ 0xA010, 0xA010, 0xA010 }, -{ 0xA011, 0xA011, 0xA011 }, -{ 0xA012, 0xA012, 0xA012 }, -{ 0xA013, 0xA013, 0xA013 }, -{ 0xA014, 0xA014, 0xA014 }, -{ 0xA015, 0xA015, 0xA015 }, -{ 0xA016, 0xA016, 0xA016 }, -{ 0xA017, 0xA017, 0xA017 }, -{ 0xA018, 0xA018, 0xA018 }, -{ 0xA019, 0xA019, 0xA019 }, -{ 0xA01A, 0xA01A, 0xA01A }, -{ 0xA01B, 0xA01B, 0xA01B }, -{ 0xA01C, 0xA01C, 0xA01C }, -{ 0xA01D, 0xA01D, 0xA01D }, -{ 0xA01E, 0xA01E, 0xA01E }, -{ 0xA01F, 0xA01F, 0xA01F }, -{ 0xA020, 0xA020, 0xA020 }, -{ 0xA021, 0xA021, 0xA021 }, -{ 0xA022, 0xA022, 0xA022 }, -{ 0xA023, 0xA023, 0xA023 }, -{ 0xA024, 0xA024, 0xA024 }, -{ 0xA025, 0xA025, 0xA025 }, -{ 0xA026, 0xA026, 0xA026 }, -{ 0xA027, 0xA027, 0xA027 }, -{ 0xA028, 0xA028, 0xA028 }, -{ 0xA029, 0xA029, 0xA029 }, -{ 0xA02A, 0xA02A, 0xA02A }, -{ 0xA02B, 0xA02B, 0xA02B }, -{ 0xA02C, 0xA02C, 0xA02C }, -{ 0xA02D, 0xA02D, 0xA02D }, -{ 0xA02E, 0xA02E, 0xA02E }, -{ 0xA02F, 0xA02F, 0xA02F }, -{ 0xA030, 0xA030, 0xA030 }, -{ 0xA031, 0xA031, 0xA031 }, -{ 0xA032, 0xA032, 0xA032 }, -{ 0xA033, 0xA033, 0xA033 }, -{ 0xA034, 0xA034, 0xA034 }, -{ 0xA035, 0xA035, 0xA035 }, -{ 0xA036, 0xA036, 0xA036 }, -{ 0xA037, 0xA037, 0xA037 }, -{ 0xA038, 0xA038, 0xA038 }, -{ 0xA039, 0xA039, 0xA039 }, -{ 0xA03A, 0xA03A, 0xA03A }, -{ 0xA03B, 0xA03B, 0xA03B }, -{ 0xA03C, 0xA03C, 0xA03C }, -{ 0xA03D, 0xA03D, 0xA03D }, -{ 0xA03E, 0xA03E, 0xA03E }, -{ 0xA03F, 0xA03F, 0xA03F }, -{ 0xA040, 0xA040, 0xA040 }, -{ 0xA041, 0xA041, 0xA041 }, -{ 0xA042, 0xA042, 0xA042 }, -{ 0xA043, 0xA043, 0xA043 }, -{ 0xA044, 0xA044, 0xA044 }, -{ 0xA045, 0xA045, 0xA045 }, -{ 0xA046, 0xA046, 0xA046 }, -{ 0xA047, 0xA047, 0xA047 }, -{ 0xA048, 0xA048, 0xA048 }, -{ 0xA049, 0xA049, 0xA049 }, -{ 0xA04A, 0xA04A, 0xA04A }, -{ 0xA04B, 0xA04B, 0xA04B }, -{ 0xA04C, 0xA04C, 0xA04C }, -{ 0xA04D, 0xA04D, 0xA04D }, -{ 0xA04E, 0xA04E, 0xA04E }, -{ 0xA04F, 0xA04F, 0xA04F }, -{ 0xA050, 0xA050, 0xA050 }, -{ 0xA051, 0xA051, 0xA051 }, -{ 0xA052, 0xA052, 0xA052 }, -{ 0xA053, 0xA053, 0xA053 }, -{ 0xA054, 0xA054, 0xA054 }, -{ 0xA055, 0xA055, 0xA055 }, -{ 0xA056, 0xA056, 0xA056 }, -{ 0xA057, 0xA057, 0xA057 }, -{ 0xA058, 0xA058, 0xA058 }, -{ 0xA059, 0xA059, 0xA059 }, -{ 0xA05A, 0xA05A, 0xA05A }, -{ 0xA05B, 0xA05B, 0xA05B }, -{ 0xA05C, 0xA05C, 0xA05C }, -{ 0xA05D, 0xA05D, 0xA05D }, -{ 0xA05E, 0xA05E, 0xA05E }, -{ 0xA05F, 0xA05F, 0xA05F }, -{ 0xA060, 0xA060, 0xA060 }, -{ 0xA061, 0xA061, 0xA061 }, -{ 0xA062, 0xA062, 0xA062 }, -{ 0xA063, 0xA063, 0xA063 }, -{ 0xA064, 0xA064, 0xA064 }, -{ 0xA065, 0xA065, 0xA065 }, -{ 0xA066, 0xA066, 0xA066 }, -{ 0xA067, 0xA067, 0xA067 }, -{ 0xA068, 0xA068, 0xA068 }, -{ 0xA069, 0xA069, 0xA069 }, -{ 0xA06A, 0xA06A, 0xA06A }, -{ 0xA06B, 0xA06B, 0xA06B }, -{ 0xA06C, 0xA06C, 0xA06C }, -{ 0xA06D, 0xA06D, 0xA06D }, -{ 0xA06E, 0xA06E, 0xA06E }, -{ 0xA06F, 0xA06F, 0xA06F }, -{ 0xA070, 0xA070, 0xA070 }, -{ 0xA071, 0xA071, 0xA071 }, -{ 0xA072, 0xA072, 0xA072 }, -{ 0xA073, 0xA073, 0xA073 }, -{ 0xA074, 0xA074, 0xA074 }, -{ 0xA075, 0xA075, 0xA075 }, -{ 0xA076, 0xA076, 0xA076 }, -{ 0xA077, 0xA077, 0xA077 }, -{ 0xA078, 0xA078, 0xA078 }, -{ 0xA079, 0xA079, 0xA079 }, -{ 0xA07A, 0xA07A, 0xA07A }, -{ 0xA07B, 0xA07B, 0xA07B }, -{ 0xA07C, 0xA07C, 0xA07C }, -{ 0xA07D, 0xA07D, 0xA07D }, -{ 0xA07E, 0xA07E, 0xA07E }, -{ 0xA07F, 0xA07F, 0xA07F }, -{ 0xA080, 0xA080, 0xA080 }, -{ 0xA081, 0xA081, 0xA081 }, -{ 0xA082, 0xA082, 0xA082 }, -{ 0xA083, 0xA083, 0xA083 }, -{ 0xA084, 0xA084, 0xA084 }, -{ 0xA085, 0xA085, 0xA085 }, -{ 0xA086, 0xA086, 0xA086 }, -{ 0xA087, 0xA087, 0xA087 }, -{ 0xA088, 0xA088, 0xA088 }, -{ 0xA089, 0xA089, 0xA089 }, -{ 0xA08A, 0xA08A, 0xA08A }, -{ 0xA08B, 0xA08B, 0xA08B }, -{ 0xA08C, 0xA08C, 0xA08C }, -{ 0xA08D, 0xA08D, 0xA08D }, -{ 0xA08E, 0xA08E, 0xA08E }, -{ 0xA08F, 0xA08F, 0xA08F }, -{ 0xA090, 0xA090, 0xA090 }, -{ 0xA091, 0xA091, 0xA091 }, -{ 0xA092, 0xA092, 0xA092 }, -{ 0xA093, 0xA093, 0xA093 }, -{ 0xA094, 0xA094, 0xA094 }, -{ 0xA095, 0xA095, 0xA095 }, -{ 0xA096, 0xA096, 0xA096 }, -{ 0xA097, 0xA097, 0xA097 }, -{ 0xA098, 0xA098, 0xA098 }, -{ 0xA099, 0xA099, 0xA099 }, -{ 0xA09A, 0xA09A, 0xA09A }, -{ 0xA09B, 0xA09B, 0xA09B }, -{ 0xA09C, 0xA09C, 0xA09C }, -{ 0xA09D, 0xA09D, 0xA09D }, -{ 0xA09E, 0xA09E, 0xA09E }, -{ 0xA09F, 0xA09F, 0xA09F }, -{ 0xA0A0, 0xA0A0, 0xA0A0 }, -{ 0xA0A1, 0xA0A1, 0xA0A1 }, -{ 0xA0A2, 0xA0A2, 0xA0A2 }, -{ 0xA0A3, 0xA0A3, 0xA0A3 }, -{ 0xA0A4, 0xA0A4, 0xA0A4 }, -{ 0xA0A5, 0xA0A5, 0xA0A5 }, -{ 0xA0A6, 0xA0A6, 0xA0A6 }, -{ 0xA0A7, 0xA0A7, 0xA0A7 }, -{ 0xA0A8, 0xA0A8, 0xA0A8 }, -{ 0xA0A9, 0xA0A9, 0xA0A9 }, -{ 0xA0AA, 0xA0AA, 0xA0AA }, -{ 0xA0AB, 0xA0AB, 0xA0AB }, -{ 0xA0AC, 0xA0AC, 0xA0AC }, -{ 0xA0AD, 0xA0AD, 0xA0AD }, -{ 0xA0AE, 0xA0AE, 0xA0AE }, -{ 0xA0AF, 0xA0AF, 0xA0AF }, -{ 0xA0B0, 0xA0B0, 0xA0B0 }, -{ 0xA0B1, 0xA0B1, 0xA0B1 }, -{ 0xA0B2, 0xA0B2, 0xA0B2 }, -{ 0xA0B3, 0xA0B3, 0xA0B3 }, -{ 0xA0B4, 0xA0B4, 0xA0B4 }, -{ 0xA0B5, 0xA0B5, 0xA0B5 }, -{ 0xA0B6, 0xA0B6, 0xA0B6 }, -{ 0xA0B7, 0xA0B7, 0xA0B7 }, -{ 0xA0B8, 0xA0B8, 0xA0B8 }, -{ 0xA0B9, 0xA0B9, 0xA0B9 }, -{ 0xA0BA, 0xA0BA, 0xA0BA }, -{ 0xA0BB, 0xA0BB, 0xA0BB }, -{ 0xA0BC, 0xA0BC, 0xA0BC }, -{ 0xA0BD, 0xA0BD, 0xA0BD }, -{ 0xA0BE, 0xA0BE, 0xA0BE }, -{ 0xA0BF, 0xA0BF, 0xA0BF }, -{ 0xA0C0, 0xA0C0, 0xA0C0 }, -{ 0xA0C1, 0xA0C1, 0xA0C1 }, -{ 0xA0C2, 0xA0C2, 0xA0C2 }, -{ 0xA0C3, 0xA0C3, 0xA0C3 }, -{ 0xA0C4, 0xA0C4, 0xA0C4 }, -{ 0xA0C5, 0xA0C5, 0xA0C5 }, -{ 0xA0C6, 0xA0C6, 0xA0C6 }, -{ 0xA0C7, 0xA0C7, 0xA0C7 }, -{ 0xA0C8, 0xA0C8, 0xA0C8 }, -{ 0xA0C9, 0xA0C9, 0xA0C9 }, -{ 0xA0CA, 0xA0CA, 0xA0CA }, -{ 0xA0CB, 0xA0CB, 0xA0CB }, -{ 0xA0CC, 0xA0CC, 0xA0CC }, -{ 0xA0CD, 0xA0CD, 0xA0CD }, -{ 0xA0CE, 0xA0CE, 0xA0CE }, -{ 0xA0CF, 0xA0CF, 0xA0CF }, -{ 0xA0D0, 0xA0D0, 0xA0D0 }, -{ 0xA0D1, 0xA0D1, 0xA0D1 }, -{ 0xA0D2, 0xA0D2, 0xA0D2 }, -{ 0xA0D3, 0xA0D3, 0xA0D3 }, -{ 0xA0D4, 0xA0D4, 0xA0D4 }, -{ 0xA0D5, 0xA0D5, 0xA0D5 }, -{ 0xA0D6, 0xA0D6, 0xA0D6 }, -{ 0xA0D7, 0xA0D7, 0xA0D7 }, -{ 0xA0D8, 0xA0D8, 0xA0D8 }, -{ 0xA0D9, 0xA0D9, 0xA0D9 }, -{ 0xA0DA, 0xA0DA, 0xA0DA }, -{ 0xA0DB, 0xA0DB, 0xA0DB }, -{ 0xA0DC, 0xA0DC, 0xA0DC }, -{ 0xA0DD, 0xA0DD, 0xA0DD }, -{ 0xA0DE, 0xA0DE, 0xA0DE }, -{ 0xA0DF, 0xA0DF, 0xA0DF }, -{ 0xA0E0, 0xA0E0, 0xA0E0 }, -{ 0xA0E1, 0xA0E1, 0xA0E1 }, -{ 0xA0E2, 0xA0E2, 0xA0E2 }, -{ 0xA0E3, 0xA0E3, 0xA0E3 }, -{ 0xA0E4, 0xA0E4, 0xA0E4 }, -{ 0xA0E5, 0xA0E5, 0xA0E5 }, -{ 0xA0E6, 0xA0E6, 0xA0E6 }, -{ 0xA0E7, 0xA0E7, 0xA0E7 }, -{ 0xA0E8, 0xA0E8, 0xA0E8 }, -{ 0xA0E9, 0xA0E9, 0xA0E9 }, -{ 0xA0EA, 0xA0EA, 0xA0EA }, -{ 0xA0EB, 0xA0EB, 0xA0EB }, -{ 0xA0EC, 0xA0EC, 0xA0EC }, -{ 0xA0ED, 0xA0ED, 0xA0ED }, -{ 0xA0EE, 0xA0EE, 0xA0EE }, -{ 0xA0EF, 0xA0EF, 0xA0EF }, -{ 0xA0F0, 0xA0F0, 0xA0F0 }, -{ 0xA0F1, 0xA0F1, 0xA0F1 }, -{ 0xA0F2, 0xA0F2, 0xA0F2 }, -{ 0xA0F3, 0xA0F3, 0xA0F3 }, -{ 0xA0F4, 0xA0F4, 0xA0F4 }, -{ 0xA0F5, 0xA0F5, 0xA0F5 }, -{ 0xA0F6, 0xA0F6, 0xA0F6 }, -{ 0xA0F7, 0xA0F7, 0xA0F7 }, -{ 0xA0F8, 0xA0F8, 0xA0F8 }, -{ 0xA0F9, 0xA0F9, 0xA0F9 }, -{ 0xA0FA, 0xA0FA, 0xA0FA }, -{ 0xA0FB, 0xA0FB, 0xA0FB }, -{ 0xA0FC, 0xA0FC, 0xA0FC }, -{ 0xA0FD, 0xA0FD, 0xA0FD }, -{ 0xA0FE, 0xA0FE, 0xA0FE }, -{ 0xA0FF, 0xA0FF, 0xA0FF }, -{ 0xA100, 0xA100, 0xA100 }, -{ 0xA101, 0xA101, 0xA101 }, -{ 0xA102, 0xA102, 0xA102 }, -{ 0xA103, 0xA103, 0xA103 }, -{ 0xA104, 0xA104, 0xA104 }, -{ 0xA105, 0xA105, 0xA105 }, -{ 0xA106, 0xA106, 0xA106 }, -{ 0xA107, 0xA107, 0xA107 }, -{ 0xA108, 0xA108, 0xA108 }, -{ 0xA109, 0xA109, 0xA109 }, -{ 0xA10A, 0xA10A, 0xA10A }, -{ 0xA10B, 0xA10B, 0xA10B }, -{ 0xA10C, 0xA10C, 0xA10C }, -{ 0xA10D, 0xA10D, 0xA10D }, -{ 0xA10E, 0xA10E, 0xA10E }, -{ 0xA10F, 0xA10F, 0xA10F }, -{ 0xA110, 0xA110, 0xA110 }, -{ 0xA111, 0xA111, 0xA111 }, -{ 0xA112, 0xA112, 0xA112 }, -{ 0xA113, 0xA113, 0xA113 }, -{ 0xA114, 0xA114, 0xA114 }, -{ 0xA115, 0xA115, 0xA115 }, -{ 0xA116, 0xA116, 0xA116 }, -{ 0xA117, 0xA117, 0xA117 }, -{ 0xA118, 0xA118, 0xA118 }, -{ 0xA119, 0xA119, 0xA119 }, -{ 0xA11A, 0xA11A, 0xA11A }, -{ 0xA11B, 0xA11B, 0xA11B }, -{ 0xA11C, 0xA11C, 0xA11C }, -{ 0xA11D, 0xA11D, 0xA11D }, -{ 0xA11E, 0xA11E, 0xA11E }, -{ 0xA11F, 0xA11F, 0xA11F }, -{ 0xA120, 0xA120, 0xA120 }, -{ 0xA121, 0xA121, 0xA121 }, -{ 0xA122, 0xA122, 0xA122 }, -{ 0xA123, 0xA123, 0xA123 }, -{ 0xA124, 0xA124, 0xA124 }, -{ 0xA125, 0xA125, 0xA125 }, -{ 0xA126, 0xA126, 0xA126 }, -{ 0xA127, 0xA127, 0xA127 }, -{ 0xA128, 0xA128, 0xA128 }, -{ 0xA129, 0xA129, 0xA129 }, -{ 0xA12A, 0xA12A, 0xA12A }, -{ 0xA12B, 0xA12B, 0xA12B }, -{ 0xA12C, 0xA12C, 0xA12C }, -{ 0xA12D, 0xA12D, 0xA12D }, -{ 0xA12E, 0xA12E, 0xA12E }, -{ 0xA12F, 0xA12F, 0xA12F }, -{ 0xA130, 0xA130, 0xA130 }, -{ 0xA131, 0xA131, 0xA131 }, -{ 0xA132, 0xA132, 0xA132 }, -{ 0xA133, 0xA133, 0xA133 }, -{ 0xA134, 0xA134, 0xA134 }, -{ 0xA135, 0xA135, 0xA135 }, -{ 0xA136, 0xA136, 0xA136 }, -{ 0xA137, 0xA137, 0xA137 }, -{ 0xA138, 0xA138, 0xA138 }, -{ 0xA139, 0xA139, 0xA139 }, -{ 0xA13A, 0xA13A, 0xA13A }, -{ 0xA13B, 0xA13B, 0xA13B }, -{ 0xA13C, 0xA13C, 0xA13C }, -{ 0xA13D, 0xA13D, 0xA13D }, -{ 0xA13E, 0xA13E, 0xA13E }, -{ 0xA13F, 0xA13F, 0xA13F }, -{ 0xA140, 0xA140, 0xA140 }, -{ 0xA141, 0xA141, 0xA141 }, -{ 0xA142, 0xA142, 0xA142 }, -{ 0xA143, 0xA143, 0xA143 }, -{ 0xA144, 0xA144, 0xA144 }, -{ 0xA145, 0xA145, 0xA145 }, -{ 0xA146, 0xA146, 0xA146 }, -{ 0xA147, 0xA147, 0xA147 }, -{ 0xA148, 0xA148, 0xA148 }, -{ 0xA149, 0xA149, 0xA149 }, -{ 0xA14A, 0xA14A, 0xA14A }, -{ 0xA14B, 0xA14B, 0xA14B }, -{ 0xA14C, 0xA14C, 0xA14C }, -{ 0xA14D, 0xA14D, 0xA14D }, -{ 0xA14E, 0xA14E, 0xA14E }, -{ 0xA14F, 0xA14F, 0xA14F }, -{ 0xA150, 0xA150, 0xA150 }, -{ 0xA151, 0xA151, 0xA151 }, -{ 0xA152, 0xA152, 0xA152 }, -{ 0xA153, 0xA153, 0xA153 }, -{ 0xA154, 0xA154, 0xA154 }, -{ 0xA155, 0xA155, 0xA155 }, -{ 0xA156, 0xA156, 0xA156 }, -{ 0xA157, 0xA157, 0xA157 }, -{ 0xA158, 0xA158, 0xA158 }, -{ 0xA159, 0xA159, 0xA159 }, -{ 0xA15A, 0xA15A, 0xA15A }, -{ 0xA15B, 0xA15B, 0xA15B }, -{ 0xA15C, 0xA15C, 0xA15C }, -{ 0xA15D, 0xA15D, 0xA15D }, -{ 0xA15E, 0xA15E, 0xA15E }, -{ 0xA15F, 0xA15F, 0xA15F }, -{ 0xA160, 0xA160, 0xA160 }, -{ 0xA161, 0xA161, 0xA161 }, -{ 0xA162, 0xA162, 0xA162 }, -{ 0xA163, 0xA163, 0xA163 }, -{ 0xA164, 0xA164, 0xA164 }, -{ 0xA165, 0xA165, 0xA165 }, -{ 0xA166, 0xA166, 0xA166 }, -{ 0xA167, 0xA167, 0xA167 }, -{ 0xA168, 0xA168, 0xA168 }, -{ 0xA169, 0xA169, 0xA169 }, -{ 0xA16A, 0xA16A, 0xA16A }, -{ 0xA16B, 0xA16B, 0xA16B }, -{ 0xA16C, 0xA16C, 0xA16C }, -{ 0xA16D, 0xA16D, 0xA16D }, -{ 0xA16E, 0xA16E, 0xA16E }, -{ 0xA16F, 0xA16F, 0xA16F }, -{ 0xA170, 0xA170, 0xA170 }, -{ 0xA171, 0xA171, 0xA171 }, -{ 0xA172, 0xA172, 0xA172 }, -{ 0xA173, 0xA173, 0xA173 }, -{ 0xA174, 0xA174, 0xA174 }, -{ 0xA175, 0xA175, 0xA175 }, -{ 0xA176, 0xA176, 0xA176 }, -{ 0xA177, 0xA177, 0xA177 }, -{ 0xA178, 0xA178, 0xA178 }, -{ 0xA179, 0xA179, 0xA179 }, -{ 0xA17A, 0xA17A, 0xA17A }, -{ 0xA17B, 0xA17B, 0xA17B }, -{ 0xA17C, 0xA17C, 0xA17C }, -{ 0xA17D, 0xA17D, 0xA17D }, -{ 0xA17E, 0xA17E, 0xA17E }, -{ 0xA17F, 0xA17F, 0xA17F }, -{ 0xA180, 0xA180, 0xA180 }, -{ 0xA181, 0xA181, 0xA181 }, -{ 0xA182, 0xA182, 0xA182 }, -{ 0xA183, 0xA183, 0xA183 }, -{ 0xA184, 0xA184, 0xA184 }, -{ 0xA185, 0xA185, 0xA185 }, -{ 0xA186, 0xA186, 0xA186 }, -{ 0xA187, 0xA187, 0xA187 }, -{ 0xA188, 0xA188, 0xA188 }, -{ 0xA189, 0xA189, 0xA189 }, -{ 0xA18A, 0xA18A, 0xA18A }, -{ 0xA18B, 0xA18B, 0xA18B }, -{ 0xA18C, 0xA18C, 0xA18C }, -{ 0xA18D, 0xA18D, 0xA18D }, -{ 0xA18E, 0xA18E, 0xA18E }, -{ 0xA18F, 0xA18F, 0xA18F }, -{ 0xA190, 0xA190, 0xA190 }, -{ 0xA191, 0xA191, 0xA191 }, -{ 0xA192, 0xA192, 0xA192 }, -{ 0xA193, 0xA193, 0xA193 }, -{ 0xA194, 0xA194, 0xA194 }, -{ 0xA195, 0xA195, 0xA195 }, -{ 0xA196, 0xA196, 0xA196 }, -{ 0xA197, 0xA197, 0xA197 }, -{ 0xA198, 0xA198, 0xA198 }, -{ 0xA199, 0xA199, 0xA199 }, -{ 0xA19A, 0xA19A, 0xA19A }, -{ 0xA19B, 0xA19B, 0xA19B }, -{ 0xA19C, 0xA19C, 0xA19C }, -{ 0xA19D, 0xA19D, 0xA19D }, -{ 0xA19E, 0xA19E, 0xA19E }, -{ 0xA19F, 0xA19F, 0xA19F }, -{ 0xA1A0, 0xA1A0, 0xA1A0 }, -{ 0xA1A1, 0xA1A1, 0xA1A1 }, -{ 0xA1A2, 0xA1A2, 0xA1A2 }, -{ 0xA1A3, 0xA1A3, 0xA1A3 }, -{ 0xA1A4, 0xA1A4, 0xA1A4 }, -{ 0xA1A5, 0xA1A5, 0xA1A5 }, -{ 0xA1A6, 0xA1A6, 0xA1A6 }, -{ 0xA1A7, 0xA1A7, 0xA1A7 }, -{ 0xA1A8, 0xA1A8, 0xA1A8 }, -{ 0xA1A9, 0xA1A9, 0xA1A9 }, -{ 0xA1AA, 0xA1AA, 0xA1AA }, -{ 0xA1AB, 0xA1AB, 0xA1AB }, -{ 0xA1AC, 0xA1AC, 0xA1AC }, -{ 0xA1AD, 0xA1AD, 0xA1AD }, -{ 0xA1AE, 0xA1AE, 0xA1AE }, -{ 0xA1AF, 0xA1AF, 0xA1AF }, -{ 0xA1B0, 0xA1B0, 0xA1B0 }, -{ 0xA1B1, 0xA1B1, 0xA1B1 }, -{ 0xA1B2, 0xA1B2, 0xA1B2 }, -{ 0xA1B3, 0xA1B3, 0xA1B3 }, -{ 0xA1B4, 0xA1B4, 0xA1B4 }, -{ 0xA1B5, 0xA1B5, 0xA1B5 }, -{ 0xA1B6, 0xA1B6, 0xA1B6 }, -{ 0xA1B7, 0xA1B7, 0xA1B7 }, -{ 0xA1B8, 0xA1B8, 0xA1B8 }, -{ 0xA1B9, 0xA1B9, 0xA1B9 }, -{ 0xA1BA, 0xA1BA, 0xA1BA }, -{ 0xA1BB, 0xA1BB, 0xA1BB }, -{ 0xA1BC, 0xA1BC, 0xA1BC }, -{ 0xA1BD, 0xA1BD, 0xA1BD }, -{ 0xA1BE, 0xA1BE, 0xA1BE }, -{ 0xA1BF, 0xA1BF, 0xA1BF }, -{ 0xA1C0, 0xA1C0, 0xA1C0 }, -{ 0xA1C1, 0xA1C1, 0xA1C1 }, -{ 0xA1C2, 0xA1C2, 0xA1C2 }, -{ 0xA1C3, 0xA1C3, 0xA1C3 }, -{ 0xA1C4, 0xA1C4, 0xA1C4 }, -{ 0xA1C5, 0xA1C5, 0xA1C5 }, -{ 0xA1C6, 0xA1C6, 0xA1C6 }, -{ 0xA1C7, 0xA1C7, 0xA1C7 }, -{ 0xA1C8, 0xA1C8, 0xA1C8 }, -{ 0xA1C9, 0xA1C9, 0xA1C9 }, -{ 0xA1CA, 0xA1CA, 0xA1CA }, -{ 0xA1CB, 0xA1CB, 0xA1CB }, -{ 0xA1CC, 0xA1CC, 0xA1CC }, -{ 0xA1CD, 0xA1CD, 0xA1CD }, -{ 0xA1CE, 0xA1CE, 0xA1CE }, -{ 0xA1CF, 0xA1CF, 0xA1CF }, -{ 0xA1D0, 0xA1D0, 0xA1D0 }, -{ 0xA1D1, 0xA1D1, 0xA1D1 }, -{ 0xA1D2, 0xA1D2, 0xA1D2 }, -{ 0xA1D3, 0xA1D3, 0xA1D3 }, -{ 0xA1D4, 0xA1D4, 0xA1D4 }, -{ 0xA1D5, 0xA1D5, 0xA1D5 }, -{ 0xA1D6, 0xA1D6, 0xA1D6 }, -{ 0xA1D7, 0xA1D7, 0xA1D7 }, -{ 0xA1D8, 0xA1D8, 0xA1D8 }, -{ 0xA1D9, 0xA1D9, 0xA1D9 }, -{ 0xA1DA, 0xA1DA, 0xA1DA }, -{ 0xA1DB, 0xA1DB, 0xA1DB }, -{ 0xA1DC, 0xA1DC, 0xA1DC }, -{ 0xA1DD, 0xA1DD, 0xA1DD }, -{ 0xA1DE, 0xA1DE, 0xA1DE }, -{ 0xA1DF, 0xA1DF, 0xA1DF }, -{ 0xA1E0, 0xA1E0, 0xA1E0 }, -{ 0xA1E1, 0xA1E1, 0xA1E1 }, -{ 0xA1E2, 0xA1E2, 0xA1E2 }, -{ 0xA1E3, 0xA1E3, 0xA1E3 }, -{ 0xA1E4, 0xA1E4, 0xA1E4 }, -{ 0xA1E5, 0xA1E5, 0xA1E5 }, -{ 0xA1E6, 0xA1E6, 0xA1E6 }, -{ 0xA1E7, 0xA1E7, 0xA1E7 }, -{ 0xA1E8, 0xA1E8, 0xA1E8 }, -{ 0xA1E9, 0xA1E9, 0xA1E9 }, -{ 0xA1EA, 0xA1EA, 0xA1EA }, -{ 0xA1EB, 0xA1EB, 0xA1EB }, -{ 0xA1EC, 0xA1EC, 0xA1EC }, -{ 0xA1ED, 0xA1ED, 0xA1ED }, -{ 0xA1EE, 0xA1EE, 0xA1EE }, -{ 0xA1EF, 0xA1EF, 0xA1EF }, -{ 0xA1F0, 0xA1F0, 0xA1F0 }, -{ 0xA1F1, 0xA1F1, 0xA1F1 }, -{ 0xA1F2, 0xA1F2, 0xA1F2 }, -{ 0xA1F3, 0xA1F3, 0xA1F3 }, -{ 0xA1F4, 0xA1F4, 0xA1F4 }, -{ 0xA1F5, 0xA1F5, 0xA1F5 }, -{ 0xA1F6, 0xA1F6, 0xA1F6 }, -{ 0xA1F7, 0xA1F7, 0xA1F7 }, -{ 0xA1F8, 0xA1F8, 0xA1F8 }, -{ 0xA1F9, 0xA1F9, 0xA1F9 }, -{ 0xA1FA, 0xA1FA, 0xA1FA }, -{ 0xA1FB, 0xA1FB, 0xA1FB }, -{ 0xA1FC, 0xA1FC, 0xA1FC }, -{ 0xA1FD, 0xA1FD, 0xA1FD }, -{ 0xA1FE, 0xA1FE, 0xA1FE }, -{ 0xA1FF, 0xA1FF, 0xA1FF }, -{ 0xA200, 0xA200, 0xA200 }, -{ 0xA201, 0xA201, 0xA201 }, -{ 0xA202, 0xA202, 0xA202 }, -{ 0xA203, 0xA203, 0xA203 }, -{ 0xA204, 0xA204, 0xA204 }, -{ 0xA205, 0xA205, 0xA205 }, -{ 0xA206, 0xA206, 0xA206 }, -{ 0xA207, 0xA207, 0xA207 }, -{ 0xA208, 0xA208, 0xA208 }, -{ 0xA209, 0xA209, 0xA209 }, -{ 0xA20A, 0xA20A, 0xA20A }, -{ 0xA20B, 0xA20B, 0xA20B }, -{ 0xA20C, 0xA20C, 0xA20C }, -{ 0xA20D, 0xA20D, 0xA20D }, -{ 0xA20E, 0xA20E, 0xA20E }, -{ 0xA20F, 0xA20F, 0xA20F }, -{ 0xA210, 0xA210, 0xA210 }, -{ 0xA211, 0xA211, 0xA211 }, -{ 0xA212, 0xA212, 0xA212 }, -{ 0xA213, 0xA213, 0xA213 }, -{ 0xA214, 0xA214, 0xA214 }, -{ 0xA215, 0xA215, 0xA215 }, -{ 0xA216, 0xA216, 0xA216 }, -{ 0xA217, 0xA217, 0xA217 }, -{ 0xA218, 0xA218, 0xA218 }, -{ 0xA219, 0xA219, 0xA219 }, -{ 0xA21A, 0xA21A, 0xA21A }, -{ 0xA21B, 0xA21B, 0xA21B }, -{ 0xA21C, 0xA21C, 0xA21C }, -{ 0xA21D, 0xA21D, 0xA21D }, -{ 0xA21E, 0xA21E, 0xA21E }, -{ 0xA21F, 0xA21F, 0xA21F }, -{ 0xA220, 0xA220, 0xA220 }, -{ 0xA221, 0xA221, 0xA221 }, -{ 0xA222, 0xA222, 0xA222 }, -{ 0xA223, 0xA223, 0xA223 }, -{ 0xA224, 0xA224, 0xA224 }, -{ 0xA225, 0xA225, 0xA225 }, -{ 0xA226, 0xA226, 0xA226 }, -{ 0xA227, 0xA227, 0xA227 }, -{ 0xA228, 0xA228, 0xA228 }, -{ 0xA229, 0xA229, 0xA229 }, -{ 0xA22A, 0xA22A, 0xA22A }, -{ 0xA22B, 0xA22B, 0xA22B }, -{ 0xA22C, 0xA22C, 0xA22C }, -{ 0xA22D, 0xA22D, 0xA22D }, -{ 0xA22E, 0xA22E, 0xA22E }, -{ 0xA22F, 0xA22F, 0xA22F }, -{ 0xA230, 0xA230, 0xA230 }, -{ 0xA231, 0xA231, 0xA231 }, -{ 0xA232, 0xA232, 0xA232 }, -{ 0xA233, 0xA233, 0xA233 }, -{ 0xA234, 0xA234, 0xA234 }, -{ 0xA235, 0xA235, 0xA235 }, -{ 0xA236, 0xA236, 0xA236 }, -{ 0xA237, 0xA237, 0xA237 }, -{ 0xA238, 0xA238, 0xA238 }, -{ 0xA239, 0xA239, 0xA239 }, -{ 0xA23A, 0xA23A, 0xA23A }, -{ 0xA23B, 0xA23B, 0xA23B }, -{ 0xA23C, 0xA23C, 0xA23C }, -{ 0xA23D, 0xA23D, 0xA23D }, -{ 0xA23E, 0xA23E, 0xA23E }, -{ 0xA23F, 0xA23F, 0xA23F }, -{ 0xA240, 0xA240, 0xA240 }, -{ 0xA241, 0xA241, 0xA241 }, -{ 0xA242, 0xA242, 0xA242 }, -{ 0xA243, 0xA243, 0xA243 }, -{ 0xA244, 0xA244, 0xA244 }, -{ 0xA245, 0xA245, 0xA245 }, -{ 0xA246, 0xA246, 0xA246 }, -{ 0xA247, 0xA247, 0xA247 }, -{ 0xA248, 0xA248, 0xA248 }, -{ 0xA249, 0xA249, 0xA249 }, -{ 0xA24A, 0xA24A, 0xA24A }, -{ 0xA24B, 0xA24B, 0xA24B }, -{ 0xA24C, 0xA24C, 0xA24C }, -{ 0xA24D, 0xA24D, 0xA24D }, -{ 0xA24E, 0xA24E, 0xA24E }, -{ 0xA24F, 0xA24F, 0xA24F }, -{ 0xA250, 0xA250, 0xA250 }, -{ 0xA251, 0xA251, 0xA251 }, -{ 0xA252, 0xA252, 0xA252 }, -{ 0xA253, 0xA253, 0xA253 }, -{ 0xA254, 0xA254, 0xA254 }, -{ 0xA255, 0xA255, 0xA255 }, -{ 0xA256, 0xA256, 0xA256 }, -{ 0xA257, 0xA257, 0xA257 }, -{ 0xA258, 0xA258, 0xA258 }, -{ 0xA259, 0xA259, 0xA259 }, -{ 0xA25A, 0xA25A, 0xA25A }, -{ 0xA25B, 0xA25B, 0xA25B }, -{ 0xA25C, 0xA25C, 0xA25C }, -{ 0xA25D, 0xA25D, 0xA25D }, -{ 0xA25E, 0xA25E, 0xA25E }, -{ 0xA25F, 0xA25F, 0xA25F }, -{ 0xA260, 0xA260, 0xA260 }, -{ 0xA261, 0xA261, 0xA261 }, -{ 0xA262, 0xA262, 0xA262 }, -{ 0xA263, 0xA263, 0xA263 }, -{ 0xA264, 0xA264, 0xA264 }, -{ 0xA265, 0xA265, 0xA265 }, -{ 0xA266, 0xA266, 0xA266 }, -{ 0xA267, 0xA267, 0xA267 }, -{ 0xA268, 0xA268, 0xA268 }, -{ 0xA269, 0xA269, 0xA269 }, -{ 0xA26A, 0xA26A, 0xA26A }, -{ 0xA26B, 0xA26B, 0xA26B }, -{ 0xA26C, 0xA26C, 0xA26C }, -{ 0xA26D, 0xA26D, 0xA26D }, -{ 0xA26E, 0xA26E, 0xA26E }, -{ 0xA26F, 0xA26F, 0xA26F }, -{ 0xA270, 0xA270, 0xA270 }, -{ 0xA271, 0xA271, 0xA271 }, -{ 0xA272, 0xA272, 0xA272 }, -{ 0xA273, 0xA273, 0xA273 }, -{ 0xA274, 0xA274, 0xA274 }, -{ 0xA275, 0xA275, 0xA275 }, -{ 0xA276, 0xA276, 0xA276 }, -{ 0xA277, 0xA277, 0xA277 }, -{ 0xA278, 0xA278, 0xA278 }, -{ 0xA279, 0xA279, 0xA279 }, -{ 0xA27A, 0xA27A, 0xA27A }, -{ 0xA27B, 0xA27B, 0xA27B }, -{ 0xA27C, 0xA27C, 0xA27C }, -{ 0xA27D, 0xA27D, 0xA27D }, -{ 0xA27E, 0xA27E, 0xA27E }, -{ 0xA27F, 0xA27F, 0xA27F }, -{ 0xA280, 0xA280, 0xA280 }, -{ 0xA281, 0xA281, 0xA281 }, -{ 0xA282, 0xA282, 0xA282 }, -{ 0xA283, 0xA283, 0xA283 }, -{ 0xA284, 0xA284, 0xA284 }, -{ 0xA285, 0xA285, 0xA285 }, -{ 0xA286, 0xA286, 0xA286 }, -{ 0xA287, 0xA287, 0xA287 }, -{ 0xA288, 0xA288, 0xA288 }, -{ 0xA289, 0xA289, 0xA289 }, -{ 0xA28A, 0xA28A, 0xA28A }, -{ 0xA28B, 0xA28B, 0xA28B }, -{ 0xA28C, 0xA28C, 0xA28C }, -{ 0xA28D, 0xA28D, 0xA28D }, -{ 0xA28E, 0xA28E, 0xA28E }, -{ 0xA28F, 0xA28F, 0xA28F }, -{ 0xA290, 0xA290, 0xA290 }, -{ 0xA291, 0xA291, 0xA291 }, -{ 0xA292, 0xA292, 0xA292 }, -{ 0xA293, 0xA293, 0xA293 }, -{ 0xA294, 0xA294, 0xA294 }, -{ 0xA295, 0xA295, 0xA295 }, -{ 0xA296, 0xA296, 0xA296 }, -{ 0xA297, 0xA297, 0xA297 }, -{ 0xA298, 0xA298, 0xA298 }, -{ 0xA299, 0xA299, 0xA299 }, -{ 0xA29A, 0xA29A, 0xA29A }, -{ 0xA29B, 0xA29B, 0xA29B }, -{ 0xA29C, 0xA29C, 0xA29C }, -{ 0xA29D, 0xA29D, 0xA29D }, -{ 0xA29E, 0xA29E, 0xA29E }, -{ 0xA29F, 0xA29F, 0xA29F }, -{ 0xA2A0, 0xA2A0, 0xA2A0 }, -{ 0xA2A1, 0xA2A1, 0xA2A1 }, -{ 0xA2A2, 0xA2A2, 0xA2A2 }, -{ 0xA2A3, 0xA2A3, 0xA2A3 }, -{ 0xA2A4, 0xA2A4, 0xA2A4 }, -{ 0xA2A5, 0xA2A5, 0xA2A5 }, -{ 0xA2A6, 0xA2A6, 0xA2A6 }, -{ 0xA2A7, 0xA2A7, 0xA2A7 }, -{ 0xA2A8, 0xA2A8, 0xA2A8 }, -{ 0xA2A9, 0xA2A9, 0xA2A9 }, -{ 0xA2AA, 0xA2AA, 0xA2AA }, -{ 0xA2AB, 0xA2AB, 0xA2AB }, -{ 0xA2AC, 0xA2AC, 0xA2AC }, -{ 0xA2AD, 0xA2AD, 0xA2AD }, -{ 0xA2AE, 0xA2AE, 0xA2AE }, -{ 0xA2AF, 0xA2AF, 0xA2AF }, -{ 0xA2B0, 0xA2B0, 0xA2B0 }, -{ 0xA2B1, 0xA2B1, 0xA2B1 }, -{ 0xA2B2, 0xA2B2, 0xA2B2 }, -{ 0xA2B3, 0xA2B3, 0xA2B3 }, -{ 0xA2B4, 0xA2B4, 0xA2B4 }, -{ 0xA2B5, 0xA2B5, 0xA2B5 }, -{ 0xA2B6, 0xA2B6, 0xA2B6 }, -{ 0xA2B7, 0xA2B7, 0xA2B7 }, -{ 0xA2B8, 0xA2B8, 0xA2B8 }, -{ 0xA2B9, 0xA2B9, 0xA2B9 }, -{ 0xA2BA, 0xA2BA, 0xA2BA }, -{ 0xA2BB, 0xA2BB, 0xA2BB }, -{ 0xA2BC, 0xA2BC, 0xA2BC }, -{ 0xA2BD, 0xA2BD, 0xA2BD }, -{ 0xA2BE, 0xA2BE, 0xA2BE }, -{ 0xA2BF, 0xA2BF, 0xA2BF }, -{ 0xA2C0, 0xA2C0, 0xA2C0 }, -{ 0xA2C1, 0xA2C1, 0xA2C1 }, -{ 0xA2C2, 0xA2C2, 0xA2C2 }, -{ 0xA2C3, 0xA2C3, 0xA2C3 }, -{ 0xA2C4, 0xA2C4, 0xA2C4 }, -{ 0xA2C5, 0xA2C5, 0xA2C5 }, -{ 0xA2C6, 0xA2C6, 0xA2C6 }, -{ 0xA2C7, 0xA2C7, 0xA2C7 }, -{ 0xA2C8, 0xA2C8, 0xA2C8 }, -{ 0xA2C9, 0xA2C9, 0xA2C9 }, -{ 0xA2CA, 0xA2CA, 0xA2CA }, -{ 0xA2CB, 0xA2CB, 0xA2CB }, -{ 0xA2CC, 0xA2CC, 0xA2CC }, -{ 0xA2CD, 0xA2CD, 0xA2CD }, -{ 0xA2CE, 0xA2CE, 0xA2CE }, -{ 0xA2CF, 0xA2CF, 0xA2CF }, -{ 0xA2D0, 0xA2D0, 0xA2D0 }, -{ 0xA2D1, 0xA2D1, 0xA2D1 }, -{ 0xA2D2, 0xA2D2, 0xA2D2 }, -{ 0xA2D3, 0xA2D3, 0xA2D3 }, -{ 0xA2D4, 0xA2D4, 0xA2D4 }, -{ 0xA2D5, 0xA2D5, 0xA2D5 }, -{ 0xA2D6, 0xA2D6, 0xA2D6 }, -{ 0xA2D7, 0xA2D7, 0xA2D7 }, -{ 0xA2D8, 0xA2D8, 0xA2D8 }, -{ 0xA2D9, 0xA2D9, 0xA2D9 }, -{ 0xA2DA, 0xA2DA, 0xA2DA }, -{ 0xA2DB, 0xA2DB, 0xA2DB }, -{ 0xA2DC, 0xA2DC, 0xA2DC }, -{ 0xA2DD, 0xA2DD, 0xA2DD }, -{ 0xA2DE, 0xA2DE, 0xA2DE }, -{ 0xA2DF, 0xA2DF, 0xA2DF }, -{ 0xA2E0, 0xA2E0, 0xA2E0 }, -{ 0xA2E1, 0xA2E1, 0xA2E1 }, -{ 0xA2E2, 0xA2E2, 0xA2E2 }, -{ 0xA2E3, 0xA2E3, 0xA2E3 }, -{ 0xA2E4, 0xA2E4, 0xA2E4 }, -{ 0xA2E5, 0xA2E5, 0xA2E5 }, -{ 0xA2E6, 0xA2E6, 0xA2E6 }, -{ 0xA2E7, 0xA2E7, 0xA2E7 }, -{ 0xA2E8, 0xA2E8, 0xA2E8 }, -{ 0xA2E9, 0xA2E9, 0xA2E9 }, -{ 0xA2EA, 0xA2EA, 0xA2EA }, -{ 0xA2EB, 0xA2EB, 0xA2EB }, -{ 0xA2EC, 0xA2EC, 0xA2EC }, -{ 0xA2ED, 0xA2ED, 0xA2ED }, -{ 0xA2EE, 0xA2EE, 0xA2EE }, -{ 0xA2EF, 0xA2EF, 0xA2EF }, -{ 0xA2F0, 0xA2F0, 0xA2F0 }, -{ 0xA2F1, 0xA2F1, 0xA2F1 }, -{ 0xA2F2, 0xA2F2, 0xA2F2 }, -{ 0xA2F3, 0xA2F3, 0xA2F3 }, -{ 0xA2F4, 0xA2F4, 0xA2F4 }, -{ 0xA2F5, 0xA2F5, 0xA2F5 }, -{ 0xA2F6, 0xA2F6, 0xA2F6 }, -{ 0xA2F7, 0xA2F7, 0xA2F7 }, -{ 0xA2F8, 0xA2F8, 0xA2F8 }, -{ 0xA2F9, 0xA2F9, 0xA2F9 }, -{ 0xA2FA, 0xA2FA, 0xA2FA }, -{ 0xA2FB, 0xA2FB, 0xA2FB }, -{ 0xA2FC, 0xA2FC, 0xA2FC }, -{ 0xA2FD, 0xA2FD, 0xA2FD }, -{ 0xA2FE, 0xA2FE, 0xA2FE }, -{ 0xA2FF, 0xA2FF, 0xA2FF }, -{ 0xA300, 0xA300, 0xA300 }, -{ 0xA301, 0xA301, 0xA301 }, -{ 0xA302, 0xA302, 0xA302 }, -{ 0xA303, 0xA303, 0xA303 }, -{ 0xA304, 0xA304, 0xA304 }, -{ 0xA305, 0xA305, 0xA305 }, -{ 0xA306, 0xA306, 0xA306 }, -{ 0xA307, 0xA307, 0xA307 }, -{ 0xA308, 0xA308, 0xA308 }, -{ 0xA309, 0xA309, 0xA309 }, -{ 0xA30A, 0xA30A, 0xA30A }, -{ 0xA30B, 0xA30B, 0xA30B }, -{ 0xA30C, 0xA30C, 0xA30C }, -{ 0xA30D, 0xA30D, 0xA30D }, -{ 0xA30E, 0xA30E, 0xA30E }, -{ 0xA30F, 0xA30F, 0xA30F }, -{ 0xA310, 0xA310, 0xA310 }, -{ 0xA311, 0xA311, 0xA311 }, -{ 0xA312, 0xA312, 0xA312 }, -{ 0xA313, 0xA313, 0xA313 }, -{ 0xA314, 0xA314, 0xA314 }, -{ 0xA315, 0xA315, 0xA315 }, -{ 0xA316, 0xA316, 0xA316 }, -{ 0xA317, 0xA317, 0xA317 }, -{ 0xA318, 0xA318, 0xA318 }, -{ 0xA319, 0xA319, 0xA319 }, -{ 0xA31A, 0xA31A, 0xA31A }, -{ 0xA31B, 0xA31B, 0xA31B }, -{ 0xA31C, 0xA31C, 0xA31C }, -{ 0xA31D, 0xA31D, 0xA31D }, -{ 0xA31E, 0xA31E, 0xA31E }, -{ 0xA31F, 0xA31F, 0xA31F }, -{ 0xA320, 0xA320, 0xA320 }, -{ 0xA321, 0xA321, 0xA321 }, -{ 0xA322, 0xA322, 0xA322 }, -{ 0xA323, 0xA323, 0xA323 }, -{ 0xA324, 0xA324, 0xA324 }, -{ 0xA325, 0xA325, 0xA325 }, -{ 0xA326, 0xA326, 0xA326 }, -{ 0xA327, 0xA327, 0xA327 }, -{ 0xA328, 0xA328, 0xA328 }, -{ 0xA329, 0xA329, 0xA329 }, -{ 0xA32A, 0xA32A, 0xA32A }, -{ 0xA32B, 0xA32B, 0xA32B }, -{ 0xA32C, 0xA32C, 0xA32C }, -{ 0xA32D, 0xA32D, 0xA32D }, -{ 0xA32E, 0xA32E, 0xA32E }, -{ 0xA32F, 0xA32F, 0xA32F }, -{ 0xA330, 0xA330, 0xA330 }, -{ 0xA331, 0xA331, 0xA331 }, -{ 0xA332, 0xA332, 0xA332 }, -{ 0xA333, 0xA333, 0xA333 }, -{ 0xA334, 0xA334, 0xA334 }, -{ 0xA335, 0xA335, 0xA335 }, -{ 0xA336, 0xA336, 0xA336 }, -{ 0xA337, 0xA337, 0xA337 }, -{ 0xA338, 0xA338, 0xA338 }, -{ 0xA339, 0xA339, 0xA339 }, -{ 0xA33A, 0xA33A, 0xA33A }, -{ 0xA33B, 0xA33B, 0xA33B }, -{ 0xA33C, 0xA33C, 0xA33C }, -{ 0xA33D, 0xA33D, 0xA33D }, -{ 0xA33E, 0xA33E, 0xA33E }, -{ 0xA33F, 0xA33F, 0xA33F }, -{ 0xA340, 0xA340, 0xA340 }, -{ 0xA341, 0xA341, 0xA341 }, -{ 0xA342, 0xA342, 0xA342 }, -{ 0xA343, 0xA343, 0xA343 }, -{ 0xA344, 0xA344, 0xA344 }, -{ 0xA345, 0xA345, 0xA345 }, -{ 0xA346, 0xA346, 0xA346 }, -{ 0xA347, 0xA347, 0xA347 }, -{ 0xA348, 0xA348, 0xA348 }, -{ 0xA349, 0xA349, 0xA349 }, -{ 0xA34A, 0xA34A, 0xA34A }, -{ 0xA34B, 0xA34B, 0xA34B }, -{ 0xA34C, 0xA34C, 0xA34C }, -{ 0xA34D, 0xA34D, 0xA34D }, -{ 0xA34E, 0xA34E, 0xA34E }, -{ 0xA34F, 0xA34F, 0xA34F }, -{ 0xA350, 0xA350, 0xA350 }, -{ 0xA351, 0xA351, 0xA351 }, -{ 0xA352, 0xA352, 0xA352 }, -{ 0xA353, 0xA353, 0xA353 }, -{ 0xA354, 0xA354, 0xA354 }, -{ 0xA355, 0xA355, 0xA355 }, -{ 0xA356, 0xA356, 0xA356 }, -{ 0xA357, 0xA357, 0xA357 }, -{ 0xA358, 0xA358, 0xA358 }, -{ 0xA359, 0xA359, 0xA359 }, -{ 0xA35A, 0xA35A, 0xA35A }, -{ 0xA35B, 0xA35B, 0xA35B }, -{ 0xA35C, 0xA35C, 0xA35C }, -{ 0xA35D, 0xA35D, 0xA35D }, -{ 0xA35E, 0xA35E, 0xA35E }, -{ 0xA35F, 0xA35F, 0xA35F }, -{ 0xA360, 0xA360, 0xA360 }, -{ 0xA361, 0xA361, 0xA361 }, -{ 0xA362, 0xA362, 0xA362 }, -{ 0xA363, 0xA363, 0xA363 }, -{ 0xA364, 0xA364, 0xA364 }, -{ 0xA365, 0xA365, 0xA365 }, -{ 0xA366, 0xA366, 0xA366 }, -{ 0xA367, 0xA367, 0xA367 }, -{ 0xA368, 0xA368, 0xA368 }, -{ 0xA369, 0xA369, 0xA369 }, -{ 0xA36A, 0xA36A, 0xA36A }, -{ 0xA36B, 0xA36B, 0xA36B }, -{ 0xA36C, 0xA36C, 0xA36C }, -{ 0xA36D, 0xA36D, 0xA36D }, -{ 0xA36E, 0xA36E, 0xA36E }, -{ 0xA36F, 0xA36F, 0xA36F }, -{ 0xA370, 0xA370, 0xA370 }, -{ 0xA371, 0xA371, 0xA371 }, -{ 0xA372, 0xA372, 0xA372 }, -{ 0xA373, 0xA373, 0xA373 }, -{ 0xA374, 0xA374, 0xA374 }, -{ 0xA375, 0xA375, 0xA375 }, -{ 0xA376, 0xA376, 0xA376 }, -{ 0xA377, 0xA377, 0xA377 }, -{ 0xA378, 0xA378, 0xA378 }, -{ 0xA379, 0xA379, 0xA379 }, -{ 0xA37A, 0xA37A, 0xA37A }, -{ 0xA37B, 0xA37B, 0xA37B }, -{ 0xA37C, 0xA37C, 0xA37C }, -{ 0xA37D, 0xA37D, 0xA37D }, -{ 0xA37E, 0xA37E, 0xA37E }, -{ 0xA37F, 0xA37F, 0xA37F }, -{ 0xA380, 0xA380, 0xA380 }, -{ 0xA381, 0xA381, 0xA381 }, -{ 0xA382, 0xA382, 0xA382 }, -{ 0xA383, 0xA383, 0xA383 }, -{ 0xA384, 0xA384, 0xA384 }, -{ 0xA385, 0xA385, 0xA385 }, -{ 0xA386, 0xA386, 0xA386 }, -{ 0xA387, 0xA387, 0xA387 }, -{ 0xA388, 0xA388, 0xA388 }, -{ 0xA389, 0xA389, 0xA389 }, -{ 0xA38A, 0xA38A, 0xA38A }, -{ 0xA38B, 0xA38B, 0xA38B }, -{ 0xA38C, 0xA38C, 0xA38C }, -{ 0xA38D, 0xA38D, 0xA38D }, -{ 0xA38E, 0xA38E, 0xA38E }, -{ 0xA38F, 0xA38F, 0xA38F }, -{ 0xA390, 0xA390, 0xA390 }, -{ 0xA391, 0xA391, 0xA391 }, -{ 0xA392, 0xA392, 0xA392 }, -{ 0xA393, 0xA393, 0xA393 }, -{ 0xA394, 0xA394, 0xA394 }, -{ 0xA395, 0xA395, 0xA395 }, -{ 0xA396, 0xA396, 0xA396 }, -{ 0xA397, 0xA397, 0xA397 }, -{ 0xA398, 0xA398, 0xA398 }, -{ 0xA399, 0xA399, 0xA399 }, -{ 0xA39A, 0xA39A, 0xA39A }, -{ 0xA39B, 0xA39B, 0xA39B }, -{ 0xA39C, 0xA39C, 0xA39C }, -{ 0xA39D, 0xA39D, 0xA39D }, -{ 0xA39E, 0xA39E, 0xA39E }, -{ 0xA39F, 0xA39F, 0xA39F }, -{ 0xA3A0, 0xA3A0, 0xA3A0 }, -{ 0xA3A1, 0xA3A1, 0xA3A1 }, -{ 0xA3A2, 0xA3A2, 0xA3A2 }, -{ 0xA3A3, 0xA3A3, 0xA3A3 }, -{ 0xA3A4, 0xA3A4, 0xA3A4 }, -{ 0xA3A5, 0xA3A5, 0xA3A5 }, -{ 0xA3A6, 0xA3A6, 0xA3A6 }, -{ 0xA3A7, 0xA3A7, 0xA3A7 }, -{ 0xA3A8, 0xA3A8, 0xA3A8 }, -{ 0xA3A9, 0xA3A9, 0xA3A9 }, -{ 0xA3AA, 0xA3AA, 0xA3AA }, -{ 0xA3AB, 0xA3AB, 0xA3AB }, -{ 0xA3AC, 0xA3AC, 0xA3AC }, -{ 0xA3AD, 0xA3AD, 0xA3AD }, -{ 0xA3AE, 0xA3AE, 0xA3AE }, -{ 0xA3AF, 0xA3AF, 0xA3AF }, -{ 0xA3B0, 0xA3B0, 0xA3B0 }, -{ 0xA3B1, 0xA3B1, 0xA3B1 }, -{ 0xA3B2, 0xA3B2, 0xA3B2 }, -{ 0xA3B3, 0xA3B3, 0xA3B3 }, -{ 0xA3B4, 0xA3B4, 0xA3B4 }, -{ 0xA3B5, 0xA3B5, 0xA3B5 }, -{ 0xA3B6, 0xA3B6, 0xA3B6 }, -{ 0xA3B7, 0xA3B7, 0xA3B7 }, -{ 0xA3B8, 0xA3B8, 0xA3B8 }, -{ 0xA3B9, 0xA3B9, 0xA3B9 }, -{ 0xA3BA, 0xA3BA, 0xA3BA }, -{ 0xA3BB, 0xA3BB, 0xA3BB }, -{ 0xA3BC, 0xA3BC, 0xA3BC }, -{ 0xA3BD, 0xA3BD, 0xA3BD }, -{ 0xA3BE, 0xA3BE, 0xA3BE }, -{ 0xA3BF, 0xA3BF, 0xA3BF }, -{ 0xA3C0, 0xA3C0, 0xA3C0 }, -{ 0xA3C1, 0xA3C1, 0xA3C1 }, -{ 0xA3C2, 0xA3C2, 0xA3C2 }, -{ 0xA3C3, 0xA3C3, 0xA3C3 }, -{ 0xA3C4, 0xA3C4, 0xA3C4 }, -{ 0xA3C5, 0xA3C5, 0xA3C5 }, -{ 0xA3C6, 0xA3C6, 0xA3C6 }, -{ 0xA3C7, 0xA3C7, 0xA3C7 }, -{ 0xA3C8, 0xA3C8, 0xA3C8 }, -{ 0xA3C9, 0xA3C9, 0xA3C9 }, -{ 0xA3CA, 0xA3CA, 0xA3CA }, -{ 0xA3CB, 0xA3CB, 0xA3CB }, -{ 0xA3CC, 0xA3CC, 0xA3CC }, -{ 0xA3CD, 0xA3CD, 0xA3CD }, -{ 0xA3CE, 0xA3CE, 0xA3CE }, -{ 0xA3CF, 0xA3CF, 0xA3CF }, -{ 0xA3D0, 0xA3D0, 0xA3D0 }, -{ 0xA3D1, 0xA3D1, 0xA3D1 }, -{ 0xA3D2, 0xA3D2, 0xA3D2 }, -{ 0xA3D3, 0xA3D3, 0xA3D3 }, -{ 0xA3D4, 0xA3D4, 0xA3D4 }, -{ 0xA3D5, 0xA3D5, 0xA3D5 }, -{ 0xA3D6, 0xA3D6, 0xA3D6 }, -{ 0xA3D7, 0xA3D7, 0xA3D7 }, -{ 0xA3D8, 0xA3D8, 0xA3D8 }, -{ 0xA3D9, 0xA3D9, 0xA3D9 }, -{ 0xA3DA, 0xA3DA, 0xA3DA }, -{ 0xA3DB, 0xA3DB, 0xA3DB }, -{ 0xA3DC, 0xA3DC, 0xA3DC }, -{ 0xA3DD, 0xA3DD, 0xA3DD }, -{ 0xA3DE, 0xA3DE, 0xA3DE }, -{ 0xA3DF, 0xA3DF, 0xA3DF }, -{ 0xA3E0, 0xA3E0, 0xA3E0 }, -{ 0xA3E1, 0xA3E1, 0xA3E1 }, -{ 0xA3E2, 0xA3E2, 0xA3E2 }, -{ 0xA3E3, 0xA3E3, 0xA3E3 }, -{ 0xA3E4, 0xA3E4, 0xA3E4 }, -{ 0xA3E5, 0xA3E5, 0xA3E5 }, -{ 0xA3E6, 0xA3E6, 0xA3E6 }, -{ 0xA3E7, 0xA3E7, 0xA3E7 }, -{ 0xA3E8, 0xA3E8, 0xA3E8 }, -{ 0xA3E9, 0xA3E9, 0xA3E9 }, -{ 0xA3EA, 0xA3EA, 0xA3EA }, -{ 0xA3EB, 0xA3EB, 0xA3EB }, -{ 0xA3EC, 0xA3EC, 0xA3EC }, -{ 0xA3ED, 0xA3ED, 0xA3ED }, -{ 0xA3EE, 0xA3EE, 0xA3EE }, -{ 0xA3EF, 0xA3EF, 0xA3EF }, -{ 0xA3F0, 0xA3F0, 0xA3F0 }, -{ 0xA3F1, 0xA3F1, 0xA3F1 }, -{ 0xA3F2, 0xA3F2, 0xA3F2 }, -{ 0xA3F3, 0xA3F3, 0xA3F3 }, -{ 0xA3F4, 0xA3F4, 0xA3F4 }, -{ 0xA3F5, 0xA3F5, 0xA3F5 }, -{ 0xA3F6, 0xA3F6, 0xA3F6 }, -{ 0xA3F7, 0xA3F7, 0xA3F7 }, -{ 0xA3F8, 0xA3F8, 0xA3F8 }, -{ 0xA3F9, 0xA3F9, 0xA3F9 }, -{ 0xA3FA, 0xA3FA, 0xA3FA }, -{ 0xA3FB, 0xA3FB, 0xA3FB }, -{ 0xA3FC, 0xA3FC, 0xA3FC }, -{ 0xA3FD, 0xA3FD, 0xA3FD }, -{ 0xA3FE, 0xA3FE, 0xA3FE }, -{ 0xA3FF, 0xA3FF, 0xA3FF }, -{ 0xA400, 0xA400, 0xA400 }, -{ 0xA401, 0xA401, 0xA401 }, -{ 0xA402, 0xA402, 0xA402 }, -{ 0xA403, 0xA403, 0xA403 }, -{ 0xA404, 0xA404, 0xA404 }, -{ 0xA405, 0xA405, 0xA405 }, -{ 0xA406, 0xA406, 0xA406 }, -{ 0xA407, 0xA407, 0xA407 }, -{ 0xA408, 0xA408, 0xA408 }, -{ 0xA409, 0xA409, 0xA409 }, -{ 0xA40A, 0xA40A, 0xA40A }, -{ 0xA40B, 0xA40B, 0xA40B }, -{ 0xA40C, 0xA40C, 0xA40C }, -{ 0xA40D, 0xA40D, 0xA40D }, -{ 0xA40E, 0xA40E, 0xA40E }, -{ 0xA40F, 0xA40F, 0xA40F }, -{ 0xA410, 0xA410, 0xA410 }, -{ 0xA411, 0xA411, 0xA411 }, -{ 0xA412, 0xA412, 0xA412 }, -{ 0xA413, 0xA413, 0xA413 }, -{ 0xA414, 0xA414, 0xA414 }, -{ 0xA415, 0xA415, 0xA415 }, -{ 0xA416, 0xA416, 0xA416 }, -{ 0xA417, 0xA417, 0xA417 }, -{ 0xA418, 0xA418, 0xA418 }, -{ 0xA419, 0xA419, 0xA419 }, -{ 0xA41A, 0xA41A, 0xA41A }, -{ 0xA41B, 0xA41B, 0xA41B }, -{ 0xA41C, 0xA41C, 0xA41C }, -{ 0xA41D, 0xA41D, 0xA41D }, -{ 0xA41E, 0xA41E, 0xA41E }, -{ 0xA41F, 0xA41F, 0xA41F }, -{ 0xA420, 0xA420, 0xA420 }, -{ 0xA421, 0xA421, 0xA421 }, -{ 0xA422, 0xA422, 0xA422 }, -{ 0xA423, 0xA423, 0xA423 }, -{ 0xA424, 0xA424, 0xA424 }, -{ 0xA425, 0xA425, 0xA425 }, -{ 0xA426, 0xA426, 0xA426 }, -{ 0xA427, 0xA427, 0xA427 }, -{ 0xA428, 0xA428, 0xA428 }, -{ 0xA429, 0xA429, 0xA429 }, -{ 0xA42A, 0xA42A, 0xA42A }, -{ 0xA42B, 0xA42B, 0xA42B }, -{ 0xA42C, 0xA42C, 0xA42C }, -{ 0xA42D, 0xA42D, 0xA42D }, -{ 0xA42E, 0xA42E, 0xA42E }, -{ 0xA42F, 0xA42F, 0xA42F }, -{ 0xA430, 0xA430, 0xA430 }, -{ 0xA431, 0xA431, 0xA431 }, -{ 0xA432, 0xA432, 0xA432 }, -{ 0xA433, 0xA433, 0xA433 }, -{ 0xA434, 0xA434, 0xA434 }, -{ 0xA435, 0xA435, 0xA435 }, -{ 0xA436, 0xA436, 0xA436 }, -{ 0xA437, 0xA437, 0xA437 }, -{ 0xA438, 0xA438, 0xA438 }, -{ 0xA439, 0xA439, 0xA439 }, -{ 0xA43A, 0xA43A, 0xA43A }, -{ 0xA43B, 0xA43B, 0xA43B }, -{ 0xA43C, 0xA43C, 0xA43C }, -{ 0xA43D, 0xA43D, 0xA43D }, -{ 0xA43E, 0xA43E, 0xA43E }, -{ 0xA43F, 0xA43F, 0xA43F }, -{ 0xA440, 0xA440, 0xA440 }, -{ 0xA441, 0xA441, 0xA441 }, -{ 0xA442, 0xA442, 0xA442 }, -{ 0xA443, 0xA443, 0xA443 }, -{ 0xA444, 0xA444, 0xA444 }, -{ 0xA445, 0xA445, 0xA445 }, -{ 0xA446, 0xA446, 0xA446 }, -{ 0xA447, 0xA447, 0xA447 }, -{ 0xA448, 0xA448, 0xA448 }, -{ 0xA449, 0xA449, 0xA449 }, -{ 0xA44A, 0xA44A, 0xA44A }, -{ 0xA44B, 0xA44B, 0xA44B }, -{ 0xA44C, 0xA44C, 0xA44C }, -{ 0xA44D, 0xA44D, 0xA44D }, -{ 0xA44E, 0xA44E, 0xA44E }, -{ 0xA44F, 0xA44F, 0xA44F }, -{ 0xA450, 0xA450, 0xA450 }, -{ 0xA451, 0xA451, 0xA451 }, -{ 0xA452, 0xA452, 0xA452 }, -{ 0xA453, 0xA453, 0xA453 }, -{ 0xA454, 0xA454, 0xA454 }, -{ 0xA455, 0xA455, 0xA455 }, -{ 0xA456, 0xA456, 0xA456 }, -{ 0xA457, 0xA457, 0xA457 }, -{ 0xA458, 0xA458, 0xA458 }, -{ 0xA459, 0xA459, 0xA459 }, -{ 0xA45A, 0xA45A, 0xA45A }, -{ 0xA45B, 0xA45B, 0xA45B }, -{ 0xA45C, 0xA45C, 0xA45C }, -{ 0xA45D, 0xA45D, 0xA45D }, -{ 0xA45E, 0xA45E, 0xA45E }, -{ 0xA45F, 0xA45F, 0xA45F }, -{ 0xA460, 0xA460, 0xA460 }, -{ 0xA461, 0xA461, 0xA461 }, -{ 0xA462, 0xA462, 0xA462 }, -{ 0xA463, 0xA463, 0xA463 }, -{ 0xA464, 0xA464, 0xA464 }, -{ 0xA465, 0xA465, 0xA465 }, -{ 0xA466, 0xA466, 0xA466 }, -{ 0xA467, 0xA467, 0xA467 }, -{ 0xA468, 0xA468, 0xA468 }, -{ 0xA469, 0xA469, 0xA469 }, -{ 0xA46A, 0xA46A, 0xA46A }, -{ 0xA46B, 0xA46B, 0xA46B }, -{ 0xA46C, 0xA46C, 0xA46C }, -{ 0xA46D, 0xA46D, 0xA46D }, -{ 0xA46E, 0xA46E, 0xA46E }, -{ 0xA46F, 0xA46F, 0xA46F }, -{ 0xA470, 0xA470, 0xA470 }, -{ 0xA471, 0xA471, 0xA471 }, -{ 0xA472, 0xA472, 0xA472 }, -{ 0xA473, 0xA473, 0xA473 }, -{ 0xA474, 0xA474, 0xA474 }, -{ 0xA475, 0xA475, 0xA475 }, -{ 0xA476, 0xA476, 0xA476 }, -{ 0xA477, 0xA477, 0xA477 }, -{ 0xA478, 0xA478, 0xA478 }, -{ 0xA479, 0xA479, 0xA479 }, -{ 0xA47A, 0xA47A, 0xA47A }, -{ 0xA47B, 0xA47B, 0xA47B }, -{ 0xA47C, 0xA47C, 0xA47C }, -{ 0xA47D, 0xA47D, 0xA47D }, -{ 0xA47E, 0xA47E, 0xA47E }, -{ 0xA47F, 0xA47F, 0xA47F }, -{ 0xA480, 0xA480, 0xA480 }, -{ 0xA481, 0xA481, 0xA481 }, -{ 0xA482, 0xA482, 0xA482 }, -{ 0xA483, 0xA483, 0xA483 }, -{ 0xA484, 0xA484, 0xA484 }, -{ 0xA485, 0xA485, 0xA485 }, -{ 0xA486, 0xA486, 0xA486 }, -{ 0xA487, 0xA487, 0xA487 }, -{ 0xA488, 0xA488, 0xA488 }, -{ 0xA489, 0xA489, 0xA489 }, -{ 0xA48A, 0xA48A, 0xA48A }, -{ 0xA48B, 0xA48B, 0xA48B }, -{ 0xA48C, 0xA48C, 0xA48C }, -{ 0xA800, 0xA800, 0xA800 }, -{ 0xA801, 0xA801, 0xA801 }, -{ 0xA803, 0xA803, 0xA803 }, -{ 0xA804, 0xA804, 0xA804 }, -{ 0xA805, 0xA805, 0xA805 }, -{ 0xA806, 0xA806, 0xA806 }, -{ 0xA807, 0xA807, 0xA807 }, -{ 0xA808, 0xA808, 0xA808 }, -{ 0xA809, 0xA809, 0xA809 }, -{ 0xA80A, 0xA80A, 0xA80A }, -{ 0xA80B, 0xA80B, 0xA80B }, -{ 0xA80C, 0xA80C, 0xA80C }, -{ 0xA80D, 0xA80D, 0xA80D }, -{ 0xA80E, 0xA80E, 0xA80E }, -{ 0xA80F, 0xA80F, 0xA80F }, -{ 0xA810, 0xA810, 0xA810 }, -{ 0xA811, 0xA811, 0xA811 }, -{ 0xA812, 0xA812, 0xA812 }, -{ 0xA813, 0xA813, 0xA813 }, -{ 0xA814, 0xA814, 0xA814 }, -{ 0xA815, 0xA815, 0xA815 }, -{ 0xA816, 0xA816, 0xA816 }, -{ 0xA817, 0xA817, 0xA817 }, -{ 0xA818, 0xA818, 0xA818 }, -{ 0xA819, 0xA819, 0xA819 }, -{ 0xA81A, 0xA81A, 0xA81A }, -{ 0xA81B, 0xA81B, 0xA81B }, -{ 0xA81C, 0xA81C, 0xA81C }, -{ 0xA81D, 0xA81D, 0xA81D }, -{ 0xA81E, 0xA81E, 0xA81E }, -{ 0xA81F, 0xA81F, 0xA81F }, -{ 0xA820, 0xA820, 0xA820 }, -{ 0xA821, 0xA821, 0xA821 }, -{ 0xA822, 0xA822, 0xA822 }, -{ 0xA825, 0xA825, 0xA825 }, -{ 0xA826, 0xA826, 0xA826 }, -{ 0xAC00, 0xAC00, 0xAC00 }, -{ 0xAC01, 0xAC01, 0xAC01 }, -{ 0xAC02, 0xAC02, 0xAC02 }, -{ 0xAC03, 0xAC03, 0xAC03 }, -{ 0xAC04, 0xAC04, 0xAC04 }, -{ 0xAC05, 0xAC05, 0xAC05 }, -{ 0xAC06, 0xAC06, 0xAC06 }, -{ 0xAC07, 0xAC07, 0xAC07 }, -{ 0xAC08, 0xAC08, 0xAC08 }, -{ 0xAC09, 0xAC09, 0xAC09 }, -{ 0xAC0A, 0xAC0A, 0xAC0A }, -{ 0xAC0B, 0xAC0B, 0xAC0B }, -{ 0xAC0C, 0xAC0C, 0xAC0C }, -{ 0xAC0D, 0xAC0D, 0xAC0D }, -{ 0xAC0E, 0xAC0E, 0xAC0E }, -{ 0xAC0F, 0xAC0F, 0xAC0F }, -{ 0xAC10, 0xAC10, 0xAC10 }, -{ 0xAC11, 0xAC11, 0xAC11 }, -{ 0xAC12, 0xAC12, 0xAC12 }, -{ 0xAC13, 0xAC13, 0xAC13 }, -{ 0xAC14, 0xAC14, 0xAC14 }, -{ 0xAC15, 0xAC15, 0xAC15 }, -{ 0xAC16, 0xAC16, 0xAC16 }, -{ 0xAC17, 0xAC17, 0xAC17 }, -{ 0xAC18, 0xAC18, 0xAC18 }, -{ 0xAC19, 0xAC19, 0xAC19 }, -{ 0xAC1A, 0xAC1A, 0xAC1A }, -{ 0xAC1B, 0xAC1B, 0xAC1B }, -{ 0xAC1C, 0xAC1C, 0xAC1C }, -{ 0xAC1D, 0xAC1D, 0xAC1D }, -{ 0xAC1E, 0xAC1E, 0xAC1E }, -{ 0xAC1F, 0xAC1F, 0xAC1F }, -{ 0xAC20, 0xAC20, 0xAC20 }, -{ 0xAC21, 0xAC21, 0xAC21 }, -{ 0xAC22, 0xAC22, 0xAC22 }, -{ 0xAC23, 0xAC23, 0xAC23 }, -{ 0xAC24, 0xAC24, 0xAC24 }, -{ 0xAC25, 0xAC25, 0xAC25 }, -{ 0xAC26, 0xAC26, 0xAC26 }, -{ 0xAC27, 0xAC27, 0xAC27 }, -{ 0xAC28, 0xAC28, 0xAC28 }, -{ 0xAC29, 0xAC29, 0xAC29 }, -{ 0xAC2A, 0xAC2A, 0xAC2A }, -{ 0xAC2B, 0xAC2B, 0xAC2B }, -{ 0xAC2C, 0xAC2C, 0xAC2C }, -{ 0xAC2D, 0xAC2D, 0xAC2D }, -{ 0xAC2E, 0xAC2E, 0xAC2E }, -{ 0xAC2F, 0xAC2F, 0xAC2F }, -{ 0xAC30, 0xAC30, 0xAC30 }, -{ 0xAC31, 0xAC31, 0xAC31 }, -{ 0xAC32, 0xAC32, 0xAC32 }, -{ 0xAC33, 0xAC33, 0xAC33 }, -{ 0xAC34, 0xAC34, 0xAC34 }, -{ 0xAC35, 0xAC35, 0xAC35 }, -{ 0xAC36, 0xAC36, 0xAC36 }, -{ 0xAC37, 0xAC37, 0xAC37 }, -{ 0xAC38, 0xAC38, 0xAC38 }, -{ 0xAC39, 0xAC39, 0xAC39 }, -{ 0xAC3A, 0xAC3A, 0xAC3A }, -{ 0xAC3B, 0xAC3B, 0xAC3B }, -{ 0xAC3C, 0xAC3C, 0xAC3C }, -{ 0xAC3D, 0xAC3D, 0xAC3D }, -{ 0xAC3E, 0xAC3E, 0xAC3E }, -{ 0xAC3F, 0xAC3F, 0xAC3F }, -{ 0xAC40, 0xAC40, 0xAC40 }, -{ 0xAC41, 0xAC41, 0xAC41 }, -{ 0xAC42, 0xAC42, 0xAC42 }, -{ 0xAC43, 0xAC43, 0xAC43 }, -{ 0xAC44, 0xAC44, 0xAC44 }, -{ 0xAC45, 0xAC45, 0xAC45 }, -{ 0xAC46, 0xAC46, 0xAC46 }, -{ 0xAC47, 0xAC47, 0xAC47 }, -{ 0xAC48, 0xAC48, 0xAC48 }, -{ 0xAC49, 0xAC49, 0xAC49 }, -{ 0xAC4A, 0xAC4A, 0xAC4A }, -{ 0xAC4B, 0xAC4B, 0xAC4B }, -{ 0xAC4C, 0xAC4C, 0xAC4C }, -{ 0xAC4D, 0xAC4D, 0xAC4D }, -{ 0xAC4E, 0xAC4E, 0xAC4E }, -{ 0xAC4F, 0xAC4F, 0xAC4F }, -{ 0xAC50, 0xAC50, 0xAC50 }, -{ 0xAC51, 0xAC51, 0xAC51 }, -{ 0xAC52, 0xAC52, 0xAC52 }, -{ 0xAC53, 0xAC53, 0xAC53 }, -{ 0xAC54, 0xAC54, 0xAC54 }, -{ 0xAC55, 0xAC55, 0xAC55 }, -{ 0xAC56, 0xAC56, 0xAC56 }, -{ 0xAC57, 0xAC57, 0xAC57 }, -{ 0xAC58, 0xAC58, 0xAC58 }, -{ 0xAC59, 0xAC59, 0xAC59 }, -{ 0xAC5A, 0xAC5A, 0xAC5A }, -{ 0xAC5B, 0xAC5B, 0xAC5B }, -{ 0xAC5C, 0xAC5C, 0xAC5C }, -{ 0xAC5D, 0xAC5D, 0xAC5D }, -{ 0xAC5E, 0xAC5E, 0xAC5E }, -{ 0xAC5F, 0xAC5F, 0xAC5F }, -{ 0xAC60, 0xAC60, 0xAC60 }, -{ 0xAC61, 0xAC61, 0xAC61 }, -{ 0xAC62, 0xAC62, 0xAC62 }, -{ 0xAC63, 0xAC63, 0xAC63 }, -{ 0xAC64, 0xAC64, 0xAC64 }, -{ 0xAC65, 0xAC65, 0xAC65 }, -{ 0xAC66, 0xAC66, 0xAC66 }, -{ 0xAC67, 0xAC67, 0xAC67 }, -{ 0xAC68, 0xAC68, 0xAC68 }, -{ 0xAC69, 0xAC69, 0xAC69 }, -{ 0xAC6A, 0xAC6A, 0xAC6A }, -{ 0xAC6B, 0xAC6B, 0xAC6B }, -{ 0xAC6C, 0xAC6C, 0xAC6C }, -{ 0xAC6D, 0xAC6D, 0xAC6D }, -{ 0xAC6E, 0xAC6E, 0xAC6E }, -{ 0xAC6F, 0xAC6F, 0xAC6F }, -{ 0xAC70, 0xAC70, 0xAC70 }, -{ 0xAC71, 0xAC71, 0xAC71 }, -{ 0xAC72, 0xAC72, 0xAC72 }, -{ 0xAC73, 0xAC73, 0xAC73 }, -{ 0xAC74, 0xAC74, 0xAC74 }, -{ 0xAC75, 0xAC75, 0xAC75 }, -{ 0xAC76, 0xAC76, 0xAC76 }, -{ 0xAC77, 0xAC77, 0xAC77 }, -{ 0xAC78, 0xAC78, 0xAC78 }, -{ 0xAC79, 0xAC79, 0xAC79 }, -{ 0xAC7A, 0xAC7A, 0xAC7A }, -{ 0xAC7B, 0xAC7B, 0xAC7B }, -{ 0xAC7C, 0xAC7C, 0xAC7C }, -{ 0xAC7D, 0xAC7D, 0xAC7D }, -{ 0xAC7E, 0xAC7E, 0xAC7E }, -{ 0xAC7F, 0xAC7F, 0xAC7F }, -{ 0xAC80, 0xAC80, 0xAC80 }, -{ 0xAC81, 0xAC81, 0xAC81 }, -{ 0xAC82, 0xAC82, 0xAC82 }, -{ 0xAC83, 0xAC83, 0xAC83 }, -{ 0xAC84, 0xAC84, 0xAC84 }, -{ 0xAC85, 0xAC85, 0xAC85 }, -{ 0xAC86, 0xAC86, 0xAC86 }, -{ 0xAC87, 0xAC87, 0xAC87 }, -{ 0xAC88, 0xAC88, 0xAC88 }, -{ 0xAC89, 0xAC89, 0xAC89 }, -{ 0xAC8A, 0xAC8A, 0xAC8A }, -{ 0xAC8B, 0xAC8B, 0xAC8B }, -{ 0xAC8C, 0xAC8C, 0xAC8C }, -{ 0xAC8D, 0xAC8D, 0xAC8D }, -{ 0xAC8E, 0xAC8E, 0xAC8E }, -{ 0xAC8F, 0xAC8F, 0xAC8F }, -{ 0xAC90, 0xAC90, 0xAC90 }, -{ 0xAC91, 0xAC91, 0xAC91 }, -{ 0xAC92, 0xAC92, 0xAC92 }, -{ 0xAC93, 0xAC93, 0xAC93 }, -{ 0xAC94, 0xAC94, 0xAC94 }, -{ 0xAC95, 0xAC95, 0xAC95 }, -{ 0xAC96, 0xAC96, 0xAC96 }, -{ 0xAC97, 0xAC97, 0xAC97 }, -{ 0xAC98, 0xAC98, 0xAC98 }, -{ 0xAC99, 0xAC99, 0xAC99 }, -{ 0xAC9A, 0xAC9A, 0xAC9A }, -{ 0xAC9B, 0xAC9B, 0xAC9B }, -{ 0xAC9C, 0xAC9C, 0xAC9C }, -{ 0xAC9D, 0xAC9D, 0xAC9D }, -{ 0xAC9E, 0xAC9E, 0xAC9E }, -{ 0xAC9F, 0xAC9F, 0xAC9F }, -{ 0xACA0, 0xACA0, 0xACA0 }, -{ 0xACA1, 0xACA1, 0xACA1 }, -{ 0xACA2, 0xACA2, 0xACA2 }, -{ 0xACA3, 0xACA3, 0xACA3 }, -{ 0xACA4, 0xACA4, 0xACA4 }, -{ 0xACA5, 0xACA5, 0xACA5 }, -{ 0xACA6, 0xACA6, 0xACA6 }, -{ 0xACA7, 0xACA7, 0xACA7 }, -{ 0xACA8, 0xACA8, 0xACA8 }, -{ 0xACA9, 0xACA9, 0xACA9 }, -{ 0xACAA, 0xACAA, 0xACAA }, -{ 0xACAB, 0xACAB, 0xACAB }, -{ 0xACAC, 0xACAC, 0xACAC }, -{ 0xACAD, 0xACAD, 0xACAD }, -{ 0xACAE, 0xACAE, 0xACAE }, -{ 0xACAF, 0xACAF, 0xACAF }, -{ 0xACB0, 0xACB0, 0xACB0 }, -{ 0xACB1, 0xACB1, 0xACB1 }, -{ 0xACB2, 0xACB2, 0xACB2 }, -{ 0xACB3, 0xACB3, 0xACB3 }, -{ 0xACB4, 0xACB4, 0xACB4 }, -{ 0xACB5, 0xACB5, 0xACB5 }, -{ 0xACB6, 0xACB6, 0xACB6 }, -{ 0xACB7, 0xACB7, 0xACB7 }, -{ 0xACB8, 0xACB8, 0xACB8 }, -{ 0xACB9, 0xACB9, 0xACB9 }, -{ 0xACBA, 0xACBA, 0xACBA }, -{ 0xACBB, 0xACBB, 0xACBB }, -{ 0xACBC, 0xACBC, 0xACBC }, -{ 0xACBD, 0xACBD, 0xACBD }, -{ 0xACBE, 0xACBE, 0xACBE }, -{ 0xACBF, 0xACBF, 0xACBF }, -{ 0xACC0, 0xACC0, 0xACC0 }, -{ 0xACC1, 0xACC1, 0xACC1 }, -{ 0xACC2, 0xACC2, 0xACC2 }, -{ 0xACC3, 0xACC3, 0xACC3 }, -{ 0xACC4, 0xACC4, 0xACC4 }, -{ 0xACC5, 0xACC5, 0xACC5 }, -{ 0xACC6, 0xACC6, 0xACC6 }, -{ 0xACC7, 0xACC7, 0xACC7 }, -{ 0xACC8, 0xACC8, 0xACC8 }, -{ 0xACC9, 0xACC9, 0xACC9 }, -{ 0xACCA, 0xACCA, 0xACCA }, -{ 0xACCB, 0xACCB, 0xACCB }, -{ 0xACCC, 0xACCC, 0xACCC }, -{ 0xACCD, 0xACCD, 0xACCD }, -{ 0xACCE, 0xACCE, 0xACCE }, -{ 0xACCF, 0xACCF, 0xACCF }, -{ 0xACD0, 0xACD0, 0xACD0 }, -{ 0xACD1, 0xACD1, 0xACD1 }, -{ 0xACD2, 0xACD2, 0xACD2 }, -{ 0xACD3, 0xACD3, 0xACD3 }, -{ 0xACD4, 0xACD4, 0xACD4 }, -{ 0xACD5, 0xACD5, 0xACD5 }, -{ 0xACD6, 0xACD6, 0xACD6 }, -{ 0xACD7, 0xACD7, 0xACD7 }, -{ 0xACD8, 0xACD8, 0xACD8 }, -{ 0xACD9, 0xACD9, 0xACD9 }, -{ 0xACDA, 0xACDA, 0xACDA }, -{ 0xACDB, 0xACDB, 0xACDB }, -{ 0xACDC, 0xACDC, 0xACDC }, -{ 0xACDD, 0xACDD, 0xACDD }, -{ 0xACDE, 0xACDE, 0xACDE }, -{ 0xACDF, 0xACDF, 0xACDF }, -{ 0xACE0, 0xACE0, 0xACE0 }, -{ 0xACE1, 0xACE1, 0xACE1 }, -{ 0xACE2, 0xACE2, 0xACE2 }, -{ 0xACE3, 0xACE3, 0xACE3 }, -{ 0xACE4, 0xACE4, 0xACE4 }, -{ 0xACE5, 0xACE5, 0xACE5 }, -{ 0xACE6, 0xACE6, 0xACE6 }, -{ 0xACE7, 0xACE7, 0xACE7 }, -{ 0xACE8, 0xACE8, 0xACE8 }, -{ 0xACE9, 0xACE9, 0xACE9 }, -{ 0xACEA, 0xACEA, 0xACEA }, -{ 0xACEB, 0xACEB, 0xACEB }, -{ 0xACEC, 0xACEC, 0xACEC }, -{ 0xACED, 0xACED, 0xACED }, -{ 0xACEE, 0xACEE, 0xACEE }, -{ 0xACEF, 0xACEF, 0xACEF }, -{ 0xACF0, 0xACF0, 0xACF0 }, -{ 0xACF1, 0xACF1, 0xACF1 }, -{ 0xACF2, 0xACF2, 0xACF2 }, -{ 0xACF3, 0xACF3, 0xACF3 }, -{ 0xACF4, 0xACF4, 0xACF4 }, -{ 0xACF5, 0xACF5, 0xACF5 }, -{ 0xACF6, 0xACF6, 0xACF6 }, -{ 0xACF7, 0xACF7, 0xACF7 }, -{ 0xACF8, 0xACF8, 0xACF8 }, -{ 0xACF9, 0xACF9, 0xACF9 }, -{ 0xACFA, 0xACFA, 0xACFA }, -{ 0xACFB, 0xACFB, 0xACFB }, -{ 0xACFC, 0xACFC, 0xACFC }, -{ 0xACFD, 0xACFD, 0xACFD }, -{ 0xACFE, 0xACFE, 0xACFE }, -{ 0xACFF, 0xACFF, 0xACFF }, -{ 0xAD00, 0xAD00, 0xAD00 }, -{ 0xAD01, 0xAD01, 0xAD01 }, -{ 0xAD02, 0xAD02, 0xAD02 }, -{ 0xAD03, 0xAD03, 0xAD03 }, -{ 0xAD04, 0xAD04, 0xAD04 }, -{ 0xAD05, 0xAD05, 0xAD05 }, -{ 0xAD06, 0xAD06, 0xAD06 }, -{ 0xAD07, 0xAD07, 0xAD07 }, -{ 0xAD08, 0xAD08, 0xAD08 }, -{ 0xAD09, 0xAD09, 0xAD09 }, -{ 0xAD0A, 0xAD0A, 0xAD0A }, -{ 0xAD0B, 0xAD0B, 0xAD0B }, -{ 0xAD0C, 0xAD0C, 0xAD0C }, -{ 0xAD0D, 0xAD0D, 0xAD0D }, -{ 0xAD0E, 0xAD0E, 0xAD0E }, -{ 0xAD0F, 0xAD0F, 0xAD0F }, -{ 0xAD10, 0xAD10, 0xAD10 }, -{ 0xAD11, 0xAD11, 0xAD11 }, -{ 0xAD12, 0xAD12, 0xAD12 }, -{ 0xAD13, 0xAD13, 0xAD13 }, -{ 0xAD14, 0xAD14, 0xAD14 }, -{ 0xAD15, 0xAD15, 0xAD15 }, -{ 0xAD16, 0xAD16, 0xAD16 }, -{ 0xAD17, 0xAD17, 0xAD17 }, -{ 0xAD18, 0xAD18, 0xAD18 }, -{ 0xAD19, 0xAD19, 0xAD19 }, -{ 0xAD1A, 0xAD1A, 0xAD1A }, -{ 0xAD1B, 0xAD1B, 0xAD1B }, -{ 0xAD1C, 0xAD1C, 0xAD1C }, -{ 0xAD1D, 0xAD1D, 0xAD1D }, -{ 0xAD1E, 0xAD1E, 0xAD1E }, -{ 0xAD1F, 0xAD1F, 0xAD1F }, -{ 0xAD20, 0xAD20, 0xAD20 }, -{ 0xAD21, 0xAD21, 0xAD21 }, -{ 0xAD22, 0xAD22, 0xAD22 }, -{ 0xAD23, 0xAD23, 0xAD23 }, -{ 0xAD24, 0xAD24, 0xAD24 }, -{ 0xAD25, 0xAD25, 0xAD25 }, -{ 0xAD26, 0xAD26, 0xAD26 }, -{ 0xAD27, 0xAD27, 0xAD27 }, -{ 0xAD28, 0xAD28, 0xAD28 }, -{ 0xAD29, 0xAD29, 0xAD29 }, -{ 0xAD2A, 0xAD2A, 0xAD2A }, -{ 0xAD2B, 0xAD2B, 0xAD2B }, -{ 0xAD2C, 0xAD2C, 0xAD2C }, -{ 0xAD2D, 0xAD2D, 0xAD2D }, -{ 0xAD2E, 0xAD2E, 0xAD2E }, -{ 0xAD2F, 0xAD2F, 0xAD2F }, -{ 0xAD30, 0xAD30, 0xAD30 }, -{ 0xAD31, 0xAD31, 0xAD31 }, -{ 0xAD32, 0xAD32, 0xAD32 }, -{ 0xAD33, 0xAD33, 0xAD33 }, -{ 0xAD34, 0xAD34, 0xAD34 }, -{ 0xAD35, 0xAD35, 0xAD35 }, -{ 0xAD36, 0xAD36, 0xAD36 }, -{ 0xAD37, 0xAD37, 0xAD37 }, -{ 0xAD38, 0xAD38, 0xAD38 }, -{ 0xAD39, 0xAD39, 0xAD39 }, -{ 0xAD3A, 0xAD3A, 0xAD3A }, -{ 0xAD3B, 0xAD3B, 0xAD3B }, -{ 0xAD3C, 0xAD3C, 0xAD3C }, -{ 0xAD3D, 0xAD3D, 0xAD3D }, -{ 0xAD3E, 0xAD3E, 0xAD3E }, -{ 0xAD3F, 0xAD3F, 0xAD3F }, -{ 0xAD40, 0xAD40, 0xAD40 }, -{ 0xAD41, 0xAD41, 0xAD41 }, -{ 0xAD42, 0xAD42, 0xAD42 }, -{ 0xAD43, 0xAD43, 0xAD43 }, -{ 0xAD44, 0xAD44, 0xAD44 }, -{ 0xAD45, 0xAD45, 0xAD45 }, -{ 0xAD46, 0xAD46, 0xAD46 }, -{ 0xAD47, 0xAD47, 0xAD47 }, -{ 0xAD48, 0xAD48, 0xAD48 }, -{ 0xAD49, 0xAD49, 0xAD49 }, -{ 0xAD4A, 0xAD4A, 0xAD4A }, -{ 0xAD4B, 0xAD4B, 0xAD4B }, -{ 0xAD4C, 0xAD4C, 0xAD4C }, -{ 0xAD4D, 0xAD4D, 0xAD4D }, -{ 0xAD4E, 0xAD4E, 0xAD4E }, -{ 0xAD4F, 0xAD4F, 0xAD4F }, -{ 0xAD50, 0xAD50, 0xAD50 }, -{ 0xAD51, 0xAD51, 0xAD51 }, -{ 0xAD52, 0xAD52, 0xAD52 }, -{ 0xAD53, 0xAD53, 0xAD53 }, -{ 0xAD54, 0xAD54, 0xAD54 }, -{ 0xAD55, 0xAD55, 0xAD55 }, -{ 0xAD56, 0xAD56, 0xAD56 }, -{ 0xAD57, 0xAD57, 0xAD57 }, -{ 0xAD58, 0xAD58, 0xAD58 }, -{ 0xAD59, 0xAD59, 0xAD59 }, -{ 0xAD5A, 0xAD5A, 0xAD5A }, -{ 0xAD5B, 0xAD5B, 0xAD5B }, -{ 0xAD5C, 0xAD5C, 0xAD5C }, -{ 0xAD5D, 0xAD5D, 0xAD5D }, -{ 0xAD5E, 0xAD5E, 0xAD5E }, -{ 0xAD5F, 0xAD5F, 0xAD5F }, -{ 0xAD60, 0xAD60, 0xAD60 }, -{ 0xAD61, 0xAD61, 0xAD61 }, -{ 0xAD62, 0xAD62, 0xAD62 }, -{ 0xAD63, 0xAD63, 0xAD63 }, -{ 0xAD64, 0xAD64, 0xAD64 }, -{ 0xAD65, 0xAD65, 0xAD65 }, -{ 0xAD66, 0xAD66, 0xAD66 }, -{ 0xAD67, 0xAD67, 0xAD67 }, -{ 0xAD68, 0xAD68, 0xAD68 }, -{ 0xAD69, 0xAD69, 0xAD69 }, -{ 0xAD6A, 0xAD6A, 0xAD6A }, -{ 0xAD6B, 0xAD6B, 0xAD6B }, -{ 0xAD6C, 0xAD6C, 0xAD6C }, -{ 0xAD6D, 0xAD6D, 0xAD6D }, -{ 0xAD6E, 0xAD6E, 0xAD6E }, -{ 0xAD6F, 0xAD6F, 0xAD6F }, -{ 0xAD70, 0xAD70, 0xAD70 }, -{ 0xAD71, 0xAD71, 0xAD71 }, -{ 0xAD72, 0xAD72, 0xAD72 }, -{ 0xAD73, 0xAD73, 0xAD73 }, -{ 0xAD74, 0xAD74, 0xAD74 }, -{ 0xAD75, 0xAD75, 0xAD75 }, -{ 0xAD76, 0xAD76, 0xAD76 }, -{ 0xAD77, 0xAD77, 0xAD77 }, -{ 0xAD78, 0xAD78, 0xAD78 }, -{ 0xAD79, 0xAD79, 0xAD79 }, -{ 0xAD7A, 0xAD7A, 0xAD7A }, -{ 0xAD7B, 0xAD7B, 0xAD7B }, -{ 0xAD7C, 0xAD7C, 0xAD7C }, -{ 0xAD7D, 0xAD7D, 0xAD7D }, -{ 0xAD7E, 0xAD7E, 0xAD7E }, -{ 0xAD7F, 0xAD7F, 0xAD7F }, -{ 0xAD80, 0xAD80, 0xAD80 }, -{ 0xAD81, 0xAD81, 0xAD81 }, -{ 0xAD82, 0xAD82, 0xAD82 }, -{ 0xAD83, 0xAD83, 0xAD83 }, -{ 0xAD84, 0xAD84, 0xAD84 }, -{ 0xAD85, 0xAD85, 0xAD85 }, -{ 0xAD86, 0xAD86, 0xAD86 }, -{ 0xAD87, 0xAD87, 0xAD87 }, -{ 0xAD88, 0xAD88, 0xAD88 }, -{ 0xAD89, 0xAD89, 0xAD89 }, -{ 0xAD8A, 0xAD8A, 0xAD8A }, -{ 0xAD8B, 0xAD8B, 0xAD8B }, -{ 0xAD8C, 0xAD8C, 0xAD8C }, -{ 0xAD8D, 0xAD8D, 0xAD8D }, -{ 0xAD8E, 0xAD8E, 0xAD8E }, -{ 0xAD8F, 0xAD8F, 0xAD8F }, -{ 0xAD90, 0xAD90, 0xAD90 }, -{ 0xAD91, 0xAD91, 0xAD91 }, -{ 0xAD92, 0xAD92, 0xAD92 }, -{ 0xAD93, 0xAD93, 0xAD93 }, -{ 0xAD94, 0xAD94, 0xAD94 }, -{ 0xAD95, 0xAD95, 0xAD95 }, -{ 0xAD96, 0xAD96, 0xAD96 }, -{ 0xAD97, 0xAD97, 0xAD97 }, -{ 0xAD98, 0xAD98, 0xAD98 }, -{ 0xAD99, 0xAD99, 0xAD99 }, -{ 0xAD9A, 0xAD9A, 0xAD9A }, -{ 0xAD9B, 0xAD9B, 0xAD9B }, -{ 0xAD9C, 0xAD9C, 0xAD9C }, -{ 0xAD9D, 0xAD9D, 0xAD9D }, -{ 0xAD9E, 0xAD9E, 0xAD9E }, -{ 0xAD9F, 0xAD9F, 0xAD9F }, -{ 0xADA0, 0xADA0, 0xADA0 }, -{ 0xADA1, 0xADA1, 0xADA1 }, -{ 0xADA2, 0xADA2, 0xADA2 }, -{ 0xADA3, 0xADA3, 0xADA3 }, -{ 0xADA4, 0xADA4, 0xADA4 }, -{ 0xADA5, 0xADA5, 0xADA5 }, -{ 0xADA6, 0xADA6, 0xADA6 }, -{ 0xADA7, 0xADA7, 0xADA7 }, -{ 0xADA8, 0xADA8, 0xADA8 }, -{ 0xADA9, 0xADA9, 0xADA9 }, -{ 0xADAA, 0xADAA, 0xADAA }, -{ 0xADAB, 0xADAB, 0xADAB }, -{ 0xADAC, 0xADAC, 0xADAC }, -{ 0xADAD, 0xADAD, 0xADAD }, -{ 0xADAE, 0xADAE, 0xADAE }, -{ 0xADAF, 0xADAF, 0xADAF }, -{ 0xADB0, 0xADB0, 0xADB0 }, -{ 0xADB1, 0xADB1, 0xADB1 }, -{ 0xADB2, 0xADB2, 0xADB2 }, -{ 0xADB3, 0xADB3, 0xADB3 }, -{ 0xADB4, 0xADB4, 0xADB4 }, -{ 0xADB5, 0xADB5, 0xADB5 }, -{ 0xADB6, 0xADB6, 0xADB6 }, -{ 0xADB7, 0xADB7, 0xADB7 }, -{ 0xADB8, 0xADB8, 0xADB8 }, -{ 0xADB9, 0xADB9, 0xADB9 }, -{ 0xADBA, 0xADBA, 0xADBA }, -{ 0xADBB, 0xADBB, 0xADBB }, -{ 0xADBC, 0xADBC, 0xADBC }, -{ 0xADBD, 0xADBD, 0xADBD }, -{ 0xADBE, 0xADBE, 0xADBE }, -{ 0xADBF, 0xADBF, 0xADBF }, -{ 0xADC0, 0xADC0, 0xADC0 }, -{ 0xADC1, 0xADC1, 0xADC1 }, -{ 0xADC2, 0xADC2, 0xADC2 }, -{ 0xADC3, 0xADC3, 0xADC3 }, -{ 0xADC4, 0xADC4, 0xADC4 }, -{ 0xADC5, 0xADC5, 0xADC5 }, -{ 0xADC6, 0xADC6, 0xADC6 }, -{ 0xADC7, 0xADC7, 0xADC7 }, -{ 0xADC8, 0xADC8, 0xADC8 }, -{ 0xADC9, 0xADC9, 0xADC9 }, -{ 0xADCA, 0xADCA, 0xADCA }, -{ 0xADCB, 0xADCB, 0xADCB }, -{ 0xADCC, 0xADCC, 0xADCC }, -{ 0xADCD, 0xADCD, 0xADCD }, -{ 0xADCE, 0xADCE, 0xADCE }, -{ 0xADCF, 0xADCF, 0xADCF }, -{ 0xADD0, 0xADD0, 0xADD0 }, -{ 0xADD1, 0xADD1, 0xADD1 }, -{ 0xADD2, 0xADD2, 0xADD2 }, -{ 0xADD3, 0xADD3, 0xADD3 }, -{ 0xADD4, 0xADD4, 0xADD4 }, -{ 0xADD5, 0xADD5, 0xADD5 }, -{ 0xADD6, 0xADD6, 0xADD6 }, -{ 0xADD7, 0xADD7, 0xADD7 }, -{ 0xADD8, 0xADD8, 0xADD8 }, -{ 0xADD9, 0xADD9, 0xADD9 }, -{ 0xADDA, 0xADDA, 0xADDA }, -{ 0xADDB, 0xADDB, 0xADDB }, -{ 0xADDC, 0xADDC, 0xADDC }, -{ 0xADDD, 0xADDD, 0xADDD }, -{ 0xADDE, 0xADDE, 0xADDE }, -{ 0xADDF, 0xADDF, 0xADDF }, -{ 0xADE0, 0xADE0, 0xADE0 }, -{ 0xADE1, 0xADE1, 0xADE1 }, -{ 0xADE2, 0xADE2, 0xADE2 }, -{ 0xADE3, 0xADE3, 0xADE3 }, -{ 0xADE4, 0xADE4, 0xADE4 }, -{ 0xADE5, 0xADE5, 0xADE5 }, -{ 0xADE6, 0xADE6, 0xADE6 }, -{ 0xADE7, 0xADE7, 0xADE7 }, -{ 0xADE8, 0xADE8, 0xADE8 }, -{ 0xADE9, 0xADE9, 0xADE9 }, -{ 0xADEA, 0xADEA, 0xADEA }, -{ 0xADEB, 0xADEB, 0xADEB }, -{ 0xADEC, 0xADEC, 0xADEC }, -{ 0xADED, 0xADED, 0xADED }, -{ 0xADEE, 0xADEE, 0xADEE }, -{ 0xADEF, 0xADEF, 0xADEF }, -{ 0xADF0, 0xADF0, 0xADF0 }, -{ 0xADF1, 0xADF1, 0xADF1 }, -{ 0xADF2, 0xADF2, 0xADF2 }, -{ 0xADF3, 0xADF3, 0xADF3 }, -{ 0xADF4, 0xADF4, 0xADF4 }, -{ 0xADF5, 0xADF5, 0xADF5 }, -{ 0xADF6, 0xADF6, 0xADF6 }, -{ 0xADF7, 0xADF7, 0xADF7 }, -{ 0xADF8, 0xADF8, 0xADF8 }, -{ 0xADF9, 0xADF9, 0xADF9 }, -{ 0xADFA, 0xADFA, 0xADFA }, -{ 0xADFB, 0xADFB, 0xADFB }, -{ 0xADFC, 0xADFC, 0xADFC }, -{ 0xADFD, 0xADFD, 0xADFD }, -{ 0xADFE, 0xADFE, 0xADFE }, -{ 0xADFF, 0xADFF, 0xADFF }, -{ 0xAE00, 0xAE00, 0xAE00 }, -{ 0xAE01, 0xAE01, 0xAE01 }, -{ 0xAE02, 0xAE02, 0xAE02 }, -{ 0xAE03, 0xAE03, 0xAE03 }, -{ 0xAE04, 0xAE04, 0xAE04 }, -{ 0xAE05, 0xAE05, 0xAE05 }, -{ 0xAE06, 0xAE06, 0xAE06 }, -{ 0xAE07, 0xAE07, 0xAE07 }, -{ 0xAE08, 0xAE08, 0xAE08 }, -{ 0xAE09, 0xAE09, 0xAE09 }, -{ 0xAE0A, 0xAE0A, 0xAE0A }, -{ 0xAE0B, 0xAE0B, 0xAE0B }, -{ 0xAE0C, 0xAE0C, 0xAE0C }, -{ 0xAE0D, 0xAE0D, 0xAE0D }, -{ 0xAE0E, 0xAE0E, 0xAE0E }, -{ 0xAE0F, 0xAE0F, 0xAE0F }, -{ 0xAE10, 0xAE10, 0xAE10 }, -{ 0xAE11, 0xAE11, 0xAE11 }, -{ 0xAE12, 0xAE12, 0xAE12 }, -{ 0xAE13, 0xAE13, 0xAE13 }, -{ 0xAE14, 0xAE14, 0xAE14 }, -{ 0xAE15, 0xAE15, 0xAE15 }, -{ 0xAE16, 0xAE16, 0xAE16 }, -{ 0xAE17, 0xAE17, 0xAE17 }, -{ 0xAE18, 0xAE18, 0xAE18 }, -{ 0xAE19, 0xAE19, 0xAE19 }, -{ 0xAE1A, 0xAE1A, 0xAE1A }, -{ 0xAE1B, 0xAE1B, 0xAE1B }, -{ 0xAE1C, 0xAE1C, 0xAE1C }, -{ 0xAE1D, 0xAE1D, 0xAE1D }, -{ 0xAE1E, 0xAE1E, 0xAE1E }, -{ 0xAE1F, 0xAE1F, 0xAE1F }, -{ 0xAE20, 0xAE20, 0xAE20 }, -{ 0xAE21, 0xAE21, 0xAE21 }, -{ 0xAE22, 0xAE22, 0xAE22 }, -{ 0xAE23, 0xAE23, 0xAE23 }, -{ 0xAE24, 0xAE24, 0xAE24 }, -{ 0xAE25, 0xAE25, 0xAE25 }, -{ 0xAE26, 0xAE26, 0xAE26 }, -{ 0xAE27, 0xAE27, 0xAE27 }, -{ 0xAE28, 0xAE28, 0xAE28 }, -{ 0xAE29, 0xAE29, 0xAE29 }, -{ 0xAE2A, 0xAE2A, 0xAE2A }, -{ 0xAE2B, 0xAE2B, 0xAE2B }, -{ 0xAE2C, 0xAE2C, 0xAE2C }, -{ 0xAE2D, 0xAE2D, 0xAE2D }, -{ 0xAE2E, 0xAE2E, 0xAE2E }, -{ 0xAE2F, 0xAE2F, 0xAE2F }, -{ 0xAE30, 0xAE30, 0xAE30 }, -{ 0xAE31, 0xAE31, 0xAE31 }, -{ 0xAE32, 0xAE32, 0xAE32 }, -{ 0xAE33, 0xAE33, 0xAE33 }, -{ 0xAE34, 0xAE34, 0xAE34 }, -{ 0xAE35, 0xAE35, 0xAE35 }, -{ 0xAE36, 0xAE36, 0xAE36 }, -{ 0xAE37, 0xAE37, 0xAE37 }, -{ 0xAE38, 0xAE38, 0xAE38 }, -{ 0xAE39, 0xAE39, 0xAE39 }, -{ 0xAE3A, 0xAE3A, 0xAE3A }, -{ 0xAE3B, 0xAE3B, 0xAE3B }, -{ 0xAE3C, 0xAE3C, 0xAE3C }, -{ 0xAE3D, 0xAE3D, 0xAE3D }, -{ 0xAE3E, 0xAE3E, 0xAE3E }, -{ 0xAE3F, 0xAE3F, 0xAE3F }, -{ 0xAE40, 0xAE40, 0xAE40 }, -{ 0xAE41, 0xAE41, 0xAE41 }, -{ 0xAE42, 0xAE42, 0xAE42 }, -{ 0xAE43, 0xAE43, 0xAE43 }, -{ 0xAE44, 0xAE44, 0xAE44 }, -{ 0xAE45, 0xAE45, 0xAE45 }, -{ 0xAE46, 0xAE46, 0xAE46 }, -{ 0xAE47, 0xAE47, 0xAE47 }, -{ 0xAE48, 0xAE48, 0xAE48 }, -{ 0xAE49, 0xAE49, 0xAE49 }, -{ 0xAE4A, 0xAE4A, 0xAE4A }, -{ 0xAE4B, 0xAE4B, 0xAE4B }, -{ 0xAE4C, 0xAE4C, 0xAE4C }, -{ 0xAE4D, 0xAE4D, 0xAE4D }, -{ 0xAE4E, 0xAE4E, 0xAE4E }, -{ 0xAE4F, 0xAE4F, 0xAE4F }, -{ 0xAE50, 0xAE50, 0xAE50 }, -{ 0xAE51, 0xAE51, 0xAE51 }, -{ 0xAE52, 0xAE52, 0xAE52 }, -{ 0xAE53, 0xAE53, 0xAE53 }, -{ 0xAE54, 0xAE54, 0xAE54 }, -{ 0xAE55, 0xAE55, 0xAE55 }, -{ 0xAE56, 0xAE56, 0xAE56 }, -{ 0xAE57, 0xAE57, 0xAE57 }, -{ 0xAE58, 0xAE58, 0xAE58 }, -{ 0xAE59, 0xAE59, 0xAE59 }, -{ 0xAE5A, 0xAE5A, 0xAE5A }, -{ 0xAE5B, 0xAE5B, 0xAE5B }, -{ 0xAE5C, 0xAE5C, 0xAE5C }, -{ 0xAE5D, 0xAE5D, 0xAE5D }, -{ 0xAE5E, 0xAE5E, 0xAE5E }, -{ 0xAE5F, 0xAE5F, 0xAE5F }, -{ 0xAE60, 0xAE60, 0xAE60 }, -{ 0xAE61, 0xAE61, 0xAE61 }, -{ 0xAE62, 0xAE62, 0xAE62 }, -{ 0xAE63, 0xAE63, 0xAE63 }, -{ 0xAE64, 0xAE64, 0xAE64 }, -{ 0xAE65, 0xAE65, 0xAE65 }, -{ 0xAE66, 0xAE66, 0xAE66 }, -{ 0xAE67, 0xAE67, 0xAE67 }, -{ 0xAE68, 0xAE68, 0xAE68 }, -{ 0xAE69, 0xAE69, 0xAE69 }, -{ 0xAE6A, 0xAE6A, 0xAE6A }, -{ 0xAE6B, 0xAE6B, 0xAE6B }, -{ 0xAE6C, 0xAE6C, 0xAE6C }, -{ 0xAE6D, 0xAE6D, 0xAE6D }, -{ 0xAE6E, 0xAE6E, 0xAE6E }, -{ 0xAE6F, 0xAE6F, 0xAE6F }, -{ 0xAE70, 0xAE70, 0xAE70 }, -{ 0xAE71, 0xAE71, 0xAE71 }, -{ 0xAE72, 0xAE72, 0xAE72 }, -{ 0xAE73, 0xAE73, 0xAE73 }, -{ 0xAE74, 0xAE74, 0xAE74 }, -{ 0xAE75, 0xAE75, 0xAE75 }, -{ 0xAE76, 0xAE76, 0xAE76 }, -{ 0xAE77, 0xAE77, 0xAE77 }, -{ 0xAE78, 0xAE78, 0xAE78 }, -{ 0xAE79, 0xAE79, 0xAE79 }, -{ 0xAE7A, 0xAE7A, 0xAE7A }, -{ 0xAE7B, 0xAE7B, 0xAE7B }, -{ 0xAE7C, 0xAE7C, 0xAE7C }, -{ 0xAE7D, 0xAE7D, 0xAE7D }, -{ 0xAE7E, 0xAE7E, 0xAE7E }, -{ 0xAE7F, 0xAE7F, 0xAE7F }, -{ 0xAE80, 0xAE80, 0xAE80 }, -{ 0xAE81, 0xAE81, 0xAE81 }, -{ 0xAE82, 0xAE82, 0xAE82 }, -{ 0xAE83, 0xAE83, 0xAE83 }, -{ 0xAE84, 0xAE84, 0xAE84 }, -{ 0xAE85, 0xAE85, 0xAE85 }, -{ 0xAE86, 0xAE86, 0xAE86 }, -{ 0xAE87, 0xAE87, 0xAE87 }, -{ 0xAE88, 0xAE88, 0xAE88 }, -{ 0xAE89, 0xAE89, 0xAE89 }, -{ 0xAE8A, 0xAE8A, 0xAE8A }, -{ 0xAE8B, 0xAE8B, 0xAE8B }, -{ 0xAE8C, 0xAE8C, 0xAE8C }, -{ 0xAE8D, 0xAE8D, 0xAE8D }, -{ 0xAE8E, 0xAE8E, 0xAE8E }, -{ 0xAE8F, 0xAE8F, 0xAE8F }, -{ 0xAE90, 0xAE90, 0xAE90 }, -{ 0xAE91, 0xAE91, 0xAE91 }, -{ 0xAE92, 0xAE92, 0xAE92 }, -{ 0xAE93, 0xAE93, 0xAE93 }, -{ 0xAE94, 0xAE94, 0xAE94 }, -{ 0xAE95, 0xAE95, 0xAE95 }, -{ 0xAE96, 0xAE96, 0xAE96 }, -{ 0xAE97, 0xAE97, 0xAE97 }, -{ 0xAE98, 0xAE98, 0xAE98 }, -{ 0xAE99, 0xAE99, 0xAE99 }, -{ 0xAE9A, 0xAE9A, 0xAE9A }, -{ 0xAE9B, 0xAE9B, 0xAE9B }, -{ 0xAE9C, 0xAE9C, 0xAE9C }, -{ 0xAE9D, 0xAE9D, 0xAE9D }, -{ 0xAE9E, 0xAE9E, 0xAE9E }, -{ 0xAE9F, 0xAE9F, 0xAE9F }, -{ 0xAEA0, 0xAEA0, 0xAEA0 }, -{ 0xAEA1, 0xAEA1, 0xAEA1 }, -{ 0xAEA2, 0xAEA2, 0xAEA2 }, -{ 0xAEA3, 0xAEA3, 0xAEA3 }, -{ 0xAEA4, 0xAEA4, 0xAEA4 }, -{ 0xAEA5, 0xAEA5, 0xAEA5 }, -{ 0xAEA6, 0xAEA6, 0xAEA6 }, -{ 0xAEA7, 0xAEA7, 0xAEA7 }, -{ 0xAEA8, 0xAEA8, 0xAEA8 }, -{ 0xAEA9, 0xAEA9, 0xAEA9 }, -{ 0xAEAA, 0xAEAA, 0xAEAA }, -{ 0xAEAB, 0xAEAB, 0xAEAB }, -{ 0xAEAC, 0xAEAC, 0xAEAC }, -{ 0xAEAD, 0xAEAD, 0xAEAD }, -{ 0xAEAE, 0xAEAE, 0xAEAE }, -{ 0xAEAF, 0xAEAF, 0xAEAF }, -{ 0xAEB0, 0xAEB0, 0xAEB0 }, -{ 0xAEB1, 0xAEB1, 0xAEB1 }, -{ 0xAEB2, 0xAEB2, 0xAEB2 }, -{ 0xAEB3, 0xAEB3, 0xAEB3 }, -{ 0xAEB4, 0xAEB4, 0xAEB4 }, -{ 0xAEB5, 0xAEB5, 0xAEB5 }, -{ 0xAEB6, 0xAEB6, 0xAEB6 }, -{ 0xAEB7, 0xAEB7, 0xAEB7 }, -{ 0xAEB8, 0xAEB8, 0xAEB8 }, -{ 0xAEB9, 0xAEB9, 0xAEB9 }, -{ 0xAEBA, 0xAEBA, 0xAEBA }, -{ 0xAEBB, 0xAEBB, 0xAEBB }, -{ 0xAEBC, 0xAEBC, 0xAEBC }, -{ 0xAEBD, 0xAEBD, 0xAEBD }, -{ 0xAEBE, 0xAEBE, 0xAEBE }, -{ 0xAEBF, 0xAEBF, 0xAEBF }, -{ 0xAEC0, 0xAEC0, 0xAEC0 }, -{ 0xAEC1, 0xAEC1, 0xAEC1 }, -{ 0xAEC2, 0xAEC2, 0xAEC2 }, -{ 0xAEC3, 0xAEC3, 0xAEC3 }, -{ 0xAEC4, 0xAEC4, 0xAEC4 }, -{ 0xAEC5, 0xAEC5, 0xAEC5 }, -{ 0xAEC6, 0xAEC6, 0xAEC6 }, -{ 0xAEC7, 0xAEC7, 0xAEC7 }, -{ 0xAEC8, 0xAEC8, 0xAEC8 }, -{ 0xAEC9, 0xAEC9, 0xAEC9 }, -{ 0xAECA, 0xAECA, 0xAECA }, -{ 0xAECB, 0xAECB, 0xAECB }, -{ 0xAECC, 0xAECC, 0xAECC }, -{ 0xAECD, 0xAECD, 0xAECD }, -{ 0xAECE, 0xAECE, 0xAECE }, -{ 0xAECF, 0xAECF, 0xAECF }, -{ 0xAED0, 0xAED0, 0xAED0 }, -{ 0xAED1, 0xAED1, 0xAED1 }, -{ 0xAED2, 0xAED2, 0xAED2 }, -{ 0xAED3, 0xAED3, 0xAED3 }, -{ 0xAED4, 0xAED4, 0xAED4 }, -{ 0xAED5, 0xAED5, 0xAED5 }, -{ 0xAED6, 0xAED6, 0xAED6 }, -{ 0xAED7, 0xAED7, 0xAED7 }, -{ 0xAED8, 0xAED8, 0xAED8 }, -{ 0xAED9, 0xAED9, 0xAED9 }, -{ 0xAEDA, 0xAEDA, 0xAEDA }, -{ 0xAEDB, 0xAEDB, 0xAEDB }, -{ 0xAEDC, 0xAEDC, 0xAEDC }, -{ 0xAEDD, 0xAEDD, 0xAEDD }, -{ 0xAEDE, 0xAEDE, 0xAEDE }, -{ 0xAEDF, 0xAEDF, 0xAEDF }, -{ 0xAEE0, 0xAEE0, 0xAEE0 }, -{ 0xAEE1, 0xAEE1, 0xAEE1 }, -{ 0xAEE2, 0xAEE2, 0xAEE2 }, -{ 0xAEE3, 0xAEE3, 0xAEE3 }, -{ 0xAEE4, 0xAEE4, 0xAEE4 }, -{ 0xAEE5, 0xAEE5, 0xAEE5 }, -{ 0xAEE6, 0xAEE6, 0xAEE6 }, -{ 0xAEE7, 0xAEE7, 0xAEE7 }, -{ 0xAEE8, 0xAEE8, 0xAEE8 }, -{ 0xAEE9, 0xAEE9, 0xAEE9 }, -{ 0xAEEA, 0xAEEA, 0xAEEA }, -{ 0xAEEB, 0xAEEB, 0xAEEB }, -{ 0xAEEC, 0xAEEC, 0xAEEC }, -{ 0xAEED, 0xAEED, 0xAEED }, -{ 0xAEEE, 0xAEEE, 0xAEEE }, -{ 0xAEEF, 0xAEEF, 0xAEEF }, -{ 0xAEF0, 0xAEF0, 0xAEF0 }, -{ 0xAEF1, 0xAEF1, 0xAEF1 }, -{ 0xAEF2, 0xAEF2, 0xAEF2 }, -{ 0xAEF3, 0xAEF3, 0xAEF3 }, -{ 0xAEF4, 0xAEF4, 0xAEF4 }, -{ 0xAEF5, 0xAEF5, 0xAEF5 }, -{ 0xAEF6, 0xAEF6, 0xAEF6 }, -{ 0xAEF7, 0xAEF7, 0xAEF7 }, -{ 0xAEF8, 0xAEF8, 0xAEF8 }, -{ 0xAEF9, 0xAEF9, 0xAEF9 }, -{ 0xAEFA, 0xAEFA, 0xAEFA }, -{ 0xAEFB, 0xAEFB, 0xAEFB }, -{ 0xAEFC, 0xAEFC, 0xAEFC }, -{ 0xAEFD, 0xAEFD, 0xAEFD }, -{ 0xAEFE, 0xAEFE, 0xAEFE }, -{ 0xAEFF, 0xAEFF, 0xAEFF }, -{ 0xAF00, 0xAF00, 0xAF00 }, -{ 0xAF01, 0xAF01, 0xAF01 }, -{ 0xAF02, 0xAF02, 0xAF02 }, -{ 0xAF03, 0xAF03, 0xAF03 }, -{ 0xAF04, 0xAF04, 0xAF04 }, -{ 0xAF05, 0xAF05, 0xAF05 }, -{ 0xAF06, 0xAF06, 0xAF06 }, -{ 0xAF07, 0xAF07, 0xAF07 }, -{ 0xAF08, 0xAF08, 0xAF08 }, -{ 0xAF09, 0xAF09, 0xAF09 }, -{ 0xAF0A, 0xAF0A, 0xAF0A }, -{ 0xAF0B, 0xAF0B, 0xAF0B }, -{ 0xAF0C, 0xAF0C, 0xAF0C }, -{ 0xAF0D, 0xAF0D, 0xAF0D }, -{ 0xAF0E, 0xAF0E, 0xAF0E }, -{ 0xAF0F, 0xAF0F, 0xAF0F }, -{ 0xAF10, 0xAF10, 0xAF10 }, -{ 0xAF11, 0xAF11, 0xAF11 }, -{ 0xAF12, 0xAF12, 0xAF12 }, -{ 0xAF13, 0xAF13, 0xAF13 }, -{ 0xAF14, 0xAF14, 0xAF14 }, -{ 0xAF15, 0xAF15, 0xAF15 }, -{ 0xAF16, 0xAF16, 0xAF16 }, -{ 0xAF17, 0xAF17, 0xAF17 }, -{ 0xAF18, 0xAF18, 0xAF18 }, -{ 0xAF19, 0xAF19, 0xAF19 }, -{ 0xAF1A, 0xAF1A, 0xAF1A }, -{ 0xAF1B, 0xAF1B, 0xAF1B }, -{ 0xAF1C, 0xAF1C, 0xAF1C }, -{ 0xAF1D, 0xAF1D, 0xAF1D }, -{ 0xAF1E, 0xAF1E, 0xAF1E }, -{ 0xAF1F, 0xAF1F, 0xAF1F }, -{ 0xAF20, 0xAF20, 0xAF20 }, -{ 0xAF21, 0xAF21, 0xAF21 }, -{ 0xAF22, 0xAF22, 0xAF22 }, -{ 0xAF23, 0xAF23, 0xAF23 }, -{ 0xAF24, 0xAF24, 0xAF24 }, -{ 0xAF25, 0xAF25, 0xAF25 }, -{ 0xAF26, 0xAF26, 0xAF26 }, -{ 0xAF27, 0xAF27, 0xAF27 }, -{ 0xAF28, 0xAF28, 0xAF28 }, -{ 0xAF29, 0xAF29, 0xAF29 }, -{ 0xAF2A, 0xAF2A, 0xAF2A }, -{ 0xAF2B, 0xAF2B, 0xAF2B }, -{ 0xAF2C, 0xAF2C, 0xAF2C }, -{ 0xAF2D, 0xAF2D, 0xAF2D }, -{ 0xAF2E, 0xAF2E, 0xAF2E }, -{ 0xAF2F, 0xAF2F, 0xAF2F }, -{ 0xAF30, 0xAF30, 0xAF30 }, -{ 0xAF31, 0xAF31, 0xAF31 }, -{ 0xAF32, 0xAF32, 0xAF32 }, -{ 0xAF33, 0xAF33, 0xAF33 }, -{ 0xAF34, 0xAF34, 0xAF34 }, -{ 0xAF35, 0xAF35, 0xAF35 }, -{ 0xAF36, 0xAF36, 0xAF36 }, -{ 0xAF37, 0xAF37, 0xAF37 }, -{ 0xAF38, 0xAF38, 0xAF38 }, -{ 0xAF39, 0xAF39, 0xAF39 }, -{ 0xAF3A, 0xAF3A, 0xAF3A }, -{ 0xAF3B, 0xAF3B, 0xAF3B }, -{ 0xAF3C, 0xAF3C, 0xAF3C }, -{ 0xAF3D, 0xAF3D, 0xAF3D }, -{ 0xAF3E, 0xAF3E, 0xAF3E }, -{ 0xAF3F, 0xAF3F, 0xAF3F }, -{ 0xAF40, 0xAF40, 0xAF40 }, -{ 0xAF41, 0xAF41, 0xAF41 }, -{ 0xAF42, 0xAF42, 0xAF42 }, -{ 0xAF43, 0xAF43, 0xAF43 }, -{ 0xAF44, 0xAF44, 0xAF44 }, -{ 0xAF45, 0xAF45, 0xAF45 }, -{ 0xAF46, 0xAF46, 0xAF46 }, -{ 0xAF47, 0xAF47, 0xAF47 }, -{ 0xAF48, 0xAF48, 0xAF48 }, -{ 0xAF49, 0xAF49, 0xAF49 }, -{ 0xAF4A, 0xAF4A, 0xAF4A }, -{ 0xAF4B, 0xAF4B, 0xAF4B }, -{ 0xAF4C, 0xAF4C, 0xAF4C }, -{ 0xAF4D, 0xAF4D, 0xAF4D }, -{ 0xAF4E, 0xAF4E, 0xAF4E }, -{ 0xAF4F, 0xAF4F, 0xAF4F }, -{ 0xAF50, 0xAF50, 0xAF50 }, -{ 0xAF51, 0xAF51, 0xAF51 }, -{ 0xAF52, 0xAF52, 0xAF52 }, -{ 0xAF53, 0xAF53, 0xAF53 }, -{ 0xAF54, 0xAF54, 0xAF54 }, -{ 0xAF55, 0xAF55, 0xAF55 }, -{ 0xAF56, 0xAF56, 0xAF56 }, -{ 0xAF57, 0xAF57, 0xAF57 }, -{ 0xAF58, 0xAF58, 0xAF58 }, -{ 0xAF59, 0xAF59, 0xAF59 }, -{ 0xAF5A, 0xAF5A, 0xAF5A }, -{ 0xAF5B, 0xAF5B, 0xAF5B }, -{ 0xAF5C, 0xAF5C, 0xAF5C }, -{ 0xAF5D, 0xAF5D, 0xAF5D }, -{ 0xAF5E, 0xAF5E, 0xAF5E }, -{ 0xAF5F, 0xAF5F, 0xAF5F }, -{ 0xAF60, 0xAF60, 0xAF60 }, -{ 0xAF61, 0xAF61, 0xAF61 }, -{ 0xAF62, 0xAF62, 0xAF62 }, -{ 0xAF63, 0xAF63, 0xAF63 }, -{ 0xAF64, 0xAF64, 0xAF64 }, -{ 0xAF65, 0xAF65, 0xAF65 }, -{ 0xAF66, 0xAF66, 0xAF66 }, -{ 0xAF67, 0xAF67, 0xAF67 }, -{ 0xAF68, 0xAF68, 0xAF68 }, -{ 0xAF69, 0xAF69, 0xAF69 }, -{ 0xAF6A, 0xAF6A, 0xAF6A }, -{ 0xAF6B, 0xAF6B, 0xAF6B }, -{ 0xAF6C, 0xAF6C, 0xAF6C }, -{ 0xAF6D, 0xAF6D, 0xAF6D }, -{ 0xAF6E, 0xAF6E, 0xAF6E }, -{ 0xAF6F, 0xAF6F, 0xAF6F }, -{ 0xAF70, 0xAF70, 0xAF70 }, -{ 0xAF71, 0xAF71, 0xAF71 }, -{ 0xAF72, 0xAF72, 0xAF72 }, -{ 0xAF73, 0xAF73, 0xAF73 }, -{ 0xAF74, 0xAF74, 0xAF74 }, -{ 0xAF75, 0xAF75, 0xAF75 }, -{ 0xAF76, 0xAF76, 0xAF76 }, -{ 0xAF77, 0xAF77, 0xAF77 }, -{ 0xAF78, 0xAF78, 0xAF78 }, -{ 0xAF79, 0xAF79, 0xAF79 }, -{ 0xAF7A, 0xAF7A, 0xAF7A }, -{ 0xAF7B, 0xAF7B, 0xAF7B }, -{ 0xAF7C, 0xAF7C, 0xAF7C }, -{ 0xAF7D, 0xAF7D, 0xAF7D }, -{ 0xAF7E, 0xAF7E, 0xAF7E }, -{ 0xAF7F, 0xAF7F, 0xAF7F }, -{ 0xAF80, 0xAF80, 0xAF80 }, -{ 0xAF81, 0xAF81, 0xAF81 }, -{ 0xAF82, 0xAF82, 0xAF82 }, -{ 0xAF83, 0xAF83, 0xAF83 }, -{ 0xAF84, 0xAF84, 0xAF84 }, -{ 0xAF85, 0xAF85, 0xAF85 }, -{ 0xAF86, 0xAF86, 0xAF86 }, -{ 0xAF87, 0xAF87, 0xAF87 }, -{ 0xAF88, 0xAF88, 0xAF88 }, -{ 0xAF89, 0xAF89, 0xAF89 }, -{ 0xAF8A, 0xAF8A, 0xAF8A }, -{ 0xAF8B, 0xAF8B, 0xAF8B }, -{ 0xAF8C, 0xAF8C, 0xAF8C }, -{ 0xAF8D, 0xAF8D, 0xAF8D }, -{ 0xAF8E, 0xAF8E, 0xAF8E }, -{ 0xAF8F, 0xAF8F, 0xAF8F }, -{ 0xAF90, 0xAF90, 0xAF90 }, -{ 0xAF91, 0xAF91, 0xAF91 }, -{ 0xAF92, 0xAF92, 0xAF92 }, -{ 0xAF93, 0xAF93, 0xAF93 }, -{ 0xAF94, 0xAF94, 0xAF94 }, -{ 0xAF95, 0xAF95, 0xAF95 }, -{ 0xAF96, 0xAF96, 0xAF96 }, -{ 0xAF97, 0xAF97, 0xAF97 }, -{ 0xAF98, 0xAF98, 0xAF98 }, -{ 0xAF99, 0xAF99, 0xAF99 }, -{ 0xAF9A, 0xAF9A, 0xAF9A }, -{ 0xAF9B, 0xAF9B, 0xAF9B }, -{ 0xAF9C, 0xAF9C, 0xAF9C }, -{ 0xAF9D, 0xAF9D, 0xAF9D }, -{ 0xAF9E, 0xAF9E, 0xAF9E }, -{ 0xAF9F, 0xAF9F, 0xAF9F }, -{ 0xAFA0, 0xAFA0, 0xAFA0 }, -{ 0xAFA1, 0xAFA1, 0xAFA1 }, -{ 0xAFA2, 0xAFA2, 0xAFA2 }, -{ 0xAFA3, 0xAFA3, 0xAFA3 }, -{ 0xAFA4, 0xAFA4, 0xAFA4 }, -{ 0xAFA5, 0xAFA5, 0xAFA5 }, -{ 0xAFA6, 0xAFA6, 0xAFA6 }, -{ 0xAFA7, 0xAFA7, 0xAFA7 }, -{ 0xAFA8, 0xAFA8, 0xAFA8 }, -{ 0xAFA9, 0xAFA9, 0xAFA9 }, -{ 0xAFAA, 0xAFAA, 0xAFAA }, -{ 0xAFAB, 0xAFAB, 0xAFAB }, -{ 0xAFAC, 0xAFAC, 0xAFAC }, -{ 0xAFAD, 0xAFAD, 0xAFAD }, -{ 0xAFAE, 0xAFAE, 0xAFAE }, -{ 0xAFAF, 0xAFAF, 0xAFAF }, -{ 0xAFB0, 0xAFB0, 0xAFB0 }, -{ 0xAFB1, 0xAFB1, 0xAFB1 }, -{ 0xAFB2, 0xAFB2, 0xAFB2 }, -{ 0xAFB3, 0xAFB3, 0xAFB3 }, -{ 0xAFB4, 0xAFB4, 0xAFB4 }, -{ 0xAFB5, 0xAFB5, 0xAFB5 }, -{ 0xAFB6, 0xAFB6, 0xAFB6 }, -{ 0xAFB7, 0xAFB7, 0xAFB7 }, -{ 0xAFB8, 0xAFB8, 0xAFB8 }, -{ 0xAFB9, 0xAFB9, 0xAFB9 }, -{ 0xAFBA, 0xAFBA, 0xAFBA }, -{ 0xAFBB, 0xAFBB, 0xAFBB }, -{ 0xAFBC, 0xAFBC, 0xAFBC }, -{ 0xAFBD, 0xAFBD, 0xAFBD }, -{ 0xAFBE, 0xAFBE, 0xAFBE }, -{ 0xAFBF, 0xAFBF, 0xAFBF }, -{ 0xAFC0, 0xAFC0, 0xAFC0 }, -{ 0xAFC1, 0xAFC1, 0xAFC1 }, -{ 0xAFC2, 0xAFC2, 0xAFC2 }, -{ 0xAFC3, 0xAFC3, 0xAFC3 }, -{ 0xAFC4, 0xAFC4, 0xAFC4 }, -{ 0xAFC5, 0xAFC5, 0xAFC5 }, -{ 0xAFC6, 0xAFC6, 0xAFC6 }, -{ 0xAFC7, 0xAFC7, 0xAFC7 }, -{ 0xAFC8, 0xAFC8, 0xAFC8 }, -{ 0xAFC9, 0xAFC9, 0xAFC9 }, -{ 0xAFCA, 0xAFCA, 0xAFCA }, -{ 0xAFCB, 0xAFCB, 0xAFCB }, -{ 0xAFCC, 0xAFCC, 0xAFCC }, -{ 0xAFCD, 0xAFCD, 0xAFCD }, -{ 0xAFCE, 0xAFCE, 0xAFCE }, -{ 0xAFCF, 0xAFCF, 0xAFCF }, -{ 0xAFD0, 0xAFD0, 0xAFD0 }, -{ 0xAFD1, 0xAFD1, 0xAFD1 }, -{ 0xAFD2, 0xAFD2, 0xAFD2 }, -{ 0xAFD3, 0xAFD3, 0xAFD3 }, -{ 0xAFD4, 0xAFD4, 0xAFD4 }, -{ 0xAFD5, 0xAFD5, 0xAFD5 }, -{ 0xAFD6, 0xAFD6, 0xAFD6 }, -{ 0xAFD7, 0xAFD7, 0xAFD7 }, -{ 0xAFD8, 0xAFD8, 0xAFD8 }, -{ 0xAFD9, 0xAFD9, 0xAFD9 }, -{ 0xAFDA, 0xAFDA, 0xAFDA }, -{ 0xAFDB, 0xAFDB, 0xAFDB }, -{ 0xAFDC, 0xAFDC, 0xAFDC }, -{ 0xAFDD, 0xAFDD, 0xAFDD }, -{ 0xAFDE, 0xAFDE, 0xAFDE }, -{ 0xAFDF, 0xAFDF, 0xAFDF }, -{ 0xAFE0, 0xAFE0, 0xAFE0 }, -{ 0xAFE1, 0xAFE1, 0xAFE1 }, -{ 0xAFE2, 0xAFE2, 0xAFE2 }, -{ 0xAFE3, 0xAFE3, 0xAFE3 }, -{ 0xAFE4, 0xAFE4, 0xAFE4 }, -{ 0xAFE5, 0xAFE5, 0xAFE5 }, -{ 0xAFE6, 0xAFE6, 0xAFE6 }, -{ 0xAFE7, 0xAFE7, 0xAFE7 }, -{ 0xAFE8, 0xAFE8, 0xAFE8 }, -{ 0xAFE9, 0xAFE9, 0xAFE9 }, -{ 0xAFEA, 0xAFEA, 0xAFEA }, -{ 0xAFEB, 0xAFEB, 0xAFEB }, -{ 0xAFEC, 0xAFEC, 0xAFEC }, -{ 0xAFED, 0xAFED, 0xAFED }, -{ 0xAFEE, 0xAFEE, 0xAFEE }, -{ 0xAFEF, 0xAFEF, 0xAFEF }, -{ 0xAFF0, 0xAFF0, 0xAFF0 }, -{ 0xAFF1, 0xAFF1, 0xAFF1 }, -{ 0xAFF2, 0xAFF2, 0xAFF2 }, -{ 0xAFF3, 0xAFF3, 0xAFF3 }, -{ 0xAFF4, 0xAFF4, 0xAFF4 }, -{ 0xAFF5, 0xAFF5, 0xAFF5 }, -{ 0xAFF6, 0xAFF6, 0xAFF6 }, -{ 0xAFF7, 0xAFF7, 0xAFF7 }, -{ 0xAFF8, 0xAFF8, 0xAFF8 }, -{ 0xAFF9, 0xAFF9, 0xAFF9 }, -{ 0xAFFA, 0xAFFA, 0xAFFA }, -{ 0xAFFB, 0xAFFB, 0xAFFB }, -{ 0xAFFC, 0xAFFC, 0xAFFC }, -{ 0xAFFD, 0xAFFD, 0xAFFD }, -{ 0xAFFE, 0xAFFE, 0xAFFE }, -{ 0xAFFF, 0xAFFF, 0xAFFF }, -{ 0xB000, 0xB000, 0xB000 }, -{ 0xB001, 0xB001, 0xB001 }, -{ 0xB002, 0xB002, 0xB002 }, -{ 0xB003, 0xB003, 0xB003 }, -{ 0xB004, 0xB004, 0xB004 }, -{ 0xB005, 0xB005, 0xB005 }, -{ 0xB006, 0xB006, 0xB006 }, -{ 0xB007, 0xB007, 0xB007 }, -{ 0xB008, 0xB008, 0xB008 }, -{ 0xB009, 0xB009, 0xB009 }, -{ 0xB00A, 0xB00A, 0xB00A }, -{ 0xB00B, 0xB00B, 0xB00B }, -{ 0xB00C, 0xB00C, 0xB00C }, -{ 0xB00D, 0xB00D, 0xB00D }, -{ 0xB00E, 0xB00E, 0xB00E }, -{ 0xB00F, 0xB00F, 0xB00F }, -{ 0xB010, 0xB010, 0xB010 }, -{ 0xB011, 0xB011, 0xB011 }, -{ 0xB012, 0xB012, 0xB012 }, -{ 0xB013, 0xB013, 0xB013 }, -{ 0xB014, 0xB014, 0xB014 }, -{ 0xB015, 0xB015, 0xB015 }, -{ 0xB016, 0xB016, 0xB016 }, -{ 0xB017, 0xB017, 0xB017 }, -{ 0xB018, 0xB018, 0xB018 }, -{ 0xB019, 0xB019, 0xB019 }, -{ 0xB01A, 0xB01A, 0xB01A }, -{ 0xB01B, 0xB01B, 0xB01B }, -{ 0xB01C, 0xB01C, 0xB01C }, -{ 0xB01D, 0xB01D, 0xB01D }, -{ 0xB01E, 0xB01E, 0xB01E }, -{ 0xB01F, 0xB01F, 0xB01F }, -{ 0xB020, 0xB020, 0xB020 }, -{ 0xB021, 0xB021, 0xB021 }, -{ 0xB022, 0xB022, 0xB022 }, -{ 0xB023, 0xB023, 0xB023 }, -{ 0xB024, 0xB024, 0xB024 }, -{ 0xB025, 0xB025, 0xB025 }, -{ 0xB026, 0xB026, 0xB026 }, -{ 0xB027, 0xB027, 0xB027 }, -{ 0xB028, 0xB028, 0xB028 }, -{ 0xB029, 0xB029, 0xB029 }, -{ 0xB02A, 0xB02A, 0xB02A }, -{ 0xB02B, 0xB02B, 0xB02B }, -{ 0xB02C, 0xB02C, 0xB02C }, -{ 0xB02D, 0xB02D, 0xB02D }, -{ 0xB02E, 0xB02E, 0xB02E }, -{ 0xB02F, 0xB02F, 0xB02F }, -{ 0xB030, 0xB030, 0xB030 }, -{ 0xB031, 0xB031, 0xB031 }, -{ 0xB032, 0xB032, 0xB032 }, -{ 0xB033, 0xB033, 0xB033 }, -{ 0xB034, 0xB034, 0xB034 }, -{ 0xB035, 0xB035, 0xB035 }, -{ 0xB036, 0xB036, 0xB036 }, -{ 0xB037, 0xB037, 0xB037 }, -{ 0xB038, 0xB038, 0xB038 }, -{ 0xB039, 0xB039, 0xB039 }, -{ 0xB03A, 0xB03A, 0xB03A }, -{ 0xB03B, 0xB03B, 0xB03B }, -{ 0xB03C, 0xB03C, 0xB03C }, -{ 0xB03D, 0xB03D, 0xB03D }, -{ 0xB03E, 0xB03E, 0xB03E }, -{ 0xB03F, 0xB03F, 0xB03F }, -{ 0xB040, 0xB040, 0xB040 }, -{ 0xB041, 0xB041, 0xB041 }, -{ 0xB042, 0xB042, 0xB042 }, -{ 0xB043, 0xB043, 0xB043 }, -{ 0xB044, 0xB044, 0xB044 }, -{ 0xB045, 0xB045, 0xB045 }, -{ 0xB046, 0xB046, 0xB046 }, -{ 0xB047, 0xB047, 0xB047 }, -{ 0xB048, 0xB048, 0xB048 }, -{ 0xB049, 0xB049, 0xB049 }, -{ 0xB04A, 0xB04A, 0xB04A }, -{ 0xB04B, 0xB04B, 0xB04B }, -{ 0xB04C, 0xB04C, 0xB04C }, -{ 0xB04D, 0xB04D, 0xB04D }, -{ 0xB04E, 0xB04E, 0xB04E }, -{ 0xB04F, 0xB04F, 0xB04F }, -{ 0xB050, 0xB050, 0xB050 }, -{ 0xB051, 0xB051, 0xB051 }, -{ 0xB052, 0xB052, 0xB052 }, -{ 0xB053, 0xB053, 0xB053 }, -{ 0xB054, 0xB054, 0xB054 }, -{ 0xB055, 0xB055, 0xB055 }, -{ 0xB056, 0xB056, 0xB056 }, -{ 0xB057, 0xB057, 0xB057 }, -{ 0xB058, 0xB058, 0xB058 }, -{ 0xB059, 0xB059, 0xB059 }, -{ 0xB05A, 0xB05A, 0xB05A }, -{ 0xB05B, 0xB05B, 0xB05B }, -{ 0xB05C, 0xB05C, 0xB05C }, -{ 0xB05D, 0xB05D, 0xB05D }, -{ 0xB05E, 0xB05E, 0xB05E }, -{ 0xB05F, 0xB05F, 0xB05F }, -{ 0xB060, 0xB060, 0xB060 }, -{ 0xB061, 0xB061, 0xB061 }, -{ 0xB062, 0xB062, 0xB062 }, -{ 0xB063, 0xB063, 0xB063 }, -{ 0xB064, 0xB064, 0xB064 }, -{ 0xB065, 0xB065, 0xB065 }, -{ 0xB066, 0xB066, 0xB066 }, -{ 0xB067, 0xB067, 0xB067 }, -{ 0xB068, 0xB068, 0xB068 }, -{ 0xB069, 0xB069, 0xB069 }, -{ 0xB06A, 0xB06A, 0xB06A }, -{ 0xB06B, 0xB06B, 0xB06B }, -{ 0xB06C, 0xB06C, 0xB06C }, -{ 0xB06D, 0xB06D, 0xB06D }, -{ 0xB06E, 0xB06E, 0xB06E }, -{ 0xB06F, 0xB06F, 0xB06F }, -{ 0xB070, 0xB070, 0xB070 }, -{ 0xB071, 0xB071, 0xB071 }, -{ 0xB072, 0xB072, 0xB072 }, -{ 0xB073, 0xB073, 0xB073 }, -{ 0xB074, 0xB074, 0xB074 }, -{ 0xB075, 0xB075, 0xB075 }, -{ 0xB076, 0xB076, 0xB076 }, -{ 0xB077, 0xB077, 0xB077 }, -{ 0xB078, 0xB078, 0xB078 }, -{ 0xB079, 0xB079, 0xB079 }, -{ 0xB07A, 0xB07A, 0xB07A }, -{ 0xB07B, 0xB07B, 0xB07B }, -{ 0xB07C, 0xB07C, 0xB07C }, -{ 0xB07D, 0xB07D, 0xB07D }, -{ 0xB07E, 0xB07E, 0xB07E }, -{ 0xB07F, 0xB07F, 0xB07F }, -{ 0xB080, 0xB080, 0xB080 }, -{ 0xB081, 0xB081, 0xB081 }, -{ 0xB082, 0xB082, 0xB082 }, -{ 0xB083, 0xB083, 0xB083 }, -{ 0xB084, 0xB084, 0xB084 }, -{ 0xB085, 0xB085, 0xB085 }, -{ 0xB086, 0xB086, 0xB086 }, -{ 0xB087, 0xB087, 0xB087 }, -{ 0xB088, 0xB088, 0xB088 }, -{ 0xB089, 0xB089, 0xB089 }, -{ 0xB08A, 0xB08A, 0xB08A }, -{ 0xB08B, 0xB08B, 0xB08B }, -{ 0xB08C, 0xB08C, 0xB08C }, -{ 0xB08D, 0xB08D, 0xB08D }, -{ 0xB08E, 0xB08E, 0xB08E }, -{ 0xB08F, 0xB08F, 0xB08F }, -{ 0xB090, 0xB090, 0xB090 }, -{ 0xB091, 0xB091, 0xB091 }, -{ 0xB092, 0xB092, 0xB092 }, -{ 0xB093, 0xB093, 0xB093 }, -{ 0xB094, 0xB094, 0xB094 }, -{ 0xB095, 0xB095, 0xB095 }, -{ 0xB096, 0xB096, 0xB096 }, -{ 0xB097, 0xB097, 0xB097 }, -{ 0xB098, 0xB098, 0xB098 }, -{ 0xB099, 0xB099, 0xB099 }, -{ 0xB09A, 0xB09A, 0xB09A }, -{ 0xB09B, 0xB09B, 0xB09B }, -{ 0xB09C, 0xB09C, 0xB09C }, -{ 0xB09D, 0xB09D, 0xB09D }, -{ 0xB09E, 0xB09E, 0xB09E }, -{ 0xB09F, 0xB09F, 0xB09F }, -{ 0xB0A0, 0xB0A0, 0xB0A0 }, -{ 0xB0A1, 0xB0A1, 0xB0A1 }, -{ 0xB0A2, 0xB0A2, 0xB0A2 }, -{ 0xB0A3, 0xB0A3, 0xB0A3 }, -{ 0xB0A4, 0xB0A4, 0xB0A4 }, -{ 0xB0A5, 0xB0A5, 0xB0A5 }, -{ 0xB0A6, 0xB0A6, 0xB0A6 }, -{ 0xB0A7, 0xB0A7, 0xB0A7 }, -{ 0xB0A8, 0xB0A8, 0xB0A8 }, -{ 0xB0A9, 0xB0A9, 0xB0A9 }, -{ 0xB0AA, 0xB0AA, 0xB0AA }, -{ 0xB0AB, 0xB0AB, 0xB0AB }, -{ 0xB0AC, 0xB0AC, 0xB0AC }, -{ 0xB0AD, 0xB0AD, 0xB0AD }, -{ 0xB0AE, 0xB0AE, 0xB0AE }, -{ 0xB0AF, 0xB0AF, 0xB0AF }, -{ 0xB0B0, 0xB0B0, 0xB0B0 }, -{ 0xB0B1, 0xB0B1, 0xB0B1 }, -{ 0xB0B2, 0xB0B2, 0xB0B2 }, -{ 0xB0B3, 0xB0B3, 0xB0B3 }, -{ 0xB0B4, 0xB0B4, 0xB0B4 }, -{ 0xB0B5, 0xB0B5, 0xB0B5 }, -{ 0xB0B6, 0xB0B6, 0xB0B6 }, -{ 0xB0B7, 0xB0B7, 0xB0B7 }, -{ 0xB0B8, 0xB0B8, 0xB0B8 }, -{ 0xB0B9, 0xB0B9, 0xB0B9 }, -{ 0xB0BA, 0xB0BA, 0xB0BA }, -{ 0xB0BB, 0xB0BB, 0xB0BB }, -{ 0xB0BC, 0xB0BC, 0xB0BC }, -{ 0xB0BD, 0xB0BD, 0xB0BD }, -{ 0xB0BE, 0xB0BE, 0xB0BE }, -{ 0xB0BF, 0xB0BF, 0xB0BF }, -{ 0xB0C0, 0xB0C0, 0xB0C0 }, -{ 0xB0C1, 0xB0C1, 0xB0C1 }, -{ 0xB0C2, 0xB0C2, 0xB0C2 }, -{ 0xB0C3, 0xB0C3, 0xB0C3 }, -{ 0xB0C4, 0xB0C4, 0xB0C4 }, -{ 0xB0C5, 0xB0C5, 0xB0C5 }, -{ 0xB0C6, 0xB0C6, 0xB0C6 }, -{ 0xB0C7, 0xB0C7, 0xB0C7 }, -{ 0xB0C8, 0xB0C8, 0xB0C8 }, -{ 0xB0C9, 0xB0C9, 0xB0C9 }, -{ 0xB0CA, 0xB0CA, 0xB0CA }, -{ 0xB0CB, 0xB0CB, 0xB0CB }, -{ 0xB0CC, 0xB0CC, 0xB0CC }, -{ 0xB0CD, 0xB0CD, 0xB0CD }, -{ 0xB0CE, 0xB0CE, 0xB0CE }, -{ 0xB0CF, 0xB0CF, 0xB0CF }, -{ 0xB0D0, 0xB0D0, 0xB0D0 }, -{ 0xB0D1, 0xB0D1, 0xB0D1 }, -{ 0xB0D2, 0xB0D2, 0xB0D2 }, -{ 0xB0D3, 0xB0D3, 0xB0D3 }, -{ 0xB0D4, 0xB0D4, 0xB0D4 }, -{ 0xB0D5, 0xB0D5, 0xB0D5 }, -{ 0xB0D6, 0xB0D6, 0xB0D6 }, -{ 0xB0D7, 0xB0D7, 0xB0D7 }, -{ 0xB0D8, 0xB0D8, 0xB0D8 }, -{ 0xB0D9, 0xB0D9, 0xB0D9 }, -{ 0xB0DA, 0xB0DA, 0xB0DA }, -{ 0xB0DB, 0xB0DB, 0xB0DB }, -{ 0xB0DC, 0xB0DC, 0xB0DC }, -{ 0xB0DD, 0xB0DD, 0xB0DD }, -{ 0xB0DE, 0xB0DE, 0xB0DE }, -{ 0xB0DF, 0xB0DF, 0xB0DF }, -{ 0xB0E0, 0xB0E0, 0xB0E0 }, -{ 0xB0E1, 0xB0E1, 0xB0E1 }, -{ 0xB0E2, 0xB0E2, 0xB0E2 }, -{ 0xB0E3, 0xB0E3, 0xB0E3 }, -{ 0xB0E4, 0xB0E4, 0xB0E4 }, -{ 0xB0E5, 0xB0E5, 0xB0E5 }, -{ 0xB0E6, 0xB0E6, 0xB0E6 }, -{ 0xB0E7, 0xB0E7, 0xB0E7 }, -{ 0xB0E8, 0xB0E8, 0xB0E8 }, -{ 0xB0E9, 0xB0E9, 0xB0E9 }, -{ 0xB0EA, 0xB0EA, 0xB0EA }, -{ 0xB0EB, 0xB0EB, 0xB0EB }, -{ 0xB0EC, 0xB0EC, 0xB0EC }, -{ 0xB0ED, 0xB0ED, 0xB0ED }, -{ 0xB0EE, 0xB0EE, 0xB0EE }, -{ 0xB0EF, 0xB0EF, 0xB0EF }, -{ 0xB0F0, 0xB0F0, 0xB0F0 }, -{ 0xB0F1, 0xB0F1, 0xB0F1 }, -{ 0xB0F2, 0xB0F2, 0xB0F2 }, -{ 0xB0F3, 0xB0F3, 0xB0F3 }, -{ 0xB0F4, 0xB0F4, 0xB0F4 }, -{ 0xB0F5, 0xB0F5, 0xB0F5 }, -{ 0xB0F6, 0xB0F6, 0xB0F6 }, -{ 0xB0F7, 0xB0F7, 0xB0F7 }, -{ 0xB0F8, 0xB0F8, 0xB0F8 }, -{ 0xB0F9, 0xB0F9, 0xB0F9 }, -{ 0xB0FA, 0xB0FA, 0xB0FA }, -{ 0xB0FB, 0xB0FB, 0xB0FB }, -{ 0xB0FC, 0xB0FC, 0xB0FC }, -{ 0xB0FD, 0xB0FD, 0xB0FD }, -{ 0xB0FE, 0xB0FE, 0xB0FE }, -{ 0xB0FF, 0xB0FF, 0xB0FF }, -{ 0xB100, 0xB100, 0xB100 }, -{ 0xB101, 0xB101, 0xB101 }, -{ 0xB102, 0xB102, 0xB102 }, -{ 0xB103, 0xB103, 0xB103 }, -{ 0xB104, 0xB104, 0xB104 }, -{ 0xB105, 0xB105, 0xB105 }, -{ 0xB106, 0xB106, 0xB106 }, -{ 0xB107, 0xB107, 0xB107 }, -{ 0xB108, 0xB108, 0xB108 }, -{ 0xB109, 0xB109, 0xB109 }, -{ 0xB10A, 0xB10A, 0xB10A }, -{ 0xB10B, 0xB10B, 0xB10B }, -{ 0xB10C, 0xB10C, 0xB10C }, -{ 0xB10D, 0xB10D, 0xB10D }, -{ 0xB10E, 0xB10E, 0xB10E }, -{ 0xB10F, 0xB10F, 0xB10F }, -{ 0xB110, 0xB110, 0xB110 }, -{ 0xB111, 0xB111, 0xB111 }, -{ 0xB112, 0xB112, 0xB112 }, -{ 0xB113, 0xB113, 0xB113 }, -{ 0xB114, 0xB114, 0xB114 }, -{ 0xB115, 0xB115, 0xB115 }, -{ 0xB116, 0xB116, 0xB116 }, -{ 0xB117, 0xB117, 0xB117 }, -{ 0xB118, 0xB118, 0xB118 }, -{ 0xB119, 0xB119, 0xB119 }, -{ 0xB11A, 0xB11A, 0xB11A }, -{ 0xB11B, 0xB11B, 0xB11B }, -{ 0xB11C, 0xB11C, 0xB11C }, -{ 0xB11D, 0xB11D, 0xB11D }, -{ 0xB11E, 0xB11E, 0xB11E }, -{ 0xB11F, 0xB11F, 0xB11F }, -{ 0xB120, 0xB120, 0xB120 }, -{ 0xB121, 0xB121, 0xB121 }, -{ 0xB122, 0xB122, 0xB122 }, -{ 0xB123, 0xB123, 0xB123 }, -{ 0xB124, 0xB124, 0xB124 }, -{ 0xB125, 0xB125, 0xB125 }, -{ 0xB126, 0xB126, 0xB126 }, -{ 0xB127, 0xB127, 0xB127 }, -{ 0xB128, 0xB128, 0xB128 }, -{ 0xB129, 0xB129, 0xB129 }, -{ 0xB12A, 0xB12A, 0xB12A }, -{ 0xB12B, 0xB12B, 0xB12B }, -{ 0xB12C, 0xB12C, 0xB12C }, -{ 0xB12D, 0xB12D, 0xB12D }, -{ 0xB12E, 0xB12E, 0xB12E }, -{ 0xB12F, 0xB12F, 0xB12F }, -{ 0xB130, 0xB130, 0xB130 }, -{ 0xB131, 0xB131, 0xB131 }, -{ 0xB132, 0xB132, 0xB132 }, -{ 0xB133, 0xB133, 0xB133 }, -{ 0xB134, 0xB134, 0xB134 }, -{ 0xB135, 0xB135, 0xB135 }, -{ 0xB136, 0xB136, 0xB136 }, -{ 0xB137, 0xB137, 0xB137 }, -{ 0xB138, 0xB138, 0xB138 }, -{ 0xB139, 0xB139, 0xB139 }, -{ 0xB13A, 0xB13A, 0xB13A }, -{ 0xB13B, 0xB13B, 0xB13B }, -{ 0xB13C, 0xB13C, 0xB13C }, -{ 0xB13D, 0xB13D, 0xB13D }, -{ 0xB13E, 0xB13E, 0xB13E }, -{ 0xB13F, 0xB13F, 0xB13F }, -{ 0xB140, 0xB140, 0xB140 }, -{ 0xB141, 0xB141, 0xB141 }, -{ 0xB142, 0xB142, 0xB142 }, -{ 0xB143, 0xB143, 0xB143 }, -{ 0xB144, 0xB144, 0xB144 }, -{ 0xB145, 0xB145, 0xB145 }, -{ 0xB146, 0xB146, 0xB146 }, -{ 0xB147, 0xB147, 0xB147 }, -{ 0xB148, 0xB148, 0xB148 }, -{ 0xB149, 0xB149, 0xB149 }, -{ 0xB14A, 0xB14A, 0xB14A }, -{ 0xB14B, 0xB14B, 0xB14B }, -{ 0xB14C, 0xB14C, 0xB14C }, -{ 0xB14D, 0xB14D, 0xB14D }, -{ 0xB14E, 0xB14E, 0xB14E }, -{ 0xB14F, 0xB14F, 0xB14F }, -{ 0xB150, 0xB150, 0xB150 }, -{ 0xB151, 0xB151, 0xB151 }, -{ 0xB152, 0xB152, 0xB152 }, -{ 0xB153, 0xB153, 0xB153 }, -{ 0xB154, 0xB154, 0xB154 }, -{ 0xB155, 0xB155, 0xB155 }, -{ 0xB156, 0xB156, 0xB156 }, -{ 0xB157, 0xB157, 0xB157 }, -{ 0xB158, 0xB158, 0xB158 }, -{ 0xB159, 0xB159, 0xB159 }, -{ 0xB15A, 0xB15A, 0xB15A }, -{ 0xB15B, 0xB15B, 0xB15B }, -{ 0xB15C, 0xB15C, 0xB15C }, -{ 0xB15D, 0xB15D, 0xB15D }, -{ 0xB15E, 0xB15E, 0xB15E }, -{ 0xB15F, 0xB15F, 0xB15F }, -{ 0xB160, 0xB160, 0xB160 }, -{ 0xB161, 0xB161, 0xB161 }, -{ 0xB162, 0xB162, 0xB162 }, -{ 0xB163, 0xB163, 0xB163 }, -{ 0xB164, 0xB164, 0xB164 }, -{ 0xB165, 0xB165, 0xB165 }, -{ 0xB166, 0xB166, 0xB166 }, -{ 0xB167, 0xB167, 0xB167 }, -{ 0xB168, 0xB168, 0xB168 }, -{ 0xB169, 0xB169, 0xB169 }, -{ 0xB16A, 0xB16A, 0xB16A }, -{ 0xB16B, 0xB16B, 0xB16B }, -{ 0xB16C, 0xB16C, 0xB16C }, -{ 0xB16D, 0xB16D, 0xB16D }, -{ 0xB16E, 0xB16E, 0xB16E }, -{ 0xB16F, 0xB16F, 0xB16F }, -{ 0xB170, 0xB170, 0xB170 }, -{ 0xB171, 0xB171, 0xB171 }, -{ 0xB172, 0xB172, 0xB172 }, -{ 0xB173, 0xB173, 0xB173 }, -{ 0xB174, 0xB174, 0xB174 }, -{ 0xB175, 0xB175, 0xB175 }, -{ 0xB176, 0xB176, 0xB176 }, -{ 0xB177, 0xB177, 0xB177 }, -{ 0xB178, 0xB178, 0xB178 }, -{ 0xB179, 0xB179, 0xB179 }, -{ 0xB17A, 0xB17A, 0xB17A }, -{ 0xB17B, 0xB17B, 0xB17B }, -{ 0xB17C, 0xB17C, 0xB17C }, -{ 0xB17D, 0xB17D, 0xB17D }, -{ 0xB17E, 0xB17E, 0xB17E }, -{ 0xB17F, 0xB17F, 0xB17F }, -{ 0xB180, 0xB180, 0xB180 }, -{ 0xB181, 0xB181, 0xB181 }, -{ 0xB182, 0xB182, 0xB182 }, -{ 0xB183, 0xB183, 0xB183 }, -{ 0xB184, 0xB184, 0xB184 }, -{ 0xB185, 0xB185, 0xB185 }, -{ 0xB186, 0xB186, 0xB186 }, -{ 0xB187, 0xB187, 0xB187 }, -{ 0xB188, 0xB188, 0xB188 }, -{ 0xB189, 0xB189, 0xB189 }, -{ 0xB18A, 0xB18A, 0xB18A }, -{ 0xB18B, 0xB18B, 0xB18B }, -{ 0xB18C, 0xB18C, 0xB18C }, -{ 0xB18D, 0xB18D, 0xB18D }, -{ 0xB18E, 0xB18E, 0xB18E }, -{ 0xB18F, 0xB18F, 0xB18F }, -{ 0xB190, 0xB190, 0xB190 }, -{ 0xB191, 0xB191, 0xB191 }, -{ 0xB192, 0xB192, 0xB192 }, -{ 0xB193, 0xB193, 0xB193 }, -{ 0xB194, 0xB194, 0xB194 }, -{ 0xB195, 0xB195, 0xB195 }, -{ 0xB196, 0xB196, 0xB196 }, -{ 0xB197, 0xB197, 0xB197 }, -{ 0xB198, 0xB198, 0xB198 }, -{ 0xB199, 0xB199, 0xB199 }, -{ 0xB19A, 0xB19A, 0xB19A }, -{ 0xB19B, 0xB19B, 0xB19B }, -{ 0xB19C, 0xB19C, 0xB19C }, -{ 0xB19D, 0xB19D, 0xB19D }, -{ 0xB19E, 0xB19E, 0xB19E }, -{ 0xB19F, 0xB19F, 0xB19F }, -{ 0xB1A0, 0xB1A0, 0xB1A0 }, -{ 0xB1A1, 0xB1A1, 0xB1A1 }, -{ 0xB1A2, 0xB1A2, 0xB1A2 }, -{ 0xB1A3, 0xB1A3, 0xB1A3 }, -{ 0xB1A4, 0xB1A4, 0xB1A4 }, -{ 0xB1A5, 0xB1A5, 0xB1A5 }, -{ 0xB1A6, 0xB1A6, 0xB1A6 }, -{ 0xB1A7, 0xB1A7, 0xB1A7 }, -{ 0xB1A8, 0xB1A8, 0xB1A8 }, -{ 0xB1A9, 0xB1A9, 0xB1A9 }, -{ 0xB1AA, 0xB1AA, 0xB1AA }, -{ 0xB1AB, 0xB1AB, 0xB1AB }, -{ 0xB1AC, 0xB1AC, 0xB1AC }, -{ 0xB1AD, 0xB1AD, 0xB1AD }, -{ 0xB1AE, 0xB1AE, 0xB1AE }, -{ 0xB1AF, 0xB1AF, 0xB1AF }, -{ 0xB1B0, 0xB1B0, 0xB1B0 }, -{ 0xB1B1, 0xB1B1, 0xB1B1 }, -{ 0xB1B2, 0xB1B2, 0xB1B2 }, -{ 0xB1B3, 0xB1B3, 0xB1B3 }, -{ 0xB1B4, 0xB1B4, 0xB1B4 }, -{ 0xB1B5, 0xB1B5, 0xB1B5 }, -{ 0xB1B6, 0xB1B6, 0xB1B6 }, -{ 0xB1B7, 0xB1B7, 0xB1B7 }, -{ 0xB1B8, 0xB1B8, 0xB1B8 }, -{ 0xB1B9, 0xB1B9, 0xB1B9 }, -{ 0xB1BA, 0xB1BA, 0xB1BA }, -{ 0xB1BB, 0xB1BB, 0xB1BB }, -{ 0xB1BC, 0xB1BC, 0xB1BC }, -{ 0xB1BD, 0xB1BD, 0xB1BD }, -{ 0xB1BE, 0xB1BE, 0xB1BE }, -{ 0xB1BF, 0xB1BF, 0xB1BF }, -{ 0xB1C0, 0xB1C0, 0xB1C0 }, -{ 0xB1C1, 0xB1C1, 0xB1C1 }, -{ 0xB1C2, 0xB1C2, 0xB1C2 }, -{ 0xB1C3, 0xB1C3, 0xB1C3 }, -{ 0xB1C4, 0xB1C4, 0xB1C4 }, -{ 0xB1C5, 0xB1C5, 0xB1C5 }, -{ 0xB1C6, 0xB1C6, 0xB1C6 }, -{ 0xB1C7, 0xB1C7, 0xB1C7 }, -{ 0xB1C8, 0xB1C8, 0xB1C8 }, -{ 0xB1C9, 0xB1C9, 0xB1C9 }, -{ 0xB1CA, 0xB1CA, 0xB1CA }, -{ 0xB1CB, 0xB1CB, 0xB1CB }, -{ 0xB1CC, 0xB1CC, 0xB1CC }, -{ 0xB1CD, 0xB1CD, 0xB1CD }, -{ 0xB1CE, 0xB1CE, 0xB1CE }, -{ 0xB1CF, 0xB1CF, 0xB1CF }, -{ 0xB1D0, 0xB1D0, 0xB1D0 }, -{ 0xB1D1, 0xB1D1, 0xB1D1 }, -{ 0xB1D2, 0xB1D2, 0xB1D2 }, -{ 0xB1D3, 0xB1D3, 0xB1D3 }, -{ 0xB1D4, 0xB1D4, 0xB1D4 }, -{ 0xB1D5, 0xB1D5, 0xB1D5 }, -{ 0xB1D6, 0xB1D6, 0xB1D6 }, -{ 0xB1D7, 0xB1D7, 0xB1D7 }, -{ 0xB1D8, 0xB1D8, 0xB1D8 }, -{ 0xB1D9, 0xB1D9, 0xB1D9 }, -{ 0xB1DA, 0xB1DA, 0xB1DA }, -{ 0xB1DB, 0xB1DB, 0xB1DB }, -{ 0xB1DC, 0xB1DC, 0xB1DC }, -{ 0xB1DD, 0xB1DD, 0xB1DD }, -{ 0xB1DE, 0xB1DE, 0xB1DE }, -{ 0xB1DF, 0xB1DF, 0xB1DF }, -{ 0xB1E0, 0xB1E0, 0xB1E0 }, -{ 0xB1E1, 0xB1E1, 0xB1E1 }, -{ 0xB1E2, 0xB1E2, 0xB1E2 }, -{ 0xB1E3, 0xB1E3, 0xB1E3 }, -{ 0xB1E4, 0xB1E4, 0xB1E4 }, -{ 0xB1E5, 0xB1E5, 0xB1E5 }, -{ 0xB1E6, 0xB1E6, 0xB1E6 }, -{ 0xB1E7, 0xB1E7, 0xB1E7 }, -{ 0xB1E8, 0xB1E8, 0xB1E8 }, -{ 0xB1E9, 0xB1E9, 0xB1E9 }, -{ 0xB1EA, 0xB1EA, 0xB1EA }, -{ 0xB1EB, 0xB1EB, 0xB1EB }, -{ 0xB1EC, 0xB1EC, 0xB1EC }, -{ 0xB1ED, 0xB1ED, 0xB1ED }, -{ 0xB1EE, 0xB1EE, 0xB1EE }, -{ 0xB1EF, 0xB1EF, 0xB1EF }, -{ 0xB1F0, 0xB1F0, 0xB1F0 }, -{ 0xB1F1, 0xB1F1, 0xB1F1 }, -{ 0xB1F2, 0xB1F2, 0xB1F2 }, -{ 0xB1F3, 0xB1F3, 0xB1F3 }, -{ 0xB1F4, 0xB1F4, 0xB1F4 }, -{ 0xB1F5, 0xB1F5, 0xB1F5 }, -{ 0xB1F6, 0xB1F6, 0xB1F6 }, -{ 0xB1F7, 0xB1F7, 0xB1F7 }, -{ 0xB1F8, 0xB1F8, 0xB1F8 }, -{ 0xB1F9, 0xB1F9, 0xB1F9 }, -{ 0xB1FA, 0xB1FA, 0xB1FA }, -{ 0xB1FB, 0xB1FB, 0xB1FB }, -{ 0xB1FC, 0xB1FC, 0xB1FC }, -{ 0xB1FD, 0xB1FD, 0xB1FD }, -{ 0xB1FE, 0xB1FE, 0xB1FE }, -{ 0xB1FF, 0xB1FF, 0xB1FF }, -{ 0xB200, 0xB200, 0xB200 }, -{ 0xB201, 0xB201, 0xB201 }, -{ 0xB202, 0xB202, 0xB202 }, -{ 0xB203, 0xB203, 0xB203 }, -{ 0xB204, 0xB204, 0xB204 }, -{ 0xB205, 0xB205, 0xB205 }, -{ 0xB206, 0xB206, 0xB206 }, -{ 0xB207, 0xB207, 0xB207 }, -{ 0xB208, 0xB208, 0xB208 }, -{ 0xB209, 0xB209, 0xB209 }, -{ 0xB20A, 0xB20A, 0xB20A }, -{ 0xB20B, 0xB20B, 0xB20B }, -{ 0xB20C, 0xB20C, 0xB20C }, -{ 0xB20D, 0xB20D, 0xB20D }, -{ 0xB20E, 0xB20E, 0xB20E }, -{ 0xB20F, 0xB20F, 0xB20F }, -{ 0xB210, 0xB210, 0xB210 }, -{ 0xB211, 0xB211, 0xB211 }, -{ 0xB212, 0xB212, 0xB212 }, -{ 0xB213, 0xB213, 0xB213 }, -{ 0xB214, 0xB214, 0xB214 }, -{ 0xB215, 0xB215, 0xB215 }, -{ 0xB216, 0xB216, 0xB216 }, -{ 0xB217, 0xB217, 0xB217 }, -{ 0xB218, 0xB218, 0xB218 }, -{ 0xB219, 0xB219, 0xB219 }, -{ 0xB21A, 0xB21A, 0xB21A }, -{ 0xB21B, 0xB21B, 0xB21B }, -{ 0xB21C, 0xB21C, 0xB21C }, -{ 0xB21D, 0xB21D, 0xB21D }, -{ 0xB21E, 0xB21E, 0xB21E }, -{ 0xB21F, 0xB21F, 0xB21F }, -{ 0xB220, 0xB220, 0xB220 }, -{ 0xB221, 0xB221, 0xB221 }, -{ 0xB222, 0xB222, 0xB222 }, -{ 0xB223, 0xB223, 0xB223 }, -{ 0xB224, 0xB224, 0xB224 }, -{ 0xB225, 0xB225, 0xB225 }, -{ 0xB226, 0xB226, 0xB226 }, -{ 0xB227, 0xB227, 0xB227 }, -{ 0xB228, 0xB228, 0xB228 }, -{ 0xB229, 0xB229, 0xB229 }, -{ 0xB22A, 0xB22A, 0xB22A }, -{ 0xB22B, 0xB22B, 0xB22B }, -{ 0xB22C, 0xB22C, 0xB22C }, -{ 0xB22D, 0xB22D, 0xB22D }, -{ 0xB22E, 0xB22E, 0xB22E }, -{ 0xB22F, 0xB22F, 0xB22F }, -{ 0xB230, 0xB230, 0xB230 }, -{ 0xB231, 0xB231, 0xB231 }, -{ 0xB232, 0xB232, 0xB232 }, -{ 0xB233, 0xB233, 0xB233 }, -{ 0xB234, 0xB234, 0xB234 }, -{ 0xB235, 0xB235, 0xB235 }, -{ 0xB236, 0xB236, 0xB236 }, -{ 0xB237, 0xB237, 0xB237 }, -{ 0xB238, 0xB238, 0xB238 }, -{ 0xB239, 0xB239, 0xB239 }, -{ 0xB23A, 0xB23A, 0xB23A }, -{ 0xB23B, 0xB23B, 0xB23B }, -{ 0xB23C, 0xB23C, 0xB23C }, -{ 0xB23D, 0xB23D, 0xB23D }, -{ 0xB23E, 0xB23E, 0xB23E }, -{ 0xB23F, 0xB23F, 0xB23F }, -{ 0xB240, 0xB240, 0xB240 }, -{ 0xB241, 0xB241, 0xB241 }, -{ 0xB242, 0xB242, 0xB242 }, -{ 0xB243, 0xB243, 0xB243 }, -{ 0xB244, 0xB244, 0xB244 }, -{ 0xB245, 0xB245, 0xB245 }, -{ 0xB246, 0xB246, 0xB246 }, -{ 0xB247, 0xB247, 0xB247 }, -{ 0xB248, 0xB248, 0xB248 }, -{ 0xB249, 0xB249, 0xB249 }, -{ 0xB24A, 0xB24A, 0xB24A }, -{ 0xB24B, 0xB24B, 0xB24B }, -{ 0xB24C, 0xB24C, 0xB24C }, -{ 0xB24D, 0xB24D, 0xB24D }, -{ 0xB24E, 0xB24E, 0xB24E }, -{ 0xB24F, 0xB24F, 0xB24F }, -{ 0xB250, 0xB250, 0xB250 }, -{ 0xB251, 0xB251, 0xB251 }, -{ 0xB252, 0xB252, 0xB252 }, -{ 0xB253, 0xB253, 0xB253 }, -{ 0xB254, 0xB254, 0xB254 }, -{ 0xB255, 0xB255, 0xB255 }, -{ 0xB256, 0xB256, 0xB256 }, -{ 0xB257, 0xB257, 0xB257 }, -{ 0xB258, 0xB258, 0xB258 }, -{ 0xB259, 0xB259, 0xB259 }, -{ 0xB25A, 0xB25A, 0xB25A }, -{ 0xB25B, 0xB25B, 0xB25B }, -{ 0xB25C, 0xB25C, 0xB25C }, -{ 0xB25D, 0xB25D, 0xB25D }, -{ 0xB25E, 0xB25E, 0xB25E }, -{ 0xB25F, 0xB25F, 0xB25F }, -{ 0xB260, 0xB260, 0xB260 }, -{ 0xB261, 0xB261, 0xB261 }, -{ 0xB262, 0xB262, 0xB262 }, -{ 0xB263, 0xB263, 0xB263 }, -{ 0xB264, 0xB264, 0xB264 }, -{ 0xB265, 0xB265, 0xB265 }, -{ 0xB266, 0xB266, 0xB266 }, -{ 0xB267, 0xB267, 0xB267 }, -{ 0xB268, 0xB268, 0xB268 }, -{ 0xB269, 0xB269, 0xB269 }, -{ 0xB26A, 0xB26A, 0xB26A }, -{ 0xB26B, 0xB26B, 0xB26B }, -{ 0xB26C, 0xB26C, 0xB26C }, -{ 0xB26D, 0xB26D, 0xB26D }, -{ 0xB26E, 0xB26E, 0xB26E }, -{ 0xB26F, 0xB26F, 0xB26F }, -{ 0xB270, 0xB270, 0xB270 }, -{ 0xB271, 0xB271, 0xB271 }, -{ 0xB272, 0xB272, 0xB272 }, -{ 0xB273, 0xB273, 0xB273 }, -{ 0xB274, 0xB274, 0xB274 }, -{ 0xB275, 0xB275, 0xB275 }, -{ 0xB276, 0xB276, 0xB276 }, -{ 0xB277, 0xB277, 0xB277 }, -{ 0xB278, 0xB278, 0xB278 }, -{ 0xB279, 0xB279, 0xB279 }, -{ 0xB27A, 0xB27A, 0xB27A }, -{ 0xB27B, 0xB27B, 0xB27B }, -{ 0xB27C, 0xB27C, 0xB27C }, -{ 0xB27D, 0xB27D, 0xB27D }, -{ 0xB27E, 0xB27E, 0xB27E }, -{ 0xB27F, 0xB27F, 0xB27F }, -{ 0xB280, 0xB280, 0xB280 }, -{ 0xB281, 0xB281, 0xB281 }, -{ 0xB282, 0xB282, 0xB282 }, -{ 0xB283, 0xB283, 0xB283 }, -{ 0xB284, 0xB284, 0xB284 }, -{ 0xB285, 0xB285, 0xB285 }, -{ 0xB286, 0xB286, 0xB286 }, -{ 0xB287, 0xB287, 0xB287 }, -{ 0xB288, 0xB288, 0xB288 }, -{ 0xB289, 0xB289, 0xB289 }, -{ 0xB28A, 0xB28A, 0xB28A }, -{ 0xB28B, 0xB28B, 0xB28B }, -{ 0xB28C, 0xB28C, 0xB28C }, -{ 0xB28D, 0xB28D, 0xB28D }, -{ 0xB28E, 0xB28E, 0xB28E }, -{ 0xB28F, 0xB28F, 0xB28F }, -{ 0xB290, 0xB290, 0xB290 }, -{ 0xB291, 0xB291, 0xB291 }, -{ 0xB292, 0xB292, 0xB292 }, -{ 0xB293, 0xB293, 0xB293 }, -{ 0xB294, 0xB294, 0xB294 }, -{ 0xB295, 0xB295, 0xB295 }, -{ 0xB296, 0xB296, 0xB296 }, -{ 0xB297, 0xB297, 0xB297 }, -{ 0xB298, 0xB298, 0xB298 }, -{ 0xB299, 0xB299, 0xB299 }, -{ 0xB29A, 0xB29A, 0xB29A }, -{ 0xB29B, 0xB29B, 0xB29B }, -{ 0xB29C, 0xB29C, 0xB29C }, -{ 0xB29D, 0xB29D, 0xB29D }, -{ 0xB29E, 0xB29E, 0xB29E }, -{ 0xB29F, 0xB29F, 0xB29F }, -{ 0xB2A0, 0xB2A0, 0xB2A0 }, -{ 0xB2A1, 0xB2A1, 0xB2A1 }, -{ 0xB2A2, 0xB2A2, 0xB2A2 }, -{ 0xB2A3, 0xB2A3, 0xB2A3 }, -{ 0xB2A4, 0xB2A4, 0xB2A4 }, -{ 0xB2A5, 0xB2A5, 0xB2A5 }, -{ 0xB2A6, 0xB2A6, 0xB2A6 }, -{ 0xB2A7, 0xB2A7, 0xB2A7 }, -{ 0xB2A8, 0xB2A8, 0xB2A8 }, -{ 0xB2A9, 0xB2A9, 0xB2A9 }, -{ 0xB2AA, 0xB2AA, 0xB2AA }, -{ 0xB2AB, 0xB2AB, 0xB2AB }, -{ 0xB2AC, 0xB2AC, 0xB2AC }, -{ 0xB2AD, 0xB2AD, 0xB2AD }, -{ 0xB2AE, 0xB2AE, 0xB2AE }, -{ 0xB2AF, 0xB2AF, 0xB2AF }, -{ 0xB2B0, 0xB2B0, 0xB2B0 }, -{ 0xB2B1, 0xB2B1, 0xB2B1 }, -{ 0xB2B2, 0xB2B2, 0xB2B2 }, -{ 0xB2B3, 0xB2B3, 0xB2B3 }, -{ 0xB2B4, 0xB2B4, 0xB2B4 }, -{ 0xB2B5, 0xB2B5, 0xB2B5 }, -{ 0xB2B6, 0xB2B6, 0xB2B6 }, -{ 0xB2B7, 0xB2B7, 0xB2B7 }, -{ 0xB2B8, 0xB2B8, 0xB2B8 }, -{ 0xB2B9, 0xB2B9, 0xB2B9 }, -{ 0xB2BA, 0xB2BA, 0xB2BA }, -{ 0xB2BB, 0xB2BB, 0xB2BB }, -{ 0xB2BC, 0xB2BC, 0xB2BC }, -{ 0xB2BD, 0xB2BD, 0xB2BD }, -{ 0xB2BE, 0xB2BE, 0xB2BE }, -{ 0xB2BF, 0xB2BF, 0xB2BF }, -{ 0xB2C0, 0xB2C0, 0xB2C0 }, -{ 0xB2C1, 0xB2C1, 0xB2C1 }, -{ 0xB2C2, 0xB2C2, 0xB2C2 }, -{ 0xB2C3, 0xB2C3, 0xB2C3 }, -{ 0xB2C4, 0xB2C4, 0xB2C4 }, -{ 0xB2C5, 0xB2C5, 0xB2C5 }, -{ 0xB2C6, 0xB2C6, 0xB2C6 }, -{ 0xB2C7, 0xB2C7, 0xB2C7 }, -{ 0xB2C8, 0xB2C8, 0xB2C8 }, -{ 0xB2C9, 0xB2C9, 0xB2C9 }, -{ 0xB2CA, 0xB2CA, 0xB2CA }, -{ 0xB2CB, 0xB2CB, 0xB2CB }, -{ 0xB2CC, 0xB2CC, 0xB2CC }, -{ 0xB2CD, 0xB2CD, 0xB2CD }, -{ 0xB2CE, 0xB2CE, 0xB2CE }, -{ 0xB2CF, 0xB2CF, 0xB2CF }, -{ 0xB2D0, 0xB2D0, 0xB2D0 }, -{ 0xB2D1, 0xB2D1, 0xB2D1 }, -{ 0xB2D2, 0xB2D2, 0xB2D2 }, -{ 0xB2D3, 0xB2D3, 0xB2D3 }, -{ 0xB2D4, 0xB2D4, 0xB2D4 }, -{ 0xB2D5, 0xB2D5, 0xB2D5 }, -{ 0xB2D6, 0xB2D6, 0xB2D6 }, -{ 0xB2D7, 0xB2D7, 0xB2D7 }, -{ 0xB2D8, 0xB2D8, 0xB2D8 }, -{ 0xB2D9, 0xB2D9, 0xB2D9 }, -{ 0xB2DA, 0xB2DA, 0xB2DA }, -{ 0xB2DB, 0xB2DB, 0xB2DB }, -{ 0xB2DC, 0xB2DC, 0xB2DC }, -{ 0xB2DD, 0xB2DD, 0xB2DD }, -{ 0xB2DE, 0xB2DE, 0xB2DE }, -{ 0xB2DF, 0xB2DF, 0xB2DF }, -{ 0xB2E0, 0xB2E0, 0xB2E0 }, -{ 0xB2E1, 0xB2E1, 0xB2E1 }, -{ 0xB2E2, 0xB2E2, 0xB2E2 }, -{ 0xB2E3, 0xB2E3, 0xB2E3 }, -{ 0xB2E4, 0xB2E4, 0xB2E4 }, -{ 0xB2E5, 0xB2E5, 0xB2E5 }, -{ 0xB2E6, 0xB2E6, 0xB2E6 }, -{ 0xB2E7, 0xB2E7, 0xB2E7 }, -{ 0xB2E8, 0xB2E8, 0xB2E8 }, -{ 0xB2E9, 0xB2E9, 0xB2E9 }, -{ 0xB2EA, 0xB2EA, 0xB2EA }, -{ 0xB2EB, 0xB2EB, 0xB2EB }, -{ 0xB2EC, 0xB2EC, 0xB2EC }, -{ 0xB2ED, 0xB2ED, 0xB2ED }, -{ 0xB2EE, 0xB2EE, 0xB2EE }, -{ 0xB2EF, 0xB2EF, 0xB2EF }, -{ 0xB2F0, 0xB2F0, 0xB2F0 }, -{ 0xB2F1, 0xB2F1, 0xB2F1 }, -{ 0xB2F2, 0xB2F2, 0xB2F2 }, -{ 0xB2F3, 0xB2F3, 0xB2F3 }, -{ 0xB2F4, 0xB2F4, 0xB2F4 }, -{ 0xB2F5, 0xB2F5, 0xB2F5 }, -{ 0xB2F6, 0xB2F6, 0xB2F6 }, -{ 0xB2F7, 0xB2F7, 0xB2F7 }, -{ 0xB2F8, 0xB2F8, 0xB2F8 }, -{ 0xB2F9, 0xB2F9, 0xB2F9 }, -{ 0xB2FA, 0xB2FA, 0xB2FA }, -{ 0xB2FB, 0xB2FB, 0xB2FB }, -{ 0xB2FC, 0xB2FC, 0xB2FC }, -{ 0xB2FD, 0xB2FD, 0xB2FD }, -{ 0xB2FE, 0xB2FE, 0xB2FE }, -{ 0xB2FF, 0xB2FF, 0xB2FF }, -{ 0xB300, 0xB300, 0xB300 }, -{ 0xB301, 0xB301, 0xB301 }, -{ 0xB302, 0xB302, 0xB302 }, -{ 0xB303, 0xB303, 0xB303 }, -{ 0xB304, 0xB304, 0xB304 }, -{ 0xB305, 0xB305, 0xB305 }, -{ 0xB306, 0xB306, 0xB306 }, -{ 0xB307, 0xB307, 0xB307 }, -{ 0xB308, 0xB308, 0xB308 }, -{ 0xB309, 0xB309, 0xB309 }, -{ 0xB30A, 0xB30A, 0xB30A }, -{ 0xB30B, 0xB30B, 0xB30B }, -{ 0xB30C, 0xB30C, 0xB30C }, -{ 0xB30D, 0xB30D, 0xB30D }, -{ 0xB30E, 0xB30E, 0xB30E }, -{ 0xB30F, 0xB30F, 0xB30F }, -{ 0xB310, 0xB310, 0xB310 }, -{ 0xB311, 0xB311, 0xB311 }, -{ 0xB312, 0xB312, 0xB312 }, -{ 0xB313, 0xB313, 0xB313 }, -{ 0xB314, 0xB314, 0xB314 }, -{ 0xB315, 0xB315, 0xB315 }, -{ 0xB316, 0xB316, 0xB316 }, -{ 0xB317, 0xB317, 0xB317 }, -{ 0xB318, 0xB318, 0xB318 }, -{ 0xB319, 0xB319, 0xB319 }, -{ 0xB31A, 0xB31A, 0xB31A }, -{ 0xB31B, 0xB31B, 0xB31B }, -{ 0xB31C, 0xB31C, 0xB31C }, -{ 0xB31D, 0xB31D, 0xB31D }, -{ 0xB31E, 0xB31E, 0xB31E }, -{ 0xB31F, 0xB31F, 0xB31F }, -{ 0xB320, 0xB320, 0xB320 }, -{ 0xB321, 0xB321, 0xB321 }, -{ 0xB322, 0xB322, 0xB322 }, -{ 0xB323, 0xB323, 0xB323 }, -{ 0xB324, 0xB324, 0xB324 }, -{ 0xB325, 0xB325, 0xB325 }, -{ 0xB326, 0xB326, 0xB326 }, -{ 0xB327, 0xB327, 0xB327 }, -{ 0xB328, 0xB328, 0xB328 }, -{ 0xB329, 0xB329, 0xB329 }, -{ 0xB32A, 0xB32A, 0xB32A }, -{ 0xB32B, 0xB32B, 0xB32B }, -{ 0xB32C, 0xB32C, 0xB32C }, -{ 0xB32D, 0xB32D, 0xB32D }, -{ 0xB32E, 0xB32E, 0xB32E }, -{ 0xB32F, 0xB32F, 0xB32F }, -{ 0xB330, 0xB330, 0xB330 }, -{ 0xB331, 0xB331, 0xB331 }, -{ 0xB332, 0xB332, 0xB332 }, -{ 0xB333, 0xB333, 0xB333 }, -{ 0xB334, 0xB334, 0xB334 }, -{ 0xB335, 0xB335, 0xB335 }, -{ 0xB336, 0xB336, 0xB336 }, -{ 0xB337, 0xB337, 0xB337 }, -{ 0xB338, 0xB338, 0xB338 }, -{ 0xB339, 0xB339, 0xB339 }, -{ 0xB33A, 0xB33A, 0xB33A }, -{ 0xB33B, 0xB33B, 0xB33B }, -{ 0xB33C, 0xB33C, 0xB33C }, -{ 0xB33D, 0xB33D, 0xB33D }, -{ 0xB33E, 0xB33E, 0xB33E }, -{ 0xB33F, 0xB33F, 0xB33F }, -{ 0xB340, 0xB340, 0xB340 }, -{ 0xB341, 0xB341, 0xB341 }, -{ 0xB342, 0xB342, 0xB342 }, -{ 0xB343, 0xB343, 0xB343 }, -{ 0xB344, 0xB344, 0xB344 }, -{ 0xB345, 0xB345, 0xB345 }, -{ 0xB346, 0xB346, 0xB346 }, -{ 0xB347, 0xB347, 0xB347 }, -{ 0xB348, 0xB348, 0xB348 }, -{ 0xB349, 0xB349, 0xB349 }, -{ 0xB34A, 0xB34A, 0xB34A }, -{ 0xB34B, 0xB34B, 0xB34B }, -{ 0xB34C, 0xB34C, 0xB34C }, -{ 0xB34D, 0xB34D, 0xB34D }, -{ 0xB34E, 0xB34E, 0xB34E }, -{ 0xB34F, 0xB34F, 0xB34F }, -{ 0xB350, 0xB350, 0xB350 }, -{ 0xB351, 0xB351, 0xB351 }, -{ 0xB352, 0xB352, 0xB352 }, -{ 0xB353, 0xB353, 0xB353 }, -{ 0xB354, 0xB354, 0xB354 }, -{ 0xB355, 0xB355, 0xB355 }, -{ 0xB356, 0xB356, 0xB356 }, -{ 0xB357, 0xB357, 0xB357 }, -{ 0xB358, 0xB358, 0xB358 }, -{ 0xB359, 0xB359, 0xB359 }, -{ 0xB35A, 0xB35A, 0xB35A }, -{ 0xB35B, 0xB35B, 0xB35B }, -{ 0xB35C, 0xB35C, 0xB35C }, -{ 0xB35D, 0xB35D, 0xB35D }, -{ 0xB35E, 0xB35E, 0xB35E }, -{ 0xB35F, 0xB35F, 0xB35F }, -{ 0xB360, 0xB360, 0xB360 }, -{ 0xB361, 0xB361, 0xB361 }, -{ 0xB362, 0xB362, 0xB362 }, -{ 0xB363, 0xB363, 0xB363 }, -{ 0xB364, 0xB364, 0xB364 }, -{ 0xB365, 0xB365, 0xB365 }, -{ 0xB366, 0xB366, 0xB366 }, -{ 0xB367, 0xB367, 0xB367 }, -{ 0xB368, 0xB368, 0xB368 }, -{ 0xB369, 0xB369, 0xB369 }, -{ 0xB36A, 0xB36A, 0xB36A }, -{ 0xB36B, 0xB36B, 0xB36B }, -{ 0xB36C, 0xB36C, 0xB36C }, -{ 0xB36D, 0xB36D, 0xB36D }, -{ 0xB36E, 0xB36E, 0xB36E }, -{ 0xB36F, 0xB36F, 0xB36F }, -{ 0xB370, 0xB370, 0xB370 }, -{ 0xB371, 0xB371, 0xB371 }, -{ 0xB372, 0xB372, 0xB372 }, -{ 0xB373, 0xB373, 0xB373 }, -{ 0xB374, 0xB374, 0xB374 }, -{ 0xB375, 0xB375, 0xB375 }, -{ 0xB376, 0xB376, 0xB376 }, -{ 0xB377, 0xB377, 0xB377 }, -{ 0xB378, 0xB378, 0xB378 }, -{ 0xB379, 0xB379, 0xB379 }, -{ 0xB37A, 0xB37A, 0xB37A }, -{ 0xB37B, 0xB37B, 0xB37B }, -{ 0xB37C, 0xB37C, 0xB37C }, -{ 0xB37D, 0xB37D, 0xB37D }, -{ 0xB37E, 0xB37E, 0xB37E }, -{ 0xB37F, 0xB37F, 0xB37F }, -{ 0xB380, 0xB380, 0xB380 }, -{ 0xB381, 0xB381, 0xB381 }, -{ 0xB382, 0xB382, 0xB382 }, -{ 0xB383, 0xB383, 0xB383 }, -{ 0xB384, 0xB384, 0xB384 }, -{ 0xB385, 0xB385, 0xB385 }, -{ 0xB386, 0xB386, 0xB386 }, -{ 0xB387, 0xB387, 0xB387 }, -{ 0xB388, 0xB388, 0xB388 }, -{ 0xB389, 0xB389, 0xB389 }, -{ 0xB38A, 0xB38A, 0xB38A }, -{ 0xB38B, 0xB38B, 0xB38B }, -{ 0xB38C, 0xB38C, 0xB38C }, -{ 0xB38D, 0xB38D, 0xB38D }, -{ 0xB38E, 0xB38E, 0xB38E }, -{ 0xB38F, 0xB38F, 0xB38F }, -{ 0xB390, 0xB390, 0xB390 }, -{ 0xB391, 0xB391, 0xB391 }, -{ 0xB392, 0xB392, 0xB392 }, -{ 0xB393, 0xB393, 0xB393 }, -{ 0xB394, 0xB394, 0xB394 }, -{ 0xB395, 0xB395, 0xB395 }, -{ 0xB396, 0xB396, 0xB396 }, -{ 0xB397, 0xB397, 0xB397 }, -{ 0xB398, 0xB398, 0xB398 }, -{ 0xB399, 0xB399, 0xB399 }, -{ 0xB39A, 0xB39A, 0xB39A }, -{ 0xB39B, 0xB39B, 0xB39B }, -{ 0xB39C, 0xB39C, 0xB39C }, -{ 0xB39D, 0xB39D, 0xB39D }, -{ 0xB39E, 0xB39E, 0xB39E }, -{ 0xB39F, 0xB39F, 0xB39F }, -{ 0xB3A0, 0xB3A0, 0xB3A0 }, -{ 0xB3A1, 0xB3A1, 0xB3A1 }, -{ 0xB3A2, 0xB3A2, 0xB3A2 }, -{ 0xB3A3, 0xB3A3, 0xB3A3 }, -{ 0xB3A4, 0xB3A4, 0xB3A4 }, -{ 0xB3A5, 0xB3A5, 0xB3A5 }, -{ 0xB3A6, 0xB3A6, 0xB3A6 }, -{ 0xB3A7, 0xB3A7, 0xB3A7 }, -{ 0xB3A8, 0xB3A8, 0xB3A8 }, -{ 0xB3A9, 0xB3A9, 0xB3A9 }, -{ 0xB3AA, 0xB3AA, 0xB3AA }, -{ 0xB3AB, 0xB3AB, 0xB3AB }, -{ 0xB3AC, 0xB3AC, 0xB3AC }, -{ 0xB3AD, 0xB3AD, 0xB3AD }, -{ 0xB3AE, 0xB3AE, 0xB3AE }, -{ 0xB3AF, 0xB3AF, 0xB3AF }, -{ 0xB3B0, 0xB3B0, 0xB3B0 }, -{ 0xB3B1, 0xB3B1, 0xB3B1 }, -{ 0xB3B2, 0xB3B2, 0xB3B2 }, -{ 0xB3B3, 0xB3B3, 0xB3B3 }, -{ 0xB3B4, 0xB3B4, 0xB3B4 }, -{ 0xB3B5, 0xB3B5, 0xB3B5 }, -{ 0xB3B6, 0xB3B6, 0xB3B6 }, -{ 0xB3B7, 0xB3B7, 0xB3B7 }, -{ 0xB3B8, 0xB3B8, 0xB3B8 }, -{ 0xB3B9, 0xB3B9, 0xB3B9 }, -{ 0xB3BA, 0xB3BA, 0xB3BA }, -{ 0xB3BB, 0xB3BB, 0xB3BB }, -{ 0xB3BC, 0xB3BC, 0xB3BC }, -{ 0xB3BD, 0xB3BD, 0xB3BD }, -{ 0xB3BE, 0xB3BE, 0xB3BE }, -{ 0xB3BF, 0xB3BF, 0xB3BF }, -{ 0xB3C0, 0xB3C0, 0xB3C0 }, -{ 0xB3C1, 0xB3C1, 0xB3C1 }, -{ 0xB3C2, 0xB3C2, 0xB3C2 }, -{ 0xB3C3, 0xB3C3, 0xB3C3 }, -{ 0xB3C4, 0xB3C4, 0xB3C4 }, -{ 0xB3C5, 0xB3C5, 0xB3C5 }, -{ 0xB3C6, 0xB3C6, 0xB3C6 }, -{ 0xB3C7, 0xB3C7, 0xB3C7 }, -{ 0xB3C8, 0xB3C8, 0xB3C8 }, -{ 0xB3C9, 0xB3C9, 0xB3C9 }, -{ 0xB3CA, 0xB3CA, 0xB3CA }, -{ 0xB3CB, 0xB3CB, 0xB3CB }, -{ 0xB3CC, 0xB3CC, 0xB3CC }, -{ 0xB3CD, 0xB3CD, 0xB3CD }, -{ 0xB3CE, 0xB3CE, 0xB3CE }, -{ 0xB3CF, 0xB3CF, 0xB3CF }, -{ 0xB3D0, 0xB3D0, 0xB3D0 }, -{ 0xB3D1, 0xB3D1, 0xB3D1 }, -{ 0xB3D2, 0xB3D2, 0xB3D2 }, -{ 0xB3D3, 0xB3D3, 0xB3D3 }, -{ 0xB3D4, 0xB3D4, 0xB3D4 }, -{ 0xB3D5, 0xB3D5, 0xB3D5 }, -{ 0xB3D6, 0xB3D6, 0xB3D6 }, -{ 0xB3D7, 0xB3D7, 0xB3D7 }, -{ 0xB3D8, 0xB3D8, 0xB3D8 }, -{ 0xB3D9, 0xB3D9, 0xB3D9 }, -{ 0xB3DA, 0xB3DA, 0xB3DA }, -{ 0xB3DB, 0xB3DB, 0xB3DB }, -{ 0xB3DC, 0xB3DC, 0xB3DC }, -{ 0xB3DD, 0xB3DD, 0xB3DD }, -{ 0xB3DE, 0xB3DE, 0xB3DE }, -{ 0xB3DF, 0xB3DF, 0xB3DF }, -{ 0xB3E0, 0xB3E0, 0xB3E0 }, -{ 0xB3E1, 0xB3E1, 0xB3E1 }, -{ 0xB3E2, 0xB3E2, 0xB3E2 }, -{ 0xB3E3, 0xB3E3, 0xB3E3 }, -{ 0xB3E4, 0xB3E4, 0xB3E4 }, -{ 0xB3E5, 0xB3E5, 0xB3E5 }, -{ 0xB3E6, 0xB3E6, 0xB3E6 }, -{ 0xB3E7, 0xB3E7, 0xB3E7 }, -{ 0xB3E8, 0xB3E8, 0xB3E8 }, -{ 0xB3E9, 0xB3E9, 0xB3E9 }, -{ 0xB3EA, 0xB3EA, 0xB3EA }, -{ 0xB3EB, 0xB3EB, 0xB3EB }, -{ 0xB3EC, 0xB3EC, 0xB3EC }, -{ 0xB3ED, 0xB3ED, 0xB3ED }, -{ 0xB3EE, 0xB3EE, 0xB3EE }, -{ 0xB3EF, 0xB3EF, 0xB3EF }, -{ 0xB3F0, 0xB3F0, 0xB3F0 }, -{ 0xB3F1, 0xB3F1, 0xB3F1 }, -{ 0xB3F2, 0xB3F2, 0xB3F2 }, -{ 0xB3F3, 0xB3F3, 0xB3F3 }, -{ 0xB3F4, 0xB3F4, 0xB3F4 }, -{ 0xB3F5, 0xB3F5, 0xB3F5 }, -{ 0xB3F6, 0xB3F6, 0xB3F6 }, -{ 0xB3F7, 0xB3F7, 0xB3F7 }, -{ 0xB3F8, 0xB3F8, 0xB3F8 }, -{ 0xB3F9, 0xB3F9, 0xB3F9 }, -{ 0xB3FA, 0xB3FA, 0xB3FA }, -{ 0xB3FB, 0xB3FB, 0xB3FB }, -{ 0xB3FC, 0xB3FC, 0xB3FC }, -{ 0xB3FD, 0xB3FD, 0xB3FD }, -{ 0xB3FE, 0xB3FE, 0xB3FE }, -{ 0xB3FF, 0xB3FF, 0xB3FF }, -{ 0xB400, 0xB400, 0xB400 }, -{ 0xB401, 0xB401, 0xB401 }, -{ 0xB402, 0xB402, 0xB402 }, -{ 0xB403, 0xB403, 0xB403 }, -{ 0xB404, 0xB404, 0xB404 }, -{ 0xB405, 0xB405, 0xB405 }, -{ 0xB406, 0xB406, 0xB406 }, -{ 0xB407, 0xB407, 0xB407 }, -{ 0xB408, 0xB408, 0xB408 }, -{ 0xB409, 0xB409, 0xB409 }, -{ 0xB40A, 0xB40A, 0xB40A }, -{ 0xB40B, 0xB40B, 0xB40B }, -{ 0xB40C, 0xB40C, 0xB40C }, -{ 0xB40D, 0xB40D, 0xB40D }, -{ 0xB40E, 0xB40E, 0xB40E }, -{ 0xB40F, 0xB40F, 0xB40F }, -{ 0xB410, 0xB410, 0xB410 }, -{ 0xB411, 0xB411, 0xB411 }, -{ 0xB412, 0xB412, 0xB412 }, -{ 0xB413, 0xB413, 0xB413 }, -{ 0xB414, 0xB414, 0xB414 }, -{ 0xB415, 0xB415, 0xB415 }, -{ 0xB416, 0xB416, 0xB416 }, -{ 0xB417, 0xB417, 0xB417 }, -{ 0xB418, 0xB418, 0xB418 }, -{ 0xB419, 0xB419, 0xB419 }, -{ 0xB41A, 0xB41A, 0xB41A }, -{ 0xB41B, 0xB41B, 0xB41B }, -{ 0xB41C, 0xB41C, 0xB41C }, -{ 0xB41D, 0xB41D, 0xB41D }, -{ 0xB41E, 0xB41E, 0xB41E }, -{ 0xB41F, 0xB41F, 0xB41F }, -{ 0xB420, 0xB420, 0xB420 }, -{ 0xB421, 0xB421, 0xB421 }, -{ 0xB422, 0xB422, 0xB422 }, -{ 0xB423, 0xB423, 0xB423 }, -{ 0xB424, 0xB424, 0xB424 }, -{ 0xB425, 0xB425, 0xB425 }, -{ 0xB426, 0xB426, 0xB426 }, -{ 0xB427, 0xB427, 0xB427 }, -{ 0xB428, 0xB428, 0xB428 }, -{ 0xB429, 0xB429, 0xB429 }, -{ 0xB42A, 0xB42A, 0xB42A }, -{ 0xB42B, 0xB42B, 0xB42B }, -{ 0xB42C, 0xB42C, 0xB42C }, -{ 0xB42D, 0xB42D, 0xB42D }, -{ 0xB42E, 0xB42E, 0xB42E }, -{ 0xB42F, 0xB42F, 0xB42F }, -{ 0xB430, 0xB430, 0xB430 }, -{ 0xB431, 0xB431, 0xB431 }, -{ 0xB432, 0xB432, 0xB432 }, -{ 0xB433, 0xB433, 0xB433 }, -{ 0xB434, 0xB434, 0xB434 }, -{ 0xB435, 0xB435, 0xB435 }, -{ 0xB436, 0xB436, 0xB436 }, -{ 0xB437, 0xB437, 0xB437 }, -{ 0xB438, 0xB438, 0xB438 }, -{ 0xB439, 0xB439, 0xB439 }, -{ 0xB43A, 0xB43A, 0xB43A }, -{ 0xB43B, 0xB43B, 0xB43B }, -{ 0xB43C, 0xB43C, 0xB43C }, -{ 0xB43D, 0xB43D, 0xB43D }, -{ 0xB43E, 0xB43E, 0xB43E }, -{ 0xB43F, 0xB43F, 0xB43F }, -{ 0xB440, 0xB440, 0xB440 }, -{ 0xB441, 0xB441, 0xB441 }, -{ 0xB442, 0xB442, 0xB442 }, -{ 0xB443, 0xB443, 0xB443 }, -{ 0xB444, 0xB444, 0xB444 }, -{ 0xB445, 0xB445, 0xB445 }, -{ 0xB446, 0xB446, 0xB446 }, -{ 0xB447, 0xB447, 0xB447 }, -{ 0xB448, 0xB448, 0xB448 }, -{ 0xB449, 0xB449, 0xB449 }, -{ 0xB44A, 0xB44A, 0xB44A }, -{ 0xB44B, 0xB44B, 0xB44B }, -{ 0xB44C, 0xB44C, 0xB44C }, -{ 0xB44D, 0xB44D, 0xB44D }, -{ 0xB44E, 0xB44E, 0xB44E }, -{ 0xB44F, 0xB44F, 0xB44F }, -{ 0xB450, 0xB450, 0xB450 }, -{ 0xB451, 0xB451, 0xB451 }, -{ 0xB452, 0xB452, 0xB452 }, -{ 0xB453, 0xB453, 0xB453 }, -{ 0xB454, 0xB454, 0xB454 }, -{ 0xB455, 0xB455, 0xB455 }, -{ 0xB456, 0xB456, 0xB456 }, -{ 0xB457, 0xB457, 0xB457 }, -{ 0xB458, 0xB458, 0xB458 }, -{ 0xB459, 0xB459, 0xB459 }, -{ 0xB45A, 0xB45A, 0xB45A }, -{ 0xB45B, 0xB45B, 0xB45B }, -{ 0xB45C, 0xB45C, 0xB45C }, -{ 0xB45D, 0xB45D, 0xB45D }, -{ 0xB45E, 0xB45E, 0xB45E }, -{ 0xB45F, 0xB45F, 0xB45F }, -{ 0xB460, 0xB460, 0xB460 }, -{ 0xB461, 0xB461, 0xB461 }, -{ 0xB462, 0xB462, 0xB462 }, -{ 0xB463, 0xB463, 0xB463 }, -{ 0xB464, 0xB464, 0xB464 }, -{ 0xB465, 0xB465, 0xB465 }, -{ 0xB466, 0xB466, 0xB466 }, -{ 0xB467, 0xB467, 0xB467 }, -{ 0xB468, 0xB468, 0xB468 }, -{ 0xB469, 0xB469, 0xB469 }, -{ 0xB46A, 0xB46A, 0xB46A }, -{ 0xB46B, 0xB46B, 0xB46B }, -{ 0xB46C, 0xB46C, 0xB46C }, -{ 0xB46D, 0xB46D, 0xB46D }, -{ 0xB46E, 0xB46E, 0xB46E }, -{ 0xB46F, 0xB46F, 0xB46F }, -{ 0xB470, 0xB470, 0xB470 }, -{ 0xB471, 0xB471, 0xB471 }, -{ 0xB472, 0xB472, 0xB472 }, -{ 0xB473, 0xB473, 0xB473 }, -{ 0xB474, 0xB474, 0xB474 }, -{ 0xB475, 0xB475, 0xB475 }, -{ 0xB476, 0xB476, 0xB476 }, -{ 0xB477, 0xB477, 0xB477 }, -{ 0xB478, 0xB478, 0xB478 }, -{ 0xB479, 0xB479, 0xB479 }, -{ 0xB47A, 0xB47A, 0xB47A }, -{ 0xB47B, 0xB47B, 0xB47B }, -{ 0xB47C, 0xB47C, 0xB47C }, -{ 0xB47D, 0xB47D, 0xB47D }, -{ 0xB47E, 0xB47E, 0xB47E }, -{ 0xB47F, 0xB47F, 0xB47F }, -{ 0xB480, 0xB480, 0xB480 }, -{ 0xB481, 0xB481, 0xB481 }, -{ 0xB482, 0xB482, 0xB482 }, -{ 0xB483, 0xB483, 0xB483 }, -{ 0xB484, 0xB484, 0xB484 }, -{ 0xB485, 0xB485, 0xB485 }, -{ 0xB486, 0xB486, 0xB486 }, -{ 0xB487, 0xB487, 0xB487 }, -{ 0xB488, 0xB488, 0xB488 }, -{ 0xB489, 0xB489, 0xB489 }, -{ 0xB48A, 0xB48A, 0xB48A }, -{ 0xB48B, 0xB48B, 0xB48B }, -{ 0xB48C, 0xB48C, 0xB48C }, -{ 0xB48D, 0xB48D, 0xB48D }, -{ 0xB48E, 0xB48E, 0xB48E }, -{ 0xB48F, 0xB48F, 0xB48F }, -{ 0xB490, 0xB490, 0xB490 }, -{ 0xB491, 0xB491, 0xB491 }, -{ 0xB492, 0xB492, 0xB492 }, -{ 0xB493, 0xB493, 0xB493 }, -{ 0xB494, 0xB494, 0xB494 }, -{ 0xB495, 0xB495, 0xB495 }, -{ 0xB496, 0xB496, 0xB496 }, -{ 0xB497, 0xB497, 0xB497 }, -{ 0xB498, 0xB498, 0xB498 }, -{ 0xB499, 0xB499, 0xB499 }, -{ 0xB49A, 0xB49A, 0xB49A }, -{ 0xB49B, 0xB49B, 0xB49B }, -{ 0xB49C, 0xB49C, 0xB49C }, -{ 0xB49D, 0xB49D, 0xB49D }, -{ 0xB49E, 0xB49E, 0xB49E }, -{ 0xB49F, 0xB49F, 0xB49F }, -{ 0xB4A0, 0xB4A0, 0xB4A0 }, -{ 0xB4A1, 0xB4A1, 0xB4A1 }, -{ 0xB4A2, 0xB4A2, 0xB4A2 }, -{ 0xB4A3, 0xB4A3, 0xB4A3 }, -{ 0xB4A4, 0xB4A4, 0xB4A4 }, -{ 0xB4A5, 0xB4A5, 0xB4A5 }, -{ 0xB4A6, 0xB4A6, 0xB4A6 }, -{ 0xB4A7, 0xB4A7, 0xB4A7 }, -{ 0xB4A8, 0xB4A8, 0xB4A8 }, -{ 0xB4A9, 0xB4A9, 0xB4A9 }, -{ 0xB4AA, 0xB4AA, 0xB4AA }, -{ 0xB4AB, 0xB4AB, 0xB4AB }, -{ 0xB4AC, 0xB4AC, 0xB4AC }, -{ 0xB4AD, 0xB4AD, 0xB4AD }, -{ 0xB4AE, 0xB4AE, 0xB4AE }, -{ 0xB4AF, 0xB4AF, 0xB4AF }, -{ 0xB4B0, 0xB4B0, 0xB4B0 }, -{ 0xB4B1, 0xB4B1, 0xB4B1 }, -{ 0xB4B2, 0xB4B2, 0xB4B2 }, -{ 0xB4B3, 0xB4B3, 0xB4B3 }, -{ 0xB4B4, 0xB4B4, 0xB4B4 }, -{ 0xB4B5, 0xB4B5, 0xB4B5 }, -{ 0xB4B6, 0xB4B6, 0xB4B6 }, -{ 0xB4B7, 0xB4B7, 0xB4B7 }, -{ 0xB4B8, 0xB4B8, 0xB4B8 }, -{ 0xB4B9, 0xB4B9, 0xB4B9 }, -{ 0xB4BA, 0xB4BA, 0xB4BA }, -{ 0xB4BB, 0xB4BB, 0xB4BB }, -{ 0xB4BC, 0xB4BC, 0xB4BC }, -{ 0xB4BD, 0xB4BD, 0xB4BD }, -{ 0xB4BE, 0xB4BE, 0xB4BE }, -{ 0xB4BF, 0xB4BF, 0xB4BF }, -{ 0xB4C0, 0xB4C0, 0xB4C0 }, -{ 0xB4C1, 0xB4C1, 0xB4C1 }, -{ 0xB4C2, 0xB4C2, 0xB4C2 }, -{ 0xB4C3, 0xB4C3, 0xB4C3 }, -{ 0xB4C4, 0xB4C4, 0xB4C4 }, -{ 0xB4C5, 0xB4C5, 0xB4C5 }, -{ 0xB4C6, 0xB4C6, 0xB4C6 }, -{ 0xB4C7, 0xB4C7, 0xB4C7 }, -{ 0xB4C8, 0xB4C8, 0xB4C8 }, -{ 0xB4C9, 0xB4C9, 0xB4C9 }, -{ 0xB4CA, 0xB4CA, 0xB4CA }, -{ 0xB4CB, 0xB4CB, 0xB4CB }, -{ 0xB4CC, 0xB4CC, 0xB4CC }, -{ 0xB4CD, 0xB4CD, 0xB4CD }, -{ 0xB4CE, 0xB4CE, 0xB4CE }, -{ 0xB4CF, 0xB4CF, 0xB4CF }, -{ 0xB4D0, 0xB4D0, 0xB4D0 }, -{ 0xB4D1, 0xB4D1, 0xB4D1 }, -{ 0xB4D2, 0xB4D2, 0xB4D2 }, -{ 0xB4D3, 0xB4D3, 0xB4D3 }, -{ 0xB4D4, 0xB4D4, 0xB4D4 }, -{ 0xB4D5, 0xB4D5, 0xB4D5 }, -{ 0xB4D6, 0xB4D6, 0xB4D6 }, -{ 0xB4D7, 0xB4D7, 0xB4D7 }, -{ 0xB4D8, 0xB4D8, 0xB4D8 }, -{ 0xB4D9, 0xB4D9, 0xB4D9 }, -{ 0xB4DA, 0xB4DA, 0xB4DA }, -{ 0xB4DB, 0xB4DB, 0xB4DB }, -{ 0xB4DC, 0xB4DC, 0xB4DC }, -{ 0xB4DD, 0xB4DD, 0xB4DD }, -{ 0xB4DE, 0xB4DE, 0xB4DE }, -{ 0xB4DF, 0xB4DF, 0xB4DF }, -{ 0xB4E0, 0xB4E0, 0xB4E0 }, -{ 0xB4E1, 0xB4E1, 0xB4E1 }, -{ 0xB4E2, 0xB4E2, 0xB4E2 }, -{ 0xB4E3, 0xB4E3, 0xB4E3 }, -{ 0xB4E4, 0xB4E4, 0xB4E4 }, -{ 0xB4E5, 0xB4E5, 0xB4E5 }, -{ 0xB4E6, 0xB4E6, 0xB4E6 }, -{ 0xB4E7, 0xB4E7, 0xB4E7 }, -{ 0xB4E8, 0xB4E8, 0xB4E8 }, -{ 0xB4E9, 0xB4E9, 0xB4E9 }, -{ 0xB4EA, 0xB4EA, 0xB4EA }, -{ 0xB4EB, 0xB4EB, 0xB4EB }, -{ 0xB4EC, 0xB4EC, 0xB4EC }, -{ 0xB4ED, 0xB4ED, 0xB4ED }, -{ 0xB4EE, 0xB4EE, 0xB4EE }, -{ 0xB4EF, 0xB4EF, 0xB4EF }, -{ 0xB4F0, 0xB4F0, 0xB4F0 }, -{ 0xB4F1, 0xB4F1, 0xB4F1 }, -{ 0xB4F2, 0xB4F2, 0xB4F2 }, -{ 0xB4F3, 0xB4F3, 0xB4F3 }, -{ 0xB4F4, 0xB4F4, 0xB4F4 }, -{ 0xB4F5, 0xB4F5, 0xB4F5 }, -{ 0xB4F6, 0xB4F6, 0xB4F6 }, -{ 0xB4F7, 0xB4F7, 0xB4F7 }, -{ 0xB4F8, 0xB4F8, 0xB4F8 }, -{ 0xB4F9, 0xB4F9, 0xB4F9 }, -{ 0xB4FA, 0xB4FA, 0xB4FA }, -{ 0xB4FB, 0xB4FB, 0xB4FB }, -{ 0xB4FC, 0xB4FC, 0xB4FC }, -{ 0xB4FD, 0xB4FD, 0xB4FD }, -{ 0xB4FE, 0xB4FE, 0xB4FE }, -{ 0xB4FF, 0xB4FF, 0xB4FF }, -{ 0xB500, 0xB500, 0xB500 }, -{ 0xB501, 0xB501, 0xB501 }, -{ 0xB502, 0xB502, 0xB502 }, -{ 0xB503, 0xB503, 0xB503 }, -{ 0xB504, 0xB504, 0xB504 }, -{ 0xB505, 0xB505, 0xB505 }, -{ 0xB506, 0xB506, 0xB506 }, -{ 0xB507, 0xB507, 0xB507 }, -{ 0xB508, 0xB508, 0xB508 }, -{ 0xB509, 0xB509, 0xB509 }, -{ 0xB50A, 0xB50A, 0xB50A }, -{ 0xB50B, 0xB50B, 0xB50B }, -{ 0xB50C, 0xB50C, 0xB50C }, -{ 0xB50D, 0xB50D, 0xB50D }, -{ 0xB50E, 0xB50E, 0xB50E }, -{ 0xB50F, 0xB50F, 0xB50F }, -{ 0xB510, 0xB510, 0xB510 }, -{ 0xB511, 0xB511, 0xB511 }, -{ 0xB512, 0xB512, 0xB512 }, -{ 0xB513, 0xB513, 0xB513 }, -{ 0xB514, 0xB514, 0xB514 }, -{ 0xB515, 0xB515, 0xB515 }, -{ 0xB516, 0xB516, 0xB516 }, -{ 0xB517, 0xB517, 0xB517 }, -{ 0xB518, 0xB518, 0xB518 }, -{ 0xB519, 0xB519, 0xB519 }, -{ 0xB51A, 0xB51A, 0xB51A }, -{ 0xB51B, 0xB51B, 0xB51B }, -{ 0xB51C, 0xB51C, 0xB51C }, -{ 0xB51D, 0xB51D, 0xB51D }, -{ 0xB51E, 0xB51E, 0xB51E }, -{ 0xB51F, 0xB51F, 0xB51F }, -{ 0xB520, 0xB520, 0xB520 }, -{ 0xB521, 0xB521, 0xB521 }, -{ 0xB522, 0xB522, 0xB522 }, -{ 0xB523, 0xB523, 0xB523 }, -{ 0xB524, 0xB524, 0xB524 }, -{ 0xB525, 0xB525, 0xB525 }, -{ 0xB526, 0xB526, 0xB526 }, -{ 0xB527, 0xB527, 0xB527 }, -{ 0xB528, 0xB528, 0xB528 }, -{ 0xB529, 0xB529, 0xB529 }, -{ 0xB52A, 0xB52A, 0xB52A }, -{ 0xB52B, 0xB52B, 0xB52B }, -{ 0xB52C, 0xB52C, 0xB52C }, -{ 0xB52D, 0xB52D, 0xB52D }, -{ 0xB52E, 0xB52E, 0xB52E }, -{ 0xB52F, 0xB52F, 0xB52F }, -{ 0xB530, 0xB530, 0xB530 }, -{ 0xB531, 0xB531, 0xB531 }, -{ 0xB532, 0xB532, 0xB532 }, -{ 0xB533, 0xB533, 0xB533 }, -{ 0xB534, 0xB534, 0xB534 }, -{ 0xB535, 0xB535, 0xB535 }, -{ 0xB536, 0xB536, 0xB536 }, -{ 0xB537, 0xB537, 0xB537 }, -{ 0xB538, 0xB538, 0xB538 }, -{ 0xB539, 0xB539, 0xB539 }, -{ 0xB53A, 0xB53A, 0xB53A }, -{ 0xB53B, 0xB53B, 0xB53B }, -{ 0xB53C, 0xB53C, 0xB53C }, -{ 0xB53D, 0xB53D, 0xB53D }, -{ 0xB53E, 0xB53E, 0xB53E }, -{ 0xB53F, 0xB53F, 0xB53F }, -{ 0xB540, 0xB540, 0xB540 }, -{ 0xB541, 0xB541, 0xB541 }, -{ 0xB542, 0xB542, 0xB542 }, -{ 0xB543, 0xB543, 0xB543 }, -{ 0xB544, 0xB544, 0xB544 }, -{ 0xB545, 0xB545, 0xB545 }, -{ 0xB546, 0xB546, 0xB546 }, -{ 0xB547, 0xB547, 0xB547 }, -{ 0xB548, 0xB548, 0xB548 }, -{ 0xB549, 0xB549, 0xB549 }, -{ 0xB54A, 0xB54A, 0xB54A }, -{ 0xB54B, 0xB54B, 0xB54B }, -{ 0xB54C, 0xB54C, 0xB54C }, -{ 0xB54D, 0xB54D, 0xB54D }, -{ 0xB54E, 0xB54E, 0xB54E }, -{ 0xB54F, 0xB54F, 0xB54F }, -{ 0xB550, 0xB550, 0xB550 }, -{ 0xB551, 0xB551, 0xB551 }, -{ 0xB552, 0xB552, 0xB552 }, -{ 0xB553, 0xB553, 0xB553 }, -{ 0xB554, 0xB554, 0xB554 }, -{ 0xB555, 0xB555, 0xB555 }, -{ 0xB556, 0xB556, 0xB556 }, -{ 0xB557, 0xB557, 0xB557 }, -{ 0xB558, 0xB558, 0xB558 }, -{ 0xB559, 0xB559, 0xB559 }, -{ 0xB55A, 0xB55A, 0xB55A }, -{ 0xB55B, 0xB55B, 0xB55B }, -{ 0xB55C, 0xB55C, 0xB55C }, -{ 0xB55D, 0xB55D, 0xB55D }, -{ 0xB55E, 0xB55E, 0xB55E }, -{ 0xB55F, 0xB55F, 0xB55F }, -{ 0xB560, 0xB560, 0xB560 }, -{ 0xB561, 0xB561, 0xB561 }, -{ 0xB562, 0xB562, 0xB562 }, -{ 0xB563, 0xB563, 0xB563 }, -{ 0xB564, 0xB564, 0xB564 }, -{ 0xB565, 0xB565, 0xB565 }, -{ 0xB566, 0xB566, 0xB566 }, -{ 0xB567, 0xB567, 0xB567 }, -{ 0xB568, 0xB568, 0xB568 }, -{ 0xB569, 0xB569, 0xB569 }, -{ 0xB56A, 0xB56A, 0xB56A }, -{ 0xB56B, 0xB56B, 0xB56B }, -{ 0xB56C, 0xB56C, 0xB56C }, -{ 0xB56D, 0xB56D, 0xB56D }, -{ 0xB56E, 0xB56E, 0xB56E }, -{ 0xB56F, 0xB56F, 0xB56F }, -{ 0xB570, 0xB570, 0xB570 }, -{ 0xB571, 0xB571, 0xB571 }, -{ 0xB572, 0xB572, 0xB572 }, -{ 0xB573, 0xB573, 0xB573 }, -{ 0xB574, 0xB574, 0xB574 }, -{ 0xB575, 0xB575, 0xB575 }, -{ 0xB576, 0xB576, 0xB576 }, -{ 0xB577, 0xB577, 0xB577 }, -{ 0xB578, 0xB578, 0xB578 }, -{ 0xB579, 0xB579, 0xB579 }, -{ 0xB57A, 0xB57A, 0xB57A }, -{ 0xB57B, 0xB57B, 0xB57B }, -{ 0xB57C, 0xB57C, 0xB57C }, -{ 0xB57D, 0xB57D, 0xB57D }, -{ 0xB57E, 0xB57E, 0xB57E }, -{ 0xB57F, 0xB57F, 0xB57F }, -{ 0xB580, 0xB580, 0xB580 }, -{ 0xB581, 0xB581, 0xB581 }, -{ 0xB582, 0xB582, 0xB582 }, -{ 0xB583, 0xB583, 0xB583 }, -{ 0xB584, 0xB584, 0xB584 }, -{ 0xB585, 0xB585, 0xB585 }, -{ 0xB586, 0xB586, 0xB586 }, -{ 0xB587, 0xB587, 0xB587 }, -{ 0xB588, 0xB588, 0xB588 }, -{ 0xB589, 0xB589, 0xB589 }, -{ 0xB58A, 0xB58A, 0xB58A }, -{ 0xB58B, 0xB58B, 0xB58B }, -{ 0xB58C, 0xB58C, 0xB58C }, -{ 0xB58D, 0xB58D, 0xB58D }, -{ 0xB58E, 0xB58E, 0xB58E }, -{ 0xB58F, 0xB58F, 0xB58F }, -{ 0xB590, 0xB590, 0xB590 }, -{ 0xB591, 0xB591, 0xB591 }, -{ 0xB592, 0xB592, 0xB592 }, -{ 0xB593, 0xB593, 0xB593 }, -{ 0xB594, 0xB594, 0xB594 }, -{ 0xB595, 0xB595, 0xB595 }, -{ 0xB596, 0xB596, 0xB596 }, -{ 0xB597, 0xB597, 0xB597 }, -{ 0xB598, 0xB598, 0xB598 }, -{ 0xB599, 0xB599, 0xB599 }, -{ 0xB59A, 0xB59A, 0xB59A }, -{ 0xB59B, 0xB59B, 0xB59B }, -{ 0xB59C, 0xB59C, 0xB59C }, -{ 0xB59D, 0xB59D, 0xB59D }, -{ 0xB59E, 0xB59E, 0xB59E }, -{ 0xB59F, 0xB59F, 0xB59F }, -{ 0xB5A0, 0xB5A0, 0xB5A0 }, -{ 0xB5A1, 0xB5A1, 0xB5A1 }, -{ 0xB5A2, 0xB5A2, 0xB5A2 }, -{ 0xB5A3, 0xB5A3, 0xB5A3 }, -{ 0xB5A4, 0xB5A4, 0xB5A4 }, -{ 0xB5A5, 0xB5A5, 0xB5A5 }, -{ 0xB5A6, 0xB5A6, 0xB5A6 }, -{ 0xB5A7, 0xB5A7, 0xB5A7 }, -{ 0xB5A8, 0xB5A8, 0xB5A8 }, -{ 0xB5A9, 0xB5A9, 0xB5A9 }, -{ 0xB5AA, 0xB5AA, 0xB5AA }, -{ 0xB5AB, 0xB5AB, 0xB5AB }, -{ 0xB5AC, 0xB5AC, 0xB5AC }, -{ 0xB5AD, 0xB5AD, 0xB5AD }, -{ 0xB5AE, 0xB5AE, 0xB5AE }, -{ 0xB5AF, 0xB5AF, 0xB5AF }, -{ 0xB5B0, 0xB5B0, 0xB5B0 }, -{ 0xB5B1, 0xB5B1, 0xB5B1 }, -{ 0xB5B2, 0xB5B2, 0xB5B2 }, -{ 0xB5B3, 0xB5B3, 0xB5B3 }, -{ 0xB5B4, 0xB5B4, 0xB5B4 }, -{ 0xB5B5, 0xB5B5, 0xB5B5 }, -{ 0xB5B6, 0xB5B6, 0xB5B6 }, -{ 0xB5B7, 0xB5B7, 0xB5B7 }, -{ 0xB5B8, 0xB5B8, 0xB5B8 }, -{ 0xB5B9, 0xB5B9, 0xB5B9 }, -{ 0xB5BA, 0xB5BA, 0xB5BA }, -{ 0xB5BB, 0xB5BB, 0xB5BB }, -{ 0xB5BC, 0xB5BC, 0xB5BC }, -{ 0xB5BD, 0xB5BD, 0xB5BD }, -{ 0xB5BE, 0xB5BE, 0xB5BE }, -{ 0xB5BF, 0xB5BF, 0xB5BF }, -{ 0xB5C0, 0xB5C0, 0xB5C0 }, -{ 0xB5C1, 0xB5C1, 0xB5C1 }, -{ 0xB5C2, 0xB5C2, 0xB5C2 }, -{ 0xB5C3, 0xB5C3, 0xB5C3 }, -{ 0xB5C4, 0xB5C4, 0xB5C4 }, -{ 0xB5C5, 0xB5C5, 0xB5C5 }, -{ 0xB5C6, 0xB5C6, 0xB5C6 }, -{ 0xB5C7, 0xB5C7, 0xB5C7 }, -{ 0xB5C8, 0xB5C8, 0xB5C8 }, -{ 0xB5C9, 0xB5C9, 0xB5C9 }, -{ 0xB5CA, 0xB5CA, 0xB5CA }, -{ 0xB5CB, 0xB5CB, 0xB5CB }, -{ 0xB5CC, 0xB5CC, 0xB5CC }, -{ 0xB5CD, 0xB5CD, 0xB5CD }, -{ 0xB5CE, 0xB5CE, 0xB5CE }, -{ 0xB5CF, 0xB5CF, 0xB5CF }, -{ 0xB5D0, 0xB5D0, 0xB5D0 }, -{ 0xB5D1, 0xB5D1, 0xB5D1 }, -{ 0xB5D2, 0xB5D2, 0xB5D2 }, -{ 0xB5D3, 0xB5D3, 0xB5D3 }, -{ 0xB5D4, 0xB5D4, 0xB5D4 }, -{ 0xB5D5, 0xB5D5, 0xB5D5 }, -{ 0xB5D6, 0xB5D6, 0xB5D6 }, -{ 0xB5D7, 0xB5D7, 0xB5D7 }, -{ 0xB5D8, 0xB5D8, 0xB5D8 }, -{ 0xB5D9, 0xB5D9, 0xB5D9 }, -{ 0xB5DA, 0xB5DA, 0xB5DA }, -{ 0xB5DB, 0xB5DB, 0xB5DB }, -{ 0xB5DC, 0xB5DC, 0xB5DC }, -{ 0xB5DD, 0xB5DD, 0xB5DD }, -{ 0xB5DE, 0xB5DE, 0xB5DE }, -{ 0xB5DF, 0xB5DF, 0xB5DF }, -{ 0xB5E0, 0xB5E0, 0xB5E0 }, -{ 0xB5E1, 0xB5E1, 0xB5E1 }, -{ 0xB5E2, 0xB5E2, 0xB5E2 }, -{ 0xB5E3, 0xB5E3, 0xB5E3 }, -{ 0xB5E4, 0xB5E4, 0xB5E4 }, -{ 0xB5E5, 0xB5E5, 0xB5E5 }, -{ 0xB5E6, 0xB5E6, 0xB5E6 }, -{ 0xB5E7, 0xB5E7, 0xB5E7 }, -{ 0xB5E8, 0xB5E8, 0xB5E8 }, -{ 0xB5E9, 0xB5E9, 0xB5E9 }, -{ 0xB5EA, 0xB5EA, 0xB5EA }, -{ 0xB5EB, 0xB5EB, 0xB5EB }, -{ 0xB5EC, 0xB5EC, 0xB5EC }, -{ 0xB5ED, 0xB5ED, 0xB5ED }, -{ 0xB5EE, 0xB5EE, 0xB5EE }, -{ 0xB5EF, 0xB5EF, 0xB5EF }, -{ 0xB5F0, 0xB5F0, 0xB5F0 }, -{ 0xB5F1, 0xB5F1, 0xB5F1 }, -{ 0xB5F2, 0xB5F2, 0xB5F2 }, -{ 0xB5F3, 0xB5F3, 0xB5F3 }, -{ 0xB5F4, 0xB5F4, 0xB5F4 }, -{ 0xB5F5, 0xB5F5, 0xB5F5 }, -{ 0xB5F6, 0xB5F6, 0xB5F6 }, -{ 0xB5F7, 0xB5F7, 0xB5F7 }, -{ 0xB5F8, 0xB5F8, 0xB5F8 }, -{ 0xB5F9, 0xB5F9, 0xB5F9 }, -{ 0xB5FA, 0xB5FA, 0xB5FA }, -{ 0xB5FB, 0xB5FB, 0xB5FB }, -{ 0xB5FC, 0xB5FC, 0xB5FC }, -{ 0xB5FD, 0xB5FD, 0xB5FD }, -{ 0xB5FE, 0xB5FE, 0xB5FE }, -{ 0xB5FF, 0xB5FF, 0xB5FF }, -{ 0xB600, 0xB600, 0xB600 }, -{ 0xB601, 0xB601, 0xB601 }, -{ 0xB602, 0xB602, 0xB602 }, -{ 0xB603, 0xB603, 0xB603 }, -{ 0xB604, 0xB604, 0xB604 }, -{ 0xB605, 0xB605, 0xB605 }, -{ 0xB606, 0xB606, 0xB606 }, -{ 0xB607, 0xB607, 0xB607 }, -{ 0xB608, 0xB608, 0xB608 }, -{ 0xB609, 0xB609, 0xB609 }, -{ 0xB60A, 0xB60A, 0xB60A }, -{ 0xB60B, 0xB60B, 0xB60B }, -{ 0xB60C, 0xB60C, 0xB60C }, -{ 0xB60D, 0xB60D, 0xB60D }, -{ 0xB60E, 0xB60E, 0xB60E }, -{ 0xB60F, 0xB60F, 0xB60F }, -{ 0xB610, 0xB610, 0xB610 }, -{ 0xB611, 0xB611, 0xB611 }, -{ 0xB612, 0xB612, 0xB612 }, -{ 0xB613, 0xB613, 0xB613 }, -{ 0xB614, 0xB614, 0xB614 }, -{ 0xB615, 0xB615, 0xB615 }, -{ 0xB616, 0xB616, 0xB616 }, -{ 0xB617, 0xB617, 0xB617 }, -{ 0xB618, 0xB618, 0xB618 }, -{ 0xB619, 0xB619, 0xB619 }, -{ 0xB61A, 0xB61A, 0xB61A }, -{ 0xB61B, 0xB61B, 0xB61B }, -{ 0xB61C, 0xB61C, 0xB61C }, -{ 0xB61D, 0xB61D, 0xB61D }, -{ 0xB61E, 0xB61E, 0xB61E }, -{ 0xB61F, 0xB61F, 0xB61F }, -{ 0xB620, 0xB620, 0xB620 }, -{ 0xB621, 0xB621, 0xB621 }, -{ 0xB622, 0xB622, 0xB622 }, -{ 0xB623, 0xB623, 0xB623 }, -{ 0xB624, 0xB624, 0xB624 }, -{ 0xB625, 0xB625, 0xB625 }, -{ 0xB626, 0xB626, 0xB626 }, -{ 0xB627, 0xB627, 0xB627 }, -{ 0xB628, 0xB628, 0xB628 }, -{ 0xB629, 0xB629, 0xB629 }, -{ 0xB62A, 0xB62A, 0xB62A }, -{ 0xB62B, 0xB62B, 0xB62B }, -{ 0xB62C, 0xB62C, 0xB62C }, -{ 0xB62D, 0xB62D, 0xB62D }, -{ 0xB62E, 0xB62E, 0xB62E }, -{ 0xB62F, 0xB62F, 0xB62F }, -{ 0xB630, 0xB630, 0xB630 }, -{ 0xB631, 0xB631, 0xB631 }, -{ 0xB632, 0xB632, 0xB632 }, -{ 0xB633, 0xB633, 0xB633 }, -{ 0xB634, 0xB634, 0xB634 }, -{ 0xB635, 0xB635, 0xB635 }, -{ 0xB636, 0xB636, 0xB636 }, -{ 0xB637, 0xB637, 0xB637 }, -{ 0xB638, 0xB638, 0xB638 }, -{ 0xB639, 0xB639, 0xB639 }, -{ 0xB63A, 0xB63A, 0xB63A }, -{ 0xB63B, 0xB63B, 0xB63B }, -{ 0xB63C, 0xB63C, 0xB63C }, -{ 0xB63D, 0xB63D, 0xB63D }, -{ 0xB63E, 0xB63E, 0xB63E }, -{ 0xB63F, 0xB63F, 0xB63F }, -{ 0xB640, 0xB640, 0xB640 }, -{ 0xB641, 0xB641, 0xB641 }, -{ 0xB642, 0xB642, 0xB642 }, -{ 0xB643, 0xB643, 0xB643 }, -{ 0xB644, 0xB644, 0xB644 }, -{ 0xB645, 0xB645, 0xB645 }, -{ 0xB646, 0xB646, 0xB646 }, -{ 0xB647, 0xB647, 0xB647 }, -{ 0xB648, 0xB648, 0xB648 }, -{ 0xB649, 0xB649, 0xB649 }, -{ 0xB64A, 0xB64A, 0xB64A }, -{ 0xB64B, 0xB64B, 0xB64B }, -{ 0xB64C, 0xB64C, 0xB64C }, -{ 0xB64D, 0xB64D, 0xB64D }, -{ 0xB64E, 0xB64E, 0xB64E }, -{ 0xB64F, 0xB64F, 0xB64F }, -{ 0xB650, 0xB650, 0xB650 }, -{ 0xB651, 0xB651, 0xB651 }, -{ 0xB652, 0xB652, 0xB652 }, -{ 0xB653, 0xB653, 0xB653 }, -{ 0xB654, 0xB654, 0xB654 }, -{ 0xB655, 0xB655, 0xB655 }, -{ 0xB656, 0xB656, 0xB656 }, -{ 0xB657, 0xB657, 0xB657 }, -{ 0xB658, 0xB658, 0xB658 }, -{ 0xB659, 0xB659, 0xB659 }, -{ 0xB65A, 0xB65A, 0xB65A }, -{ 0xB65B, 0xB65B, 0xB65B }, -{ 0xB65C, 0xB65C, 0xB65C }, -{ 0xB65D, 0xB65D, 0xB65D }, -{ 0xB65E, 0xB65E, 0xB65E }, -{ 0xB65F, 0xB65F, 0xB65F }, -{ 0xB660, 0xB660, 0xB660 }, -{ 0xB661, 0xB661, 0xB661 }, -{ 0xB662, 0xB662, 0xB662 }, -{ 0xB663, 0xB663, 0xB663 }, -{ 0xB664, 0xB664, 0xB664 }, -{ 0xB665, 0xB665, 0xB665 }, -{ 0xB666, 0xB666, 0xB666 }, -{ 0xB667, 0xB667, 0xB667 }, -{ 0xB668, 0xB668, 0xB668 }, -{ 0xB669, 0xB669, 0xB669 }, -{ 0xB66A, 0xB66A, 0xB66A }, -{ 0xB66B, 0xB66B, 0xB66B }, -{ 0xB66C, 0xB66C, 0xB66C }, -{ 0xB66D, 0xB66D, 0xB66D }, -{ 0xB66E, 0xB66E, 0xB66E }, -{ 0xB66F, 0xB66F, 0xB66F }, -{ 0xB670, 0xB670, 0xB670 }, -{ 0xB671, 0xB671, 0xB671 }, -{ 0xB672, 0xB672, 0xB672 }, -{ 0xB673, 0xB673, 0xB673 }, -{ 0xB674, 0xB674, 0xB674 }, -{ 0xB675, 0xB675, 0xB675 }, -{ 0xB676, 0xB676, 0xB676 }, -{ 0xB677, 0xB677, 0xB677 }, -{ 0xB678, 0xB678, 0xB678 }, -{ 0xB679, 0xB679, 0xB679 }, -{ 0xB67A, 0xB67A, 0xB67A }, -{ 0xB67B, 0xB67B, 0xB67B }, -{ 0xB67C, 0xB67C, 0xB67C }, -{ 0xB67D, 0xB67D, 0xB67D }, -{ 0xB67E, 0xB67E, 0xB67E }, -{ 0xB67F, 0xB67F, 0xB67F }, -{ 0xB680, 0xB680, 0xB680 }, -{ 0xB681, 0xB681, 0xB681 }, -{ 0xB682, 0xB682, 0xB682 }, -{ 0xB683, 0xB683, 0xB683 }, -{ 0xB684, 0xB684, 0xB684 }, -{ 0xB685, 0xB685, 0xB685 }, -{ 0xB686, 0xB686, 0xB686 }, -{ 0xB687, 0xB687, 0xB687 }, -{ 0xB688, 0xB688, 0xB688 }, -{ 0xB689, 0xB689, 0xB689 }, -{ 0xB68A, 0xB68A, 0xB68A }, -{ 0xB68B, 0xB68B, 0xB68B }, -{ 0xB68C, 0xB68C, 0xB68C }, -{ 0xB68D, 0xB68D, 0xB68D }, -{ 0xB68E, 0xB68E, 0xB68E }, -{ 0xB68F, 0xB68F, 0xB68F }, -{ 0xB690, 0xB690, 0xB690 }, -{ 0xB691, 0xB691, 0xB691 }, -{ 0xB692, 0xB692, 0xB692 }, -{ 0xB693, 0xB693, 0xB693 }, -{ 0xB694, 0xB694, 0xB694 }, -{ 0xB695, 0xB695, 0xB695 }, -{ 0xB696, 0xB696, 0xB696 }, -{ 0xB697, 0xB697, 0xB697 }, -{ 0xB698, 0xB698, 0xB698 }, -{ 0xB699, 0xB699, 0xB699 }, -{ 0xB69A, 0xB69A, 0xB69A }, -{ 0xB69B, 0xB69B, 0xB69B }, -{ 0xB69C, 0xB69C, 0xB69C }, -{ 0xB69D, 0xB69D, 0xB69D }, -{ 0xB69E, 0xB69E, 0xB69E }, -{ 0xB69F, 0xB69F, 0xB69F }, -{ 0xB6A0, 0xB6A0, 0xB6A0 }, -{ 0xB6A1, 0xB6A1, 0xB6A1 }, -{ 0xB6A2, 0xB6A2, 0xB6A2 }, -{ 0xB6A3, 0xB6A3, 0xB6A3 }, -{ 0xB6A4, 0xB6A4, 0xB6A4 }, -{ 0xB6A5, 0xB6A5, 0xB6A5 }, -{ 0xB6A6, 0xB6A6, 0xB6A6 }, -{ 0xB6A7, 0xB6A7, 0xB6A7 }, -{ 0xB6A8, 0xB6A8, 0xB6A8 }, -{ 0xB6A9, 0xB6A9, 0xB6A9 }, -{ 0xB6AA, 0xB6AA, 0xB6AA }, -{ 0xB6AB, 0xB6AB, 0xB6AB }, -{ 0xB6AC, 0xB6AC, 0xB6AC }, -{ 0xB6AD, 0xB6AD, 0xB6AD }, -{ 0xB6AE, 0xB6AE, 0xB6AE }, -{ 0xB6AF, 0xB6AF, 0xB6AF }, -{ 0xB6B0, 0xB6B0, 0xB6B0 }, -{ 0xB6B1, 0xB6B1, 0xB6B1 }, -{ 0xB6B2, 0xB6B2, 0xB6B2 }, -{ 0xB6B3, 0xB6B3, 0xB6B3 }, -{ 0xB6B4, 0xB6B4, 0xB6B4 }, -{ 0xB6B5, 0xB6B5, 0xB6B5 }, -{ 0xB6B6, 0xB6B6, 0xB6B6 }, -{ 0xB6B7, 0xB6B7, 0xB6B7 }, -{ 0xB6B8, 0xB6B8, 0xB6B8 }, -{ 0xB6B9, 0xB6B9, 0xB6B9 }, -{ 0xB6BA, 0xB6BA, 0xB6BA }, -{ 0xB6BB, 0xB6BB, 0xB6BB }, -{ 0xB6BC, 0xB6BC, 0xB6BC }, -{ 0xB6BD, 0xB6BD, 0xB6BD }, -{ 0xB6BE, 0xB6BE, 0xB6BE }, -{ 0xB6BF, 0xB6BF, 0xB6BF }, -{ 0xB6C0, 0xB6C0, 0xB6C0 }, -{ 0xB6C1, 0xB6C1, 0xB6C1 }, -{ 0xB6C2, 0xB6C2, 0xB6C2 }, -{ 0xB6C3, 0xB6C3, 0xB6C3 }, -{ 0xB6C4, 0xB6C4, 0xB6C4 }, -{ 0xB6C5, 0xB6C5, 0xB6C5 }, -{ 0xB6C6, 0xB6C6, 0xB6C6 }, -{ 0xB6C7, 0xB6C7, 0xB6C7 }, -{ 0xB6C8, 0xB6C8, 0xB6C8 }, -{ 0xB6C9, 0xB6C9, 0xB6C9 }, -{ 0xB6CA, 0xB6CA, 0xB6CA }, -{ 0xB6CB, 0xB6CB, 0xB6CB }, -{ 0xB6CC, 0xB6CC, 0xB6CC }, -{ 0xB6CD, 0xB6CD, 0xB6CD }, -{ 0xB6CE, 0xB6CE, 0xB6CE }, -{ 0xB6CF, 0xB6CF, 0xB6CF }, -{ 0xB6D0, 0xB6D0, 0xB6D0 }, -{ 0xB6D1, 0xB6D1, 0xB6D1 }, -{ 0xB6D2, 0xB6D2, 0xB6D2 }, -{ 0xB6D3, 0xB6D3, 0xB6D3 }, -{ 0xB6D4, 0xB6D4, 0xB6D4 }, -{ 0xB6D5, 0xB6D5, 0xB6D5 }, -{ 0xB6D6, 0xB6D6, 0xB6D6 }, -{ 0xB6D7, 0xB6D7, 0xB6D7 }, -{ 0xB6D8, 0xB6D8, 0xB6D8 }, -{ 0xB6D9, 0xB6D9, 0xB6D9 }, -{ 0xB6DA, 0xB6DA, 0xB6DA }, -{ 0xB6DB, 0xB6DB, 0xB6DB }, -{ 0xB6DC, 0xB6DC, 0xB6DC }, -{ 0xB6DD, 0xB6DD, 0xB6DD }, -{ 0xB6DE, 0xB6DE, 0xB6DE }, -{ 0xB6DF, 0xB6DF, 0xB6DF }, -{ 0xB6E0, 0xB6E0, 0xB6E0 }, -{ 0xB6E1, 0xB6E1, 0xB6E1 }, -{ 0xB6E2, 0xB6E2, 0xB6E2 }, -{ 0xB6E3, 0xB6E3, 0xB6E3 }, -{ 0xB6E4, 0xB6E4, 0xB6E4 }, -{ 0xB6E5, 0xB6E5, 0xB6E5 }, -{ 0xB6E6, 0xB6E6, 0xB6E6 }, -{ 0xB6E7, 0xB6E7, 0xB6E7 }, -{ 0xB6E8, 0xB6E8, 0xB6E8 }, -{ 0xB6E9, 0xB6E9, 0xB6E9 }, -{ 0xB6EA, 0xB6EA, 0xB6EA }, -{ 0xB6EB, 0xB6EB, 0xB6EB }, -{ 0xB6EC, 0xB6EC, 0xB6EC }, -{ 0xB6ED, 0xB6ED, 0xB6ED }, -{ 0xB6EE, 0xB6EE, 0xB6EE }, -{ 0xB6EF, 0xB6EF, 0xB6EF }, -{ 0xB6F0, 0xB6F0, 0xB6F0 }, -{ 0xB6F1, 0xB6F1, 0xB6F1 }, -{ 0xB6F2, 0xB6F2, 0xB6F2 }, -{ 0xB6F3, 0xB6F3, 0xB6F3 }, -{ 0xB6F4, 0xB6F4, 0xB6F4 }, -{ 0xB6F5, 0xB6F5, 0xB6F5 }, -{ 0xB6F6, 0xB6F6, 0xB6F6 }, -{ 0xB6F7, 0xB6F7, 0xB6F7 }, -{ 0xB6F8, 0xB6F8, 0xB6F8 }, -{ 0xB6F9, 0xB6F9, 0xB6F9 }, -{ 0xB6FA, 0xB6FA, 0xB6FA }, -{ 0xB6FB, 0xB6FB, 0xB6FB }, -{ 0xB6FC, 0xB6FC, 0xB6FC }, -{ 0xB6FD, 0xB6FD, 0xB6FD }, -{ 0xB6FE, 0xB6FE, 0xB6FE }, -{ 0xB6FF, 0xB6FF, 0xB6FF }, -{ 0xB700, 0xB700, 0xB700 }, -{ 0xB701, 0xB701, 0xB701 }, -{ 0xB702, 0xB702, 0xB702 }, -{ 0xB703, 0xB703, 0xB703 }, -{ 0xB704, 0xB704, 0xB704 }, -{ 0xB705, 0xB705, 0xB705 }, -{ 0xB706, 0xB706, 0xB706 }, -{ 0xB707, 0xB707, 0xB707 }, -{ 0xB708, 0xB708, 0xB708 }, -{ 0xB709, 0xB709, 0xB709 }, -{ 0xB70A, 0xB70A, 0xB70A }, -{ 0xB70B, 0xB70B, 0xB70B }, -{ 0xB70C, 0xB70C, 0xB70C }, -{ 0xB70D, 0xB70D, 0xB70D }, -{ 0xB70E, 0xB70E, 0xB70E }, -{ 0xB70F, 0xB70F, 0xB70F }, -{ 0xB710, 0xB710, 0xB710 }, -{ 0xB711, 0xB711, 0xB711 }, -{ 0xB712, 0xB712, 0xB712 }, -{ 0xB713, 0xB713, 0xB713 }, -{ 0xB714, 0xB714, 0xB714 }, -{ 0xB715, 0xB715, 0xB715 }, -{ 0xB716, 0xB716, 0xB716 }, -{ 0xB717, 0xB717, 0xB717 }, -{ 0xB718, 0xB718, 0xB718 }, -{ 0xB719, 0xB719, 0xB719 }, -{ 0xB71A, 0xB71A, 0xB71A }, -{ 0xB71B, 0xB71B, 0xB71B }, -{ 0xB71C, 0xB71C, 0xB71C }, -{ 0xB71D, 0xB71D, 0xB71D }, -{ 0xB71E, 0xB71E, 0xB71E }, -{ 0xB71F, 0xB71F, 0xB71F }, -{ 0xB720, 0xB720, 0xB720 }, -{ 0xB721, 0xB721, 0xB721 }, -{ 0xB722, 0xB722, 0xB722 }, -{ 0xB723, 0xB723, 0xB723 }, -{ 0xB724, 0xB724, 0xB724 }, -{ 0xB725, 0xB725, 0xB725 }, -{ 0xB726, 0xB726, 0xB726 }, -{ 0xB727, 0xB727, 0xB727 }, -{ 0xB728, 0xB728, 0xB728 }, -{ 0xB729, 0xB729, 0xB729 }, -{ 0xB72A, 0xB72A, 0xB72A }, -{ 0xB72B, 0xB72B, 0xB72B }, -{ 0xB72C, 0xB72C, 0xB72C }, -{ 0xB72D, 0xB72D, 0xB72D }, -{ 0xB72E, 0xB72E, 0xB72E }, -{ 0xB72F, 0xB72F, 0xB72F }, -{ 0xB730, 0xB730, 0xB730 }, -{ 0xB731, 0xB731, 0xB731 }, -{ 0xB732, 0xB732, 0xB732 }, -{ 0xB733, 0xB733, 0xB733 }, -{ 0xB734, 0xB734, 0xB734 }, -{ 0xB735, 0xB735, 0xB735 }, -{ 0xB736, 0xB736, 0xB736 }, -{ 0xB737, 0xB737, 0xB737 }, -{ 0xB738, 0xB738, 0xB738 }, -{ 0xB739, 0xB739, 0xB739 }, -{ 0xB73A, 0xB73A, 0xB73A }, -{ 0xB73B, 0xB73B, 0xB73B }, -{ 0xB73C, 0xB73C, 0xB73C }, -{ 0xB73D, 0xB73D, 0xB73D }, -{ 0xB73E, 0xB73E, 0xB73E }, -{ 0xB73F, 0xB73F, 0xB73F }, -{ 0xB740, 0xB740, 0xB740 }, -{ 0xB741, 0xB741, 0xB741 }, -{ 0xB742, 0xB742, 0xB742 }, -{ 0xB743, 0xB743, 0xB743 }, -{ 0xB744, 0xB744, 0xB744 }, -{ 0xB745, 0xB745, 0xB745 }, -{ 0xB746, 0xB746, 0xB746 }, -{ 0xB747, 0xB747, 0xB747 }, -{ 0xB748, 0xB748, 0xB748 }, -{ 0xB749, 0xB749, 0xB749 }, -{ 0xB74A, 0xB74A, 0xB74A }, -{ 0xB74B, 0xB74B, 0xB74B }, -{ 0xB74C, 0xB74C, 0xB74C }, -{ 0xB74D, 0xB74D, 0xB74D }, -{ 0xB74E, 0xB74E, 0xB74E }, -{ 0xB74F, 0xB74F, 0xB74F }, -{ 0xB750, 0xB750, 0xB750 }, -{ 0xB751, 0xB751, 0xB751 }, -{ 0xB752, 0xB752, 0xB752 }, -{ 0xB753, 0xB753, 0xB753 }, -{ 0xB754, 0xB754, 0xB754 }, -{ 0xB755, 0xB755, 0xB755 }, -{ 0xB756, 0xB756, 0xB756 }, -{ 0xB757, 0xB757, 0xB757 }, -{ 0xB758, 0xB758, 0xB758 }, -{ 0xB759, 0xB759, 0xB759 }, -{ 0xB75A, 0xB75A, 0xB75A }, -{ 0xB75B, 0xB75B, 0xB75B }, -{ 0xB75C, 0xB75C, 0xB75C }, -{ 0xB75D, 0xB75D, 0xB75D }, -{ 0xB75E, 0xB75E, 0xB75E }, -{ 0xB75F, 0xB75F, 0xB75F }, -{ 0xB760, 0xB760, 0xB760 }, -{ 0xB761, 0xB761, 0xB761 }, -{ 0xB762, 0xB762, 0xB762 }, -{ 0xB763, 0xB763, 0xB763 }, -{ 0xB764, 0xB764, 0xB764 }, -{ 0xB765, 0xB765, 0xB765 }, -{ 0xB766, 0xB766, 0xB766 }, -{ 0xB767, 0xB767, 0xB767 }, -{ 0xB768, 0xB768, 0xB768 }, -{ 0xB769, 0xB769, 0xB769 }, -{ 0xB76A, 0xB76A, 0xB76A }, -{ 0xB76B, 0xB76B, 0xB76B }, -{ 0xB76C, 0xB76C, 0xB76C }, -{ 0xB76D, 0xB76D, 0xB76D }, -{ 0xB76E, 0xB76E, 0xB76E }, -{ 0xB76F, 0xB76F, 0xB76F }, -{ 0xB770, 0xB770, 0xB770 }, -{ 0xB771, 0xB771, 0xB771 }, -{ 0xB772, 0xB772, 0xB772 }, -{ 0xB773, 0xB773, 0xB773 }, -{ 0xB774, 0xB774, 0xB774 }, -{ 0xB775, 0xB775, 0xB775 }, -{ 0xB776, 0xB776, 0xB776 }, -{ 0xB777, 0xB777, 0xB777 }, -{ 0xB778, 0xB778, 0xB778 }, -{ 0xB779, 0xB779, 0xB779 }, -{ 0xB77A, 0xB77A, 0xB77A }, -{ 0xB77B, 0xB77B, 0xB77B }, -{ 0xB77C, 0xB77C, 0xB77C }, -{ 0xB77D, 0xB77D, 0xB77D }, -{ 0xB77E, 0xB77E, 0xB77E }, -{ 0xB77F, 0xB77F, 0xB77F }, -{ 0xB780, 0xB780, 0xB780 }, -{ 0xB781, 0xB781, 0xB781 }, -{ 0xB782, 0xB782, 0xB782 }, -{ 0xB783, 0xB783, 0xB783 }, -{ 0xB784, 0xB784, 0xB784 }, -{ 0xB785, 0xB785, 0xB785 }, -{ 0xB786, 0xB786, 0xB786 }, -{ 0xB787, 0xB787, 0xB787 }, -{ 0xB788, 0xB788, 0xB788 }, -{ 0xB789, 0xB789, 0xB789 }, -{ 0xB78A, 0xB78A, 0xB78A }, -{ 0xB78B, 0xB78B, 0xB78B }, -{ 0xB78C, 0xB78C, 0xB78C }, -{ 0xB78D, 0xB78D, 0xB78D }, -{ 0xB78E, 0xB78E, 0xB78E }, -{ 0xB78F, 0xB78F, 0xB78F }, -{ 0xB790, 0xB790, 0xB790 }, -{ 0xB791, 0xB791, 0xB791 }, -{ 0xB792, 0xB792, 0xB792 }, -{ 0xB793, 0xB793, 0xB793 }, -{ 0xB794, 0xB794, 0xB794 }, -{ 0xB795, 0xB795, 0xB795 }, -{ 0xB796, 0xB796, 0xB796 }, -{ 0xB797, 0xB797, 0xB797 }, -{ 0xB798, 0xB798, 0xB798 }, -{ 0xB799, 0xB799, 0xB799 }, -{ 0xB79A, 0xB79A, 0xB79A }, -{ 0xB79B, 0xB79B, 0xB79B }, -{ 0xB79C, 0xB79C, 0xB79C }, -{ 0xB79D, 0xB79D, 0xB79D }, -{ 0xB79E, 0xB79E, 0xB79E }, -{ 0xB79F, 0xB79F, 0xB79F }, -{ 0xB7A0, 0xB7A0, 0xB7A0 }, -{ 0xB7A1, 0xB7A1, 0xB7A1 }, -{ 0xB7A2, 0xB7A2, 0xB7A2 }, -{ 0xB7A3, 0xB7A3, 0xB7A3 }, -{ 0xB7A4, 0xB7A4, 0xB7A4 }, -{ 0xB7A5, 0xB7A5, 0xB7A5 }, -{ 0xB7A6, 0xB7A6, 0xB7A6 }, -{ 0xB7A7, 0xB7A7, 0xB7A7 }, -{ 0xB7A8, 0xB7A8, 0xB7A8 }, -{ 0xB7A9, 0xB7A9, 0xB7A9 }, -{ 0xB7AA, 0xB7AA, 0xB7AA }, -{ 0xB7AB, 0xB7AB, 0xB7AB }, -{ 0xB7AC, 0xB7AC, 0xB7AC }, -{ 0xB7AD, 0xB7AD, 0xB7AD }, -{ 0xB7AE, 0xB7AE, 0xB7AE }, -{ 0xB7AF, 0xB7AF, 0xB7AF }, -{ 0xB7B0, 0xB7B0, 0xB7B0 }, -{ 0xB7B1, 0xB7B1, 0xB7B1 }, -{ 0xB7B2, 0xB7B2, 0xB7B2 }, -{ 0xB7B3, 0xB7B3, 0xB7B3 }, -{ 0xB7B4, 0xB7B4, 0xB7B4 }, -{ 0xB7B5, 0xB7B5, 0xB7B5 }, -{ 0xB7B6, 0xB7B6, 0xB7B6 }, -{ 0xB7B7, 0xB7B7, 0xB7B7 }, -{ 0xB7B8, 0xB7B8, 0xB7B8 }, -{ 0xB7B9, 0xB7B9, 0xB7B9 }, -{ 0xB7BA, 0xB7BA, 0xB7BA }, -{ 0xB7BB, 0xB7BB, 0xB7BB }, -{ 0xB7BC, 0xB7BC, 0xB7BC }, -{ 0xB7BD, 0xB7BD, 0xB7BD }, -{ 0xB7BE, 0xB7BE, 0xB7BE }, -{ 0xB7BF, 0xB7BF, 0xB7BF }, -{ 0xB7C0, 0xB7C0, 0xB7C0 }, -{ 0xB7C1, 0xB7C1, 0xB7C1 }, -{ 0xB7C2, 0xB7C2, 0xB7C2 }, -{ 0xB7C3, 0xB7C3, 0xB7C3 }, -{ 0xB7C4, 0xB7C4, 0xB7C4 }, -{ 0xB7C5, 0xB7C5, 0xB7C5 }, -{ 0xB7C6, 0xB7C6, 0xB7C6 }, -{ 0xB7C7, 0xB7C7, 0xB7C7 }, -{ 0xB7C8, 0xB7C8, 0xB7C8 }, -{ 0xB7C9, 0xB7C9, 0xB7C9 }, -{ 0xB7CA, 0xB7CA, 0xB7CA }, -{ 0xB7CB, 0xB7CB, 0xB7CB }, -{ 0xB7CC, 0xB7CC, 0xB7CC }, -{ 0xB7CD, 0xB7CD, 0xB7CD }, -{ 0xB7CE, 0xB7CE, 0xB7CE }, -{ 0xB7CF, 0xB7CF, 0xB7CF }, -{ 0xB7D0, 0xB7D0, 0xB7D0 }, -{ 0xB7D1, 0xB7D1, 0xB7D1 }, -{ 0xB7D2, 0xB7D2, 0xB7D2 }, -{ 0xB7D3, 0xB7D3, 0xB7D3 }, -{ 0xB7D4, 0xB7D4, 0xB7D4 }, -{ 0xB7D5, 0xB7D5, 0xB7D5 }, -{ 0xB7D6, 0xB7D6, 0xB7D6 }, -{ 0xB7D7, 0xB7D7, 0xB7D7 }, -{ 0xB7D8, 0xB7D8, 0xB7D8 }, -{ 0xB7D9, 0xB7D9, 0xB7D9 }, -{ 0xB7DA, 0xB7DA, 0xB7DA }, -{ 0xB7DB, 0xB7DB, 0xB7DB }, -{ 0xB7DC, 0xB7DC, 0xB7DC }, -{ 0xB7DD, 0xB7DD, 0xB7DD }, -{ 0xB7DE, 0xB7DE, 0xB7DE }, -{ 0xB7DF, 0xB7DF, 0xB7DF }, -{ 0xB7E0, 0xB7E0, 0xB7E0 }, -{ 0xB7E1, 0xB7E1, 0xB7E1 }, -{ 0xB7E2, 0xB7E2, 0xB7E2 }, -{ 0xB7E3, 0xB7E3, 0xB7E3 }, -{ 0xB7E4, 0xB7E4, 0xB7E4 }, -{ 0xB7E5, 0xB7E5, 0xB7E5 }, -{ 0xB7E6, 0xB7E6, 0xB7E6 }, -{ 0xB7E7, 0xB7E7, 0xB7E7 }, -{ 0xB7E8, 0xB7E8, 0xB7E8 }, -{ 0xB7E9, 0xB7E9, 0xB7E9 }, -{ 0xB7EA, 0xB7EA, 0xB7EA }, -{ 0xB7EB, 0xB7EB, 0xB7EB }, -{ 0xB7EC, 0xB7EC, 0xB7EC }, -{ 0xB7ED, 0xB7ED, 0xB7ED }, -{ 0xB7EE, 0xB7EE, 0xB7EE }, -{ 0xB7EF, 0xB7EF, 0xB7EF }, -{ 0xB7F0, 0xB7F0, 0xB7F0 }, -{ 0xB7F1, 0xB7F1, 0xB7F1 }, -{ 0xB7F2, 0xB7F2, 0xB7F2 }, -{ 0xB7F3, 0xB7F3, 0xB7F3 }, -{ 0xB7F4, 0xB7F4, 0xB7F4 }, -{ 0xB7F5, 0xB7F5, 0xB7F5 }, -{ 0xB7F6, 0xB7F6, 0xB7F6 }, -{ 0xB7F7, 0xB7F7, 0xB7F7 }, -{ 0xB7F8, 0xB7F8, 0xB7F8 }, -{ 0xB7F9, 0xB7F9, 0xB7F9 }, -{ 0xB7FA, 0xB7FA, 0xB7FA }, -{ 0xB7FB, 0xB7FB, 0xB7FB }, -{ 0xB7FC, 0xB7FC, 0xB7FC }, -{ 0xB7FD, 0xB7FD, 0xB7FD }, -{ 0xB7FE, 0xB7FE, 0xB7FE }, -{ 0xB7FF, 0xB7FF, 0xB7FF }, -{ 0xB800, 0xB800, 0xB800 }, -{ 0xB801, 0xB801, 0xB801 }, -{ 0xB802, 0xB802, 0xB802 }, -{ 0xB803, 0xB803, 0xB803 }, -{ 0xB804, 0xB804, 0xB804 }, -{ 0xB805, 0xB805, 0xB805 }, -{ 0xB806, 0xB806, 0xB806 }, -{ 0xB807, 0xB807, 0xB807 }, -{ 0xB808, 0xB808, 0xB808 }, -{ 0xB809, 0xB809, 0xB809 }, -{ 0xB80A, 0xB80A, 0xB80A }, -{ 0xB80B, 0xB80B, 0xB80B }, -{ 0xB80C, 0xB80C, 0xB80C }, -{ 0xB80D, 0xB80D, 0xB80D }, -{ 0xB80E, 0xB80E, 0xB80E }, -{ 0xB80F, 0xB80F, 0xB80F }, -{ 0xB810, 0xB810, 0xB810 }, -{ 0xB811, 0xB811, 0xB811 }, -{ 0xB812, 0xB812, 0xB812 }, -{ 0xB813, 0xB813, 0xB813 }, -{ 0xB814, 0xB814, 0xB814 }, -{ 0xB815, 0xB815, 0xB815 }, -{ 0xB816, 0xB816, 0xB816 }, -{ 0xB817, 0xB817, 0xB817 }, -{ 0xB818, 0xB818, 0xB818 }, -{ 0xB819, 0xB819, 0xB819 }, -{ 0xB81A, 0xB81A, 0xB81A }, -{ 0xB81B, 0xB81B, 0xB81B }, -{ 0xB81C, 0xB81C, 0xB81C }, -{ 0xB81D, 0xB81D, 0xB81D }, -{ 0xB81E, 0xB81E, 0xB81E }, -{ 0xB81F, 0xB81F, 0xB81F }, -{ 0xB820, 0xB820, 0xB820 }, -{ 0xB821, 0xB821, 0xB821 }, -{ 0xB822, 0xB822, 0xB822 }, -{ 0xB823, 0xB823, 0xB823 }, -{ 0xB824, 0xB824, 0xB824 }, -{ 0xB825, 0xB825, 0xB825 }, -{ 0xB826, 0xB826, 0xB826 }, -{ 0xB827, 0xB827, 0xB827 }, -{ 0xB828, 0xB828, 0xB828 }, -{ 0xB829, 0xB829, 0xB829 }, -{ 0xB82A, 0xB82A, 0xB82A }, -{ 0xB82B, 0xB82B, 0xB82B }, -{ 0xB82C, 0xB82C, 0xB82C }, -{ 0xB82D, 0xB82D, 0xB82D }, -{ 0xB82E, 0xB82E, 0xB82E }, -{ 0xB82F, 0xB82F, 0xB82F }, -{ 0xB830, 0xB830, 0xB830 }, -{ 0xB831, 0xB831, 0xB831 }, -{ 0xB832, 0xB832, 0xB832 }, -{ 0xB833, 0xB833, 0xB833 }, -{ 0xB834, 0xB834, 0xB834 }, -{ 0xB835, 0xB835, 0xB835 }, -{ 0xB836, 0xB836, 0xB836 }, -{ 0xB837, 0xB837, 0xB837 }, -{ 0xB838, 0xB838, 0xB838 }, -{ 0xB839, 0xB839, 0xB839 }, -{ 0xB83A, 0xB83A, 0xB83A }, -{ 0xB83B, 0xB83B, 0xB83B }, -{ 0xB83C, 0xB83C, 0xB83C }, -{ 0xB83D, 0xB83D, 0xB83D }, -{ 0xB83E, 0xB83E, 0xB83E }, -{ 0xB83F, 0xB83F, 0xB83F }, -{ 0xB840, 0xB840, 0xB840 }, -{ 0xB841, 0xB841, 0xB841 }, -{ 0xB842, 0xB842, 0xB842 }, -{ 0xB843, 0xB843, 0xB843 }, -{ 0xB844, 0xB844, 0xB844 }, -{ 0xB845, 0xB845, 0xB845 }, -{ 0xB846, 0xB846, 0xB846 }, -{ 0xB847, 0xB847, 0xB847 }, -{ 0xB848, 0xB848, 0xB848 }, -{ 0xB849, 0xB849, 0xB849 }, -{ 0xB84A, 0xB84A, 0xB84A }, -{ 0xB84B, 0xB84B, 0xB84B }, -{ 0xB84C, 0xB84C, 0xB84C }, -{ 0xB84D, 0xB84D, 0xB84D }, -{ 0xB84E, 0xB84E, 0xB84E }, -{ 0xB84F, 0xB84F, 0xB84F }, -{ 0xB850, 0xB850, 0xB850 }, -{ 0xB851, 0xB851, 0xB851 }, -{ 0xB852, 0xB852, 0xB852 }, -{ 0xB853, 0xB853, 0xB853 }, -{ 0xB854, 0xB854, 0xB854 }, -{ 0xB855, 0xB855, 0xB855 }, -{ 0xB856, 0xB856, 0xB856 }, -{ 0xB857, 0xB857, 0xB857 }, -{ 0xB858, 0xB858, 0xB858 }, -{ 0xB859, 0xB859, 0xB859 }, -{ 0xB85A, 0xB85A, 0xB85A }, -{ 0xB85B, 0xB85B, 0xB85B }, -{ 0xB85C, 0xB85C, 0xB85C }, -{ 0xB85D, 0xB85D, 0xB85D }, -{ 0xB85E, 0xB85E, 0xB85E }, -{ 0xB85F, 0xB85F, 0xB85F }, -{ 0xB860, 0xB860, 0xB860 }, -{ 0xB861, 0xB861, 0xB861 }, -{ 0xB862, 0xB862, 0xB862 }, -{ 0xB863, 0xB863, 0xB863 }, -{ 0xB864, 0xB864, 0xB864 }, -{ 0xB865, 0xB865, 0xB865 }, -{ 0xB866, 0xB866, 0xB866 }, -{ 0xB867, 0xB867, 0xB867 }, -{ 0xB868, 0xB868, 0xB868 }, -{ 0xB869, 0xB869, 0xB869 }, -{ 0xB86A, 0xB86A, 0xB86A }, -{ 0xB86B, 0xB86B, 0xB86B }, -{ 0xB86C, 0xB86C, 0xB86C }, -{ 0xB86D, 0xB86D, 0xB86D }, -{ 0xB86E, 0xB86E, 0xB86E }, -{ 0xB86F, 0xB86F, 0xB86F }, -{ 0xB870, 0xB870, 0xB870 }, -{ 0xB871, 0xB871, 0xB871 }, -{ 0xB872, 0xB872, 0xB872 }, -{ 0xB873, 0xB873, 0xB873 }, -{ 0xB874, 0xB874, 0xB874 }, -{ 0xB875, 0xB875, 0xB875 }, -{ 0xB876, 0xB876, 0xB876 }, -{ 0xB877, 0xB877, 0xB877 }, -{ 0xB878, 0xB878, 0xB878 }, -{ 0xB879, 0xB879, 0xB879 }, -{ 0xB87A, 0xB87A, 0xB87A }, -{ 0xB87B, 0xB87B, 0xB87B }, -{ 0xB87C, 0xB87C, 0xB87C }, -{ 0xB87D, 0xB87D, 0xB87D }, -{ 0xB87E, 0xB87E, 0xB87E }, -{ 0xB87F, 0xB87F, 0xB87F }, -{ 0xB880, 0xB880, 0xB880 }, -{ 0xB881, 0xB881, 0xB881 }, -{ 0xB882, 0xB882, 0xB882 }, -{ 0xB883, 0xB883, 0xB883 }, -{ 0xB884, 0xB884, 0xB884 }, -{ 0xB885, 0xB885, 0xB885 }, -{ 0xB886, 0xB886, 0xB886 }, -{ 0xB887, 0xB887, 0xB887 }, -{ 0xB888, 0xB888, 0xB888 }, -{ 0xB889, 0xB889, 0xB889 }, -{ 0xB88A, 0xB88A, 0xB88A }, -{ 0xB88B, 0xB88B, 0xB88B }, -{ 0xB88C, 0xB88C, 0xB88C }, -{ 0xB88D, 0xB88D, 0xB88D }, -{ 0xB88E, 0xB88E, 0xB88E }, -{ 0xB88F, 0xB88F, 0xB88F }, -{ 0xB890, 0xB890, 0xB890 }, -{ 0xB891, 0xB891, 0xB891 }, -{ 0xB892, 0xB892, 0xB892 }, -{ 0xB893, 0xB893, 0xB893 }, -{ 0xB894, 0xB894, 0xB894 }, -{ 0xB895, 0xB895, 0xB895 }, -{ 0xB896, 0xB896, 0xB896 }, -{ 0xB897, 0xB897, 0xB897 }, -{ 0xB898, 0xB898, 0xB898 }, -{ 0xB899, 0xB899, 0xB899 }, -{ 0xB89A, 0xB89A, 0xB89A }, -{ 0xB89B, 0xB89B, 0xB89B }, -{ 0xB89C, 0xB89C, 0xB89C }, -{ 0xB89D, 0xB89D, 0xB89D }, -{ 0xB89E, 0xB89E, 0xB89E }, -{ 0xB89F, 0xB89F, 0xB89F }, -{ 0xB8A0, 0xB8A0, 0xB8A0 }, -{ 0xB8A1, 0xB8A1, 0xB8A1 }, -{ 0xB8A2, 0xB8A2, 0xB8A2 }, -{ 0xB8A3, 0xB8A3, 0xB8A3 }, -{ 0xB8A4, 0xB8A4, 0xB8A4 }, -{ 0xB8A5, 0xB8A5, 0xB8A5 }, -{ 0xB8A6, 0xB8A6, 0xB8A6 }, -{ 0xB8A7, 0xB8A7, 0xB8A7 }, -{ 0xB8A8, 0xB8A8, 0xB8A8 }, -{ 0xB8A9, 0xB8A9, 0xB8A9 }, -{ 0xB8AA, 0xB8AA, 0xB8AA }, -{ 0xB8AB, 0xB8AB, 0xB8AB }, -{ 0xB8AC, 0xB8AC, 0xB8AC }, -{ 0xB8AD, 0xB8AD, 0xB8AD }, -{ 0xB8AE, 0xB8AE, 0xB8AE }, -{ 0xB8AF, 0xB8AF, 0xB8AF }, -{ 0xB8B0, 0xB8B0, 0xB8B0 }, -{ 0xB8B1, 0xB8B1, 0xB8B1 }, -{ 0xB8B2, 0xB8B2, 0xB8B2 }, -{ 0xB8B3, 0xB8B3, 0xB8B3 }, -{ 0xB8B4, 0xB8B4, 0xB8B4 }, -{ 0xB8B5, 0xB8B5, 0xB8B5 }, -{ 0xB8B6, 0xB8B6, 0xB8B6 }, -{ 0xB8B7, 0xB8B7, 0xB8B7 }, -{ 0xB8B8, 0xB8B8, 0xB8B8 }, -{ 0xB8B9, 0xB8B9, 0xB8B9 }, -{ 0xB8BA, 0xB8BA, 0xB8BA }, -{ 0xB8BB, 0xB8BB, 0xB8BB }, -{ 0xB8BC, 0xB8BC, 0xB8BC }, -{ 0xB8BD, 0xB8BD, 0xB8BD }, -{ 0xB8BE, 0xB8BE, 0xB8BE }, -{ 0xB8BF, 0xB8BF, 0xB8BF }, -{ 0xB8C0, 0xB8C0, 0xB8C0 }, -{ 0xB8C1, 0xB8C1, 0xB8C1 }, -{ 0xB8C2, 0xB8C2, 0xB8C2 }, -{ 0xB8C3, 0xB8C3, 0xB8C3 }, -{ 0xB8C4, 0xB8C4, 0xB8C4 }, -{ 0xB8C5, 0xB8C5, 0xB8C5 }, -{ 0xB8C6, 0xB8C6, 0xB8C6 }, -{ 0xB8C7, 0xB8C7, 0xB8C7 }, -{ 0xB8C8, 0xB8C8, 0xB8C8 }, -{ 0xB8C9, 0xB8C9, 0xB8C9 }, -{ 0xB8CA, 0xB8CA, 0xB8CA }, -{ 0xB8CB, 0xB8CB, 0xB8CB }, -{ 0xB8CC, 0xB8CC, 0xB8CC }, -{ 0xB8CD, 0xB8CD, 0xB8CD }, -{ 0xB8CE, 0xB8CE, 0xB8CE }, -{ 0xB8CF, 0xB8CF, 0xB8CF }, -{ 0xB8D0, 0xB8D0, 0xB8D0 }, -{ 0xB8D1, 0xB8D1, 0xB8D1 }, -{ 0xB8D2, 0xB8D2, 0xB8D2 }, -{ 0xB8D3, 0xB8D3, 0xB8D3 }, -{ 0xB8D4, 0xB8D4, 0xB8D4 }, -{ 0xB8D5, 0xB8D5, 0xB8D5 }, -{ 0xB8D6, 0xB8D6, 0xB8D6 }, -{ 0xB8D7, 0xB8D7, 0xB8D7 }, -{ 0xB8D8, 0xB8D8, 0xB8D8 }, -{ 0xB8D9, 0xB8D9, 0xB8D9 }, -{ 0xB8DA, 0xB8DA, 0xB8DA }, -{ 0xB8DB, 0xB8DB, 0xB8DB }, -{ 0xB8DC, 0xB8DC, 0xB8DC }, -{ 0xB8DD, 0xB8DD, 0xB8DD }, -{ 0xB8DE, 0xB8DE, 0xB8DE }, -{ 0xB8DF, 0xB8DF, 0xB8DF }, -{ 0xB8E0, 0xB8E0, 0xB8E0 }, -{ 0xB8E1, 0xB8E1, 0xB8E1 }, -{ 0xB8E2, 0xB8E2, 0xB8E2 }, -{ 0xB8E3, 0xB8E3, 0xB8E3 }, -{ 0xB8E4, 0xB8E4, 0xB8E4 }, -{ 0xB8E5, 0xB8E5, 0xB8E5 }, -{ 0xB8E6, 0xB8E6, 0xB8E6 }, -{ 0xB8E7, 0xB8E7, 0xB8E7 }, -{ 0xB8E8, 0xB8E8, 0xB8E8 }, -{ 0xB8E9, 0xB8E9, 0xB8E9 }, -{ 0xB8EA, 0xB8EA, 0xB8EA }, -{ 0xB8EB, 0xB8EB, 0xB8EB }, -{ 0xB8EC, 0xB8EC, 0xB8EC }, -{ 0xB8ED, 0xB8ED, 0xB8ED }, -{ 0xB8EE, 0xB8EE, 0xB8EE }, -{ 0xB8EF, 0xB8EF, 0xB8EF }, -{ 0xB8F0, 0xB8F0, 0xB8F0 }, -{ 0xB8F1, 0xB8F1, 0xB8F1 }, -{ 0xB8F2, 0xB8F2, 0xB8F2 }, -{ 0xB8F3, 0xB8F3, 0xB8F3 }, -{ 0xB8F4, 0xB8F4, 0xB8F4 }, -{ 0xB8F5, 0xB8F5, 0xB8F5 }, -{ 0xB8F6, 0xB8F6, 0xB8F6 }, -{ 0xB8F7, 0xB8F7, 0xB8F7 }, -{ 0xB8F8, 0xB8F8, 0xB8F8 }, -{ 0xB8F9, 0xB8F9, 0xB8F9 }, -{ 0xB8FA, 0xB8FA, 0xB8FA }, -{ 0xB8FB, 0xB8FB, 0xB8FB }, -{ 0xB8FC, 0xB8FC, 0xB8FC }, -{ 0xB8FD, 0xB8FD, 0xB8FD }, -{ 0xB8FE, 0xB8FE, 0xB8FE }, -{ 0xB8FF, 0xB8FF, 0xB8FF }, -{ 0xB900, 0xB900, 0xB900 }, -{ 0xB901, 0xB901, 0xB901 }, -{ 0xB902, 0xB902, 0xB902 }, -{ 0xB903, 0xB903, 0xB903 }, -{ 0xB904, 0xB904, 0xB904 }, -{ 0xB905, 0xB905, 0xB905 }, -{ 0xB906, 0xB906, 0xB906 }, -{ 0xB907, 0xB907, 0xB907 }, -{ 0xB908, 0xB908, 0xB908 }, -{ 0xB909, 0xB909, 0xB909 }, -{ 0xB90A, 0xB90A, 0xB90A }, -{ 0xB90B, 0xB90B, 0xB90B }, -{ 0xB90C, 0xB90C, 0xB90C }, -{ 0xB90D, 0xB90D, 0xB90D }, -{ 0xB90E, 0xB90E, 0xB90E }, -{ 0xB90F, 0xB90F, 0xB90F }, -{ 0xB910, 0xB910, 0xB910 }, -{ 0xB911, 0xB911, 0xB911 }, -{ 0xB912, 0xB912, 0xB912 }, -{ 0xB913, 0xB913, 0xB913 }, -{ 0xB914, 0xB914, 0xB914 }, -{ 0xB915, 0xB915, 0xB915 }, -{ 0xB916, 0xB916, 0xB916 }, -{ 0xB917, 0xB917, 0xB917 }, -{ 0xB918, 0xB918, 0xB918 }, -{ 0xB919, 0xB919, 0xB919 }, -{ 0xB91A, 0xB91A, 0xB91A }, -{ 0xB91B, 0xB91B, 0xB91B }, -{ 0xB91C, 0xB91C, 0xB91C }, -{ 0xB91D, 0xB91D, 0xB91D }, -{ 0xB91E, 0xB91E, 0xB91E }, -{ 0xB91F, 0xB91F, 0xB91F }, -{ 0xB920, 0xB920, 0xB920 }, -{ 0xB921, 0xB921, 0xB921 }, -{ 0xB922, 0xB922, 0xB922 }, -{ 0xB923, 0xB923, 0xB923 }, -{ 0xB924, 0xB924, 0xB924 }, -{ 0xB925, 0xB925, 0xB925 }, -{ 0xB926, 0xB926, 0xB926 }, -{ 0xB927, 0xB927, 0xB927 }, -{ 0xB928, 0xB928, 0xB928 }, -{ 0xB929, 0xB929, 0xB929 }, -{ 0xB92A, 0xB92A, 0xB92A }, -{ 0xB92B, 0xB92B, 0xB92B }, -{ 0xB92C, 0xB92C, 0xB92C }, -{ 0xB92D, 0xB92D, 0xB92D }, -{ 0xB92E, 0xB92E, 0xB92E }, -{ 0xB92F, 0xB92F, 0xB92F }, -{ 0xB930, 0xB930, 0xB930 }, -{ 0xB931, 0xB931, 0xB931 }, -{ 0xB932, 0xB932, 0xB932 }, -{ 0xB933, 0xB933, 0xB933 }, -{ 0xB934, 0xB934, 0xB934 }, -{ 0xB935, 0xB935, 0xB935 }, -{ 0xB936, 0xB936, 0xB936 }, -{ 0xB937, 0xB937, 0xB937 }, -{ 0xB938, 0xB938, 0xB938 }, -{ 0xB939, 0xB939, 0xB939 }, -{ 0xB93A, 0xB93A, 0xB93A }, -{ 0xB93B, 0xB93B, 0xB93B }, -{ 0xB93C, 0xB93C, 0xB93C }, -{ 0xB93D, 0xB93D, 0xB93D }, -{ 0xB93E, 0xB93E, 0xB93E }, -{ 0xB93F, 0xB93F, 0xB93F }, -{ 0xB940, 0xB940, 0xB940 }, -{ 0xB941, 0xB941, 0xB941 }, -{ 0xB942, 0xB942, 0xB942 }, -{ 0xB943, 0xB943, 0xB943 }, -{ 0xB944, 0xB944, 0xB944 }, -{ 0xB945, 0xB945, 0xB945 }, -{ 0xB946, 0xB946, 0xB946 }, -{ 0xB947, 0xB947, 0xB947 }, -{ 0xB948, 0xB948, 0xB948 }, -{ 0xB949, 0xB949, 0xB949 }, -{ 0xB94A, 0xB94A, 0xB94A }, -{ 0xB94B, 0xB94B, 0xB94B }, -{ 0xB94C, 0xB94C, 0xB94C }, -{ 0xB94D, 0xB94D, 0xB94D }, -{ 0xB94E, 0xB94E, 0xB94E }, -{ 0xB94F, 0xB94F, 0xB94F }, -{ 0xB950, 0xB950, 0xB950 }, -{ 0xB951, 0xB951, 0xB951 }, -{ 0xB952, 0xB952, 0xB952 }, -{ 0xB953, 0xB953, 0xB953 }, -{ 0xB954, 0xB954, 0xB954 }, -{ 0xB955, 0xB955, 0xB955 }, -{ 0xB956, 0xB956, 0xB956 }, -{ 0xB957, 0xB957, 0xB957 }, -{ 0xB958, 0xB958, 0xB958 }, -{ 0xB959, 0xB959, 0xB959 }, -{ 0xB95A, 0xB95A, 0xB95A }, -{ 0xB95B, 0xB95B, 0xB95B }, -{ 0xB95C, 0xB95C, 0xB95C }, -{ 0xB95D, 0xB95D, 0xB95D }, -{ 0xB95E, 0xB95E, 0xB95E }, -{ 0xB95F, 0xB95F, 0xB95F }, -{ 0xB960, 0xB960, 0xB960 }, -{ 0xB961, 0xB961, 0xB961 }, -{ 0xB962, 0xB962, 0xB962 }, -{ 0xB963, 0xB963, 0xB963 }, -{ 0xB964, 0xB964, 0xB964 }, -{ 0xB965, 0xB965, 0xB965 }, -{ 0xB966, 0xB966, 0xB966 }, -{ 0xB967, 0xB967, 0xB967 }, -{ 0xB968, 0xB968, 0xB968 }, -{ 0xB969, 0xB969, 0xB969 }, -{ 0xB96A, 0xB96A, 0xB96A }, -{ 0xB96B, 0xB96B, 0xB96B }, -{ 0xB96C, 0xB96C, 0xB96C }, -{ 0xB96D, 0xB96D, 0xB96D }, -{ 0xB96E, 0xB96E, 0xB96E }, -{ 0xB96F, 0xB96F, 0xB96F }, -{ 0xB970, 0xB970, 0xB970 }, -{ 0xB971, 0xB971, 0xB971 }, -{ 0xB972, 0xB972, 0xB972 }, -{ 0xB973, 0xB973, 0xB973 }, -{ 0xB974, 0xB974, 0xB974 }, -{ 0xB975, 0xB975, 0xB975 }, -{ 0xB976, 0xB976, 0xB976 }, -{ 0xB977, 0xB977, 0xB977 }, -{ 0xB978, 0xB978, 0xB978 }, -{ 0xB979, 0xB979, 0xB979 }, -{ 0xB97A, 0xB97A, 0xB97A }, -{ 0xB97B, 0xB97B, 0xB97B }, -{ 0xB97C, 0xB97C, 0xB97C }, -{ 0xB97D, 0xB97D, 0xB97D }, -{ 0xB97E, 0xB97E, 0xB97E }, -{ 0xB97F, 0xB97F, 0xB97F }, -{ 0xB980, 0xB980, 0xB980 }, -{ 0xB981, 0xB981, 0xB981 }, -{ 0xB982, 0xB982, 0xB982 }, -{ 0xB983, 0xB983, 0xB983 }, -{ 0xB984, 0xB984, 0xB984 }, -{ 0xB985, 0xB985, 0xB985 }, -{ 0xB986, 0xB986, 0xB986 }, -{ 0xB987, 0xB987, 0xB987 }, -{ 0xB988, 0xB988, 0xB988 }, -{ 0xB989, 0xB989, 0xB989 }, -{ 0xB98A, 0xB98A, 0xB98A }, -{ 0xB98B, 0xB98B, 0xB98B }, -{ 0xB98C, 0xB98C, 0xB98C }, -{ 0xB98D, 0xB98D, 0xB98D }, -{ 0xB98E, 0xB98E, 0xB98E }, -{ 0xB98F, 0xB98F, 0xB98F }, -{ 0xB990, 0xB990, 0xB990 }, -{ 0xB991, 0xB991, 0xB991 }, -{ 0xB992, 0xB992, 0xB992 }, -{ 0xB993, 0xB993, 0xB993 }, -{ 0xB994, 0xB994, 0xB994 }, -{ 0xB995, 0xB995, 0xB995 }, -{ 0xB996, 0xB996, 0xB996 }, -{ 0xB997, 0xB997, 0xB997 }, -{ 0xB998, 0xB998, 0xB998 }, -{ 0xB999, 0xB999, 0xB999 }, -{ 0xB99A, 0xB99A, 0xB99A }, -{ 0xB99B, 0xB99B, 0xB99B }, -{ 0xB99C, 0xB99C, 0xB99C }, -{ 0xB99D, 0xB99D, 0xB99D }, -{ 0xB99E, 0xB99E, 0xB99E }, -{ 0xB99F, 0xB99F, 0xB99F }, -{ 0xB9A0, 0xB9A0, 0xB9A0 }, -{ 0xB9A1, 0xB9A1, 0xB9A1 }, -{ 0xB9A2, 0xB9A2, 0xB9A2 }, -{ 0xB9A3, 0xB9A3, 0xB9A3 }, -{ 0xB9A4, 0xB9A4, 0xB9A4 }, -{ 0xB9A5, 0xB9A5, 0xB9A5 }, -{ 0xB9A6, 0xB9A6, 0xB9A6 }, -{ 0xB9A7, 0xB9A7, 0xB9A7 }, -{ 0xB9A8, 0xB9A8, 0xB9A8 }, -{ 0xB9A9, 0xB9A9, 0xB9A9 }, -{ 0xB9AA, 0xB9AA, 0xB9AA }, -{ 0xB9AB, 0xB9AB, 0xB9AB }, -{ 0xB9AC, 0xB9AC, 0xB9AC }, -{ 0xB9AD, 0xB9AD, 0xB9AD }, -{ 0xB9AE, 0xB9AE, 0xB9AE }, -{ 0xB9AF, 0xB9AF, 0xB9AF }, -{ 0xB9B0, 0xB9B0, 0xB9B0 }, -{ 0xB9B1, 0xB9B1, 0xB9B1 }, -{ 0xB9B2, 0xB9B2, 0xB9B2 }, -{ 0xB9B3, 0xB9B3, 0xB9B3 }, -{ 0xB9B4, 0xB9B4, 0xB9B4 }, -{ 0xB9B5, 0xB9B5, 0xB9B5 }, -{ 0xB9B6, 0xB9B6, 0xB9B6 }, -{ 0xB9B7, 0xB9B7, 0xB9B7 }, -{ 0xB9B8, 0xB9B8, 0xB9B8 }, -{ 0xB9B9, 0xB9B9, 0xB9B9 }, -{ 0xB9BA, 0xB9BA, 0xB9BA }, -{ 0xB9BB, 0xB9BB, 0xB9BB }, -{ 0xB9BC, 0xB9BC, 0xB9BC }, -{ 0xB9BD, 0xB9BD, 0xB9BD }, -{ 0xB9BE, 0xB9BE, 0xB9BE }, -{ 0xB9BF, 0xB9BF, 0xB9BF }, -{ 0xB9C0, 0xB9C0, 0xB9C0 }, -{ 0xB9C1, 0xB9C1, 0xB9C1 }, -{ 0xB9C2, 0xB9C2, 0xB9C2 }, -{ 0xB9C3, 0xB9C3, 0xB9C3 }, -{ 0xB9C4, 0xB9C4, 0xB9C4 }, -{ 0xB9C5, 0xB9C5, 0xB9C5 }, -{ 0xB9C6, 0xB9C6, 0xB9C6 }, -{ 0xB9C7, 0xB9C7, 0xB9C7 }, -{ 0xB9C8, 0xB9C8, 0xB9C8 }, -{ 0xB9C9, 0xB9C9, 0xB9C9 }, -{ 0xB9CA, 0xB9CA, 0xB9CA }, -{ 0xB9CB, 0xB9CB, 0xB9CB }, -{ 0xB9CC, 0xB9CC, 0xB9CC }, -{ 0xB9CD, 0xB9CD, 0xB9CD }, -{ 0xB9CE, 0xB9CE, 0xB9CE }, -{ 0xB9CF, 0xB9CF, 0xB9CF }, -{ 0xB9D0, 0xB9D0, 0xB9D0 }, -{ 0xB9D1, 0xB9D1, 0xB9D1 }, -{ 0xB9D2, 0xB9D2, 0xB9D2 }, -{ 0xB9D3, 0xB9D3, 0xB9D3 }, -{ 0xB9D4, 0xB9D4, 0xB9D4 }, -{ 0xB9D5, 0xB9D5, 0xB9D5 }, -{ 0xB9D6, 0xB9D6, 0xB9D6 }, -{ 0xB9D7, 0xB9D7, 0xB9D7 }, -{ 0xB9D8, 0xB9D8, 0xB9D8 }, -{ 0xB9D9, 0xB9D9, 0xB9D9 }, -{ 0xB9DA, 0xB9DA, 0xB9DA }, -{ 0xB9DB, 0xB9DB, 0xB9DB }, -{ 0xB9DC, 0xB9DC, 0xB9DC }, -{ 0xB9DD, 0xB9DD, 0xB9DD }, -{ 0xB9DE, 0xB9DE, 0xB9DE }, -{ 0xB9DF, 0xB9DF, 0xB9DF }, -{ 0xB9E0, 0xB9E0, 0xB9E0 }, -{ 0xB9E1, 0xB9E1, 0xB9E1 }, -{ 0xB9E2, 0xB9E2, 0xB9E2 }, -{ 0xB9E3, 0xB9E3, 0xB9E3 }, -{ 0xB9E4, 0xB9E4, 0xB9E4 }, -{ 0xB9E5, 0xB9E5, 0xB9E5 }, -{ 0xB9E6, 0xB9E6, 0xB9E6 }, -{ 0xB9E7, 0xB9E7, 0xB9E7 }, -{ 0xB9E8, 0xB9E8, 0xB9E8 }, -{ 0xB9E9, 0xB9E9, 0xB9E9 }, -{ 0xB9EA, 0xB9EA, 0xB9EA }, -{ 0xB9EB, 0xB9EB, 0xB9EB }, -{ 0xB9EC, 0xB9EC, 0xB9EC }, -{ 0xB9ED, 0xB9ED, 0xB9ED }, -{ 0xB9EE, 0xB9EE, 0xB9EE }, -{ 0xB9EF, 0xB9EF, 0xB9EF }, -{ 0xB9F0, 0xB9F0, 0xB9F0 }, -{ 0xB9F1, 0xB9F1, 0xB9F1 }, -{ 0xB9F2, 0xB9F2, 0xB9F2 }, -{ 0xB9F3, 0xB9F3, 0xB9F3 }, -{ 0xB9F4, 0xB9F4, 0xB9F4 }, -{ 0xB9F5, 0xB9F5, 0xB9F5 }, -{ 0xB9F6, 0xB9F6, 0xB9F6 }, -{ 0xB9F7, 0xB9F7, 0xB9F7 }, -{ 0xB9F8, 0xB9F8, 0xB9F8 }, -{ 0xB9F9, 0xB9F9, 0xB9F9 }, -{ 0xB9FA, 0xB9FA, 0xB9FA }, -{ 0xB9FB, 0xB9FB, 0xB9FB }, -{ 0xB9FC, 0xB9FC, 0xB9FC }, -{ 0xB9FD, 0xB9FD, 0xB9FD }, -{ 0xB9FE, 0xB9FE, 0xB9FE }, -{ 0xB9FF, 0xB9FF, 0xB9FF }, -{ 0xBA00, 0xBA00, 0xBA00 }, -{ 0xBA01, 0xBA01, 0xBA01 }, -{ 0xBA02, 0xBA02, 0xBA02 }, -{ 0xBA03, 0xBA03, 0xBA03 }, -{ 0xBA04, 0xBA04, 0xBA04 }, -{ 0xBA05, 0xBA05, 0xBA05 }, -{ 0xBA06, 0xBA06, 0xBA06 }, -{ 0xBA07, 0xBA07, 0xBA07 }, -{ 0xBA08, 0xBA08, 0xBA08 }, -{ 0xBA09, 0xBA09, 0xBA09 }, -{ 0xBA0A, 0xBA0A, 0xBA0A }, -{ 0xBA0B, 0xBA0B, 0xBA0B }, -{ 0xBA0C, 0xBA0C, 0xBA0C }, -{ 0xBA0D, 0xBA0D, 0xBA0D }, -{ 0xBA0E, 0xBA0E, 0xBA0E }, -{ 0xBA0F, 0xBA0F, 0xBA0F }, -{ 0xBA10, 0xBA10, 0xBA10 }, -{ 0xBA11, 0xBA11, 0xBA11 }, -{ 0xBA12, 0xBA12, 0xBA12 }, -{ 0xBA13, 0xBA13, 0xBA13 }, -{ 0xBA14, 0xBA14, 0xBA14 }, -{ 0xBA15, 0xBA15, 0xBA15 }, -{ 0xBA16, 0xBA16, 0xBA16 }, -{ 0xBA17, 0xBA17, 0xBA17 }, -{ 0xBA18, 0xBA18, 0xBA18 }, -{ 0xBA19, 0xBA19, 0xBA19 }, -{ 0xBA1A, 0xBA1A, 0xBA1A }, -{ 0xBA1B, 0xBA1B, 0xBA1B }, -{ 0xBA1C, 0xBA1C, 0xBA1C }, -{ 0xBA1D, 0xBA1D, 0xBA1D }, -{ 0xBA1E, 0xBA1E, 0xBA1E }, -{ 0xBA1F, 0xBA1F, 0xBA1F }, -{ 0xBA20, 0xBA20, 0xBA20 }, -{ 0xBA21, 0xBA21, 0xBA21 }, -{ 0xBA22, 0xBA22, 0xBA22 }, -{ 0xBA23, 0xBA23, 0xBA23 }, -{ 0xBA24, 0xBA24, 0xBA24 }, -{ 0xBA25, 0xBA25, 0xBA25 }, -{ 0xBA26, 0xBA26, 0xBA26 }, -{ 0xBA27, 0xBA27, 0xBA27 }, -{ 0xBA28, 0xBA28, 0xBA28 }, -{ 0xBA29, 0xBA29, 0xBA29 }, -{ 0xBA2A, 0xBA2A, 0xBA2A }, -{ 0xBA2B, 0xBA2B, 0xBA2B }, -{ 0xBA2C, 0xBA2C, 0xBA2C }, -{ 0xBA2D, 0xBA2D, 0xBA2D }, -{ 0xBA2E, 0xBA2E, 0xBA2E }, -{ 0xBA2F, 0xBA2F, 0xBA2F }, -{ 0xBA30, 0xBA30, 0xBA30 }, -{ 0xBA31, 0xBA31, 0xBA31 }, -{ 0xBA32, 0xBA32, 0xBA32 }, -{ 0xBA33, 0xBA33, 0xBA33 }, -{ 0xBA34, 0xBA34, 0xBA34 }, -{ 0xBA35, 0xBA35, 0xBA35 }, -{ 0xBA36, 0xBA36, 0xBA36 }, -{ 0xBA37, 0xBA37, 0xBA37 }, -{ 0xBA38, 0xBA38, 0xBA38 }, -{ 0xBA39, 0xBA39, 0xBA39 }, -{ 0xBA3A, 0xBA3A, 0xBA3A }, -{ 0xBA3B, 0xBA3B, 0xBA3B }, -{ 0xBA3C, 0xBA3C, 0xBA3C }, -{ 0xBA3D, 0xBA3D, 0xBA3D }, -{ 0xBA3E, 0xBA3E, 0xBA3E }, -{ 0xBA3F, 0xBA3F, 0xBA3F }, -{ 0xBA40, 0xBA40, 0xBA40 }, -{ 0xBA41, 0xBA41, 0xBA41 }, -{ 0xBA42, 0xBA42, 0xBA42 }, -{ 0xBA43, 0xBA43, 0xBA43 }, -{ 0xBA44, 0xBA44, 0xBA44 }, -{ 0xBA45, 0xBA45, 0xBA45 }, -{ 0xBA46, 0xBA46, 0xBA46 }, -{ 0xBA47, 0xBA47, 0xBA47 }, -{ 0xBA48, 0xBA48, 0xBA48 }, -{ 0xBA49, 0xBA49, 0xBA49 }, -{ 0xBA4A, 0xBA4A, 0xBA4A }, -{ 0xBA4B, 0xBA4B, 0xBA4B }, -{ 0xBA4C, 0xBA4C, 0xBA4C }, -{ 0xBA4D, 0xBA4D, 0xBA4D }, -{ 0xBA4E, 0xBA4E, 0xBA4E }, -{ 0xBA4F, 0xBA4F, 0xBA4F }, -{ 0xBA50, 0xBA50, 0xBA50 }, -{ 0xBA51, 0xBA51, 0xBA51 }, -{ 0xBA52, 0xBA52, 0xBA52 }, -{ 0xBA53, 0xBA53, 0xBA53 }, -{ 0xBA54, 0xBA54, 0xBA54 }, -{ 0xBA55, 0xBA55, 0xBA55 }, -{ 0xBA56, 0xBA56, 0xBA56 }, -{ 0xBA57, 0xBA57, 0xBA57 }, -{ 0xBA58, 0xBA58, 0xBA58 }, -{ 0xBA59, 0xBA59, 0xBA59 }, -{ 0xBA5A, 0xBA5A, 0xBA5A }, -{ 0xBA5B, 0xBA5B, 0xBA5B }, -{ 0xBA5C, 0xBA5C, 0xBA5C }, -{ 0xBA5D, 0xBA5D, 0xBA5D }, -{ 0xBA5E, 0xBA5E, 0xBA5E }, -{ 0xBA5F, 0xBA5F, 0xBA5F }, -{ 0xBA60, 0xBA60, 0xBA60 }, -{ 0xBA61, 0xBA61, 0xBA61 }, -{ 0xBA62, 0xBA62, 0xBA62 }, -{ 0xBA63, 0xBA63, 0xBA63 }, -{ 0xBA64, 0xBA64, 0xBA64 }, -{ 0xBA65, 0xBA65, 0xBA65 }, -{ 0xBA66, 0xBA66, 0xBA66 }, -{ 0xBA67, 0xBA67, 0xBA67 }, -{ 0xBA68, 0xBA68, 0xBA68 }, -{ 0xBA69, 0xBA69, 0xBA69 }, -{ 0xBA6A, 0xBA6A, 0xBA6A }, -{ 0xBA6B, 0xBA6B, 0xBA6B }, -{ 0xBA6C, 0xBA6C, 0xBA6C }, -{ 0xBA6D, 0xBA6D, 0xBA6D }, -{ 0xBA6E, 0xBA6E, 0xBA6E }, -{ 0xBA6F, 0xBA6F, 0xBA6F }, -{ 0xBA70, 0xBA70, 0xBA70 }, -{ 0xBA71, 0xBA71, 0xBA71 }, -{ 0xBA72, 0xBA72, 0xBA72 }, -{ 0xBA73, 0xBA73, 0xBA73 }, -{ 0xBA74, 0xBA74, 0xBA74 }, -{ 0xBA75, 0xBA75, 0xBA75 }, -{ 0xBA76, 0xBA76, 0xBA76 }, -{ 0xBA77, 0xBA77, 0xBA77 }, -{ 0xBA78, 0xBA78, 0xBA78 }, -{ 0xBA79, 0xBA79, 0xBA79 }, -{ 0xBA7A, 0xBA7A, 0xBA7A }, -{ 0xBA7B, 0xBA7B, 0xBA7B }, -{ 0xBA7C, 0xBA7C, 0xBA7C }, -{ 0xBA7D, 0xBA7D, 0xBA7D }, -{ 0xBA7E, 0xBA7E, 0xBA7E }, -{ 0xBA7F, 0xBA7F, 0xBA7F }, -{ 0xBA80, 0xBA80, 0xBA80 }, -{ 0xBA81, 0xBA81, 0xBA81 }, -{ 0xBA82, 0xBA82, 0xBA82 }, -{ 0xBA83, 0xBA83, 0xBA83 }, -{ 0xBA84, 0xBA84, 0xBA84 }, -{ 0xBA85, 0xBA85, 0xBA85 }, -{ 0xBA86, 0xBA86, 0xBA86 }, -{ 0xBA87, 0xBA87, 0xBA87 }, -{ 0xBA88, 0xBA88, 0xBA88 }, -{ 0xBA89, 0xBA89, 0xBA89 }, -{ 0xBA8A, 0xBA8A, 0xBA8A }, -{ 0xBA8B, 0xBA8B, 0xBA8B }, -{ 0xBA8C, 0xBA8C, 0xBA8C }, -{ 0xBA8D, 0xBA8D, 0xBA8D }, -{ 0xBA8E, 0xBA8E, 0xBA8E }, -{ 0xBA8F, 0xBA8F, 0xBA8F }, -{ 0xBA90, 0xBA90, 0xBA90 }, -{ 0xBA91, 0xBA91, 0xBA91 }, -{ 0xBA92, 0xBA92, 0xBA92 }, -{ 0xBA93, 0xBA93, 0xBA93 }, -{ 0xBA94, 0xBA94, 0xBA94 }, -{ 0xBA95, 0xBA95, 0xBA95 }, -{ 0xBA96, 0xBA96, 0xBA96 }, -{ 0xBA97, 0xBA97, 0xBA97 }, -{ 0xBA98, 0xBA98, 0xBA98 }, -{ 0xBA99, 0xBA99, 0xBA99 }, -{ 0xBA9A, 0xBA9A, 0xBA9A }, -{ 0xBA9B, 0xBA9B, 0xBA9B }, -{ 0xBA9C, 0xBA9C, 0xBA9C }, -{ 0xBA9D, 0xBA9D, 0xBA9D }, -{ 0xBA9E, 0xBA9E, 0xBA9E }, -{ 0xBA9F, 0xBA9F, 0xBA9F }, -{ 0xBAA0, 0xBAA0, 0xBAA0 }, -{ 0xBAA1, 0xBAA1, 0xBAA1 }, -{ 0xBAA2, 0xBAA2, 0xBAA2 }, -{ 0xBAA3, 0xBAA3, 0xBAA3 }, -{ 0xBAA4, 0xBAA4, 0xBAA4 }, -{ 0xBAA5, 0xBAA5, 0xBAA5 }, -{ 0xBAA6, 0xBAA6, 0xBAA6 }, -{ 0xBAA7, 0xBAA7, 0xBAA7 }, -{ 0xBAA8, 0xBAA8, 0xBAA8 }, -{ 0xBAA9, 0xBAA9, 0xBAA9 }, -{ 0xBAAA, 0xBAAA, 0xBAAA }, -{ 0xBAAB, 0xBAAB, 0xBAAB }, -{ 0xBAAC, 0xBAAC, 0xBAAC }, -{ 0xBAAD, 0xBAAD, 0xBAAD }, -{ 0xBAAE, 0xBAAE, 0xBAAE }, -{ 0xBAAF, 0xBAAF, 0xBAAF }, -{ 0xBAB0, 0xBAB0, 0xBAB0 }, -{ 0xBAB1, 0xBAB1, 0xBAB1 }, -{ 0xBAB2, 0xBAB2, 0xBAB2 }, -{ 0xBAB3, 0xBAB3, 0xBAB3 }, -{ 0xBAB4, 0xBAB4, 0xBAB4 }, -{ 0xBAB5, 0xBAB5, 0xBAB5 }, -{ 0xBAB6, 0xBAB6, 0xBAB6 }, -{ 0xBAB7, 0xBAB7, 0xBAB7 }, -{ 0xBAB8, 0xBAB8, 0xBAB8 }, -{ 0xBAB9, 0xBAB9, 0xBAB9 }, -{ 0xBABA, 0xBABA, 0xBABA }, -{ 0xBABB, 0xBABB, 0xBABB }, -{ 0xBABC, 0xBABC, 0xBABC }, -{ 0xBABD, 0xBABD, 0xBABD }, -{ 0xBABE, 0xBABE, 0xBABE }, -{ 0xBABF, 0xBABF, 0xBABF }, -{ 0xBAC0, 0xBAC0, 0xBAC0 }, -{ 0xBAC1, 0xBAC1, 0xBAC1 }, -{ 0xBAC2, 0xBAC2, 0xBAC2 }, -{ 0xBAC3, 0xBAC3, 0xBAC3 }, -{ 0xBAC4, 0xBAC4, 0xBAC4 }, -{ 0xBAC5, 0xBAC5, 0xBAC5 }, -{ 0xBAC6, 0xBAC6, 0xBAC6 }, -{ 0xBAC7, 0xBAC7, 0xBAC7 }, -{ 0xBAC8, 0xBAC8, 0xBAC8 }, -{ 0xBAC9, 0xBAC9, 0xBAC9 }, -{ 0xBACA, 0xBACA, 0xBACA }, -{ 0xBACB, 0xBACB, 0xBACB }, -{ 0xBACC, 0xBACC, 0xBACC }, -{ 0xBACD, 0xBACD, 0xBACD }, -{ 0xBACE, 0xBACE, 0xBACE }, -{ 0xBACF, 0xBACF, 0xBACF }, -{ 0xBAD0, 0xBAD0, 0xBAD0 }, -{ 0xBAD1, 0xBAD1, 0xBAD1 }, -{ 0xBAD2, 0xBAD2, 0xBAD2 }, -{ 0xBAD3, 0xBAD3, 0xBAD3 }, -{ 0xBAD4, 0xBAD4, 0xBAD4 }, -{ 0xBAD5, 0xBAD5, 0xBAD5 }, -{ 0xBAD6, 0xBAD6, 0xBAD6 }, -{ 0xBAD7, 0xBAD7, 0xBAD7 }, -{ 0xBAD8, 0xBAD8, 0xBAD8 }, -{ 0xBAD9, 0xBAD9, 0xBAD9 }, -{ 0xBADA, 0xBADA, 0xBADA }, -{ 0xBADB, 0xBADB, 0xBADB }, -{ 0xBADC, 0xBADC, 0xBADC }, -{ 0xBADD, 0xBADD, 0xBADD }, -{ 0xBADE, 0xBADE, 0xBADE }, -{ 0xBADF, 0xBADF, 0xBADF }, -{ 0xBAE0, 0xBAE0, 0xBAE0 }, -{ 0xBAE1, 0xBAE1, 0xBAE1 }, -{ 0xBAE2, 0xBAE2, 0xBAE2 }, -{ 0xBAE3, 0xBAE3, 0xBAE3 }, -{ 0xBAE4, 0xBAE4, 0xBAE4 }, -{ 0xBAE5, 0xBAE5, 0xBAE5 }, -{ 0xBAE6, 0xBAE6, 0xBAE6 }, -{ 0xBAE7, 0xBAE7, 0xBAE7 }, -{ 0xBAE8, 0xBAE8, 0xBAE8 }, -{ 0xBAE9, 0xBAE9, 0xBAE9 }, -{ 0xBAEA, 0xBAEA, 0xBAEA }, -{ 0xBAEB, 0xBAEB, 0xBAEB }, -{ 0xBAEC, 0xBAEC, 0xBAEC }, -{ 0xBAED, 0xBAED, 0xBAED }, -{ 0xBAEE, 0xBAEE, 0xBAEE }, -{ 0xBAEF, 0xBAEF, 0xBAEF }, -{ 0xBAF0, 0xBAF0, 0xBAF0 }, -{ 0xBAF1, 0xBAF1, 0xBAF1 }, -{ 0xBAF2, 0xBAF2, 0xBAF2 }, -{ 0xBAF3, 0xBAF3, 0xBAF3 }, -{ 0xBAF4, 0xBAF4, 0xBAF4 }, -{ 0xBAF5, 0xBAF5, 0xBAF5 }, -{ 0xBAF6, 0xBAF6, 0xBAF6 }, -{ 0xBAF7, 0xBAF7, 0xBAF7 }, -{ 0xBAF8, 0xBAF8, 0xBAF8 }, -{ 0xBAF9, 0xBAF9, 0xBAF9 }, -{ 0xBAFA, 0xBAFA, 0xBAFA }, -{ 0xBAFB, 0xBAFB, 0xBAFB }, -{ 0xBAFC, 0xBAFC, 0xBAFC }, -{ 0xBAFD, 0xBAFD, 0xBAFD }, -{ 0xBAFE, 0xBAFE, 0xBAFE }, -{ 0xBAFF, 0xBAFF, 0xBAFF }, -{ 0xBB00, 0xBB00, 0xBB00 }, -{ 0xBB01, 0xBB01, 0xBB01 }, -{ 0xBB02, 0xBB02, 0xBB02 }, -{ 0xBB03, 0xBB03, 0xBB03 }, -{ 0xBB04, 0xBB04, 0xBB04 }, -{ 0xBB05, 0xBB05, 0xBB05 }, -{ 0xBB06, 0xBB06, 0xBB06 }, -{ 0xBB07, 0xBB07, 0xBB07 }, -{ 0xBB08, 0xBB08, 0xBB08 }, -{ 0xBB09, 0xBB09, 0xBB09 }, -{ 0xBB0A, 0xBB0A, 0xBB0A }, -{ 0xBB0B, 0xBB0B, 0xBB0B }, -{ 0xBB0C, 0xBB0C, 0xBB0C }, -{ 0xBB0D, 0xBB0D, 0xBB0D }, -{ 0xBB0E, 0xBB0E, 0xBB0E }, -{ 0xBB0F, 0xBB0F, 0xBB0F }, -{ 0xBB10, 0xBB10, 0xBB10 }, -{ 0xBB11, 0xBB11, 0xBB11 }, -{ 0xBB12, 0xBB12, 0xBB12 }, -{ 0xBB13, 0xBB13, 0xBB13 }, -{ 0xBB14, 0xBB14, 0xBB14 }, -{ 0xBB15, 0xBB15, 0xBB15 }, -{ 0xBB16, 0xBB16, 0xBB16 }, -{ 0xBB17, 0xBB17, 0xBB17 }, -{ 0xBB18, 0xBB18, 0xBB18 }, -{ 0xBB19, 0xBB19, 0xBB19 }, -{ 0xBB1A, 0xBB1A, 0xBB1A }, -{ 0xBB1B, 0xBB1B, 0xBB1B }, -{ 0xBB1C, 0xBB1C, 0xBB1C }, -{ 0xBB1D, 0xBB1D, 0xBB1D }, -{ 0xBB1E, 0xBB1E, 0xBB1E }, -{ 0xBB1F, 0xBB1F, 0xBB1F }, -{ 0xBB20, 0xBB20, 0xBB20 }, -{ 0xBB21, 0xBB21, 0xBB21 }, -{ 0xBB22, 0xBB22, 0xBB22 }, -{ 0xBB23, 0xBB23, 0xBB23 }, -{ 0xBB24, 0xBB24, 0xBB24 }, -{ 0xBB25, 0xBB25, 0xBB25 }, -{ 0xBB26, 0xBB26, 0xBB26 }, -{ 0xBB27, 0xBB27, 0xBB27 }, -{ 0xBB28, 0xBB28, 0xBB28 }, -{ 0xBB29, 0xBB29, 0xBB29 }, -{ 0xBB2A, 0xBB2A, 0xBB2A }, -{ 0xBB2B, 0xBB2B, 0xBB2B }, -{ 0xBB2C, 0xBB2C, 0xBB2C }, -{ 0xBB2D, 0xBB2D, 0xBB2D }, -{ 0xBB2E, 0xBB2E, 0xBB2E }, -{ 0xBB2F, 0xBB2F, 0xBB2F }, -{ 0xBB30, 0xBB30, 0xBB30 }, -{ 0xBB31, 0xBB31, 0xBB31 }, -{ 0xBB32, 0xBB32, 0xBB32 }, -{ 0xBB33, 0xBB33, 0xBB33 }, -{ 0xBB34, 0xBB34, 0xBB34 }, -{ 0xBB35, 0xBB35, 0xBB35 }, -{ 0xBB36, 0xBB36, 0xBB36 }, -{ 0xBB37, 0xBB37, 0xBB37 }, -{ 0xBB38, 0xBB38, 0xBB38 }, -{ 0xBB39, 0xBB39, 0xBB39 }, -{ 0xBB3A, 0xBB3A, 0xBB3A }, -{ 0xBB3B, 0xBB3B, 0xBB3B }, -{ 0xBB3C, 0xBB3C, 0xBB3C }, -{ 0xBB3D, 0xBB3D, 0xBB3D }, -{ 0xBB3E, 0xBB3E, 0xBB3E }, -{ 0xBB3F, 0xBB3F, 0xBB3F }, -{ 0xBB40, 0xBB40, 0xBB40 }, -{ 0xBB41, 0xBB41, 0xBB41 }, -{ 0xBB42, 0xBB42, 0xBB42 }, -{ 0xBB43, 0xBB43, 0xBB43 }, -{ 0xBB44, 0xBB44, 0xBB44 }, -{ 0xBB45, 0xBB45, 0xBB45 }, -{ 0xBB46, 0xBB46, 0xBB46 }, -{ 0xBB47, 0xBB47, 0xBB47 }, -{ 0xBB48, 0xBB48, 0xBB48 }, -{ 0xBB49, 0xBB49, 0xBB49 }, -{ 0xBB4A, 0xBB4A, 0xBB4A }, -{ 0xBB4B, 0xBB4B, 0xBB4B }, -{ 0xBB4C, 0xBB4C, 0xBB4C }, -{ 0xBB4D, 0xBB4D, 0xBB4D }, -{ 0xBB4E, 0xBB4E, 0xBB4E }, -{ 0xBB4F, 0xBB4F, 0xBB4F }, -{ 0xBB50, 0xBB50, 0xBB50 }, -{ 0xBB51, 0xBB51, 0xBB51 }, -{ 0xBB52, 0xBB52, 0xBB52 }, -{ 0xBB53, 0xBB53, 0xBB53 }, -{ 0xBB54, 0xBB54, 0xBB54 }, -{ 0xBB55, 0xBB55, 0xBB55 }, -{ 0xBB56, 0xBB56, 0xBB56 }, -{ 0xBB57, 0xBB57, 0xBB57 }, -{ 0xBB58, 0xBB58, 0xBB58 }, -{ 0xBB59, 0xBB59, 0xBB59 }, -{ 0xBB5A, 0xBB5A, 0xBB5A }, -{ 0xBB5B, 0xBB5B, 0xBB5B }, -{ 0xBB5C, 0xBB5C, 0xBB5C }, -{ 0xBB5D, 0xBB5D, 0xBB5D }, -{ 0xBB5E, 0xBB5E, 0xBB5E }, -{ 0xBB5F, 0xBB5F, 0xBB5F }, -{ 0xBB60, 0xBB60, 0xBB60 }, -{ 0xBB61, 0xBB61, 0xBB61 }, -{ 0xBB62, 0xBB62, 0xBB62 }, -{ 0xBB63, 0xBB63, 0xBB63 }, -{ 0xBB64, 0xBB64, 0xBB64 }, -{ 0xBB65, 0xBB65, 0xBB65 }, -{ 0xBB66, 0xBB66, 0xBB66 }, -{ 0xBB67, 0xBB67, 0xBB67 }, -{ 0xBB68, 0xBB68, 0xBB68 }, -{ 0xBB69, 0xBB69, 0xBB69 }, -{ 0xBB6A, 0xBB6A, 0xBB6A }, -{ 0xBB6B, 0xBB6B, 0xBB6B }, -{ 0xBB6C, 0xBB6C, 0xBB6C }, -{ 0xBB6D, 0xBB6D, 0xBB6D }, -{ 0xBB6E, 0xBB6E, 0xBB6E }, -{ 0xBB6F, 0xBB6F, 0xBB6F }, -{ 0xBB70, 0xBB70, 0xBB70 }, -{ 0xBB71, 0xBB71, 0xBB71 }, -{ 0xBB72, 0xBB72, 0xBB72 }, -{ 0xBB73, 0xBB73, 0xBB73 }, -{ 0xBB74, 0xBB74, 0xBB74 }, -{ 0xBB75, 0xBB75, 0xBB75 }, -{ 0xBB76, 0xBB76, 0xBB76 }, -{ 0xBB77, 0xBB77, 0xBB77 }, -{ 0xBB78, 0xBB78, 0xBB78 }, -{ 0xBB79, 0xBB79, 0xBB79 }, -{ 0xBB7A, 0xBB7A, 0xBB7A }, -{ 0xBB7B, 0xBB7B, 0xBB7B }, -{ 0xBB7C, 0xBB7C, 0xBB7C }, -{ 0xBB7D, 0xBB7D, 0xBB7D }, -{ 0xBB7E, 0xBB7E, 0xBB7E }, -{ 0xBB7F, 0xBB7F, 0xBB7F }, -{ 0xBB80, 0xBB80, 0xBB80 }, -{ 0xBB81, 0xBB81, 0xBB81 }, -{ 0xBB82, 0xBB82, 0xBB82 }, -{ 0xBB83, 0xBB83, 0xBB83 }, -{ 0xBB84, 0xBB84, 0xBB84 }, -{ 0xBB85, 0xBB85, 0xBB85 }, -{ 0xBB86, 0xBB86, 0xBB86 }, -{ 0xBB87, 0xBB87, 0xBB87 }, -{ 0xBB88, 0xBB88, 0xBB88 }, -{ 0xBB89, 0xBB89, 0xBB89 }, -{ 0xBB8A, 0xBB8A, 0xBB8A }, -{ 0xBB8B, 0xBB8B, 0xBB8B }, -{ 0xBB8C, 0xBB8C, 0xBB8C }, -{ 0xBB8D, 0xBB8D, 0xBB8D }, -{ 0xBB8E, 0xBB8E, 0xBB8E }, -{ 0xBB8F, 0xBB8F, 0xBB8F }, -{ 0xBB90, 0xBB90, 0xBB90 }, -{ 0xBB91, 0xBB91, 0xBB91 }, -{ 0xBB92, 0xBB92, 0xBB92 }, -{ 0xBB93, 0xBB93, 0xBB93 }, -{ 0xBB94, 0xBB94, 0xBB94 }, -{ 0xBB95, 0xBB95, 0xBB95 }, -{ 0xBB96, 0xBB96, 0xBB96 }, -{ 0xBB97, 0xBB97, 0xBB97 }, -{ 0xBB98, 0xBB98, 0xBB98 }, -{ 0xBB99, 0xBB99, 0xBB99 }, -{ 0xBB9A, 0xBB9A, 0xBB9A }, -{ 0xBB9B, 0xBB9B, 0xBB9B }, -{ 0xBB9C, 0xBB9C, 0xBB9C }, -{ 0xBB9D, 0xBB9D, 0xBB9D }, -{ 0xBB9E, 0xBB9E, 0xBB9E }, -{ 0xBB9F, 0xBB9F, 0xBB9F }, -{ 0xBBA0, 0xBBA0, 0xBBA0 }, -{ 0xBBA1, 0xBBA1, 0xBBA1 }, -{ 0xBBA2, 0xBBA2, 0xBBA2 }, -{ 0xBBA3, 0xBBA3, 0xBBA3 }, -{ 0xBBA4, 0xBBA4, 0xBBA4 }, -{ 0xBBA5, 0xBBA5, 0xBBA5 }, -{ 0xBBA6, 0xBBA6, 0xBBA6 }, -{ 0xBBA7, 0xBBA7, 0xBBA7 }, -{ 0xBBA8, 0xBBA8, 0xBBA8 }, -{ 0xBBA9, 0xBBA9, 0xBBA9 }, -{ 0xBBAA, 0xBBAA, 0xBBAA }, -{ 0xBBAB, 0xBBAB, 0xBBAB }, -{ 0xBBAC, 0xBBAC, 0xBBAC }, -{ 0xBBAD, 0xBBAD, 0xBBAD }, -{ 0xBBAE, 0xBBAE, 0xBBAE }, -{ 0xBBAF, 0xBBAF, 0xBBAF }, -{ 0xBBB0, 0xBBB0, 0xBBB0 }, -{ 0xBBB1, 0xBBB1, 0xBBB1 }, -{ 0xBBB2, 0xBBB2, 0xBBB2 }, -{ 0xBBB3, 0xBBB3, 0xBBB3 }, -{ 0xBBB4, 0xBBB4, 0xBBB4 }, -{ 0xBBB5, 0xBBB5, 0xBBB5 }, -{ 0xBBB6, 0xBBB6, 0xBBB6 }, -{ 0xBBB7, 0xBBB7, 0xBBB7 }, -{ 0xBBB8, 0xBBB8, 0xBBB8 }, -{ 0xBBB9, 0xBBB9, 0xBBB9 }, -{ 0xBBBA, 0xBBBA, 0xBBBA }, -{ 0xBBBB, 0xBBBB, 0xBBBB }, -{ 0xBBBC, 0xBBBC, 0xBBBC }, -{ 0xBBBD, 0xBBBD, 0xBBBD }, -{ 0xBBBE, 0xBBBE, 0xBBBE }, -{ 0xBBBF, 0xBBBF, 0xBBBF }, -{ 0xBBC0, 0xBBC0, 0xBBC0 }, -{ 0xBBC1, 0xBBC1, 0xBBC1 }, -{ 0xBBC2, 0xBBC2, 0xBBC2 }, -{ 0xBBC3, 0xBBC3, 0xBBC3 }, -{ 0xBBC4, 0xBBC4, 0xBBC4 }, -{ 0xBBC5, 0xBBC5, 0xBBC5 }, -{ 0xBBC6, 0xBBC6, 0xBBC6 }, -{ 0xBBC7, 0xBBC7, 0xBBC7 }, -{ 0xBBC8, 0xBBC8, 0xBBC8 }, -{ 0xBBC9, 0xBBC9, 0xBBC9 }, -{ 0xBBCA, 0xBBCA, 0xBBCA }, -{ 0xBBCB, 0xBBCB, 0xBBCB }, -{ 0xBBCC, 0xBBCC, 0xBBCC }, -{ 0xBBCD, 0xBBCD, 0xBBCD }, -{ 0xBBCE, 0xBBCE, 0xBBCE }, -{ 0xBBCF, 0xBBCF, 0xBBCF }, -{ 0xBBD0, 0xBBD0, 0xBBD0 }, -{ 0xBBD1, 0xBBD1, 0xBBD1 }, -{ 0xBBD2, 0xBBD2, 0xBBD2 }, -{ 0xBBD3, 0xBBD3, 0xBBD3 }, -{ 0xBBD4, 0xBBD4, 0xBBD4 }, -{ 0xBBD5, 0xBBD5, 0xBBD5 }, -{ 0xBBD6, 0xBBD6, 0xBBD6 }, -{ 0xBBD7, 0xBBD7, 0xBBD7 }, -{ 0xBBD8, 0xBBD8, 0xBBD8 }, -{ 0xBBD9, 0xBBD9, 0xBBD9 }, -{ 0xBBDA, 0xBBDA, 0xBBDA }, -{ 0xBBDB, 0xBBDB, 0xBBDB }, -{ 0xBBDC, 0xBBDC, 0xBBDC }, -{ 0xBBDD, 0xBBDD, 0xBBDD }, -{ 0xBBDE, 0xBBDE, 0xBBDE }, -{ 0xBBDF, 0xBBDF, 0xBBDF }, -{ 0xBBE0, 0xBBE0, 0xBBE0 }, -{ 0xBBE1, 0xBBE1, 0xBBE1 }, -{ 0xBBE2, 0xBBE2, 0xBBE2 }, -{ 0xBBE3, 0xBBE3, 0xBBE3 }, -{ 0xBBE4, 0xBBE4, 0xBBE4 }, -{ 0xBBE5, 0xBBE5, 0xBBE5 }, -{ 0xBBE6, 0xBBE6, 0xBBE6 }, -{ 0xBBE7, 0xBBE7, 0xBBE7 }, -{ 0xBBE8, 0xBBE8, 0xBBE8 }, -{ 0xBBE9, 0xBBE9, 0xBBE9 }, -{ 0xBBEA, 0xBBEA, 0xBBEA }, -{ 0xBBEB, 0xBBEB, 0xBBEB }, -{ 0xBBEC, 0xBBEC, 0xBBEC }, -{ 0xBBED, 0xBBED, 0xBBED }, -{ 0xBBEE, 0xBBEE, 0xBBEE }, -{ 0xBBEF, 0xBBEF, 0xBBEF }, -{ 0xBBF0, 0xBBF0, 0xBBF0 }, -{ 0xBBF1, 0xBBF1, 0xBBF1 }, -{ 0xBBF2, 0xBBF2, 0xBBF2 }, -{ 0xBBF3, 0xBBF3, 0xBBF3 }, -{ 0xBBF4, 0xBBF4, 0xBBF4 }, -{ 0xBBF5, 0xBBF5, 0xBBF5 }, -{ 0xBBF6, 0xBBF6, 0xBBF6 }, -{ 0xBBF7, 0xBBF7, 0xBBF7 }, -{ 0xBBF8, 0xBBF8, 0xBBF8 }, -{ 0xBBF9, 0xBBF9, 0xBBF9 }, -{ 0xBBFA, 0xBBFA, 0xBBFA }, -{ 0xBBFB, 0xBBFB, 0xBBFB }, -{ 0xBBFC, 0xBBFC, 0xBBFC }, -{ 0xBBFD, 0xBBFD, 0xBBFD }, -{ 0xBBFE, 0xBBFE, 0xBBFE }, -{ 0xBBFF, 0xBBFF, 0xBBFF }, -{ 0xBC00, 0xBC00, 0xBC00 }, -{ 0xBC01, 0xBC01, 0xBC01 }, -{ 0xBC02, 0xBC02, 0xBC02 }, -{ 0xBC03, 0xBC03, 0xBC03 }, -{ 0xBC04, 0xBC04, 0xBC04 }, -{ 0xBC05, 0xBC05, 0xBC05 }, -{ 0xBC06, 0xBC06, 0xBC06 }, -{ 0xBC07, 0xBC07, 0xBC07 }, -{ 0xBC08, 0xBC08, 0xBC08 }, -{ 0xBC09, 0xBC09, 0xBC09 }, -{ 0xBC0A, 0xBC0A, 0xBC0A }, -{ 0xBC0B, 0xBC0B, 0xBC0B }, -{ 0xBC0C, 0xBC0C, 0xBC0C }, -{ 0xBC0D, 0xBC0D, 0xBC0D }, -{ 0xBC0E, 0xBC0E, 0xBC0E }, -{ 0xBC0F, 0xBC0F, 0xBC0F }, -{ 0xBC10, 0xBC10, 0xBC10 }, -{ 0xBC11, 0xBC11, 0xBC11 }, -{ 0xBC12, 0xBC12, 0xBC12 }, -{ 0xBC13, 0xBC13, 0xBC13 }, -{ 0xBC14, 0xBC14, 0xBC14 }, -{ 0xBC15, 0xBC15, 0xBC15 }, -{ 0xBC16, 0xBC16, 0xBC16 }, -{ 0xBC17, 0xBC17, 0xBC17 }, -{ 0xBC18, 0xBC18, 0xBC18 }, -{ 0xBC19, 0xBC19, 0xBC19 }, -{ 0xBC1A, 0xBC1A, 0xBC1A }, -{ 0xBC1B, 0xBC1B, 0xBC1B }, -{ 0xBC1C, 0xBC1C, 0xBC1C }, -{ 0xBC1D, 0xBC1D, 0xBC1D }, -{ 0xBC1E, 0xBC1E, 0xBC1E }, -{ 0xBC1F, 0xBC1F, 0xBC1F }, -{ 0xBC20, 0xBC20, 0xBC20 }, -{ 0xBC21, 0xBC21, 0xBC21 }, -{ 0xBC22, 0xBC22, 0xBC22 }, -{ 0xBC23, 0xBC23, 0xBC23 }, -{ 0xBC24, 0xBC24, 0xBC24 }, -{ 0xBC25, 0xBC25, 0xBC25 }, -{ 0xBC26, 0xBC26, 0xBC26 }, -{ 0xBC27, 0xBC27, 0xBC27 }, -{ 0xBC28, 0xBC28, 0xBC28 }, -{ 0xBC29, 0xBC29, 0xBC29 }, -{ 0xBC2A, 0xBC2A, 0xBC2A }, -{ 0xBC2B, 0xBC2B, 0xBC2B }, -{ 0xBC2C, 0xBC2C, 0xBC2C }, -{ 0xBC2D, 0xBC2D, 0xBC2D }, -{ 0xBC2E, 0xBC2E, 0xBC2E }, -{ 0xBC2F, 0xBC2F, 0xBC2F }, -{ 0xBC30, 0xBC30, 0xBC30 }, -{ 0xBC31, 0xBC31, 0xBC31 }, -{ 0xBC32, 0xBC32, 0xBC32 }, -{ 0xBC33, 0xBC33, 0xBC33 }, -{ 0xBC34, 0xBC34, 0xBC34 }, -{ 0xBC35, 0xBC35, 0xBC35 }, -{ 0xBC36, 0xBC36, 0xBC36 }, -{ 0xBC37, 0xBC37, 0xBC37 }, -{ 0xBC38, 0xBC38, 0xBC38 }, -{ 0xBC39, 0xBC39, 0xBC39 }, -{ 0xBC3A, 0xBC3A, 0xBC3A }, -{ 0xBC3B, 0xBC3B, 0xBC3B }, -{ 0xBC3C, 0xBC3C, 0xBC3C }, -{ 0xBC3D, 0xBC3D, 0xBC3D }, -{ 0xBC3E, 0xBC3E, 0xBC3E }, -{ 0xBC3F, 0xBC3F, 0xBC3F }, -{ 0xBC40, 0xBC40, 0xBC40 }, -{ 0xBC41, 0xBC41, 0xBC41 }, -{ 0xBC42, 0xBC42, 0xBC42 }, -{ 0xBC43, 0xBC43, 0xBC43 }, -{ 0xBC44, 0xBC44, 0xBC44 }, -{ 0xBC45, 0xBC45, 0xBC45 }, -{ 0xBC46, 0xBC46, 0xBC46 }, -{ 0xBC47, 0xBC47, 0xBC47 }, -{ 0xBC48, 0xBC48, 0xBC48 }, -{ 0xBC49, 0xBC49, 0xBC49 }, -{ 0xBC4A, 0xBC4A, 0xBC4A }, -{ 0xBC4B, 0xBC4B, 0xBC4B }, -{ 0xBC4C, 0xBC4C, 0xBC4C }, -{ 0xBC4D, 0xBC4D, 0xBC4D }, -{ 0xBC4E, 0xBC4E, 0xBC4E }, -{ 0xBC4F, 0xBC4F, 0xBC4F }, -{ 0xBC50, 0xBC50, 0xBC50 }, -{ 0xBC51, 0xBC51, 0xBC51 }, -{ 0xBC52, 0xBC52, 0xBC52 }, -{ 0xBC53, 0xBC53, 0xBC53 }, -{ 0xBC54, 0xBC54, 0xBC54 }, -{ 0xBC55, 0xBC55, 0xBC55 }, -{ 0xBC56, 0xBC56, 0xBC56 }, -{ 0xBC57, 0xBC57, 0xBC57 }, -{ 0xBC58, 0xBC58, 0xBC58 }, -{ 0xBC59, 0xBC59, 0xBC59 }, -{ 0xBC5A, 0xBC5A, 0xBC5A }, -{ 0xBC5B, 0xBC5B, 0xBC5B }, -{ 0xBC5C, 0xBC5C, 0xBC5C }, -{ 0xBC5D, 0xBC5D, 0xBC5D }, -{ 0xBC5E, 0xBC5E, 0xBC5E }, -{ 0xBC5F, 0xBC5F, 0xBC5F }, -{ 0xBC60, 0xBC60, 0xBC60 }, -{ 0xBC61, 0xBC61, 0xBC61 }, -{ 0xBC62, 0xBC62, 0xBC62 }, -{ 0xBC63, 0xBC63, 0xBC63 }, -{ 0xBC64, 0xBC64, 0xBC64 }, -{ 0xBC65, 0xBC65, 0xBC65 }, -{ 0xBC66, 0xBC66, 0xBC66 }, -{ 0xBC67, 0xBC67, 0xBC67 }, -{ 0xBC68, 0xBC68, 0xBC68 }, -{ 0xBC69, 0xBC69, 0xBC69 }, -{ 0xBC6A, 0xBC6A, 0xBC6A }, -{ 0xBC6B, 0xBC6B, 0xBC6B }, -{ 0xBC6C, 0xBC6C, 0xBC6C }, -{ 0xBC6D, 0xBC6D, 0xBC6D }, -{ 0xBC6E, 0xBC6E, 0xBC6E }, -{ 0xBC6F, 0xBC6F, 0xBC6F }, -{ 0xBC70, 0xBC70, 0xBC70 }, -{ 0xBC71, 0xBC71, 0xBC71 }, -{ 0xBC72, 0xBC72, 0xBC72 }, -{ 0xBC73, 0xBC73, 0xBC73 }, -{ 0xBC74, 0xBC74, 0xBC74 }, -{ 0xBC75, 0xBC75, 0xBC75 }, -{ 0xBC76, 0xBC76, 0xBC76 }, -{ 0xBC77, 0xBC77, 0xBC77 }, -{ 0xBC78, 0xBC78, 0xBC78 }, -{ 0xBC79, 0xBC79, 0xBC79 }, -{ 0xBC7A, 0xBC7A, 0xBC7A }, -{ 0xBC7B, 0xBC7B, 0xBC7B }, -{ 0xBC7C, 0xBC7C, 0xBC7C }, -{ 0xBC7D, 0xBC7D, 0xBC7D }, -{ 0xBC7E, 0xBC7E, 0xBC7E }, -{ 0xBC7F, 0xBC7F, 0xBC7F }, -{ 0xBC80, 0xBC80, 0xBC80 }, -{ 0xBC81, 0xBC81, 0xBC81 }, -{ 0xBC82, 0xBC82, 0xBC82 }, -{ 0xBC83, 0xBC83, 0xBC83 }, -{ 0xBC84, 0xBC84, 0xBC84 }, -{ 0xBC85, 0xBC85, 0xBC85 }, -{ 0xBC86, 0xBC86, 0xBC86 }, -{ 0xBC87, 0xBC87, 0xBC87 }, -{ 0xBC88, 0xBC88, 0xBC88 }, -{ 0xBC89, 0xBC89, 0xBC89 }, -{ 0xBC8A, 0xBC8A, 0xBC8A }, -{ 0xBC8B, 0xBC8B, 0xBC8B }, -{ 0xBC8C, 0xBC8C, 0xBC8C }, -{ 0xBC8D, 0xBC8D, 0xBC8D }, -{ 0xBC8E, 0xBC8E, 0xBC8E }, -{ 0xBC8F, 0xBC8F, 0xBC8F }, -{ 0xBC90, 0xBC90, 0xBC90 }, -{ 0xBC91, 0xBC91, 0xBC91 }, -{ 0xBC92, 0xBC92, 0xBC92 }, -{ 0xBC93, 0xBC93, 0xBC93 }, -{ 0xBC94, 0xBC94, 0xBC94 }, -{ 0xBC95, 0xBC95, 0xBC95 }, -{ 0xBC96, 0xBC96, 0xBC96 }, -{ 0xBC97, 0xBC97, 0xBC97 }, -{ 0xBC98, 0xBC98, 0xBC98 }, -{ 0xBC99, 0xBC99, 0xBC99 }, -{ 0xBC9A, 0xBC9A, 0xBC9A }, -{ 0xBC9B, 0xBC9B, 0xBC9B }, -{ 0xBC9C, 0xBC9C, 0xBC9C }, -{ 0xBC9D, 0xBC9D, 0xBC9D }, -{ 0xBC9E, 0xBC9E, 0xBC9E }, -{ 0xBC9F, 0xBC9F, 0xBC9F }, -{ 0xBCA0, 0xBCA0, 0xBCA0 }, -{ 0xBCA1, 0xBCA1, 0xBCA1 }, -{ 0xBCA2, 0xBCA2, 0xBCA2 }, -{ 0xBCA3, 0xBCA3, 0xBCA3 }, -{ 0xBCA4, 0xBCA4, 0xBCA4 }, -{ 0xBCA5, 0xBCA5, 0xBCA5 }, -{ 0xBCA6, 0xBCA6, 0xBCA6 }, -{ 0xBCA7, 0xBCA7, 0xBCA7 }, -{ 0xBCA8, 0xBCA8, 0xBCA8 }, -{ 0xBCA9, 0xBCA9, 0xBCA9 }, -{ 0xBCAA, 0xBCAA, 0xBCAA }, -{ 0xBCAB, 0xBCAB, 0xBCAB }, -{ 0xBCAC, 0xBCAC, 0xBCAC }, -{ 0xBCAD, 0xBCAD, 0xBCAD }, -{ 0xBCAE, 0xBCAE, 0xBCAE }, -{ 0xBCAF, 0xBCAF, 0xBCAF }, -{ 0xBCB0, 0xBCB0, 0xBCB0 }, -{ 0xBCB1, 0xBCB1, 0xBCB1 }, -{ 0xBCB2, 0xBCB2, 0xBCB2 }, -{ 0xBCB3, 0xBCB3, 0xBCB3 }, -{ 0xBCB4, 0xBCB4, 0xBCB4 }, -{ 0xBCB5, 0xBCB5, 0xBCB5 }, -{ 0xBCB6, 0xBCB6, 0xBCB6 }, -{ 0xBCB7, 0xBCB7, 0xBCB7 }, -{ 0xBCB8, 0xBCB8, 0xBCB8 }, -{ 0xBCB9, 0xBCB9, 0xBCB9 }, -{ 0xBCBA, 0xBCBA, 0xBCBA }, -{ 0xBCBB, 0xBCBB, 0xBCBB }, -{ 0xBCBC, 0xBCBC, 0xBCBC }, -{ 0xBCBD, 0xBCBD, 0xBCBD }, -{ 0xBCBE, 0xBCBE, 0xBCBE }, -{ 0xBCBF, 0xBCBF, 0xBCBF }, -{ 0xBCC0, 0xBCC0, 0xBCC0 }, -{ 0xBCC1, 0xBCC1, 0xBCC1 }, -{ 0xBCC2, 0xBCC2, 0xBCC2 }, -{ 0xBCC3, 0xBCC3, 0xBCC3 }, -{ 0xBCC4, 0xBCC4, 0xBCC4 }, -{ 0xBCC5, 0xBCC5, 0xBCC5 }, -{ 0xBCC6, 0xBCC6, 0xBCC6 }, -{ 0xBCC7, 0xBCC7, 0xBCC7 }, -{ 0xBCC8, 0xBCC8, 0xBCC8 }, -{ 0xBCC9, 0xBCC9, 0xBCC9 }, -{ 0xBCCA, 0xBCCA, 0xBCCA }, -{ 0xBCCB, 0xBCCB, 0xBCCB }, -{ 0xBCCC, 0xBCCC, 0xBCCC }, -{ 0xBCCD, 0xBCCD, 0xBCCD }, -{ 0xBCCE, 0xBCCE, 0xBCCE }, -{ 0xBCCF, 0xBCCF, 0xBCCF }, -{ 0xBCD0, 0xBCD0, 0xBCD0 }, -{ 0xBCD1, 0xBCD1, 0xBCD1 }, -{ 0xBCD2, 0xBCD2, 0xBCD2 }, -{ 0xBCD3, 0xBCD3, 0xBCD3 }, -{ 0xBCD4, 0xBCD4, 0xBCD4 }, -{ 0xBCD5, 0xBCD5, 0xBCD5 }, -{ 0xBCD6, 0xBCD6, 0xBCD6 }, -{ 0xBCD7, 0xBCD7, 0xBCD7 }, -{ 0xBCD8, 0xBCD8, 0xBCD8 }, -{ 0xBCD9, 0xBCD9, 0xBCD9 }, -{ 0xBCDA, 0xBCDA, 0xBCDA }, -{ 0xBCDB, 0xBCDB, 0xBCDB }, -{ 0xBCDC, 0xBCDC, 0xBCDC }, -{ 0xBCDD, 0xBCDD, 0xBCDD }, -{ 0xBCDE, 0xBCDE, 0xBCDE }, -{ 0xBCDF, 0xBCDF, 0xBCDF }, -{ 0xBCE0, 0xBCE0, 0xBCE0 }, -{ 0xBCE1, 0xBCE1, 0xBCE1 }, -{ 0xBCE2, 0xBCE2, 0xBCE2 }, -{ 0xBCE3, 0xBCE3, 0xBCE3 }, -{ 0xBCE4, 0xBCE4, 0xBCE4 }, -{ 0xBCE5, 0xBCE5, 0xBCE5 }, -{ 0xBCE6, 0xBCE6, 0xBCE6 }, -{ 0xBCE7, 0xBCE7, 0xBCE7 }, -{ 0xBCE8, 0xBCE8, 0xBCE8 }, -{ 0xBCE9, 0xBCE9, 0xBCE9 }, -{ 0xBCEA, 0xBCEA, 0xBCEA }, -{ 0xBCEB, 0xBCEB, 0xBCEB }, -{ 0xBCEC, 0xBCEC, 0xBCEC }, -{ 0xBCED, 0xBCED, 0xBCED }, -{ 0xBCEE, 0xBCEE, 0xBCEE }, -{ 0xBCEF, 0xBCEF, 0xBCEF }, -{ 0xBCF0, 0xBCF0, 0xBCF0 }, -{ 0xBCF1, 0xBCF1, 0xBCF1 }, -{ 0xBCF2, 0xBCF2, 0xBCF2 }, -{ 0xBCF3, 0xBCF3, 0xBCF3 }, -{ 0xBCF4, 0xBCF4, 0xBCF4 }, -{ 0xBCF5, 0xBCF5, 0xBCF5 }, -{ 0xBCF6, 0xBCF6, 0xBCF6 }, -{ 0xBCF7, 0xBCF7, 0xBCF7 }, -{ 0xBCF8, 0xBCF8, 0xBCF8 }, -{ 0xBCF9, 0xBCF9, 0xBCF9 }, -{ 0xBCFA, 0xBCFA, 0xBCFA }, -{ 0xBCFB, 0xBCFB, 0xBCFB }, -{ 0xBCFC, 0xBCFC, 0xBCFC }, -{ 0xBCFD, 0xBCFD, 0xBCFD }, -{ 0xBCFE, 0xBCFE, 0xBCFE }, -{ 0xBCFF, 0xBCFF, 0xBCFF }, -{ 0xBD00, 0xBD00, 0xBD00 }, -{ 0xBD01, 0xBD01, 0xBD01 }, -{ 0xBD02, 0xBD02, 0xBD02 }, -{ 0xBD03, 0xBD03, 0xBD03 }, -{ 0xBD04, 0xBD04, 0xBD04 }, -{ 0xBD05, 0xBD05, 0xBD05 }, -{ 0xBD06, 0xBD06, 0xBD06 }, -{ 0xBD07, 0xBD07, 0xBD07 }, -{ 0xBD08, 0xBD08, 0xBD08 }, -{ 0xBD09, 0xBD09, 0xBD09 }, -{ 0xBD0A, 0xBD0A, 0xBD0A }, -{ 0xBD0B, 0xBD0B, 0xBD0B }, -{ 0xBD0C, 0xBD0C, 0xBD0C }, -{ 0xBD0D, 0xBD0D, 0xBD0D }, -{ 0xBD0E, 0xBD0E, 0xBD0E }, -{ 0xBD0F, 0xBD0F, 0xBD0F }, -{ 0xBD10, 0xBD10, 0xBD10 }, -{ 0xBD11, 0xBD11, 0xBD11 }, -{ 0xBD12, 0xBD12, 0xBD12 }, -{ 0xBD13, 0xBD13, 0xBD13 }, -{ 0xBD14, 0xBD14, 0xBD14 }, -{ 0xBD15, 0xBD15, 0xBD15 }, -{ 0xBD16, 0xBD16, 0xBD16 }, -{ 0xBD17, 0xBD17, 0xBD17 }, -{ 0xBD18, 0xBD18, 0xBD18 }, -{ 0xBD19, 0xBD19, 0xBD19 }, -{ 0xBD1A, 0xBD1A, 0xBD1A }, -{ 0xBD1B, 0xBD1B, 0xBD1B }, -{ 0xBD1C, 0xBD1C, 0xBD1C }, -{ 0xBD1D, 0xBD1D, 0xBD1D }, -{ 0xBD1E, 0xBD1E, 0xBD1E }, -{ 0xBD1F, 0xBD1F, 0xBD1F }, -{ 0xBD20, 0xBD20, 0xBD20 }, -{ 0xBD21, 0xBD21, 0xBD21 }, -{ 0xBD22, 0xBD22, 0xBD22 }, -{ 0xBD23, 0xBD23, 0xBD23 }, -{ 0xBD24, 0xBD24, 0xBD24 }, -{ 0xBD25, 0xBD25, 0xBD25 }, -{ 0xBD26, 0xBD26, 0xBD26 }, -{ 0xBD27, 0xBD27, 0xBD27 }, -{ 0xBD28, 0xBD28, 0xBD28 }, -{ 0xBD29, 0xBD29, 0xBD29 }, -{ 0xBD2A, 0xBD2A, 0xBD2A }, -{ 0xBD2B, 0xBD2B, 0xBD2B }, -{ 0xBD2C, 0xBD2C, 0xBD2C }, -{ 0xBD2D, 0xBD2D, 0xBD2D }, -{ 0xBD2E, 0xBD2E, 0xBD2E }, -{ 0xBD2F, 0xBD2F, 0xBD2F }, -{ 0xBD30, 0xBD30, 0xBD30 }, -{ 0xBD31, 0xBD31, 0xBD31 }, -{ 0xBD32, 0xBD32, 0xBD32 }, -{ 0xBD33, 0xBD33, 0xBD33 }, -{ 0xBD34, 0xBD34, 0xBD34 }, -{ 0xBD35, 0xBD35, 0xBD35 }, -{ 0xBD36, 0xBD36, 0xBD36 }, -{ 0xBD37, 0xBD37, 0xBD37 }, -{ 0xBD38, 0xBD38, 0xBD38 }, -{ 0xBD39, 0xBD39, 0xBD39 }, -{ 0xBD3A, 0xBD3A, 0xBD3A }, -{ 0xBD3B, 0xBD3B, 0xBD3B }, -{ 0xBD3C, 0xBD3C, 0xBD3C }, -{ 0xBD3D, 0xBD3D, 0xBD3D }, -{ 0xBD3E, 0xBD3E, 0xBD3E }, -{ 0xBD3F, 0xBD3F, 0xBD3F }, -{ 0xBD40, 0xBD40, 0xBD40 }, -{ 0xBD41, 0xBD41, 0xBD41 }, -{ 0xBD42, 0xBD42, 0xBD42 }, -{ 0xBD43, 0xBD43, 0xBD43 }, -{ 0xBD44, 0xBD44, 0xBD44 }, -{ 0xBD45, 0xBD45, 0xBD45 }, -{ 0xBD46, 0xBD46, 0xBD46 }, -{ 0xBD47, 0xBD47, 0xBD47 }, -{ 0xBD48, 0xBD48, 0xBD48 }, -{ 0xBD49, 0xBD49, 0xBD49 }, -{ 0xBD4A, 0xBD4A, 0xBD4A }, -{ 0xBD4B, 0xBD4B, 0xBD4B }, -{ 0xBD4C, 0xBD4C, 0xBD4C }, -{ 0xBD4D, 0xBD4D, 0xBD4D }, -{ 0xBD4E, 0xBD4E, 0xBD4E }, -{ 0xBD4F, 0xBD4F, 0xBD4F }, -{ 0xBD50, 0xBD50, 0xBD50 }, -{ 0xBD51, 0xBD51, 0xBD51 }, -{ 0xBD52, 0xBD52, 0xBD52 }, -{ 0xBD53, 0xBD53, 0xBD53 }, -{ 0xBD54, 0xBD54, 0xBD54 }, -{ 0xBD55, 0xBD55, 0xBD55 }, -{ 0xBD56, 0xBD56, 0xBD56 }, -{ 0xBD57, 0xBD57, 0xBD57 }, -{ 0xBD58, 0xBD58, 0xBD58 }, -{ 0xBD59, 0xBD59, 0xBD59 }, -{ 0xBD5A, 0xBD5A, 0xBD5A }, -{ 0xBD5B, 0xBD5B, 0xBD5B }, -{ 0xBD5C, 0xBD5C, 0xBD5C }, -{ 0xBD5D, 0xBD5D, 0xBD5D }, -{ 0xBD5E, 0xBD5E, 0xBD5E }, -{ 0xBD5F, 0xBD5F, 0xBD5F }, -{ 0xBD60, 0xBD60, 0xBD60 }, -{ 0xBD61, 0xBD61, 0xBD61 }, -{ 0xBD62, 0xBD62, 0xBD62 }, -{ 0xBD63, 0xBD63, 0xBD63 }, -{ 0xBD64, 0xBD64, 0xBD64 }, -{ 0xBD65, 0xBD65, 0xBD65 }, -{ 0xBD66, 0xBD66, 0xBD66 }, -{ 0xBD67, 0xBD67, 0xBD67 }, -{ 0xBD68, 0xBD68, 0xBD68 }, -{ 0xBD69, 0xBD69, 0xBD69 }, -{ 0xBD6A, 0xBD6A, 0xBD6A }, -{ 0xBD6B, 0xBD6B, 0xBD6B }, -{ 0xBD6C, 0xBD6C, 0xBD6C }, -{ 0xBD6D, 0xBD6D, 0xBD6D }, -{ 0xBD6E, 0xBD6E, 0xBD6E }, -{ 0xBD6F, 0xBD6F, 0xBD6F }, -{ 0xBD70, 0xBD70, 0xBD70 }, -{ 0xBD71, 0xBD71, 0xBD71 }, -{ 0xBD72, 0xBD72, 0xBD72 }, -{ 0xBD73, 0xBD73, 0xBD73 }, -{ 0xBD74, 0xBD74, 0xBD74 }, -{ 0xBD75, 0xBD75, 0xBD75 }, -{ 0xBD76, 0xBD76, 0xBD76 }, -{ 0xBD77, 0xBD77, 0xBD77 }, -{ 0xBD78, 0xBD78, 0xBD78 }, -{ 0xBD79, 0xBD79, 0xBD79 }, -{ 0xBD7A, 0xBD7A, 0xBD7A }, -{ 0xBD7B, 0xBD7B, 0xBD7B }, -{ 0xBD7C, 0xBD7C, 0xBD7C }, -{ 0xBD7D, 0xBD7D, 0xBD7D }, -{ 0xBD7E, 0xBD7E, 0xBD7E }, -{ 0xBD7F, 0xBD7F, 0xBD7F }, -{ 0xBD80, 0xBD80, 0xBD80 }, -{ 0xBD81, 0xBD81, 0xBD81 }, -{ 0xBD82, 0xBD82, 0xBD82 }, -{ 0xBD83, 0xBD83, 0xBD83 }, -{ 0xBD84, 0xBD84, 0xBD84 }, -{ 0xBD85, 0xBD85, 0xBD85 }, -{ 0xBD86, 0xBD86, 0xBD86 }, -{ 0xBD87, 0xBD87, 0xBD87 }, -{ 0xBD88, 0xBD88, 0xBD88 }, -{ 0xBD89, 0xBD89, 0xBD89 }, -{ 0xBD8A, 0xBD8A, 0xBD8A }, -{ 0xBD8B, 0xBD8B, 0xBD8B }, -{ 0xBD8C, 0xBD8C, 0xBD8C }, -{ 0xBD8D, 0xBD8D, 0xBD8D }, -{ 0xBD8E, 0xBD8E, 0xBD8E }, -{ 0xBD8F, 0xBD8F, 0xBD8F }, -{ 0xBD90, 0xBD90, 0xBD90 }, -{ 0xBD91, 0xBD91, 0xBD91 }, -{ 0xBD92, 0xBD92, 0xBD92 }, -{ 0xBD93, 0xBD93, 0xBD93 }, -{ 0xBD94, 0xBD94, 0xBD94 }, -{ 0xBD95, 0xBD95, 0xBD95 }, -{ 0xBD96, 0xBD96, 0xBD96 }, -{ 0xBD97, 0xBD97, 0xBD97 }, -{ 0xBD98, 0xBD98, 0xBD98 }, -{ 0xBD99, 0xBD99, 0xBD99 }, -{ 0xBD9A, 0xBD9A, 0xBD9A }, -{ 0xBD9B, 0xBD9B, 0xBD9B }, -{ 0xBD9C, 0xBD9C, 0xBD9C }, -{ 0xBD9D, 0xBD9D, 0xBD9D }, -{ 0xBD9E, 0xBD9E, 0xBD9E }, -{ 0xBD9F, 0xBD9F, 0xBD9F }, -{ 0xBDA0, 0xBDA0, 0xBDA0 }, -{ 0xBDA1, 0xBDA1, 0xBDA1 }, -{ 0xBDA2, 0xBDA2, 0xBDA2 }, -{ 0xBDA3, 0xBDA3, 0xBDA3 }, -{ 0xBDA4, 0xBDA4, 0xBDA4 }, -{ 0xBDA5, 0xBDA5, 0xBDA5 }, -{ 0xBDA6, 0xBDA6, 0xBDA6 }, -{ 0xBDA7, 0xBDA7, 0xBDA7 }, -{ 0xBDA8, 0xBDA8, 0xBDA8 }, -{ 0xBDA9, 0xBDA9, 0xBDA9 }, -{ 0xBDAA, 0xBDAA, 0xBDAA }, -{ 0xBDAB, 0xBDAB, 0xBDAB }, -{ 0xBDAC, 0xBDAC, 0xBDAC }, -{ 0xBDAD, 0xBDAD, 0xBDAD }, -{ 0xBDAE, 0xBDAE, 0xBDAE }, -{ 0xBDAF, 0xBDAF, 0xBDAF }, -{ 0xBDB0, 0xBDB0, 0xBDB0 }, -{ 0xBDB1, 0xBDB1, 0xBDB1 }, -{ 0xBDB2, 0xBDB2, 0xBDB2 }, -{ 0xBDB3, 0xBDB3, 0xBDB3 }, -{ 0xBDB4, 0xBDB4, 0xBDB4 }, -{ 0xBDB5, 0xBDB5, 0xBDB5 }, -{ 0xBDB6, 0xBDB6, 0xBDB6 }, -{ 0xBDB7, 0xBDB7, 0xBDB7 }, -{ 0xBDB8, 0xBDB8, 0xBDB8 }, -{ 0xBDB9, 0xBDB9, 0xBDB9 }, -{ 0xBDBA, 0xBDBA, 0xBDBA }, -{ 0xBDBB, 0xBDBB, 0xBDBB }, -{ 0xBDBC, 0xBDBC, 0xBDBC }, -{ 0xBDBD, 0xBDBD, 0xBDBD }, -{ 0xBDBE, 0xBDBE, 0xBDBE }, -{ 0xBDBF, 0xBDBF, 0xBDBF }, -{ 0xBDC0, 0xBDC0, 0xBDC0 }, -{ 0xBDC1, 0xBDC1, 0xBDC1 }, -{ 0xBDC2, 0xBDC2, 0xBDC2 }, -{ 0xBDC3, 0xBDC3, 0xBDC3 }, -{ 0xBDC4, 0xBDC4, 0xBDC4 }, -{ 0xBDC5, 0xBDC5, 0xBDC5 }, -{ 0xBDC6, 0xBDC6, 0xBDC6 }, -{ 0xBDC7, 0xBDC7, 0xBDC7 }, -{ 0xBDC8, 0xBDC8, 0xBDC8 }, -{ 0xBDC9, 0xBDC9, 0xBDC9 }, -{ 0xBDCA, 0xBDCA, 0xBDCA }, -{ 0xBDCB, 0xBDCB, 0xBDCB }, -{ 0xBDCC, 0xBDCC, 0xBDCC }, -{ 0xBDCD, 0xBDCD, 0xBDCD }, -{ 0xBDCE, 0xBDCE, 0xBDCE }, -{ 0xBDCF, 0xBDCF, 0xBDCF }, -{ 0xBDD0, 0xBDD0, 0xBDD0 }, -{ 0xBDD1, 0xBDD1, 0xBDD1 }, -{ 0xBDD2, 0xBDD2, 0xBDD2 }, -{ 0xBDD3, 0xBDD3, 0xBDD3 }, -{ 0xBDD4, 0xBDD4, 0xBDD4 }, -{ 0xBDD5, 0xBDD5, 0xBDD5 }, -{ 0xBDD6, 0xBDD6, 0xBDD6 }, -{ 0xBDD7, 0xBDD7, 0xBDD7 }, -{ 0xBDD8, 0xBDD8, 0xBDD8 }, -{ 0xBDD9, 0xBDD9, 0xBDD9 }, -{ 0xBDDA, 0xBDDA, 0xBDDA }, -{ 0xBDDB, 0xBDDB, 0xBDDB }, -{ 0xBDDC, 0xBDDC, 0xBDDC }, -{ 0xBDDD, 0xBDDD, 0xBDDD }, -{ 0xBDDE, 0xBDDE, 0xBDDE }, -{ 0xBDDF, 0xBDDF, 0xBDDF }, -{ 0xBDE0, 0xBDE0, 0xBDE0 }, -{ 0xBDE1, 0xBDE1, 0xBDE1 }, -{ 0xBDE2, 0xBDE2, 0xBDE2 }, -{ 0xBDE3, 0xBDE3, 0xBDE3 }, -{ 0xBDE4, 0xBDE4, 0xBDE4 }, -{ 0xBDE5, 0xBDE5, 0xBDE5 }, -{ 0xBDE6, 0xBDE6, 0xBDE6 }, -{ 0xBDE7, 0xBDE7, 0xBDE7 }, -{ 0xBDE8, 0xBDE8, 0xBDE8 }, -{ 0xBDE9, 0xBDE9, 0xBDE9 }, -{ 0xBDEA, 0xBDEA, 0xBDEA }, -{ 0xBDEB, 0xBDEB, 0xBDEB }, -{ 0xBDEC, 0xBDEC, 0xBDEC }, -{ 0xBDED, 0xBDED, 0xBDED }, -{ 0xBDEE, 0xBDEE, 0xBDEE }, -{ 0xBDEF, 0xBDEF, 0xBDEF }, -{ 0xBDF0, 0xBDF0, 0xBDF0 }, -{ 0xBDF1, 0xBDF1, 0xBDF1 }, -{ 0xBDF2, 0xBDF2, 0xBDF2 }, -{ 0xBDF3, 0xBDF3, 0xBDF3 }, -{ 0xBDF4, 0xBDF4, 0xBDF4 }, -{ 0xBDF5, 0xBDF5, 0xBDF5 }, -{ 0xBDF6, 0xBDF6, 0xBDF6 }, -{ 0xBDF7, 0xBDF7, 0xBDF7 }, -{ 0xBDF8, 0xBDF8, 0xBDF8 }, -{ 0xBDF9, 0xBDF9, 0xBDF9 }, -{ 0xBDFA, 0xBDFA, 0xBDFA }, -{ 0xBDFB, 0xBDFB, 0xBDFB }, -{ 0xBDFC, 0xBDFC, 0xBDFC }, -{ 0xBDFD, 0xBDFD, 0xBDFD }, -{ 0xBDFE, 0xBDFE, 0xBDFE }, -{ 0xBDFF, 0xBDFF, 0xBDFF }, -{ 0xBE00, 0xBE00, 0xBE00 }, -{ 0xBE01, 0xBE01, 0xBE01 }, -{ 0xBE02, 0xBE02, 0xBE02 }, -{ 0xBE03, 0xBE03, 0xBE03 }, -{ 0xBE04, 0xBE04, 0xBE04 }, -{ 0xBE05, 0xBE05, 0xBE05 }, -{ 0xBE06, 0xBE06, 0xBE06 }, -{ 0xBE07, 0xBE07, 0xBE07 }, -{ 0xBE08, 0xBE08, 0xBE08 }, -{ 0xBE09, 0xBE09, 0xBE09 }, -{ 0xBE0A, 0xBE0A, 0xBE0A }, -{ 0xBE0B, 0xBE0B, 0xBE0B }, -{ 0xBE0C, 0xBE0C, 0xBE0C }, -{ 0xBE0D, 0xBE0D, 0xBE0D }, -{ 0xBE0E, 0xBE0E, 0xBE0E }, -{ 0xBE0F, 0xBE0F, 0xBE0F }, -{ 0xBE10, 0xBE10, 0xBE10 }, -{ 0xBE11, 0xBE11, 0xBE11 }, -{ 0xBE12, 0xBE12, 0xBE12 }, -{ 0xBE13, 0xBE13, 0xBE13 }, -{ 0xBE14, 0xBE14, 0xBE14 }, -{ 0xBE15, 0xBE15, 0xBE15 }, -{ 0xBE16, 0xBE16, 0xBE16 }, -{ 0xBE17, 0xBE17, 0xBE17 }, -{ 0xBE18, 0xBE18, 0xBE18 }, -{ 0xBE19, 0xBE19, 0xBE19 }, -{ 0xBE1A, 0xBE1A, 0xBE1A }, -{ 0xBE1B, 0xBE1B, 0xBE1B }, -{ 0xBE1C, 0xBE1C, 0xBE1C }, -{ 0xBE1D, 0xBE1D, 0xBE1D }, -{ 0xBE1E, 0xBE1E, 0xBE1E }, -{ 0xBE1F, 0xBE1F, 0xBE1F }, -{ 0xBE20, 0xBE20, 0xBE20 }, -{ 0xBE21, 0xBE21, 0xBE21 }, -{ 0xBE22, 0xBE22, 0xBE22 }, -{ 0xBE23, 0xBE23, 0xBE23 }, -{ 0xBE24, 0xBE24, 0xBE24 }, -{ 0xBE25, 0xBE25, 0xBE25 }, -{ 0xBE26, 0xBE26, 0xBE26 }, -{ 0xBE27, 0xBE27, 0xBE27 }, -{ 0xBE28, 0xBE28, 0xBE28 }, -{ 0xBE29, 0xBE29, 0xBE29 }, -{ 0xBE2A, 0xBE2A, 0xBE2A }, -{ 0xBE2B, 0xBE2B, 0xBE2B }, -{ 0xBE2C, 0xBE2C, 0xBE2C }, -{ 0xBE2D, 0xBE2D, 0xBE2D }, -{ 0xBE2E, 0xBE2E, 0xBE2E }, -{ 0xBE2F, 0xBE2F, 0xBE2F }, -{ 0xBE30, 0xBE30, 0xBE30 }, -{ 0xBE31, 0xBE31, 0xBE31 }, -{ 0xBE32, 0xBE32, 0xBE32 }, -{ 0xBE33, 0xBE33, 0xBE33 }, -{ 0xBE34, 0xBE34, 0xBE34 }, -{ 0xBE35, 0xBE35, 0xBE35 }, -{ 0xBE36, 0xBE36, 0xBE36 }, -{ 0xBE37, 0xBE37, 0xBE37 }, -{ 0xBE38, 0xBE38, 0xBE38 }, -{ 0xBE39, 0xBE39, 0xBE39 }, -{ 0xBE3A, 0xBE3A, 0xBE3A }, -{ 0xBE3B, 0xBE3B, 0xBE3B }, -{ 0xBE3C, 0xBE3C, 0xBE3C }, -{ 0xBE3D, 0xBE3D, 0xBE3D }, -{ 0xBE3E, 0xBE3E, 0xBE3E }, -{ 0xBE3F, 0xBE3F, 0xBE3F }, -{ 0xBE40, 0xBE40, 0xBE40 }, -{ 0xBE41, 0xBE41, 0xBE41 }, -{ 0xBE42, 0xBE42, 0xBE42 }, -{ 0xBE43, 0xBE43, 0xBE43 }, -{ 0xBE44, 0xBE44, 0xBE44 }, -{ 0xBE45, 0xBE45, 0xBE45 }, -{ 0xBE46, 0xBE46, 0xBE46 }, -{ 0xBE47, 0xBE47, 0xBE47 }, -{ 0xBE48, 0xBE48, 0xBE48 }, -{ 0xBE49, 0xBE49, 0xBE49 }, -{ 0xBE4A, 0xBE4A, 0xBE4A }, -{ 0xBE4B, 0xBE4B, 0xBE4B }, -{ 0xBE4C, 0xBE4C, 0xBE4C }, -{ 0xBE4D, 0xBE4D, 0xBE4D }, -{ 0xBE4E, 0xBE4E, 0xBE4E }, -{ 0xBE4F, 0xBE4F, 0xBE4F }, -{ 0xBE50, 0xBE50, 0xBE50 }, -{ 0xBE51, 0xBE51, 0xBE51 }, -{ 0xBE52, 0xBE52, 0xBE52 }, -{ 0xBE53, 0xBE53, 0xBE53 }, -{ 0xBE54, 0xBE54, 0xBE54 }, -{ 0xBE55, 0xBE55, 0xBE55 }, -{ 0xBE56, 0xBE56, 0xBE56 }, -{ 0xBE57, 0xBE57, 0xBE57 }, -{ 0xBE58, 0xBE58, 0xBE58 }, -{ 0xBE59, 0xBE59, 0xBE59 }, -{ 0xBE5A, 0xBE5A, 0xBE5A }, -{ 0xBE5B, 0xBE5B, 0xBE5B }, -{ 0xBE5C, 0xBE5C, 0xBE5C }, -{ 0xBE5D, 0xBE5D, 0xBE5D }, -{ 0xBE5E, 0xBE5E, 0xBE5E }, -{ 0xBE5F, 0xBE5F, 0xBE5F }, -{ 0xBE60, 0xBE60, 0xBE60 }, -{ 0xBE61, 0xBE61, 0xBE61 }, -{ 0xBE62, 0xBE62, 0xBE62 }, -{ 0xBE63, 0xBE63, 0xBE63 }, -{ 0xBE64, 0xBE64, 0xBE64 }, -{ 0xBE65, 0xBE65, 0xBE65 }, -{ 0xBE66, 0xBE66, 0xBE66 }, -{ 0xBE67, 0xBE67, 0xBE67 }, -{ 0xBE68, 0xBE68, 0xBE68 }, -{ 0xBE69, 0xBE69, 0xBE69 }, -{ 0xBE6A, 0xBE6A, 0xBE6A }, -{ 0xBE6B, 0xBE6B, 0xBE6B }, -{ 0xBE6C, 0xBE6C, 0xBE6C }, -{ 0xBE6D, 0xBE6D, 0xBE6D }, -{ 0xBE6E, 0xBE6E, 0xBE6E }, -{ 0xBE6F, 0xBE6F, 0xBE6F }, -{ 0xBE70, 0xBE70, 0xBE70 }, -{ 0xBE71, 0xBE71, 0xBE71 }, -{ 0xBE72, 0xBE72, 0xBE72 }, -{ 0xBE73, 0xBE73, 0xBE73 }, -{ 0xBE74, 0xBE74, 0xBE74 }, -{ 0xBE75, 0xBE75, 0xBE75 }, -{ 0xBE76, 0xBE76, 0xBE76 }, -{ 0xBE77, 0xBE77, 0xBE77 }, -{ 0xBE78, 0xBE78, 0xBE78 }, -{ 0xBE79, 0xBE79, 0xBE79 }, -{ 0xBE7A, 0xBE7A, 0xBE7A }, -{ 0xBE7B, 0xBE7B, 0xBE7B }, -{ 0xBE7C, 0xBE7C, 0xBE7C }, -{ 0xBE7D, 0xBE7D, 0xBE7D }, -{ 0xBE7E, 0xBE7E, 0xBE7E }, -{ 0xBE7F, 0xBE7F, 0xBE7F }, -{ 0xBE80, 0xBE80, 0xBE80 }, -{ 0xBE81, 0xBE81, 0xBE81 }, -{ 0xBE82, 0xBE82, 0xBE82 }, -{ 0xBE83, 0xBE83, 0xBE83 }, -{ 0xBE84, 0xBE84, 0xBE84 }, -{ 0xBE85, 0xBE85, 0xBE85 }, -{ 0xBE86, 0xBE86, 0xBE86 }, -{ 0xBE87, 0xBE87, 0xBE87 }, -{ 0xBE88, 0xBE88, 0xBE88 }, -{ 0xBE89, 0xBE89, 0xBE89 }, -{ 0xBE8A, 0xBE8A, 0xBE8A }, -{ 0xBE8B, 0xBE8B, 0xBE8B }, -{ 0xBE8C, 0xBE8C, 0xBE8C }, -{ 0xBE8D, 0xBE8D, 0xBE8D }, -{ 0xBE8E, 0xBE8E, 0xBE8E }, -{ 0xBE8F, 0xBE8F, 0xBE8F }, -{ 0xBE90, 0xBE90, 0xBE90 }, -{ 0xBE91, 0xBE91, 0xBE91 }, -{ 0xBE92, 0xBE92, 0xBE92 }, -{ 0xBE93, 0xBE93, 0xBE93 }, -{ 0xBE94, 0xBE94, 0xBE94 }, -{ 0xBE95, 0xBE95, 0xBE95 }, -{ 0xBE96, 0xBE96, 0xBE96 }, -{ 0xBE97, 0xBE97, 0xBE97 }, -{ 0xBE98, 0xBE98, 0xBE98 }, -{ 0xBE99, 0xBE99, 0xBE99 }, -{ 0xBE9A, 0xBE9A, 0xBE9A }, -{ 0xBE9B, 0xBE9B, 0xBE9B }, -{ 0xBE9C, 0xBE9C, 0xBE9C }, -{ 0xBE9D, 0xBE9D, 0xBE9D }, -{ 0xBE9E, 0xBE9E, 0xBE9E }, -{ 0xBE9F, 0xBE9F, 0xBE9F }, -{ 0xBEA0, 0xBEA0, 0xBEA0 }, -{ 0xBEA1, 0xBEA1, 0xBEA1 }, -{ 0xBEA2, 0xBEA2, 0xBEA2 }, -{ 0xBEA3, 0xBEA3, 0xBEA3 }, -{ 0xBEA4, 0xBEA4, 0xBEA4 }, -{ 0xBEA5, 0xBEA5, 0xBEA5 }, -{ 0xBEA6, 0xBEA6, 0xBEA6 }, -{ 0xBEA7, 0xBEA7, 0xBEA7 }, -{ 0xBEA8, 0xBEA8, 0xBEA8 }, -{ 0xBEA9, 0xBEA9, 0xBEA9 }, -{ 0xBEAA, 0xBEAA, 0xBEAA }, -{ 0xBEAB, 0xBEAB, 0xBEAB }, -{ 0xBEAC, 0xBEAC, 0xBEAC }, -{ 0xBEAD, 0xBEAD, 0xBEAD }, -{ 0xBEAE, 0xBEAE, 0xBEAE }, -{ 0xBEAF, 0xBEAF, 0xBEAF }, -{ 0xBEB0, 0xBEB0, 0xBEB0 }, -{ 0xBEB1, 0xBEB1, 0xBEB1 }, -{ 0xBEB2, 0xBEB2, 0xBEB2 }, -{ 0xBEB3, 0xBEB3, 0xBEB3 }, -{ 0xBEB4, 0xBEB4, 0xBEB4 }, -{ 0xBEB5, 0xBEB5, 0xBEB5 }, -{ 0xBEB6, 0xBEB6, 0xBEB6 }, -{ 0xBEB7, 0xBEB7, 0xBEB7 }, -{ 0xBEB8, 0xBEB8, 0xBEB8 }, -{ 0xBEB9, 0xBEB9, 0xBEB9 }, -{ 0xBEBA, 0xBEBA, 0xBEBA }, -{ 0xBEBB, 0xBEBB, 0xBEBB }, -{ 0xBEBC, 0xBEBC, 0xBEBC }, -{ 0xBEBD, 0xBEBD, 0xBEBD }, -{ 0xBEBE, 0xBEBE, 0xBEBE }, -{ 0xBEBF, 0xBEBF, 0xBEBF }, -{ 0xBEC0, 0xBEC0, 0xBEC0 }, -{ 0xBEC1, 0xBEC1, 0xBEC1 }, -{ 0xBEC2, 0xBEC2, 0xBEC2 }, -{ 0xBEC3, 0xBEC3, 0xBEC3 }, -{ 0xBEC4, 0xBEC4, 0xBEC4 }, -{ 0xBEC5, 0xBEC5, 0xBEC5 }, -{ 0xBEC6, 0xBEC6, 0xBEC6 }, -{ 0xBEC7, 0xBEC7, 0xBEC7 }, -{ 0xBEC8, 0xBEC8, 0xBEC8 }, -{ 0xBEC9, 0xBEC9, 0xBEC9 }, -{ 0xBECA, 0xBECA, 0xBECA }, -{ 0xBECB, 0xBECB, 0xBECB }, -{ 0xBECC, 0xBECC, 0xBECC }, -{ 0xBECD, 0xBECD, 0xBECD }, -{ 0xBECE, 0xBECE, 0xBECE }, -{ 0xBECF, 0xBECF, 0xBECF }, -{ 0xBED0, 0xBED0, 0xBED0 }, -{ 0xBED1, 0xBED1, 0xBED1 }, -{ 0xBED2, 0xBED2, 0xBED2 }, -{ 0xBED3, 0xBED3, 0xBED3 }, -{ 0xBED4, 0xBED4, 0xBED4 }, -{ 0xBED5, 0xBED5, 0xBED5 }, -{ 0xBED6, 0xBED6, 0xBED6 }, -{ 0xBED7, 0xBED7, 0xBED7 }, -{ 0xBED8, 0xBED8, 0xBED8 }, -{ 0xBED9, 0xBED9, 0xBED9 }, -{ 0xBEDA, 0xBEDA, 0xBEDA }, -{ 0xBEDB, 0xBEDB, 0xBEDB }, -{ 0xBEDC, 0xBEDC, 0xBEDC }, -{ 0xBEDD, 0xBEDD, 0xBEDD }, -{ 0xBEDE, 0xBEDE, 0xBEDE }, -{ 0xBEDF, 0xBEDF, 0xBEDF }, -{ 0xBEE0, 0xBEE0, 0xBEE0 }, -{ 0xBEE1, 0xBEE1, 0xBEE1 }, -{ 0xBEE2, 0xBEE2, 0xBEE2 }, -{ 0xBEE3, 0xBEE3, 0xBEE3 }, -{ 0xBEE4, 0xBEE4, 0xBEE4 }, -{ 0xBEE5, 0xBEE5, 0xBEE5 }, -{ 0xBEE6, 0xBEE6, 0xBEE6 }, -{ 0xBEE7, 0xBEE7, 0xBEE7 }, -{ 0xBEE8, 0xBEE8, 0xBEE8 }, -{ 0xBEE9, 0xBEE9, 0xBEE9 }, -{ 0xBEEA, 0xBEEA, 0xBEEA }, -{ 0xBEEB, 0xBEEB, 0xBEEB }, -{ 0xBEEC, 0xBEEC, 0xBEEC }, -{ 0xBEED, 0xBEED, 0xBEED }, -{ 0xBEEE, 0xBEEE, 0xBEEE }, -{ 0xBEEF, 0xBEEF, 0xBEEF }, -{ 0xBEF0, 0xBEF0, 0xBEF0 }, -{ 0xBEF1, 0xBEF1, 0xBEF1 }, -{ 0xBEF2, 0xBEF2, 0xBEF2 }, -{ 0xBEF3, 0xBEF3, 0xBEF3 }, -{ 0xBEF4, 0xBEF4, 0xBEF4 }, -{ 0xBEF5, 0xBEF5, 0xBEF5 }, -{ 0xBEF6, 0xBEF6, 0xBEF6 }, -{ 0xBEF7, 0xBEF7, 0xBEF7 }, -{ 0xBEF8, 0xBEF8, 0xBEF8 }, -{ 0xBEF9, 0xBEF9, 0xBEF9 }, -{ 0xBEFA, 0xBEFA, 0xBEFA }, -{ 0xBEFB, 0xBEFB, 0xBEFB }, -{ 0xBEFC, 0xBEFC, 0xBEFC }, -{ 0xBEFD, 0xBEFD, 0xBEFD }, -{ 0xBEFE, 0xBEFE, 0xBEFE }, -{ 0xBEFF, 0xBEFF, 0xBEFF }, -{ 0xBF00, 0xBF00, 0xBF00 }, -{ 0xBF01, 0xBF01, 0xBF01 }, -{ 0xBF02, 0xBF02, 0xBF02 }, -{ 0xBF03, 0xBF03, 0xBF03 }, -{ 0xBF04, 0xBF04, 0xBF04 }, -{ 0xBF05, 0xBF05, 0xBF05 }, -{ 0xBF06, 0xBF06, 0xBF06 }, -{ 0xBF07, 0xBF07, 0xBF07 }, -{ 0xBF08, 0xBF08, 0xBF08 }, -{ 0xBF09, 0xBF09, 0xBF09 }, -{ 0xBF0A, 0xBF0A, 0xBF0A }, -{ 0xBF0B, 0xBF0B, 0xBF0B }, -{ 0xBF0C, 0xBF0C, 0xBF0C }, -{ 0xBF0D, 0xBF0D, 0xBF0D }, -{ 0xBF0E, 0xBF0E, 0xBF0E }, -{ 0xBF0F, 0xBF0F, 0xBF0F }, -{ 0xBF10, 0xBF10, 0xBF10 }, -{ 0xBF11, 0xBF11, 0xBF11 }, -{ 0xBF12, 0xBF12, 0xBF12 }, -{ 0xBF13, 0xBF13, 0xBF13 }, -{ 0xBF14, 0xBF14, 0xBF14 }, -{ 0xBF15, 0xBF15, 0xBF15 }, -{ 0xBF16, 0xBF16, 0xBF16 }, -{ 0xBF17, 0xBF17, 0xBF17 }, -{ 0xBF18, 0xBF18, 0xBF18 }, -{ 0xBF19, 0xBF19, 0xBF19 }, -{ 0xBF1A, 0xBF1A, 0xBF1A }, -{ 0xBF1B, 0xBF1B, 0xBF1B }, -{ 0xBF1C, 0xBF1C, 0xBF1C }, -{ 0xBF1D, 0xBF1D, 0xBF1D }, -{ 0xBF1E, 0xBF1E, 0xBF1E }, -{ 0xBF1F, 0xBF1F, 0xBF1F }, -{ 0xBF20, 0xBF20, 0xBF20 }, -{ 0xBF21, 0xBF21, 0xBF21 }, -{ 0xBF22, 0xBF22, 0xBF22 }, -{ 0xBF23, 0xBF23, 0xBF23 }, -{ 0xBF24, 0xBF24, 0xBF24 }, -{ 0xBF25, 0xBF25, 0xBF25 }, -{ 0xBF26, 0xBF26, 0xBF26 }, -{ 0xBF27, 0xBF27, 0xBF27 }, -{ 0xBF28, 0xBF28, 0xBF28 }, -{ 0xBF29, 0xBF29, 0xBF29 }, -{ 0xBF2A, 0xBF2A, 0xBF2A }, -{ 0xBF2B, 0xBF2B, 0xBF2B }, -{ 0xBF2C, 0xBF2C, 0xBF2C }, -{ 0xBF2D, 0xBF2D, 0xBF2D }, -{ 0xBF2E, 0xBF2E, 0xBF2E }, -{ 0xBF2F, 0xBF2F, 0xBF2F }, -{ 0xBF30, 0xBF30, 0xBF30 }, -{ 0xBF31, 0xBF31, 0xBF31 }, -{ 0xBF32, 0xBF32, 0xBF32 }, -{ 0xBF33, 0xBF33, 0xBF33 }, -{ 0xBF34, 0xBF34, 0xBF34 }, -{ 0xBF35, 0xBF35, 0xBF35 }, -{ 0xBF36, 0xBF36, 0xBF36 }, -{ 0xBF37, 0xBF37, 0xBF37 }, -{ 0xBF38, 0xBF38, 0xBF38 }, -{ 0xBF39, 0xBF39, 0xBF39 }, -{ 0xBF3A, 0xBF3A, 0xBF3A }, -{ 0xBF3B, 0xBF3B, 0xBF3B }, -{ 0xBF3C, 0xBF3C, 0xBF3C }, -{ 0xBF3D, 0xBF3D, 0xBF3D }, -{ 0xBF3E, 0xBF3E, 0xBF3E }, -{ 0xBF3F, 0xBF3F, 0xBF3F }, -{ 0xBF40, 0xBF40, 0xBF40 }, -{ 0xBF41, 0xBF41, 0xBF41 }, -{ 0xBF42, 0xBF42, 0xBF42 }, -{ 0xBF43, 0xBF43, 0xBF43 }, -{ 0xBF44, 0xBF44, 0xBF44 }, -{ 0xBF45, 0xBF45, 0xBF45 }, -{ 0xBF46, 0xBF46, 0xBF46 }, -{ 0xBF47, 0xBF47, 0xBF47 }, -{ 0xBF48, 0xBF48, 0xBF48 }, -{ 0xBF49, 0xBF49, 0xBF49 }, -{ 0xBF4A, 0xBF4A, 0xBF4A }, -{ 0xBF4B, 0xBF4B, 0xBF4B }, -{ 0xBF4C, 0xBF4C, 0xBF4C }, -{ 0xBF4D, 0xBF4D, 0xBF4D }, -{ 0xBF4E, 0xBF4E, 0xBF4E }, -{ 0xBF4F, 0xBF4F, 0xBF4F }, -{ 0xBF50, 0xBF50, 0xBF50 }, -{ 0xBF51, 0xBF51, 0xBF51 }, -{ 0xBF52, 0xBF52, 0xBF52 }, -{ 0xBF53, 0xBF53, 0xBF53 }, -{ 0xBF54, 0xBF54, 0xBF54 }, -{ 0xBF55, 0xBF55, 0xBF55 }, -{ 0xBF56, 0xBF56, 0xBF56 }, -{ 0xBF57, 0xBF57, 0xBF57 }, -{ 0xBF58, 0xBF58, 0xBF58 }, -{ 0xBF59, 0xBF59, 0xBF59 }, -{ 0xBF5A, 0xBF5A, 0xBF5A }, -{ 0xBF5B, 0xBF5B, 0xBF5B }, -{ 0xBF5C, 0xBF5C, 0xBF5C }, -{ 0xBF5D, 0xBF5D, 0xBF5D }, -{ 0xBF5E, 0xBF5E, 0xBF5E }, -{ 0xBF5F, 0xBF5F, 0xBF5F }, -{ 0xBF60, 0xBF60, 0xBF60 }, -{ 0xBF61, 0xBF61, 0xBF61 }, -{ 0xBF62, 0xBF62, 0xBF62 }, -{ 0xBF63, 0xBF63, 0xBF63 }, -{ 0xBF64, 0xBF64, 0xBF64 }, -{ 0xBF65, 0xBF65, 0xBF65 }, -{ 0xBF66, 0xBF66, 0xBF66 }, -{ 0xBF67, 0xBF67, 0xBF67 }, -{ 0xBF68, 0xBF68, 0xBF68 }, -{ 0xBF69, 0xBF69, 0xBF69 }, -{ 0xBF6A, 0xBF6A, 0xBF6A }, -{ 0xBF6B, 0xBF6B, 0xBF6B }, -{ 0xBF6C, 0xBF6C, 0xBF6C }, -{ 0xBF6D, 0xBF6D, 0xBF6D }, -{ 0xBF6E, 0xBF6E, 0xBF6E }, -{ 0xBF6F, 0xBF6F, 0xBF6F }, -{ 0xBF70, 0xBF70, 0xBF70 }, -{ 0xBF71, 0xBF71, 0xBF71 }, -{ 0xBF72, 0xBF72, 0xBF72 }, -{ 0xBF73, 0xBF73, 0xBF73 }, -{ 0xBF74, 0xBF74, 0xBF74 }, -{ 0xBF75, 0xBF75, 0xBF75 }, -{ 0xBF76, 0xBF76, 0xBF76 }, -{ 0xBF77, 0xBF77, 0xBF77 }, -{ 0xBF78, 0xBF78, 0xBF78 }, -{ 0xBF79, 0xBF79, 0xBF79 }, -{ 0xBF7A, 0xBF7A, 0xBF7A }, -{ 0xBF7B, 0xBF7B, 0xBF7B }, -{ 0xBF7C, 0xBF7C, 0xBF7C }, -{ 0xBF7D, 0xBF7D, 0xBF7D }, -{ 0xBF7E, 0xBF7E, 0xBF7E }, -{ 0xBF7F, 0xBF7F, 0xBF7F }, -{ 0xBF80, 0xBF80, 0xBF80 }, -{ 0xBF81, 0xBF81, 0xBF81 }, -{ 0xBF82, 0xBF82, 0xBF82 }, -{ 0xBF83, 0xBF83, 0xBF83 }, -{ 0xBF84, 0xBF84, 0xBF84 }, -{ 0xBF85, 0xBF85, 0xBF85 }, -{ 0xBF86, 0xBF86, 0xBF86 }, -{ 0xBF87, 0xBF87, 0xBF87 }, -{ 0xBF88, 0xBF88, 0xBF88 }, -{ 0xBF89, 0xBF89, 0xBF89 }, -{ 0xBF8A, 0xBF8A, 0xBF8A }, -{ 0xBF8B, 0xBF8B, 0xBF8B }, -{ 0xBF8C, 0xBF8C, 0xBF8C }, -{ 0xBF8D, 0xBF8D, 0xBF8D }, -{ 0xBF8E, 0xBF8E, 0xBF8E }, -{ 0xBF8F, 0xBF8F, 0xBF8F }, -{ 0xBF90, 0xBF90, 0xBF90 }, -{ 0xBF91, 0xBF91, 0xBF91 }, -{ 0xBF92, 0xBF92, 0xBF92 }, -{ 0xBF93, 0xBF93, 0xBF93 }, -{ 0xBF94, 0xBF94, 0xBF94 }, -{ 0xBF95, 0xBF95, 0xBF95 }, -{ 0xBF96, 0xBF96, 0xBF96 }, -{ 0xBF97, 0xBF97, 0xBF97 }, -{ 0xBF98, 0xBF98, 0xBF98 }, -{ 0xBF99, 0xBF99, 0xBF99 }, -{ 0xBF9A, 0xBF9A, 0xBF9A }, -{ 0xBF9B, 0xBF9B, 0xBF9B }, -{ 0xBF9C, 0xBF9C, 0xBF9C }, -{ 0xBF9D, 0xBF9D, 0xBF9D }, -{ 0xBF9E, 0xBF9E, 0xBF9E }, -{ 0xBF9F, 0xBF9F, 0xBF9F }, -{ 0xBFA0, 0xBFA0, 0xBFA0 }, -{ 0xBFA1, 0xBFA1, 0xBFA1 }, -{ 0xBFA2, 0xBFA2, 0xBFA2 }, -{ 0xBFA3, 0xBFA3, 0xBFA3 }, -{ 0xBFA4, 0xBFA4, 0xBFA4 }, -{ 0xBFA5, 0xBFA5, 0xBFA5 }, -{ 0xBFA6, 0xBFA6, 0xBFA6 }, -{ 0xBFA7, 0xBFA7, 0xBFA7 }, -{ 0xBFA8, 0xBFA8, 0xBFA8 }, -{ 0xBFA9, 0xBFA9, 0xBFA9 }, -{ 0xBFAA, 0xBFAA, 0xBFAA }, -{ 0xBFAB, 0xBFAB, 0xBFAB }, -{ 0xBFAC, 0xBFAC, 0xBFAC }, -{ 0xBFAD, 0xBFAD, 0xBFAD }, -{ 0xBFAE, 0xBFAE, 0xBFAE }, -{ 0xBFAF, 0xBFAF, 0xBFAF }, -{ 0xBFB0, 0xBFB0, 0xBFB0 }, -{ 0xBFB1, 0xBFB1, 0xBFB1 }, -{ 0xBFB2, 0xBFB2, 0xBFB2 }, -{ 0xBFB3, 0xBFB3, 0xBFB3 }, -{ 0xBFB4, 0xBFB4, 0xBFB4 }, -{ 0xBFB5, 0xBFB5, 0xBFB5 }, -{ 0xBFB6, 0xBFB6, 0xBFB6 }, -{ 0xBFB7, 0xBFB7, 0xBFB7 }, -{ 0xBFB8, 0xBFB8, 0xBFB8 }, -{ 0xBFB9, 0xBFB9, 0xBFB9 }, -{ 0xBFBA, 0xBFBA, 0xBFBA }, -{ 0xBFBB, 0xBFBB, 0xBFBB }, -{ 0xBFBC, 0xBFBC, 0xBFBC }, -{ 0xBFBD, 0xBFBD, 0xBFBD }, -{ 0xBFBE, 0xBFBE, 0xBFBE }, -{ 0xBFBF, 0xBFBF, 0xBFBF }, -{ 0xBFC0, 0xBFC0, 0xBFC0 }, -{ 0xBFC1, 0xBFC1, 0xBFC1 }, -{ 0xBFC2, 0xBFC2, 0xBFC2 }, -{ 0xBFC3, 0xBFC3, 0xBFC3 }, -{ 0xBFC4, 0xBFC4, 0xBFC4 }, -{ 0xBFC5, 0xBFC5, 0xBFC5 }, -{ 0xBFC6, 0xBFC6, 0xBFC6 }, -{ 0xBFC7, 0xBFC7, 0xBFC7 }, -{ 0xBFC8, 0xBFC8, 0xBFC8 }, -{ 0xBFC9, 0xBFC9, 0xBFC9 }, -{ 0xBFCA, 0xBFCA, 0xBFCA }, -{ 0xBFCB, 0xBFCB, 0xBFCB }, -{ 0xBFCC, 0xBFCC, 0xBFCC }, -{ 0xBFCD, 0xBFCD, 0xBFCD }, -{ 0xBFCE, 0xBFCE, 0xBFCE }, -{ 0xBFCF, 0xBFCF, 0xBFCF }, -{ 0xBFD0, 0xBFD0, 0xBFD0 }, -{ 0xBFD1, 0xBFD1, 0xBFD1 }, -{ 0xBFD2, 0xBFD2, 0xBFD2 }, -{ 0xBFD3, 0xBFD3, 0xBFD3 }, -{ 0xBFD4, 0xBFD4, 0xBFD4 }, -{ 0xBFD5, 0xBFD5, 0xBFD5 }, -{ 0xBFD6, 0xBFD6, 0xBFD6 }, -{ 0xBFD7, 0xBFD7, 0xBFD7 }, -{ 0xBFD8, 0xBFD8, 0xBFD8 }, -{ 0xBFD9, 0xBFD9, 0xBFD9 }, -{ 0xBFDA, 0xBFDA, 0xBFDA }, -{ 0xBFDB, 0xBFDB, 0xBFDB }, -{ 0xBFDC, 0xBFDC, 0xBFDC }, -{ 0xBFDD, 0xBFDD, 0xBFDD }, -{ 0xBFDE, 0xBFDE, 0xBFDE }, -{ 0xBFDF, 0xBFDF, 0xBFDF }, -{ 0xBFE0, 0xBFE0, 0xBFE0 }, -{ 0xBFE1, 0xBFE1, 0xBFE1 }, -{ 0xBFE2, 0xBFE2, 0xBFE2 }, -{ 0xBFE3, 0xBFE3, 0xBFE3 }, -{ 0xBFE4, 0xBFE4, 0xBFE4 }, -{ 0xBFE5, 0xBFE5, 0xBFE5 }, -{ 0xBFE6, 0xBFE6, 0xBFE6 }, -{ 0xBFE7, 0xBFE7, 0xBFE7 }, -{ 0xBFE8, 0xBFE8, 0xBFE8 }, -{ 0xBFE9, 0xBFE9, 0xBFE9 }, -{ 0xBFEA, 0xBFEA, 0xBFEA }, -{ 0xBFEB, 0xBFEB, 0xBFEB }, -{ 0xBFEC, 0xBFEC, 0xBFEC }, -{ 0xBFED, 0xBFED, 0xBFED }, -{ 0xBFEE, 0xBFEE, 0xBFEE }, -{ 0xBFEF, 0xBFEF, 0xBFEF }, -{ 0xBFF0, 0xBFF0, 0xBFF0 }, -{ 0xBFF1, 0xBFF1, 0xBFF1 }, -{ 0xBFF2, 0xBFF2, 0xBFF2 }, -{ 0xBFF3, 0xBFF3, 0xBFF3 }, -{ 0xBFF4, 0xBFF4, 0xBFF4 }, -{ 0xBFF5, 0xBFF5, 0xBFF5 }, -{ 0xBFF6, 0xBFF6, 0xBFF6 }, -{ 0xBFF7, 0xBFF7, 0xBFF7 }, -{ 0xBFF8, 0xBFF8, 0xBFF8 }, -{ 0xBFF9, 0xBFF9, 0xBFF9 }, -{ 0xBFFA, 0xBFFA, 0xBFFA }, -{ 0xBFFB, 0xBFFB, 0xBFFB }, -{ 0xBFFC, 0xBFFC, 0xBFFC }, -{ 0xBFFD, 0xBFFD, 0xBFFD }, -{ 0xBFFE, 0xBFFE, 0xBFFE }, -{ 0xBFFF, 0xBFFF, 0xBFFF }, -{ 0xC000, 0xC000, 0xC000 }, -{ 0xC001, 0xC001, 0xC001 }, -{ 0xC002, 0xC002, 0xC002 }, -{ 0xC003, 0xC003, 0xC003 }, -{ 0xC004, 0xC004, 0xC004 }, -{ 0xC005, 0xC005, 0xC005 }, -{ 0xC006, 0xC006, 0xC006 }, -{ 0xC007, 0xC007, 0xC007 }, -{ 0xC008, 0xC008, 0xC008 }, -{ 0xC009, 0xC009, 0xC009 }, -{ 0xC00A, 0xC00A, 0xC00A }, -{ 0xC00B, 0xC00B, 0xC00B }, -{ 0xC00C, 0xC00C, 0xC00C }, -{ 0xC00D, 0xC00D, 0xC00D }, -{ 0xC00E, 0xC00E, 0xC00E }, -{ 0xC00F, 0xC00F, 0xC00F }, -{ 0xC010, 0xC010, 0xC010 }, -{ 0xC011, 0xC011, 0xC011 }, -{ 0xC012, 0xC012, 0xC012 }, -{ 0xC013, 0xC013, 0xC013 }, -{ 0xC014, 0xC014, 0xC014 }, -{ 0xC015, 0xC015, 0xC015 }, -{ 0xC016, 0xC016, 0xC016 }, -{ 0xC017, 0xC017, 0xC017 }, -{ 0xC018, 0xC018, 0xC018 }, -{ 0xC019, 0xC019, 0xC019 }, -{ 0xC01A, 0xC01A, 0xC01A }, -{ 0xC01B, 0xC01B, 0xC01B }, -{ 0xC01C, 0xC01C, 0xC01C }, -{ 0xC01D, 0xC01D, 0xC01D }, -{ 0xC01E, 0xC01E, 0xC01E }, -{ 0xC01F, 0xC01F, 0xC01F }, -{ 0xC020, 0xC020, 0xC020 }, -{ 0xC021, 0xC021, 0xC021 }, -{ 0xC022, 0xC022, 0xC022 }, -{ 0xC023, 0xC023, 0xC023 }, -{ 0xC024, 0xC024, 0xC024 }, -{ 0xC025, 0xC025, 0xC025 }, -{ 0xC026, 0xC026, 0xC026 }, -{ 0xC027, 0xC027, 0xC027 }, -{ 0xC028, 0xC028, 0xC028 }, -{ 0xC029, 0xC029, 0xC029 }, -{ 0xC02A, 0xC02A, 0xC02A }, -{ 0xC02B, 0xC02B, 0xC02B }, -{ 0xC02C, 0xC02C, 0xC02C }, -{ 0xC02D, 0xC02D, 0xC02D }, -{ 0xC02E, 0xC02E, 0xC02E }, -{ 0xC02F, 0xC02F, 0xC02F }, -{ 0xC030, 0xC030, 0xC030 }, -{ 0xC031, 0xC031, 0xC031 }, -{ 0xC032, 0xC032, 0xC032 }, -{ 0xC033, 0xC033, 0xC033 }, -{ 0xC034, 0xC034, 0xC034 }, -{ 0xC035, 0xC035, 0xC035 }, -{ 0xC036, 0xC036, 0xC036 }, -{ 0xC037, 0xC037, 0xC037 }, -{ 0xC038, 0xC038, 0xC038 }, -{ 0xC039, 0xC039, 0xC039 }, -{ 0xC03A, 0xC03A, 0xC03A }, -{ 0xC03B, 0xC03B, 0xC03B }, -{ 0xC03C, 0xC03C, 0xC03C }, -{ 0xC03D, 0xC03D, 0xC03D }, -{ 0xC03E, 0xC03E, 0xC03E }, -{ 0xC03F, 0xC03F, 0xC03F }, -{ 0xC040, 0xC040, 0xC040 }, -{ 0xC041, 0xC041, 0xC041 }, -{ 0xC042, 0xC042, 0xC042 }, -{ 0xC043, 0xC043, 0xC043 }, -{ 0xC044, 0xC044, 0xC044 }, -{ 0xC045, 0xC045, 0xC045 }, -{ 0xC046, 0xC046, 0xC046 }, -{ 0xC047, 0xC047, 0xC047 }, -{ 0xC048, 0xC048, 0xC048 }, -{ 0xC049, 0xC049, 0xC049 }, -{ 0xC04A, 0xC04A, 0xC04A }, -{ 0xC04B, 0xC04B, 0xC04B }, -{ 0xC04C, 0xC04C, 0xC04C }, -{ 0xC04D, 0xC04D, 0xC04D }, -{ 0xC04E, 0xC04E, 0xC04E }, -{ 0xC04F, 0xC04F, 0xC04F }, -{ 0xC050, 0xC050, 0xC050 }, -{ 0xC051, 0xC051, 0xC051 }, -{ 0xC052, 0xC052, 0xC052 }, -{ 0xC053, 0xC053, 0xC053 }, -{ 0xC054, 0xC054, 0xC054 }, -{ 0xC055, 0xC055, 0xC055 }, -{ 0xC056, 0xC056, 0xC056 }, -{ 0xC057, 0xC057, 0xC057 }, -{ 0xC058, 0xC058, 0xC058 }, -{ 0xC059, 0xC059, 0xC059 }, -{ 0xC05A, 0xC05A, 0xC05A }, -{ 0xC05B, 0xC05B, 0xC05B }, -{ 0xC05C, 0xC05C, 0xC05C }, -{ 0xC05D, 0xC05D, 0xC05D }, -{ 0xC05E, 0xC05E, 0xC05E }, -{ 0xC05F, 0xC05F, 0xC05F }, -{ 0xC060, 0xC060, 0xC060 }, -{ 0xC061, 0xC061, 0xC061 }, -{ 0xC062, 0xC062, 0xC062 }, -{ 0xC063, 0xC063, 0xC063 }, -{ 0xC064, 0xC064, 0xC064 }, -{ 0xC065, 0xC065, 0xC065 }, -{ 0xC066, 0xC066, 0xC066 }, -{ 0xC067, 0xC067, 0xC067 }, -{ 0xC068, 0xC068, 0xC068 }, -{ 0xC069, 0xC069, 0xC069 }, -{ 0xC06A, 0xC06A, 0xC06A }, -{ 0xC06B, 0xC06B, 0xC06B }, -{ 0xC06C, 0xC06C, 0xC06C }, -{ 0xC06D, 0xC06D, 0xC06D }, -{ 0xC06E, 0xC06E, 0xC06E }, -{ 0xC06F, 0xC06F, 0xC06F }, -{ 0xC070, 0xC070, 0xC070 }, -{ 0xC071, 0xC071, 0xC071 }, -{ 0xC072, 0xC072, 0xC072 }, -{ 0xC073, 0xC073, 0xC073 }, -{ 0xC074, 0xC074, 0xC074 }, -{ 0xC075, 0xC075, 0xC075 }, -{ 0xC076, 0xC076, 0xC076 }, -{ 0xC077, 0xC077, 0xC077 }, -{ 0xC078, 0xC078, 0xC078 }, -{ 0xC079, 0xC079, 0xC079 }, -{ 0xC07A, 0xC07A, 0xC07A }, -{ 0xC07B, 0xC07B, 0xC07B }, -{ 0xC07C, 0xC07C, 0xC07C }, -{ 0xC07D, 0xC07D, 0xC07D }, -{ 0xC07E, 0xC07E, 0xC07E }, -{ 0xC07F, 0xC07F, 0xC07F }, -{ 0xC080, 0xC080, 0xC080 }, -{ 0xC081, 0xC081, 0xC081 }, -{ 0xC082, 0xC082, 0xC082 }, -{ 0xC083, 0xC083, 0xC083 }, -{ 0xC084, 0xC084, 0xC084 }, -{ 0xC085, 0xC085, 0xC085 }, -{ 0xC086, 0xC086, 0xC086 }, -{ 0xC087, 0xC087, 0xC087 }, -{ 0xC088, 0xC088, 0xC088 }, -{ 0xC089, 0xC089, 0xC089 }, -{ 0xC08A, 0xC08A, 0xC08A }, -{ 0xC08B, 0xC08B, 0xC08B }, -{ 0xC08C, 0xC08C, 0xC08C }, -{ 0xC08D, 0xC08D, 0xC08D }, -{ 0xC08E, 0xC08E, 0xC08E }, -{ 0xC08F, 0xC08F, 0xC08F }, -{ 0xC090, 0xC090, 0xC090 }, -{ 0xC091, 0xC091, 0xC091 }, -{ 0xC092, 0xC092, 0xC092 }, -{ 0xC093, 0xC093, 0xC093 }, -{ 0xC094, 0xC094, 0xC094 }, -{ 0xC095, 0xC095, 0xC095 }, -{ 0xC096, 0xC096, 0xC096 }, -{ 0xC097, 0xC097, 0xC097 }, -{ 0xC098, 0xC098, 0xC098 }, -{ 0xC099, 0xC099, 0xC099 }, -{ 0xC09A, 0xC09A, 0xC09A }, -{ 0xC09B, 0xC09B, 0xC09B }, -{ 0xC09C, 0xC09C, 0xC09C }, -{ 0xC09D, 0xC09D, 0xC09D }, -{ 0xC09E, 0xC09E, 0xC09E }, -{ 0xC09F, 0xC09F, 0xC09F }, -{ 0xC0A0, 0xC0A0, 0xC0A0 }, -{ 0xC0A1, 0xC0A1, 0xC0A1 }, -{ 0xC0A2, 0xC0A2, 0xC0A2 }, -{ 0xC0A3, 0xC0A3, 0xC0A3 }, -{ 0xC0A4, 0xC0A4, 0xC0A4 }, -{ 0xC0A5, 0xC0A5, 0xC0A5 }, -{ 0xC0A6, 0xC0A6, 0xC0A6 }, -{ 0xC0A7, 0xC0A7, 0xC0A7 }, -{ 0xC0A8, 0xC0A8, 0xC0A8 }, -{ 0xC0A9, 0xC0A9, 0xC0A9 }, -{ 0xC0AA, 0xC0AA, 0xC0AA }, -{ 0xC0AB, 0xC0AB, 0xC0AB }, -{ 0xC0AC, 0xC0AC, 0xC0AC }, -{ 0xC0AD, 0xC0AD, 0xC0AD }, -{ 0xC0AE, 0xC0AE, 0xC0AE }, -{ 0xC0AF, 0xC0AF, 0xC0AF }, -{ 0xC0B0, 0xC0B0, 0xC0B0 }, -{ 0xC0B1, 0xC0B1, 0xC0B1 }, -{ 0xC0B2, 0xC0B2, 0xC0B2 }, -{ 0xC0B3, 0xC0B3, 0xC0B3 }, -{ 0xC0B4, 0xC0B4, 0xC0B4 }, -{ 0xC0B5, 0xC0B5, 0xC0B5 }, -{ 0xC0B6, 0xC0B6, 0xC0B6 }, -{ 0xC0B7, 0xC0B7, 0xC0B7 }, -{ 0xC0B8, 0xC0B8, 0xC0B8 }, -{ 0xC0B9, 0xC0B9, 0xC0B9 }, -{ 0xC0BA, 0xC0BA, 0xC0BA }, -{ 0xC0BB, 0xC0BB, 0xC0BB }, -{ 0xC0BC, 0xC0BC, 0xC0BC }, -{ 0xC0BD, 0xC0BD, 0xC0BD }, -{ 0xC0BE, 0xC0BE, 0xC0BE }, -{ 0xC0BF, 0xC0BF, 0xC0BF }, -{ 0xC0C0, 0xC0C0, 0xC0C0 }, -{ 0xC0C1, 0xC0C1, 0xC0C1 }, -{ 0xC0C2, 0xC0C2, 0xC0C2 }, -{ 0xC0C3, 0xC0C3, 0xC0C3 }, -{ 0xC0C4, 0xC0C4, 0xC0C4 }, -{ 0xC0C5, 0xC0C5, 0xC0C5 }, -{ 0xC0C6, 0xC0C6, 0xC0C6 }, -{ 0xC0C7, 0xC0C7, 0xC0C7 }, -{ 0xC0C8, 0xC0C8, 0xC0C8 }, -{ 0xC0C9, 0xC0C9, 0xC0C9 }, -{ 0xC0CA, 0xC0CA, 0xC0CA }, -{ 0xC0CB, 0xC0CB, 0xC0CB }, -{ 0xC0CC, 0xC0CC, 0xC0CC }, -{ 0xC0CD, 0xC0CD, 0xC0CD }, -{ 0xC0CE, 0xC0CE, 0xC0CE }, -{ 0xC0CF, 0xC0CF, 0xC0CF }, -{ 0xC0D0, 0xC0D0, 0xC0D0 }, -{ 0xC0D1, 0xC0D1, 0xC0D1 }, -{ 0xC0D2, 0xC0D2, 0xC0D2 }, -{ 0xC0D3, 0xC0D3, 0xC0D3 }, -{ 0xC0D4, 0xC0D4, 0xC0D4 }, -{ 0xC0D5, 0xC0D5, 0xC0D5 }, -{ 0xC0D6, 0xC0D6, 0xC0D6 }, -{ 0xC0D7, 0xC0D7, 0xC0D7 }, -{ 0xC0D8, 0xC0D8, 0xC0D8 }, -{ 0xC0D9, 0xC0D9, 0xC0D9 }, -{ 0xC0DA, 0xC0DA, 0xC0DA }, -{ 0xC0DB, 0xC0DB, 0xC0DB }, -{ 0xC0DC, 0xC0DC, 0xC0DC }, -{ 0xC0DD, 0xC0DD, 0xC0DD }, -{ 0xC0DE, 0xC0DE, 0xC0DE }, -{ 0xC0DF, 0xC0DF, 0xC0DF }, -{ 0xC0E0, 0xC0E0, 0xC0E0 }, -{ 0xC0E1, 0xC0E1, 0xC0E1 }, -{ 0xC0E2, 0xC0E2, 0xC0E2 }, -{ 0xC0E3, 0xC0E3, 0xC0E3 }, -{ 0xC0E4, 0xC0E4, 0xC0E4 }, -{ 0xC0E5, 0xC0E5, 0xC0E5 }, -{ 0xC0E6, 0xC0E6, 0xC0E6 }, -{ 0xC0E7, 0xC0E7, 0xC0E7 }, -{ 0xC0E8, 0xC0E8, 0xC0E8 }, -{ 0xC0E9, 0xC0E9, 0xC0E9 }, -{ 0xC0EA, 0xC0EA, 0xC0EA }, -{ 0xC0EB, 0xC0EB, 0xC0EB }, -{ 0xC0EC, 0xC0EC, 0xC0EC }, -{ 0xC0ED, 0xC0ED, 0xC0ED }, -{ 0xC0EE, 0xC0EE, 0xC0EE }, -{ 0xC0EF, 0xC0EF, 0xC0EF }, -{ 0xC0F0, 0xC0F0, 0xC0F0 }, -{ 0xC0F1, 0xC0F1, 0xC0F1 }, -{ 0xC0F2, 0xC0F2, 0xC0F2 }, -{ 0xC0F3, 0xC0F3, 0xC0F3 }, -{ 0xC0F4, 0xC0F4, 0xC0F4 }, -{ 0xC0F5, 0xC0F5, 0xC0F5 }, -{ 0xC0F6, 0xC0F6, 0xC0F6 }, -{ 0xC0F7, 0xC0F7, 0xC0F7 }, -{ 0xC0F8, 0xC0F8, 0xC0F8 }, -{ 0xC0F9, 0xC0F9, 0xC0F9 }, -{ 0xC0FA, 0xC0FA, 0xC0FA }, -{ 0xC0FB, 0xC0FB, 0xC0FB }, -{ 0xC0FC, 0xC0FC, 0xC0FC }, -{ 0xC0FD, 0xC0FD, 0xC0FD }, -{ 0xC0FE, 0xC0FE, 0xC0FE }, -{ 0xC0FF, 0xC0FF, 0xC0FF }, -{ 0xC100, 0xC100, 0xC100 }, -{ 0xC101, 0xC101, 0xC101 }, -{ 0xC102, 0xC102, 0xC102 }, -{ 0xC103, 0xC103, 0xC103 }, -{ 0xC104, 0xC104, 0xC104 }, -{ 0xC105, 0xC105, 0xC105 }, -{ 0xC106, 0xC106, 0xC106 }, -{ 0xC107, 0xC107, 0xC107 }, -{ 0xC108, 0xC108, 0xC108 }, -{ 0xC109, 0xC109, 0xC109 }, -{ 0xC10A, 0xC10A, 0xC10A }, -{ 0xC10B, 0xC10B, 0xC10B }, -{ 0xC10C, 0xC10C, 0xC10C }, -{ 0xC10D, 0xC10D, 0xC10D }, -{ 0xC10E, 0xC10E, 0xC10E }, -{ 0xC10F, 0xC10F, 0xC10F }, -{ 0xC110, 0xC110, 0xC110 }, -{ 0xC111, 0xC111, 0xC111 }, -{ 0xC112, 0xC112, 0xC112 }, -{ 0xC113, 0xC113, 0xC113 }, -{ 0xC114, 0xC114, 0xC114 }, -{ 0xC115, 0xC115, 0xC115 }, -{ 0xC116, 0xC116, 0xC116 }, -{ 0xC117, 0xC117, 0xC117 }, -{ 0xC118, 0xC118, 0xC118 }, -{ 0xC119, 0xC119, 0xC119 }, -{ 0xC11A, 0xC11A, 0xC11A }, -{ 0xC11B, 0xC11B, 0xC11B }, -{ 0xC11C, 0xC11C, 0xC11C }, -{ 0xC11D, 0xC11D, 0xC11D }, -{ 0xC11E, 0xC11E, 0xC11E }, -{ 0xC11F, 0xC11F, 0xC11F }, -{ 0xC120, 0xC120, 0xC120 }, -{ 0xC121, 0xC121, 0xC121 }, -{ 0xC122, 0xC122, 0xC122 }, -{ 0xC123, 0xC123, 0xC123 }, -{ 0xC124, 0xC124, 0xC124 }, -{ 0xC125, 0xC125, 0xC125 }, -{ 0xC126, 0xC126, 0xC126 }, -{ 0xC127, 0xC127, 0xC127 }, -{ 0xC128, 0xC128, 0xC128 }, -{ 0xC129, 0xC129, 0xC129 }, -{ 0xC12A, 0xC12A, 0xC12A }, -{ 0xC12B, 0xC12B, 0xC12B }, -{ 0xC12C, 0xC12C, 0xC12C }, -{ 0xC12D, 0xC12D, 0xC12D }, -{ 0xC12E, 0xC12E, 0xC12E }, -{ 0xC12F, 0xC12F, 0xC12F }, -{ 0xC130, 0xC130, 0xC130 }, -{ 0xC131, 0xC131, 0xC131 }, -{ 0xC132, 0xC132, 0xC132 }, -{ 0xC133, 0xC133, 0xC133 }, -{ 0xC134, 0xC134, 0xC134 }, -{ 0xC135, 0xC135, 0xC135 }, -{ 0xC136, 0xC136, 0xC136 }, -{ 0xC137, 0xC137, 0xC137 }, -{ 0xC138, 0xC138, 0xC138 }, -{ 0xC139, 0xC139, 0xC139 }, -{ 0xC13A, 0xC13A, 0xC13A }, -{ 0xC13B, 0xC13B, 0xC13B }, -{ 0xC13C, 0xC13C, 0xC13C }, -{ 0xC13D, 0xC13D, 0xC13D }, -{ 0xC13E, 0xC13E, 0xC13E }, -{ 0xC13F, 0xC13F, 0xC13F }, -{ 0xC140, 0xC140, 0xC140 }, -{ 0xC141, 0xC141, 0xC141 }, -{ 0xC142, 0xC142, 0xC142 }, -{ 0xC143, 0xC143, 0xC143 }, -{ 0xC144, 0xC144, 0xC144 }, -{ 0xC145, 0xC145, 0xC145 }, -{ 0xC146, 0xC146, 0xC146 }, -{ 0xC147, 0xC147, 0xC147 }, -{ 0xC148, 0xC148, 0xC148 }, -{ 0xC149, 0xC149, 0xC149 }, -{ 0xC14A, 0xC14A, 0xC14A }, -{ 0xC14B, 0xC14B, 0xC14B }, -{ 0xC14C, 0xC14C, 0xC14C }, -{ 0xC14D, 0xC14D, 0xC14D }, -{ 0xC14E, 0xC14E, 0xC14E }, -{ 0xC14F, 0xC14F, 0xC14F }, -{ 0xC150, 0xC150, 0xC150 }, -{ 0xC151, 0xC151, 0xC151 }, -{ 0xC152, 0xC152, 0xC152 }, -{ 0xC153, 0xC153, 0xC153 }, -{ 0xC154, 0xC154, 0xC154 }, -{ 0xC155, 0xC155, 0xC155 }, -{ 0xC156, 0xC156, 0xC156 }, -{ 0xC157, 0xC157, 0xC157 }, -{ 0xC158, 0xC158, 0xC158 }, -{ 0xC159, 0xC159, 0xC159 }, -{ 0xC15A, 0xC15A, 0xC15A }, -{ 0xC15B, 0xC15B, 0xC15B }, -{ 0xC15C, 0xC15C, 0xC15C }, -{ 0xC15D, 0xC15D, 0xC15D }, -{ 0xC15E, 0xC15E, 0xC15E }, -{ 0xC15F, 0xC15F, 0xC15F }, -{ 0xC160, 0xC160, 0xC160 }, -{ 0xC161, 0xC161, 0xC161 }, -{ 0xC162, 0xC162, 0xC162 }, -{ 0xC163, 0xC163, 0xC163 }, -{ 0xC164, 0xC164, 0xC164 }, -{ 0xC165, 0xC165, 0xC165 }, -{ 0xC166, 0xC166, 0xC166 }, -{ 0xC167, 0xC167, 0xC167 }, -{ 0xC168, 0xC168, 0xC168 }, -{ 0xC169, 0xC169, 0xC169 }, -{ 0xC16A, 0xC16A, 0xC16A }, -{ 0xC16B, 0xC16B, 0xC16B }, -{ 0xC16C, 0xC16C, 0xC16C }, -{ 0xC16D, 0xC16D, 0xC16D }, -{ 0xC16E, 0xC16E, 0xC16E }, -{ 0xC16F, 0xC16F, 0xC16F }, -{ 0xC170, 0xC170, 0xC170 }, -{ 0xC171, 0xC171, 0xC171 }, -{ 0xC172, 0xC172, 0xC172 }, -{ 0xC173, 0xC173, 0xC173 }, -{ 0xC174, 0xC174, 0xC174 }, -{ 0xC175, 0xC175, 0xC175 }, -{ 0xC176, 0xC176, 0xC176 }, -{ 0xC177, 0xC177, 0xC177 }, -{ 0xC178, 0xC178, 0xC178 }, -{ 0xC179, 0xC179, 0xC179 }, -{ 0xC17A, 0xC17A, 0xC17A }, -{ 0xC17B, 0xC17B, 0xC17B }, -{ 0xC17C, 0xC17C, 0xC17C }, -{ 0xC17D, 0xC17D, 0xC17D }, -{ 0xC17E, 0xC17E, 0xC17E }, -{ 0xC17F, 0xC17F, 0xC17F }, -{ 0xC180, 0xC180, 0xC180 }, -{ 0xC181, 0xC181, 0xC181 }, -{ 0xC182, 0xC182, 0xC182 }, -{ 0xC183, 0xC183, 0xC183 }, -{ 0xC184, 0xC184, 0xC184 }, -{ 0xC185, 0xC185, 0xC185 }, -{ 0xC186, 0xC186, 0xC186 }, -{ 0xC187, 0xC187, 0xC187 }, -{ 0xC188, 0xC188, 0xC188 }, -{ 0xC189, 0xC189, 0xC189 }, -{ 0xC18A, 0xC18A, 0xC18A }, -{ 0xC18B, 0xC18B, 0xC18B }, -{ 0xC18C, 0xC18C, 0xC18C }, -{ 0xC18D, 0xC18D, 0xC18D }, -{ 0xC18E, 0xC18E, 0xC18E }, -{ 0xC18F, 0xC18F, 0xC18F }, -{ 0xC190, 0xC190, 0xC190 }, -{ 0xC191, 0xC191, 0xC191 }, -{ 0xC192, 0xC192, 0xC192 }, -{ 0xC193, 0xC193, 0xC193 }, -{ 0xC194, 0xC194, 0xC194 }, -{ 0xC195, 0xC195, 0xC195 }, -{ 0xC196, 0xC196, 0xC196 }, -{ 0xC197, 0xC197, 0xC197 }, -{ 0xC198, 0xC198, 0xC198 }, -{ 0xC199, 0xC199, 0xC199 }, -{ 0xC19A, 0xC19A, 0xC19A }, -{ 0xC19B, 0xC19B, 0xC19B }, -{ 0xC19C, 0xC19C, 0xC19C }, -{ 0xC19D, 0xC19D, 0xC19D }, -{ 0xC19E, 0xC19E, 0xC19E }, -{ 0xC19F, 0xC19F, 0xC19F }, -{ 0xC1A0, 0xC1A0, 0xC1A0 }, -{ 0xC1A1, 0xC1A1, 0xC1A1 }, -{ 0xC1A2, 0xC1A2, 0xC1A2 }, -{ 0xC1A3, 0xC1A3, 0xC1A3 }, -{ 0xC1A4, 0xC1A4, 0xC1A4 }, -{ 0xC1A5, 0xC1A5, 0xC1A5 }, -{ 0xC1A6, 0xC1A6, 0xC1A6 }, -{ 0xC1A7, 0xC1A7, 0xC1A7 }, -{ 0xC1A8, 0xC1A8, 0xC1A8 }, -{ 0xC1A9, 0xC1A9, 0xC1A9 }, -{ 0xC1AA, 0xC1AA, 0xC1AA }, -{ 0xC1AB, 0xC1AB, 0xC1AB }, -{ 0xC1AC, 0xC1AC, 0xC1AC }, -{ 0xC1AD, 0xC1AD, 0xC1AD }, -{ 0xC1AE, 0xC1AE, 0xC1AE }, -{ 0xC1AF, 0xC1AF, 0xC1AF }, -{ 0xC1B0, 0xC1B0, 0xC1B0 }, -{ 0xC1B1, 0xC1B1, 0xC1B1 }, -{ 0xC1B2, 0xC1B2, 0xC1B2 }, -{ 0xC1B3, 0xC1B3, 0xC1B3 }, -{ 0xC1B4, 0xC1B4, 0xC1B4 }, -{ 0xC1B5, 0xC1B5, 0xC1B5 }, -{ 0xC1B6, 0xC1B6, 0xC1B6 }, -{ 0xC1B7, 0xC1B7, 0xC1B7 }, -{ 0xC1B8, 0xC1B8, 0xC1B8 }, -{ 0xC1B9, 0xC1B9, 0xC1B9 }, -{ 0xC1BA, 0xC1BA, 0xC1BA }, -{ 0xC1BB, 0xC1BB, 0xC1BB }, -{ 0xC1BC, 0xC1BC, 0xC1BC }, -{ 0xC1BD, 0xC1BD, 0xC1BD }, -{ 0xC1BE, 0xC1BE, 0xC1BE }, -{ 0xC1BF, 0xC1BF, 0xC1BF }, -{ 0xC1C0, 0xC1C0, 0xC1C0 }, -{ 0xC1C1, 0xC1C1, 0xC1C1 }, -{ 0xC1C2, 0xC1C2, 0xC1C2 }, -{ 0xC1C3, 0xC1C3, 0xC1C3 }, -{ 0xC1C4, 0xC1C4, 0xC1C4 }, -{ 0xC1C5, 0xC1C5, 0xC1C5 }, -{ 0xC1C6, 0xC1C6, 0xC1C6 }, -{ 0xC1C7, 0xC1C7, 0xC1C7 }, -{ 0xC1C8, 0xC1C8, 0xC1C8 }, -{ 0xC1C9, 0xC1C9, 0xC1C9 }, -{ 0xC1CA, 0xC1CA, 0xC1CA }, -{ 0xC1CB, 0xC1CB, 0xC1CB }, -{ 0xC1CC, 0xC1CC, 0xC1CC }, -{ 0xC1CD, 0xC1CD, 0xC1CD }, -{ 0xC1CE, 0xC1CE, 0xC1CE }, -{ 0xC1CF, 0xC1CF, 0xC1CF }, -{ 0xC1D0, 0xC1D0, 0xC1D0 }, -{ 0xC1D1, 0xC1D1, 0xC1D1 }, -{ 0xC1D2, 0xC1D2, 0xC1D2 }, -{ 0xC1D3, 0xC1D3, 0xC1D3 }, -{ 0xC1D4, 0xC1D4, 0xC1D4 }, -{ 0xC1D5, 0xC1D5, 0xC1D5 }, -{ 0xC1D6, 0xC1D6, 0xC1D6 }, -{ 0xC1D7, 0xC1D7, 0xC1D7 }, -{ 0xC1D8, 0xC1D8, 0xC1D8 }, -{ 0xC1D9, 0xC1D9, 0xC1D9 }, -{ 0xC1DA, 0xC1DA, 0xC1DA }, -{ 0xC1DB, 0xC1DB, 0xC1DB }, -{ 0xC1DC, 0xC1DC, 0xC1DC }, -{ 0xC1DD, 0xC1DD, 0xC1DD }, -{ 0xC1DE, 0xC1DE, 0xC1DE }, -{ 0xC1DF, 0xC1DF, 0xC1DF }, -{ 0xC1E0, 0xC1E0, 0xC1E0 }, -{ 0xC1E1, 0xC1E1, 0xC1E1 }, -{ 0xC1E2, 0xC1E2, 0xC1E2 }, -{ 0xC1E3, 0xC1E3, 0xC1E3 }, -{ 0xC1E4, 0xC1E4, 0xC1E4 }, -{ 0xC1E5, 0xC1E5, 0xC1E5 }, -{ 0xC1E6, 0xC1E6, 0xC1E6 }, -{ 0xC1E7, 0xC1E7, 0xC1E7 }, -{ 0xC1E8, 0xC1E8, 0xC1E8 }, -{ 0xC1E9, 0xC1E9, 0xC1E9 }, -{ 0xC1EA, 0xC1EA, 0xC1EA }, -{ 0xC1EB, 0xC1EB, 0xC1EB }, -{ 0xC1EC, 0xC1EC, 0xC1EC }, -{ 0xC1ED, 0xC1ED, 0xC1ED }, -{ 0xC1EE, 0xC1EE, 0xC1EE }, -{ 0xC1EF, 0xC1EF, 0xC1EF }, -{ 0xC1F0, 0xC1F0, 0xC1F0 }, -{ 0xC1F1, 0xC1F1, 0xC1F1 }, -{ 0xC1F2, 0xC1F2, 0xC1F2 }, -{ 0xC1F3, 0xC1F3, 0xC1F3 }, -{ 0xC1F4, 0xC1F4, 0xC1F4 }, -{ 0xC1F5, 0xC1F5, 0xC1F5 }, -{ 0xC1F6, 0xC1F6, 0xC1F6 }, -{ 0xC1F7, 0xC1F7, 0xC1F7 }, -{ 0xC1F8, 0xC1F8, 0xC1F8 }, -{ 0xC1F9, 0xC1F9, 0xC1F9 }, -{ 0xC1FA, 0xC1FA, 0xC1FA }, -{ 0xC1FB, 0xC1FB, 0xC1FB }, -{ 0xC1FC, 0xC1FC, 0xC1FC }, -{ 0xC1FD, 0xC1FD, 0xC1FD }, -{ 0xC1FE, 0xC1FE, 0xC1FE }, -{ 0xC1FF, 0xC1FF, 0xC1FF }, -{ 0xC200, 0xC200, 0xC200 }, -{ 0xC201, 0xC201, 0xC201 }, -{ 0xC202, 0xC202, 0xC202 }, -{ 0xC203, 0xC203, 0xC203 }, -{ 0xC204, 0xC204, 0xC204 }, -{ 0xC205, 0xC205, 0xC205 }, -{ 0xC206, 0xC206, 0xC206 }, -{ 0xC207, 0xC207, 0xC207 }, -{ 0xC208, 0xC208, 0xC208 }, -{ 0xC209, 0xC209, 0xC209 }, -{ 0xC20A, 0xC20A, 0xC20A }, -{ 0xC20B, 0xC20B, 0xC20B }, -{ 0xC20C, 0xC20C, 0xC20C }, -{ 0xC20D, 0xC20D, 0xC20D }, -{ 0xC20E, 0xC20E, 0xC20E }, -{ 0xC20F, 0xC20F, 0xC20F }, -{ 0xC210, 0xC210, 0xC210 }, -{ 0xC211, 0xC211, 0xC211 }, -{ 0xC212, 0xC212, 0xC212 }, -{ 0xC213, 0xC213, 0xC213 }, -{ 0xC214, 0xC214, 0xC214 }, -{ 0xC215, 0xC215, 0xC215 }, -{ 0xC216, 0xC216, 0xC216 }, -{ 0xC217, 0xC217, 0xC217 }, -{ 0xC218, 0xC218, 0xC218 }, -{ 0xC219, 0xC219, 0xC219 }, -{ 0xC21A, 0xC21A, 0xC21A }, -{ 0xC21B, 0xC21B, 0xC21B }, -{ 0xC21C, 0xC21C, 0xC21C }, -{ 0xC21D, 0xC21D, 0xC21D }, -{ 0xC21E, 0xC21E, 0xC21E }, -{ 0xC21F, 0xC21F, 0xC21F }, -{ 0xC220, 0xC220, 0xC220 }, -{ 0xC221, 0xC221, 0xC221 }, -{ 0xC222, 0xC222, 0xC222 }, -{ 0xC223, 0xC223, 0xC223 }, -{ 0xC224, 0xC224, 0xC224 }, -{ 0xC225, 0xC225, 0xC225 }, -{ 0xC226, 0xC226, 0xC226 }, -{ 0xC227, 0xC227, 0xC227 }, -{ 0xC228, 0xC228, 0xC228 }, -{ 0xC229, 0xC229, 0xC229 }, -{ 0xC22A, 0xC22A, 0xC22A }, -{ 0xC22B, 0xC22B, 0xC22B }, -{ 0xC22C, 0xC22C, 0xC22C }, -{ 0xC22D, 0xC22D, 0xC22D }, -{ 0xC22E, 0xC22E, 0xC22E }, -{ 0xC22F, 0xC22F, 0xC22F }, -{ 0xC230, 0xC230, 0xC230 }, -{ 0xC231, 0xC231, 0xC231 }, -{ 0xC232, 0xC232, 0xC232 }, -{ 0xC233, 0xC233, 0xC233 }, -{ 0xC234, 0xC234, 0xC234 }, -{ 0xC235, 0xC235, 0xC235 }, -{ 0xC236, 0xC236, 0xC236 }, -{ 0xC237, 0xC237, 0xC237 }, -{ 0xC238, 0xC238, 0xC238 }, -{ 0xC239, 0xC239, 0xC239 }, -{ 0xC23A, 0xC23A, 0xC23A }, -{ 0xC23B, 0xC23B, 0xC23B }, -{ 0xC23C, 0xC23C, 0xC23C }, -{ 0xC23D, 0xC23D, 0xC23D }, -{ 0xC23E, 0xC23E, 0xC23E }, -{ 0xC23F, 0xC23F, 0xC23F }, -{ 0xC240, 0xC240, 0xC240 }, -{ 0xC241, 0xC241, 0xC241 }, -{ 0xC242, 0xC242, 0xC242 }, -{ 0xC243, 0xC243, 0xC243 }, -{ 0xC244, 0xC244, 0xC244 }, -{ 0xC245, 0xC245, 0xC245 }, -{ 0xC246, 0xC246, 0xC246 }, -{ 0xC247, 0xC247, 0xC247 }, -{ 0xC248, 0xC248, 0xC248 }, -{ 0xC249, 0xC249, 0xC249 }, -{ 0xC24A, 0xC24A, 0xC24A }, -{ 0xC24B, 0xC24B, 0xC24B }, -{ 0xC24C, 0xC24C, 0xC24C }, -{ 0xC24D, 0xC24D, 0xC24D }, -{ 0xC24E, 0xC24E, 0xC24E }, -{ 0xC24F, 0xC24F, 0xC24F }, -{ 0xC250, 0xC250, 0xC250 }, -{ 0xC251, 0xC251, 0xC251 }, -{ 0xC252, 0xC252, 0xC252 }, -{ 0xC253, 0xC253, 0xC253 }, -{ 0xC254, 0xC254, 0xC254 }, -{ 0xC255, 0xC255, 0xC255 }, -{ 0xC256, 0xC256, 0xC256 }, -{ 0xC257, 0xC257, 0xC257 }, -{ 0xC258, 0xC258, 0xC258 }, -{ 0xC259, 0xC259, 0xC259 }, -{ 0xC25A, 0xC25A, 0xC25A }, -{ 0xC25B, 0xC25B, 0xC25B }, -{ 0xC25C, 0xC25C, 0xC25C }, -{ 0xC25D, 0xC25D, 0xC25D }, -{ 0xC25E, 0xC25E, 0xC25E }, -{ 0xC25F, 0xC25F, 0xC25F }, -{ 0xC260, 0xC260, 0xC260 }, -{ 0xC261, 0xC261, 0xC261 }, -{ 0xC262, 0xC262, 0xC262 }, -{ 0xC263, 0xC263, 0xC263 }, -{ 0xC264, 0xC264, 0xC264 }, -{ 0xC265, 0xC265, 0xC265 }, -{ 0xC266, 0xC266, 0xC266 }, -{ 0xC267, 0xC267, 0xC267 }, -{ 0xC268, 0xC268, 0xC268 }, -{ 0xC269, 0xC269, 0xC269 }, -{ 0xC26A, 0xC26A, 0xC26A }, -{ 0xC26B, 0xC26B, 0xC26B }, -{ 0xC26C, 0xC26C, 0xC26C }, -{ 0xC26D, 0xC26D, 0xC26D }, -{ 0xC26E, 0xC26E, 0xC26E }, -{ 0xC26F, 0xC26F, 0xC26F }, -{ 0xC270, 0xC270, 0xC270 }, -{ 0xC271, 0xC271, 0xC271 }, -{ 0xC272, 0xC272, 0xC272 }, -{ 0xC273, 0xC273, 0xC273 }, -{ 0xC274, 0xC274, 0xC274 }, -{ 0xC275, 0xC275, 0xC275 }, -{ 0xC276, 0xC276, 0xC276 }, -{ 0xC277, 0xC277, 0xC277 }, -{ 0xC278, 0xC278, 0xC278 }, -{ 0xC279, 0xC279, 0xC279 }, -{ 0xC27A, 0xC27A, 0xC27A }, -{ 0xC27B, 0xC27B, 0xC27B }, -{ 0xC27C, 0xC27C, 0xC27C }, -{ 0xC27D, 0xC27D, 0xC27D }, -{ 0xC27E, 0xC27E, 0xC27E }, -{ 0xC27F, 0xC27F, 0xC27F }, -{ 0xC280, 0xC280, 0xC280 }, -{ 0xC281, 0xC281, 0xC281 }, -{ 0xC282, 0xC282, 0xC282 }, -{ 0xC283, 0xC283, 0xC283 }, -{ 0xC284, 0xC284, 0xC284 }, -{ 0xC285, 0xC285, 0xC285 }, -{ 0xC286, 0xC286, 0xC286 }, -{ 0xC287, 0xC287, 0xC287 }, -{ 0xC288, 0xC288, 0xC288 }, -{ 0xC289, 0xC289, 0xC289 }, -{ 0xC28A, 0xC28A, 0xC28A }, -{ 0xC28B, 0xC28B, 0xC28B }, -{ 0xC28C, 0xC28C, 0xC28C }, -{ 0xC28D, 0xC28D, 0xC28D }, -{ 0xC28E, 0xC28E, 0xC28E }, -{ 0xC28F, 0xC28F, 0xC28F }, -{ 0xC290, 0xC290, 0xC290 }, -{ 0xC291, 0xC291, 0xC291 }, -{ 0xC292, 0xC292, 0xC292 }, -{ 0xC293, 0xC293, 0xC293 }, -{ 0xC294, 0xC294, 0xC294 }, -{ 0xC295, 0xC295, 0xC295 }, -{ 0xC296, 0xC296, 0xC296 }, -{ 0xC297, 0xC297, 0xC297 }, -{ 0xC298, 0xC298, 0xC298 }, -{ 0xC299, 0xC299, 0xC299 }, -{ 0xC29A, 0xC29A, 0xC29A }, -{ 0xC29B, 0xC29B, 0xC29B }, -{ 0xC29C, 0xC29C, 0xC29C }, -{ 0xC29D, 0xC29D, 0xC29D }, -{ 0xC29E, 0xC29E, 0xC29E }, -{ 0xC29F, 0xC29F, 0xC29F }, -{ 0xC2A0, 0xC2A0, 0xC2A0 }, -{ 0xC2A1, 0xC2A1, 0xC2A1 }, -{ 0xC2A2, 0xC2A2, 0xC2A2 }, -{ 0xC2A3, 0xC2A3, 0xC2A3 }, -{ 0xC2A4, 0xC2A4, 0xC2A4 }, -{ 0xC2A5, 0xC2A5, 0xC2A5 }, -{ 0xC2A6, 0xC2A6, 0xC2A6 }, -{ 0xC2A7, 0xC2A7, 0xC2A7 }, -{ 0xC2A8, 0xC2A8, 0xC2A8 }, -{ 0xC2A9, 0xC2A9, 0xC2A9 }, -{ 0xC2AA, 0xC2AA, 0xC2AA }, -{ 0xC2AB, 0xC2AB, 0xC2AB }, -{ 0xC2AC, 0xC2AC, 0xC2AC }, -{ 0xC2AD, 0xC2AD, 0xC2AD }, -{ 0xC2AE, 0xC2AE, 0xC2AE }, -{ 0xC2AF, 0xC2AF, 0xC2AF }, -{ 0xC2B0, 0xC2B0, 0xC2B0 }, -{ 0xC2B1, 0xC2B1, 0xC2B1 }, -{ 0xC2B2, 0xC2B2, 0xC2B2 }, -{ 0xC2B3, 0xC2B3, 0xC2B3 }, -{ 0xC2B4, 0xC2B4, 0xC2B4 }, -{ 0xC2B5, 0xC2B5, 0xC2B5 }, -{ 0xC2B6, 0xC2B6, 0xC2B6 }, -{ 0xC2B7, 0xC2B7, 0xC2B7 }, -{ 0xC2B8, 0xC2B8, 0xC2B8 }, -{ 0xC2B9, 0xC2B9, 0xC2B9 }, -{ 0xC2BA, 0xC2BA, 0xC2BA }, -{ 0xC2BB, 0xC2BB, 0xC2BB }, -{ 0xC2BC, 0xC2BC, 0xC2BC }, -{ 0xC2BD, 0xC2BD, 0xC2BD }, -{ 0xC2BE, 0xC2BE, 0xC2BE }, -{ 0xC2BF, 0xC2BF, 0xC2BF }, -{ 0xC2C0, 0xC2C0, 0xC2C0 }, -{ 0xC2C1, 0xC2C1, 0xC2C1 }, -{ 0xC2C2, 0xC2C2, 0xC2C2 }, -{ 0xC2C3, 0xC2C3, 0xC2C3 }, -{ 0xC2C4, 0xC2C4, 0xC2C4 }, -{ 0xC2C5, 0xC2C5, 0xC2C5 }, -{ 0xC2C6, 0xC2C6, 0xC2C6 }, -{ 0xC2C7, 0xC2C7, 0xC2C7 }, -{ 0xC2C8, 0xC2C8, 0xC2C8 }, -{ 0xC2C9, 0xC2C9, 0xC2C9 }, -{ 0xC2CA, 0xC2CA, 0xC2CA }, -{ 0xC2CB, 0xC2CB, 0xC2CB }, -{ 0xC2CC, 0xC2CC, 0xC2CC }, -{ 0xC2CD, 0xC2CD, 0xC2CD }, -{ 0xC2CE, 0xC2CE, 0xC2CE }, -{ 0xC2CF, 0xC2CF, 0xC2CF }, -{ 0xC2D0, 0xC2D0, 0xC2D0 }, -{ 0xC2D1, 0xC2D1, 0xC2D1 }, -{ 0xC2D2, 0xC2D2, 0xC2D2 }, -{ 0xC2D3, 0xC2D3, 0xC2D3 }, -{ 0xC2D4, 0xC2D4, 0xC2D4 }, -{ 0xC2D5, 0xC2D5, 0xC2D5 }, -{ 0xC2D6, 0xC2D6, 0xC2D6 }, -{ 0xC2D7, 0xC2D7, 0xC2D7 }, -{ 0xC2D8, 0xC2D8, 0xC2D8 }, -{ 0xC2D9, 0xC2D9, 0xC2D9 }, -{ 0xC2DA, 0xC2DA, 0xC2DA }, -{ 0xC2DB, 0xC2DB, 0xC2DB }, -{ 0xC2DC, 0xC2DC, 0xC2DC }, -{ 0xC2DD, 0xC2DD, 0xC2DD }, -{ 0xC2DE, 0xC2DE, 0xC2DE }, -{ 0xC2DF, 0xC2DF, 0xC2DF }, -{ 0xC2E0, 0xC2E0, 0xC2E0 }, -{ 0xC2E1, 0xC2E1, 0xC2E1 }, -{ 0xC2E2, 0xC2E2, 0xC2E2 }, -{ 0xC2E3, 0xC2E3, 0xC2E3 }, -{ 0xC2E4, 0xC2E4, 0xC2E4 }, -{ 0xC2E5, 0xC2E5, 0xC2E5 }, -{ 0xC2E6, 0xC2E6, 0xC2E6 }, -{ 0xC2E7, 0xC2E7, 0xC2E7 }, -{ 0xC2E8, 0xC2E8, 0xC2E8 }, -{ 0xC2E9, 0xC2E9, 0xC2E9 }, -{ 0xC2EA, 0xC2EA, 0xC2EA }, -{ 0xC2EB, 0xC2EB, 0xC2EB }, -{ 0xC2EC, 0xC2EC, 0xC2EC }, -{ 0xC2ED, 0xC2ED, 0xC2ED }, -{ 0xC2EE, 0xC2EE, 0xC2EE }, -{ 0xC2EF, 0xC2EF, 0xC2EF }, -{ 0xC2F0, 0xC2F0, 0xC2F0 }, -{ 0xC2F1, 0xC2F1, 0xC2F1 }, -{ 0xC2F2, 0xC2F2, 0xC2F2 }, -{ 0xC2F3, 0xC2F3, 0xC2F3 }, -{ 0xC2F4, 0xC2F4, 0xC2F4 }, -{ 0xC2F5, 0xC2F5, 0xC2F5 }, -{ 0xC2F6, 0xC2F6, 0xC2F6 }, -{ 0xC2F7, 0xC2F7, 0xC2F7 }, -{ 0xC2F8, 0xC2F8, 0xC2F8 }, -{ 0xC2F9, 0xC2F9, 0xC2F9 }, -{ 0xC2FA, 0xC2FA, 0xC2FA }, -{ 0xC2FB, 0xC2FB, 0xC2FB }, -{ 0xC2FC, 0xC2FC, 0xC2FC }, -{ 0xC2FD, 0xC2FD, 0xC2FD }, -{ 0xC2FE, 0xC2FE, 0xC2FE }, -{ 0xC2FF, 0xC2FF, 0xC2FF }, -{ 0xC300, 0xC300, 0xC300 }, -{ 0xC301, 0xC301, 0xC301 }, -{ 0xC302, 0xC302, 0xC302 }, -{ 0xC303, 0xC303, 0xC303 }, -{ 0xC304, 0xC304, 0xC304 }, -{ 0xC305, 0xC305, 0xC305 }, -{ 0xC306, 0xC306, 0xC306 }, -{ 0xC307, 0xC307, 0xC307 }, -{ 0xC308, 0xC308, 0xC308 }, -{ 0xC309, 0xC309, 0xC309 }, -{ 0xC30A, 0xC30A, 0xC30A }, -{ 0xC30B, 0xC30B, 0xC30B }, -{ 0xC30C, 0xC30C, 0xC30C }, -{ 0xC30D, 0xC30D, 0xC30D }, -{ 0xC30E, 0xC30E, 0xC30E }, -{ 0xC30F, 0xC30F, 0xC30F }, -{ 0xC310, 0xC310, 0xC310 }, -{ 0xC311, 0xC311, 0xC311 }, -{ 0xC312, 0xC312, 0xC312 }, -{ 0xC313, 0xC313, 0xC313 }, -{ 0xC314, 0xC314, 0xC314 }, -{ 0xC315, 0xC315, 0xC315 }, -{ 0xC316, 0xC316, 0xC316 }, -{ 0xC317, 0xC317, 0xC317 }, -{ 0xC318, 0xC318, 0xC318 }, -{ 0xC319, 0xC319, 0xC319 }, -{ 0xC31A, 0xC31A, 0xC31A }, -{ 0xC31B, 0xC31B, 0xC31B }, -{ 0xC31C, 0xC31C, 0xC31C }, -{ 0xC31D, 0xC31D, 0xC31D }, -{ 0xC31E, 0xC31E, 0xC31E }, -{ 0xC31F, 0xC31F, 0xC31F }, -{ 0xC320, 0xC320, 0xC320 }, -{ 0xC321, 0xC321, 0xC321 }, -{ 0xC322, 0xC322, 0xC322 }, -{ 0xC323, 0xC323, 0xC323 }, -{ 0xC324, 0xC324, 0xC324 }, -{ 0xC325, 0xC325, 0xC325 }, -{ 0xC326, 0xC326, 0xC326 }, -{ 0xC327, 0xC327, 0xC327 }, -{ 0xC328, 0xC328, 0xC328 }, -{ 0xC329, 0xC329, 0xC329 }, -{ 0xC32A, 0xC32A, 0xC32A }, -{ 0xC32B, 0xC32B, 0xC32B }, -{ 0xC32C, 0xC32C, 0xC32C }, -{ 0xC32D, 0xC32D, 0xC32D }, -{ 0xC32E, 0xC32E, 0xC32E }, -{ 0xC32F, 0xC32F, 0xC32F }, -{ 0xC330, 0xC330, 0xC330 }, -{ 0xC331, 0xC331, 0xC331 }, -{ 0xC332, 0xC332, 0xC332 }, -{ 0xC333, 0xC333, 0xC333 }, -{ 0xC334, 0xC334, 0xC334 }, -{ 0xC335, 0xC335, 0xC335 }, -{ 0xC336, 0xC336, 0xC336 }, -{ 0xC337, 0xC337, 0xC337 }, -{ 0xC338, 0xC338, 0xC338 }, -{ 0xC339, 0xC339, 0xC339 }, -{ 0xC33A, 0xC33A, 0xC33A }, -{ 0xC33B, 0xC33B, 0xC33B }, -{ 0xC33C, 0xC33C, 0xC33C }, -{ 0xC33D, 0xC33D, 0xC33D }, -{ 0xC33E, 0xC33E, 0xC33E }, -{ 0xC33F, 0xC33F, 0xC33F }, -{ 0xC340, 0xC340, 0xC340 }, -{ 0xC341, 0xC341, 0xC341 }, -{ 0xC342, 0xC342, 0xC342 }, -{ 0xC343, 0xC343, 0xC343 }, -{ 0xC344, 0xC344, 0xC344 }, -{ 0xC345, 0xC345, 0xC345 }, -{ 0xC346, 0xC346, 0xC346 }, -{ 0xC347, 0xC347, 0xC347 }, -{ 0xC348, 0xC348, 0xC348 }, -{ 0xC349, 0xC349, 0xC349 }, -{ 0xC34A, 0xC34A, 0xC34A }, -{ 0xC34B, 0xC34B, 0xC34B }, -{ 0xC34C, 0xC34C, 0xC34C }, -{ 0xC34D, 0xC34D, 0xC34D }, -{ 0xC34E, 0xC34E, 0xC34E }, -{ 0xC34F, 0xC34F, 0xC34F }, -{ 0xC350, 0xC350, 0xC350 }, -{ 0xC351, 0xC351, 0xC351 }, -{ 0xC352, 0xC352, 0xC352 }, -{ 0xC353, 0xC353, 0xC353 }, -{ 0xC354, 0xC354, 0xC354 }, -{ 0xC355, 0xC355, 0xC355 }, -{ 0xC356, 0xC356, 0xC356 }, -{ 0xC357, 0xC357, 0xC357 }, -{ 0xC358, 0xC358, 0xC358 }, -{ 0xC359, 0xC359, 0xC359 }, -{ 0xC35A, 0xC35A, 0xC35A }, -{ 0xC35B, 0xC35B, 0xC35B }, -{ 0xC35C, 0xC35C, 0xC35C }, -{ 0xC35D, 0xC35D, 0xC35D }, -{ 0xC35E, 0xC35E, 0xC35E }, -{ 0xC35F, 0xC35F, 0xC35F }, -{ 0xC360, 0xC360, 0xC360 }, -{ 0xC361, 0xC361, 0xC361 }, -{ 0xC362, 0xC362, 0xC362 }, -{ 0xC363, 0xC363, 0xC363 }, -{ 0xC364, 0xC364, 0xC364 }, -{ 0xC365, 0xC365, 0xC365 }, -{ 0xC366, 0xC366, 0xC366 }, -{ 0xC367, 0xC367, 0xC367 }, -{ 0xC368, 0xC368, 0xC368 }, -{ 0xC369, 0xC369, 0xC369 }, -{ 0xC36A, 0xC36A, 0xC36A }, -{ 0xC36B, 0xC36B, 0xC36B }, -{ 0xC36C, 0xC36C, 0xC36C }, -{ 0xC36D, 0xC36D, 0xC36D }, -{ 0xC36E, 0xC36E, 0xC36E }, -{ 0xC36F, 0xC36F, 0xC36F }, -{ 0xC370, 0xC370, 0xC370 }, -{ 0xC371, 0xC371, 0xC371 }, -{ 0xC372, 0xC372, 0xC372 }, -{ 0xC373, 0xC373, 0xC373 }, -{ 0xC374, 0xC374, 0xC374 }, -{ 0xC375, 0xC375, 0xC375 }, -{ 0xC376, 0xC376, 0xC376 }, -{ 0xC377, 0xC377, 0xC377 }, -{ 0xC378, 0xC378, 0xC378 }, -{ 0xC379, 0xC379, 0xC379 }, -{ 0xC37A, 0xC37A, 0xC37A }, -{ 0xC37B, 0xC37B, 0xC37B }, -{ 0xC37C, 0xC37C, 0xC37C }, -{ 0xC37D, 0xC37D, 0xC37D }, -{ 0xC37E, 0xC37E, 0xC37E }, -{ 0xC37F, 0xC37F, 0xC37F }, -{ 0xC380, 0xC380, 0xC380 }, -{ 0xC381, 0xC381, 0xC381 }, -{ 0xC382, 0xC382, 0xC382 }, -{ 0xC383, 0xC383, 0xC383 }, -{ 0xC384, 0xC384, 0xC384 }, -{ 0xC385, 0xC385, 0xC385 }, -{ 0xC386, 0xC386, 0xC386 }, -{ 0xC387, 0xC387, 0xC387 }, -{ 0xC388, 0xC388, 0xC388 }, -{ 0xC389, 0xC389, 0xC389 }, -{ 0xC38A, 0xC38A, 0xC38A }, -{ 0xC38B, 0xC38B, 0xC38B }, -{ 0xC38C, 0xC38C, 0xC38C }, -{ 0xC38D, 0xC38D, 0xC38D }, -{ 0xC38E, 0xC38E, 0xC38E }, -{ 0xC38F, 0xC38F, 0xC38F }, -{ 0xC390, 0xC390, 0xC390 }, -{ 0xC391, 0xC391, 0xC391 }, -{ 0xC392, 0xC392, 0xC392 }, -{ 0xC393, 0xC393, 0xC393 }, -{ 0xC394, 0xC394, 0xC394 }, -{ 0xC395, 0xC395, 0xC395 }, -{ 0xC396, 0xC396, 0xC396 }, -{ 0xC397, 0xC397, 0xC397 }, -{ 0xC398, 0xC398, 0xC398 }, -{ 0xC399, 0xC399, 0xC399 }, -{ 0xC39A, 0xC39A, 0xC39A }, -{ 0xC39B, 0xC39B, 0xC39B }, -{ 0xC39C, 0xC39C, 0xC39C }, -{ 0xC39D, 0xC39D, 0xC39D }, -{ 0xC39E, 0xC39E, 0xC39E }, -{ 0xC39F, 0xC39F, 0xC39F }, -{ 0xC3A0, 0xC3A0, 0xC3A0 }, -{ 0xC3A1, 0xC3A1, 0xC3A1 }, -{ 0xC3A2, 0xC3A2, 0xC3A2 }, -{ 0xC3A3, 0xC3A3, 0xC3A3 }, -{ 0xC3A4, 0xC3A4, 0xC3A4 }, -{ 0xC3A5, 0xC3A5, 0xC3A5 }, -{ 0xC3A6, 0xC3A6, 0xC3A6 }, -{ 0xC3A7, 0xC3A7, 0xC3A7 }, -{ 0xC3A8, 0xC3A8, 0xC3A8 }, -{ 0xC3A9, 0xC3A9, 0xC3A9 }, -{ 0xC3AA, 0xC3AA, 0xC3AA }, -{ 0xC3AB, 0xC3AB, 0xC3AB }, -{ 0xC3AC, 0xC3AC, 0xC3AC }, -{ 0xC3AD, 0xC3AD, 0xC3AD }, -{ 0xC3AE, 0xC3AE, 0xC3AE }, -{ 0xC3AF, 0xC3AF, 0xC3AF }, -{ 0xC3B0, 0xC3B0, 0xC3B0 }, -{ 0xC3B1, 0xC3B1, 0xC3B1 }, -{ 0xC3B2, 0xC3B2, 0xC3B2 }, -{ 0xC3B3, 0xC3B3, 0xC3B3 }, -{ 0xC3B4, 0xC3B4, 0xC3B4 }, -{ 0xC3B5, 0xC3B5, 0xC3B5 }, -{ 0xC3B6, 0xC3B6, 0xC3B6 }, -{ 0xC3B7, 0xC3B7, 0xC3B7 }, -{ 0xC3B8, 0xC3B8, 0xC3B8 }, -{ 0xC3B9, 0xC3B9, 0xC3B9 }, -{ 0xC3BA, 0xC3BA, 0xC3BA }, -{ 0xC3BB, 0xC3BB, 0xC3BB }, -{ 0xC3BC, 0xC3BC, 0xC3BC }, -{ 0xC3BD, 0xC3BD, 0xC3BD }, -{ 0xC3BE, 0xC3BE, 0xC3BE }, -{ 0xC3BF, 0xC3BF, 0xC3BF }, -{ 0xC3C0, 0xC3C0, 0xC3C0 }, -{ 0xC3C1, 0xC3C1, 0xC3C1 }, -{ 0xC3C2, 0xC3C2, 0xC3C2 }, -{ 0xC3C3, 0xC3C3, 0xC3C3 }, -{ 0xC3C4, 0xC3C4, 0xC3C4 }, -{ 0xC3C5, 0xC3C5, 0xC3C5 }, -{ 0xC3C6, 0xC3C6, 0xC3C6 }, -{ 0xC3C7, 0xC3C7, 0xC3C7 }, -{ 0xC3C8, 0xC3C8, 0xC3C8 }, -{ 0xC3C9, 0xC3C9, 0xC3C9 }, -{ 0xC3CA, 0xC3CA, 0xC3CA }, -{ 0xC3CB, 0xC3CB, 0xC3CB }, -{ 0xC3CC, 0xC3CC, 0xC3CC }, -{ 0xC3CD, 0xC3CD, 0xC3CD }, -{ 0xC3CE, 0xC3CE, 0xC3CE }, -{ 0xC3CF, 0xC3CF, 0xC3CF }, -{ 0xC3D0, 0xC3D0, 0xC3D0 }, -{ 0xC3D1, 0xC3D1, 0xC3D1 }, -{ 0xC3D2, 0xC3D2, 0xC3D2 }, -{ 0xC3D3, 0xC3D3, 0xC3D3 }, -{ 0xC3D4, 0xC3D4, 0xC3D4 }, -{ 0xC3D5, 0xC3D5, 0xC3D5 }, -{ 0xC3D6, 0xC3D6, 0xC3D6 }, -{ 0xC3D7, 0xC3D7, 0xC3D7 }, -{ 0xC3D8, 0xC3D8, 0xC3D8 }, -{ 0xC3D9, 0xC3D9, 0xC3D9 }, -{ 0xC3DA, 0xC3DA, 0xC3DA }, -{ 0xC3DB, 0xC3DB, 0xC3DB }, -{ 0xC3DC, 0xC3DC, 0xC3DC }, -{ 0xC3DD, 0xC3DD, 0xC3DD }, -{ 0xC3DE, 0xC3DE, 0xC3DE }, -{ 0xC3DF, 0xC3DF, 0xC3DF }, -{ 0xC3E0, 0xC3E0, 0xC3E0 }, -{ 0xC3E1, 0xC3E1, 0xC3E1 }, -{ 0xC3E2, 0xC3E2, 0xC3E2 }, -{ 0xC3E3, 0xC3E3, 0xC3E3 }, -{ 0xC3E4, 0xC3E4, 0xC3E4 }, -{ 0xC3E5, 0xC3E5, 0xC3E5 }, -{ 0xC3E6, 0xC3E6, 0xC3E6 }, -{ 0xC3E7, 0xC3E7, 0xC3E7 }, -{ 0xC3E8, 0xC3E8, 0xC3E8 }, -{ 0xC3E9, 0xC3E9, 0xC3E9 }, -{ 0xC3EA, 0xC3EA, 0xC3EA }, -{ 0xC3EB, 0xC3EB, 0xC3EB }, -{ 0xC3EC, 0xC3EC, 0xC3EC }, -{ 0xC3ED, 0xC3ED, 0xC3ED }, -{ 0xC3EE, 0xC3EE, 0xC3EE }, -{ 0xC3EF, 0xC3EF, 0xC3EF }, -{ 0xC3F0, 0xC3F0, 0xC3F0 }, -{ 0xC3F1, 0xC3F1, 0xC3F1 }, -{ 0xC3F2, 0xC3F2, 0xC3F2 }, -{ 0xC3F3, 0xC3F3, 0xC3F3 }, -{ 0xC3F4, 0xC3F4, 0xC3F4 }, -{ 0xC3F5, 0xC3F5, 0xC3F5 }, -{ 0xC3F6, 0xC3F6, 0xC3F6 }, -{ 0xC3F7, 0xC3F7, 0xC3F7 }, -{ 0xC3F8, 0xC3F8, 0xC3F8 }, -{ 0xC3F9, 0xC3F9, 0xC3F9 }, -{ 0xC3FA, 0xC3FA, 0xC3FA }, -{ 0xC3FB, 0xC3FB, 0xC3FB }, -{ 0xC3FC, 0xC3FC, 0xC3FC }, -{ 0xC3FD, 0xC3FD, 0xC3FD }, -{ 0xC3FE, 0xC3FE, 0xC3FE }, -{ 0xC3FF, 0xC3FF, 0xC3FF }, -{ 0xC400, 0xC400, 0xC400 }, -{ 0xC401, 0xC401, 0xC401 }, -{ 0xC402, 0xC402, 0xC402 }, -{ 0xC403, 0xC403, 0xC403 }, -{ 0xC404, 0xC404, 0xC404 }, -{ 0xC405, 0xC405, 0xC405 }, -{ 0xC406, 0xC406, 0xC406 }, -{ 0xC407, 0xC407, 0xC407 }, -{ 0xC408, 0xC408, 0xC408 }, -{ 0xC409, 0xC409, 0xC409 }, -{ 0xC40A, 0xC40A, 0xC40A }, -{ 0xC40B, 0xC40B, 0xC40B }, -{ 0xC40C, 0xC40C, 0xC40C }, -{ 0xC40D, 0xC40D, 0xC40D }, -{ 0xC40E, 0xC40E, 0xC40E }, -{ 0xC40F, 0xC40F, 0xC40F }, -{ 0xC410, 0xC410, 0xC410 }, -{ 0xC411, 0xC411, 0xC411 }, -{ 0xC412, 0xC412, 0xC412 }, -{ 0xC413, 0xC413, 0xC413 }, -{ 0xC414, 0xC414, 0xC414 }, -{ 0xC415, 0xC415, 0xC415 }, -{ 0xC416, 0xC416, 0xC416 }, -{ 0xC417, 0xC417, 0xC417 }, -{ 0xC418, 0xC418, 0xC418 }, -{ 0xC419, 0xC419, 0xC419 }, -{ 0xC41A, 0xC41A, 0xC41A }, -{ 0xC41B, 0xC41B, 0xC41B }, -{ 0xC41C, 0xC41C, 0xC41C }, -{ 0xC41D, 0xC41D, 0xC41D }, -{ 0xC41E, 0xC41E, 0xC41E }, -{ 0xC41F, 0xC41F, 0xC41F }, -{ 0xC420, 0xC420, 0xC420 }, -{ 0xC421, 0xC421, 0xC421 }, -{ 0xC422, 0xC422, 0xC422 }, -{ 0xC423, 0xC423, 0xC423 }, -{ 0xC424, 0xC424, 0xC424 }, -{ 0xC425, 0xC425, 0xC425 }, -{ 0xC426, 0xC426, 0xC426 }, -{ 0xC427, 0xC427, 0xC427 }, -{ 0xC428, 0xC428, 0xC428 }, -{ 0xC429, 0xC429, 0xC429 }, -{ 0xC42A, 0xC42A, 0xC42A }, -{ 0xC42B, 0xC42B, 0xC42B }, -{ 0xC42C, 0xC42C, 0xC42C }, -{ 0xC42D, 0xC42D, 0xC42D }, -{ 0xC42E, 0xC42E, 0xC42E }, -{ 0xC42F, 0xC42F, 0xC42F }, -{ 0xC430, 0xC430, 0xC430 }, -{ 0xC431, 0xC431, 0xC431 }, -{ 0xC432, 0xC432, 0xC432 }, -{ 0xC433, 0xC433, 0xC433 }, -{ 0xC434, 0xC434, 0xC434 }, -{ 0xC435, 0xC435, 0xC435 }, -{ 0xC436, 0xC436, 0xC436 }, -{ 0xC437, 0xC437, 0xC437 }, -{ 0xC438, 0xC438, 0xC438 }, -{ 0xC439, 0xC439, 0xC439 }, -{ 0xC43A, 0xC43A, 0xC43A }, -{ 0xC43B, 0xC43B, 0xC43B }, -{ 0xC43C, 0xC43C, 0xC43C }, -{ 0xC43D, 0xC43D, 0xC43D }, -{ 0xC43E, 0xC43E, 0xC43E }, -{ 0xC43F, 0xC43F, 0xC43F }, -{ 0xC440, 0xC440, 0xC440 }, -{ 0xC441, 0xC441, 0xC441 }, -{ 0xC442, 0xC442, 0xC442 }, -{ 0xC443, 0xC443, 0xC443 }, -{ 0xC444, 0xC444, 0xC444 }, -{ 0xC445, 0xC445, 0xC445 }, -{ 0xC446, 0xC446, 0xC446 }, -{ 0xC447, 0xC447, 0xC447 }, -{ 0xC448, 0xC448, 0xC448 }, -{ 0xC449, 0xC449, 0xC449 }, -{ 0xC44A, 0xC44A, 0xC44A }, -{ 0xC44B, 0xC44B, 0xC44B }, -{ 0xC44C, 0xC44C, 0xC44C }, -{ 0xC44D, 0xC44D, 0xC44D }, -{ 0xC44E, 0xC44E, 0xC44E }, -{ 0xC44F, 0xC44F, 0xC44F }, -{ 0xC450, 0xC450, 0xC450 }, -{ 0xC451, 0xC451, 0xC451 }, -{ 0xC452, 0xC452, 0xC452 }, -{ 0xC453, 0xC453, 0xC453 }, -{ 0xC454, 0xC454, 0xC454 }, -{ 0xC455, 0xC455, 0xC455 }, -{ 0xC456, 0xC456, 0xC456 }, -{ 0xC457, 0xC457, 0xC457 }, -{ 0xC458, 0xC458, 0xC458 }, -{ 0xC459, 0xC459, 0xC459 }, -{ 0xC45A, 0xC45A, 0xC45A }, -{ 0xC45B, 0xC45B, 0xC45B }, -{ 0xC45C, 0xC45C, 0xC45C }, -{ 0xC45D, 0xC45D, 0xC45D }, -{ 0xC45E, 0xC45E, 0xC45E }, -{ 0xC45F, 0xC45F, 0xC45F }, -{ 0xC460, 0xC460, 0xC460 }, -{ 0xC461, 0xC461, 0xC461 }, -{ 0xC462, 0xC462, 0xC462 }, -{ 0xC463, 0xC463, 0xC463 }, -{ 0xC464, 0xC464, 0xC464 }, -{ 0xC465, 0xC465, 0xC465 }, -{ 0xC466, 0xC466, 0xC466 }, -{ 0xC467, 0xC467, 0xC467 }, -{ 0xC468, 0xC468, 0xC468 }, -{ 0xC469, 0xC469, 0xC469 }, -{ 0xC46A, 0xC46A, 0xC46A }, -{ 0xC46B, 0xC46B, 0xC46B }, -{ 0xC46C, 0xC46C, 0xC46C }, -{ 0xC46D, 0xC46D, 0xC46D }, -{ 0xC46E, 0xC46E, 0xC46E }, -{ 0xC46F, 0xC46F, 0xC46F }, -{ 0xC470, 0xC470, 0xC470 }, -{ 0xC471, 0xC471, 0xC471 }, -{ 0xC472, 0xC472, 0xC472 }, -{ 0xC473, 0xC473, 0xC473 }, -{ 0xC474, 0xC474, 0xC474 }, -{ 0xC475, 0xC475, 0xC475 }, -{ 0xC476, 0xC476, 0xC476 }, -{ 0xC477, 0xC477, 0xC477 }, -{ 0xC478, 0xC478, 0xC478 }, -{ 0xC479, 0xC479, 0xC479 }, -{ 0xC47A, 0xC47A, 0xC47A }, -{ 0xC47B, 0xC47B, 0xC47B }, -{ 0xC47C, 0xC47C, 0xC47C }, -{ 0xC47D, 0xC47D, 0xC47D }, -{ 0xC47E, 0xC47E, 0xC47E }, -{ 0xC47F, 0xC47F, 0xC47F }, -{ 0xC480, 0xC480, 0xC480 }, -{ 0xC481, 0xC481, 0xC481 }, -{ 0xC482, 0xC482, 0xC482 }, -{ 0xC483, 0xC483, 0xC483 }, -{ 0xC484, 0xC484, 0xC484 }, -{ 0xC485, 0xC485, 0xC485 }, -{ 0xC486, 0xC486, 0xC486 }, -{ 0xC487, 0xC487, 0xC487 }, -{ 0xC488, 0xC488, 0xC488 }, -{ 0xC489, 0xC489, 0xC489 }, -{ 0xC48A, 0xC48A, 0xC48A }, -{ 0xC48B, 0xC48B, 0xC48B }, -{ 0xC48C, 0xC48C, 0xC48C }, -{ 0xC48D, 0xC48D, 0xC48D }, -{ 0xC48E, 0xC48E, 0xC48E }, -{ 0xC48F, 0xC48F, 0xC48F }, -{ 0xC490, 0xC490, 0xC490 }, -{ 0xC491, 0xC491, 0xC491 }, -{ 0xC492, 0xC492, 0xC492 }, -{ 0xC493, 0xC493, 0xC493 }, -{ 0xC494, 0xC494, 0xC494 }, -{ 0xC495, 0xC495, 0xC495 }, -{ 0xC496, 0xC496, 0xC496 }, -{ 0xC497, 0xC497, 0xC497 }, -{ 0xC498, 0xC498, 0xC498 }, -{ 0xC499, 0xC499, 0xC499 }, -{ 0xC49A, 0xC49A, 0xC49A }, -{ 0xC49B, 0xC49B, 0xC49B }, -{ 0xC49C, 0xC49C, 0xC49C }, -{ 0xC49D, 0xC49D, 0xC49D }, -{ 0xC49E, 0xC49E, 0xC49E }, -{ 0xC49F, 0xC49F, 0xC49F }, -{ 0xC4A0, 0xC4A0, 0xC4A0 }, -{ 0xC4A1, 0xC4A1, 0xC4A1 }, -{ 0xC4A2, 0xC4A2, 0xC4A2 }, -{ 0xC4A3, 0xC4A3, 0xC4A3 }, -{ 0xC4A4, 0xC4A4, 0xC4A4 }, -{ 0xC4A5, 0xC4A5, 0xC4A5 }, -{ 0xC4A6, 0xC4A6, 0xC4A6 }, -{ 0xC4A7, 0xC4A7, 0xC4A7 }, -{ 0xC4A8, 0xC4A8, 0xC4A8 }, -{ 0xC4A9, 0xC4A9, 0xC4A9 }, -{ 0xC4AA, 0xC4AA, 0xC4AA }, -{ 0xC4AB, 0xC4AB, 0xC4AB }, -{ 0xC4AC, 0xC4AC, 0xC4AC }, -{ 0xC4AD, 0xC4AD, 0xC4AD }, -{ 0xC4AE, 0xC4AE, 0xC4AE }, -{ 0xC4AF, 0xC4AF, 0xC4AF }, -{ 0xC4B0, 0xC4B0, 0xC4B0 }, -{ 0xC4B1, 0xC4B1, 0xC4B1 }, -{ 0xC4B2, 0xC4B2, 0xC4B2 }, -{ 0xC4B3, 0xC4B3, 0xC4B3 }, -{ 0xC4B4, 0xC4B4, 0xC4B4 }, -{ 0xC4B5, 0xC4B5, 0xC4B5 }, -{ 0xC4B6, 0xC4B6, 0xC4B6 }, -{ 0xC4B7, 0xC4B7, 0xC4B7 }, -{ 0xC4B8, 0xC4B8, 0xC4B8 }, -{ 0xC4B9, 0xC4B9, 0xC4B9 }, -{ 0xC4BA, 0xC4BA, 0xC4BA }, -{ 0xC4BB, 0xC4BB, 0xC4BB }, -{ 0xC4BC, 0xC4BC, 0xC4BC }, -{ 0xC4BD, 0xC4BD, 0xC4BD }, -{ 0xC4BE, 0xC4BE, 0xC4BE }, -{ 0xC4BF, 0xC4BF, 0xC4BF }, -{ 0xC4C0, 0xC4C0, 0xC4C0 }, -{ 0xC4C1, 0xC4C1, 0xC4C1 }, -{ 0xC4C2, 0xC4C2, 0xC4C2 }, -{ 0xC4C3, 0xC4C3, 0xC4C3 }, -{ 0xC4C4, 0xC4C4, 0xC4C4 }, -{ 0xC4C5, 0xC4C5, 0xC4C5 }, -{ 0xC4C6, 0xC4C6, 0xC4C6 }, -{ 0xC4C7, 0xC4C7, 0xC4C7 }, -{ 0xC4C8, 0xC4C8, 0xC4C8 }, -{ 0xC4C9, 0xC4C9, 0xC4C9 }, -{ 0xC4CA, 0xC4CA, 0xC4CA }, -{ 0xC4CB, 0xC4CB, 0xC4CB }, -{ 0xC4CC, 0xC4CC, 0xC4CC }, -{ 0xC4CD, 0xC4CD, 0xC4CD }, -{ 0xC4CE, 0xC4CE, 0xC4CE }, -{ 0xC4CF, 0xC4CF, 0xC4CF }, -{ 0xC4D0, 0xC4D0, 0xC4D0 }, -{ 0xC4D1, 0xC4D1, 0xC4D1 }, -{ 0xC4D2, 0xC4D2, 0xC4D2 }, -{ 0xC4D3, 0xC4D3, 0xC4D3 }, -{ 0xC4D4, 0xC4D4, 0xC4D4 }, -{ 0xC4D5, 0xC4D5, 0xC4D5 }, -{ 0xC4D6, 0xC4D6, 0xC4D6 }, -{ 0xC4D7, 0xC4D7, 0xC4D7 }, -{ 0xC4D8, 0xC4D8, 0xC4D8 }, -{ 0xC4D9, 0xC4D9, 0xC4D9 }, -{ 0xC4DA, 0xC4DA, 0xC4DA }, -{ 0xC4DB, 0xC4DB, 0xC4DB }, -{ 0xC4DC, 0xC4DC, 0xC4DC }, -{ 0xC4DD, 0xC4DD, 0xC4DD }, -{ 0xC4DE, 0xC4DE, 0xC4DE }, -{ 0xC4DF, 0xC4DF, 0xC4DF }, -{ 0xC4E0, 0xC4E0, 0xC4E0 }, -{ 0xC4E1, 0xC4E1, 0xC4E1 }, -{ 0xC4E2, 0xC4E2, 0xC4E2 }, -{ 0xC4E3, 0xC4E3, 0xC4E3 }, -{ 0xC4E4, 0xC4E4, 0xC4E4 }, -{ 0xC4E5, 0xC4E5, 0xC4E5 }, -{ 0xC4E6, 0xC4E6, 0xC4E6 }, -{ 0xC4E7, 0xC4E7, 0xC4E7 }, -{ 0xC4E8, 0xC4E8, 0xC4E8 }, -{ 0xC4E9, 0xC4E9, 0xC4E9 }, -{ 0xC4EA, 0xC4EA, 0xC4EA }, -{ 0xC4EB, 0xC4EB, 0xC4EB }, -{ 0xC4EC, 0xC4EC, 0xC4EC }, -{ 0xC4ED, 0xC4ED, 0xC4ED }, -{ 0xC4EE, 0xC4EE, 0xC4EE }, -{ 0xC4EF, 0xC4EF, 0xC4EF }, -{ 0xC4F0, 0xC4F0, 0xC4F0 }, -{ 0xC4F1, 0xC4F1, 0xC4F1 }, -{ 0xC4F2, 0xC4F2, 0xC4F2 }, -{ 0xC4F3, 0xC4F3, 0xC4F3 }, -{ 0xC4F4, 0xC4F4, 0xC4F4 }, -{ 0xC4F5, 0xC4F5, 0xC4F5 }, -{ 0xC4F6, 0xC4F6, 0xC4F6 }, -{ 0xC4F7, 0xC4F7, 0xC4F7 }, -{ 0xC4F8, 0xC4F8, 0xC4F8 }, -{ 0xC4F9, 0xC4F9, 0xC4F9 }, -{ 0xC4FA, 0xC4FA, 0xC4FA }, -{ 0xC4FB, 0xC4FB, 0xC4FB }, -{ 0xC4FC, 0xC4FC, 0xC4FC }, -{ 0xC4FD, 0xC4FD, 0xC4FD }, -{ 0xC4FE, 0xC4FE, 0xC4FE }, -{ 0xC4FF, 0xC4FF, 0xC4FF }, -{ 0xC500, 0xC500, 0xC500 }, -{ 0xC501, 0xC501, 0xC501 }, -{ 0xC502, 0xC502, 0xC502 }, -{ 0xC503, 0xC503, 0xC503 }, -{ 0xC504, 0xC504, 0xC504 }, -{ 0xC505, 0xC505, 0xC505 }, -{ 0xC506, 0xC506, 0xC506 }, -{ 0xC507, 0xC507, 0xC507 }, -{ 0xC508, 0xC508, 0xC508 }, -{ 0xC509, 0xC509, 0xC509 }, -{ 0xC50A, 0xC50A, 0xC50A }, -{ 0xC50B, 0xC50B, 0xC50B }, -{ 0xC50C, 0xC50C, 0xC50C }, -{ 0xC50D, 0xC50D, 0xC50D }, -{ 0xC50E, 0xC50E, 0xC50E }, -{ 0xC50F, 0xC50F, 0xC50F }, -{ 0xC510, 0xC510, 0xC510 }, -{ 0xC511, 0xC511, 0xC511 }, -{ 0xC512, 0xC512, 0xC512 }, -{ 0xC513, 0xC513, 0xC513 }, -{ 0xC514, 0xC514, 0xC514 }, -{ 0xC515, 0xC515, 0xC515 }, -{ 0xC516, 0xC516, 0xC516 }, -{ 0xC517, 0xC517, 0xC517 }, -{ 0xC518, 0xC518, 0xC518 }, -{ 0xC519, 0xC519, 0xC519 }, -{ 0xC51A, 0xC51A, 0xC51A }, -{ 0xC51B, 0xC51B, 0xC51B }, -{ 0xC51C, 0xC51C, 0xC51C }, -{ 0xC51D, 0xC51D, 0xC51D }, -{ 0xC51E, 0xC51E, 0xC51E }, -{ 0xC51F, 0xC51F, 0xC51F }, -{ 0xC520, 0xC520, 0xC520 }, -{ 0xC521, 0xC521, 0xC521 }, -{ 0xC522, 0xC522, 0xC522 }, -{ 0xC523, 0xC523, 0xC523 }, -{ 0xC524, 0xC524, 0xC524 }, -{ 0xC525, 0xC525, 0xC525 }, -{ 0xC526, 0xC526, 0xC526 }, -{ 0xC527, 0xC527, 0xC527 }, -{ 0xC528, 0xC528, 0xC528 }, -{ 0xC529, 0xC529, 0xC529 }, -{ 0xC52A, 0xC52A, 0xC52A }, -{ 0xC52B, 0xC52B, 0xC52B }, -{ 0xC52C, 0xC52C, 0xC52C }, -{ 0xC52D, 0xC52D, 0xC52D }, -{ 0xC52E, 0xC52E, 0xC52E }, -{ 0xC52F, 0xC52F, 0xC52F }, -{ 0xC530, 0xC530, 0xC530 }, -{ 0xC531, 0xC531, 0xC531 }, -{ 0xC532, 0xC532, 0xC532 }, -{ 0xC533, 0xC533, 0xC533 }, -{ 0xC534, 0xC534, 0xC534 }, -{ 0xC535, 0xC535, 0xC535 }, -{ 0xC536, 0xC536, 0xC536 }, -{ 0xC537, 0xC537, 0xC537 }, -{ 0xC538, 0xC538, 0xC538 }, -{ 0xC539, 0xC539, 0xC539 }, -{ 0xC53A, 0xC53A, 0xC53A }, -{ 0xC53B, 0xC53B, 0xC53B }, -{ 0xC53C, 0xC53C, 0xC53C }, -{ 0xC53D, 0xC53D, 0xC53D }, -{ 0xC53E, 0xC53E, 0xC53E }, -{ 0xC53F, 0xC53F, 0xC53F }, -{ 0xC540, 0xC540, 0xC540 }, -{ 0xC541, 0xC541, 0xC541 }, -{ 0xC542, 0xC542, 0xC542 }, -{ 0xC543, 0xC543, 0xC543 }, -{ 0xC544, 0xC544, 0xC544 }, -{ 0xC545, 0xC545, 0xC545 }, -{ 0xC546, 0xC546, 0xC546 }, -{ 0xC547, 0xC547, 0xC547 }, -{ 0xC548, 0xC548, 0xC548 }, -{ 0xC549, 0xC549, 0xC549 }, -{ 0xC54A, 0xC54A, 0xC54A }, -{ 0xC54B, 0xC54B, 0xC54B }, -{ 0xC54C, 0xC54C, 0xC54C }, -{ 0xC54D, 0xC54D, 0xC54D }, -{ 0xC54E, 0xC54E, 0xC54E }, -{ 0xC54F, 0xC54F, 0xC54F }, -{ 0xC550, 0xC550, 0xC550 }, -{ 0xC551, 0xC551, 0xC551 }, -{ 0xC552, 0xC552, 0xC552 }, -{ 0xC553, 0xC553, 0xC553 }, -{ 0xC554, 0xC554, 0xC554 }, -{ 0xC555, 0xC555, 0xC555 }, -{ 0xC556, 0xC556, 0xC556 }, -{ 0xC557, 0xC557, 0xC557 }, -{ 0xC558, 0xC558, 0xC558 }, -{ 0xC559, 0xC559, 0xC559 }, -{ 0xC55A, 0xC55A, 0xC55A }, -{ 0xC55B, 0xC55B, 0xC55B }, -{ 0xC55C, 0xC55C, 0xC55C }, -{ 0xC55D, 0xC55D, 0xC55D }, -{ 0xC55E, 0xC55E, 0xC55E }, -{ 0xC55F, 0xC55F, 0xC55F }, -{ 0xC560, 0xC560, 0xC560 }, -{ 0xC561, 0xC561, 0xC561 }, -{ 0xC562, 0xC562, 0xC562 }, -{ 0xC563, 0xC563, 0xC563 }, -{ 0xC564, 0xC564, 0xC564 }, -{ 0xC565, 0xC565, 0xC565 }, -{ 0xC566, 0xC566, 0xC566 }, -{ 0xC567, 0xC567, 0xC567 }, -{ 0xC568, 0xC568, 0xC568 }, -{ 0xC569, 0xC569, 0xC569 }, -{ 0xC56A, 0xC56A, 0xC56A }, -{ 0xC56B, 0xC56B, 0xC56B }, -{ 0xC56C, 0xC56C, 0xC56C }, -{ 0xC56D, 0xC56D, 0xC56D }, -{ 0xC56E, 0xC56E, 0xC56E }, -{ 0xC56F, 0xC56F, 0xC56F }, -{ 0xC570, 0xC570, 0xC570 }, -{ 0xC571, 0xC571, 0xC571 }, -{ 0xC572, 0xC572, 0xC572 }, -{ 0xC573, 0xC573, 0xC573 }, -{ 0xC574, 0xC574, 0xC574 }, -{ 0xC575, 0xC575, 0xC575 }, -{ 0xC576, 0xC576, 0xC576 }, -{ 0xC577, 0xC577, 0xC577 }, -{ 0xC578, 0xC578, 0xC578 }, -{ 0xC579, 0xC579, 0xC579 }, -{ 0xC57A, 0xC57A, 0xC57A }, -{ 0xC57B, 0xC57B, 0xC57B }, -{ 0xC57C, 0xC57C, 0xC57C }, -{ 0xC57D, 0xC57D, 0xC57D }, -{ 0xC57E, 0xC57E, 0xC57E }, -{ 0xC57F, 0xC57F, 0xC57F }, -{ 0xC580, 0xC580, 0xC580 }, -{ 0xC581, 0xC581, 0xC581 }, -{ 0xC582, 0xC582, 0xC582 }, -{ 0xC583, 0xC583, 0xC583 }, -{ 0xC584, 0xC584, 0xC584 }, -{ 0xC585, 0xC585, 0xC585 }, -{ 0xC586, 0xC586, 0xC586 }, -{ 0xC587, 0xC587, 0xC587 }, -{ 0xC588, 0xC588, 0xC588 }, -{ 0xC589, 0xC589, 0xC589 }, -{ 0xC58A, 0xC58A, 0xC58A }, -{ 0xC58B, 0xC58B, 0xC58B }, -{ 0xC58C, 0xC58C, 0xC58C }, -{ 0xC58D, 0xC58D, 0xC58D }, -{ 0xC58E, 0xC58E, 0xC58E }, -{ 0xC58F, 0xC58F, 0xC58F }, -{ 0xC590, 0xC590, 0xC590 }, -{ 0xC591, 0xC591, 0xC591 }, -{ 0xC592, 0xC592, 0xC592 }, -{ 0xC593, 0xC593, 0xC593 }, -{ 0xC594, 0xC594, 0xC594 }, -{ 0xC595, 0xC595, 0xC595 }, -{ 0xC596, 0xC596, 0xC596 }, -{ 0xC597, 0xC597, 0xC597 }, -{ 0xC598, 0xC598, 0xC598 }, -{ 0xC599, 0xC599, 0xC599 }, -{ 0xC59A, 0xC59A, 0xC59A }, -{ 0xC59B, 0xC59B, 0xC59B }, -{ 0xC59C, 0xC59C, 0xC59C }, -{ 0xC59D, 0xC59D, 0xC59D }, -{ 0xC59E, 0xC59E, 0xC59E }, -{ 0xC59F, 0xC59F, 0xC59F }, -{ 0xC5A0, 0xC5A0, 0xC5A0 }, -{ 0xC5A1, 0xC5A1, 0xC5A1 }, -{ 0xC5A2, 0xC5A2, 0xC5A2 }, -{ 0xC5A3, 0xC5A3, 0xC5A3 }, -{ 0xC5A4, 0xC5A4, 0xC5A4 }, -{ 0xC5A5, 0xC5A5, 0xC5A5 }, -{ 0xC5A6, 0xC5A6, 0xC5A6 }, -{ 0xC5A7, 0xC5A7, 0xC5A7 }, -{ 0xC5A8, 0xC5A8, 0xC5A8 }, -{ 0xC5A9, 0xC5A9, 0xC5A9 }, -{ 0xC5AA, 0xC5AA, 0xC5AA }, -{ 0xC5AB, 0xC5AB, 0xC5AB }, -{ 0xC5AC, 0xC5AC, 0xC5AC }, -{ 0xC5AD, 0xC5AD, 0xC5AD }, -{ 0xC5AE, 0xC5AE, 0xC5AE }, -{ 0xC5AF, 0xC5AF, 0xC5AF }, -{ 0xC5B0, 0xC5B0, 0xC5B0 }, -{ 0xC5B1, 0xC5B1, 0xC5B1 }, -{ 0xC5B2, 0xC5B2, 0xC5B2 }, -{ 0xC5B3, 0xC5B3, 0xC5B3 }, -{ 0xC5B4, 0xC5B4, 0xC5B4 }, -{ 0xC5B5, 0xC5B5, 0xC5B5 }, -{ 0xC5B6, 0xC5B6, 0xC5B6 }, -{ 0xC5B7, 0xC5B7, 0xC5B7 }, -{ 0xC5B8, 0xC5B8, 0xC5B8 }, -{ 0xC5B9, 0xC5B9, 0xC5B9 }, -{ 0xC5BA, 0xC5BA, 0xC5BA }, -{ 0xC5BB, 0xC5BB, 0xC5BB }, -{ 0xC5BC, 0xC5BC, 0xC5BC }, -{ 0xC5BD, 0xC5BD, 0xC5BD }, -{ 0xC5BE, 0xC5BE, 0xC5BE }, -{ 0xC5BF, 0xC5BF, 0xC5BF }, -{ 0xC5C0, 0xC5C0, 0xC5C0 }, -{ 0xC5C1, 0xC5C1, 0xC5C1 }, -{ 0xC5C2, 0xC5C2, 0xC5C2 }, -{ 0xC5C3, 0xC5C3, 0xC5C3 }, -{ 0xC5C4, 0xC5C4, 0xC5C4 }, -{ 0xC5C5, 0xC5C5, 0xC5C5 }, -{ 0xC5C6, 0xC5C6, 0xC5C6 }, -{ 0xC5C7, 0xC5C7, 0xC5C7 }, -{ 0xC5C8, 0xC5C8, 0xC5C8 }, -{ 0xC5C9, 0xC5C9, 0xC5C9 }, -{ 0xC5CA, 0xC5CA, 0xC5CA }, -{ 0xC5CB, 0xC5CB, 0xC5CB }, -{ 0xC5CC, 0xC5CC, 0xC5CC }, -{ 0xC5CD, 0xC5CD, 0xC5CD }, -{ 0xC5CE, 0xC5CE, 0xC5CE }, -{ 0xC5CF, 0xC5CF, 0xC5CF }, -{ 0xC5D0, 0xC5D0, 0xC5D0 }, -{ 0xC5D1, 0xC5D1, 0xC5D1 }, -{ 0xC5D2, 0xC5D2, 0xC5D2 }, -{ 0xC5D3, 0xC5D3, 0xC5D3 }, -{ 0xC5D4, 0xC5D4, 0xC5D4 }, -{ 0xC5D5, 0xC5D5, 0xC5D5 }, -{ 0xC5D6, 0xC5D6, 0xC5D6 }, -{ 0xC5D7, 0xC5D7, 0xC5D7 }, -{ 0xC5D8, 0xC5D8, 0xC5D8 }, -{ 0xC5D9, 0xC5D9, 0xC5D9 }, -{ 0xC5DA, 0xC5DA, 0xC5DA }, -{ 0xC5DB, 0xC5DB, 0xC5DB }, -{ 0xC5DC, 0xC5DC, 0xC5DC }, -{ 0xC5DD, 0xC5DD, 0xC5DD }, -{ 0xC5DE, 0xC5DE, 0xC5DE }, -{ 0xC5DF, 0xC5DF, 0xC5DF }, -{ 0xC5E0, 0xC5E0, 0xC5E0 }, -{ 0xC5E1, 0xC5E1, 0xC5E1 }, -{ 0xC5E2, 0xC5E2, 0xC5E2 }, -{ 0xC5E3, 0xC5E3, 0xC5E3 }, -{ 0xC5E4, 0xC5E4, 0xC5E4 }, -{ 0xC5E5, 0xC5E5, 0xC5E5 }, -{ 0xC5E6, 0xC5E6, 0xC5E6 }, -{ 0xC5E7, 0xC5E7, 0xC5E7 }, -{ 0xC5E8, 0xC5E8, 0xC5E8 }, -{ 0xC5E9, 0xC5E9, 0xC5E9 }, -{ 0xC5EA, 0xC5EA, 0xC5EA }, -{ 0xC5EB, 0xC5EB, 0xC5EB }, -{ 0xC5EC, 0xC5EC, 0xC5EC }, -{ 0xC5ED, 0xC5ED, 0xC5ED }, -{ 0xC5EE, 0xC5EE, 0xC5EE }, -{ 0xC5EF, 0xC5EF, 0xC5EF }, -{ 0xC5F0, 0xC5F0, 0xC5F0 }, -{ 0xC5F1, 0xC5F1, 0xC5F1 }, -{ 0xC5F2, 0xC5F2, 0xC5F2 }, -{ 0xC5F3, 0xC5F3, 0xC5F3 }, -{ 0xC5F4, 0xC5F4, 0xC5F4 }, -{ 0xC5F5, 0xC5F5, 0xC5F5 }, -{ 0xC5F6, 0xC5F6, 0xC5F6 }, -{ 0xC5F7, 0xC5F7, 0xC5F7 }, -{ 0xC5F8, 0xC5F8, 0xC5F8 }, -{ 0xC5F9, 0xC5F9, 0xC5F9 }, -{ 0xC5FA, 0xC5FA, 0xC5FA }, -{ 0xC5FB, 0xC5FB, 0xC5FB }, -{ 0xC5FC, 0xC5FC, 0xC5FC }, -{ 0xC5FD, 0xC5FD, 0xC5FD }, -{ 0xC5FE, 0xC5FE, 0xC5FE }, -{ 0xC5FF, 0xC5FF, 0xC5FF }, -{ 0xC600, 0xC600, 0xC600 }, -{ 0xC601, 0xC601, 0xC601 }, -{ 0xC602, 0xC602, 0xC602 }, -{ 0xC603, 0xC603, 0xC603 }, -{ 0xC604, 0xC604, 0xC604 }, -{ 0xC605, 0xC605, 0xC605 }, -{ 0xC606, 0xC606, 0xC606 }, -{ 0xC607, 0xC607, 0xC607 }, -{ 0xC608, 0xC608, 0xC608 }, -{ 0xC609, 0xC609, 0xC609 }, -{ 0xC60A, 0xC60A, 0xC60A }, -{ 0xC60B, 0xC60B, 0xC60B }, -{ 0xC60C, 0xC60C, 0xC60C }, -{ 0xC60D, 0xC60D, 0xC60D }, -{ 0xC60E, 0xC60E, 0xC60E }, -{ 0xC60F, 0xC60F, 0xC60F }, -{ 0xC610, 0xC610, 0xC610 }, -{ 0xC611, 0xC611, 0xC611 }, -{ 0xC612, 0xC612, 0xC612 }, -{ 0xC613, 0xC613, 0xC613 }, -{ 0xC614, 0xC614, 0xC614 }, -{ 0xC615, 0xC615, 0xC615 }, -{ 0xC616, 0xC616, 0xC616 }, -{ 0xC617, 0xC617, 0xC617 }, -{ 0xC618, 0xC618, 0xC618 }, -{ 0xC619, 0xC619, 0xC619 }, -{ 0xC61A, 0xC61A, 0xC61A }, -{ 0xC61B, 0xC61B, 0xC61B }, -{ 0xC61C, 0xC61C, 0xC61C }, -{ 0xC61D, 0xC61D, 0xC61D }, -{ 0xC61E, 0xC61E, 0xC61E }, -{ 0xC61F, 0xC61F, 0xC61F }, -{ 0xC620, 0xC620, 0xC620 }, -{ 0xC621, 0xC621, 0xC621 }, -{ 0xC622, 0xC622, 0xC622 }, -{ 0xC623, 0xC623, 0xC623 }, -{ 0xC624, 0xC624, 0xC624 }, -{ 0xC625, 0xC625, 0xC625 }, -{ 0xC626, 0xC626, 0xC626 }, -{ 0xC627, 0xC627, 0xC627 }, -{ 0xC628, 0xC628, 0xC628 }, -{ 0xC629, 0xC629, 0xC629 }, -{ 0xC62A, 0xC62A, 0xC62A }, -{ 0xC62B, 0xC62B, 0xC62B }, -{ 0xC62C, 0xC62C, 0xC62C }, -{ 0xC62D, 0xC62D, 0xC62D }, -{ 0xC62E, 0xC62E, 0xC62E }, -{ 0xC62F, 0xC62F, 0xC62F }, -{ 0xC630, 0xC630, 0xC630 }, -{ 0xC631, 0xC631, 0xC631 }, -{ 0xC632, 0xC632, 0xC632 }, -{ 0xC633, 0xC633, 0xC633 }, -{ 0xC634, 0xC634, 0xC634 }, -{ 0xC635, 0xC635, 0xC635 }, -{ 0xC636, 0xC636, 0xC636 }, -{ 0xC637, 0xC637, 0xC637 }, -{ 0xC638, 0xC638, 0xC638 }, -{ 0xC639, 0xC639, 0xC639 }, -{ 0xC63A, 0xC63A, 0xC63A }, -{ 0xC63B, 0xC63B, 0xC63B }, -{ 0xC63C, 0xC63C, 0xC63C }, -{ 0xC63D, 0xC63D, 0xC63D }, -{ 0xC63E, 0xC63E, 0xC63E }, -{ 0xC63F, 0xC63F, 0xC63F }, -{ 0xC640, 0xC640, 0xC640 }, -{ 0xC641, 0xC641, 0xC641 }, -{ 0xC642, 0xC642, 0xC642 }, -{ 0xC643, 0xC643, 0xC643 }, -{ 0xC644, 0xC644, 0xC644 }, -{ 0xC645, 0xC645, 0xC645 }, -{ 0xC646, 0xC646, 0xC646 }, -{ 0xC647, 0xC647, 0xC647 }, -{ 0xC648, 0xC648, 0xC648 }, -{ 0xC649, 0xC649, 0xC649 }, -{ 0xC64A, 0xC64A, 0xC64A }, -{ 0xC64B, 0xC64B, 0xC64B }, -{ 0xC64C, 0xC64C, 0xC64C }, -{ 0xC64D, 0xC64D, 0xC64D }, -{ 0xC64E, 0xC64E, 0xC64E }, -{ 0xC64F, 0xC64F, 0xC64F }, -{ 0xC650, 0xC650, 0xC650 }, -{ 0xC651, 0xC651, 0xC651 }, -{ 0xC652, 0xC652, 0xC652 }, -{ 0xC653, 0xC653, 0xC653 }, -{ 0xC654, 0xC654, 0xC654 }, -{ 0xC655, 0xC655, 0xC655 }, -{ 0xC656, 0xC656, 0xC656 }, -{ 0xC657, 0xC657, 0xC657 }, -{ 0xC658, 0xC658, 0xC658 }, -{ 0xC659, 0xC659, 0xC659 }, -{ 0xC65A, 0xC65A, 0xC65A }, -{ 0xC65B, 0xC65B, 0xC65B }, -{ 0xC65C, 0xC65C, 0xC65C }, -{ 0xC65D, 0xC65D, 0xC65D }, -{ 0xC65E, 0xC65E, 0xC65E }, -{ 0xC65F, 0xC65F, 0xC65F }, -{ 0xC660, 0xC660, 0xC660 }, -{ 0xC661, 0xC661, 0xC661 }, -{ 0xC662, 0xC662, 0xC662 }, -{ 0xC663, 0xC663, 0xC663 }, -{ 0xC664, 0xC664, 0xC664 }, -{ 0xC665, 0xC665, 0xC665 }, -{ 0xC666, 0xC666, 0xC666 }, -{ 0xC667, 0xC667, 0xC667 }, -{ 0xC668, 0xC668, 0xC668 }, -{ 0xC669, 0xC669, 0xC669 }, -{ 0xC66A, 0xC66A, 0xC66A }, -{ 0xC66B, 0xC66B, 0xC66B }, -{ 0xC66C, 0xC66C, 0xC66C }, -{ 0xC66D, 0xC66D, 0xC66D }, -{ 0xC66E, 0xC66E, 0xC66E }, -{ 0xC66F, 0xC66F, 0xC66F }, -{ 0xC670, 0xC670, 0xC670 }, -{ 0xC671, 0xC671, 0xC671 }, -{ 0xC672, 0xC672, 0xC672 }, -{ 0xC673, 0xC673, 0xC673 }, -{ 0xC674, 0xC674, 0xC674 }, -{ 0xC675, 0xC675, 0xC675 }, -{ 0xC676, 0xC676, 0xC676 }, -{ 0xC677, 0xC677, 0xC677 }, -{ 0xC678, 0xC678, 0xC678 }, -{ 0xC679, 0xC679, 0xC679 }, -{ 0xC67A, 0xC67A, 0xC67A }, -{ 0xC67B, 0xC67B, 0xC67B }, -{ 0xC67C, 0xC67C, 0xC67C }, -{ 0xC67D, 0xC67D, 0xC67D }, -{ 0xC67E, 0xC67E, 0xC67E }, -{ 0xC67F, 0xC67F, 0xC67F }, -{ 0xC680, 0xC680, 0xC680 }, -{ 0xC681, 0xC681, 0xC681 }, -{ 0xC682, 0xC682, 0xC682 }, -{ 0xC683, 0xC683, 0xC683 }, -{ 0xC684, 0xC684, 0xC684 }, -{ 0xC685, 0xC685, 0xC685 }, -{ 0xC686, 0xC686, 0xC686 }, -{ 0xC687, 0xC687, 0xC687 }, -{ 0xC688, 0xC688, 0xC688 }, -{ 0xC689, 0xC689, 0xC689 }, -{ 0xC68A, 0xC68A, 0xC68A }, -{ 0xC68B, 0xC68B, 0xC68B }, -{ 0xC68C, 0xC68C, 0xC68C }, -{ 0xC68D, 0xC68D, 0xC68D }, -{ 0xC68E, 0xC68E, 0xC68E }, -{ 0xC68F, 0xC68F, 0xC68F }, -{ 0xC690, 0xC690, 0xC690 }, -{ 0xC691, 0xC691, 0xC691 }, -{ 0xC692, 0xC692, 0xC692 }, -{ 0xC693, 0xC693, 0xC693 }, -{ 0xC694, 0xC694, 0xC694 }, -{ 0xC695, 0xC695, 0xC695 }, -{ 0xC696, 0xC696, 0xC696 }, -{ 0xC697, 0xC697, 0xC697 }, -{ 0xC698, 0xC698, 0xC698 }, -{ 0xC699, 0xC699, 0xC699 }, -{ 0xC69A, 0xC69A, 0xC69A }, -{ 0xC69B, 0xC69B, 0xC69B }, -{ 0xC69C, 0xC69C, 0xC69C }, -{ 0xC69D, 0xC69D, 0xC69D }, -{ 0xC69E, 0xC69E, 0xC69E }, -{ 0xC69F, 0xC69F, 0xC69F }, -{ 0xC6A0, 0xC6A0, 0xC6A0 }, -{ 0xC6A1, 0xC6A1, 0xC6A1 }, -{ 0xC6A2, 0xC6A2, 0xC6A2 }, -{ 0xC6A3, 0xC6A3, 0xC6A3 }, -{ 0xC6A4, 0xC6A4, 0xC6A4 }, -{ 0xC6A5, 0xC6A5, 0xC6A5 }, -{ 0xC6A6, 0xC6A6, 0xC6A6 }, -{ 0xC6A7, 0xC6A7, 0xC6A7 }, -{ 0xC6A8, 0xC6A8, 0xC6A8 }, -{ 0xC6A9, 0xC6A9, 0xC6A9 }, -{ 0xC6AA, 0xC6AA, 0xC6AA }, -{ 0xC6AB, 0xC6AB, 0xC6AB }, -{ 0xC6AC, 0xC6AC, 0xC6AC }, -{ 0xC6AD, 0xC6AD, 0xC6AD }, -{ 0xC6AE, 0xC6AE, 0xC6AE }, -{ 0xC6AF, 0xC6AF, 0xC6AF }, -{ 0xC6B0, 0xC6B0, 0xC6B0 }, -{ 0xC6B1, 0xC6B1, 0xC6B1 }, -{ 0xC6B2, 0xC6B2, 0xC6B2 }, -{ 0xC6B3, 0xC6B3, 0xC6B3 }, -{ 0xC6B4, 0xC6B4, 0xC6B4 }, -{ 0xC6B5, 0xC6B5, 0xC6B5 }, -{ 0xC6B6, 0xC6B6, 0xC6B6 }, -{ 0xC6B7, 0xC6B7, 0xC6B7 }, -{ 0xC6B8, 0xC6B8, 0xC6B8 }, -{ 0xC6B9, 0xC6B9, 0xC6B9 }, -{ 0xC6BA, 0xC6BA, 0xC6BA }, -{ 0xC6BB, 0xC6BB, 0xC6BB }, -{ 0xC6BC, 0xC6BC, 0xC6BC }, -{ 0xC6BD, 0xC6BD, 0xC6BD }, -{ 0xC6BE, 0xC6BE, 0xC6BE }, -{ 0xC6BF, 0xC6BF, 0xC6BF }, -{ 0xC6C0, 0xC6C0, 0xC6C0 }, -{ 0xC6C1, 0xC6C1, 0xC6C1 }, -{ 0xC6C2, 0xC6C2, 0xC6C2 }, -{ 0xC6C3, 0xC6C3, 0xC6C3 }, -{ 0xC6C4, 0xC6C4, 0xC6C4 }, -{ 0xC6C5, 0xC6C5, 0xC6C5 }, -{ 0xC6C6, 0xC6C6, 0xC6C6 }, -{ 0xC6C7, 0xC6C7, 0xC6C7 }, -{ 0xC6C8, 0xC6C8, 0xC6C8 }, -{ 0xC6C9, 0xC6C9, 0xC6C9 }, -{ 0xC6CA, 0xC6CA, 0xC6CA }, -{ 0xC6CB, 0xC6CB, 0xC6CB }, -{ 0xC6CC, 0xC6CC, 0xC6CC }, -{ 0xC6CD, 0xC6CD, 0xC6CD }, -{ 0xC6CE, 0xC6CE, 0xC6CE }, -{ 0xC6CF, 0xC6CF, 0xC6CF }, -{ 0xC6D0, 0xC6D0, 0xC6D0 }, -{ 0xC6D1, 0xC6D1, 0xC6D1 }, -{ 0xC6D2, 0xC6D2, 0xC6D2 }, -{ 0xC6D3, 0xC6D3, 0xC6D3 }, -{ 0xC6D4, 0xC6D4, 0xC6D4 }, -{ 0xC6D5, 0xC6D5, 0xC6D5 }, -{ 0xC6D6, 0xC6D6, 0xC6D6 }, -{ 0xC6D7, 0xC6D7, 0xC6D7 }, -{ 0xC6D8, 0xC6D8, 0xC6D8 }, -{ 0xC6D9, 0xC6D9, 0xC6D9 }, -{ 0xC6DA, 0xC6DA, 0xC6DA }, -{ 0xC6DB, 0xC6DB, 0xC6DB }, -{ 0xC6DC, 0xC6DC, 0xC6DC }, -{ 0xC6DD, 0xC6DD, 0xC6DD }, -{ 0xC6DE, 0xC6DE, 0xC6DE }, -{ 0xC6DF, 0xC6DF, 0xC6DF }, -{ 0xC6E0, 0xC6E0, 0xC6E0 }, -{ 0xC6E1, 0xC6E1, 0xC6E1 }, -{ 0xC6E2, 0xC6E2, 0xC6E2 }, -{ 0xC6E3, 0xC6E3, 0xC6E3 }, -{ 0xC6E4, 0xC6E4, 0xC6E4 }, -{ 0xC6E5, 0xC6E5, 0xC6E5 }, -{ 0xC6E6, 0xC6E6, 0xC6E6 }, -{ 0xC6E7, 0xC6E7, 0xC6E7 }, -{ 0xC6E8, 0xC6E8, 0xC6E8 }, -{ 0xC6E9, 0xC6E9, 0xC6E9 }, -{ 0xC6EA, 0xC6EA, 0xC6EA }, -{ 0xC6EB, 0xC6EB, 0xC6EB }, -{ 0xC6EC, 0xC6EC, 0xC6EC }, -{ 0xC6ED, 0xC6ED, 0xC6ED }, -{ 0xC6EE, 0xC6EE, 0xC6EE }, -{ 0xC6EF, 0xC6EF, 0xC6EF }, -{ 0xC6F0, 0xC6F0, 0xC6F0 }, -{ 0xC6F1, 0xC6F1, 0xC6F1 }, -{ 0xC6F2, 0xC6F2, 0xC6F2 }, -{ 0xC6F3, 0xC6F3, 0xC6F3 }, -{ 0xC6F4, 0xC6F4, 0xC6F4 }, -{ 0xC6F5, 0xC6F5, 0xC6F5 }, -{ 0xC6F6, 0xC6F6, 0xC6F6 }, -{ 0xC6F7, 0xC6F7, 0xC6F7 }, -{ 0xC6F8, 0xC6F8, 0xC6F8 }, -{ 0xC6F9, 0xC6F9, 0xC6F9 }, -{ 0xC6FA, 0xC6FA, 0xC6FA }, -{ 0xC6FB, 0xC6FB, 0xC6FB }, -{ 0xC6FC, 0xC6FC, 0xC6FC }, -{ 0xC6FD, 0xC6FD, 0xC6FD }, -{ 0xC6FE, 0xC6FE, 0xC6FE }, -{ 0xC6FF, 0xC6FF, 0xC6FF }, -{ 0xC700, 0xC700, 0xC700 }, -{ 0xC701, 0xC701, 0xC701 }, -{ 0xC702, 0xC702, 0xC702 }, -{ 0xC703, 0xC703, 0xC703 }, -{ 0xC704, 0xC704, 0xC704 }, -{ 0xC705, 0xC705, 0xC705 }, -{ 0xC706, 0xC706, 0xC706 }, -{ 0xC707, 0xC707, 0xC707 }, -{ 0xC708, 0xC708, 0xC708 }, -{ 0xC709, 0xC709, 0xC709 }, -{ 0xC70A, 0xC70A, 0xC70A }, -{ 0xC70B, 0xC70B, 0xC70B }, -{ 0xC70C, 0xC70C, 0xC70C }, -{ 0xC70D, 0xC70D, 0xC70D }, -{ 0xC70E, 0xC70E, 0xC70E }, -{ 0xC70F, 0xC70F, 0xC70F }, -{ 0xC710, 0xC710, 0xC710 }, -{ 0xC711, 0xC711, 0xC711 }, -{ 0xC712, 0xC712, 0xC712 }, -{ 0xC713, 0xC713, 0xC713 }, -{ 0xC714, 0xC714, 0xC714 }, -{ 0xC715, 0xC715, 0xC715 }, -{ 0xC716, 0xC716, 0xC716 }, -{ 0xC717, 0xC717, 0xC717 }, -{ 0xC718, 0xC718, 0xC718 }, -{ 0xC719, 0xC719, 0xC719 }, -{ 0xC71A, 0xC71A, 0xC71A }, -{ 0xC71B, 0xC71B, 0xC71B }, -{ 0xC71C, 0xC71C, 0xC71C }, -{ 0xC71D, 0xC71D, 0xC71D }, -{ 0xC71E, 0xC71E, 0xC71E }, -{ 0xC71F, 0xC71F, 0xC71F }, -{ 0xC720, 0xC720, 0xC720 }, -{ 0xC721, 0xC721, 0xC721 }, -{ 0xC722, 0xC722, 0xC722 }, -{ 0xC723, 0xC723, 0xC723 }, -{ 0xC724, 0xC724, 0xC724 }, -{ 0xC725, 0xC725, 0xC725 }, -{ 0xC726, 0xC726, 0xC726 }, -{ 0xC727, 0xC727, 0xC727 }, -{ 0xC728, 0xC728, 0xC728 }, -{ 0xC729, 0xC729, 0xC729 }, -{ 0xC72A, 0xC72A, 0xC72A }, -{ 0xC72B, 0xC72B, 0xC72B }, -{ 0xC72C, 0xC72C, 0xC72C }, -{ 0xC72D, 0xC72D, 0xC72D }, -{ 0xC72E, 0xC72E, 0xC72E }, -{ 0xC72F, 0xC72F, 0xC72F }, -{ 0xC730, 0xC730, 0xC730 }, -{ 0xC731, 0xC731, 0xC731 }, -{ 0xC732, 0xC732, 0xC732 }, -{ 0xC733, 0xC733, 0xC733 }, -{ 0xC734, 0xC734, 0xC734 }, -{ 0xC735, 0xC735, 0xC735 }, -{ 0xC736, 0xC736, 0xC736 }, -{ 0xC737, 0xC737, 0xC737 }, -{ 0xC738, 0xC738, 0xC738 }, -{ 0xC739, 0xC739, 0xC739 }, -{ 0xC73A, 0xC73A, 0xC73A }, -{ 0xC73B, 0xC73B, 0xC73B }, -{ 0xC73C, 0xC73C, 0xC73C }, -{ 0xC73D, 0xC73D, 0xC73D }, -{ 0xC73E, 0xC73E, 0xC73E }, -{ 0xC73F, 0xC73F, 0xC73F }, -{ 0xC740, 0xC740, 0xC740 }, -{ 0xC741, 0xC741, 0xC741 }, -{ 0xC742, 0xC742, 0xC742 }, -{ 0xC743, 0xC743, 0xC743 }, -{ 0xC744, 0xC744, 0xC744 }, -{ 0xC745, 0xC745, 0xC745 }, -{ 0xC746, 0xC746, 0xC746 }, -{ 0xC747, 0xC747, 0xC747 }, -{ 0xC748, 0xC748, 0xC748 }, -{ 0xC749, 0xC749, 0xC749 }, -{ 0xC74A, 0xC74A, 0xC74A }, -{ 0xC74B, 0xC74B, 0xC74B }, -{ 0xC74C, 0xC74C, 0xC74C }, -{ 0xC74D, 0xC74D, 0xC74D }, -{ 0xC74E, 0xC74E, 0xC74E }, -{ 0xC74F, 0xC74F, 0xC74F }, -{ 0xC750, 0xC750, 0xC750 }, -{ 0xC751, 0xC751, 0xC751 }, -{ 0xC752, 0xC752, 0xC752 }, -{ 0xC753, 0xC753, 0xC753 }, -{ 0xC754, 0xC754, 0xC754 }, -{ 0xC755, 0xC755, 0xC755 }, -{ 0xC756, 0xC756, 0xC756 }, -{ 0xC757, 0xC757, 0xC757 }, -{ 0xC758, 0xC758, 0xC758 }, -{ 0xC759, 0xC759, 0xC759 }, -{ 0xC75A, 0xC75A, 0xC75A }, -{ 0xC75B, 0xC75B, 0xC75B }, -{ 0xC75C, 0xC75C, 0xC75C }, -{ 0xC75D, 0xC75D, 0xC75D }, -{ 0xC75E, 0xC75E, 0xC75E }, -{ 0xC75F, 0xC75F, 0xC75F }, -{ 0xC760, 0xC760, 0xC760 }, -{ 0xC761, 0xC761, 0xC761 }, -{ 0xC762, 0xC762, 0xC762 }, -{ 0xC763, 0xC763, 0xC763 }, -{ 0xC764, 0xC764, 0xC764 }, -{ 0xC765, 0xC765, 0xC765 }, -{ 0xC766, 0xC766, 0xC766 }, -{ 0xC767, 0xC767, 0xC767 }, -{ 0xC768, 0xC768, 0xC768 }, -{ 0xC769, 0xC769, 0xC769 }, -{ 0xC76A, 0xC76A, 0xC76A }, -{ 0xC76B, 0xC76B, 0xC76B }, -{ 0xC76C, 0xC76C, 0xC76C }, -{ 0xC76D, 0xC76D, 0xC76D }, -{ 0xC76E, 0xC76E, 0xC76E }, -{ 0xC76F, 0xC76F, 0xC76F }, -{ 0xC770, 0xC770, 0xC770 }, -{ 0xC771, 0xC771, 0xC771 }, -{ 0xC772, 0xC772, 0xC772 }, -{ 0xC773, 0xC773, 0xC773 }, -{ 0xC774, 0xC774, 0xC774 }, -{ 0xC775, 0xC775, 0xC775 }, -{ 0xC776, 0xC776, 0xC776 }, -{ 0xC777, 0xC777, 0xC777 }, -{ 0xC778, 0xC778, 0xC778 }, -{ 0xC779, 0xC779, 0xC779 }, -{ 0xC77A, 0xC77A, 0xC77A }, -{ 0xC77B, 0xC77B, 0xC77B }, -{ 0xC77C, 0xC77C, 0xC77C }, -{ 0xC77D, 0xC77D, 0xC77D }, -{ 0xC77E, 0xC77E, 0xC77E }, -{ 0xC77F, 0xC77F, 0xC77F }, -{ 0xC780, 0xC780, 0xC780 }, -{ 0xC781, 0xC781, 0xC781 }, -{ 0xC782, 0xC782, 0xC782 }, -{ 0xC783, 0xC783, 0xC783 }, -{ 0xC784, 0xC784, 0xC784 }, -{ 0xC785, 0xC785, 0xC785 }, -{ 0xC786, 0xC786, 0xC786 }, -{ 0xC787, 0xC787, 0xC787 }, -{ 0xC788, 0xC788, 0xC788 }, -{ 0xC789, 0xC789, 0xC789 }, -{ 0xC78A, 0xC78A, 0xC78A }, -{ 0xC78B, 0xC78B, 0xC78B }, -{ 0xC78C, 0xC78C, 0xC78C }, -{ 0xC78D, 0xC78D, 0xC78D }, -{ 0xC78E, 0xC78E, 0xC78E }, -{ 0xC78F, 0xC78F, 0xC78F }, -{ 0xC790, 0xC790, 0xC790 }, -{ 0xC791, 0xC791, 0xC791 }, -{ 0xC792, 0xC792, 0xC792 }, -{ 0xC793, 0xC793, 0xC793 }, -{ 0xC794, 0xC794, 0xC794 }, -{ 0xC795, 0xC795, 0xC795 }, -{ 0xC796, 0xC796, 0xC796 }, -{ 0xC797, 0xC797, 0xC797 }, -{ 0xC798, 0xC798, 0xC798 }, -{ 0xC799, 0xC799, 0xC799 }, -{ 0xC79A, 0xC79A, 0xC79A }, -{ 0xC79B, 0xC79B, 0xC79B }, -{ 0xC79C, 0xC79C, 0xC79C }, -{ 0xC79D, 0xC79D, 0xC79D }, -{ 0xC79E, 0xC79E, 0xC79E }, -{ 0xC79F, 0xC79F, 0xC79F }, -{ 0xC7A0, 0xC7A0, 0xC7A0 }, -{ 0xC7A1, 0xC7A1, 0xC7A1 }, -{ 0xC7A2, 0xC7A2, 0xC7A2 }, -{ 0xC7A3, 0xC7A3, 0xC7A3 }, -{ 0xC7A4, 0xC7A4, 0xC7A4 }, -{ 0xC7A5, 0xC7A5, 0xC7A5 }, -{ 0xC7A6, 0xC7A6, 0xC7A6 }, -{ 0xC7A7, 0xC7A7, 0xC7A7 }, -{ 0xC7A8, 0xC7A8, 0xC7A8 }, -{ 0xC7A9, 0xC7A9, 0xC7A9 }, -{ 0xC7AA, 0xC7AA, 0xC7AA }, -{ 0xC7AB, 0xC7AB, 0xC7AB }, -{ 0xC7AC, 0xC7AC, 0xC7AC }, -{ 0xC7AD, 0xC7AD, 0xC7AD }, -{ 0xC7AE, 0xC7AE, 0xC7AE }, -{ 0xC7AF, 0xC7AF, 0xC7AF }, -{ 0xC7B0, 0xC7B0, 0xC7B0 }, -{ 0xC7B1, 0xC7B1, 0xC7B1 }, -{ 0xC7B2, 0xC7B2, 0xC7B2 }, -{ 0xC7B3, 0xC7B3, 0xC7B3 }, -{ 0xC7B4, 0xC7B4, 0xC7B4 }, -{ 0xC7B5, 0xC7B5, 0xC7B5 }, -{ 0xC7B6, 0xC7B6, 0xC7B6 }, -{ 0xC7B7, 0xC7B7, 0xC7B7 }, -{ 0xC7B8, 0xC7B8, 0xC7B8 }, -{ 0xC7B9, 0xC7B9, 0xC7B9 }, -{ 0xC7BA, 0xC7BA, 0xC7BA }, -{ 0xC7BB, 0xC7BB, 0xC7BB }, -{ 0xC7BC, 0xC7BC, 0xC7BC }, -{ 0xC7BD, 0xC7BD, 0xC7BD }, -{ 0xC7BE, 0xC7BE, 0xC7BE }, -{ 0xC7BF, 0xC7BF, 0xC7BF }, -{ 0xC7C0, 0xC7C0, 0xC7C0 }, -{ 0xC7C1, 0xC7C1, 0xC7C1 }, -{ 0xC7C2, 0xC7C2, 0xC7C2 }, -{ 0xC7C3, 0xC7C3, 0xC7C3 }, -{ 0xC7C4, 0xC7C4, 0xC7C4 }, -{ 0xC7C5, 0xC7C5, 0xC7C5 }, -{ 0xC7C6, 0xC7C6, 0xC7C6 }, -{ 0xC7C7, 0xC7C7, 0xC7C7 }, -{ 0xC7C8, 0xC7C8, 0xC7C8 }, -{ 0xC7C9, 0xC7C9, 0xC7C9 }, -{ 0xC7CA, 0xC7CA, 0xC7CA }, -{ 0xC7CB, 0xC7CB, 0xC7CB }, -{ 0xC7CC, 0xC7CC, 0xC7CC }, -{ 0xC7CD, 0xC7CD, 0xC7CD }, -{ 0xC7CE, 0xC7CE, 0xC7CE }, -{ 0xC7CF, 0xC7CF, 0xC7CF }, -{ 0xC7D0, 0xC7D0, 0xC7D0 }, -{ 0xC7D1, 0xC7D1, 0xC7D1 }, -{ 0xC7D2, 0xC7D2, 0xC7D2 }, -{ 0xC7D3, 0xC7D3, 0xC7D3 }, -{ 0xC7D4, 0xC7D4, 0xC7D4 }, -{ 0xC7D5, 0xC7D5, 0xC7D5 }, -{ 0xC7D6, 0xC7D6, 0xC7D6 }, -{ 0xC7D7, 0xC7D7, 0xC7D7 }, -{ 0xC7D8, 0xC7D8, 0xC7D8 }, -{ 0xC7D9, 0xC7D9, 0xC7D9 }, -{ 0xC7DA, 0xC7DA, 0xC7DA }, -{ 0xC7DB, 0xC7DB, 0xC7DB }, -{ 0xC7DC, 0xC7DC, 0xC7DC }, -{ 0xC7DD, 0xC7DD, 0xC7DD }, -{ 0xC7DE, 0xC7DE, 0xC7DE }, -{ 0xC7DF, 0xC7DF, 0xC7DF }, -{ 0xC7E0, 0xC7E0, 0xC7E0 }, -{ 0xC7E1, 0xC7E1, 0xC7E1 }, -{ 0xC7E2, 0xC7E2, 0xC7E2 }, -{ 0xC7E3, 0xC7E3, 0xC7E3 }, -{ 0xC7E4, 0xC7E4, 0xC7E4 }, -{ 0xC7E5, 0xC7E5, 0xC7E5 }, -{ 0xC7E6, 0xC7E6, 0xC7E6 }, -{ 0xC7E7, 0xC7E7, 0xC7E7 }, -{ 0xC7E8, 0xC7E8, 0xC7E8 }, -{ 0xC7E9, 0xC7E9, 0xC7E9 }, -{ 0xC7EA, 0xC7EA, 0xC7EA }, -{ 0xC7EB, 0xC7EB, 0xC7EB }, -{ 0xC7EC, 0xC7EC, 0xC7EC }, -{ 0xC7ED, 0xC7ED, 0xC7ED }, -{ 0xC7EE, 0xC7EE, 0xC7EE }, -{ 0xC7EF, 0xC7EF, 0xC7EF }, -{ 0xC7F0, 0xC7F0, 0xC7F0 }, -{ 0xC7F1, 0xC7F1, 0xC7F1 }, -{ 0xC7F2, 0xC7F2, 0xC7F2 }, -{ 0xC7F3, 0xC7F3, 0xC7F3 }, -{ 0xC7F4, 0xC7F4, 0xC7F4 }, -{ 0xC7F5, 0xC7F5, 0xC7F5 }, -{ 0xC7F6, 0xC7F6, 0xC7F6 }, -{ 0xC7F7, 0xC7F7, 0xC7F7 }, -{ 0xC7F8, 0xC7F8, 0xC7F8 }, -{ 0xC7F9, 0xC7F9, 0xC7F9 }, -{ 0xC7FA, 0xC7FA, 0xC7FA }, -{ 0xC7FB, 0xC7FB, 0xC7FB }, -{ 0xC7FC, 0xC7FC, 0xC7FC }, -{ 0xC7FD, 0xC7FD, 0xC7FD }, -{ 0xC7FE, 0xC7FE, 0xC7FE }, -{ 0xC7FF, 0xC7FF, 0xC7FF }, -{ 0xC800, 0xC800, 0xC800 }, -{ 0xC801, 0xC801, 0xC801 }, -{ 0xC802, 0xC802, 0xC802 }, -{ 0xC803, 0xC803, 0xC803 }, -{ 0xC804, 0xC804, 0xC804 }, -{ 0xC805, 0xC805, 0xC805 }, -{ 0xC806, 0xC806, 0xC806 }, -{ 0xC807, 0xC807, 0xC807 }, -{ 0xC808, 0xC808, 0xC808 }, -{ 0xC809, 0xC809, 0xC809 }, -{ 0xC80A, 0xC80A, 0xC80A }, -{ 0xC80B, 0xC80B, 0xC80B }, -{ 0xC80C, 0xC80C, 0xC80C }, -{ 0xC80D, 0xC80D, 0xC80D }, -{ 0xC80E, 0xC80E, 0xC80E }, -{ 0xC80F, 0xC80F, 0xC80F }, -{ 0xC810, 0xC810, 0xC810 }, -{ 0xC811, 0xC811, 0xC811 }, -{ 0xC812, 0xC812, 0xC812 }, -{ 0xC813, 0xC813, 0xC813 }, -{ 0xC814, 0xC814, 0xC814 }, -{ 0xC815, 0xC815, 0xC815 }, -{ 0xC816, 0xC816, 0xC816 }, -{ 0xC817, 0xC817, 0xC817 }, -{ 0xC818, 0xC818, 0xC818 }, -{ 0xC819, 0xC819, 0xC819 }, -{ 0xC81A, 0xC81A, 0xC81A }, -{ 0xC81B, 0xC81B, 0xC81B }, -{ 0xC81C, 0xC81C, 0xC81C }, -{ 0xC81D, 0xC81D, 0xC81D }, -{ 0xC81E, 0xC81E, 0xC81E }, -{ 0xC81F, 0xC81F, 0xC81F }, -{ 0xC820, 0xC820, 0xC820 }, -{ 0xC821, 0xC821, 0xC821 }, -{ 0xC822, 0xC822, 0xC822 }, -{ 0xC823, 0xC823, 0xC823 }, -{ 0xC824, 0xC824, 0xC824 }, -{ 0xC825, 0xC825, 0xC825 }, -{ 0xC826, 0xC826, 0xC826 }, -{ 0xC827, 0xC827, 0xC827 }, -{ 0xC828, 0xC828, 0xC828 }, -{ 0xC829, 0xC829, 0xC829 }, -{ 0xC82A, 0xC82A, 0xC82A }, -{ 0xC82B, 0xC82B, 0xC82B }, -{ 0xC82C, 0xC82C, 0xC82C }, -{ 0xC82D, 0xC82D, 0xC82D }, -{ 0xC82E, 0xC82E, 0xC82E }, -{ 0xC82F, 0xC82F, 0xC82F }, -{ 0xC830, 0xC830, 0xC830 }, -{ 0xC831, 0xC831, 0xC831 }, -{ 0xC832, 0xC832, 0xC832 }, -{ 0xC833, 0xC833, 0xC833 }, -{ 0xC834, 0xC834, 0xC834 }, -{ 0xC835, 0xC835, 0xC835 }, -{ 0xC836, 0xC836, 0xC836 }, -{ 0xC837, 0xC837, 0xC837 }, -{ 0xC838, 0xC838, 0xC838 }, -{ 0xC839, 0xC839, 0xC839 }, -{ 0xC83A, 0xC83A, 0xC83A }, -{ 0xC83B, 0xC83B, 0xC83B }, -{ 0xC83C, 0xC83C, 0xC83C }, -{ 0xC83D, 0xC83D, 0xC83D }, -{ 0xC83E, 0xC83E, 0xC83E }, -{ 0xC83F, 0xC83F, 0xC83F }, -{ 0xC840, 0xC840, 0xC840 }, -{ 0xC841, 0xC841, 0xC841 }, -{ 0xC842, 0xC842, 0xC842 }, -{ 0xC843, 0xC843, 0xC843 }, -{ 0xC844, 0xC844, 0xC844 }, -{ 0xC845, 0xC845, 0xC845 }, -{ 0xC846, 0xC846, 0xC846 }, -{ 0xC847, 0xC847, 0xC847 }, -{ 0xC848, 0xC848, 0xC848 }, -{ 0xC849, 0xC849, 0xC849 }, -{ 0xC84A, 0xC84A, 0xC84A }, -{ 0xC84B, 0xC84B, 0xC84B }, -{ 0xC84C, 0xC84C, 0xC84C }, -{ 0xC84D, 0xC84D, 0xC84D }, -{ 0xC84E, 0xC84E, 0xC84E }, -{ 0xC84F, 0xC84F, 0xC84F }, -{ 0xC850, 0xC850, 0xC850 }, -{ 0xC851, 0xC851, 0xC851 }, -{ 0xC852, 0xC852, 0xC852 }, -{ 0xC853, 0xC853, 0xC853 }, -{ 0xC854, 0xC854, 0xC854 }, -{ 0xC855, 0xC855, 0xC855 }, -{ 0xC856, 0xC856, 0xC856 }, -{ 0xC857, 0xC857, 0xC857 }, -{ 0xC858, 0xC858, 0xC858 }, -{ 0xC859, 0xC859, 0xC859 }, -{ 0xC85A, 0xC85A, 0xC85A }, -{ 0xC85B, 0xC85B, 0xC85B }, -{ 0xC85C, 0xC85C, 0xC85C }, -{ 0xC85D, 0xC85D, 0xC85D }, -{ 0xC85E, 0xC85E, 0xC85E }, -{ 0xC85F, 0xC85F, 0xC85F }, -{ 0xC860, 0xC860, 0xC860 }, -{ 0xC861, 0xC861, 0xC861 }, -{ 0xC862, 0xC862, 0xC862 }, -{ 0xC863, 0xC863, 0xC863 }, -{ 0xC864, 0xC864, 0xC864 }, -{ 0xC865, 0xC865, 0xC865 }, -{ 0xC866, 0xC866, 0xC866 }, -{ 0xC867, 0xC867, 0xC867 }, -{ 0xC868, 0xC868, 0xC868 }, -{ 0xC869, 0xC869, 0xC869 }, -{ 0xC86A, 0xC86A, 0xC86A }, -{ 0xC86B, 0xC86B, 0xC86B }, -{ 0xC86C, 0xC86C, 0xC86C }, -{ 0xC86D, 0xC86D, 0xC86D }, -{ 0xC86E, 0xC86E, 0xC86E }, -{ 0xC86F, 0xC86F, 0xC86F }, -{ 0xC870, 0xC870, 0xC870 }, -{ 0xC871, 0xC871, 0xC871 }, -{ 0xC872, 0xC872, 0xC872 }, -{ 0xC873, 0xC873, 0xC873 }, -{ 0xC874, 0xC874, 0xC874 }, -{ 0xC875, 0xC875, 0xC875 }, -{ 0xC876, 0xC876, 0xC876 }, -{ 0xC877, 0xC877, 0xC877 }, -{ 0xC878, 0xC878, 0xC878 }, -{ 0xC879, 0xC879, 0xC879 }, -{ 0xC87A, 0xC87A, 0xC87A }, -{ 0xC87B, 0xC87B, 0xC87B }, -{ 0xC87C, 0xC87C, 0xC87C }, -{ 0xC87D, 0xC87D, 0xC87D }, -{ 0xC87E, 0xC87E, 0xC87E }, -{ 0xC87F, 0xC87F, 0xC87F }, -{ 0xC880, 0xC880, 0xC880 }, -{ 0xC881, 0xC881, 0xC881 }, -{ 0xC882, 0xC882, 0xC882 }, -{ 0xC883, 0xC883, 0xC883 }, -{ 0xC884, 0xC884, 0xC884 }, -{ 0xC885, 0xC885, 0xC885 }, -{ 0xC886, 0xC886, 0xC886 }, -{ 0xC887, 0xC887, 0xC887 }, -{ 0xC888, 0xC888, 0xC888 }, -{ 0xC889, 0xC889, 0xC889 }, -{ 0xC88A, 0xC88A, 0xC88A }, -{ 0xC88B, 0xC88B, 0xC88B }, -{ 0xC88C, 0xC88C, 0xC88C }, -{ 0xC88D, 0xC88D, 0xC88D }, -{ 0xC88E, 0xC88E, 0xC88E }, -{ 0xC88F, 0xC88F, 0xC88F }, -{ 0xC890, 0xC890, 0xC890 }, -{ 0xC891, 0xC891, 0xC891 }, -{ 0xC892, 0xC892, 0xC892 }, -{ 0xC893, 0xC893, 0xC893 }, -{ 0xC894, 0xC894, 0xC894 }, -{ 0xC895, 0xC895, 0xC895 }, -{ 0xC896, 0xC896, 0xC896 }, -{ 0xC897, 0xC897, 0xC897 }, -{ 0xC898, 0xC898, 0xC898 }, -{ 0xC899, 0xC899, 0xC899 }, -{ 0xC89A, 0xC89A, 0xC89A }, -{ 0xC89B, 0xC89B, 0xC89B }, -{ 0xC89C, 0xC89C, 0xC89C }, -{ 0xC89D, 0xC89D, 0xC89D }, -{ 0xC89E, 0xC89E, 0xC89E }, -{ 0xC89F, 0xC89F, 0xC89F }, -{ 0xC8A0, 0xC8A0, 0xC8A0 }, -{ 0xC8A1, 0xC8A1, 0xC8A1 }, -{ 0xC8A2, 0xC8A2, 0xC8A2 }, -{ 0xC8A3, 0xC8A3, 0xC8A3 }, -{ 0xC8A4, 0xC8A4, 0xC8A4 }, -{ 0xC8A5, 0xC8A5, 0xC8A5 }, -{ 0xC8A6, 0xC8A6, 0xC8A6 }, -{ 0xC8A7, 0xC8A7, 0xC8A7 }, -{ 0xC8A8, 0xC8A8, 0xC8A8 }, -{ 0xC8A9, 0xC8A9, 0xC8A9 }, -{ 0xC8AA, 0xC8AA, 0xC8AA }, -{ 0xC8AB, 0xC8AB, 0xC8AB }, -{ 0xC8AC, 0xC8AC, 0xC8AC }, -{ 0xC8AD, 0xC8AD, 0xC8AD }, -{ 0xC8AE, 0xC8AE, 0xC8AE }, -{ 0xC8AF, 0xC8AF, 0xC8AF }, -{ 0xC8B0, 0xC8B0, 0xC8B0 }, -{ 0xC8B1, 0xC8B1, 0xC8B1 }, -{ 0xC8B2, 0xC8B2, 0xC8B2 }, -{ 0xC8B3, 0xC8B3, 0xC8B3 }, -{ 0xC8B4, 0xC8B4, 0xC8B4 }, -{ 0xC8B5, 0xC8B5, 0xC8B5 }, -{ 0xC8B6, 0xC8B6, 0xC8B6 }, -{ 0xC8B7, 0xC8B7, 0xC8B7 }, -{ 0xC8B8, 0xC8B8, 0xC8B8 }, -{ 0xC8B9, 0xC8B9, 0xC8B9 }, -{ 0xC8BA, 0xC8BA, 0xC8BA }, -{ 0xC8BB, 0xC8BB, 0xC8BB }, -{ 0xC8BC, 0xC8BC, 0xC8BC }, -{ 0xC8BD, 0xC8BD, 0xC8BD }, -{ 0xC8BE, 0xC8BE, 0xC8BE }, -{ 0xC8BF, 0xC8BF, 0xC8BF }, -{ 0xC8C0, 0xC8C0, 0xC8C0 }, -{ 0xC8C1, 0xC8C1, 0xC8C1 }, -{ 0xC8C2, 0xC8C2, 0xC8C2 }, -{ 0xC8C3, 0xC8C3, 0xC8C3 }, -{ 0xC8C4, 0xC8C4, 0xC8C4 }, -{ 0xC8C5, 0xC8C5, 0xC8C5 }, -{ 0xC8C6, 0xC8C6, 0xC8C6 }, -{ 0xC8C7, 0xC8C7, 0xC8C7 }, -{ 0xC8C8, 0xC8C8, 0xC8C8 }, -{ 0xC8C9, 0xC8C9, 0xC8C9 }, -{ 0xC8CA, 0xC8CA, 0xC8CA }, -{ 0xC8CB, 0xC8CB, 0xC8CB }, -{ 0xC8CC, 0xC8CC, 0xC8CC }, -{ 0xC8CD, 0xC8CD, 0xC8CD }, -{ 0xC8CE, 0xC8CE, 0xC8CE }, -{ 0xC8CF, 0xC8CF, 0xC8CF }, -{ 0xC8D0, 0xC8D0, 0xC8D0 }, -{ 0xC8D1, 0xC8D1, 0xC8D1 }, -{ 0xC8D2, 0xC8D2, 0xC8D2 }, -{ 0xC8D3, 0xC8D3, 0xC8D3 }, -{ 0xC8D4, 0xC8D4, 0xC8D4 }, -{ 0xC8D5, 0xC8D5, 0xC8D5 }, -{ 0xC8D6, 0xC8D6, 0xC8D6 }, -{ 0xC8D7, 0xC8D7, 0xC8D7 }, -{ 0xC8D8, 0xC8D8, 0xC8D8 }, -{ 0xC8D9, 0xC8D9, 0xC8D9 }, -{ 0xC8DA, 0xC8DA, 0xC8DA }, -{ 0xC8DB, 0xC8DB, 0xC8DB }, -{ 0xC8DC, 0xC8DC, 0xC8DC }, -{ 0xC8DD, 0xC8DD, 0xC8DD }, -{ 0xC8DE, 0xC8DE, 0xC8DE }, -{ 0xC8DF, 0xC8DF, 0xC8DF }, -{ 0xC8E0, 0xC8E0, 0xC8E0 }, -{ 0xC8E1, 0xC8E1, 0xC8E1 }, -{ 0xC8E2, 0xC8E2, 0xC8E2 }, -{ 0xC8E3, 0xC8E3, 0xC8E3 }, -{ 0xC8E4, 0xC8E4, 0xC8E4 }, -{ 0xC8E5, 0xC8E5, 0xC8E5 }, -{ 0xC8E6, 0xC8E6, 0xC8E6 }, -{ 0xC8E7, 0xC8E7, 0xC8E7 }, -{ 0xC8E8, 0xC8E8, 0xC8E8 }, -{ 0xC8E9, 0xC8E9, 0xC8E9 }, -{ 0xC8EA, 0xC8EA, 0xC8EA }, -{ 0xC8EB, 0xC8EB, 0xC8EB }, -{ 0xC8EC, 0xC8EC, 0xC8EC }, -{ 0xC8ED, 0xC8ED, 0xC8ED }, -{ 0xC8EE, 0xC8EE, 0xC8EE }, -{ 0xC8EF, 0xC8EF, 0xC8EF }, -{ 0xC8F0, 0xC8F0, 0xC8F0 }, -{ 0xC8F1, 0xC8F1, 0xC8F1 }, -{ 0xC8F2, 0xC8F2, 0xC8F2 }, -{ 0xC8F3, 0xC8F3, 0xC8F3 }, -{ 0xC8F4, 0xC8F4, 0xC8F4 }, -{ 0xC8F5, 0xC8F5, 0xC8F5 }, -{ 0xC8F6, 0xC8F6, 0xC8F6 }, -{ 0xC8F7, 0xC8F7, 0xC8F7 }, -{ 0xC8F8, 0xC8F8, 0xC8F8 }, -{ 0xC8F9, 0xC8F9, 0xC8F9 }, -{ 0xC8FA, 0xC8FA, 0xC8FA }, -{ 0xC8FB, 0xC8FB, 0xC8FB }, -{ 0xC8FC, 0xC8FC, 0xC8FC }, -{ 0xC8FD, 0xC8FD, 0xC8FD }, -{ 0xC8FE, 0xC8FE, 0xC8FE }, -{ 0xC8FF, 0xC8FF, 0xC8FF }, -{ 0xC900, 0xC900, 0xC900 }, -{ 0xC901, 0xC901, 0xC901 }, -{ 0xC902, 0xC902, 0xC902 }, -{ 0xC903, 0xC903, 0xC903 }, -{ 0xC904, 0xC904, 0xC904 }, -{ 0xC905, 0xC905, 0xC905 }, -{ 0xC906, 0xC906, 0xC906 }, -{ 0xC907, 0xC907, 0xC907 }, -{ 0xC908, 0xC908, 0xC908 }, -{ 0xC909, 0xC909, 0xC909 }, -{ 0xC90A, 0xC90A, 0xC90A }, -{ 0xC90B, 0xC90B, 0xC90B }, -{ 0xC90C, 0xC90C, 0xC90C }, -{ 0xC90D, 0xC90D, 0xC90D }, -{ 0xC90E, 0xC90E, 0xC90E }, -{ 0xC90F, 0xC90F, 0xC90F }, -{ 0xC910, 0xC910, 0xC910 }, -{ 0xC911, 0xC911, 0xC911 }, -{ 0xC912, 0xC912, 0xC912 }, -{ 0xC913, 0xC913, 0xC913 }, -{ 0xC914, 0xC914, 0xC914 }, -{ 0xC915, 0xC915, 0xC915 }, -{ 0xC916, 0xC916, 0xC916 }, -{ 0xC917, 0xC917, 0xC917 }, -{ 0xC918, 0xC918, 0xC918 }, -{ 0xC919, 0xC919, 0xC919 }, -{ 0xC91A, 0xC91A, 0xC91A }, -{ 0xC91B, 0xC91B, 0xC91B }, -{ 0xC91C, 0xC91C, 0xC91C }, -{ 0xC91D, 0xC91D, 0xC91D }, -{ 0xC91E, 0xC91E, 0xC91E }, -{ 0xC91F, 0xC91F, 0xC91F }, -{ 0xC920, 0xC920, 0xC920 }, -{ 0xC921, 0xC921, 0xC921 }, -{ 0xC922, 0xC922, 0xC922 }, -{ 0xC923, 0xC923, 0xC923 }, -{ 0xC924, 0xC924, 0xC924 }, -{ 0xC925, 0xC925, 0xC925 }, -{ 0xC926, 0xC926, 0xC926 }, -{ 0xC927, 0xC927, 0xC927 }, -{ 0xC928, 0xC928, 0xC928 }, -{ 0xC929, 0xC929, 0xC929 }, -{ 0xC92A, 0xC92A, 0xC92A }, -{ 0xC92B, 0xC92B, 0xC92B }, -{ 0xC92C, 0xC92C, 0xC92C }, -{ 0xC92D, 0xC92D, 0xC92D }, -{ 0xC92E, 0xC92E, 0xC92E }, -{ 0xC92F, 0xC92F, 0xC92F }, -{ 0xC930, 0xC930, 0xC930 }, -{ 0xC931, 0xC931, 0xC931 }, -{ 0xC932, 0xC932, 0xC932 }, -{ 0xC933, 0xC933, 0xC933 }, -{ 0xC934, 0xC934, 0xC934 }, -{ 0xC935, 0xC935, 0xC935 }, -{ 0xC936, 0xC936, 0xC936 }, -{ 0xC937, 0xC937, 0xC937 }, -{ 0xC938, 0xC938, 0xC938 }, -{ 0xC939, 0xC939, 0xC939 }, -{ 0xC93A, 0xC93A, 0xC93A }, -{ 0xC93B, 0xC93B, 0xC93B }, -{ 0xC93C, 0xC93C, 0xC93C }, -{ 0xC93D, 0xC93D, 0xC93D }, -{ 0xC93E, 0xC93E, 0xC93E }, -{ 0xC93F, 0xC93F, 0xC93F }, -{ 0xC940, 0xC940, 0xC940 }, -{ 0xC941, 0xC941, 0xC941 }, -{ 0xC942, 0xC942, 0xC942 }, -{ 0xC943, 0xC943, 0xC943 }, -{ 0xC944, 0xC944, 0xC944 }, -{ 0xC945, 0xC945, 0xC945 }, -{ 0xC946, 0xC946, 0xC946 }, -{ 0xC947, 0xC947, 0xC947 }, -{ 0xC948, 0xC948, 0xC948 }, -{ 0xC949, 0xC949, 0xC949 }, -{ 0xC94A, 0xC94A, 0xC94A }, -{ 0xC94B, 0xC94B, 0xC94B }, -{ 0xC94C, 0xC94C, 0xC94C }, -{ 0xC94D, 0xC94D, 0xC94D }, -{ 0xC94E, 0xC94E, 0xC94E }, -{ 0xC94F, 0xC94F, 0xC94F }, -{ 0xC950, 0xC950, 0xC950 }, -{ 0xC951, 0xC951, 0xC951 }, -{ 0xC952, 0xC952, 0xC952 }, -{ 0xC953, 0xC953, 0xC953 }, -{ 0xC954, 0xC954, 0xC954 }, -{ 0xC955, 0xC955, 0xC955 }, -{ 0xC956, 0xC956, 0xC956 }, -{ 0xC957, 0xC957, 0xC957 }, -{ 0xC958, 0xC958, 0xC958 }, -{ 0xC959, 0xC959, 0xC959 }, -{ 0xC95A, 0xC95A, 0xC95A }, -{ 0xC95B, 0xC95B, 0xC95B }, -{ 0xC95C, 0xC95C, 0xC95C }, -{ 0xC95D, 0xC95D, 0xC95D }, -{ 0xC95E, 0xC95E, 0xC95E }, -{ 0xC95F, 0xC95F, 0xC95F }, -{ 0xC960, 0xC960, 0xC960 }, -{ 0xC961, 0xC961, 0xC961 }, -{ 0xC962, 0xC962, 0xC962 }, -{ 0xC963, 0xC963, 0xC963 }, -{ 0xC964, 0xC964, 0xC964 }, -{ 0xC965, 0xC965, 0xC965 }, -{ 0xC966, 0xC966, 0xC966 }, -{ 0xC967, 0xC967, 0xC967 }, -{ 0xC968, 0xC968, 0xC968 }, -{ 0xC969, 0xC969, 0xC969 }, -{ 0xC96A, 0xC96A, 0xC96A }, -{ 0xC96B, 0xC96B, 0xC96B }, -{ 0xC96C, 0xC96C, 0xC96C }, -{ 0xC96D, 0xC96D, 0xC96D }, -{ 0xC96E, 0xC96E, 0xC96E }, -{ 0xC96F, 0xC96F, 0xC96F }, -{ 0xC970, 0xC970, 0xC970 }, -{ 0xC971, 0xC971, 0xC971 }, -{ 0xC972, 0xC972, 0xC972 }, -{ 0xC973, 0xC973, 0xC973 }, -{ 0xC974, 0xC974, 0xC974 }, -{ 0xC975, 0xC975, 0xC975 }, -{ 0xC976, 0xC976, 0xC976 }, -{ 0xC977, 0xC977, 0xC977 }, -{ 0xC978, 0xC978, 0xC978 }, -{ 0xC979, 0xC979, 0xC979 }, -{ 0xC97A, 0xC97A, 0xC97A }, -{ 0xC97B, 0xC97B, 0xC97B }, -{ 0xC97C, 0xC97C, 0xC97C }, -{ 0xC97D, 0xC97D, 0xC97D }, -{ 0xC97E, 0xC97E, 0xC97E }, -{ 0xC97F, 0xC97F, 0xC97F }, -{ 0xC980, 0xC980, 0xC980 }, -{ 0xC981, 0xC981, 0xC981 }, -{ 0xC982, 0xC982, 0xC982 }, -{ 0xC983, 0xC983, 0xC983 }, -{ 0xC984, 0xC984, 0xC984 }, -{ 0xC985, 0xC985, 0xC985 }, -{ 0xC986, 0xC986, 0xC986 }, -{ 0xC987, 0xC987, 0xC987 }, -{ 0xC988, 0xC988, 0xC988 }, -{ 0xC989, 0xC989, 0xC989 }, -{ 0xC98A, 0xC98A, 0xC98A }, -{ 0xC98B, 0xC98B, 0xC98B }, -{ 0xC98C, 0xC98C, 0xC98C }, -{ 0xC98D, 0xC98D, 0xC98D }, -{ 0xC98E, 0xC98E, 0xC98E }, -{ 0xC98F, 0xC98F, 0xC98F }, -{ 0xC990, 0xC990, 0xC990 }, -{ 0xC991, 0xC991, 0xC991 }, -{ 0xC992, 0xC992, 0xC992 }, -{ 0xC993, 0xC993, 0xC993 }, -{ 0xC994, 0xC994, 0xC994 }, -{ 0xC995, 0xC995, 0xC995 }, -{ 0xC996, 0xC996, 0xC996 }, -{ 0xC997, 0xC997, 0xC997 }, -{ 0xC998, 0xC998, 0xC998 }, -{ 0xC999, 0xC999, 0xC999 }, -{ 0xC99A, 0xC99A, 0xC99A }, -{ 0xC99B, 0xC99B, 0xC99B }, -{ 0xC99C, 0xC99C, 0xC99C }, -{ 0xC99D, 0xC99D, 0xC99D }, -{ 0xC99E, 0xC99E, 0xC99E }, -{ 0xC99F, 0xC99F, 0xC99F }, -{ 0xC9A0, 0xC9A0, 0xC9A0 }, -{ 0xC9A1, 0xC9A1, 0xC9A1 }, -{ 0xC9A2, 0xC9A2, 0xC9A2 }, -{ 0xC9A3, 0xC9A3, 0xC9A3 }, -{ 0xC9A4, 0xC9A4, 0xC9A4 }, -{ 0xC9A5, 0xC9A5, 0xC9A5 }, -{ 0xC9A6, 0xC9A6, 0xC9A6 }, -{ 0xC9A7, 0xC9A7, 0xC9A7 }, -{ 0xC9A8, 0xC9A8, 0xC9A8 }, -{ 0xC9A9, 0xC9A9, 0xC9A9 }, -{ 0xC9AA, 0xC9AA, 0xC9AA }, -{ 0xC9AB, 0xC9AB, 0xC9AB }, -{ 0xC9AC, 0xC9AC, 0xC9AC }, -{ 0xC9AD, 0xC9AD, 0xC9AD }, -{ 0xC9AE, 0xC9AE, 0xC9AE }, -{ 0xC9AF, 0xC9AF, 0xC9AF }, -{ 0xC9B0, 0xC9B0, 0xC9B0 }, -{ 0xC9B1, 0xC9B1, 0xC9B1 }, -{ 0xC9B2, 0xC9B2, 0xC9B2 }, -{ 0xC9B3, 0xC9B3, 0xC9B3 }, -{ 0xC9B4, 0xC9B4, 0xC9B4 }, -{ 0xC9B5, 0xC9B5, 0xC9B5 }, -{ 0xC9B6, 0xC9B6, 0xC9B6 }, -{ 0xC9B7, 0xC9B7, 0xC9B7 }, -{ 0xC9B8, 0xC9B8, 0xC9B8 }, -{ 0xC9B9, 0xC9B9, 0xC9B9 }, -{ 0xC9BA, 0xC9BA, 0xC9BA }, -{ 0xC9BB, 0xC9BB, 0xC9BB }, -{ 0xC9BC, 0xC9BC, 0xC9BC }, -{ 0xC9BD, 0xC9BD, 0xC9BD }, -{ 0xC9BE, 0xC9BE, 0xC9BE }, -{ 0xC9BF, 0xC9BF, 0xC9BF }, -{ 0xC9C0, 0xC9C0, 0xC9C0 }, -{ 0xC9C1, 0xC9C1, 0xC9C1 }, -{ 0xC9C2, 0xC9C2, 0xC9C2 }, -{ 0xC9C3, 0xC9C3, 0xC9C3 }, -{ 0xC9C4, 0xC9C4, 0xC9C4 }, -{ 0xC9C5, 0xC9C5, 0xC9C5 }, -{ 0xC9C6, 0xC9C6, 0xC9C6 }, -{ 0xC9C7, 0xC9C7, 0xC9C7 }, -{ 0xC9C8, 0xC9C8, 0xC9C8 }, -{ 0xC9C9, 0xC9C9, 0xC9C9 }, -{ 0xC9CA, 0xC9CA, 0xC9CA }, -{ 0xC9CB, 0xC9CB, 0xC9CB }, -{ 0xC9CC, 0xC9CC, 0xC9CC }, -{ 0xC9CD, 0xC9CD, 0xC9CD }, -{ 0xC9CE, 0xC9CE, 0xC9CE }, -{ 0xC9CF, 0xC9CF, 0xC9CF }, -{ 0xC9D0, 0xC9D0, 0xC9D0 }, -{ 0xC9D1, 0xC9D1, 0xC9D1 }, -{ 0xC9D2, 0xC9D2, 0xC9D2 }, -{ 0xC9D3, 0xC9D3, 0xC9D3 }, -{ 0xC9D4, 0xC9D4, 0xC9D4 }, -{ 0xC9D5, 0xC9D5, 0xC9D5 }, -{ 0xC9D6, 0xC9D6, 0xC9D6 }, -{ 0xC9D7, 0xC9D7, 0xC9D7 }, -{ 0xC9D8, 0xC9D8, 0xC9D8 }, -{ 0xC9D9, 0xC9D9, 0xC9D9 }, -{ 0xC9DA, 0xC9DA, 0xC9DA }, -{ 0xC9DB, 0xC9DB, 0xC9DB }, -{ 0xC9DC, 0xC9DC, 0xC9DC }, -{ 0xC9DD, 0xC9DD, 0xC9DD }, -{ 0xC9DE, 0xC9DE, 0xC9DE }, -{ 0xC9DF, 0xC9DF, 0xC9DF }, -{ 0xC9E0, 0xC9E0, 0xC9E0 }, -{ 0xC9E1, 0xC9E1, 0xC9E1 }, -{ 0xC9E2, 0xC9E2, 0xC9E2 }, -{ 0xC9E3, 0xC9E3, 0xC9E3 }, -{ 0xC9E4, 0xC9E4, 0xC9E4 }, -{ 0xC9E5, 0xC9E5, 0xC9E5 }, -{ 0xC9E6, 0xC9E6, 0xC9E6 }, -{ 0xC9E7, 0xC9E7, 0xC9E7 }, -{ 0xC9E8, 0xC9E8, 0xC9E8 }, -{ 0xC9E9, 0xC9E9, 0xC9E9 }, -{ 0xC9EA, 0xC9EA, 0xC9EA }, -{ 0xC9EB, 0xC9EB, 0xC9EB }, -{ 0xC9EC, 0xC9EC, 0xC9EC }, -{ 0xC9ED, 0xC9ED, 0xC9ED }, -{ 0xC9EE, 0xC9EE, 0xC9EE }, -{ 0xC9EF, 0xC9EF, 0xC9EF }, -{ 0xC9F0, 0xC9F0, 0xC9F0 }, -{ 0xC9F1, 0xC9F1, 0xC9F1 }, -{ 0xC9F2, 0xC9F2, 0xC9F2 }, -{ 0xC9F3, 0xC9F3, 0xC9F3 }, -{ 0xC9F4, 0xC9F4, 0xC9F4 }, -{ 0xC9F5, 0xC9F5, 0xC9F5 }, -{ 0xC9F6, 0xC9F6, 0xC9F6 }, -{ 0xC9F7, 0xC9F7, 0xC9F7 }, -{ 0xC9F8, 0xC9F8, 0xC9F8 }, -{ 0xC9F9, 0xC9F9, 0xC9F9 }, -{ 0xC9FA, 0xC9FA, 0xC9FA }, -{ 0xC9FB, 0xC9FB, 0xC9FB }, -{ 0xC9FC, 0xC9FC, 0xC9FC }, -{ 0xC9FD, 0xC9FD, 0xC9FD }, -{ 0xC9FE, 0xC9FE, 0xC9FE }, -{ 0xC9FF, 0xC9FF, 0xC9FF }, -{ 0xCA00, 0xCA00, 0xCA00 }, -{ 0xCA01, 0xCA01, 0xCA01 }, -{ 0xCA02, 0xCA02, 0xCA02 }, -{ 0xCA03, 0xCA03, 0xCA03 }, -{ 0xCA04, 0xCA04, 0xCA04 }, -{ 0xCA05, 0xCA05, 0xCA05 }, -{ 0xCA06, 0xCA06, 0xCA06 }, -{ 0xCA07, 0xCA07, 0xCA07 }, -{ 0xCA08, 0xCA08, 0xCA08 }, -{ 0xCA09, 0xCA09, 0xCA09 }, -{ 0xCA0A, 0xCA0A, 0xCA0A }, -{ 0xCA0B, 0xCA0B, 0xCA0B }, -{ 0xCA0C, 0xCA0C, 0xCA0C }, -{ 0xCA0D, 0xCA0D, 0xCA0D }, -{ 0xCA0E, 0xCA0E, 0xCA0E }, -{ 0xCA0F, 0xCA0F, 0xCA0F }, -{ 0xCA10, 0xCA10, 0xCA10 }, -{ 0xCA11, 0xCA11, 0xCA11 }, -{ 0xCA12, 0xCA12, 0xCA12 }, -{ 0xCA13, 0xCA13, 0xCA13 }, -{ 0xCA14, 0xCA14, 0xCA14 }, -{ 0xCA15, 0xCA15, 0xCA15 }, -{ 0xCA16, 0xCA16, 0xCA16 }, -{ 0xCA17, 0xCA17, 0xCA17 }, -{ 0xCA18, 0xCA18, 0xCA18 }, -{ 0xCA19, 0xCA19, 0xCA19 }, -{ 0xCA1A, 0xCA1A, 0xCA1A }, -{ 0xCA1B, 0xCA1B, 0xCA1B }, -{ 0xCA1C, 0xCA1C, 0xCA1C }, -{ 0xCA1D, 0xCA1D, 0xCA1D }, -{ 0xCA1E, 0xCA1E, 0xCA1E }, -{ 0xCA1F, 0xCA1F, 0xCA1F }, -{ 0xCA20, 0xCA20, 0xCA20 }, -{ 0xCA21, 0xCA21, 0xCA21 }, -{ 0xCA22, 0xCA22, 0xCA22 }, -{ 0xCA23, 0xCA23, 0xCA23 }, -{ 0xCA24, 0xCA24, 0xCA24 }, -{ 0xCA25, 0xCA25, 0xCA25 }, -{ 0xCA26, 0xCA26, 0xCA26 }, -{ 0xCA27, 0xCA27, 0xCA27 }, -{ 0xCA28, 0xCA28, 0xCA28 }, -{ 0xCA29, 0xCA29, 0xCA29 }, -{ 0xCA2A, 0xCA2A, 0xCA2A }, -{ 0xCA2B, 0xCA2B, 0xCA2B }, -{ 0xCA2C, 0xCA2C, 0xCA2C }, -{ 0xCA2D, 0xCA2D, 0xCA2D }, -{ 0xCA2E, 0xCA2E, 0xCA2E }, -{ 0xCA2F, 0xCA2F, 0xCA2F }, -{ 0xCA30, 0xCA30, 0xCA30 }, -{ 0xCA31, 0xCA31, 0xCA31 }, -{ 0xCA32, 0xCA32, 0xCA32 }, -{ 0xCA33, 0xCA33, 0xCA33 }, -{ 0xCA34, 0xCA34, 0xCA34 }, -{ 0xCA35, 0xCA35, 0xCA35 }, -{ 0xCA36, 0xCA36, 0xCA36 }, -{ 0xCA37, 0xCA37, 0xCA37 }, -{ 0xCA38, 0xCA38, 0xCA38 }, -{ 0xCA39, 0xCA39, 0xCA39 }, -{ 0xCA3A, 0xCA3A, 0xCA3A }, -{ 0xCA3B, 0xCA3B, 0xCA3B }, -{ 0xCA3C, 0xCA3C, 0xCA3C }, -{ 0xCA3D, 0xCA3D, 0xCA3D }, -{ 0xCA3E, 0xCA3E, 0xCA3E }, -{ 0xCA3F, 0xCA3F, 0xCA3F }, -{ 0xCA40, 0xCA40, 0xCA40 }, -{ 0xCA41, 0xCA41, 0xCA41 }, -{ 0xCA42, 0xCA42, 0xCA42 }, -{ 0xCA43, 0xCA43, 0xCA43 }, -{ 0xCA44, 0xCA44, 0xCA44 }, -{ 0xCA45, 0xCA45, 0xCA45 }, -{ 0xCA46, 0xCA46, 0xCA46 }, -{ 0xCA47, 0xCA47, 0xCA47 }, -{ 0xCA48, 0xCA48, 0xCA48 }, -{ 0xCA49, 0xCA49, 0xCA49 }, -{ 0xCA4A, 0xCA4A, 0xCA4A }, -{ 0xCA4B, 0xCA4B, 0xCA4B }, -{ 0xCA4C, 0xCA4C, 0xCA4C }, -{ 0xCA4D, 0xCA4D, 0xCA4D }, -{ 0xCA4E, 0xCA4E, 0xCA4E }, -{ 0xCA4F, 0xCA4F, 0xCA4F }, -{ 0xCA50, 0xCA50, 0xCA50 }, -{ 0xCA51, 0xCA51, 0xCA51 }, -{ 0xCA52, 0xCA52, 0xCA52 }, -{ 0xCA53, 0xCA53, 0xCA53 }, -{ 0xCA54, 0xCA54, 0xCA54 }, -{ 0xCA55, 0xCA55, 0xCA55 }, -{ 0xCA56, 0xCA56, 0xCA56 }, -{ 0xCA57, 0xCA57, 0xCA57 }, -{ 0xCA58, 0xCA58, 0xCA58 }, -{ 0xCA59, 0xCA59, 0xCA59 }, -{ 0xCA5A, 0xCA5A, 0xCA5A }, -{ 0xCA5B, 0xCA5B, 0xCA5B }, -{ 0xCA5C, 0xCA5C, 0xCA5C }, -{ 0xCA5D, 0xCA5D, 0xCA5D }, -{ 0xCA5E, 0xCA5E, 0xCA5E }, -{ 0xCA5F, 0xCA5F, 0xCA5F }, -{ 0xCA60, 0xCA60, 0xCA60 }, -{ 0xCA61, 0xCA61, 0xCA61 }, -{ 0xCA62, 0xCA62, 0xCA62 }, -{ 0xCA63, 0xCA63, 0xCA63 }, -{ 0xCA64, 0xCA64, 0xCA64 }, -{ 0xCA65, 0xCA65, 0xCA65 }, -{ 0xCA66, 0xCA66, 0xCA66 }, -{ 0xCA67, 0xCA67, 0xCA67 }, -{ 0xCA68, 0xCA68, 0xCA68 }, -{ 0xCA69, 0xCA69, 0xCA69 }, -{ 0xCA6A, 0xCA6A, 0xCA6A }, -{ 0xCA6B, 0xCA6B, 0xCA6B }, -{ 0xCA6C, 0xCA6C, 0xCA6C }, -{ 0xCA6D, 0xCA6D, 0xCA6D }, -{ 0xCA6E, 0xCA6E, 0xCA6E }, -{ 0xCA6F, 0xCA6F, 0xCA6F }, -{ 0xCA70, 0xCA70, 0xCA70 }, -{ 0xCA71, 0xCA71, 0xCA71 }, -{ 0xCA72, 0xCA72, 0xCA72 }, -{ 0xCA73, 0xCA73, 0xCA73 }, -{ 0xCA74, 0xCA74, 0xCA74 }, -{ 0xCA75, 0xCA75, 0xCA75 }, -{ 0xCA76, 0xCA76, 0xCA76 }, -{ 0xCA77, 0xCA77, 0xCA77 }, -{ 0xCA78, 0xCA78, 0xCA78 }, -{ 0xCA79, 0xCA79, 0xCA79 }, -{ 0xCA7A, 0xCA7A, 0xCA7A }, -{ 0xCA7B, 0xCA7B, 0xCA7B }, -{ 0xCA7C, 0xCA7C, 0xCA7C }, -{ 0xCA7D, 0xCA7D, 0xCA7D }, -{ 0xCA7E, 0xCA7E, 0xCA7E }, -{ 0xCA7F, 0xCA7F, 0xCA7F }, -{ 0xCA80, 0xCA80, 0xCA80 }, -{ 0xCA81, 0xCA81, 0xCA81 }, -{ 0xCA82, 0xCA82, 0xCA82 }, -{ 0xCA83, 0xCA83, 0xCA83 }, -{ 0xCA84, 0xCA84, 0xCA84 }, -{ 0xCA85, 0xCA85, 0xCA85 }, -{ 0xCA86, 0xCA86, 0xCA86 }, -{ 0xCA87, 0xCA87, 0xCA87 }, -{ 0xCA88, 0xCA88, 0xCA88 }, -{ 0xCA89, 0xCA89, 0xCA89 }, -{ 0xCA8A, 0xCA8A, 0xCA8A }, -{ 0xCA8B, 0xCA8B, 0xCA8B }, -{ 0xCA8C, 0xCA8C, 0xCA8C }, -{ 0xCA8D, 0xCA8D, 0xCA8D }, -{ 0xCA8E, 0xCA8E, 0xCA8E }, -{ 0xCA8F, 0xCA8F, 0xCA8F }, -{ 0xCA90, 0xCA90, 0xCA90 }, -{ 0xCA91, 0xCA91, 0xCA91 }, -{ 0xCA92, 0xCA92, 0xCA92 }, -{ 0xCA93, 0xCA93, 0xCA93 }, -{ 0xCA94, 0xCA94, 0xCA94 }, -{ 0xCA95, 0xCA95, 0xCA95 }, -{ 0xCA96, 0xCA96, 0xCA96 }, -{ 0xCA97, 0xCA97, 0xCA97 }, -{ 0xCA98, 0xCA98, 0xCA98 }, -{ 0xCA99, 0xCA99, 0xCA99 }, -{ 0xCA9A, 0xCA9A, 0xCA9A }, -{ 0xCA9B, 0xCA9B, 0xCA9B }, -{ 0xCA9C, 0xCA9C, 0xCA9C }, -{ 0xCA9D, 0xCA9D, 0xCA9D }, -{ 0xCA9E, 0xCA9E, 0xCA9E }, -{ 0xCA9F, 0xCA9F, 0xCA9F }, -{ 0xCAA0, 0xCAA0, 0xCAA0 }, -{ 0xCAA1, 0xCAA1, 0xCAA1 }, -{ 0xCAA2, 0xCAA2, 0xCAA2 }, -{ 0xCAA3, 0xCAA3, 0xCAA3 }, -{ 0xCAA4, 0xCAA4, 0xCAA4 }, -{ 0xCAA5, 0xCAA5, 0xCAA5 }, -{ 0xCAA6, 0xCAA6, 0xCAA6 }, -{ 0xCAA7, 0xCAA7, 0xCAA7 }, -{ 0xCAA8, 0xCAA8, 0xCAA8 }, -{ 0xCAA9, 0xCAA9, 0xCAA9 }, -{ 0xCAAA, 0xCAAA, 0xCAAA }, -{ 0xCAAB, 0xCAAB, 0xCAAB }, -{ 0xCAAC, 0xCAAC, 0xCAAC }, -{ 0xCAAD, 0xCAAD, 0xCAAD }, -{ 0xCAAE, 0xCAAE, 0xCAAE }, -{ 0xCAAF, 0xCAAF, 0xCAAF }, -{ 0xCAB0, 0xCAB0, 0xCAB0 }, -{ 0xCAB1, 0xCAB1, 0xCAB1 }, -{ 0xCAB2, 0xCAB2, 0xCAB2 }, -{ 0xCAB3, 0xCAB3, 0xCAB3 }, -{ 0xCAB4, 0xCAB4, 0xCAB4 }, -{ 0xCAB5, 0xCAB5, 0xCAB5 }, -{ 0xCAB6, 0xCAB6, 0xCAB6 }, -{ 0xCAB7, 0xCAB7, 0xCAB7 }, -{ 0xCAB8, 0xCAB8, 0xCAB8 }, -{ 0xCAB9, 0xCAB9, 0xCAB9 }, -{ 0xCABA, 0xCABA, 0xCABA }, -{ 0xCABB, 0xCABB, 0xCABB }, -{ 0xCABC, 0xCABC, 0xCABC }, -{ 0xCABD, 0xCABD, 0xCABD }, -{ 0xCABE, 0xCABE, 0xCABE }, -{ 0xCABF, 0xCABF, 0xCABF }, -{ 0xCAC0, 0xCAC0, 0xCAC0 }, -{ 0xCAC1, 0xCAC1, 0xCAC1 }, -{ 0xCAC2, 0xCAC2, 0xCAC2 }, -{ 0xCAC3, 0xCAC3, 0xCAC3 }, -{ 0xCAC4, 0xCAC4, 0xCAC4 }, -{ 0xCAC5, 0xCAC5, 0xCAC5 }, -{ 0xCAC6, 0xCAC6, 0xCAC6 }, -{ 0xCAC7, 0xCAC7, 0xCAC7 }, -{ 0xCAC8, 0xCAC8, 0xCAC8 }, -{ 0xCAC9, 0xCAC9, 0xCAC9 }, -{ 0xCACA, 0xCACA, 0xCACA }, -{ 0xCACB, 0xCACB, 0xCACB }, -{ 0xCACC, 0xCACC, 0xCACC }, -{ 0xCACD, 0xCACD, 0xCACD }, -{ 0xCACE, 0xCACE, 0xCACE }, -{ 0xCACF, 0xCACF, 0xCACF }, -{ 0xCAD0, 0xCAD0, 0xCAD0 }, -{ 0xCAD1, 0xCAD1, 0xCAD1 }, -{ 0xCAD2, 0xCAD2, 0xCAD2 }, -{ 0xCAD3, 0xCAD3, 0xCAD3 }, -{ 0xCAD4, 0xCAD4, 0xCAD4 }, -{ 0xCAD5, 0xCAD5, 0xCAD5 }, -{ 0xCAD6, 0xCAD6, 0xCAD6 }, -{ 0xCAD7, 0xCAD7, 0xCAD7 }, -{ 0xCAD8, 0xCAD8, 0xCAD8 }, -{ 0xCAD9, 0xCAD9, 0xCAD9 }, -{ 0xCADA, 0xCADA, 0xCADA }, -{ 0xCADB, 0xCADB, 0xCADB }, -{ 0xCADC, 0xCADC, 0xCADC }, -{ 0xCADD, 0xCADD, 0xCADD }, -{ 0xCADE, 0xCADE, 0xCADE }, -{ 0xCADF, 0xCADF, 0xCADF }, -{ 0xCAE0, 0xCAE0, 0xCAE0 }, -{ 0xCAE1, 0xCAE1, 0xCAE1 }, -{ 0xCAE2, 0xCAE2, 0xCAE2 }, -{ 0xCAE3, 0xCAE3, 0xCAE3 }, -{ 0xCAE4, 0xCAE4, 0xCAE4 }, -{ 0xCAE5, 0xCAE5, 0xCAE5 }, -{ 0xCAE6, 0xCAE6, 0xCAE6 }, -{ 0xCAE7, 0xCAE7, 0xCAE7 }, -{ 0xCAE8, 0xCAE8, 0xCAE8 }, -{ 0xCAE9, 0xCAE9, 0xCAE9 }, -{ 0xCAEA, 0xCAEA, 0xCAEA }, -{ 0xCAEB, 0xCAEB, 0xCAEB }, -{ 0xCAEC, 0xCAEC, 0xCAEC }, -{ 0xCAED, 0xCAED, 0xCAED }, -{ 0xCAEE, 0xCAEE, 0xCAEE }, -{ 0xCAEF, 0xCAEF, 0xCAEF }, -{ 0xCAF0, 0xCAF0, 0xCAF0 }, -{ 0xCAF1, 0xCAF1, 0xCAF1 }, -{ 0xCAF2, 0xCAF2, 0xCAF2 }, -{ 0xCAF3, 0xCAF3, 0xCAF3 }, -{ 0xCAF4, 0xCAF4, 0xCAF4 }, -{ 0xCAF5, 0xCAF5, 0xCAF5 }, -{ 0xCAF6, 0xCAF6, 0xCAF6 }, -{ 0xCAF7, 0xCAF7, 0xCAF7 }, -{ 0xCAF8, 0xCAF8, 0xCAF8 }, -{ 0xCAF9, 0xCAF9, 0xCAF9 }, -{ 0xCAFA, 0xCAFA, 0xCAFA }, -{ 0xCAFB, 0xCAFB, 0xCAFB }, -{ 0xCAFC, 0xCAFC, 0xCAFC }, -{ 0xCAFD, 0xCAFD, 0xCAFD }, -{ 0xCAFE, 0xCAFE, 0xCAFE }, -{ 0xCAFF, 0xCAFF, 0xCAFF }, -{ 0xCB00, 0xCB00, 0xCB00 }, -{ 0xCB01, 0xCB01, 0xCB01 }, -{ 0xCB02, 0xCB02, 0xCB02 }, -{ 0xCB03, 0xCB03, 0xCB03 }, -{ 0xCB04, 0xCB04, 0xCB04 }, -{ 0xCB05, 0xCB05, 0xCB05 }, -{ 0xCB06, 0xCB06, 0xCB06 }, -{ 0xCB07, 0xCB07, 0xCB07 }, -{ 0xCB08, 0xCB08, 0xCB08 }, -{ 0xCB09, 0xCB09, 0xCB09 }, -{ 0xCB0A, 0xCB0A, 0xCB0A }, -{ 0xCB0B, 0xCB0B, 0xCB0B }, -{ 0xCB0C, 0xCB0C, 0xCB0C }, -{ 0xCB0D, 0xCB0D, 0xCB0D }, -{ 0xCB0E, 0xCB0E, 0xCB0E }, -{ 0xCB0F, 0xCB0F, 0xCB0F }, -{ 0xCB10, 0xCB10, 0xCB10 }, -{ 0xCB11, 0xCB11, 0xCB11 }, -{ 0xCB12, 0xCB12, 0xCB12 }, -{ 0xCB13, 0xCB13, 0xCB13 }, -{ 0xCB14, 0xCB14, 0xCB14 }, -{ 0xCB15, 0xCB15, 0xCB15 }, -{ 0xCB16, 0xCB16, 0xCB16 }, -{ 0xCB17, 0xCB17, 0xCB17 }, -{ 0xCB18, 0xCB18, 0xCB18 }, -{ 0xCB19, 0xCB19, 0xCB19 }, -{ 0xCB1A, 0xCB1A, 0xCB1A }, -{ 0xCB1B, 0xCB1B, 0xCB1B }, -{ 0xCB1C, 0xCB1C, 0xCB1C }, -{ 0xCB1D, 0xCB1D, 0xCB1D }, -{ 0xCB1E, 0xCB1E, 0xCB1E }, -{ 0xCB1F, 0xCB1F, 0xCB1F }, -{ 0xCB20, 0xCB20, 0xCB20 }, -{ 0xCB21, 0xCB21, 0xCB21 }, -{ 0xCB22, 0xCB22, 0xCB22 }, -{ 0xCB23, 0xCB23, 0xCB23 }, -{ 0xCB24, 0xCB24, 0xCB24 }, -{ 0xCB25, 0xCB25, 0xCB25 }, -{ 0xCB26, 0xCB26, 0xCB26 }, -{ 0xCB27, 0xCB27, 0xCB27 }, -{ 0xCB28, 0xCB28, 0xCB28 }, -{ 0xCB29, 0xCB29, 0xCB29 }, -{ 0xCB2A, 0xCB2A, 0xCB2A }, -{ 0xCB2B, 0xCB2B, 0xCB2B }, -{ 0xCB2C, 0xCB2C, 0xCB2C }, -{ 0xCB2D, 0xCB2D, 0xCB2D }, -{ 0xCB2E, 0xCB2E, 0xCB2E }, -{ 0xCB2F, 0xCB2F, 0xCB2F }, -{ 0xCB30, 0xCB30, 0xCB30 }, -{ 0xCB31, 0xCB31, 0xCB31 }, -{ 0xCB32, 0xCB32, 0xCB32 }, -{ 0xCB33, 0xCB33, 0xCB33 }, -{ 0xCB34, 0xCB34, 0xCB34 }, -{ 0xCB35, 0xCB35, 0xCB35 }, -{ 0xCB36, 0xCB36, 0xCB36 }, -{ 0xCB37, 0xCB37, 0xCB37 }, -{ 0xCB38, 0xCB38, 0xCB38 }, -{ 0xCB39, 0xCB39, 0xCB39 }, -{ 0xCB3A, 0xCB3A, 0xCB3A }, -{ 0xCB3B, 0xCB3B, 0xCB3B }, -{ 0xCB3C, 0xCB3C, 0xCB3C }, -{ 0xCB3D, 0xCB3D, 0xCB3D }, -{ 0xCB3E, 0xCB3E, 0xCB3E }, -{ 0xCB3F, 0xCB3F, 0xCB3F }, -{ 0xCB40, 0xCB40, 0xCB40 }, -{ 0xCB41, 0xCB41, 0xCB41 }, -{ 0xCB42, 0xCB42, 0xCB42 }, -{ 0xCB43, 0xCB43, 0xCB43 }, -{ 0xCB44, 0xCB44, 0xCB44 }, -{ 0xCB45, 0xCB45, 0xCB45 }, -{ 0xCB46, 0xCB46, 0xCB46 }, -{ 0xCB47, 0xCB47, 0xCB47 }, -{ 0xCB48, 0xCB48, 0xCB48 }, -{ 0xCB49, 0xCB49, 0xCB49 }, -{ 0xCB4A, 0xCB4A, 0xCB4A }, -{ 0xCB4B, 0xCB4B, 0xCB4B }, -{ 0xCB4C, 0xCB4C, 0xCB4C }, -{ 0xCB4D, 0xCB4D, 0xCB4D }, -{ 0xCB4E, 0xCB4E, 0xCB4E }, -{ 0xCB4F, 0xCB4F, 0xCB4F }, -{ 0xCB50, 0xCB50, 0xCB50 }, -{ 0xCB51, 0xCB51, 0xCB51 }, -{ 0xCB52, 0xCB52, 0xCB52 }, -{ 0xCB53, 0xCB53, 0xCB53 }, -{ 0xCB54, 0xCB54, 0xCB54 }, -{ 0xCB55, 0xCB55, 0xCB55 }, -{ 0xCB56, 0xCB56, 0xCB56 }, -{ 0xCB57, 0xCB57, 0xCB57 }, -{ 0xCB58, 0xCB58, 0xCB58 }, -{ 0xCB59, 0xCB59, 0xCB59 }, -{ 0xCB5A, 0xCB5A, 0xCB5A }, -{ 0xCB5B, 0xCB5B, 0xCB5B }, -{ 0xCB5C, 0xCB5C, 0xCB5C }, -{ 0xCB5D, 0xCB5D, 0xCB5D }, -{ 0xCB5E, 0xCB5E, 0xCB5E }, -{ 0xCB5F, 0xCB5F, 0xCB5F }, -{ 0xCB60, 0xCB60, 0xCB60 }, -{ 0xCB61, 0xCB61, 0xCB61 }, -{ 0xCB62, 0xCB62, 0xCB62 }, -{ 0xCB63, 0xCB63, 0xCB63 }, -{ 0xCB64, 0xCB64, 0xCB64 }, -{ 0xCB65, 0xCB65, 0xCB65 }, -{ 0xCB66, 0xCB66, 0xCB66 }, -{ 0xCB67, 0xCB67, 0xCB67 }, -{ 0xCB68, 0xCB68, 0xCB68 }, -{ 0xCB69, 0xCB69, 0xCB69 }, -{ 0xCB6A, 0xCB6A, 0xCB6A }, -{ 0xCB6B, 0xCB6B, 0xCB6B }, -{ 0xCB6C, 0xCB6C, 0xCB6C }, -{ 0xCB6D, 0xCB6D, 0xCB6D }, -{ 0xCB6E, 0xCB6E, 0xCB6E }, -{ 0xCB6F, 0xCB6F, 0xCB6F }, -{ 0xCB70, 0xCB70, 0xCB70 }, -{ 0xCB71, 0xCB71, 0xCB71 }, -{ 0xCB72, 0xCB72, 0xCB72 }, -{ 0xCB73, 0xCB73, 0xCB73 }, -{ 0xCB74, 0xCB74, 0xCB74 }, -{ 0xCB75, 0xCB75, 0xCB75 }, -{ 0xCB76, 0xCB76, 0xCB76 }, -{ 0xCB77, 0xCB77, 0xCB77 }, -{ 0xCB78, 0xCB78, 0xCB78 }, -{ 0xCB79, 0xCB79, 0xCB79 }, -{ 0xCB7A, 0xCB7A, 0xCB7A }, -{ 0xCB7B, 0xCB7B, 0xCB7B }, -{ 0xCB7C, 0xCB7C, 0xCB7C }, -{ 0xCB7D, 0xCB7D, 0xCB7D }, -{ 0xCB7E, 0xCB7E, 0xCB7E }, -{ 0xCB7F, 0xCB7F, 0xCB7F }, -{ 0xCB80, 0xCB80, 0xCB80 }, -{ 0xCB81, 0xCB81, 0xCB81 }, -{ 0xCB82, 0xCB82, 0xCB82 }, -{ 0xCB83, 0xCB83, 0xCB83 }, -{ 0xCB84, 0xCB84, 0xCB84 }, -{ 0xCB85, 0xCB85, 0xCB85 }, -{ 0xCB86, 0xCB86, 0xCB86 }, -{ 0xCB87, 0xCB87, 0xCB87 }, -{ 0xCB88, 0xCB88, 0xCB88 }, -{ 0xCB89, 0xCB89, 0xCB89 }, -{ 0xCB8A, 0xCB8A, 0xCB8A }, -{ 0xCB8B, 0xCB8B, 0xCB8B }, -{ 0xCB8C, 0xCB8C, 0xCB8C }, -{ 0xCB8D, 0xCB8D, 0xCB8D }, -{ 0xCB8E, 0xCB8E, 0xCB8E }, -{ 0xCB8F, 0xCB8F, 0xCB8F }, -{ 0xCB90, 0xCB90, 0xCB90 }, -{ 0xCB91, 0xCB91, 0xCB91 }, -{ 0xCB92, 0xCB92, 0xCB92 }, -{ 0xCB93, 0xCB93, 0xCB93 }, -{ 0xCB94, 0xCB94, 0xCB94 }, -{ 0xCB95, 0xCB95, 0xCB95 }, -{ 0xCB96, 0xCB96, 0xCB96 }, -{ 0xCB97, 0xCB97, 0xCB97 }, -{ 0xCB98, 0xCB98, 0xCB98 }, -{ 0xCB99, 0xCB99, 0xCB99 }, -{ 0xCB9A, 0xCB9A, 0xCB9A }, -{ 0xCB9B, 0xCB9B, 0xCB9B }, -{ 0xCB9C, 0xCB9C, 0xCB9C }, -{ 0xCB9D, 0xCB9D, 0xCB9D }, -{ 0xCB9E, 0xCB9E, 0xCB9E }, -{ 0xCB9F, 0xCB9F, 0xCB9F }, -{ 0xCBA0, 0xCBA0, 0xCBA0 }, -{ 0xCBA1, 0xCBA1, 0xCBA1 }, -{ 0xCBA2, 0xCBA2, 0xCBA2 }, -{ 0xCBA3, 0xCBA3, 0xCBA3 }, -{ 0xCBA4, 0xCBA4, 0xCBA4 }, -{ 0xCBA5, 0xCBA5, 0xCBA5 }, -{ 0xCBA6, 0xCBA6, 0xCBA6 }, -{ 0xCBA7, 0xCBA7, 0xCBA7 }, -{ 0xCBA8, 0xCBA8, 0xCBA8 }, -{ 0xCBA9, 0xCBA9, 0xCBA9 }, -{ 0xCBAA, 0xCBAA, 0xCBAA }, -{ 0xCBAB, 0xCBAB, 0xCBAB }, -{ 0xCBAC, 0xCBAC, 0xCBAC }, -{ 0xCBAD, 0xCBAD, 0xCBAD }, -{ 0xCBAE, 0xCBAE, 0xCBAE }, -{ 0xCBAF, 0xCBAF, 0xCBAF }, -{ 0xCBB0, 0xCBB0, 0xCBB0 }, -{ 0xCBB1, 0xCBB1, 0xCBB1 }, -{ 0xCBB2, 0xCBB2, 0xCBB2 }, -{ 0xCBB3, 0xCBB3, 0xCBB3 }, -{ 0xCBB4, 0xCBB4, 0xCBB4 }, -{ 0xCBB5, 0xCBB5, 0xCBB5 }, -{ 0xCBB6, 0xCBB6, 0xCBB6 }, -{ 0xCBB7, 0xCBB7, 0xCBB7 }, -{ 0xCBB8, 0xCBB8, 0xCBB8 }, -{ 0xCBB9, 0xCBB9, 0xCBB9 }, -{ 0xCBBA, 0xCBBA, 0xCBBA }, -{ 0xCBBB, 0xCBBB, 0xCBBB }, -{ 0xCBBC, 0xCBBC, 0xCBBC }, -{ 0xCBBD, 0xCBBD, 0xCBBD }, -{ 0xCBBE, 0xCBBE, 0xCBBE }, -{ 0xCBBF, 0xCBBF, 0xCBBF }, -{ 0xCBC0, 0xCBC0, 0xCBC0 }, -{ 0xCBC1, 0xCBC1, 0xCBC1 }, -{ 0xCBC2, 0xCBC2, 0xCBC2 }, -{ 0xCBC3, 0xCBC3, 0xCBC3 }, -{ 0xCBC4, 0xCBC4, 0xCBC4 }, -{ 0xCBC5, 0xCBC5, 0xCBC5 }, -{ 0xCBC6, 0xCBC6, 0xCBC6 }, -{ 0xCBC7, 0xCBC7, 0xCBC7 }, -{ 0xCBC8, 0xCBC8, 0xCBC8 }, -{ 0xCBC9, 0xCBC9, 0xCBC9 }, -{ 0xCBCA, 0xCBCA, 0xCBCA }, -{ 0xCBCB, 0xCBCB, 0xCBCB }, -{ 0xCBCC, 0xCBCC, 0xCBCC }, -{ 0xCBCD, 0xCBCD, 0xCBCD }, -{ 0xCBCE, 0xCBCE, 0xCBCE }, -{ 0xCBCF, 0xCBCF, 0xCBCF }, -{ 0xCBD0, 0xCBD0, 0xCBD0 }, -{ 0xCBD1, 0xCBD1, 0xCBD1 }, -{ 0xCBD2, 0xCBD2, 0xCBD2 }, -{ 0xCBD3, 0xCBD3, 0xCBD3 }, -{ 0xCBD4, 0xCBD4, 0xCBD4 }, -{ 0xCBD5, 0xCBD5, 0xCBD5 }, -{ 0xCBD6, 0xCBD6, 0xCBD6 }, -{ 0xCBD7, 0xCBD7, 0xCBD7 }, -{ 0xCBD8, 0xCBD8, 0xCBD8 }, -{ 0xCBD9, 0xCBD9, 0xCBD9 }, -{ 0xCBDA, 0xCBDA, 0xCBDA }, -{ 0xCBDB, 0xCBDB, 0xCBDB }, -{ 0xCBDC, 0xCBDC, 0xCBDC }, -{ 0xCBDD, 0xCBDD, 0xCBDD }, -{ 0xCBDE, 0xCBDE, 0xCBDE }, -{ 0xCBDF, 0xCBDF, 0xCBDF }, -{ 0xCBE0, 0xCBE0, 0xCBE0 }, -{ 0xCBE1, 0xCBE1, 0xCBE1 }, -{ 0xCBE2, 0xCBE2, 0xCBE2 }, -{ 0xCBE3, 0xCBE3, 0xCBE3 }, -{ 0xCBE4, 0xCBE4, 0xCBE4 }, -{ 0xCBE5, 0xCBE5, 0xCBE5 }, -{ 0xCBE6, 0xCBE6, 0xCBE6 }, -{ 0xCBE7, 0xCBE7, 0xCBE7 }, -{ 0xCBE8, 0xCBE8, 0xCBE8 }, -{ 0xCBE9, 0xCBE9, 0xCBE9 }, -{ 0xCBEA, 0xCBEA, 0xCBEA }, -{ 0xCBEB, 0xCBEB, 0xCBEB }, -{ 0xCBEC, 0xCBEC, 0xCBEC }, -{ 0xCBED, 0xCBED, 0xCBED }, -{ 0xCBEE, 0xCBEE, 0xCBEE }, -{ 0xCBEF, 0xCBEF, 0xCBEF }, -{ 0xCBF0, 0xCBF0, 0xCBF0 }, -{ 0xCBF1, 0xCBF1, 0xCBF1 }, -{ 0xCBF2, 0xCBF2, 0xCBF2 }, -{ 0xCBF3, 0xCBF3, 0xCBF3 }, -{ 0xCBF4, 0xCBF4, 0xCBF4 }, -{ 0xCBF5, 0xCBF5, 0xCBF5 }, -{ 0xCBF6, 0xCBF6, 0xCBF6 }, -{ 0xCBF7, 0xCBF7, 0xCBF7 }, -{ 0xCBF8, 0xCBF8, 0xCBF8 }, -{ 0xCBF9, 0xCBF9, 0xCBF9 }, -{ 0xCBFA, 0xCBFA, 0xCBFA }, -{ 0xCBFB, 0xCBFB, 0xCBFB }, -{ 0xCBFC, 0xCBFC, 0xCBFC }, -{ 0xCBFD, 0xCBFD, 0xCBFD }, -{ 0xCBFE, 0xCBFE, 0xCBFE }, -{ 0xCBFF, 0xCBFF, 0xCBFF }, -{ 0xCC00, 0xCC00, 0xCC00 }, -{ 0xCC01, 0xCC01, 0xCC01 }, -{ 0xCC02, 0xCC02, 0xCC02 }, -{ 0xCC03, 0xCC03, 0xCC03 }, -{ 0xCC04, 0xCC04, 0xCC04 }, -{ 0xCC05, 0xCC05, 0xCC05 }, -{ 0xCC06, 0xCC06, 0xCC06 }, -{ 0xCC07, 0xCC07, 0xCC07 }, -{ 0xCC08, 0xCC08, 0xCC08 }, -{ 0xCC09, 0xCC09, 0xCC09 }, -{ 0xCC0A, 0xCC0A, 0xCC0A }, -{ 0xCC0B, 0xCC0B, 0xCC0B }, -{ 0xCC0C, 0xCC0C, 0xCC0C }, -{ 0xCC0D, 0xCC0D, 0xCC0D }, -{ 0xCC0E, 0xCC0E, 0xCC0E }, -{ 0xCC0F, 0xCC0F, 0xCC0F }, -{ 0xCC10, 0xCC10, 0xCC10 }, -{ 0xCC11, 0xCC11, 0xCC11 }, -{ 0xCC12, 0xCC12, 0xCC12 }, -{ 0xCC13, 0xCC13, 0xCC13 }, -{ 0xCC14, 0xCC14, 0xCC14 }, -{ 0xCC15, 0xCC15, 0xCC15 }, -{ 0xCC16, 0xCC16, 0xCC16 }, -{ 0xCC17, 0xCC17, 0xCC17 }, -{ 0xCC18, 0xCC18, 0xCC18 }, -{ 0xCC19, 0xCC19, 0xCC19 }, -{ 0xCC1A, 0xCC1A, 0xCC1A }, -{ 0xCC1B, 0xCC1B, 0xCC1B }, -{ 0xCC1C, 0xCC1C, 0xCC1C }, -{ 0xCC1D, 0xCC1D, 0xCC1D }, -{ 0xCC1E, 0xCC1E, 0xCC1E }, -{ 0xCC1F, 0xCC1F, 0xCC1F }, -{ 0xCC20, 0xCC20, 0xCC20 }, -{ 0xCC21, 0xCC21, 0xCC21 }, -{ 0xCC22, 0xCC22, 0xCC22 }, -{ 0xCC23, 0xCC23, 0xCC23 }, -{ 0xCC24, 0xCC24, 0xCC24 }, -{ 0xCC25, 0xCC25, 0xCC25 }, -{ 0xCC26, 0xCC26, 0xCC26 }, -{ 0xCC27, 0xCC27, 0xCC27 }, -{ 0xCC28, 0xCC28, 0xCC28 }, -{ 0xCC29, 0xCC29, 0xCC29 }, -{ 0xCC2A, 0xCC2A, 0xCC2A }, -{ 0xCC2B, 0xCC2B, 0xCC2B }, -{ 0xCC2C, 0xCC2C, 0xCC2C }, -{ 0xCC2D, 0xCC2D, 0xCC2D }, -{ 0xCC2E, 0xCC2E, 0xCC2E }, -{ 0xCC2F, 0xCC2F, 0xCC2F }, -{ 0xCC30, 0xCC30, 0xCC30 }, -{ 0xCC31, 0xCC31, 0xCC31 }, -{ 0xCC32, 0xCC32, 0xCC32 }, -{ 0xCC33, 0xCC33, 0xCC33 }, -{ 0xCC34, 0xCC34, 0xCC34 }, -{ 0xCC35, 0xCC35, 0xCC35 }, -{ 0xCC36, 0xCC36, 0xCC36 }, -{ 0xCC37, 0xCC37, 0xCC37 }, -{ 0xCC38, 0xCC38, 0xCC38 }, -{ 0xCC39, 0xCC39, 0xCC39 }, -{ 0xCC3A, 0xCC3A, 0xCC3A }, -{ 0xCC3B, 0xCC3B, 0xCC3B }, -{ 0xCC3C, 0xCC3C, 0xCC3C }, -{ 0xCC3D, 0xCC3D, 0xCC3D }, -{ 0xCC3E, 0xCC3E, 0xCC3E }, -{ 0xCC3F, 0xCC3F, 0xCC3F }, -{ 0xCC40, 0xCC40, 0xCC40 }, -{ 0xCC41, 0xCC41, 0xCC41 }, -{ 0xCC42, 0xCC42, 0xCC42 }, -{ 0xCC43, 0xCC43, 0xCC43 }, -{ 0xCC44, 0xCC44, 0xCC44 }, -{ 0xCC45, 0xCC45, 0xCC45 }, -{ 0xCC46, 0xCC46, 0xCC46 }, -{ 0xCC47, 0xCC47, 0xCC47 }, -{ 0xCC48, 0xCC48, 0xCC48 }, -{ 0xCC49, 0xCC49, 0xCC49 }, -{ 0xCC4A, 0xCC4A, 0xCC4A }, -{ 0xCC4B, 0xCC4B, 0xCC4B }, -{ 0xCC4C, 0xCC4C, 0xCC4C }, -{ 0xCC4D, 0xCC4D, 0xCC4D }, -{ 0xCC4E, 0xCC4E, 0xCC4E }, -{ 0xCC4F, 0xCC4F, 0xCC4F }, -{ 0xCC50, 0xCC50, 0xCC50 }, -{ 0xCC51, 0xCC51, 0xCC51 }, -{ 0xCC52, 0xCC52, 0xCC52 }, -{ 0xCC53, 0xCC53, 0xCC53 }, -{ 0xCC54, 0xCC54, 0xCC54 }, -{ 0xCC55, 0xCC55, 0xCC55 }, -{ 0xCC56, 0xCC56, 0xCC56 }, -{ 0xCC57, 0xCC57, 0xCC57 }, -{ 0xCC58, 0xCC58, 0xCC58 }, -{ 0xCC59, 0xCC59, 0xCC59 }, -{ 0xCC5A, 0xCC5A, 0xCC5A }, -{ 0xCC5B, 0xCC5B, 0xCC5B }, -{ 0xCC5C, 0xCC5C, 0xCC5C }, -{ 0xCC5D, 0xCC5D, 0xCC5D }, -{ 0xCC5E, 0xCC5E, 0xCC5E }, -{ 0xCC5F, 0xCC5F, 0xCC5F }, -{ 0xCC60, 0xCC60, 0xCC60 }, -{ 0xCC61, 0xCC61, 0xCC61 }, -{ 0xCC62, 0xCC62, 0xCC62 }, -{ 0xCC63, 0xCC63, 0xCC63 }, -{ 0xCC64, 0xCC64, 0xCC64 }, -{ 0xCC65, 0xCC65, 0xCC65 }, -{ 0xCC66, 0xCC66, 0xCC66 }, -{ 0xCC67, 0xCC67, 0xCC67 }, -{ 0xCC68, 0xCC68, 0xCC68 }, -{ 0xCC69, 0xCC69, 0xCC69 }, -{ 0xCC6A, 0xCC6A, 0xCC6A }, -{ 0xCC6B, 0xCC6B, 0xCC6B }, -{ 0xCC6C, 0xCC6C, 0xCC6C }, -{ 0xCC6D, 0xCC6D, 0xCC6D }, -{ 0xCC6E, 0xCC6E, 0xCC6E }, -{ 0xCC6F, 0xCC6F, 0xCC6F }, -{ 0xCC70, 0xCC70, 0xCC70 }, -{ 0xCC71, 0xCC71, 0xCC71 }, -{ 0xCC72, 0xCC72, 0xCC72 }, -{ 0xCC73, 0xCC73, 0xCC73 }, -{ 0xCC74, 0xCC74, 0xCC74 }, -{ 0xCC75, 0xCC75, 0xCC75 }, -{ 0xCC76, 0xCC76, 0xCC76 }, -{ 0xCC77, 0xCC77, 0xCC77 }, -{ 0xCC78, 0xCC78, 0xCC78 }, -{ 0xCC79, 0xCC79, 0xCC79 }, -{ 0xCC7A, 0xCC7A, 0xCC7A }, -{ 0xCC7B, 0xCC7B, 0xCC7B }, -{ 0xCC7C, 0xCC7C, 0xCC7C }, -{ 0xCC7D, 0xCC7D, 0xCC7D }, -{ 0xCC7E, 0xCC7E, 0xCC7E }, -{ 0xCC7F, 0xCC7F, 0xCC7F }, -{ 0xCC80, 0xCC80, 0xCC80 }, -{ 0xCC81, 0xCC81, 0xCC81 }, -{ 0xCC82, 0xCC82, 0xCC82 }, -{ 0xCC83, 0xCC83, 0xCC83 }, -{ 0xCC84, 0xCC84, 0xCC84 }, -{ 0xCC85, 0xCC85, 0xCC85 }, -{ 0xCC86, 0xCC86, 0xCC86 }, -{ 0xCC87, 0xCC87, 0xCC87 }, -{ 0xCC88, 0xCC88, 0xCC88 }, -{ 0xCC89, 0xCC89, 0xCC89 }, -{ 0xCC8A, 0xCC8A, 0xCC8A }, -{ 0xCC8B, 0xCC8B, 0xCC8B }, -{ 0xCC8C, 0xCC8C, 0xCC8C }, -{ 0xCC8D, 0xCC8D, 0xCC8D }, -{ 0xCC8E, 0xCC8E, 0xCC8E }, -{ 0xCC8F, 0xCC8F, 0xCC8F }, -{ 0xCC90, 0xCC90, 0xCC90 }, -{ 0xCC91, 0xCC91, 0xCC91 }, -{ 0xCC92, 0xCC92, 0xCC92 }, -{ 0xCC93, 0xCC93, 0xCC93 }, -{ 0xCC94, 0xCC94, 0xCC94 }, -{ 0xCC95, 0xCC95, 0xCC95 }, -{ 0xCC96, 0xCC96, 0xCC96 }, -{ 0xCC97, 0xCC97, 0xCC97 }, -{ 0xCC98, 0xCC98, 0xCC98 }, -{ 0xCC99, 0xCC99, 0xCC99 }, -{ 0xCC9A, 0xCC9A, 0xCC9A }, -{ 0xCC9B, 0xCC9B, 0xCC9B }, -{ 0xCC9C, 0xCC9C, 0xCC9C }, -{ 0xCC9D, 0xCC9D, 0xCC9D }, -{ 0xCC9E, 0xCC9E, 0xCC9E }, -{ 0xCC9F, 0xCC9F, 0xCC9F }, -{ 0xCCA0, 0xCCA0, 0xCCA0 }, -{ 0xCCA1, 0xCCA1, 0xCCA1 }, -{ 0xCCA2, 0xCCA2, 0xCCA2 }, -{ 0xCCA3, 0xCCA3, 0xCCA3 }, -{ 0xCCA4, 0xCCA4, 0xCCA4 }, -{ 0xCCA5, 0xCCA5, 0xCCA5 }, -{ 0xCCA6, 0xCCA6, 0xCCA6 }, -{ 0xCCA7, 0xCCA7, 0xCCA7 }, -{ 0xCCA8, 0xCCA8, 0xCCA8 }, -{ 0xCCA9, 0xCCA9, 0xCCA9 }, -{ 0xCCAA, 0xCCAA, 0xCCAA }, -{ 0xCCAB, 0xCCAB, 0xCCAB }, -{ 0xCCAC, 0xCCAC, 0xCCAC }, -{ 0xCCAD, 0xCCAD, 0xCCAD }, -{ 0xCCAE, 0xCCAE, 0xCCAE }, -{ 0xCCAF, 0xCCAF, 0xCCAF }, -{ 0xCCB0, 0xCCB0, 0xCCB0 }, -{ 0xCCB1, 0xCCB1, 0xCCB1 }, -{ 0xCCB2, 0xCCB2, 0xCCB2 }, -{ 0xCCB3, 0xCCB3, 0xCCB3 }, -{ 0xCCB4, 0xCCB4, 0xCCB4 }, -{ 0xCCB5, 0xCCB5, 0xCCB5 }, -{ 0xCCB6, 0xCCB6, 0xCCB6 }, -{ 0xCCB7, 0xCCB7, 0xCCB7 }, -{ 0xCCB8, 0xCCB8, 0xCCB8 }, -{ 0xCCB9, 0xCCB9, 0xCCB9 }, -{ 0xCCBA, 0xCCBA, 0xCCBA }, -{ 0xCCBB, 0xCCBB, 0xCCBB }, -{ 0xCCBC, 0xCCBC, 0xCCBC }, -{ 0xCCBD, 0xCCBD, 0xCCBD }, -{ 0xCCBE, 0xCCBE, 0xCCBE }, -{ 0xCCBF, 0xCCBF, 0xCCBF }, -{ 0xCCC0, 0xCCC0, 0xCCC0 }, -{ 0xCCC1, 0xCCC1, 0xCCC1 }, -{ 0xCCC2, 0xCCC2, 0xCCC2 }, -{ 0xCCC3, 0xCCC3, 0xCCC3 }, -{ 0xCCC4, 0xCCC4, 0xCCC4 }, -{ 0xCCC5, 0xCCC5, 0xCCC5 }, -{ 0xCCC6, 0xCCC6, 0xCCC6 }, -{ 0xCCC7, 0xCCC7, 0xCCC7 }, -{ 0xCCC8, 0xCCC8, 0xCCC8 }, -{ 0xCCC9, 0xCCC9, 0xCCC9 }, -{ 0xCCCA, 0xCCCA, 0xCCCA }, -{ 0xCCCB, 0xCCCB, 0xCCCB }, -{ 0xCCCC, 0xCCCC, 0xCCCC }, -{ 0xCCCD, 0xCCCD, 0xCCCD }, -{ 0xCCCE, 0xCCCE, 0xCCCE }, -{ 0xCCCF, 0xCCCF, 0xCCCF }, -{ 0xCCD0, 0xCCD0, 0xCCD0 }, -{ 0xCCD1, 0xCCD1, 0xCCD1 }, -{ 0xCCD2, 0xCCD2, 0xCCD2 }, -{ 0xCCD3, 0xCCD3, 0xCCD3 }, -{ 0xCCD4, 0xCCD4, 0xCCD4 }, -{ 0xCCD5, 0xCCD5, 0xCCD5 }, -{ 0xCCD6, 0xCCD6, 0xCCD6 }, -{ 0xCCD7, 0xCCD7, 0xCCD7 }, -{ 0xCCD8, 0xCCD8, 0xCCD8 }, -{ 0xCCD9, 0xCCD9, 0xCCD9 }, -{ 0xCCDA, 0xCCDA, 0xCCDA }, -{ 0xCCDB, 0xCCDB, 0xCCDB }, -{ 0xCCDC, 0xCCDC, 0xCCDC }, -{ 0xCCDD, 0xCCDD, 0xCCDD }, -{ 0xCCDE, 0xCCDE, 0xCCDE }, -{ 0xCCDF, 0xCCDF, 0xCCDF }, -{ 0xCCE0, 0xCCE0, 0xCCE0 }, -{ 0xCCE1, 0xCCE1, 0xCCE1 }, -{ 0xCCE2, 0xCCE2, 0xCCE2 }, -{ 0xCCE3, 0xCCE3, 0xCCE3 }, -{ 0xCCE4, 0xCCE4, 0xCCE4 }, -{ 0xCCE5, 0xCCE5, 0xCCE5 }, -{ 0xCCE6, 0xCCE6, 0xCCE6 }, -{ 0xCCE7, 0xCCE7, 0xCCE7 }, -{ 0xCCE8, 0xCCE8, 0xCCE8 }, -{ 0xCCE9, 0xCCE9, 0xCCE9 }, -{ 0xCCEA, 0xCCEA, 0xCCEA }, -{ 0xCCEB, 0xCCEB, 0xCCEB }, -{ 0xCCEC, 0xCCEC, 0xCCEC }, -{ 0xCCED, 0xCCED, 0xCCED }, -{ 0xCCEE, 0xCCEE, 0xCCEE }, -{ 0xCCEF, 0xCCEF, 0xCCEF }, -{ 0xCCF0, 0xCCF0, 0xCCF0 }, -{ 0xCCF1, 0xCCF1, 0xCCF1 }, -{ 0xCCF2, 0xCCF2, 0xCCF2 }, -{ 0xCCF3, 0xCCF3, 0xCCF3 }, -{ 0xCCF4, 0xCCF4, 0xCCF4 }, -{ 0xCCF5, 0xCCF5, 0xCCF5 }, -{ 0xCCF6, 0xCCF6, 0xCCF6 }, -{ 0xCCF7, 0xCCF7, 0xCCF7 }, -{ 0xCCF8, 0xCCF8, 0xCCF8 }, -{ 0xCCF9, 0xCCF9, 0xCCF9 }, -{ 0xCCFA, 0xCCFA, 0xCCFA }, -{ 0xCCFB, 0xCCFB, 0xCCFB }, -{ 0xCCFC, 0xCCFC, 0xCCFC }, -{ 0xCCFD, 0xCCFD, 0xCCFD }, -{ 0xCCFE, 0xCCFE, 0xCCFE }, -{ 0xCCFF, 0xCCFF, 0xCCFF }, -{ 0xCD00, 0xCD00, 0xCD00 }, -{ 0xCD01, 0xCD01, 0xCD01 }, -{ 0xCD02, 0xCD02, 0xCD02 }, -{ 0xCD03, 0xCD03, 0xCD03 }, -{ 0xCD04, 0xCD04, 0xCD04 }, -{ 0xCD05, 0xCD05, 0xCD05 }, -{ 0xCD06, 0xCD06, 0xCD06 }, -{ 0xCD07, 0xCD07, 0xCD07 }, -{ 0xCD08, 0xCD08, 0xCD08 }, -{ 0xCD09, 0xCD09, 0xCD09 }, -{ 0xCD0A, 0xCD0A, 0xCD0A }, -{ 0xCD0B, 0xCD0B, 0xCD0B }, -{ 0xCD0C, 0xCD0C, 0xCD0C }, -{ 0xCD0D, 0xCD0D, 0xCD0D }, -{ 0xCD0E, 0xCD0E, 0xCD0E }, -{ 0xCD0F, 0xCD0F, 0xCD0F }, -{ 0xCD10, 0xCD10, 0xCD10 }, -{ 0xCD11, 0xCD11, 0xCD11 }, -{ 0xCD12, 0xCD12, 0xCD12 }, -{ 0xCD13, 0xCD13, 0xCD13 }, -{ 0xCD14, 0xCD14, 0xCD14 }, -{ 0xCD15, 0xCD15, 0xCD15 }, -{ 0xCD16, 0xCD16, 0xCD16 }, -{ 0xCD17, 0xCD17, 0xCD17 }, -{ 0xCD18, 0xCD18, 0xCD18 }, -{ 0xCD19, 0xCD19, 0xCD19 }, -{ 0xCD1A, 0xCD1A, 0xCD1A }, -{ 0xCD1B, 0xCD1B, 0xCD1B }, -{ 0xCD1C, 0xCD1C, 0xCD1C }, -{ 0xCD1D, 0xCD1D, 0xCD1D }, -{ 0xCD1E, 0xCD1E, 0xCD1E }, -{ 0xCD1F, 0xCD1F, 0xCD1F }, -{ 0xCD20, 0xCD20, 0xCD20 }, -{ 0xCD21, 0xCD21, 0xCD21 }, -{ 0xCD22, 0xCD22, 0xCD22 }, -{ 0xCD23, 0xCD23, 0xCD23 }, -{ 0xCD24, 0xCD24, 0xCD24 }, -{ 0xCD25, 0xCD25, 0xCD25 }, -{ 0xCD26, 0xCD26, 0xCD26 }, -{ 0xCD27, 0xCD27, 0xCD27 }, -{ 0xCD28, 0xCD28, 0xCD28 }, -{ 0xCD29, 0xCD29, 0xCD29 }, -{ 0xCD2A, 0xCD2A, 0xCD2A }, -{ 0xCD2B, 0xCD2B, 0xCD2B }, -{ 0xCD2C, 0xCD2C, 0xCD2C }, -{ 0xCD2D, 0xCD2D, 0xCD2D }, -{ 0xCD2E, 0xCD2E, 0xCD2E }, -{ 0xCD2F, 0xCD2F, 0xCD2F }, -{ 0xCD30, 0xCD30, 0xCD30 }, -{ 0xCD31, 0xCD31, 0xCD31 }, -{ 0xCD32, 0xCD32, 0xCD32 }, -{ 0xCD33, 0xCD33, 0xCD33 }, -{ 0xCD34, 0xCD34, 0xCD34 }, -{ 0xCD35, 0xCD35, 0xCD35 }, -{ 0xCD36, 0xCD36, 0xCD36 }, -{ 0xCD37, 0xCD37, 0xCD37 }, -{ 0xCD38, 0xCD38, 0xCD38 }, -{ 0xCD39, 0xCD39, 0xCD39 }, -{ 0xCD3A, 0xCD3A, 0xCD3A }, -{ 0xCD3B, 0xCD3B, 0xCD3B }, -{ 0xCD3C, 0xCD3C, 0xCD3C }, -{ 0xCD3D, 0xCD3D, 0xCD3D }, -{ 0xCD3E, 0xCD3E, 0xCD3E }, -{ 0xCD3F, 0xCD3F, 0xCD3F }, -{ 0xCD40, 0xCD40, 0xCD40 }, -{ 0xCD41, 0xCD41, 0xCD41 }, -{ 0xCD42, 0xCD42, 0xCD42 }, -{ 0xCD43, 0xCD43, 0xCD43 }, -{ 0xCD44, 0xCD44, 0xCD44 }, -{ 0xCD45, 0xCD45, 0xCD45 }, -{ 0xCD46, 0xCD46, 0xCD46 }, -{ 0xCD47, 0xCD47, 0xCD47 }, -{ 0xCD48, 0xCD48, 0xCD48 }, -{ 0xCD49, 0xCD49, 0xCD49 }, -{ 0xCD4A, 0xCD4A, 0xCD4A }, -{ 0xCD4B, 0xCD4B, 0xCD4B }, -{ 0xCD4C, 0xCD4C, 0xCD4C }, -{ 0xCD4D, 0xCD4D, 0xCD4D }, -{ 0xCD4E, 0xCD4E, 0xCD4E }, -{ 0xCD4F, 0xCD4F, 0xCD4F }, -{ 0xCD50, 0xCD50, 0xCD50 }, -{ 0xCD51, 0xCD51, 0xCD51 }, -{ 0xCD52, 0xCD52, 0xCD52 }, -{ 0xCD53, 0xCD53, 0xCD53 }, -{ 0xCD54, 0xCD54, 0xCD54 }, -{ 0xCD55, 0xCD55, 0xCD55 }, -{ 0xCD56, 0xCD56, 0xCD56 }, -{ 0xCD57, 0xCD57, 0xCD57 }, -{ 0xCD58, 0xCD58, 0xCD58 }, -{ 0xCD59, 0xCD59, 0xCD59 }, -{ 0xCD5A, 0xCD5A, 0xCD5A }, -{ 0xCD5B, 0xCD5B, 0xCD5B }, -{ 0xCD5C, 0xCD5C, 0xCD5C }, -{ 0xCD5D, 0xCD5D, 0xCD5D }, -{ 0xCD5E, 0xCD5E, 0xCD5E }, -{ 0xCD5F, 0xCD5F, 0xCD5F }, -{ 0xCD60, 0xCD60, 0xCD60 }, -{ 0xCD61, 0xCD61, 0xCD61 }, -{ 0xCD62, 0xCD62, 0xCD62 }, -{ 0xCD63, 0xCD63, 0xCD63 }, -{ 0xCD64, 0xCD64, 0xCD64 }, -{ 0xCD65, 0xCD65, 0xCD65 }, -{ 0xCD66, 0xCD66, 0xCD66 }, -{ 0xCD67, 0xCD67, 0xCD67 }, -{ 0xCD68, 0xCD68, 0xCD68 }, -{ 0xCD69, 0xCD69, 0xCD69 }, -{ 0xCD6A, 0xCD6A, 0xCD6A }, -{ 0xCD6B, 0xCD6B, 0xCD6B }, -{ 0xCD6C, 0xCD6C, 0xCD6C }, -{ 0xCD6D, 0xCD6D, 0xCD6D }, -{ 0xCD6E, 0xCD6E, 0xCD6E }, -{ 0xCD6F, 0xCD6F, 0xCD6F }, -{ 0xCD70, 0xCD70, 0xCD70 }, -{ 0xCD71, 0xCD71, 0xCD71 }, -{ 0xCD72, 0xCD72, 0xCD72 }, -{ 0xCD73, 0xCD73, 0xCD73 }, -{ 0xCD74, 0xCD74, 0xCD74 }, -{ 0xCD75, 0xCD75, 0xCD75 }, -{ 0xCD76, 0xCD76, 0xCD76 }, -{ 0xCD77, 0xCD77, 0xCD77 }, -{ 0xCD78, 0xCD78, 0xCD78 }, -{ 0xCD79, 0xCD79, 0xCD79 }, -{ 0xCD7A, 0xCD7A, 0xCD7A }, -{ 0xCD7B, 0xCD7B, 0xCD7B }, -{ 0xCD7C, 0xCD7C, 0xCD7C }, -{ 0xCD7D, 0xCD7D, 0xCD7D }, -{ 0xCD7E, 0xCD7E, 0xCD7E }, -{ 0xCD7F, 0xCD7F, 0xCD7F }, -{ 0xCD80, 0xCD80, 0xCD80 }, -{ 0xCD81, 0xCD81, 0xCD81 }, -{ 0xCD82, 0xCD82, 0xCD82 }, -{ 0xCD83, 0xCD83, 0xCD83 }, -{ 0xCD84, 0xCD84, 0xCD84 }, -{ 0xCD85, 0xCD85, 0xCD85 }, -{ 0xCD86, 0xCD86, 0xCD86 }, -{ 0xCD87, 0xCD87, 0xCD87 }, -{ 0xCD88, 0xCD88, 0xCD88 }, -{ 0xCD89, 0xCD89, 0xCD89 }, -{ 0xCD8A, 0xCD8A, 0xCD8A }, -{ 0xCD8B, 0xCD8B, 0xCD8B }, -{ 0xCD8C, 0xCD8C, 0xCD8C }, -{ 0xCD8D, 0xCD8D, 0xCD8D }, -{ 0xCD8E, 0xCD8E, 0xCD8E }, -{ 0xCD8F, 0xCD8F, 0xCD8F }, -{ 0xCD90, 0xCD90, 0xCD90 }, -{ 0xCD91, 0xCD91, 0xCD91 }, -{ 0xCD92, 0xCD92, 0xCD92 }, -{ 0xCD93, 0xCD93, 0xCD93 }, -{ 0xCD94, 0xCD94, 0xCD94 }, -{ 0xCD95, 0xCD95, 0xCD95 }, -{ 0xCD96, 0xCD96, 0xCD96 }, -{ 0xCD97, 0xCD97, 0xCD97 }, -{ 0xCD98, 0xCD98, 0xCD98 }, -{ 0xCD99, 0xCD99, 0xCD99 }, -{ 0xCD9A, 0xCD9A, 0xCD9A }, -{ 0xCD9B, 0xCD9B, 0xCD9B }, -{ 0xCD9C, 0xCD9C, 0xCD9C }, -{ 0xCD9D, 0xCD9D, 0xCD9D }, -{ 0xCD9E, 0xCD9E, 0xCD9E }, -{ 0xCD9F, 0xCD9F, 0xCD9F }, -{ 0xCDA0, 0xCDA0, 0xCDA0 }, -{ 0xCDA1, 0xCDA1, 0xCDA1 }, -{ 0xCDA2, 0xCDA2, 0xCDA2 }, -{ 0xCDA3, 0xCDA3, 0xCDA3 }, -{ 0xCDA4, 0xCDA4, 0xCDA4 }, -{ 0xCDA5, 0xCDA5, 0xCDA5 }, -{ 0xCDA6, 0xCDA6, 0xCDA6 }, -{ 0xCDA7, 0xCDA7, 0xCDA7 }, -{ 0xCDA8, 0xCDA8, 0xCDA8 }, -{ 0xCDA9, 0xCDA9, 0xCDA9 }, -{ 0xCDAA, 0xCDAA, 0xCDAA }, -{ 0xCDAB, 0xCDAB, 0xCDAB }, -{ 0xCDAC, 0xCDAC, 0xCDAC }, -{ 0xCDAD, 0xCDAD, 0xCDAD }, -{ 0xCDAE, 0xCDAE, 0xCDAE }, -{ 0xCDAF, 0xCDAF, 0xCDAF }, -{ 0xCDB0, 0xCDB0, 0xCDB0 }, -{ 0xCDB1, 0xCDB1, 0xCDB1 }, -{ 0xCDB2, 0xCDB2, 0xCDB2 }, -{ 0xCDB3, 0xCDB3, 0xCDB3 }, -{ 0xCDB4, 0xCDB4, 0xCDB4 }, -{ 0xCDB5, 0xCDB5, 0xCDB5 }, -{ 0xCDB6, 0xCDB6, 0xCDB6 }, -{ 0xCDB7, 0xCDB7, 0xCDB7 }, -{ 0xCDB8, 0xCDB8, 0xCDB8 }, -{ 0xCDB9, 0xCDB9, 0xCDB9 }, -{ 0xCDBA, 0xCDBA, 0xCDBA }, -{ 0xCDBB, 0xCDBB, 0xCDBB }, -{ 0xCDBC, 0xCDBC, 0xCDBC }, -{ 0xCDBD, 0xCDBD, 0xCDBD }, -{ 0xCDBE, 0xCDBE, 0xCDBE }, -{ 0xCDBF, 0xCDBF, 0xCDBF }, -{ 0xCDC0, 0xCDC0, 0xCDC0 }, -{ 0xCDC1, 0xCDC1, 0xCDC1 }, -{ 0xCDC2, 0xCDC2, 0xCDC2 }, -{ 0xCDC3, 0xCDC3, 0xCDC3 }, -{ 0xCDC4, 0xCDC4, 0xCDC4 }, -{ 0xCDC5, 0xCDC5, 0xCDC5 }, -{ 0xCDC6, 0xCDC6, 0xCDC6 }, -{ 0xCDC7, 0xCDC7, 0xCDC7 }, -{ 0xCDC8, 0xCDC8, 0xCDC8 }, -{ 0xCDC9, 0xCDC9, 0xCDC9 }, -{ 0xCDCA, 0xCDCA, 0xCDCA }, -{ 0xCDCB, 0xCDCB, 0xCDCB }, -{ 0xCDCC, 0xCDCC, 0xCDCC }, -{ 0xCDCD, 0xCDCD, 0xCDCD }, -{ 0xCDCE, 0xCDCE, 0xCDCE }, -{ 0xCDCF, 0xCDCF, 0xCDCF }, -{ 0xCDD0, 0xCDD0, 0xCDD0 }, -{ 0xCDD1, 0xCDD1, 0xCDD1 }, -{ 0xCDD2, 0xCDD2, 0xCDD2 }, -{ 0xCDD3, 0xCDD3, 0xCDD3 }, -{ 0xCDD4, 0xCDD4, 0xCDD4 }, -{ 0xCDD5, 0xCDD5, 0xCDD5 }, -{ 0xCDD6, 0xCDD6, 0xCDD6 }, -{ 0xCDD7, 0xCDD7, 0xCDD7 }, -{ 0xCDD8, 0xCDD8, 0xCDD8 }, -{ 0xCDD9, 0xCDD9, 0xCDD9 }, -{ 0xCDDA, 0xCDDA, 0xCDDA }, -{ 0xCDDB, 0xCDDB, 0xCDDB }, -{ 0xCDDC, 0xCDDC, 0xCDDC }, -{ 0xCDDD, 0xCDDD, 0xCDDD }, -{ 0xCDDE, 0xCDDE, 0xCDDE }, -{ 0xCDDF, 0xCDDF, 0xCDDF }, -{ 0xCDE0, 0xCDE0, 0xCDE0 }, -{ 0xCDE1, 0xCDE1, 0xCDE1 }, -{ 0xCDE2, 0xCDE2, 0xCDE2 }, -{ 0xCDE3, 0xCDE3, 0xCDE3 }, -{ 0xCDE4, 0xCDE4, 0xCDE4 }, -{ 0xCDE5, 0xCDE5, 0xCDE5 }, -{ 0xCDE6, 0xCDE6, 0xCDE6 }, -{ 0xCDE7, 0xCDE7, 0xCDE7 }, -{ 0xCDE8, 0xCDE8, 0xCDE8 }, -{ 0xCDE9, 0xCDE9, 0xCDE9 }, -{ 0xCDEA, 0xCDEA, 0xCDEA }, -{ 0xCDEB, 0xCDEB, 0xCDEB }, -{ 0xCDEC, 0xCDEC, 0xCDEC }, -{ 0xCDED, 0xCDED, 0xCDED }, -{ 0xCDEE, 0xCDEE, 0xCDEE }, -{ 0xCDEF, 0xCDEF, 0xCDEF }, -{ 0xCDF0, 0xCDF0, 0xCDF0 }, -{ 0xCDF1, 0xCDF1, 0xCDF1 }, -{ 0xCDF2, 0xCDF2, 0xCDF2 }, -{ 0xCDF3, 0xCDF3, 0xCDF3 }, -{ 0xCDF4, 0xCDF4, 0xCDF4 }, -{ 0xCDF5, 0xCDF5, 0xCDF5 }, -{ 0xCDF6, 0xCDF6, 0xCDF6 }, -{ 0xCDF7, 0xCDF7, 0xCDF7 }, -{ 0xCDF8, 0xCDF8, 0xCDF8 }, -{ 0xCDF9, 0xCDF9, 0xCDF9 }, -{ 0xCDFA, 0xCDFA, 0xCDFA }, -{ 0xCDFB, 0xCDFB, 0xCDFB }, -{ 0xCDFC, 0xCDFC, 0xCDFC }, -{ 0xCDFD, 0xCDFD, 0xCDFD }, -{ 0xCDFE, 0xCDFE, 0xCDFE }, -{ 0xCDFF, 0xCDFF, 0xCDFF }, -{ 0xCE00, 0xCE00, 0xCE00 }, -{ 0xCE01, 0xCE01, 0xCE01 }, -{ 0xCE02, 0xCE02, 0xCE02 }, -{ 0xCE03, 0xCE03, 0xCE03 }, -{ 0xCE04, 0xCE04, 0xCE04 }, -{ 0xCE05, 0xCE05, 0xCE05 }, -{ 0xCE06, 0xCE06, 0xCE06 }, -{ 0xCE07, 0xCE07, 0xCE07 }, -{ 0xCE08, 0xCE08, 0xCE08 }, -{ 0xCE09, 0xCE09, 0xCE09 }, -{ 0xCE0A, 0xCE0A, 0xCE0A }, -{ 0xCE0B, 0xCE0B, 0xCE0B }, -{ 0xCE0C, 0xCE0C, 0xCE0C }, -{ 0xCE0D, 0xCE0D, 0xCE0D }, -{ 0xCE0E, 0xCE0E, 0xCE0E }, -{ 0xCE0F, 0xCE0F, 0xCE0F }, -{ 0xCE10, 0xCE10, 0xCE10 }, -{ 0xCE11, 0xCE11, 0xCE11 }, -{ 0xCE12, 0xCE12, 0xCE12 }, -{ 0xCE13, 0xCE13, 0xCE13 }, -{ 0xCE14, 0xCE14, 0xCE14 }, -{ 0xCE15, 0xCE15, 0xCE15 }, -{ 0xCE16, 0xCE16, 0xCE16 }, -{ 0xCE17, 0xCE17, 0xCE17 }, -{ 0xCE18, 0xCE18, 0xCE18 }, -{ 0xCE19, 0xCE19, 0xCE19 }, -{ 0xCE1A, 0xCE1A, 0xCE1A }, -{ 0xCE1B, 0xCE1B, 0xCE1B }, -{ 0xCE1C, 0xCE1C, 0xCE1C }, -{ 0xCE1D, 0xCE1D, 0xCE1D }, -{ 0xCE1E, 0xCE1E, 0xCE1E }, -{ 0xCE1F, 0xCE1F, 0xCE1F }, -{ 0xCE20, 0xCE20, 0xCE20 }, -{ 0xCE21, 0xCE21, 0xCE21 }, -{ 0xCE22, 0xCE22, 0xCE22 }, -{ 0xCE23, 0xCE23, 0xCE23 }, -{ 0xCE24, 0xCE24, 0xCE24 }, -{ 0xCE25, 0xCE25, 0xCE25 }, -{ 0xCE26, 0xCE26, 0xCE26 }, -{ 0xCE27, 0xCE27, 0xCE27 }, -{ 0xCE28, 0xCE28, 0xCE28 }, -{ 0xCE29, 0xCE29, 0xCE29 }, -{ 0xCE2A, 0xCE2A, 0xCE2A }, -{ 0xCE2B, 0xCE2B, 0xCE2B }, -{ 0xCE2C, 0xCE2C, 0xCE2C }, -{ 0xCE2D, 0xCE2D, 0xCE2D }, -{ 0xCE2E, 0xCE2E, 0xCE2E }, -{ 0xCE2F, 0xCE2F, 0xCE2F }, -{ 0xCE30, 0xCE30, 0xCE30 }, -{ 0xCE31, 0xCE31, 0xCE31 }, -{ 0xCE32, 0xCE32, 0xCE32 }, -{ 0xCE33, 0xCE33, 0xCE33 }, -{ 0xCE34, 0xCE34, 0xCE34 }, -{ 0xCE35, 0xCE35, 0xCE35 }, -{ 0xCE36, 0xCE36, 0xCE36 }, -{ 0xCE37, 0xCE37, 0xCE37 }, -{ 0xCE38, 0xCE38, 0xCE38 }, -{ 0xCE39, 0xCE39, 0xCE39 }, -{ 0xCE3A, 0xCE3A, 0xCE3A }, -{ 0xCE3B, 0xCE3B, 0xCE3B }, -{ 0xCE3C, 0xCE3C, 0xCE3C }, -{ 0xCE3D, 0xCE3D, 0xCE3D }, -{ 0xCE3E, 0xCE3E, 0xCE3E }, -{ 0xCE3F, 0xCE3F, 0xCE3F }, -{ 0xCE40, 0xCE40, 0xCE40 }, -{ 0xCE41, 0xCE41, 0xCE41 }, -{ 0xCE42, 0xCE42, 0xCE42 }, -{ 0xCE43, 0xCE43, 0xCE43 }, -{ 0xCE44, 0xCE44, 0xCE44 }, -{ 0xCE45, 0xCE45, 0xCE45 }, -{ 0xCE46, 0xCE46, 0xCE46 }, -{ 0xCE47, 0xCE47, 0xCE47 }, -{ 0xCE48, 0xCE48, 0xCE48 }, -{ 0xCE49, 0xCE49, 0xCE49 }, -{ 0xCE4A, 0xCE4A, 0xCE4A }, -{ 0xCE4B, 0xCE4B, 0xCE4B }, -{ 0xCE4C, 0xCE4C, 0xCE4C }, -{ 0xCE4D, 0xCE4D, 0xCE4D }, -{ 0xCE4E, 0xCE4E, 0xCE4E }, -{ 0xCE4F, 0xCE4F, 0xCE4F }, -{ 0xCE50, 0xCE50, 0xCE50 }, -{ 0xCE51, 0xCE51, 0xCE51 }, -{ 0xCE52, 0xCE52, 0xCE52 }, -{ 0xCE53, 0xCE53, 0xCE53 }, -{ 0xCE54, 0xCE54, 0xCE54 }, -{ 0xCE55, 0xCE55, 0xCE55 }, -{ 0xCE56, 0xCE56, 0xCE56 }, -{ 0xCE57, 0xCE57, 0xCE57 }, -{ 0xCE58, 0xCE58, 0xCE58 }, -{ 0xCE59, 0xCE59, 0xCE59 }, -{ 0xCE5A, 0xCE5A, 0xCE5A }, -{ 0xCE5B, 0xCE5B, 0xCE5B }, -{ 0xCE5C, 0xCE5C, 0xCE5C }, -{ 0xCE5D, 0xCE5D, 0xCE5D }, -{ 0xCE5E, 0xCE5E, 0xCE5E }, -{ 0xCE5F, 0xCE5F, 0xCE5F }, -{ 0xCE60, 0xCE60, 0xCE60 }, -{ 0xCE61, 0xCE61, 0xCE61 }, -{ 0xCE62, 0xCE62, 0xCE62 }, -{ 0xCE63, 0xCE63, 0xCE63 }, -{ 0xCE64, 0xCE64, 0xCE64 }, -{ 0xCE65, 0xCE65, 0xCE65 }, -{ 0xCE66, 0xCE66, 0xCE66 }, -{ 0xCE67, 0xCE67, 0xCE67 }, -{ 0xCE68, 0xCE68, 0xCE68 }, -{ 0xCE69, 0xCE69, 0xCE69 }, -{ 0xCE6A, 0xCE6A, 0xCE6A }, -{ 0xCE6B, 0xCE6B, 0xCE6B }, -{ 0xCE6C, 0xCE6C, 0xCE6C }, -{ 0xCE6D, 0xCE6D, 0xCE6D }, -{ 0xCE6E, 0xCE6E, 0xCE6E }, -{ 0xCE6F, 0xCE6F, 0xCE6F }, -{ 0xCE70, 0xCE70, 0xCE70 }, -{ 0xCE71, 0xCE71, 0xCE71 }, -{ 0xCE72, 0xCE72, 0xCE72 }, -{ 0xCE73, 0xCE73, 0xCE73 }, -{ 0xCE74, 0xCE74, 0xCE74 }, -{ 0xCE75, 0xCE75, 0xCE75 }, -{ 0xCE76, 0xCE76, 0xCE76 }, -{ 0xCE77, 0xCE77, 0xCE77 }, -{ 0xCE78, 0xCE78, 0xCE78 }, -{ 0xCE79, 0xCE79, 0xCE79 }, -{ 0xCE7A, 0xCE7A, 0xCE7A }, -{ 0xCE7B, 0xCE7B, 0xCE7B }, -{ 0xCE7C, 0xCE7C, 0xCE7C }, -{ 0xCE7D, 0xCE7D, 0xCE7D }, -{ 0xCE7E, 0xCE7E, 0xCE7E }, -{ 0xCE7F, 0xCE7F, 0xCE7F }, -{ 0xCE80, 0xCE80, 0xCE80 }, -{ 0xCE81, 0xCE81, 0xCE81 }, -{ 0xCE82, 0xCE82, 0xCE82 }, -{ 0xCE83, 0xCE83, 0xCE83 }, -{ 0xCE84, 0xCE84, 0xCE84 }, -{ 0xCE85, 0xCE85, 0xCE85 }, -{ 0xCE86, 0xCE86, 0xCE86 }, -{ 0xCE87, 0xCE87, 0xCE87 }, -{ 0xCE88, 0xCE88, 0xCE88 }, -{ 0xCE89, 0xCE89, 0xCE89 }, -{ 0xCE8A, 0xCE8A, 0xCE8A }, -{ 0xCE8B, 0xCE8B, 0xCE8B }, -{ 0xCE8C, 0xCE8C, 0xCE8C }, -{ 0xCE8D, 0xCE8D, 0xCE8D }, -{ 0xCE8E, 0xCE8E, 0xCE8E }, -{ 0xCE8F, 0xCE8F, 0xCE8F }, -{ 0xCE90, 0xCE90, 0xCE90 }, -{ 0xCE91, 0xCE91, 0xCE91 }, -{ 0xCE92, 0xCE92, 0xCE92 }, -{ 0xCE93, 0xCE93, 0xCE93 }, -{ 0xCE94, 0xCE94, 0xCE94 }, -{ 0xCE95, 0xCE95, 0xCE95 }, -{ 0xCE96, 0xCE96, 0xCE96 }, -{ 0xCE97, 0xCE97, 0xCE97 }, -{ 0xCE98, 0xCE98, 0xCE98 }, -{ 0xCE99, 0xCE99, 0xCE99 }, -{ 0xCE9A, 0xCE9A, 0xCE9A }, -{ 0xCE9B, 0xCE9B, 0xCE9B }, -{ 0xCE9C, 0xCE9C, 0xCE9C }, -{ 0xCE9D, 0xCE9D, 0xCE9D }, -{ 0xCE9E, 0xCE9E, 0xCE9E }, -{ 0xCE9F, 0xCE9F, 0xCE9F }, -{ 0xCEA0, 0xCEA0, 0xCEA0 }, -{ 0xCEA1, 0xCEA1, 0xCEA1 }, -{ 0xCEA2, 0xCEA2, 0xCEA2 }, -{ 0xCEA3, 0xCEA3, 0xCEA3 }, -{ 0xCEA4, 0xCEA4, 0xCEA4 }, -{ 0xCEA5, 0xCEA5, 0xCEA5 }, -{ 0xCEA6, 0xCEA6, 0xCEA6 }, -{ 0xCEA7, 0xCEA7, 0xCEA7 }, -{ 0xCEA8, 0xCEA8, 0xCEA8 }, -{ 0xCEA9, 0xCEA9, 0xCEA9 }, -{ 0xCEAA, 0xCEAA, 0xCEAA }, -{ 0xCEAB, 0xCEAB, 0xCEAB }, -{ 0xCEAC, 0xCEAC, 0xCEAC }, -{ 0xCEAD, 0xCEAD, 0xCEAD }, -{ 0xCEAE, 0xCEAE, 0xCEAE }, -{ 0xCEAF, 0xCEAF, 0xCEAF }, -{ 0xCEB0, 0xCEB0, 0xCEB0 }, -{ 0xCEB1, 0xCEB1, 0xCEB1 }, -{ 0xCEB2, 0xCEB2, 0xCEB2 }, -{ 0xCEB3, 0xCEB3, 0xCEB3 }, -{ 0xCEB4, 0xCEB4, 0xCEB4 }, -{ 0xCEB5, 0xCEB5, 0xCEB5 }, -{ 0xCEB6, 0xCEB6, 0xCEB6 }, -{ 0xCEB7, 0xCEB7, 0xCEB7 }, -{ 0xCEB8, 0xCEB8, 0xCEB8 }, -{ 0xCEB9, 0xCEB9, 0xCEB9 }, -{ 0xCEBA, 0xCEBA, 0xCEBA }, -{ 0xCEBB, 0xCEBB, 0xCEBB }, -{ 0xCEBC, 0xCEBC, 0xCEBC }, -{ 0xCEBD, 0xCEBD, 0xCEBD }, -{ 0xCEBE, 0xCEBE, 0xCEBE }, -{ 0xCEBF, 0xCEBF, 0xCEBF }, -{ 0xCEC0, 0xCEC0, 0xCEC0 }, -{ 0xCEC1, 0xCEC1, 0xCEC1 }, -{ 0xCEC2, 0xCEC2, 0xCEC2 }, -{ 0xCEC3, 0xCEC3, 0xCEC3 }, -{ 0xCEC4, 0xCEC4, 0xCEC4 }, -{ 0xCEC5, 0xCEC5, 0xCEC5 }, -{ 0xCEC6, 0xCEC6, 0xCEC6 }, -{ 0xCEC7, 0xCEC7, 0xCEC7 }, -{ 0xCEC8, 0xCEC8, 0xCEC8 }, -{ 0xCEC9, 0xCEC9, 0xCEC9 }, -{ 0xCECA, 0xCECA, 0xCECA }, -{ 0xCECB, 0xCECB, 0xCECB }, -{ 0xCECC, 0xCECC, 0xCECC }, -{ 0xCECD, 0xCECD, 0xCECD }, -{ 0xCECE, 0xCECE, 0xCECE }, -{ 0xCECF, 0xCECF, 0xCECF }, -{ 0xCED0, 0xCED0, 0xCED0 }, -{ 0xCED1, 0xCED1, 0xCED1 }, -{ 0xCED2, 0xCED2, 0xCED2 }, -{ 0xCED3, 0xCED3, 0xCED3 }, -{ 0xCED4, 0xCED4, 0xCED4 }, -{ 0xCED5, 0xCED5, 0xCED5 }, -{ 0xCED6, 0xCED6, 0xCED6 }, -{ 0xCED7, 0xCED7, 0xCED7 }, -{ 0xCED8, 0xCED8, 0xCED8 }, -{ 0xCED9, 0xCED9, 0xCED9 }, -{ 0xCEDA, 0xCEDA, 0xCEDA }, -{ 0xCEDB, 0xCEDB, 0xCEDB }, -{ 0xCEDC, 0xCEDC, 0xCEDC }, -{ 0xCEDD, 0xCEDD, 0xCEDD }, -{ 0xCEDE, 0xCEDE, 0xCEDE }, -{ 0xCEDF, 0xCEDF, 0xCEDF }, -{ 0xCEE0, 0xCEE0, 0xCEE0 }, -{ 0xCEE1, 0xCEE1, 0xCEE1 }, -{ 0xCEE2, 0xCEE2, 0xCEE2 }, -{ 0xCEE3, 0xCEE3, 0xCEE3 }, -{ 0xCEE4, 0xCEE4, 0xCEE4 }, -{ 0xCEE5, 0xCEE5, 0xCEE5 }, -{ 0xCEE6, 0xCEE6, 0xCEE6 }, -{ 0xCEE7, 0xCEE7, 0xCEE7 }, -{ 0xCEE8, 0xCEE8, 0xCEE8 }, -{ 0xCEE9, 0xCEE9, 0xCEE9 }, -{ 0xCEEA, 0xCEEA, 0xCEEA }, -{ 0xCEEB, 0xCEEB, 0xCEEB }, -{ 0xCEEC, 0xCEEC, 0xCEEC }, -{ 0xCEED, 0xCEED, 0xCEED }, -{ 0xCEEE, 0xCEEE, 0xCEEE }, -{ 0xCEEF, 0xCEEF, 0xCEEF }, -{ 0xCEF0, 0xCEF0, 0xCEF0 }, -{ 0xCEF1, 0xCEF1, 0xCEF1 }, -{ 0xCEF2, 0xCEF2, 0xCEF2 }, -{ 0xCEF3, 0xCEF3, 0xCEF3 }, -{ 0xCEF4, 0xCEF4, 0xCEF4 }, -{ 0xCEF5, 0xCEF5, 0xCEF5 }, -{ 0xCEF6, 0xCEF6, 0xCEF6 }, -{ 0xCEF7, 0xCEF7, 0xCEF7 }, -{ 0xCEF8, 0xCEF8, 0xCEF8 }, -{ 0xCEF9, 0xCEF9, 0xCEF9 }, -{ 0xCEFA, 0xCEFA, 0xCEFA }, -{ 0xCEFB, 0xCEFB, 0xCEFB }, -{ 0xCEFC, 0xCEFC, 0xCEFC }, -{ 0xCEFD, 0xCEFD, 0xCEFD }, -{ 0xCEFE, 0xCEFE, 0xCEFE }, -{ 0xCEFF, 0xCEFF, 0xCEFF }, -{ 0xCF00, 0xCF00, 0xCF00 }, -{ 0xCF01, 0xCF01, 0xCF01 }, -{ 0xCF02, 0xCF02, 0xCF02 }, -{ 0xCF03, 0xCF03, 0xCF03 }, -{ 0xCF04, 0xCF04, 0xCF04 }, -{ 0xCF05, 0xCF05, 0xCF05 }, -{ 0xCF06, 0xCF06, 0xCF06 }, -{ 0xCF07, 0xCF07, 0xCF07 }, -{ 0xCF08, 0xCF08, 0xCF08 }, -{ 0xCF09, 0xCF09, 0xCF09 }, -{ 0xCF0A, 0xCF0A, 0xCF0A }, -{ 0xCF0B, 0xCF0B, 0xCF0B }, -{ 0xCF0C, 0xCF0C, 0xCF0C }, -{ 0xCF0D, 0xCF0D, 0xCF0D }, -{ 0xCF0E, 0xCF0E, 0xCF0E }, -{ 0xCF0F, 0xCF0F, 0xCF0F }, -{ 0xCF10, 0xCF10, 0xCF10 }, -{ 0xCF11, 0xCF11, 0xCF11 }, -{ 0xCF12, 0xCF12, 0xCF12 }, -{ 0xCF13, 0xCF13, 0xCF13 }, -{ 0xCF14, 0xCF14, 0xCF14 }, -{ 0xCF15, 0xCF15, 0xCF15 }, -{ 0xCF16, 0xCF16, 0xCF16 }, -{ 0xCF17, 0xCF17, 0xCF17 }, -{ 0xCF18, 0xCF18, 0xCF18 }, -{ 0xCF19, 0xCF19, 0xCF19 }, -{ 0xCF1A, 0xCF1A, 0xCF1A }, -{ 0xCF1B, 0xCF1B, 0xCF1B }, -{ 0xCF1C, 0xCF1C, 0xCF1C }, -{ 0xCF1D, 0xCF1D, 0xCF1D }, -{ 0xCF1E, 0xCF1E, 0xCF1E }, -{ 0xCF1F, 0xCF1F, 0xCF1F }, -{ 0xCF20, 0xCF20, 0xCF20 }, -{ 0xCF21, 0xCF21, 0xCF21 }, -{ 0xCF22, 0xCF22, 0xCF22 }, -{ 0xCF23, 0xCF23, 0xCF23 }, -{ 0xCF24, 0xCF24, 0xCF24 }, -{ 0xCF25, 0xCF25, 0xCF25 }, -{ 0xCF26, 0xCF26, 0xCF26 }, -{ 0xCF27, 0xCF27, 0xCF27 }, -{ 0xCF28, 0xCF28, 0xCF28 }, -{ 0xCF29, 0xCF29, 0xCF29 }, -{ 0xCF2A, 0xCF2A, 0xCF2A }, -{ 0xCF2B, 0xCF2B, 0xCF2B }, -{ 0xCF2C, 0xCF2C, 0xCF2C }, -{ 0xCF2D, 0xCF2D, 0xCF2D }, -{ 0xCF2E, 0xCF2E, 0xCF2E }, -{ 0xCF2F, 0xCF2F, 0xCF2F }, -{ 0xCF30, 0xCF30, 0xCF30 }, -{ 0xCF31, 0xCF31, 0xCF31 }, -{ 0xCF32, 0xCF32, 0xCF32 }, -{ 0xCF33, 0xCF33, 0xCF33 }, -{ 0xCF34, 0xCF34, 0xCF34 }, -{ 0xCF35, 0xCF35, 0xCF35 }, -{ 0xCF36, 0xCF36, 0xCF36 }, -{ 0xCF37, 0xCF37, 0xCF37 }, -{ 0xCF38, 0xCF38, 0xCF38 }, -{ 0xCF39, 0xCF39, 0xCF39 }, -{ 0xCF3A, 0xCF3A, 0xCF3A }, -{ 0xCF3B, 0xCF3B, 0xCF3B }, -{ 0xCF3C, 0xCF3C, 0xCF3C }, -{ 0xCF3D, 0xCF3D, 0xCF3D }, -{ 0xCF3E, 0xCF3E, 0xCF3E }, -{ 0xCF3F, 0xCF3F, 0xCF3F }, -{ 0xCF40, 0xCF40, 0xCF40 }, -{ 0xCF41, 0xCF41, 0xCF41 }, -{ 0xCF42, 0xCF42, 0xCF42 }, -{ 0xCF43, 0xCF43, 0xCF43 }, -{ 0xCF44, 0xCF44, 0xCF44 }, -{ 0xCF45, 0xCF45, 0xCF45 }, -{ 0xCF46, 0xCF46, 0xCF46 }, -{ 0xCF47, 0xCF47, 0xCF47 }, -{ 0xCF48, 0xCF48, 0xCF48 }, -{ 0xCF49, 0xCF49, 0xCF49 }, -{ 0xCF4A, 0xCF4A, 0xCF4A }, -{ 0xCF4B, 0xCF4B, 0xCF4B }, -{ 0xCF4C, 0xCF4C, 0xCF4C }, -{ 0xCF4D, 0xCF4D, 0xCF4D }, -{ 0xCF4E, 0xCF4E, 0xCF4E }, -{ 0xCF4F, 0xCF4F, 0xCF4F }, -{ 0xCF50, 0xCF50, 0xCF50 }, -{ 0xCF51, 0xCF51, 0xCF51 }, -{ 0xCF52, 0xCF52, 0xCF52 }, -{ 0xCF53, 0xCF53, 0xCF53 }, -{ 0xCF54, 0xCF54, 0xCF54 }, -{ 0xCF55, 0xCF55, 0xCF55 }, -{ 0xCF56, 0xCF56, 0xCF56 }, -{ 0xCF57, 0xCF57, 0xCF57 }, -{ 0xCF58, 0xCF58, 0xCF58 }, -{ 0xCF59, 0xCF59, 0xCF59 }, -{ 0xCF5A, 0xCF5A, 0xCF5A }, -{ 0xCF5B, 0xCF5B, 0xCF5B }, -{ 0xCF5C, 0xCF5C, 0xCF5C }, -{ 0xCF5D, 0xCF5D, 0xCF5D }, -{ 0xCF5E, 0xCF5E, 0xCF5E }, -{ 0xCF5F, 0xCF5F, 0xCF5F }, -{ 0xCF60, 0xCF60, 0xCF60 }, -{ 0xCF61, 0xCF61, 0xCF61 }, -{ 0xCF62, 0xCF62, 0xCF62 }, -{ 0xCF63, 0xCF63, 0xCF63 }, -{ 0xCF64, 0xCF64, 0xCF64 }, -{ 0xCF65, 0xCF65, 0xCF65 }, -{ 0xCF66, 0xCF66, 0xCF66 }, -{ 0xCF67, 0xCF67, 0xCF67 }, -{ 0xCF68, 0xCF68, 0xCF68 }, -{ 0xCF69, 0xCF69, 0xCF69 }, -{ 0xCF6A, 0xCF6A, 0xCF6A }, -{ 0xCF6B, 0xCF6B, 0xCF6B }, -{ 0xCF6C, 0xCF6C, 0xCF6C }, -{ 0xCF6D, 0xCF6D, 0xCF6D }, -{ 0xCF6E, 0xCF6E, 0xCF6E }, -{ 0xCF6F, 0xCF6F, 0xCF6F }, -{ 0xCF70, 0xCF70, 0xCF70 }, -{ 0xCF71, 0xCF71, 0xCF71 }, -{ 0xCF72, 0xCF72, 0xCF72 }, -{ 0xCF73, 0xCF73, 0xCF73 }, -{ 0xCF74, 0xCF74, 0xCF74 }, -{ 0xCF75, 0xCF75, 0xCF75 }, -{ 0xCF76, 0xCF76, 0xCF76 }, -{ 0xCF77, 0xCF77, 0xCF77 }, -{ 0xCF78, 0xCF78, 0xCF78 }, -{ 0xCF79, 0xCF79, 0xCF79 }, -{ 0xCF7A, 0xCF7A, 0xCF7A }, -{ 0xCF7B, 0xCF7B, 0xCF7B }, -{ 0xCF7C, 0xCF7C, 0xCF7C }, -{ 0xCF7D, 0xCF7D, 0xCF7D }, -{ 0xCF7E, 0xCF7E, 0xCF7E }, -{ 0xCF7F, 0xCF7F, 0xCF7F }, -{ 0xCF80, 0xCF80, 0xCF80 }, -{ 0xCF81, 0xCF81, 0xCF81 }, -{ 0xCF82, 0xCF82, 0xCF82 }, -{ 0xCF83, 0xCF83, 0xCF83 }, -{ 0xCF84, 0xCF84, 0xCF84 }, -{ 0xCF85, 0xCF85, 0xCF85 }, -{ 0xCF86, 0xCF86, 0xCF86 }, -{ 0xCF87, 0xCF87, 0xCF87 }, -{ 0xCF88, 0xCF88, 0xCF88 }, -{ 0xCF89, 0xCF89, 0xCF89 }, -{ 0xCF8A, 0xCF8A, 0xCF8A }, -{ 0xCF8B, 0xCF8B, 0xCF8B }, -{ 0xCF8C, 0xCF8C, 0xCF8C }, -{ 0xCF8D, 0xCF8D, 0xCF8D }, -{ 0xCF8E, 0xCF8E, 0xCF8E }, -{ 0xCF8F, 0xCF8F, 0xCF8F }, -{ 0xCF90, 0xCF90, 0xCF90 }, -{ 0xCF91, 0xCF91, 0xCF91 }, -{ 0xCF92, 0xCF92, 0xCF92 }, -{ 0xCF93, 0xCF93, 0xCF93 }, -{ 0xCF94, 0xCF94, 0xCF94 }, -{ 0xCF95, 0xCF95, 0xCF95 }, -{ 0xCF96, 0xCF96, 0xCF96 }, -{ 0xCF97, 0xCF97, 0xCF97 }, -{ 0xCF98, 0xCF98, 0xCF98 }, -{ 0xCF99, 0xCF99, 0xCF99 }, -{ 0xCF9A, 0xCF9A, 0xCF9A }, -{ 0xCF9B, 0xCF9B, 0xCF9B }, -{ 0xCF9C, 0xCF9C, 0xCF9C }, -{ 0xCF9D, 0xCF9D, 0xCF9D }, -{ 0xCF9E, 0xCF9E, 0xCF9E }, -{ 0xCF9F, 0xCF9F, 0xCF9F }, -{ 0xCFA0, 0xCFA0, 0xCFA0 }, -{ 0xCFA1, 0xCFA1, 0xCFA1 }, -{ 0xCFA2, 0xCFA2, 0xCFA2 }, -{ 0xCFA3, 0xCFA3, 0xCFA3 }, -{ 0xCFA4, 0xCFA4, 0xCFA4 }, -{ 0xCFA5, 0xCFA5, 0xCFA5 }, -{ 0xCFA6, 0xCFA6, 0xCFA6 }, -{ 0xCFA7, 0xCFA7, 0xCFA7 }, -{ 0xCFA8, 0xCFA8, 0xCFA8 }, -{ 0xCFA9, 0xCFA9, 0xCFA9 }, -{ 0xCFAA, 0xCFAA, 0xCFAA }, -{ 0xCFAB, 0xCFAB, 0xCFAB }, -{ 0xCFAC, 0xCFAC, 0xCFAC }, -{ 0xCFAD, 0xCFAD, 0xCFAD }, -{ 0xCFAE, 0xCFAE, 0xCFAE }, -{ 0xCFAF, 0xCFAF, 0xCFAF }, -{ 0xCFB0, 0xCFB0, 0xCFB0 }, -{ 0xCFB1, 0xCFB1, 0xCFB1 }, -{ 0xCFB2, 0xCFB2, 0xCFB2 }, -{ 0xCFB3, 0xCFB3, 0xCFB3 }, -{ 0xCFB4, 0xCFB4, 0xCFB4 }, -{ 0xCFB5, 0xCFB5, 0xCFB5 }, -{ 0xCFB6, 0xCFB6, 0xCFB6 }, -{ 0xCFB7, 0xCFB7, 0xCFB7 }, -{ 0xCFB8, 0xCFB8, 0xCFB8 }, -{ 0xCFB9, 0xCFB9, 0xCFB9 }, -{ 0xCFBA, 0xCFBA, 0xCFBA }, -{ 0xCFBB, 0xCFBB, 0xCFBB }, -{ 0xCFBC, 0xCFBC, 0xCFBC }, -{ 0xCFBD, 0xCFBD, 0xCFBD }, -{ 0xCFBE, 0xCFBE, 0xCFBE }, -{ 0xCFBF, 0xCFBF, 0xCFBF }, -{ 0xCFC0, 0xCFC0, 0xCFC0 }, -{ 0xCFC1, 0xCFC1, 0xCFC1 }, -{ 0xCFC2, 0xCFC2, 0xCFC2 }, -{ 0xCFC3, 0xCFC3, 0xCFC3 }, -{ 0xCFC4, 0xCFC4, 0xCFC4 }, -{ 0xCFC5, 0xCFC5, 0xCFC5 }, -{ 0xCFC6, 0xCFC6, 0xCFC6 }, -{ 0xCFC7, 0xCFC7, 0xCFC7 }, -{ 0xCFC8, 0xCFC8, 0xCFC8 }, -{ 0xCFC9, 0xCFC9, 0xCFC9 }, -{ 0xCFCA, 0xCFCA, 0xCFCA }, -{ 0xCFCB, 0xCFCB, 0xCFCB }, -{ 0xCFCC, 0xCFCC, 0xCFCC }, -{ 0xCFCD, 0xCFCD, 0xCFCD }, -{ 0xCFCE, 0xCFCE, 0xCFCE }, -{ 0xCFCF, 0xCFCF, 0xCFCF }, -{ 0xCFD0, 0xCFD0, 0xCFD0 }, -{ 0xCFD1, 0xCFD1, 0xCFD1 }, -{ 0xCFD2, 0xCFD2, 0xCFD2 }, -{ 0xCFD3, 0xCFD3, 0xCFD3 }, -{ 0xCFD4, 0xCFD4, 0xCFD4 }, -{ 0xCFD5, 0xCFD5, 0xCFD5 }, -{ 0xCFD6, 0xCFD6, 0xCFD6 }, -{ 0xCFD7, 0xCFD7, 0xCFD7 }, -{ 0xCFD8, 0xCFD8, 0xCFD8 }, -{ 0xCFD9, 0xCFD9, 0xCFD9 }, -{ 0xCFDA, 0xCFDA, 0xCFDA }, -{ 0xCFDB, 0xCFDB, 0xCFDB }, -{ 0xCFDC, 0xCFDC, 0xCFDC }, -{ 0xCFDD, 0xCFDD, 0xCFDD }, -{ 0xCFDE, 0xCFDE, 0xCFDE }, -{ 0xCFDF, 0xCFDF, 0xCFDF }, -{ 0xCFE0, 0xCFE0, 0xCFE0 }, -{ 0xCFE1, 0xCFE1, 0xCFE1 }, -{ 0xCFE2, 0xCFE2, 0xCFE2 }, -{ 0xCFE3, 0xCFE3, 0xCFE3 }, -{ 0xCFE4, 0xCFE4, 0xCFE4 }, -{ 0xCFE5, 0xCFE5, 0xCFE5 }, -{ 0xCFE6, 0xCFE6, 0xCFE6 }, -{ 0xCFE7, 0xCFE7, 0xCFE7 }, -{ 0xCFE8, 0xCFE8, 0xCFE8 }, -{ 0xCFE9, 0xCFE9, 0xCFE9 }, -{ 0xCFEA, 0xCFEA, 0xCFEA }, -{ 0xCFEB, 0xCFEB, 0xCFEB }, -{ 0xCFEC, 0xCFEC, 0xCFEC }, -{ 0xCFED, 0xCFED, 0xCFED }, -{ 0xCFEE, 0xCFEE, 0xCFEE }, -{ 0xCFEF, 0xCFEF, 0xCFEF }, -{ 0xCFF0, 0xCFF0, 0xCFF0 }, -{ 0xCFF1, 0xCFF1, 0xCFF1 }, -{ 0xCFF2, 0xCFF2, 0xCFF2 }, -{ 0xCFF3, 0xCFF3, 0xCFF3 }, -{ 0xCFF4, 0xCFF4, 0xCFF4 }, -{ 0xCFF5, 0xCFF5, 0xCFF5 }, -{ 0xCFF6, 0xCFF6, 0xCFF6 }, -{ 0xCFF7, 0xCFF7, 0xCFF7 }, -{ 0xCFF8, 0xCFF8, 0xCFF8 }, -{ 0xCFF9, 0xCFF9, 0xCFF9 }, -{ 0xCFFA, 0xCFFA, 0xCFFA }, -{ 0xCFFB, 0xCFFB, 0xCFFB }, -{ 0xCFFC, 0xCFFC, 0xCFFC }, -{ 0xCFFD, 0xCFFD, 0xCFFD }, -{ 0xCFFE, 0xCFFE, 0xCFFE }, -{ 0xCFFF, 0xCFFF, 0xCFFF }, -{ 0xD000, 0xD000, 0xD000 }, -{ 0xD001, 0xD001, 0xD001 }, -{ 0xD002, 0xD002, 0xD002 }, -{ 0xD003, 0xD003, 0xD003 }, -{ 0xD004, 0xD004, 0xD004 }, -{ 0xD005, 0xD005, 0xD005 }, -{ 0xD006, 0xD006, 0xD006 }, -{ 0xD007, 0xD007, 0xD007 }, -{ 0xD008, 0xD008, 0xD008 }, -{ 0xD009, 0xD009, 0xD009 }, -{ 0xD00A, 0xD00A, 0xD00A }, -{ 0xD00B, 0xD00B, 0xD00B }, -{ 0xD00C, 0xD00C, 0xD00C }, -{ 0xD00D, 0xD00D, 0xD00D }, -{ 0xD00E, 0xD00E, 0xD00E }, -{ 0xD00F, 0xD00F, 0xD00F }, -{ 0xD010, 0xD010, 0xD010 }, -{ 0xD011, 0xD011, 0xD011 }, -{ 0xD012, 0xD012, 0xD012 }, -{ 0xD013, 0xD013, 0xD013 }, -{ 0xD014, 0xD014, 0xD014 }, -{ 0xD015, 0xD015, 0xD015 }, -{ 0xD016, 0xD016, 0xD016 }, -{ 0xD017, 0xD017, 0xD017 }, -{ 0xD018, 0xD018, 0xD018 }, -{ 0xD019, 0xD019, 0xD019 }, -{ 0xD01A, 0xD01A, 0xD01A }, -{ 0xD01B, 0xD01B, 0xD01B }, -{ 0xD01C, 0xD01C, 0xD01C }, -{ 0xD01D, 0xD01D, 0xD01D }, -{ 0xD01E, 0xD01E, 0xD01E }, -{ 0xD01F, 0xD01F, 0xD01F }, -{ 0xD020, 0xD020, 0xD020 }, -{ 0xD021, 0xD021, 0xD021 }, -{ 0xD022, 0xD022, 0xD022 }, -{ 0xD023, 0xD023, 0xD023 }, -{ 0xD024, 0xD024, 0xD024 }, -{ 0xD025, 0xD025, 0xD025 }, -{ 0xD026, 0xD026, 0xD026 }, -{ 0xD027, 0xD027, 0xD027 }, -{ 0xD028, 0xD028, 0xD028 }, -{ 0xD029, 0xD029, 0xD029 }, -{ 0xD02A, 0xD02A, 0xD02A }, -{ 0xD02B, 0xD02B, 0xD02B }, -{ 0xD02C, 0xD02C, 0xD02C }, -{ 0xD02D, 0xD02D, 0xD02D }, -{ 0xD02E, 0xD02E, 0xD02E }, -{ 0xD02F, 0xD02F, 0xD02F }, -{ 0xD030, 0xD030, 0xD030 }, -{ 0xD031, 0xD031, 0xD031 }, -{ 0xD032, 0xD032, 0xD032 }, -{ 0xD033, 0xD033, 0xD033 }, -{ 0xD034, 0xD034, 0xD034 }, -{ 0xD035, 0xD035, 0xD035 }, -{ 0xD036, 0xD036, 0xD036 }, -{ 0xD037, 0xD037, 0xD037 }, -{ 0xD038, 0xD038, 0xD038 }, -{ 0xD039, 0xD039, 0xD039 }, -{ 0xD03A, 0xD03A, 0xD03A }, -{ 0xD03B, 0xD03B, 0xD03B }, -{ 0xD03C, 0xD03C, 0xD03C }, -{ 0xD03D, 0xD03D, 0xD03D }, -{ 0xD03E, 0xD03E, 0xD03E }, -{ 0xD03F, 0xD03F, 0xD03F }, -{ 0xD040, 0xD040, 0xD040 }, -{ 0xD041, 0xD041, 0xD041 }, -{ 0xD042, 0xD042, 0xD042 }, -{ 0xD043, 0xD043, 0xD043 }, -{ 0xD044, 0xD044, 0xD044 }, -{ 0xD045, 0xD045, 0xD045 }, -{ 0xD046, 0xD046, 0xD046 }, -{ 0xD047, 0xD047, 0xD047 }, -{ 0xD048, 0xD048, 0xD048 }, -{ 0xD049, 0xD049, 0xD049 }, -{ 0xD04A, 0xD04A, 0xD04A }, -{ 0xD04B, 0xD04B, 0xD04B }, -{ 0xD04C, 0xD04C, 0xD04C }, -{ 0xD04D, 0xD04D, 0xD04D }, -{ 0xD04E, 0xD04E, 0xD04E }, -{ 0xD04F, 0xD04F, 0xD04F }, -{ 0xD050, 0xD050, 0xD050 }, -{ 0xD051, 0xD051, 0xD051 }, -{ 0xD052, 0xD052, 0xD052 }, -{ 0xD053, 0xD053, 0xD053 }, -{ 0xD054, 0xD054, 0xD054 }, -{ 0xD055, 0xD055, 0xD055 }, -{ 0xD056, 0xD056, 0xD056 }, -{ 0xD057, 0xD057, 0xD057 }, -{ 0xD058, 0xD058, 0xD058 }, -{ 0xD059, 0xD059, 0xD059 }, -{ 0xD05A, 0xD05A, 0xD05A }, -{ 0xD05B, 0xD05B, 0xD05B }, -{ 0xD05C, 0xD05C, 0xD05C }, -{ 0xD05D, 0xD05D, 0xD05D }, -{ 0xD05E, 0xD05E, 0xD05E }, -{ 0xD05F, 0xD05F, 0xD05F }, -{ 0xD060, 0xD060, 0xD060 }, -{ 0xD061, 0xD061, 0xD061 }, -{ 0xD062, 0xD062, 0xD062 }, -{ 0xD063, 0xD063, 0xD063 }, -{ 0xD064, 0xD064, 0xD064 }, -{ 0xD065, 0xD065, 0xD065 }, -{ 0xD066, 0xD066, 0xD066 }, -{ 0xD067, 0xD067, 0xD067 }, -{ 0xD068, 0xD068, 0xD068 }, -{ 0xD069, 0xD069, 0xD069 }, -{ 0xD06A, 0xD06A, 0xD06A }, -{ 0xD06B, 0xD06B, 0xD06B }, -{ 0xD06C, 0xD06C, 0xD06C }, -{ 0xD06D, 0xD06D, 0xD06D }, -{ 0xD06E, 0xD06E, 0xD06E }, -{ 0xD06F, 0xD06F, 0xD06F }, -{ 0xD070, 0xD070, 0xD070 }, -{ 0xD071, 0xD071, 0xD071 }, -{ 0xD072, 0xD072, 0xD072 }, -{ 0xD073, 0xD073, 0xD073 }, -{ 0xD074, 0xD074, 0xD074 }, -{ 0xD075, 0xD075, 0xD075 }, -{ 0xD076, 0xD076, 0xD076 }, -{ 0xD077, 0xD077, 0xD077 }, -{ 0xD078, 0xD078, 0xD078 }, -{ 0xD079, 0xD079, 0xD079 }, -{ 0xD07A, 0xD07A, 0xD07A }, -{ 0xD07B, 0xD07B, 0xD07B }, -{ 0xD07C, 0xD07C, 0xD07C }, -{ 0xD07D, 0xD07D, 0xD07D }, -{ 0xD07E, 0xD07E, 0xD07E }, -{ 0xD07F, 0xD07F, 0xD07F }, -{ 0xD080, 0xD080, 0xD080 }, -{ 0xD081, 0xD081, 0xD081 }, -{ 0xD082, 0xD082, 0xD082 }, -{ 0xD083, 0xD083, 0xD083 }, -{ 0xD084, 0xD084, 0xD084 }, -{ 0xD085, 0xD085, 0xD085 }, -{ 0xD086, 0xD086, 0xD086 }, -{ 0xD087, 0xD087, 0xD087 }, -{ 0xD088, 0xD088, 0xD088 }, -{ 0xD089, 0xD089, 0xD089 }, -{ 0xD08A, 0xD08A, 0xD08A }, -{ 0xD08B, 0xD08B, 0xD08B }, -{ 0xD08C, 0xD08C, 0xD08C }, -{ 0xD08D, 0xD08D, 0xD08D }, -{ 0xD08E, 0xD08E, 0xD08E }, -{ 0xD08F, 0xD08F, 0xD08F }, -{ 0xD090, 0xD090, 0xD090 }, -{ 0xD091, 0xD091, 0xD091 }, -{ 0xD092, 0xD092, 0xD092 }, -{ 0xD093, 0xD093, 0xD093 }, -{ 0xD094, 0xD094, 0xD094 }, -{ 0xD095, 0xD095, 0xD095 }, -{ 0xD096, 0xD096, 0xD096 }, -{ 0xD097, 0xD097, 0xD097 }, -{ 0xD098, 0xD098, 0xD098 }, -{ 0xD099, 0xD099, 0xD099 }, -{ 0xD09A, 0xD09A, 0xD09A }, -{ 0xD09B, 0xD09B, 0xD09B }, -{ 0xD09C, 0xD09C, 0xD09C }, -{ 0xD09D, 0xD09D, 0xD09D }, -{ 0xD09E, 0xD09E, 0xD09E }, -{ 0xD09F, 0xD09F, 0xD09F }, -{ 0xD0A0, 0xD0A0, 0xD0A0 }, -{ 0xD0A1, 0xD0A1, 0xD0A1 }, -{ 0xD0A2, 0xD0A2, 0xD0A2 }, -{ 0xD0A3, 0xD0A3, 0xD0A3 }, -{ 0xD0A4, 0xD0A4, 0xD0A4 }, -{ 0xD0A5, 0xD0A5, 0xD0A5 }, -{ 0xD0A6, 0xD0A6, 0xD0A6 }, -{ 0xD0A7, 0xD0A7, 0xD0A7 }, -{ 0xD0A8, 0xD0A8, 0xD0A8 }, -{ 0xD0A9, 0xD0A9, 0xD0A9 }, -{ 0xD0AA, 0xD0AA, 0xD0AA }, -{ 0xD0AB, 0xD0AB, 0xD0AB }, -{ 0xD0AC, 0xD0AC, 0xD0AC }, -{ 0xD0AD, 0xD0AD, 0xD0AD }, -{ 0xD0AE, 0xD0AE, 0xD0AE }, -{ 0xD0AF, 0xD0AF, 0xD0AF }, -{ 0xD0B0, 0xD0B0, 0xD0B0 }, -{ 0xD0B1, 0xD0B1, 0xD0B1 }, -{ 0xD0B2, 0xD0B2, 0xD0B2 }, -{ 0xD0B3, 0xD0B3, 0xD0B3 }, -{ 0xD0B4, 0xD0B4, 0xD0B4 }, -{ 0xD0B5, 0xD0B5, 0xD0B5 }, -{ 0xD0B6, 0xD0B6, 0xD0B6 }, -{ 0xD0B7, 0xD0B7, 0xD0B7 }, -{ 0xD0B8, 0xD0B8, 0xD0B8 }, -{ 0xD0B9, 0xD0B9, 0xD0B9 }, -{ 0xD0BA, 0xD0BA, 0xD0BA }, -{ 0xD0BB, 0xD0BB, 0xD0BB }, -{ 0xD0BC, 0xD0BC, 0xD0BC }, -{ 0xD0BD, 0xD0BD, 0xD0BD }, -{ 0xD0BE, 0xD0BE, 0xD0BE }, -{ 0xD0BF, 0xD0BF, 0xD0BF }, -{ 0xD0C0, 0xD0C0, 0xD0C0 }, -{ 0xD0C1, 0xD0C1, 0xD0C1 }, -{ 0xD0C2, 0xD0C2, 0xD0C2 }, -{ 0xD0C3, 0xD0C3, 0xD0C3 }, -{ 0xD0C4, 0xD0C4, 0xD0C4 }, -{ 0xD0C5, 0xD0C5, 0xD0C5 }, -{ 0xD0C6, 0xD0C6, 0xD0C6 }, -{ 0xD0C7, 0xD0C7, 0xD0C7 }, -{ 0xD0C8, 0xD0C8, 0xD0C8 }, -{ 0xD0C9, 0xD0C9, 0xD0C9 }, -{ 0xD0CA, 0xD0CA, 0xD0CA }, -{ 0xD0CB, 0xD0CB, 0xD0CB }, -{ 0xD0CC, 0xD0CC, 0xD0CC }, -{ 0xD0CD, 0xD0CD, 0xD0CD }, -{ 0xD0CE, 0xD0CE, 0xD0CE }, -{ 0xD0CF, 0xD0CF, 0xD0CF }, -{ 0xD0D0, 0xD0D0, 0xD0D0 }, -{ 0xD0D1, 0xD0D1, 0xD0D1 }, -{ 0xD0D2, 0xD0D2, 0xD0D2 }, -{ 0xD0D3, 0xD0D3, 0xD0D3 }, -{ 0xD0D4, 0xD0D4, 0xD0D4 }, -{ 0xD0D5, 0xD0D5, 0xD0D5 }, -{ 0xD0D6, 0xD0D6, 0xD0D6 }, -{ 0xD0D7, 0xD0D7, 0xD0D7 }, -{ 0xD0D8, 0xD0D8, 0xD0D8 }, -{ 0xD0D9, 0xD0D9, 0xD0D9 }, -{ 0xD0DA, 0xD0DA, 0xD0DA }, -{ 0xD0DB, 0xD0DB, 0xD0DB }, -{ 0xD0DC, 0xD0DC, 0xD0DC }, -{ 0xD0DD, 0xD0DD, 0xD0DD }, -{ 0xD0DE, 0xD0DE, 0xD0DE }, -{ 0xD0DF, 0xD0DF, 0xD0DF }, -{ 0xD0E0, 0xD0E0, 0xD0E0 }, -{ 0xD0E1, 0xD0E1, 0xD0E1 }, -{ 0xD0E2, 0xD0E2, 0xD0E2 }, -{ 0xD0E3, 0xD0E3, 0xD0E3 }, -{ 0xD0E4, 0xD0E4, 0xD0E4 }, -{ 0xD0E5, 0xD0E5, 0xD0E5 }, -{ 0xD0E6, 0xD0E6, 0xD0E6 }, -{ 0xD0E7, 0xD0E7, 0xD0E7 }, -{ 0xD0E8, 0xD0E8, 0xD0E8 }, -{ 0xD0E9, 0xD0E9, 0xD0E9 }, -{ 0xD0EA, 0xD0EA, 0xD0EA }, -{ 0xD0EB, 0xD0EB, 0xD0EB }, -{ 0xD0EC, 0xD0EC, 0xD0EC }, -{ 0xD0ED, 0xD0ED, 0xD0ED }, -{ 0xD0EE, 0xD0EE, 0xD0EE }, -{ 0xD0EF, 0xD0EF, 0xD0EF }, -{ 0xD0F0, 0xD0F0, 0xD0F0 }, -{ 0xD0F1, 0xD0F1, 0xD0F1 }, -{ 0xD0F2, 0xD0F2, 0xD0F2 }, -{ 0xD0F3, 0xD0F3, 0xD0F3 }, -{ 0xD0F4, 0xD0F4, 0xD0F4 }, -{ 0xD0F5, 0xD0F5, 0xD0F5 }, -{ 0xD0F6, 0xD0F6, 0xD0F6 }, -{ 0xD0F7, 0xD0F7, 0xD0F7 }, -{ 0xD0F8, 0xD0F8, 0xD0F8 }, -{ 0xD0F9, 0xD0F9, 0xD0F9 }, -{ 0xD0FA, 0xD0FA, 0xD0FA }, -{ 0xD0FB, 0xD0FB, 0xD0FB }, -{ 0xD0FC, 0xD0FC, 0xD0FC }, -{ 0xD0FD, 0xD0FD, 0xD0FD }, -{ 0xD0FE, 0xD0FE, 0xD0FE }, -{ 0xD0FF, 0xD0FF, 0xD0FF }, -{ 0xD100, 0xD100, 0xD100 }, -{ 0xD101, 0xD101, 0xD101 }, -{ 0xD102, 0xD102, 0xD102 }, -{ 0xD103, 0xD103, 0xD103 }, -{ 0xD104, 0xD104, 0xD104 }, -{ 0xD105, 0xD105, 0xD105 }, -{ 0xD106, 0xD106, 0xD106 }, -{ 0xD107, 0xD107, 0xD107 }, -{ 0xD108, 0xD108, 0xD108 }, -{ 0xD109, 0xD109, 0xD109 }, -{ 0xD10A, 0xD10A, 0xD10A }, -{ 0xD10B, 0xD10B, 0xD10B }, -{ 0xD10C, 0xD10C, 0xD10C }, -{ 0xD10D, 0xD10D, 0xD10D }, -{ 0xD10E, 0xD10E, 0xD10E }, -{ 0xD10F, 0xD10F, 0xD10F }, -{ 0xD110, 0xD110, 0xD110 }, -{ 0xD111, 0xD111, 0xD111 }, -{ 0xD112, 0xD112, 0xD112 }, -{ 0xD113, 0xD113, 0xD113 }, -{ 0xD114, 0xD114, 0xD114 }, -{ 0xD115, 0xD115, 0xD115 }, -{ 0xD116, 0xD116, 0xD116 }, -{ 0xD117, 0xD117, 0xD117 }, -{ 0xD118, 0xD118, 0xD118 }, -{ 0xD119, 0xD119, 0xD119 }, -{ 0xD11A, 0xD11A, 0xD11A }, -{ 0xD11B, 0xD11B, 0xD11B }, -{ 0xD11C, 0xD11C, 0xD11C }, -{ 0xD11D, 0xD11D, 0xD11D }, -{ 0xD11E, 0xD11E, 0xD11E }, -{ 0xD11F, 0xD11F, 0xD11F }, -{ 0xD120, 0xD120, 0xD120 }, -{ 0xD121, 0xD121, 0xD121 }, -{ 0xD122, 0xD122, 0xD122 }, -{ 0xD123, 0xD123, 0xD123 }, -{ 0xD124, 0xD124, 0xD124 }, -{ 0xD125, 0xD125, 0xD125 }, -{ 0xD126, 0xD126, 0xD126 }, -{ 0xD127, 0xD127, 0xD127 }, -{ 0xD128, 0xD128, 0xD128 }, -{ 0xD129, 0xD129, 0xD129 }, -{ 0xD12A, 0xD12A, 0xD12A }, -{ 0xD12B, 0xD12B, 0xD12B }, -{ 0xD12C, 0xD12C, 0xD12C }, -{ 0xD12D, 0xD12D, 0xD12D }, -{ 0xD12E, 0xD12E, 0xD12E }, -{ 0xD12F, 0xD12F, 0xD12F }, -{ 0xD130, 0xD130, 0xD130 }, -{ 0xD131, 0xD131, 0xD131 }, -{ 0xD132, 0xD132, 0xD132 }, -{ 0xD133, 0xD133, 0xD133 }, -{ 0xD134, 0xD134, 0xD134 }, -{ 0xD135, 0xD135, 0xD135 }, -{ 0xD136, 0xD136, 0xD136 }, -{ 0xD137, 0xD137, 0xD137 }, -{ 0xD138, 0xD138, 0xD138 }, -{ 0xD139, 0xD139, 0xD139 }, -{ 0xD13A, 0xD13A, 0xD13A }, -{ 0xD13B, 0xD13B, 0xD13B }, -{ 0xD13C, 0xD13C, 0xD13C }, -{ 0xD13D, 0xD13D, 0xD13D }, -{ 0xD13E, 0xD13E, 0xD13E }, -{ 0xD13F, 0xD13F, 0xD13F }, -{ 0xD140, 0xD140, 0xD140 }, -{ 0xD141, 0xD141, 0xD141 }, -{ 0xD142, 0xD142, 0xD142 }, -{ 0xD143, 0xD143, 0xD143 }, -{ 0xD144, 0xD144, 0xD144 }, -{ 0xD145, 0xD145, 0xD145 }, -{ 0xD146, 0xD146, 0xD146 }, -{ 0xD147, 0xD147, 0xD147 }, -{ 0xD148, 0xD148, 0xD148 }, -{ 0xD149, 0xD149, 0xD149 }, -{ 0xD14A, 0xD14A, 0xD14A }, -{ 0xD14B, 0xD14B, 0xD14B }, -{ 0xD14C, 0xD14C, 0xD14C }, -{ 0xD14D, 0xD14D, 0xD14D }, -{ 0xD14E, 0xD14E, 0xD14E }, -{ 0xD14F, 0xD14F, 0xD14F }, -{ 0xD150, 0xD150, 0xD150 }, -{ 0xD151, 0xD151, 0xD151 }, -{ 0xD152, 0xD152, 0xD152 }, -{ 0xD153, 0xD153, 0xD153 }, -{ 0xD154, 0xD154, 0xD154 }, -{ 0xD155, 0xD155, 0xD155 }, -{ 0xD156, 0xD156, 0xD156 }, -{ 0xD157, 0xD157, 0xD157 }, -{ 0xD158, 0xD158, 0xD158 }, -{ 0xD159, 0xD159, 0xD159 }, -{ 0xD15A, 0xD15A, 0xD15A }, -{ 0xD15B, 0xD15B, 0xD15B }, -{ 0xD15C, 0xD15C, 0xD15C }, -{ 0xD15D, 0xD15D, 0xD15D }, -{ 0xD15E, 0xD15E, 0xD15E }, -{ 0xD15F, 0xD15F, 0xD15F }, -{ 0xD160, 0xD160, 0xD160 }, -{ 0xD161, 0xD161, 0xD161 }, -{ 0xD162, 0xD162, 0xD162 }, -{ 0xD163, 0xD163, 0xD163 }, -{ 0xD164, 0xD164, 0xD164 }, -{ 0xD165, 0xD165, 0xD165 }, -{ 0xD166, 0xD166, 0xD166 }, -{ 0xD167, 0xD167, 0xD167 }, -{ 0xD168, 0xD168, 0xD168 }, -{ 0xD169, 0xD169, 0xD169 }, -{ 0xD16A, 0xD16A, 0xD16A }, -{ 0xD16B, 0xD16B, 0xD16B }, -{ 0xD16C, 0xD16C, 0xD16C }, -{ 0xD16D, 0xD16D, 0xD16D }, -{ 0xD16E, 0xD16E, 0xD16E }, -{ 0xD16F, 0xD16F, 0xD16F }, -{ 0xD170, 0xD170, 0xD170 }, -{ 0xD171, 0xD171, 0xD171 }, -{ 0xD172, 0xD172, 0xD172 }, -{ 0xD173, 0xD173, 0xD173 }, -{ 0xD174, 0xD174, 0xD174 }, -{ 0xD175, 0xD175, 0xD175 }, -{ 0xD176, 0xD176, 0xD176 }, -{ 0xD177, 0xD177, 0xD177 }, -{ 0xD178, 0xD178, 0xD178 }, -{ 0xD179, 0xD179, 0xD179 }, -{ 0xD17A, 0xD17A, 0xD17A }, -{ 0xD17B, 0xD17B, 0xD17B }, -{ 0xD17C, 0xD17C, 0xD17C }, -{ 0xD17D, 0xD17D, 0xD17D }, -{ 0xD17E, 0xD17E, 0xD17E }, -{ 0xD17F, 0xD17F, 0xD17F }, -{ 0xD180, 0xD180, 0xD180 }, -{ 0xD181, 0xD181, 0xD181 }, -{ 0xD182, 0xD182, 0xD182 }, -{ 0xD183, 0xD183, 0xD183 }, -{ 0xD184, 0xD184, 0xD184 }, -{ 0xD185, 0xD185, 0xD185 }, -{ 0xD186, 0xD186, 0xD186 }, -{ 0xD187, 0xD187, 0xD187 }, -{ 0xD188, 0xD188, 0xD188 }, -{ 0xD189, 0xD189, 0xD189 }, -{ 0xD18A, 0xD18A, 0xD18A }, -{ 0xD18B, 0xD18B, 0xD18B }, -{ 0xD18C, 0xD18C, 0xD18C }, -{ 0xD18D, 0xD18D, 0xD18D }, -{ 0xD18E, 0xD18E, 0xD18E }, -{ 0xD18F, 0xD18F, 0xD18F }, -{ 0xD190, 0xD190, 0xD190 }, -{ 0xD191, 0xD191, 0xD191 }, -{ 0xD192, 0xD192, 0xD192 }, -{ 0xD193, 0xD193, 0xD193 }, -{ 0xD194, 0xD194, 0xD194 }, -{ 0xD195, 0xD195, 0xD195 }, -{ 0xD196, 0xD196, 0xD196 }, -{ 0xD197, 0xD197, 0xD197 }, -{ 0xD198, 0xD198, 0xD198 }, -{ 0xD199, 0xD199, 0xD199 }, -{ 0xD19A, 0xD19A, 0xD19A }, -{ 0xD19B, 0xD19B, 0xD19B }, -{ 0xD19C, 0xD19C, 0xD19C }, -{ 0xD19D, 0xD19D, 0xD19D }, -{ 0xD19E, 0xD19E, 0xD19E }, -{ 0xD19F, 0xD19F, 0xD19F }, -{ 0xD1A0, 0xD1A0, 0xD1A0 }, -{ 0xD1A1, 0xD1A1, 0xD1A1 }, -{ 0xD1A2, 0xD1A2, 0xD1A2 }, -{ 0xD1A3, 0xD1A3, 0xD1A3 }, -{ 0xD1A4, 0xD1A4, 0xD1A4 }, -{ 0xD1A5, 0xD1A5, 0xD1A5 }, -{ 0xD1A6, 0xD1A6, 0xD1A6 }, -{ 0xD1A7, 0xD1A7, 0xD1A7 }, -{ 0xD1A8, 0xD1A8, 0xD1A8 }, -{ 0xD1A9, 0xD1A9, 0xD1A9 }, -{ 0xD1AA, 0xD1AA, 0xD1AA }, -{ 0xD1AB, 0xD1AB, 0xD1AB }, -{ 0xD1AC, 0xD1AC, 0xD1AC }, -{ 0xD1AD, 0xD1AD, 0xD1AD }, -{ 0xD1AE, 0xD1AE, 0xD1AE }, -{ 0xD1AF, 0xD1AF, 0xD1AF }, -{ 0xD1B0, 0xD1B0, 0xD1B0 }, -{ 0xD1B1, 0xD1B1, 0xD1B1 }, -{ 0xD1B2, 0xD1B2, 0xD1B2 }, -{ 0xD1B3, 0xD1B3, 0xD1B3 }, -{ 0xD1B4, 0xD1B4, 0xD1B4 }, -{ 0xD1B5, 0xD1B5, 0xD1B5 }, -{ 0xD1B6, 0xD1B6, 0xD1B6 }, -{ 0xD1B7, 0xD1B7, 0xD1B7 }, -{ 0xD1B8, 0xD1B8, 0xD1B8 }, -{ 0xD1B9, 0xD1B9, 0xD1B9 }, -{ 0xD1BA, 0xD1BA, 0xD1BA }, -{ 0xD1BB, 0xD1BB, 0xD1BB }, -{ 0xD1BC, 0xD1BC, 0xD1BC }, -{ 0xD1BD, 0xD1BD, 0xD1BD }, -{ 0xD1BE, 0xD1BE, 0xD1BE }, -{ 0xD1BF, 0xD1BF, 0xD1BF }, -{ 0xD1C0, 0xD1C0, 0xD1C0 }, -{ 0xD1C1, 0xD1C1, 0xD1C1 }, -{ 0xD1C2, 0xD1C2, 0xD1C2 }, -{ 0xD1C3, 0xD1C3, 0xD1C3 }, -{ 0xD1C4, 0xD1C4, 0xD1C4 }, -{ 0xD1C5, 0xD1C5, 0xD1C5 }, -{ 0xD1C6, 0xD1C6, 0xD1C6 }, -{ 0xD1C7, 0xD1C7, 0xD1C7 }, -{ 0xD1C8, 0xD1C8, 0xD1C8 }, -{ 0xD1C9, 0xD1C9, 0xD1C9 }, -{ 0xD1CA, 0xD1CA, 0xD1CA }, -{ 0xD1CB, 0xD1CB, 0xD1CB }, -{ 0xD1CC, 0xD1CC, 0xD1CC }, -{ 0xD1CD, 0xD1CD, 0xD1CD }, -{ 0xD1CE, 0xD1CE, 0xD1CE }, -{ 0xD1CF, 0xD1CF, 0xD1CF }, -{ 0xD1D0, 0xD1D0, 0xD1D0 }, -{ 0xD1D1, 0xD1D1, 0xD1D1 }, -{ 0xD1D2, 0xD1D2, 0xD1D2 }, -{ 0xD1D3, 0xD1D3, 0xD1D3 }, -{ 0xD1D4, 0xD1D4, 0xD1D4 }, -{ 0xD1D5, 0xD1D5, 0xD1D5 }, -{ 0xD1D6, 0xD1D6, 0xD1D6 }, -{ 0xD1D7, 0xD1D7, 0xD1D7 }, -{ 0xD1D8, 0xD1D8, 0xD1D8 }, -{ 0xD1D9, 0xD1D9, 0xD1D9 }, -{ 0xD1DA, 0xD1DA, 0xD1DA }, -{ 0xD1DB, 0xD1DB, 0xD1DB }, -{ 0xD1DC, 0xD1DC, 0xD1DC }, -{ 0xD1DD, 0xD1DD, 0xD1DD }, -{ 0xD1DE, 0xD1DE, 0xD1DE }, -{ 0xD1DF, 0xD1DF, 0xD1DF }, -{ 0xD1E0, 0xD1E0, 0xD1E0 }, -{ 0xD1E1, 0xD1E1, 0xD1E1 }, -{ 0xD1E2, 0xD1E2, 0xD1E2 }, -{ 0xD1E3, 0xD1E3, 0xD1E3 }, -{ 0xD1E4, 0xD1E4, 0xD1E4 }, -{ 0xD1E5, 0xD1E5, 0xD1E5 }, -{ 0xD1E6, 0xD1E6, 0xD1E6 }, -{ 0xD1E7, 0xD1E7, 0xD1E7 }, -{ 0xD1E8, 0xD1E8, 0xD1E8 }, -{ 0xD1E9, 0xD1E9, 0xD1E9 }, -{ 0xD1EA, 0xD1EA, 0xD1EA }, -{ 0xD1EB, 0xD1EB, 0xD1EB }, -{ 0xD1EC, 0xD1EC, 0xD1EC }, -{ 0xD1ED, 0xD1ED, 0xD1ED }, -{ 0xD1EE, 0xD1EE, 0xD1EE }, -{ 0xD1EF, 0xD1EF, 0xD1EF }, -{ 0xD1F0, 0xD1F0, 0xD1F0 }, -{ 0xD1F1, 0xD1F1, 0xD1F1 }, -{ 0xD1F2, 0xD1F2, 0xD1F2 }, -{ 0xD1F3, 0xD1F3, 0xD1F3 }, -{ 0xD1F4, 0xD1F4, 0xD1F4 }, -{ 0xD1F5, 0xD1F5, 0xD1F5 }, -{ 0xD1F6, 0xD1F6, 0xD1F6 }, -{ 0xD1F7, 0xD1F7, 0xD1F7 }, -{ 0xD1F8, 0xD1F8, 0xD1F8 }, -{ 0xD1F9, 0xD1F9, 0xD1F9 }, -{ 0xD1FA, 0xD1FA, 0xD1FA }, -{ 0xD1FB, 0xD1FB, 0xD1FB }, -{ 0xD1FC, 0xD1FC, 0xD1FC }, -{ 0xD1FD, 0xD1FD, 0xD1FD }, -{ 0xD1FE, 0xD1FE, 0xD1FE }, -{ 0xD1FF, 0xD1FF, 0xD1FF }, -{ 0xD200, 0xD200, 0xD200 }, -{ 0xD201, 0xD201, 0xD201 }, -{ 0xD202, 0xD202, 0xD202 }, -{ 0xD203, 0xD203, 0xD203 }, -{ 0xD204, 0xD204, 0xD204 }, -{ 0xD205, 0xD205, 0xD205 }, -{ 0xD206, 0xD206, 0xD206 }, -{ 0xD207, 0xD207, 0xD207 }, -{ 0xD208, 0xD208, 0xD208 }, -{ 0xD209, 0xD209, 0xD209 }, -{ 0xD20A, 0xD20A, 0xD20A }, -{ 0xD20B, 0xD20B, 0xD20B }, -{ 0xD20C, 0xD20C, 0xD20C }, -{ 0xD20D, 0xD20D, 0xD20D }, -{ 0xD20E, 0xD20E, 0xD20E }, -{ 0xD20F, 0xD20F, 0xD20F }, -{ 0xD210, 0xD210, 0xD210 }, -{ 0xD211, 0xD211, 0xD211 }, -{ 0xD212, 0xD212, 0xD212 }, -{ 0xD213, 0xD213, 0xD213 }, -{ 0xD214, 0xD214, 0xD214 }, -{ 0xD215, 0xD215, 0xD215 }, -{ 0xD216, 0xD216, 0xD216 }, -{ 0xD217, 0xD217, 0xD217 }, -{ 0xD218, 0xD218, 0xD218 }, -{ 0xD219, 0xD219, 0xD219 }, -{ 0xD21A, 0xD21A, 0xD21A }, -{ 0xD21B, 0xD21B, 0xD21B }, -{ 0xD21C, 0xD21C, 0xD21C }, -{ 0xD21D, 0xD21D, 0xD21D }, -{ 0xD21E, 0xD21E, 0xD21E }, -{ 0xD21F, 0xD21F, 0xD21F }, -{ 0xD220, 0xD220, 0xD220 }, -{ 0xD221, 0xD221, 0xD221 }, -{ 0xD222, 0xD222, 0xD222 }, -{ 0xD223, 0xD223, 0xD223 }, -{ 0xD224, 0xD224, 0xD224 }, -{ 0xD225, 0xD225, 0xD225 }, -{ 0xD226, 0xD226, 0xD226 }, -{ 0xD227, 0xD227, 0xD227 }, -{ 0xD228, 0xD228, 0xD228 }, -{ 0xD229, 0xD229, 0xD229 }, -{ 0xD22A, 0xD22A, 0xD22A }, -{ 0xD22B, 0xD22B, 0xD22B }, -{ 0xD22C, 0xD22C, 0xD22C }, -{ 0xD22D, 0xD22D, 0xD22D }, -{ 0xD22E, 0xD22E, 0xD22E }, -{ 0xD22F, 0xD22F, 0xD22F }, -{ 0xD230, 0xD230, 0xD230 }, -{ 0xD231, 0xD231, 0xD231 }, -{ 0xD232, 0xD232, 0xD232 }, -{ 0xD233, 0xD233, 0xD233 }, -{ 0xD234, 0xD234, 0xD234 }, -{ 0xD235, 0xD235, 0xD235 }, -{ 0xD236, 0xD236, 0xD236 }, -{ 0xD237, 0xD237, 0xD237 }, -{ 0xD238, 0xD238, 0xD238 }, -{ 0xD239, 0xD239, 0xD239 }, -{ 0xD23A, 0xD23A, 0xD23A }, -{ 0xD23B, 0xD23B, 0xD23B }, -{ 0xD23C, 0xD23C, 0xD23C }, -{ 0xD23D, 0xD23D, 0xD23D }, -{ 0xD23E, 0xD23E, 0xD23E }, -{ 0xD23F, 0xD23F, 0xD23F }, -{ 0xD240, 0xD240, 0xD240 }, -{ 0xD241, 0xD241, 0xD241 }, -{ 0xD242, 0xD242, 0xD242 }, -{ 0xD243, 0xD243, 0xD243 }, -{ 0xD244, 0xD244, 0xD244 }, -{ 0xD245, 0xD245, 0xD245 }, -{ 0xD246, 0xD246, 0xD246 }, -{ 0xD247, 0xD247, 0xD247 }, -{ 0xD248, 0xD248, 0xD248 }, -{ 0xD249, 0xD249, 0xD249 }, -{ 0xD24A, 0xD24A, 0xD24A }, -{ 0xD24B, 0xD24B, 0xD24B }, -{ 0xD24C, 0xD24C, 0xD24C }, -{ 0xD24D, 0xD24D, 0xD24D }, -{ 0xD24E, 0xD24E, 0xD24E }, -{ 0xD24F, 0xD24F, 0xD24F }, -{ 0xD250, 0xD250, 0xD250 }, -{ 0xD251, 0xD251, 0xD251 }, -{ 0xD252, 0xD252, 0xD252 }, -{ 0xD253, 0xD253, 0xD253 }, -{ 0xD254, 0xD254, 0xD254 }, -{ 0xD255, 0xD255, 0xD255 }, -{ 0xD256, 0xD256, 0xD256 }, -{ 0xD257, 0xD257, 0xD257 }, -{ 0xD258, 0xD258, 0xD258 }, -{ 0xD259, 0xD259, 0xD259 }, -{ 0xD25A, 0xD25A, 0xD25A }, -{ 0xD25B, 0xD25B, 0xD25B }, -{ 0xD25C, 0xD25C, 0xD25C }, -{ 0xD25D, 0xD25D, 0xD25D }, -{ 0xD25E, 0xD25E, 0xD25E }, -{ 0xD25F, 0xD25F, 0xD25F }, -{ 0xD260, 0xD260, 0xD260 }, -{ 0xD261, 0xD261, 0xD261 }, -{ 0xD262, 0xD262, 0xD262 }, -{ 0xD263, 0xD263, 0xD263 }, -{ 0xD264, 0xD264, 0xD264 }, -{ 0xD265, 0xD265, 0xD265 }, -{ 0xD266, 0xD266, 0xD266 }, -{ 0xD267, 0xD267, 0xD267 }, -{ 0xD268, 0xD268, 0xD268 }, -{ 0xD269, 0xD269, 0xD269 }, -{ 0xD26A, 0xD26A, 0xD26A }, -{ 0xD26B, 0xD26B, 0xD26B }, -{ 0xD26C, 0xD26C, 0xD26C }, -{ 0xD26D, 0xD26D, 0xD26D }, -{ 0xD26E, 0xD26E, 0xD26E }, -{ 0xD26F, 0xD26F, 0xD26F }, -{ 0xD270, 0xD270, 0xD270 }, -{ 0xD271, 0xD271, 0xD271 }, -{ 0xD272, 0xD272, 0xD272 }, -{ 0xD273, 0xD273, 0xD273 }, -{ 0xD274, 0xD274, 0xD274 }, -{ 0xD275, 0xD275, 0xD275 }, -{ 0xD276, 0xD276, 0xD276 }, -{ 0xD277, 0xD277, 0xD277 }, -{ 0xD278, 0xD278, 0xD278 }, -{ 0xD279, 0xD279, 0xD279 }, -{ 0xD27A, 0xD27A, 0xD27A }, -{ 0xD27B, 0xD27B, 0xD27B }, -{ 0xD27C, 0xD27C, 0xD27C }, -{ 0xD27D, 0xD27D, 0xD27D }, -{ 0xD27E, 0xD27E, 0xD27E }, -{ 0xD27F, 0xD27F, 0xD27F }, -{ 0xD280, 0xD280, 0xD280 }, -{ 0xD281, 0xD281, 0xD281 }, -{ 0xD282, 0xD282, 0xD282 }, -{ 0xD283, 0xD283, 0xD283 }, -{ 0xD284, 0xD284, 0xD284 }, -{ 0xD285, 0xD285, 0xD285 }, -{ 0xD286, 0xD286, 0xD286 }, -{ 0xD287, 0xD287, 0xD287 }, -{ 0xD288, 0xD288, 0xD288 }, -{ 0xD289, 0xD289, 0xD289 }, -{ 0xD28A, 0xD28A, 0xD28A }, -{ 0xD28B, 0xD28B, 0xD28B }, -{ 0xD28C, 0xD28C, 0xD28C }, -{ 0xD28D, 0xD28D, 0xD28D }, -{ 0xD28E, 0xD28E, 0xD28E }, -{ 0xD28F, 0xD28F, 0xD28F }, -{ 0xD290, 0xD290, 0xD290 }, -{ 0xD291, 0xD291, 0xD291 }, -{ 0xD292, 0xD292, 0xD292 }, -{ 0xD293, 0xD293, 0xD293 }, -{ 0xD294, 0xD294, 0xD294 }, -{ 0xD295, 0xD295, 0xD295 }, -{ 0xD296, 0xD296, 0xD296 }, -{ 0xD297, 0xD297, 0xD297 }, -{ 0xD298, 0xD298, 0xD298 }, -{ 0xD299, 0xD299, 0xD299 }, -{ 0xD29A, 0xD29A, 0xD29A }, -{ 0xD29B, 0xD29B, 0xD29B }, -{ 0xD29C, 0xD29C, 0xD29C }, -{ 0xD29D, 0xD29D, 0xD29D }, -{ 0xD29E, 0xD29E, 0xD29E }, -{ 0xD29F, 0xD29F, 0xD29F }, -{ 0xD2A0, 0xD2A0, 0xD2A0 }, -{ 0xD2A1, 0xD2A1, 0xD2A1 }, -{ 0xD2A2, 0xD2A2, 0xD2A2 }, -{ 0xD2A3, 0xD2A3, 0xD2A3 }, -{ 0xD2A4, 0xD2A4, 0xD2A4 }, -{ 0xD2A5, 0xD2A5, 0xD2A5 }, -{ 0xD2A6, 0xD2A6, 0xD2A6 }, -{ 0xD2A7, 0xD2A7, 0xD2A7 }, -{ 0xD2A8, 0xD2A8, 0xD2A8 }, -{ 0xD2A9, 0xD2A9, 0xD2A9 }, -{ 0xD2AA, 0xD2AA, 0xD2AA }, -{ 0xD2AB, 0xD2AB, 0xD2AB }, -{ 0xD2AC, 0xD2AC, 0xD2AC }, -{ 0xD2AD, 0xD2AD, 0xD2AD }, -{ 0xD2AE, 0xD2AE, 0xD2AE }, -{ 0xD2AF, 0xD2AF, 0xD2AF }, -{ 0xD2B0, 0xD2B0, 0xD2B0 }, -{ 0xD2B1, 0xD2B1, 0xD2B1 }, -{ 0xD2B2, 0xD2B2, 0xD2B2 }, -{ 0xD2B3, 0xD2B3, 0xD2B3 }, -{ 0xD2B4, 0xD2B4, 0xD2B4 }, -{ 0xD2B5, 0xD2B5, 0xD2B5 }, -{ 0xD2B6, 0xD2B6, 0xD2B6 }, -{ 0xD2B7, 0xD2B7, 0xD2B7 }, -{ 0xD2B8, 0xD2B8, 0xD2B8 }, -{ 0xD2B9, 0xD2B9, 0xD2B9 }, -{ 0xD2BA, 0xD2BA, 0xD2BA }, -{ 0xD2BB, 0xD2BB, 0xD2BB }, -{ 0xD2BC, 0xD2BC, 0xD2BC }, -{ 0xD2BD, 0xD2BD, 0xD2BD }, -{ 0xD2BE, 0xD2BE, 0xD2BE }, -{ 0xD2BF, 0xD2BF, 0xD2BF }, -{ 0xD2C0, 0xD2C0, 0xD2C0 }, -{ 0xD2C1, 0xD2C1, 0xD2C1 }, -{ 0xD2C2, 0xD2C2, 0xD2C2 }, -{ 0xD2C3, 0xD2C3, 0xD2C3 }, -{ 0xD2C4, 0xD2C4, 0xD2C4 }, -{ 0xD2C5, 0xD2C5, 0xD2C5 }, -{ 0xD2C6, 0xD2C6, 0xD2C6 }, -{ 0xD2C7, 0xD2C7, 0xD2C7 }, -{ 0xD2C8, 0xD2C8, 0xD2C8 }, -{ 0xD2C9, 0xD2C9, 0xD2C9 }, -{ 0xD2CA, 0xD2CA, 0xD2CA }, -{ 0xD2CB, 0xD2CB, 0xD2CB }, -{ 0xD2CC, 0xD2CC, 0xD2CC }, -{ 0xD2CD, 0xD2CD, 0xD2CD }, -{ 0xD2CE, 0xD2CE, 0xD2CE }, -{ 0xD2CF, 0xD2CF, 0xD2CF }, -{ 0xD2D0, 0xD2D0, 0xD2D0 }, -{ 0xD2D1, 0xD2D1, 0xD2D1 }, -{ 0xD2D2, 0xD2D2, 0xD2D2 }, -{ 0xD2D3, 0xD2D3, 0xD2D3 }, -{ 0xD2D4, 0xD2D4, 0xD2D4 }, -{ 0xD2D5, 0xD2D5, 0xD2D5 }, -{ 0xD2D6, 0xD2D6, 0xD2D6 }, -{ 0xD2D7, 0xD2D7, 0xD2D7 }, -{ 0xD2D8, 0xD2D8, 0xD2D8 }, -{ 0xD2D9, 0xD2D9, 0xD2D9 }, -{ 0xD2DA, 0xD2DA, 0xD2DA }, -{ 0xD2DB, 0xD2DB, 0xD2DB }, -{ 0xD2DC, 0xD2DC, 0xD2DC }, -{ 0xD2DD, 0xD2DD, 0xD2DD }, -{ 0xD2DE, 0xD2DE, 0xD2DE }, -{ 0xD2DF, 0xD2DF, 0xD2DF }, -{ 0xD2E0, 0xD2E0, 0xD2E0 }, -{ 0xD2E1, 0xD2E1, 0xD2E1 }, -{ 0xD2E2, 0xD2E2, 0xD2E2 }, -{ 0xD2E3, 0xD2E3, 0xD2E3 }, -{ 0xD2E4, 0xD2E4, 0xD2E4 }, -{ 0xD2E5, 0xD2E5, 0xD2E5 }, -{ 0xD2E6, 0xD2E6, 0xD2E6 }, -{ 0xD2E7, 0xD2E7, 0xD2E7 }, -{ 0xD2E8, 0xD2E8, 0xD2E8 }, -{ 0xD2E9, 0xD2E9, 0xD2E9 }, -{ 0xD2EA, 0xD2EA, 0xD2EA }, -{ 0xD2EB, 0xD2EB, 0xD2EB }, -{ 0xD2EC, 0xD2EC, 0xD2EC }, -{ 0xD2ED, 0xD2ED, 0xD2ED }, -{ 0xD2EE, 0xD2EE, 0xD2EE }, -{ 0xD2EF, 0xD2EF, 0xD2EF }, -{ 0xD2F0, 0xD2F0, 0xD2F0 }, -{ 0xD2F1, 0xD2F1, 0xD2F1 }, -{ 0xD2F2, 0xD2F2, 0xD2F2 }, -{ 0xD2F3, 0xD2F3, 0xD2F3 }, -{ 0xD2F4, 0xD2F4, 0xD2F4 }, -{ 0xD2F5, 0xD2F5, 0xD2F5 }, -{ 0xD2F6, 0xD2F6, 0xD2F6 }, -{ 0xD2F7, 0xD2F7, 0xD2F7 }, -{ 0xD2F8, 0xD2F8, 0xD2F8 }, -{ 0xD2F9, 0xD2F9, 0xD2F9 }, -{ 0xD2FA, 0xD2FA, 0xD2FA }, -{ 0xD2FB, 0xD2FB, 0xD2FB }, -{ 0xD2FC, 0xD2FC, 0xD2FC }, -{ 0xD2FD, 0xD2FD, 0xD2FD }, -{ 0xD2FE, 0xD2FE, 0xD2FE }, -{ 0xD2FF, 0xD2FF, 0xD2FF }, -{ 0xD300, 0xD300, 0xD300 }, -{ 0xD301, 0xD301, 0xD301 }, -{ 0xD302, 0xD302, 0xD302 }, -{ 0xD303, 0xD303, 0xD303 }, -{ 0xD304, 0xD304, 0xD304 }, -{ 0xD305, 0xD305, 0xD305 }, -{ 0xD306, 0xD306, 0xD306 }, -{ 0xD307, 0xD307, 0xD307 }, -{ 0xD308, 0xD308, 0xD308 }, -{ 0xD309, 0xD309, 0xD309 }, -{ 0xD30A, 0xD30A, 0xD30A }, -{ 0xD30B, 0xD30B, 0xD30B }, -{ 0xD30C, 0xD30C, 0xD30C }, -{ 0xD30D, 0xD30D, 0xD30D }, -{ 0xD30E, 0xD30E, 0xD30E }, -{ 0xD30F, 0xD30F, 0xD30F }, -{ 0xD310, 0xD310, 0xD310 }, -{ 0xD311, 0xD311, 0xD311 }, -{ 0xD312, 0xD312, 0xD312 }, -{ 0xD313, 0xD313, 0xD313 }, -{ 0xD314, 0xD314, 0xD314 }, -{ 0xD315, 0xD315, 0xD315 }, -{ 0xD316, 0xD316, 0xD316 }, -{ 0xD317, 0xD317, 0xD317 }, -{ 0xD318, 0xD318, 0xD318 }, -{ 0xD319, 0xD319, 0xD319 }, -{ 0xD31A, 0xD31A, 0xD31A }, -{ 0xD31B, 0xD31B, 0xD31B }, -{ 0xD31C, 0xD31C, 0xD31C }, -{ 0xD31D, 0xD31D, 0xD31D }, -{ 0xD31E, 0xD31E, 0xD31E }, -{ 0xD31F, 0xD31F, 0xD31F }, -{ 0xD320, 0xD320, 0xD320 }, -{ 0xD321, 0xD321, 0xD321 }, -{ 0xD322, 0xD322, 0xD322 }, -{ 0xD323, 0xD323, 0xD323 }, -{ 0xD324, 0xD324, 0xD324 }, -{ 0xD325, 0xD325, 0xD325 }, -{ 0xD326, 0xD326, 0xD326 }, -{ 0xD327, 0xD327, 0xD327 }, -{ 0xD328, 0xD328, 0xD328 }, -{ 0xD329, 0xD329, 0xD329 }, -{ 0xD32A, 0xD32A, 0xD32A }, -{ 0xD32B, 0xD32B, 0xD32B }, -{ 0xD32C, 0xD32C, 0xD32C }, -{ 0xD32D, 0xD32D, 0xD32D }, -{ 0xD32E, 0xD32E, 0xD32E }, -{ 0xD32F, 0xD32F, 0xD32F }, -{ 0xD330, 0xD330, 0xD330 }, -{ 0xD331, 0xD331, 0xD331 }, -{ 0xD332, 0xD332, 0xD332 }, -{ 0xD333, 0xD333, 0xD333 }, -{ 0xD334, 0xD334, 0xD334 }, -{ 0xD335, 0xD335, 0xD335 }, -{ 0xD336, 0xD336, 0xD336 }, -{ 0xD337, 0xD337, 0xD337 }, -{ 0xD338, 0xD338, 0xD338 }, -{ 0xD339, 0xD339, 0xD339 }, -{ 0xD33A, 0xD33A, 0xD33A }, -{ 0xD33B, 0xD33B, 0xD33B }, -{ 0xD33C, 0xD33C, 0xD33C }, -{ 0xD33D, 0xD33D, 0xD33D }, -{ 0xD33E, 0xD33E, 0xD33E }, -{ 0xD33F, 0xD33F, 0xD33F }, -{ 0xD340, 0xD340, 0xD340 }, -{ 0xD341, 0xD341, 0xD341 }, -{ 0xD342, 0xD342, 0xD342 }, -{ 0xD343, 0xD343, 0xD343 }, -{ 0xD344, 0xD344, 0xD344 }, -{ 0xD345, 0xD345, 0xD345 }, -{ 0xD346, 0xD346, 0xD346 }, -{ 0xD347, 0xD347, 0xD347 }, -{ 0xD348, 0xD348, 0xD348 }, -{ 0xD349, 0xD349, 0xD349 }, -{ 0xD34A, 0xD34A, 0xD34A }, -{ 0xD34B, 0xD34B, 0xD34B }, -{ 0xD34C, 0xD34C, 0xD34C }, -{ 0xD34D, 0xD34D, 0xD34D }, -{ 0xD34E, 0xD34E, 0xD34E }, -{ 0xD34F, 0xD34F, 0xD34F }, -{ 0xD350, 0xD350, 0xD350 }, -{ 0xD351, 0xD351, 0xD351 }, -{ 0xD352, 0xD352, 0xD352 }, -{ 0xD353, 0xD353, 0xD353 }, -{ 0xD354, 0xD354, 0xD354 }, -{ 0xD355, 0xD355, 0xD355 }, -{ 0xD356, 0xD356, 0xD356 }, -{ 0xD357, 0xD357, 0xD357 }, -{ 0xD358, 0xD358, 0xD358 }, -{ 0xD359, 0xD359, 0xD359 }, -{ 0xD35A, 0xD35A, 0xD35A }, -{ 0xD35B, 0xD35B, 0xD35B }, -{ 0xD35C, 0xD35C, 0xD35C }, -{ 0xD35D, 0xD35D, 0xD35D }, -{ 0xD35E, 0xD35E, 0xD35E }, -{ 0xD35F, 0xD35F, 0xD35F }, -{ 0xD360, 0xD360, 0xD360 }, -{ 0xD361, 0xD361, 0xD361 }, -{ 0xD362, 0xD362, 0xD362 }, -{ 0xD363, 0xD363, 0xD363 }, -{ 0xD364, 0xD364, 0xD364 }, -{ 0xD365, 0xD365, 0xD365 }, -{ 0xD366, 0xD366, 0xD366 }, -{ 0xD367, 0xD367, 0xD367 }, -{ 0xD368, 0xD368, 0xD368 }, -{ 0xD369, 0xD369, 0xD369 }, -{ 0xD36A, 0xD36A, 0xD36A }, -{ 0xD36B, 0xD36B, 0xD36B }, -{ 0xD36C, 0xD36C, 0xD36C }, -{ 0xD36D, 0xD36D, 0xD36D }, -{ 0xD36E, 0xD36E, 0xD36E }, -{ 0xD36F, 0xD36F, 0xD36F }, -{ 0xD370, 0xD370, 0xD370 }, -{ 0xD371, 0xD371, 0xD371 }, -{ 0xD372, 0xD372, 0xD372 }, -{ 0xD373, 0xD373, 0xD373 }, -{ 0xD374, 0xD374, 0xD374 }, -{ 0xD375, 0xD375, 0xD375 }, -{ 0xD376, 0xD376, 0xD376 }, -{ 0xD377, 0xD377, 0xD377 }, -{ 0xD378, 0xD378, 0xD378 }, -{ 0xD379, 0xD379, 0xD379 }, -{ 0xD37A, 0xD37A, 0xD37A }, -{ 0xD37B, 0xD37B, 0xD37B }, -{ 0xD37C, 0xD37C, 0xD37C }, -{ 0xD37D, 0xD37D, 0xD37D }, -{ 0xD37E, 0xD37E, 0xD37E }, -{ 0xD37F, 0xD37F, 0xD37F }, -{ 0xD380, 0xD380, 0xD380 }, -{ 0xD381, 0xD381, 0xD381 }, -{ 0xD382, 0xD382, 0xD382 }, -{ 0xD383, 0xD383, 0xD383 }, -{ 0xD384, 0xD384, 0xD384 }, -{ 0xD385, 0xD385, 0xD385 }, -{ 0xD386, 0xD386, 0xD386 }, -{ 0xD387, 0xD387, 0xD387 }, -{ 0xD388, 0xD388, 0xD388 }, -{ 0xD389, 0xD389, 0xD389 }, -{ 0xD38A, 0xD38A, 0xD38A }, -{ 0xD38B, 0xD38B, 0xD38B }, -{ 0xD38C, 0xD38C, 0xD38C }, -{ 0xD38D, 0xD38D, 0xD38D }, -{ 0xD38E, 0xD38E, 0xD38E }, -{ 0xD38F, 0xD38F, 0xD38F }, -{ 0xD390, 0xD390, 0xD390 }, -{ 0xD391, 0xD391, 0xD391 }, -{ 0xD392, 0xD392, 0xD392 }, -{ 0xD393, 0xD393, 0xD393 }, -{ 0xD394, 0xD394, 0xD394 }, -{ 0xD395, 0xD395, 0xD395 }, -{ 0xD396, 0xD396, 0xD396 }, -{ 0xD397, 0xD397, 0xD397 }, -{ 0xD398, 0xD398, 0xD398 }, -{ 0xD399, 0xD399, 0xD399 }, -{ 0xD39A, 0xD39A, 0xD39A }, -{ 0xD39B, 0xD39B, 0xD39B }, -{ 0xD39C, 0xD39C, 0xD39C }, -{ 0xD39D, 0xD39D, 0xD39D }, -{ 0xD39E, 0xD39E, 0xD39E }, -{ 0xD39F, 0xD39F, 0xD39F }, -{ 0xD3A0, 0xD3A0, 0xD3A0 }, -{ 0xD3A1, 0xD3A1, 0xD3A1 }, -{ 0xD3A2, 0xD3A2, 0xD3A2 }, -{ 0xD3A3, 0xD3A3, 0xD3A3 }, -{ 0xD3A4, 0xD3A4, 0xD3A4 }, -{ 0xD3A5, 0xD3A5, 0xD3A5 }, -{ 0xD3A6, 0xD3A6, 0xD3A6 }, -{ 0xD3A7, 0xD3A7, 0xD3A7 }, -{ 0xD3A8, 0xD3A8, 0xD3A8 }, -{ 0xD3A9, 0xD3A9, 0xD3A9 }, -{ 0xD3AA, 0xD3AA, 0xD3AA }, -{ 0xD3AB, 0xD3AB, 0xD3AB }, -{ 0xD3AC, 0xD3AC, 0xD3AC }, -{ 0xD3AD, 0xD3AD, 0xD3AD }, -{ 0xD3AE, 0xD3AE, 0xD3AE }, -{ 0xD3AF, 0xD3AF, 0xD3AF }, -{ 0xD3B0, 0xD3B0, 0xD3B0 }, -{ 0xD3B1, 0xD3B1, 0xD3B1 }, -{ 0xD3B2, 0xD3B2, 0xD3B2 }, -{ 0xD3B3, 0xD3B3, 0xD3B3 }, -{ 0xD3B4, 0xD3B4, 0xD3B4 }, -{ 0xD3B5, 0xD3B5, 0xD3B5 }, -{ 0xD3B6, 0xD3B6, 0xD3B6 }, -{ 0xD3B7, 0xD3B7, 0xD3B7 }, -{ 0xD3B8, 0xD3B8, 0xD3B8 }, -{ 0xD3B9, 0xD3B9, 0xD3B9 }, -{ 0xD3BA, 0xD3BA, 0xD3BA }, -{ 0xD3BB, 0xD3BB, 0xD3BB }, -{ 0xD3BC, 0xD3BC, 0xD3BC }, -{ 0xD3BD, 0xD3BD, 0xD3BD }, -{ 0xD3BE, 0xD3BE, 0xD3BE }, -{ 0xD3BF, 0xD3BF, 0xD3BF }, -{ 0xD3C0, 0xD3C0, 0xD3C0 }, -{ 0xD3C1, 0xD3C1, 0xD3C1 }, -{ 0xD3C2, 0xD3C2, 0xD3C2 }, -{ 0xD3C3, 0xD3C3, 0xD3C3 }, -{ 0xD3C4, 0xD3C4, 0xD3C4 }, -{ 0xD3C5, 0xD3C5, 0xD3C5 }, -{ 0xD3C6, 0xD3C6, 0xD3C6 }, -{ 0xD3C7, 0xD3C7, 0xD3C7 }, -{ 0xD3C8, 0xD3C8, 0xD3C8 }, -{ 0xD3C9, 0xD3C9, 0xD3C9 }, -{ 0xD3CA, 0xD3CA, 0xD3CA }, -{ 0xD3CB, 0xD3CB, 0xD3CB }, -{ 0xD3CC, 0xD3CC, 0xD3CC }, -{ 0xD3CD, 0xD3CD, 0xD3CD }, -{ 0xD3CE, 0xD3CE, 0xD3CE }, -{ 0xD3CF, 0xD3CF, 0xD3CF }, -{ 0xD3D0, 0xD3D0, 0xD3D0 }, -{ 0xD3D1, 0xD3D1, 0xD3D1 }, -{ 0xD3D2, 0xD3D2, 0xD3D2 }, -{ 0xD3D3, 0xD3D3, 0xD3D3 }, -{ 0xD3D4, 0xD3D4, 0xD3D4 }, -{ 0xD3D5, 0xD3D5, 0xD3D5 }, -{ 0xD3D6, 0xD3D6, 0xD3D6 }, -{ 0xD3D7, 0xD3D7, 0xD3D7 }, -{ 0xD3D8, 0xD3D8, 0xD3D8 }, -{ 0xD3D9, 0xD3D9, 0xD3D9 }, -{ 0xD3DA, 0xD3DA, 0xD3DA }, -{ 0xD3DB, 0xD3DB, 0xD3DB }, -{ 0xD3DC, 0xD3DC, 0xD3DC }, -{ 0xD3DD, 0xD3DD, 0xD3DD }, -{ 0xD3DE, 0xD3DE, 0xD3DE }, -{ 0xD3DF, 0xD3DF, 0xD3DF }, -{ 0xD3E0, 0xD3E0, 0xD3E0 }, -{ 0xD3E1, 0xD3E1, 0xD3E1 }, -{ 0xD3E2, 0xD3E2, 0xD3E2 }, -{ 0xD3E3, 0xD3E3, 0xD3E3 }, -{ 0xD3E4, 0xD3E4, 0xD3E4 }, -{ 0xD3E5, 0xD3E5, 0xD3E5 }, -{ 0xD3E6, 0xD3E6, 0xD3E6 }, -{ 0xD3E7, 0xD3E7, 0xD3E7 }, -{ 0xD3E8, 0xD3E8, 0xD3E8 }, -{ 0xD3E9, 0xD3E9, 0xD3E9 }, -{ 0xD3EA, 0xD3EA, 0xD3EA }, -{ 0xD3EB, 0xD3EB, 0xD3EB }, -{ 0xD3EC, 0xD3EC, 0xD3EC }, -{ 0xD3ED, 0xD3ED, 0xD3ED }, -{ 0xD3EE, 0xD3EE, 0xD3EE }, -{ 0xD3EF, 0xD3EF, 0xD3EF }, -{ 0xD3F0, 0xD3F0, 0xD3F0 }, -{ 0xD3F1, 0xD3F1, 0xD3F1 }, -{ 0xD3F2, 0xD3F2, 0xD3F2 }, -{ 0xD3F3, 0xD3F3, 0xD3F3 }, -{ 0xD3F4, 0xD3F4, 0xD3F4 }, -{ 0xD3F5, 0xD3F5, 0xD3F5 }, -{ 0xD3F6, 0xD3F6, 0xD3F6 }, -{ 0xD3F7, 0xD3F7, 0xD3F7 }, -{ 0xD3F8, 0xD3F8, 0xD3F8 }, -{ 0xD3F9, 0xD3F9, 0xD3F9 }, -{ 0xD3FA, 0xD3FA, 0xD3FA }, -{ 0xD3FB, 0xD3FB, 0xD3FB }, -{ 0xD3FC, 0xD3FC, 0xD3FC }, -{ 0xD3FD, 0xD3FD, 0xD3FD }, -{ 0xD3FE, 0xD3FE, 0xD3FE }, -{ 0xD3FF, 0xD3FF, 0xD3FF }, -{ 0xD400, 0xD400, 0xD400 }, -{ 0xD401, 0xD401, 0xD401 }, -{ 0xD402, 0xD402, 0xD402 }, -{ 0xD403, 0xD403, 0xD403 }, -{ 0xD404, 0xD404, 0xD404 }, -{ 0xD405, 0xD405, 0xD405 }, -{ 0xD406, 0xD406, 0xD406 }, -{ 0xD407, 0xD407, 0xD407 }, -{ 0xD408, 0xD408, 0xD408 }, -{ 0xD409, 0xD409, 0xD409 }, -{ 0xD40A, 0xD40A, 0xD40A }, -{ 0xD40B, 0xD40B, 0xD40B }, -{ 0xD40C, 0xD40C, 0xD40C }, -{ 0xD40D, 0xD40D, 0xD40D }, -{ 0xD40E, 0xD40E, 0xD40E }, -{ 0xD40F, 0xD40F, 0xD40F }, -{ 0xD410, 0xD410, 0xD410 }, -{ 0xD411, 0xD411, 0xD411 }, -{ 0xD412, 0xD412, 0xD412 }, -{ 0xD413, 0xD413, 0xD413 }, -{ 0xD414, 0xD414, 0xD414 }, -{ 0xD415, 0xD415, 0xD415 }, -{ 0xD416, 0xD416, 0xD416 }, -{ 0xD417, 0xD417, 0xD417 }, -{ 0xD418, 0xD418, 0xD418 }, -{ 0xD419, 0xD419, 0xD419 }, -{ 0xD41A, 0xD41A, 0xD41A }, -{ 0xD41B, 0xD41B, 0xD41B }, -{ 0xD41C, 0xD41C, 0xD41C }, -{ 0xD41D, 0xD41D, 0xD41D }, -{ 0xD41E, 0xD41E, 0xD41E }, -{ 0xD41F, 0xD41F, 0xD41F }, -{ 0xD420, 0xD420, 0xD420 }, -{ 0xD421, 0xD421, 0xD421 }, -{ 0xD422, 0xD422, 0xD422 }, -{ 0xD423, 0xD423, 0xD423 }, -{ 0xD424, 0xD424, 0xD424 }, -{ 0xD425, 0xD425, 0xD425 }, -{ 0xD426, 0xD426, 0xD426 }, -{ 0xD427, 0xD427, 0xD427 }, -{ 0xD428, 0xD428, 0xD428 }, -{ 0xD429, 0xD429, 0xD429 }, -{ 0xD42A, 0xD42A, 0xD42A }, -{ 0xD42B, 0xD42B, 0xD42B }, -{ 0xD42C, 0xD42C, 0xD42C }, -{ 0xD42D, 0xD42D, 0xD42D }, -{ 0xD42E, 0xD42E, 0xD42E }, -{ 0xD42F, 0xD42F, 0xD42F }, -{ 0xD430, 0xD430, 0xD430 }, -{ 0xD431, 0xD431, 0xD431 }, -{ 0xD432, 0xD432, 0xD432 }, -{ 0xD433, 0xD433, 0xD433 }, -{ 0xD434, 0xD434, 0xD434 }, -{ 0xD435, 0xD435, 0xD435 }, -{ 0xD436, 0xD436, 0xD436 }, -{ 0xD437, 0xD437, 0xD437 }, -{ 0xD438, 0xD438, 0xD438 }, -{ 0xD439, 0xD439, 0xD439 }, -{ 0xD43A, 0xD43A, 0xD43A }, -{ 0xD43B, 0xD43B, 0xD43B }, -{ 0xD43C, 0xD43C, 0xD43C }, -{ 0xD43D, 0xD43D, 0xD43D }, -{ 0xD43E, 0xD43E, 0xD43E }, -{ 0xD43F, 0xD43F, 0xD43F }, -{ 0xD440, 0xD440, 0xD440 }, -{ 0xD441, 0xD441, 0xD441 }, -{ 0xD442, 0xD442, 0xD442 }, -{ 0xD443, 0xD443, 0xD443 }, -{ 0xD444, 0xD444, 0xD444 }, -{ 0xD445, 0xD445, 0xD445 }, -{ 0xD446, 0xD446, 0xD446 }, -{ 0xD447, 0xD447, 0xD447 }, -{ 0xD448, 0xD448, 0xD448 }, -{ 0xD449, 0xD449, 0xD449 }, -{ 0xD44A, 0xD44A, 0xD44A }, -{ 0xD44B, 0xD44B, 0xD44B }, -{ 0xD44C, 0xD44C, 0xD44C }, -{ 0xD44D, 0xD44D, 0xD44D }, -{ 0xD44E, 0xD44E, 0xD44E }, -{ 0xD44F, 0xD44F, 0xD44F }, -{ 0xD450, 0xD450, 0xD450 }, -{ 0xD451, 0xD451, 0xD451 }, -{ 0xD452, 0xD452, 0xD452 }, -{ 0xD453, 0xD453, 0xD453 }, -{ 0xD454, 0xD454, 0xD454 }, -{ 0xD455, 0xD455, 0xD455 }, -{ 0xD456, 0xD456, 0xD456 }, -{ 0xD457, 0xD457, 0xD457 }, -{ 0xD458, 0xD458, 0xD458 }, -{ 0xD459, 0xD459, 0xD459 }, -{ 0xD45A, 0xD45A, 0xD45A }, -{ 0xD45B, 0xD45B, 0xD45B }, -{ 0xD45C, 0xD45C, 0xD45C }, -{ 0xD45D, 0xD45D, 0xD45D }, -{ 0xD45E, 0xD45E, 0xD45E }, -{ 0xD45F, 0xD45F, 0xD45F }, -{ 0xD460, 0xD460, 0xD460 }, -{ 0xD461, 0xD461, 0xD461 }, -{ 0xD462, 0xD462, 0xD462 }, -{ 0xD463, 0xD463, 0xD463 }, -{ 0xD464, 0xD464, 0xD464 }, -{ 0xD465, 0xD465, 0xD465 }, -{ 0xD466, 0xD466, 0xD466 }, -{ 0xD467, 0xD467, 0xD467 }, -{ 0xD468, 0xD468, 0xD468 }, -{ 0xD469, 0xD469, 0xD469 }, -{ 0xD46A, 0xD46A, 0xD46A }, -{ 0xD46B, 0xD46B, 0xD46B }, -{ 0xD46C, 0xD46C, 0xD46C }, -{ 0xD46D, 0xD46D, 0xD46D }, -{ 0xD46E, 0xD46E, 0xD46E }, -{ 0xD46F, 0xD46F, 0xD46F }, -{ 0xD470, 0xD470, 0xD470 }, -{ 0xD471, 0xD471, 0xD471 }, -{ 0xD472, 0xD472, 0xD472 }, -{ 0xD473, 0xD473, 0xD473 }, -{ 0xD474, 0xD474, 0xD474 }, -{ 0xD475, 0xD475, 0xD475 }, -{ 0xD476, 0xD476, 0xD476 }, -{ 0xD477, 0xD477, 0xD477 }, -{ 0xD478, 0xD478, 0xD478 }, -{ 0xD479, 0xD479, 0xD479 }, -{ 0xD47A, 0xD47A, 0xD47A }, -{ 0xD47B, 0xD47B, 0xD47B }, -{ 0xD47C, 0xD47C, 0xD47C }, -{ 0xD47D, 0xD47D, 0xD47D }, -{ 0xD47E, 0xD47E, 0xD47E }, -{ 0xD47F, 0xD47F, 0xD47F }, -{ 0xD480, 0xD480, 0xD480 }, -{ 0xD481, 0xD481, 0xD481 }, -{ 0xD482, 0xD482, 0xD482 }, -{ 0xD483, 0xD483, 0xD483 }, -{ 0xD484, 0xD484, 0xD484 }, -{ 0xD485, 0xD485, 0xD485 }, -{ 0xD486, 0xD486, 0xD486 }, -{ 0xD487, 0xD487, 0xD487 }, -{ 0xD488, 0xD488, 0xD488 }, -{ 0xD489, 0xD489, 0xD489 }, -{ 0xD48A, 0xD48A, 0xD48A }, -{ 0xD48B, 0xD48B, 0xD48B }, -{ 0xD48C, 0xD48C, 0xD48C }, -{ 0xD48D, 0xD48D, 0xD48D }, -{ 0xD48E, 0xD48E, 0xD48E }, -{ 0xD48F, 0xD48F, 0xD48F }, -{ 0xD490, 0xD490, 0xD490 }, -{ 0xD491, 0xD491, 0xD491 }, -{ 0xD492, 0xD492, 0xD492 }, -{ 0xD493, 0xD493, 0xD493 }, -{ 0xD494, 0xD494, 0xD494 }, -{ 0xD495, 0xD495, 0xD495 }, -{ 0xD496, 0xD496, 0xD496 }, -{ 0xD497, 0xD497, 0xD497 }, -{ 0xD498, 0xD498, 0xD498 }, -{ 0xD499, 0xD499, 0xD499 }, -{ 0xD49A, 0xD49A, 0xD49A }, -{ 0xD49B, 0xD49B, 0xD49B }, -{ 0xD49C, 0xD49C, 0xD49C }, -{ 0xD49D, 0xD49D, 0xD49D }, -{ 0xD49E, 0xD49E, 0xD49E }, -{ 0xD49F, 0xD49F, 0xD49F }, -{ 0xD4A0, 0xD4A0, 0xD4A0 }, -{ 0xD4A1, 0xD4A1, 0xD4A1 }, -{ 0xD4A2, 0xD4A2, 0xD4A2 }, -{ 0xD4A3, 0xD4A3, 0xD4A3 }, -{ 0xD4A4, 0xD4A4, 0xD4A4 }, -{ 0xD4A5, 0xD4A5, 0xD4A5 }, -{ 0xD4A6, 0xD4A6, 0xD4A6 }, -{ 0xD4A7, 0xD4A7, 0xD4A7 }, -{ 0xD4A8, 0xD4A8, 0xD4A8 }, -{ 0xD4A9, 0xD4A9, 0xD4A9 }, -{ 0xD4AA, 0xD4AA, 0xD4AA }, -{ 0xD4AB, 0xD4AB, 0xD4AB }, -{ 0xD4AC, 0xD4AC, 0xD4AC }, -{ 0xD4AD, 0xD4AD, 0xD4AD }, -{ 0xD4AE, 0xD4AE, 0xD4AE }, -{ 0xD4AF, 0xD4AF, 0xD4AF }, -{ 0xD4B0, 0xD4B0, 0xD4B0 }, -{ 0xD4B1, 0xD4B1, 0xD4B1 }, -{ 0xD4B2, 0xD4B2, 0xD4B2 }, -{ 0xD4B3, 0xD4B3, 0xD4B3 }, -{ 0xD4B4, 0xD4B4, 0xD4B4 }, -{ 0xD4B5, 0xD4B5, 0xD4B5 }, -{ 0xD4B6, 0xD4B6, 0xD4B6 }, -{ 0xD4B7, 0xD4B7, 0xD4B7 }, -{ 0xD4B8, 0xD4B8, 0xD4B8 }, -{ 0xD4B9, 0xD4B9, 0xD4B9 }, -{ 0xD4BA, 0xD4BA, 0xD4BA }, -{ 0xD4BB, 0xD4BB, 0xD4BB }, -{ 0xD4BC, 0xD4BC, 0xD4BC }, -{ 0xD4BD, 0xD4BD, 0xD4BD }, -{ 0xD4BE, 0xD4BE, 0xD4BE }, -{ 0xD4BF, 0xD4BF, 0xD4BF }, -{ 0xD4C0, 0xD4C0, 0xD4C0 }, -{ 0xD4C1, 0xD4C1, 0xD4C1 }, -{ 0xD4C2, 0xD4C2, 0xD4C2 }, -{ 0xD4C3, 0xD4C3, 0xD4C3 }, -{ 0xD4C4, 0xD4C4, 0xD4C4 }, -{ 0xD4C5, 0xD4C5, 0xD4C5 }, -{ 0xD4C6, 0xD4C6, 0xD4C6 }, -{ 0xD4C7, 0xD4C7, 0xD4C7 }, -{ 0xD4C8, 0xD4C8, 0xD4C8 }, -{ 0xD4C9, 0xD4C9, 0xD4C9 }, -{ 0xD4CA, 0xD4CA, 0xD4CA }, -{ 0xD4CB, 0xD4CB, 0xD4CB }, -{ 0xD4CC, 0xD4CC, 0xD4CC }, -{ 0xD4CD, 0xD4CD, 0xD4CD }, -{ 0xD4CE, 0xD4CE, 0xD4CE }, -{ 0xD4CF, 0xD4CF, 0xD4CF }, -{ 0xD4D0, 0xD4D0, 0xD4D0 }, -{ 0xD4D1, 0xD4D1, 0xD4D1 }, -{ 0xD4D2, 0xD4D2, 0xD4D2 }, -{ 0xD4D3, 0xD4D3, 0xD4D3 }, -{ 0xD4D4, 0xD4D4, 0xD4D4 }, -{ 0xD4D5, 0xD4D5, 0xD4D5 }, -{ 0xD4D6, 0xD4D6, 0xD4D6 }, -{ 0xD4D7, 0xD4D7, 0xD4D7 }, -{ 0xD4D8, 0xD4D8, 0xD4D8 }, -{ 0xD4D9, 0xD4D9, 0xD4D9 }, -{ 0xD4DA, 0xD4DA, 0xD4DA }, -{ 0xD4DB, 0xD4DB, 0xD4DB }, -{ 0xD4DC, 0xD4DC, 0xD4DC }, -{ 0xD4DD, 0xD4DD, 0xD4DD }, -{ 0xD4DE, 0xD4DE, 0xD4DE }, -{ 0xD4DF, 0xD4DF, 0xD4DF }, -{ 0xD4E0, 0xD4E0, 0xD4E0 }, -{ 0xD4E1, 0xD4E1, 0xD4E1 }, -{ 0xD4E2, 0xD4E2, 0xD4E2 }, -{ 0xD4E3, 0xD4E3, 0xD4E3 }, -{ 0xD4E4, 0xD4E4, 0xD4E4 }, -{ 0xD4E5, 0xD4E5, 0xD4E5 }, -{ 0xD4E6, 0xD4E6, 0xD4E6 }, -{ 0xD4E7, 0xD4E7, 0xD4E7 }, -{ 0xD4E8, 0xD4E8, 0xD4E8 }, -{ 0xD4E9, 0xD4E9, 0xD4E9 }, -{ 0xD4EA, 0xD4EA, 0xD4EA }, -{ 0xD4EB, 0xD4EB, 0xD4EB }, -{ 0xD4EC, 0xD4EC, 0xD4EC }, -{ 0xD4ED, 0xD4ED, 0xD4ED }, -{ 0xD4EE, 0xD4EE, 0xD4EE }, -{ 0xD4EF, 0xD4EF, 0xD4EF }, -{ 0xD4F0, 0xD4F0, 0xD4F0 }, -{ 0xD4F1, 0xD4F1, 0xD4F1 }, -{ 0xD4F2, 0xD4F2, 0xD4F2 }, -{ 0xD4F3, 0xD4F3, 0xD4F3 }, -{ 0xD4F4, 0xD4F4, 0xD4F4 }, -{ 0xD4F5, 0xD4F5, 0xD4F5 }, -{ 0xD4F6, 0xD4F6, 0xD4F6 }, -{ 0xD4F7, 0xD4F7, 0xD4F7 }, -{ 0xD4F8, 0xD4F8, 0xD4F8 }, -{ 0xD4F9, 0xD4F9, 0xD4F9 }, -{ 0xD4FA, 0xD4FA, 0xD4FA }, -{ 0xD4FB, 0xD4FB, 0xD4FB }, -{ 0xD4FC, 0xD4FC, 0xD4FC }, -{ 0xD4FD, 0xD4FD, 0xD4FD }, -{ 0xD4FE, 0xD4FE, 0xD4FE }, -{ 0xD4FF, 0xD4FF, 0xD4FF }, -{ 0xD500, 0xD500, 0xD500 }, -{ 0xD501, 0xD501, 0xD501 }, -{ 0xD502, 0xD502, 0xD502 }, -{ 0xD503, 0xD503, 0xD503 }, -{ 0xD504, 0xD504, 0xD504 }, -{ 0xD505, 0xD505, 0xD505 }, -{ 0xD506, 0xD506, 0xD506 }, -{ 0xD507, 0xD507, 0xD507 }, -{ 0xD508, 0xD508, 0xD508 }, -{ 0xD509, 0xD509, 0xD509 }, -{ 0xD50A, 0xD50A, 0xD50A }, -{ 0xD50B, 0xD50B, 0xD50B }, -{ 0xD50C, 0xD50C, 0xD50C }, -{ 0xD50D, 0xD50D, 0xD50D }, -{ 0xD50E, 0xD50E, 0xD50E }, -{ 0xD50F, 0xD50F, 0xD50F }, -{ 0xD510, 0xD510, 0xD510 }, -{ 0xD511, 0xD511, 0xD511 }, -{ 0xD512, 0xD512, 0xD512 }, -{ 0xD513, 0xD513, 0xD513 }, -{ 0xD514, 0xD514, 0xD514 }, -{ 0xD515, 0xD515, 0xD515 }, -{ 0xD516, 0xD516, 0xD516 }, -{ 0xD517, 0xD517, 0xD517 }, -{ 0xD518, 0xD518, 0xD518 }, -{ 0xD519, 0xD519, 0xD519 }, -{ 0xD51A, 0xD51A, 0xD51A }, -{ 0xD51B, 0xD51B, 0xD51B }, -{ 0xD51C, 0xD51C, 0xD51C }, -{ 0xD51D, 0xD51D, 0xD51D }, -{ 0xD51E, 0xD51E, 0xD51E }, -{ 0xD51F, 0xD51F, 0xD51F }, -{ 0xD520, 0xD520, 0xD520 }, -{ 0xD521, 0xD521, 0xD521 }, -{ 0xD522, 0xD522, 0xD522 }, -{ 0xD523, 0xD523, 0xD523 }, -{ 0xD524, 0xD524, 0xD524 }, -{ 0xD525, 0xD525, 0xD525 }, -{ 0xD526, 0xD526, 0xD526 }, -{ 0xD527, 0xD527, 0xD527 }, -{ 0xD528, 0xD528, 0xD528 }, -{ 0xD529, 0xD529, 0xD529 }, -{ 0xD52A, 0xD52A, 0xD52A }, -{ 0xD52B, 0xD52B, 0xD52B }, -{ 0xD52C, 0xD52C, 0xD52C }, -{ 0xD52D, 0xD52D, 0xD52D }, -{ 0xD52E, 0xD52E, 0xD52E }, -{ 0xD52F, 0xD52F, 0xD52F }, -{ 0xD530, 0xD530, 0xD530 }, -{ 0xD531, 0xD531, 0xD531 }, -{ 0xD532, 0xD532, 0xD532 }, -{ 0xD533, 0xD533, 0xD533 }, -{ 0xD534, 0xD534, 0xD534 }, -{ 0xD535, 0xD535, 0xD535 }, -{ 0xD536, 0xD536, 0xD536 }, -{ 0xD537, 0xD537, 0xD537 }, -{ 0xD538, 0xD538, 0xD538 }, -{ 0xD539, 0xD539, 0xD539 }, -{ 0xD53A, 0xD53A, 0xD53A }, -{ 0xD53B, 0xD53B, 0xD53B }, -{ 0xD53C, 0xD53C, 0xD53C }, -{ 0xD53D, 0xD53D, 0xD53D }, -{ 0xD53E, 0xD53E, 0xD53E }, -{ 0xD53F, 0xD53F, 0xD53F }, -{ 0xD540, 0xD540, 0xD540 }, -{ 0xD541, 0xD541, 0xD541 }, -{ 0xD542, 0xD542, 0xD542 }, -{ 0xD543, 0xD543, 0xD543 }, -{ 0xD544, 0xD544, 0xD544 }, -{ 0xD545, 0xD545, 0xD545 }, -{ 0xD546, 0xD546, 0xD546 }, -{ 0xD547, 0xD547, 0xD547 }, -{ 0xD548, 0xD548, 0xD548 }, -{ 0xD549, 0xD549, 0xD549 }, -{ 0xD54A, 0xD54A, 0xD54A }, -{ 0xD54B, 0xD54B, 0xD54B }, -{ 0xD54C, 0xD54C, 0xD54C }, -{ 0xD54D, 0xD54D, 0xD54D }, -{ 0xD54E, 0xD54E, 0xD54E }, -{ 0xD54F, 0xD54F, 0xD54F }, -{ 0xD550, 0xD550, 0xD550 }, -{ 0xD551, 0xD551, 0xD551 }, -{ 0xD552, 0xD552, 0xD552 }, -{ 0xD553, 0xD553, 0xD553 }, -{ 0xD554, 0xD554, 0xD554 }, -{ 0xD555, 0xD555, 0xD555 }, -{ 0xD556, 0xD556, 0xD556 }, -{ 0xD557, 0xD557, 0xD557 }, -{ 0xD558, 0xD558, 0xD558 }, -{ 0xD559, 0xD559, 0xD559 }, -{ 0xD55A, 0xD55A, 0xD55A }, -{ 0xD55B, 0xD55B, 0xD55B }, -{ 0xD55C, 0xD55C, 0xD55C }, -{ 0xD55D, 0xD55D, 0xD55D }, -{ 0xD55E, 0xD55E, 0xD55E }, -{ 0xD55F, 0xD55F, 0xD55F }, -{ 0xD560, 0xD560, 0xD560 }, -{ 0xD561, 0xD561, 0xD561 }, -{ 0xD562, 0xD562, 0xD562 }, -{ 0xD563, 0xD563, 0xD563 }, -{ 0xD564, 0xD564, 0xD564 }, -{ 0xD565, 0xD565, 0xD565 }, -{ 0xD566, 0xD566, 0xD566 }, -{ 0xD567, 0xD567, 0xD567 }, -{ 0xD568, 0xD568, 0xD568 }, -{ 0xD569, 0xD569, 0xD569 }, -{ 0xD56A, 0xD56A, 0xD56A }, -{ 0xD56B, 0xD56B, 0xD56B }, -{ 0xD56C, 0xD56C, 0xD56C }, -{ 0xD56D, 0xD56D, 0xD56D }, -{ 0xD56E, 0xD56E, 0xD56E }, -{ 0xD56F, 0xD56F, 0xD56F }, -{ 0xD570, 0xD570, 0xD570 }, -{ 0xD571, 0xD571, 0xD571 }, -{ 0xD572, 0xD572, 0xD572 }, -{ 0xD573, 0xD573, 0xD573 }, -{ 0xD574, 0xD574, 0xD574 }, -{ 0xD575, 0xD575, 0xD575 }, -{ 0xD576, 0xD576, 0xD576 }, -{ 0xD577, 0xD577, 0xD577 }, -{ 0xD578, 0xD578, 0xD578 }, -{ 0xD579, 0xD579, 0xD579 }, -{ 0xD57A, 0xD57A, 0xD57A }, -{ 0xD57B, 0xD57B, 0xD57B }, -{ 0xD57C, 0xD57C, 0xD57C }, -{ 0xD57D, 0xD57D, 0xD57D }, -{ 0xD57E, 0xD57E, 0xD57E }, -{ 0xD57F, 0xD57F, 0xD57F }, -{ 0xD580, 0xD580, 0xD580 }, -{ 0xD581, 0xD581, 0xD581 }, -{ 0xD582, 0xD582, 0xD582 }, -{ 0xD583, 0xD583, 0xD583 }, -{ 0xD584, 0xD584, 0xD584 }, -{ 0xD585, 0xD585, 0xD585 }, -{ 0xD586, 0xD586, 0xD586 }, -{ 0xD587, 0xD587, 0xD587 }, -{ 0xD588, 0xD588, 0xD588 }, -{ 0xD589, 0xD589, 0xD589 }, -{ 0xD58A, 0xD58A, 0xD58A }, -{ 0xD58B, 0xD58B, 0xD58B }, -{ 0xD58C, 0xD58C, 0xD58C }, -{ 0xD58D, 0xD58D, 0xD58D }, -{ 0xD58E, 0xD58E, 0xD58E }, -{ 0xD58F, 0xD58F, 0xD58F }, -{ 0xD590, 0xD590, 0xD590 }, -{ 0xD591, 0xD591, 0xD591 }, -{ 0xD592, 0xD592, 0xD592 }, -{ 0xD593, 0xD593, 0xD593 }, -{ 0xD594, 0xD594, 0xD594 }, -{ 0xD595, 0xD595, 0xD595 }, -{ 0xD596, 0xD596, 0xD596 }, -{ 0xD597, 0xD597, 0xD597 }, -{ 0xD598, 0xD598, 0xD598 }, -{ 0xD599, 0xD599, 0xD599 }, -{ 0xD59A, 0xD59A, 0xD59A }, -{ 0xD59B, 0xD59B, 0xD59B }, -{ 0xD59C, 0xD59C, 0xD59C }, -{ 0xD59D, 0xD59D, 0xD59D }, -{ 0xD59E, 0xD59E, 0xD59E }, -{ 0xD59F, 0xD59F, 0xD59F }, -{ 0xD5A0, 0xD5A0, 0xD5A0 }, -{ 0xD5A1, 0xD5A1, 0xD5A1 }, -{ 0xD5A2, 0xD5A2, 0xD5A2 }, -{ 0xD5A3, 0xD5A3, 0xD5A3 }, -{ 0xD5A4, 0xD5A4, 0xD5A4 }, -{ 0xD5A5, 0xD5A5, 0xD5A5 }, -{ 0xD5A6, 0xD5A6, 0xD5A6 }, -{ 0xD5A7, 0xD5A7, 0xD5A7 }, -{ 0xD5A8, 0xD5A8, 0xD5A8 }, -{ 0xD5A9, 0xD5A9, 0xD5A9 }, -{ 0xD5AA, 0xD5AA, 0xD5AA }, -{ 0xD5AB, 0xD5AB, 0xD5AB }, -{ 0xD5AC, 0xD5AC, 0xD5AC }, -{ 0xD5AD, 0xD5AD, 0xD5AD }, -{ 0xD5AE, 0xD5AE, 0xD5AE }, -{ 0xD5AF, 0xD5AF, 0xD5AF }, -{ 0xD5B0, 0xD5B0, 0xD5B0 }, -{ 0xD5B1, 0xD5B1, 0xD5B1 }, -{ 0xD5B2, 0xD5B2, 0xD5B2 }, -{ 0xD5B3, 0xD5B3, 0xD5B3 }, -{ 0xD5B4, 0xD5B4, 0xD5B4 }, -{ 0xD5B5, 0xD5B5, 0xD5B5 }, -{ 0xD5B6, 0xD5B6, 0xD5B6 }, -{ 0xD5B7, 0xD5B7, 0xD5B7 }, -{ 0xD5B8, 0xD5B8, 0xD5B8 }, -{ 0xD5B9, 0xD5B9, 0xD5B9 }, -{ 0xD5BA, 0xD5BA, 0xD5BA }, -{ 0xD5BB, 0xD5BB, 0xD5BB }, -{ 0xD5BC, 0xD5BC, 0xD5BC }, -{ 0xD5BD, 0xD5BD, 0xD5BD }, -{ 0xD5BE, 0xD5BE, 0xD5BE }, -{ 0xD5BF, 0xD5BF, 0xD5BF }, -{ 0xD5C0, 0xD5C0, 0xD5C0 }, -{ 0xD5C1, 0xD5C1, 0xD5C1 }, -{ 0xD5C2, 0xD5C2, 0xD5C2 }, -{ 0xD5C3, 0xD5C3, 0xD5C3 }, -{ 0xD5C4, 0xD5C4, 0xD5C4 }, -{ 0xD5C5, 0xD5C5, 0xD5C5 }, -{ 0xD5C6, 0xD5C6, 0xD5C6 }, -{ 0xD5C7, 0xD5C7, 0xD5C7 }, -{ 0xD5C8, 0xD5C8, 0xD5C8 }, -{ 0xD5C9, 0xD5C9, 0xD5C9 }, -{ 0xD5CA, 0xD5CA, 0xD5CA }, -{ 0xD5CB, 0xD5CB, 0xD5CB }, -{ 0xD5CC, 0xD5CC, 0xD5CC }, -{ 0xD5CD, 0xD5CD, 0xD5CD }, -{ 0xD5CE, 0xD5CE, 0xD5CE }, -{ 0xD5CF, 0xD5CF, 0xD5CF }, -{ 0xD5D0, 0xD5D0, 0xD5D0 }, -{ 0xD5D1, 0xD5D1, 0xD5D1 }, -{ 0xD5D2, 0xD5D2, 0xD5D2 }, -{ 0xD5D3, 0xD5D3, 0xD5D3 }, -{ 0xD5D4, 0xD5D4, 0xD5D4 }, -{ 0xD5D5, 0xD5D5, 0xD5D5 }, -{ 0xD5D6, 0xD5D6, 0xD5D6 }, -{ 0xD5D7, 0xD5D7, 0xD5D7 }, -{ 0xD5D8, 0xD5D8, 0xD5D8 }, -{ 0xD5D9, 0xD5D9, 0xD5D9 }, -{ 0xD5DA, 0xD5DA, 0xD5DA }, -{ 0xD5DB, 0xD5DB, 0xD5DB }, -{ 0xD5DC, 0xD5DC, 0xD5DC }, -{ 0xD5DD, 0xD5DD, 0xD5DD }, -{ 0xD5DE, 0xD5DE, 0xD5DE }, -{ 0xD5DF, 0xD5DF, 0xD5DF }, -{ 0xD5E0, 0xD5E0, 0xD5E0 }, -{ 0xD5E1, 0xD5E1, 0xD5E1 }, -{ 0xD5E2, 0xD5E2, 0xD5E2 }, -{ 0xD5E3, 0xD5E3, 0xD5E3 }, -{ 0xD5E4, 0xD5E4, 0xD5E4 }, -{ 0xD5E5, 0xD5E5, 0xD5E5 }, -{ 0xD5E6, 0xD5E6, 0xD5E6 }, -{ 0xD5E7, 0xD5E7, 0xD5E7 }, -{ 0xD5E8, 0xD5E8, 0xD5E8 }, -{ 0xD5E9, 0xD5E9, 0xD5E9 }, -{ 0xD5EA, 0xD5EA, 0xD5EA }, -{ 0xD5EB, 0xD5EB, 0xD5EB }, -{ 0xD5EC, 0xD5EC, 0xD5EC }, -{ 0xD5ED, 0xD5ED, 0xD5ED }, -{ 0xD5EE, 0xD5EE, 0xD5EE }, -{ 0xD5EF, 0xD5EF, 0xD5EF }, -{ 0xD5F0, 0xD5F0, 0xD5F0 }, -{ 0xD5F1, 0xD5F1, 0xD5F1 }, -{ 0xD5F2, 0xD5F2, 0xD5F2 }, -{ 0xD5F3, 0xD5F3, 0xD5F3 }, -{ 0xD5F4, 0xD5F4, 0xD5F4 }, -{ 0xD5F5, 0xD5F5, 0xD5F5 }, -{ 0xD5F6, 0xD5F6, 0xD5F6 }, -{ 0xD5F7, 0xD5F7, 0xD5F7 }, -{ 0xD5F8, 0xD5F8, 0xD5F8 }, -{ 0xD5F9, 0xD5F9, 0xD5F9 }, -{ 0xD5FA, 0xD5FA, 0xD5FA }, -{ 0xD5FB, 0xD5FB, 0xD5FB }, -{ 0xD5FC, 0xD5FC, 0xD5FC }, -{ 0xD5FD, 0xD5FD, 0xD5FD }, -{ 0xD5FE, 0xD5FE, 0xD5FE }, -{ 0xD5FF, 0xD5FF, 0xD5FF }, -{ 0xD600, 0xD600, 0xD600 }, -{ 0xD601, 0xD601, 0xD601 }, -{ 0xD602, 0xD602, 0xD602 }, -{ 0xD603, 0xD603, 0xD603 }, -{ 0xD604, 0xD604, 0xD604 }, -{ 0xD605, 0xD605, 0xD605 }, -{ 0xD606, 0xD606, 0xD606 }, -{ 0xD607, 0xD607, 0xD607 }, -{ 0xD608, 0xD608, 0xD608 }, -{ 0xD609, 0xD609, 0xD609 }, -{ 0xD60A, 0xD60A, 0xD60A }, -{ 0xD60B, 0xD60B, 0xD60B }, -{ 0xD60C, 0xD60C, 0xD60C }, -{ 0xD60D, 0xD60D, 0xD60D }, -{ 0xD60E, 0xD60E, 0xD60E }, -{ 0xD60F, 0xD60F, 0xD60F }, -{ 0xD610, 0xD610, 0xD610 }, -{ 0xD611, 0xD611, 0xD611 }, -{ 0xD612, 0xD612, 0xD612 }, -{ 0xD613, 0xD613, 0xD613 }, -{ 0xD614, 0xD614, 0xD614 }, -{ 0xD615, 0xD615, 0xD615 }, -{ 0xD616, 0xD616, 0xD616 }, -{ 0xD617, 0xD617, 0xD617 }, -{ 0xD618, 0xD618, 0xD618 }, -{ 0xD619, 0xD619, 0xD619 }, -{ 0xD61A, 0xD61A, 0xD61A }, -{ 0xD61B, 0xD61B, 0xD61B }, -{ 0xD61C, 0xD61C, 0xD61C }, -{ 0xD61D, 0xD61D, 0xD61D }, -{ 0xD61E, 0xD61E, 0xD61E }, -{ 0xD61F, 0xD61F, 0xD61F }, -{ 0xD620, 0xD620, 0xD620 }, -{ 0xD621, 0xD621, 0xD621 }, -{ 0xD622, 0xD622, 0xD622 }, -{ 0xD623, 0xD623, 0xD623 }, -{ 0xD624, 0xD624, 0xD624 }, -{ 0xD625, 0xD625, 0xD625 }, -{ 0xD626, 0xD626, 0xD626 }, -{ 0xD627, 0xD627, 0xD627 }, -{ 0xD628, 0xD628, 0xD628 }, -{ 0xD629, 0xD629, 0xD629 }, -{ 0xD62A, 0xD62A, 0xD62A }, -{ 0xD62B, 0xD62B, 0xD62B }, -{ 0xD62C, 0xD62C, 0xD62C }, -{ 0xD62D, 0xD62D, 0xD62D }, -{ 0xD62E, 0xD62E, 0xD62E }, -{ 0xD62F, 0xD62F, 0xD62F }, -{ 0xD630, 0xD630, 0xD630 }, -{ 0xD631, 0xD631, 0xD631 }, -{ 0xD632, 0xD632, 0xD632 }, -{ 0xD633, 0xD633, 0xD633 }, -{ 0xD634, 0xD634, 0xD634 }, -{ 0xD635, 0xD635, 0xD635 }, -{ 0xD636, 0xD636, 0xD636 }, -{ 0xD637, 0xD637, 0xD637 }, -{ 0xD638, 0xD638, 0xD638 }, -{ 0xD639, 0xD639, 0xD639 }, -{ 0xD63A, 0xD63A, 0xD63A }, -{ 0xD63B, 0xD63B, 0xD63B }, -{ 0xD63C, 0xD63C, 0xD63C }, -{ 0xD63D, 0xD63D, 0xD63D }, -{ 0xD63E, 0xD63E, 0xD63E }, -{ 0xD63F, 0xD63F, 0xD63F }, -{ 0xD640, 0xD640, 0xD640 }, -{ 0xD641, 0xD641, 0xD641 }, -{ 0xD642, 0xD642, 0xD642 }, -{ 0xD643, 0xD643, 0xD643 }, -{ 0xD644, 0xD644, 0xD644 }, -{ 0xD645, 0xD645, 0xD645 }, -{ 0xD646, 0xD646, 0xD646 }, -{ 0xD647, 0xD647, 0xD647 }, -{ 0xD648, 0xD648, 0xD648 }, -{ 0xD649, 0xD649, 0xD649 }, -{ 0xD64A, 0xD64A, 0xD64A }, -{ 0xD64B, 0xD64B, 0xD64B }, -{ 0xD64C, 0xD64C, 0xD64C }, -{ 0xD64D, 0xD64D, 0xD64D }, -{ 0xD64E, 0xD64E, 0xD64E }, -{ 0xD64F, 0xD64F, 0xD64F }, -{ 0xD650, 0xD650, 0xD650 }, -{ 0xD651, 0xD651, 0xD651 }, -{ 0xD652, 0xD652, 0xD652 }, -{ 0xD653, 0xD653, 0xD653 }, -{ 0xD654, 0xD654, 0xD654 }, -{ 0xD655, 0xD655, 0xD655 }, -{ 0xD656, 0xD656, 0xD656 }, -{ 0xD657, 0xD657, 0xD657 }, -{ 0xD658, 0xD658, 0xD658 }, -{ 0xD659, 0xD659, 0xD659 }, -{ 0xD65A, 0xD65A, 0xD65A }, -{ 0xD65B, 0xD65B, 0xD65B }, -{ 0xD65C, 0xD65C, 0xD65C }, -{ 0xD65D, 0xD65D, 0xD65D }, -{ 0xD65E, 0xD65E, 0xD65E }, -{ 0xD65F, 0xD65F, 0xD65F }, -{ 0xD660, 0xD660, 0xD660 }, -{ 0xD661, 0xD661, 0xD661 }, -{ 0xD662, 0xD662, 0xD662 }, -{ 0xD663, 0xD663, 0xD663 }, -{ 0xD664, 0xD664, 0xD664 }, -{ 0xD665, 0xD665, 0xD665 }, -{ 0xD666, 0xD666, 0xD666 }, -{ 0xD667, 0xD667, 0xD667 }, -{ 0xD668, 0xD668, 0xD668 }, -{ 0xD669, 0xD669, 0xD669 }, -{ 0xD66A, 0xD66A, 0xD66A }, -{ 0xD66B, 0xD66B, 0xD66B }, -{ 0xD66C, 0xD66C, 0xD66C }, -{ 0xD66D, 0xD66D, 0xD66D }, -{ 0xD66E, 0xD66E, 0xD66E }, -{ 0xD66F, 0xD66F, 0xD66F }, -{ 0xD670, 0xD670, 0xD670 }, -{ 0xD671, 0xD671, 0xD671 }, -{ 0xD672, 0xD672, 0xD672 }, -{ 0xD673, 0xD673, 0xD673 }, -{ 0xD674, 0xD674, 0xD674 }, -{ 0xD675, 0xD675, 0xD675 }, -{ 0xD676, 0xD676, 0xD676 }, -{ 0xD677, 0xD677, 0xD677 }, -{ 0xD678, 0xD678, 0xD678 }, -{ 0xD679, 0xD679, 0xD679 }, -{ 0xD67A, 0xD67A, 0xD67A }, -{ 0xD67B, 0xD67B, 0xD67B }, -{ 0xD67C, 0xD67C, 0xD67C }, -{ 0xD67D, 0xD67D, 0xD67D }, -{ 0xD67E, 0xD67E, 0xD67E }, -{ 0xD67F, 0xD67F, 0xD67F }, -{ 0xD680, 0xD680, 0xD680 }, -{ 0xD681, 0xD681, 0xD681 }, -{ 0xD682, 0xD682, 0xD682 }, -{ 0xD683, 0xD683, 0xD683 }, -{ 0xD684, 0xD684, 0xD684 }, -{ 0xD685, 0xD685, 0xD685 }, -{ 0xD686, 0xD686, 0xD686 }, -{ 0xD687, 0xD687, 0xD687 }, -{ 0xD688, 0xD688, 0xD688 }, -{ 0xD689, 0xD689, 0xD689 }, -{ 0xD68A, 0xD68A, 0xD68A }, -{ 0xD68B, 0xD68B, 0xD68B }, -{ 0xD68C, 0xD68C, 0xD68C }, -{ 0xD68D, 0xD68D, 0xD68D }, -{ 0xD68E, 0xD68E, 0xD68E }, -{ 0xD68F, 0xD68F, 0xD68F }, -{ 0xD690, 0xD690, 0xD690 }, -{ 0xD691, 0xD691, 0xD691 }, -{ 0xD692, 0xD692, 0xD692 }, -{ 0xD693, 0xD693, 0xD693 }, -{ 0xD694, 0xD694, 0xD694 }, -{ 0xD695, 0xD695, 0xD695 }, -{ 0xD696, 0xD696, 0xD696 }, -{ 0xD697, 0xD697, 0xD697 }, -{ 0xD698, 0xD698, 0xD698 }, -{ 0xD699, 0xD699, 0xD699 }, -{ 0xD69A, 0xD69A, 0xD69A }, -{ 0xD69B, 0xD69B, 0xD69B }, -{ 0xD69C, 0xD69C, 0xD69C }, -{ 0xD69D, 0xD69D, 0xD69D }, -{ 0xD69E, 0xD69E, 0xD69E }, -{ 0xD69F, 0xD69F, 0xD69F }, -{ 0xD6A0, 0xD6A0, 0xD6A0 }, -{ 0xD6A1, 0xD6A1, 0xD6A1 }, -{ 0xD6A2, 0xD6A2, 0xD6A2 }, -{ 0xD6A3, 0xD6A3, 0xD6A3 }, -{ 0xD6A4, 0xD6A4, 0xD6A4 }, -{ 0xD6A5, 0xD6A5, 0xD6A5 }, -{ 0xD6A6, 0xD6A6, 0xD6A6 }, -{ 0xD6A7, 0xD6A7, 0xD6A7 }, -{ 0xD6A8, 0xD6A8, 0xD6A8 }, -{ 0xD6A9, 0xD6A9, 0xD6A9 }, -{ 0xD6AA, 0xD6AA, 0xD6AA }, -{ 0xD6AB, 0xD6AB, 0xD6AB }, -{ 0xD6AC, 0xD6AC, 0xD6AC }, -{ 0xD6AD, 0xD6AD, 0xD6AD }, -{ 0xD6AE, 0xD6AE, 0xD6AE }, -{ 0xD6AF, 0xD6AF, 0xD6AF }, -{ 0xD6B0, 0xD6B0, 0xD6B0 }, -{ 0xD6B1, 0xD6B1, 0xD6B1 }, -{ 0xD6B2, 0xD6B2, 0xD6B2 }, -{ 0xD6B3, 0xD6B3, 0xD6B3 }, -{ 0xD6B4, 0xD6B4, 0xD6B4 }, -{ 0xD6B5, 0xD6B5, 0xD6B5 }, -{ 0xD6B6, 0xD6B6, 0xD6B6 }, -{ 0xD6B7, 0xD6B7, 0xD6B7 }, -{ 0xD6B8, 0xD6B8, 0xD6B8 }, -{ 0xD6B9, 0xD6B9, 0xD6B9 }, -{ 0xD6BA, 0xD6BA, 0xD6BA }, -{ 0xD6BB, 0xD6BB, 0xD6BB }, -{ 0xD6BC, 0xD6BC, 0xD6BC }, -{ 0xD6BD, 0xD6BD, 0xD6BD }, -{ 0xD6BE, 0xD6BE, 0xD6BE }, -{ 0xD6BF, 0xD6BF, 0xD6BF }, -{ 0xD6C0, 0xD6C0, 0xD6C0 }, -{ 0xD6C1, 0xD6C1, 0xD6C1 }, -{ 0xD6C2, 0xD6C2, 0xD6C2 }, -{ 0xD6C3, 0xD6C3, 0xD6C3 }, -{ 0xD6C4, 0xD6C4, 0xD6C4 }, -{ 0xD6C5, 0xD6C5, 0xD6C5 }, -{ 0xD6C6, 0xD6C6, 0xD6C6 }, -{ 0xD6C7, 0xD6C7, 0xD6C7 }, -{ 0xD6C8, 0xD6C8, 0xD6C8 }, -{ 0xD6C9, 0xD6C9, 0xD6C9 }, -{ 0xD6CA, 0xD6CA, 0xD6CA }, -{ 0xD6CB, 0xD6CB, 0xD6CB }, -{ 0xD6CC, 0xD6CC, 0xD6CC }, -{ 0xD6CD, 0xD6CD, 0xD6CD }, -{ 0xD6CE, 0xD6CE, 0xD6CE }, -{ 0xD6CF, 0xD6CF, 0xD6CF }, -{ 0xD6D0, 0xD6D0, 0xD6D0 }, -{ 0xD6D1, 0xD6D1, 0xD6D1 }, -{ 0xD6D2, 0xD6D2, 0xD6D2 }, -{ 0xD6D3, 0xD6D3, 0xD6D3 }, -{ 0xD6D4, 0xD6D4, 0xD6D4 }, -{ 0xD6D5, 0xD6D5, 0xD6D5 }, -{ 0xD6D6, 0xD6D6, 0xD6D6 }, -{ 0xD6D7, 0xD6D7, 0xD6D7 }, -{ 0xD6D8, 0xD6D8, 0xD6D8 }, -{ 0xD6D9, 0xD6D9, 0xD6D9 }, -{ 0xD6DA, 0xD6DA, 0xD6DA }, -{ 0xD6DB, 0xD6DB, 0xD6DB }, -{ 0xD6DC, 0xD6DC, 0xD6DC }, -{ 0xD6DD, 0xD6DD, 0xD6DD }, -{ 0xD6DE, 0xD6DE, 0xD6DE }, -{ 0xD6DF, 0xD6DF, 0xD6DF }, -{ 0xD6E0, 0xD6E0, 0xD6E0 }, -{ 0xD6E1, 0xD6E1, 0xD6E1 }, -{ 0xD6E2, 0xD6E2, 0xD6E2 }, -{ 0xD6E3, 0xD6E3, 0xD6E3 }, -{ 0xD6E4, 0xD6E4, 0xD6E4 }, -{ 0xD6E5, 0xD6E5, 0xD6E5 }, -{ 0xD6E6, 0xD6E6, 0xD6E6 }, -{ 0xD6E7, 0xD6E7, 0xD6E7 }, -{ 0xD6E8, 0xD6E8, 0xD6E8 }, -{ 0xD6E9, 0xD6E9, 0xD6E9 }, -{ 0xD6EA, 0xD6EA, 0xD6EA }, -{ 0xD6EB, 0xD6EB, 0xD6EB }, -{ 0xD6EC, 0xD6EC, 0xD6EC }, -{ 0xD6ED, 0xD6ED, 0xD6ED }, -{ 0xD6EE, 0xD6EE, 0xD6EE }, -{ 0xD6EF, 0xD6EF, 0xD6EF }, -{ 0xD6F0, 0xD6F0, 0xD6F0 }, -{ 0xD6F1, 0xD6F1, 0xD6F1 }, -{ 0xD6F2, 0xD6F2, 0xD6F2 }, -{ 0xD6F3, 0xD6F3, 0xD6F3 }, -{ 0xD6F4, 0xD6F4, 0xD6F4 }, -{ 0xD6F5, 0xD6F5, 0xD6F5 }, -{ 0xD6F6, 0xD6F6, 0xD6F6 }, -{ 0xD6F7, 0xD6F7, 0xD6F7 }, -{ 0xD6F8, 0xD6F8, 0xD6F8 }, -{ 0xD6F9, 0xD6F9, 0xD6F9 }, -{ 0xD6FA, 0xD6FA, 0xD6FA }, -{ 0xD6FB, 0xD6FB, 0xD6FB }, -{ 0xD6FC, 0xD6FC, 0xD6FC }, -{ 0xD6FD, 0xD6FD, 0xD6FD }, -{ 0xD6FE, 0xD6FE, 0xD6FE }, -{ 0xD6FF, 0xD6FF, 0xD6FF }, -{ 0xD700, 0xD700, 0xD700 }, -{ 0xD701, 0xD701, 0xD701 }, -{ 0xD702, 0xD702, 0xD702 }, -{ 0xD703, 0xD703, 0xD703 }, -{ 0xD704, 0xD704, 0xD704 }, -{ 0xD705, 0xD705, 0xD705 }, -{ 0xD706, 0xD706, 0xD706 }, -{ 0xD707, 0xD707, 0xD707 }, -{ 0xD708, 0xD708, 0xD708 }, -{ 0xD709, 0xD709, 0xD709 }, -{ 0xD70A, 0xD70A, 0xD70A }, -{ 0xD70B, 0xD70B, 0xD70B }, -{ 0xD70C, 0xD70C, 0xD70C }, -{ 0xD70D, 0xD70D, 0xD70D }, -{ 0xD70E, 0xD70E, 0xD70E }, -{ 0xD70F, 0xD70F, 0xD70F }, -{ 0xD710, 0xD710, 0xD710 }, -{ 0xD711, 0xD711, 0xD711 }, -{ 0xD712, 0xD712, 0xD712 }, -{ 0xD713, 0xD713, 0xD713 }, -{ 0xD714, 0xD714, 0xD714 }, -{ 0xD715, 0xD715, 0xD715 }, -{ 0xD716, 0xD716, 0xD716 }, -{ 0xD717, 0xD717, 0xD717 }, -{ 0xD718, 0xD718, 0xD718 }, -{ 0xD719, 0xD719, 0xD719 }, -{ 0xD71A, 0xD71A, 0xD71A }, -{ 0xD71B, 0xD71B, 0xD71B }, -{ 0xD71C, 0xD71C, 0xD71C }, -{ 0xD71D, 0xD71D, 0xD71D }, -{ 0xD71E, 0xD71E, 0xD71E }, -{ 0xD71F, 0xD71F, 0xD71F }, -{ 0xD720, 0xD720, 0xD720 }, -{ 0xD721, 0xD721, 0xD721 }, -{ 0xD722, 0xD722, 0xD722 }, -{ 0xD723, 0xD723, 0xD723 }, -{ 0xD724, 0xD724, 0xD724 }, -{ 0xD725, 0xD725, 0xD725 }, -{ 0xD726, 0xD726, 0xD726 }, -{ 0xD727, 0xD727, 0xD727 }, -{ 0xD728, 0xD728, 0xD728 }, -{ 0xD729, 0xD729, 0xD729 }, -{ 0xD72A, 0xD72A, 0xD72A }, -{ 0xD72B, 0xD72B, 0xD72B }, -{ 0xD72C, 0xD72C, 0xD72C }, -{ 0xD72D, 0xD72D, 0xD72D }, -{ 0xD72E, 0xD72E, 0xD72E }, -{ 0xD72F, 0xD72F, 0xD72F }, -{ 0xD730, 0xD730, 0xD730 }, -{ 0xD731, 0xD731, 0xD731 }, -{ 0xD732, 0xD732, 0xD732 }, -{ 0xD733, 0xD733, 0xD733 }, -{ 0xD734, 0xD734, 0xD734 }, -{ 0xD735, 0xD735, 0xD735 }, -{ 0xD736, 0xD736, 0xD736 }, -{ 0xD737, 0xD737, 0xD737 }, -{ 0xD738, 0xD738, 0xD738 }, -{ 0xD739, 0xD739, 0xD739 }, -{ 0xD73A, 0xD73A, 0xD73A }, -{ 0xD73B, 0xD73B, 0xD73B }, -{ 0xD73C, 0xD73C, 0xD73C }, -{ 0xD73D, 0xD73D, 0xD73D }, -{ 0xD73E, 0xD73E, 0xD73E }, -{ 0xD73F, 0xD73F, 0xD73F }, -{ 0xD740, 0xD740, 0xD740 }, -{ 0xD741, 0xD741, 0xD741 }, -{ 0xD742, 0xD742, 0xD742 }, -{ 0xD743, 0xD743, 0xD743 }, -{ 0xD744, 0xD744, 0xD744 }, -{ 0xD745, 0xD745, 0xD745 }, -{ 0xD746, 0xD746, 0xD746 }, -{ 0xD747, 0xD747, 0xD747 }, -{ 0xD748, 0xD748, 0xD748 }, -{ 0xD749, 0xD749, 0xD749 }, -{ 0xD74A, 0xD74A, 0xD74A }, -{ 0xD74B, 0xD74B, 0xD74B }, -{ 0xD74C, 0xD74C, 0xD74C }, -{ 0xD74D, 0xD74D, 0xD74D }, -{ 0xD74E, 0xD74E, 0xD74E }, -{ 0xD74F, 0xD74F, 0xD74F }, -{ 0xD750, 0xD750, 0xD750 }, -{ 0xD751, 0xD751, 0xD751 }, -{ 0xD752, 0xD752, 0xD752 }, -{ 0xD753, 0xD753, 0xD753 }, -{ 0xD754, 0xD754, 0xD754 }, -{ 0xD755, 0xD755, 0xD755 }, -{ 0xD756, 0xD756, 0xD756 }, -{ 0xD757, 0xD757, 0xD757 }, -{ 0xD758, 0xD758, 0xD758 }, -{ 0xD759, 0xD759, 0xD759 }, -{ 0xD75A, 0xD75A, 0xD75A }, -{ 0xD75B, 0xD75B, 0xD75B }, -{ 0xD75C, 0xD75C, 0xD75C }, -{ 0xD75D, 0xD75D, 0xD75D }, -{ 0xD75E, 0xD75E, 0xD75E }, -{ 0xD75F, 0xD75F, 0xD75F }, -{ 0xD760, 0xD760, 0xD760 }, -{ 0xD761, 0xD761, 0xD761 }, -{ 0xD762, 0xD762, 0xD762 }, -{ 0xD763, 0xD763, 0xD763 }, -{ 0xD764, 0xD764, 0xD764 }, -{ 0xD765, 0xD765, 0xD765 }, -{ 0xD766, 0xD766, 0xD766 }, -{ 0xD767, 0xD767, 0xD767 }, -{ 0xD768, 0xD768, 0xD768 }, -{ 0xD769, 0xD769, 0xD769 }, -{ 0xD76A, 0xD76A, 0xD76A }, -{ 0xD76B, 0xD76B, 0xD76B }, -{ 0xD76C, 0xD76C, 0xD76C }, -{ 0xD76D, 0xD76D, 0xD76D }, -{ 0xD76E, 0xD76E, 0xD76E }, -{ 0xD76F, 0xD76F, 0xD76F }, -{ 0xD770, 0xD770, 0xD770 }, -{ 0xD771, 0xD771, 0xD771 }, -{ 0xD772, 0xD772, 0xD772 }, -{ 0xD773, 0xD773, 0xD773 }, -{ 0xD774, 0xD774, 0xD774 }, -{ 0xD775, 0xD775, 0xD775 }, -{ 0xD776, 0xD776, 0xD776 }, -{ 0xD777, 0xD777, 0xD777 }, -{ 0xD778, 0xD778, 0xD778 }, -{ 0xD779, 0xD779, 0xD779 }, -{ 0xD77A, 0xD77A, 0xD77A }, -{ 0xD77B, 0xD77B, 0xD77B }, -{ 0xD77C, 0xD77C, 0xD77C }, -{ 0xD77D, 0xD77D, 0xD77D }, -{ 0xD77E, 0xD77E, 0xD77E }, -{ 0xD77F, 0xD77F, 0xD77F }, -{ 0xD780, 0xD780, 0xD780 }, -{ 0xD781, 0xD781, 0xD781 }, -{ 0xD782, 0xD782, 0xD782 }, -{ 0xD783, 0xD783, 0xD783 }, -{ 0xD784, 0xD784, 0xD784 }, -{ 0xD785, 0xD785, 0xD785 }, -{ 0xD786, 0xD786, 0xD786 }, -{ 0xD787, 0xD787, 0xD787 }, -{ 0xD788, 0xD788, 0xD788 }, -{ 0xD789, 0xD789, 0xD789 }, -{ 0xD78A, 0xD78A, 0xD78A }, -{ 0xD78B, 0xD78B, 0xD78B }, -{ 0xD78C, 0xD78C, 0xD78C }, -{ 0xD78D, 0xD78D, 0xD78D }, -{ 0xD78E, 0xD78E, 0xD78E }, -{ 0xD78F, 0xD78F, 0xD78F }, -{ 0xD790, 0xD790, 0xD790 }, -{ 0xD791, 0xD791, 0xD791 }, -{ 0xD792, 0xD792, 0xD792 }, -{ 0xD793, 0xD793, 0xD793 }, -{ 0xD794, 0xD794, 0xD794 }, -{ 0xD795, 0xD795, 0xD795 }, -{ 0xD796, 0xD796, 0xD796 }, -{ 0xD797, 0xD797, 0xD797 }, -{ 0xD798, 0xD798, 0xD798 }, -{ 0xD799, 0xD799, 0xD799 }, -{ 0xD79A, 0xD79A, 0xD79A }, -{ 0xD79B, 0xD79B, 0xD79B }, -{ 0xD79C, 0xD79C, 0xD79C }, -{ 0xD79D, 0xD79D, 0xD79D }, -{ 0xD79E, 0xD79E, 0xD79E }, -{ 0xD79F, 0xD79F, 0xD79F }, -{ 0xD7A0, 0xD7A0, 0xD7A0 }, -{ 0xD7A1, 0xD7A1, 0xD7A1 }, -{ 0xD7A2, 0xD7A2, 0xD7A2 }, -{ 0xD7A3, 0xD7A3, 0xD7A3 }, -{ 0xF900, 0xF900, 0xF900 }, -{ 0xF901, 0xF901, 0xF901 }, -{ 0xF902, 0xF902, 0xF902 }, -{ 0xF903, 0xF903, 0xF903 }, -{ 0xF904, 0xF904, 0xF904 }, -{ 0xF905, 0xF905, 0xF905 }, -{ 0xF906, 0xF906, 0xF906 }, -{ 0xF907, 0xF907, 0xF907 }, -{ 0xF908, 0xF908, 0xF908 }, -{ 0xF909, 0xF909, 0xF909 }, -{ 0xF90A, 0xF90A, 0xF90A }, -{ 0xF90B, 0xF90B, 0xF90B }, -{ 0xF90C, 0xF90C, 0xF90C }, -{ 0xF90D, 0xF90D, 0xF90D }, -{ 0xF90E, 0xF90E, 0xF90E }, -{ 0xF90F, 0xF90F, 0xF90F }, -{ 0xF910, 0xF910, 0xF910 }, -{ 0xF911, 0xF911, 0xF911 }, -{ 0xF912, 0xF912, 0xF912 }, -{ 0xF913, 0xF913, 0xF913 }, -{ 0xF914, 0xF914, 0xF914 }, -{ 0xF915, 0xF915, 0xF915 }, -{ 0xF916, 0xF916, 0xF916 }, -{ 0xF917, 0xF917, 0xF917 }, -{ 0xF918, 0xF918, 0xF918 }, -{ 0xF919, 0xF919, 0xF919 }, -{ 0xF91A, 0xF91A, 0xF91A }, -{ 0xF91B, 0xF91B, 0xF91B }, -{ 0xF91C, 0xF91C, 0xF91C }, -{ 0xF91D, 0xF91D, 0xF91D }, -{ 0xF91E, 0xF91E, 0xF91E }, -{ 0xF91F, 0xF91F, 0xF91F }, -{ 0xF920, 0xF920, 0xF920 }, -{ 0xF921, 0xF921, 0xF921 }, -{ 0xF922, 0xF922, 0xF922 }, -{ 0xF923, 0xF923, 0xF923 }, -{ 0xF924, 0xF924, 0xF924 }, -{ 0xF925, 0xF925, 0xF925 }, -{ 0xF926, 0xF926, 0xF926 }, -{ 0xF927, 0xF927, 0xF927 }, -{ 0xF928, 0xF928, 0xF928 }, -{ 0xF929, 0xF929, 0xF929 }, -{ 0xF92A, 0xF92A, 0xF92A }, -{ 0xF92B, 0xF92B, 0xF92B }, -{ 0xF92C, 0xF92C, 0xF92C }, -{ 0xF92D, 0xF92D, 0xF92D }, -{ 0xF92E, 0xF92E, 0xF92E }, -{ 0xF92F, 0xF92F, 0xF92F }, -{ 0xF930, 0xF930, 0xF930 }, -{ 0xF931, 0xF931, 0xF931 }, -{ 0xF932, 0xF932, 0xF932 }, -{ 0xF933, 0xF933, 0xF933 }, -{ 0xF934, 0xF934, 0xF934 }, -{ 0xF935, 0xF935, 0xF935 }, -{ 0xF936, 0xF936, 0xF936 }, -{ 0xF937, 0xF937, 0xF937 }, -{ 0xF938, 0xF938, 0xF938 }, -{ 0xF939, 0xF939, 0xF939 }, -{ 0xF93A, 0xF93A, 0xF93A }, -{ 0xF93B, 0xF93B, 0xF93B }, -{ 0xF93C, 0xF93C, 0xF93C }, -{ 0xF93D, 0xF93D, 0xF93D }, -{ 0xF93E, 0xF93E, 0xF93E }, -{ 0xF93F, 0xF93F, 0xF93F }, -{ 0xF940, 0xF940, 0xF940 }, -{ 0xF941, 0xF941, 0xF941 }, -{ 0xF942, 0xF942, 0xF942 }, -{ 0xF943, 0xF943, 0xF943 }, -{ 0xF944, 0xF944, 0xF944 }, -{ 0xF945, 0xF945, 0xF945 }, -{ 0xF946, 0xF946, 0xF946 }, -{ 0xF947, 0xF947, 0xF947 }, -{ 0xF948, 0xF948, 0xF948 }, -{ 0xF949, 0xF949, 0xF949 }, -{ 0xF94A, 0xF94A, 0xF94A }, -{ 0xF94B, 0xF94B, 0xF94B }, -{ 0xF94C, 0xF94C, 0xF94C }, -{ 0xF94D, 0xF94D, 0xF94D }, -{ 0xF94E, 0xF94E, 0xF94E }, -{ 0xF94F, 0xF94F, 0xF94F }, -{ 0xF950, 0xF950, 0xF950 }, -{ 0xF951, 0xF951, 0xF951 }, -{ 0xF952, 0xF952, 0xF952 }, -{ 0xF953, 0xF953, 0xF953 }, -{ 0xF954, 0xF954, 0xF954 }, -{ 0xF955, 0xF955, 0xF955 }, -{ 0xF956, 0xF956, 0xF956 }, -{ 0xF957, 0xF957, 0xF957 }, -{ 0xF958, 0xF958, 0xF958 }, -{ 0xF959, 0xF959, 0xF959 }, -{ 0xF95A, 0xF95A, 0xF95A }, -{ 0xF95B, 0xF95B, 0xF95B }, -{ 0xF95C, 0xF95C, 0xF95C }, -{ 0xF95D, 0xF95D, 0xF95D }, -{ 0xF95E, 0xF95E, 0xF95E }, -{ 0xF95F, 0xF95F, 0xF95F }, -{ 0xF960, 0xF960, 0xF960 }, -{ 0xF961, 0xF961, 0xF961 }, -{ 0xF962, 0xF962, 0xF962 }, -{ 0xF963, 0xF963, 0xF963 }, -{ 0xF964, 0xF964, 0xF964 }, -{ 0xF965, 0xF965, 0xF965 }, -{ 0xF966, 0xF966, 0xF966 }, -{ 0xF967, 0xF967, 0xF967 }, -{ 0xF968, 0xF968, 0xF968 }, -{ 0xF969, 0xF969, 0xF969 }, -{ 0xF96A, 0xF96A, 0xF96A }, -{ 0xF96B, 0xF96B, 0xF96B }, -{ 0xF96C, 0xF96C, 0xF96C }, -{ 0xF96D, 0xF96D, 0xF96D }, -{ 0xF96E, 0xF96E, 0xF96E }, -{ 0xF96F, 0xF96F, 0xF96F }, -{ 0xF970, 0xF970, 0xF970 }, -{ 0xF971, 0xF971, 0xF971 }, -{ 0xF972, 0xF972, 0xF972 }, -{ 0xF973, 0xF973, 0xF973 }, -{ 0xF974, 0xF974, 0xF974 }, -{ 0xF975, 0xF975, 0xF975 }, -{ 0xF976, 0xF976, 0xF976 }, -{ 0xF977, 0xF977, 0xF977 }, -{ 0xF978, 0xF978, 0xF978 }, -{ 0xF979, 0xF979, 0xF979 }, -{ 0xF97A, 0xF97A, 0xF97A }, -{ 0xF97B, 0xF97B, 0xF97B }, -{ 0xF97C, 0xF97C, 0xF97C }, -{ 0xF97D, 0xF97D, 0xF97D }, -{ 0xF97E, 0xF97E, 0xF97E }, -{ 0xF97F, 0xF97F, 0xF97F }, -{ 0xF980, 0xF980, 0xF980 }, -{ 0xF981, 0xF981, 0xF981 }, -{ 0xF982, 0xF982, 0xF982 }, -{ 0xF983, 0xF983, 0xF983 }, -{ 0xF984, 0xF984, 0xF984 }, -{ 0xF985, 0xF985, 0xF985 }, -{ 0xF986, 0xF986, 0xF986 }, -{ 0xF987, 0xF987, 0xF987 }, -{ 0xF988, 0xF988, 0xF988 }, -{ 0xF989, 0xF989, 0xF989 }, -{ 0xF98A, 0xF98A, 0xF98A }, -{ 0xF98B, 0xF98B, 0xF98B }, -{ 0xF98C, 0xF98C, 0xF98C }, -{ 0xF98D, 0xF98D, 0xF98D }, -{ 0xF98E, 0xF98E, 0xF98E }, -{ 0xF98F, 0xF98F, 0xF98F }, -{ 0xF990, 0xF990, 0xF990 }, -{ 0xF991, 0xF991, 0xF991 }, -{ 0xF992, 0xF992, 0xF992 }, -{ 0xF993, 0xF993, 0xF993 }, -{ 0xF994, 0xF994, 0xF994 }, -{ 0xF995, 0xF995, 0xF995 }, -{ 0xF996, 0xF996, 0xF996 }, -{ 0xF997, 0xF997, 0xF997 }, -{ 0xF998, 0xF998, 0xF998 }, -{ 0xF999, 0xF999, 0xF999 }, -{ 0xF99A, 0xF99A, 0xF99A }, -{ 0xF99B, 0xF99B, 0xF99B }, -{ 0xF99C, 0xF99C, 0xF99C }, -{ 0xF99D, 0xF99D, 0xF99D }, -{ 0xF99E, 0xF99E, 0xF99E }, -{ 0xF99F, 0xF99F, 0xF99F }, -{ 0xF9A0, 0xF9A0, 0xF9A0 }, -{ 0xF9A1, 0xF9A1, 0xF9A1 }, -{ 0xF9A2, 0xF9A2, 0xF9A2 }, -{ 0xF9A3, 0xF9A3, 0xF9A3 }, -{ 0xF9A4, 0xF9A4, 0xF9A4 }, -{ 0xF9A5, 0xF9A5, 0xF9A5 }, -{ 0xF9A6, 0xF9A6, 0xF9A6 }, -{ 0xF9A7, 0xF9A7, 0xF9A7 }, -{ 0xF9A8, 0xF9A8, 0xF9A8 }, -{ 0xF9A9, 0xF9A9, 0xF9A9 }, -{ 0xF9AA, 0xF9AA, 0xF9AA }, -{ 0xF9AB, 0xF9AB, 0xF9AB }, -{ 0xF9AC, 0xF9AC, 0xF9AC }, -{ 0xF9AD, 0xF9AD, 0xF9AD }, -{ 0xF9AE, 0xF9AE, 0xF9AE }, -{ 0xF9AF, 0xF9AF, 0xF9AF }, -{ 0xF9B0, 0xF9B0, 0xF9B0 }, -{ 0xF9B1, 0xF9B1, 0xF9B1 }, -{ 0xF9B2, 0xF9B2, 0xF9B2 }, -{ 0xF9B3, 0xF9B3, 0xF9B3 }, -{ 0xF9B4, 0xF9B4, 0xF9B4 }, -{ 0xF9B5, 0xF9B5, 0xF9B5 }, -{ 0xF9B6, 0xF9B6, 0xF9B6 }, -{ 0xF9B7, 0xF9B7, 0xF9B7 }, -{ 0xF9B8, 0xF9B8, 0xF9B8 }, -{ 0xF9B9, 0xF9B9, 0xF9B9 }, -{ 0xF9BA, 0xF9BA, 0xF9BA }, -{ 0xF9BB, 0xF9BB, 0xF9BB }, -{ 0xF9BC, 0xF9BC, 0xF9BC }, -{ 0xF9BD, 0xF9BD, 0xF9BD }, -{ 0xF9BE, 0xF9BE, 0xF9BE }, -{ 0xF9BF, 0xF9BF, 0xF9BF }, -{ 0xF9C0, 0xF9C0, 0xF9C0 }, -{ 0xF9C1, 0xF9C1, 0xF9C1 }, -{ 0xF9C2, 0xF9C2, 0xF9C2 }, -{ 0xF9C3, 0xF9C3, 0xF9C3 }, -{ 0xF9C4, 0xF9C4, 0xF9C4 }, -{ 0xF9C5, 0xF9C5, 0xF9C5 }, -{ 0xF9C6, 0xF9C6, 0xF9C6 }, -{ 0xF9C7, 0xF9C7, 0xF9C7 }, -{ 0xF9C8, 0xF9C8, 0xF9C8 }, -{ 0xF9C9, 0xF9C9, 0xF9C9 }, -{ 0xF9CA, 0xF9CA, 0xF9CA }, -{ 0xF9CB, 0xF9CB, 0xF9CB }, -{ 0xF9CC, 0xF9CC, 0xF9CC }, -{ 0xF9CD, 0xF9CD, 0xF9CD }, -{ 0xF9CE, 0xF9CE, 0xF9CE }, -{ 0xF9CF, 0xF9CF, 0xF9CF }, -{ 0xF9D0, 0xF9D0, 0xF9D0 }, -{ 0xF9D1, 0xF9D1, 0xF9D1 }, -{ 0xF9D2, 0xF9D2, 0xF9D2 }, -{ 0xF9D3, 0xF9D3, 0xF9D3 }, -{ 0xF9D4, 0xF9D4, 0xF9D4 }, -{ 0xF9D5, 0xF9D5, 0xF9D5 }, -{ 0xF9D6, 0xF9D6, 0xF9D6 }, -{ 0xF9D7, 0xF9D7, 0xF9D7 }, -{ 0xF9D8, 0xF9D8, 0xF9D8 }, -{ 0xF9D9, 0xF9D9, 0xF9D9 }, -{ 0xF9DA, 0xF9DA, 0xF9DA }, -{ 0xF9DB, 0xF9DB, 0xF9DB }, -{ 0xF9DC, 0xF9DC, 0xF9DC }, -{ 0xF9DD, 0xF9DD, 0xF9DD }, -{ 0xF9DE, 0xF9DE, 0xF9DE }, -{ 0xF9DF, 0xF9DF, 0xF9DF }, -{ 0xF9E0, 0xF9E0, 0xF9E0 }, -{ 0xF9E1, 0xF9E1, 0xF9E1 }, -{ 0xF9E2, 0xF9E2, 0xF9E2 }, -{ 0xF9E3, 0xF9E3, 0xF9E3 }, -{ 0xF9E4, 0xF9E4, 0xF9E4 }, -{ 0xF9E5, 0xF9E5, 0xF9E5 }, -{ 0xF9E6, 0xF9E6, 0xF9E6 }, -{ 0xF9E7, 0xF9E7, 0xF9E7 }, -{ 0xF9E8, 0xF9E8, 0xF9E8 }, -{ 0xF9E9, 0xF9E9, 0xF9E9 }, -{ 0xF9EA, 0xF9EA, 0xF9EA }, -{ 0xF9EB, 0xF9EB, 0xF9EB }, -{ 0xF9EC, 0xF9EC, 0xF9EC }, -{ 0xF9ED, 0xF9ED, 0xF9ED }, -{ 0xF9EE, 0xF9EE, 0xF9EE }, -{ 0xF9EF, 0xF9EF, 0xF9EF }, -{ 0xF9F0, 0xF9F0, 0xF9F0 }, -{ 0xF9F1, 0xF9F1, 0xF9F1 }, -{ 0xF9F2, 0xF9F2, 0xF9F2 }, -{ 0xF9F3, 0xF9F3, 0xF9F3 }, -{ 0xF9F4, 0xF9F4, 0xF9F4 }, -{ 0xF9F5, 0xF9F5, 0xF9F5 }, -{ 0xF9F6, 0xF9F6, 0xF9F6 }, -{ 0xF9F7, 0xF9F7, 0xF9F7 }, -{ 0xF9F8, 0xF9F8, 0xF9F8 }, -{ 0xF9F9, 0xF9F9, 0xF9F9 }, -{ 0xF9FA, 0xF9FA, 0xF9FA }, -{ 0xF9FB, 0xF9FB, 0xF9FB }, -{ 0xF9FC, 0xF9FC, 0xF9FC }, -{ 0xF9FD, 0xF9FD, 0xF9FD }, -{ 0xF9FE, 0xF9FE, 0xF9FE }, -{ 0xF9FF, 0xF9FF, 0xF9FF }, -{ 0xFA00, 0xFA00, 0xFA00 }, -{ 0xFA01, 0xFA01, 0xFA01 }, -{ 0xFA02, 0xFA02, 0xFA02 }, -{ 0xFA03, 0xFA03, 0xFA03 }, -{ 0xFA04, 0xFA04, 0xFA04 }, -{ 0xFA05, 0xFA05, 0xFA05 }, -{ 0xFA06, 0xFA06, 0xFA06 }, -{ 0xFA07, 0xFA07, 0xFA07 }, -{ 0xFA08, 0xFA08, 0xFA08 }, -{ 0xFA09, 0xFA09, 0xFA09 }, -{ 0xFA0A, 0xFA0A, 0xFA0A }, -{ 0xFA0B, 0xFA0B, 0xFA0B }, -{ 0xFA0C, 0xFA0C, 0xFA0C }, -{ 0xFA0D, 0xFA0D, 0xFA0D }, -{ 0xFA0E, 0xFA0E, 0xFA0E }, -{ 0xFA0F, 0xFA0F, 0xFA0F }, -{ 0xFA10, 0xFA10, 0xFA10 }, -{ 0xFA11, 0xFA11, 0xFA11 }, -{ 0xFA12, 0xFA12, 0xFA12 }, -{ 0xFA13, 0xFA13, 0xFA13 }, -{ 0xFA14, 0xFA14, 0xFA14 }, -{ 0xFA15, 0xFA15, 0xFA15 }, -{ 0xFA16, 0xFA16, 0xFA16 }, -{ 0xFA17, 0xFA17, 0xFA17 }, -{ 0xFA18, 0xFA18, 0xFA18 }, -{ 0xFA19, 0xFA19, 0xFA19 }, -{ 0xFA1A, 0xFA1A, 0xFA1A }, -{ 0xFA1B, 0xFA1B, 0xFA1B }, -{ 0xFA1C, 0xFA1C, 0xFA1C }, -{ 0xFA1D, 0xFA1D, 0xFA1D }, -{ 0xFA1E, 0xFA1E, 0xFA1E }, -{ 0xFA1F, 0xFA1F, 0xFA1F }, -{ 0xFA20, 0xFA20, 0xFA20 }, -{ 0xFA21, 0xFA21, 0xFA21 }, -{ 0xFA22, 0xFA22, 0xFA22 }, -{ 0xFA23, 0xFA23, 0xFA23 }, -{ 0xFA24, 0xFA24, 0xFA24 }, -{ 0xFA25, 0xFA25, 0xFA25 }, -{ 0xFA26, 0xFA26, 0xFA26 }, -{ 0xFA27, 0xFA27, 0xFA27 }, -{ 0xFA28, 0xFA28, 0xFA28 }, -{ 0xFA29, 0xFA29, 0xFA29 }, -{ 0xFA2A, 0xFA2A, 0xFA2A }, -{ 0xFA2B, 0xFA2B, 0xFA2B }, -{ 0xFA2C, 0xFA2C, 0xFA2C }, -{ 0xFA2D, 0xFA2D, 0xFA2D }, -{ 0xFA30, 0xFA30, 0xFA30 }, -{ 0xFA31, 0xFA31, 0xFA31 }, -{ 0xFA32, 0xFA32, 0xFA32 }, -{ 0xFA33, 0xFA33, 0xFA33 }, -{ 0xFA34, 0xFA34, 0xFA34 }, -{ 0xFA35, 0xFA35, 0xFA35 }, -{ 0xFA36, 0xFA36, 0xFA36 }, -{ 0xFA37, 0xFA37, 0xFA37 }, -{ 0xFA38, 0xFA38, 0xFA38 }, -{ 0xFA39, 0xFA39, 0xFA39 }, -{ 0xFA3A, 0xFA3A, 0xFA3A }, -{ 0xFA3B, 0xFA3B, 0xFA3B }, -{ 0xFA3C, 0xFA3C, 0xFA3C }, -{ 0xFA3D, 0xFA3D, 0xFA3D }, -{ 0xFA3E, 0xFA3E, 0xFA3E }, -{ 0xFA3F, 0xFA3F, 0xFA3F }, -{ 0xFA40, 0xFA40, 0xFA40 }, -{ 0xFA41, 0xFA41, 0xFA41 }, -{ 0xFA42, 0xFA42, 0xFA42 }, -{ 0xFA43, 0xFA43, 0xFA43 }, -{ 0xFA44, 0xFA44, 0xFA44 }, -{ 0xFA45, 0xFA45, 0xFA45 }, -{ 0xFA46, 0xFA46, 0xFA46 }, -{ 0xFA47, 0xFA47, 0xFA47 }, -{ 0xFA48, 0xFA48, 0xFA48 }, -{ 0xFA49, 0xFA49, 0xFA49 }, -{ 0xFA4A, 0xFA4A, 0xFA4A }, -{ 0xFA4B, 0xFA4B, 0xFA4B }, -{ 0xFA4C, 0xFA4C, 0xFA4C }, -{ 0xFA4D, 0xFA4D, 0xFA4D }, -{ 0xFA4E, 0xFA4E, 0xFA4E }, -{ 0xFA4F, 0xFA4F, 0xFA4F }, -{ 0xFA50, 0xFA50, 0xFA50 }, -{ 0xFA51, 0xFA51, 0xFA51 }, -{ 0xFA52, 0xFA52, 0xFA52 }, -{ 0xFA53, 0xFA53, 0xFA53 }, -{ 0xFA54, 0xFA54, 0xFA54 }, -{ 0xFA55, 0xFA55, 0xFA55 }, -{ 0xFA56, 0xFA56, 0xFA56 }, -{ 0xFA57, 0xFA57, 0xFA57 }, -{ 0xFA58, 0xFA58, 0xFA58 }, -{ 0xFA59, 0xFA59, 0xFA59 }, -{ 0xFA5A, 0xFA5A, 0xFA5A }, -{ 0xFA5B, 0xFA5B, 0xFA5B }, -{ 0xFA5C, 0xFA5C, 0xFA5C }, -{ 0xFA5D, 0xFA5D, 0xFA5D }, -{ 0xFA5E, 0xFA5E, 0xFA5E }, -{ 0xFA5F, 0xFA5F, 0xFA5F }, -{ 0xFA60, 0xFA60, 0xFA60 }, -{ 0xFA61, 0xFA61, 0xFA61 }, -{ 0xFA62, 0xFA62, 0xFA62 }, -{ 0xFA63, 0xFA63, 0xFA63 }, -{ 0xFA64, 0xFA64, 0xFA64 }, -{ 0xFA65, 0xFA65, 0xFA65 }, -{ 0xFA66, 0xFA66, 0xFA66 }, -{ 0xFA67, 0xFA67, 0xFA67 }, -{ 0xFA68, 0xFA68, 0xFA68 }, -{ 0xFA69, 0xFA69, 0xFA69 }, -{ 0xFA6A, 0xFA6A, 0xFA6A }, -{ 0xFA70, 0xFA70, 0xFA70 }, -{ 0xFA71, 0xFA71, 0xFA71 }, -{ 0xFA72, 0xFA72, 0xFA72 }, -{ 0xFA73, 0xFA73, 0xFA73 }, -{ 0xFA74, 0xFA74, 0xFA74 }, -{ 0xFA75, 0xFA75, 0xFA75 }, -{ 0xFA76, 0xFA76, 0xFA76 }, -{ 0xFA77, 0xFA77, 0xFA77 }, -{ 0xFA78, 0xFA78, 0xFA78 }, -{ 0xFA79, 0xFA79, 0xFA79 }, -{ 0xFA7A, 0xFA7A, 0xFA7A }, -{ 0xFA7B, 0xFA7B, 0xFA7B }, -{ 0xFA7C, 0xFA7C, 0xFA7C }, -{ 0xFA7D, 0xFA7D, 0xFA7D }, -{ 0xFA7E, 0xFA7E, 0xFA7E }, -{ 0xFA7F, 0xFA7F, 0xFA7F }, -{ 0xFA80, 0xFA80, 0xFA80 }, -{ 0xFA81, 0xFA81, 0xFA81 }, -{ 0xFA82, 0xFA82, 0xFA82 }, -{ 0xFA83, 0xFA83, 0xFA83 }, -{ 0xFA84, 0xFA84, 0xFA84 }, -{ 0xFA85, 0xFA85, 0xFA85 }, -{ 0xFA86, 0xFA86, 0xFA86 }, -{ 0xFA87, 0xFA87, 0xFA87 }, -{ 0xFA88, 0xFA88, 0xFA88 }, -{ 0xFA89, 0xFA89, 0xFA89 }, -{ 0xFA8A, 0xFA8A, 0xFA8A }, -{ 0xFA8B, 0xFA8B, 0xFA8B }, -{ 0xFA8C, 0xFA8C, 0xFA8C }, -{ 0xFA8D, 0xFA8D, 0xFA8D }, -{ 0xFA8E, 0xFA8E, 0xFA8E }, -{ 0xFA8F, 0xFA8F, 0xFA8F }, -{ 0xFA90, 0xFA90, 0xFA90 }, -{ 0xFA91, 0xFA91, 0xFA91 }, -{ 0xFA92, 0xFA92, 0xFA92 }, -{ 0xFA93, 0xFA93, 0xFA93 }, -{ 0xFA94, 0xFA94, 0xFA94 }, -{ 0xFA95, 0xFA95, 0xFA95 }, -{ 0xFA96, 0xFA96, 0xFA96 }, -{ 0xFA97, 0xFA97, 0xFA97 }, -{ 0xFA98, 0xFA98, 0xFA98 }, -{ 0xFA99, 0xFA99, 0xFA99 }, -{ 0xFA9A, 0xFA9A, 0xFA9A }, -{ 0xFA9B, 0xFA9B, 0xFA9B }, -{ 0xFA9C, 0xFA9C, 0xFA9C }, -{ 0xFA9D, 0xFA9D, 0xFA9D }, -{ 0xFA9E, 0xFA9E, 0xFA9E }, -{ 0xFA9F, 0xFA9F, 0xFA9F }, -{ 0xFAA0, 0xFAA0, 0xFAA0 }, -{ 0xFAA1, 0xFAA1, 0xFAA1 }, -{ 0xFAA2, 0xFAA2, 0xFAA2 }, -{ 0xFAA3, 0xFAA3, 0xFAA3 }, -{ 0xFAA4, 0xFAA4, 0xFAA4 }, -{ 0xFAA5, 0xFAA5, 0xFAA5 }, -{ 0xFAA6, 0xFAA6, 0xFAA6 }, -{ 0xFAA7, 0xFAA7, 0xFAA7 }, -{ 0xFAA8, 0xFAA8, 0xFAA8 }, -{ 0xFAA9, 0xFAA9, 0xFAA9 }, -{ 0xFAAA, 0xFAAA, 0xFAAA }, -{ 0xFAAB, 0xFAAB, 0xFAAB }, -{ 0xFAAC, 0xFAAC, 0xFAAC }, -{ 0xFAAD, 0xFAAD, 0xFAAD }, -{ 0xFAAE, 0xFAAE, 0xFAAE }, -{ 0xFAAF, 0xFAAF, 0xFAAF }, -{ 0xFAB0, 0xFAB0, 0xFAB0 }, -{ 0xFAB1, 0xFAB1, 0xFAB1 }, -{ 0xFAB2, 0xFAB2, 0xFAB2 }, -{ 0xFAB3, 0xFAB3, 0xFAB3 }, -{ 0xFAB4, 0xFAB4, 0xFAB4 }, -{ 0xFAB5, 0xFAB5, 0xFAB5 }, -{ 0xFAB6, 0xFAB6, 0xFAB6 }, -{ 0xFAB7, 0xFAB7, 0xFAB7 }, -{ 0xFAB8, 0xFAB8, 0xFAB8 }, -{ 0xFAB9, 0xFAB9, 0xFAB9 }, -{ 0xFABA, 0xFABA, 0xFABA }, -{ 0xFABB, 0xFABB, 0xFABB }, -{ 0xFABC, 0xFABC, 0xFABC }, -{ 0xFABD, 0xFABD, 0xFABD }, -{ 0xFABE, 0xFABE, 0xFABE }, -{ 0xFABF, 0xFABF, 0xFABF }, -{ 0xFAC0, 0xFAC0, 0xFAC0 }, -{ 0xFAC1, 0xFAC1, 0xFAC1 }, -{ 0xFAC2, 0xFAC2, 0xFAC2 }, -{ 0xFAC3, 0xFAC3, 0xFAC3 }, -{ 0xFAC4, 0xFAC4, 0xFAC4 }, -{ 0xFAC5, 0xFAC5, 0xFAC5 }, -{ 0xFAC6, 0xFAC6, 0xFAC6 }, -{ 0xFAC7, 0xFAC7, 0xFAC7 }, -{ 0xFAC8, 0xFAC8, 0xFAC8 }, -{ 0xFAC9, 0xFAC9, 0xFAC9 }, -{ 0xFACA, 0xFACA, 0xFACA }, -{ 0xFACB, 0xFACB, 0xFACB }, -{ 0xFACC, 0xFACC, 0xFACC }, -{ 0xFACD, 0xFACD, 0xFACD }, -{ 0xFACE, 0xFACE, 0xFACE }, -{ 0xFACF, 0xFACF, 0xFACF }, -{ 0xFAD0, 0xFAD0, 0xFAD0 }, -{ 0xFAD1, 0xFAD1, 0xFAD1 }, -{ 0xFAD2, 0xFAD2, 0xFAD2 }, -{ 0xFAD3, 0xFAD3, 0xFAD3 }, -{ 0xFAD4, 0xFAD4, 0xFAD4 }, -{ 0xFAD5, 0xFAD5, 0xFAD5 }, -{ 0xFAD6, 0xFAD6, 0xFAD6 }, -{ 0xFAD7, 0xFAD7, 0xFAD7 }, -{ 0xFAD8, 0xFAD8, 0xFAD8 }, -{ 0xFAD9, 0xFAD9, 0xFAD9 }, -{ 0xFB00, 0xFB00, 0xFB00 }, -{ 0xFB01, 0xFB01, 0xFB01 }, -{ 0xFB02, 0xFB02, 0xFB02 }, -{ 0xFB03, 0xFB03, 0xFB03 }, -{ 0xFB04, 0xFB04, 0xFB04 }, -{ 0xFB05, 0xFB05, 0xFB05 }, -{ 0xFB06, 0xFB06, 0xFB06 }, -{ 0xFB13, 0xFB13, 0xFB13 }, -{ 0xFB14, 0xFB14, 0xFB14 }, -{ 0xFB15, 0xFB15, 0xFB15 }, -{ 0xFB16, 0xFB16, 0xFB16 }, -{ 0xFB17, 0xFB17, 0xFB17 }, -{ 0xFB1D, 0xFB1D, 0xFB1D }, -{ 0xFB1E, 0xFB1E, 0xFB1E }, -{ 0xFB1F, 0xFB1F, 0xFB1F }, -{ 0xFB20, 0xFB20, 0xFB20 }, -{ 0xFB21, 0xFB21, 0xFB21 }, -{ 0xFB22, 0xFB22, 0xFB22 }, -{ 0xFB23, 0xFB23, 0xFB23 }, -{ 0xFB24, 0xFB24, 0xFB24 }, -{ 0xFB25, 0xFB25, 0xFB25 }, -{ 0xFB26, 0xFB26, 0xFB26 }, -{ 0xFB27, 0xFB27, 0xFB27 }, -{ 0xFB28, 0xFB28, 0xFB28 }, -{ 0xFB2A, 0xFB2A, 0xFB2A }, -{ 0xFB2B, 0xFB2B, 0xFB2B }, -{ 0xFB2C, 0xFB2C, 0xFB2C }, -{ 0xFB2D, 0xFB2D, 0xFB2D }, -{ 0xFB2E, 0xFB2E, 0xFB2E }, -{ 0xFB2F, 0xFB2F, 0xFB2F }, -{ 0xFB30, 0xFB30, 0xFB30 }, -{ 0xFB31, 0xFB31, 0xFB31 }, -{ 0xFB32, 0xFB32, 0xFB32 }, -{ 0xFB33, 0xFB33, 0xFB33 }, -{ 0xFB34, 0xFB34, 0xFB34 }, -{ 0xFB35, 0xFB35, 0xFB35 }, -{ 0xFB36, 0xFB36, 0xFB36 }, -{ 0xFB38, 0xFB38, 0xFB38 }, -{ 0xFB39, 0xFB39, 0xFB39 }, -{ 0xFB3A, 0xFB3A, 0xFB3A }, -{ 0xFB3B, 0xFB3B, 0xFB3B }, -{ 0xFB3C, 0xFB3C, 0xFB3C }, -{ 0xFB3E, 0xFB3E, 0xFB3E }, -{ 0xFB40, 0xFB40, 0xFB40 }, -{ 0xFB41, 0xFB41, 0xFB41 }, -{ 0xFB43, 0xFB43, 0xFB43 }, -{ 0xFB44, 0xFB44, 0xFB44 }, -{ 0xFB46, 0xFB46, 0xFB46 }, -{ 0xFB47, 0xFB47, 0xFB47 }, -{ 0xFB48, 0xFB48, 0xFB48 }, -{ 0xFB49, 0xFB49, 0xFB49 }, -{ 0xFB4A, 0xFB4A, 0xFB4A }, -{ 0xFB4B, 0xFB4B, 0xFB4B }, -{ 0xFB4C, 0xFB4C, 0xFB4C }, -{ 0xFB4D, 0xFB4D, 0xFB4D }, -{ 0xFB4E, 0xFB4E, 0xFB4E }, -{ 0xFB4F, 0xFB4F, 0xFB4F }, -{ 0xFB50, 0xFB50, 0xFB50 }, -{ 0xFB51, 0xFB51, 0xFB51 }, -{ 0xFB52, 0xFB52, 0xFB52 }, -{ 0xFB53, 0xFB53, 0xFB53 }, -{ 0xFB54, 0xFB54, 0xFB54 }, -{ 0xFB55, 0xFB55, 0xFB55 }, -{ 0xFB56, 0xFB56, 0xFB56 }, -{ 0xFB57, 0xFB57, 0xFB57 }, -{ 0xFB58, 0xFB58, 0xFB58 }, -{ 0xFB59, 0xFB59, 0xFB59 }, -{ 0xFB5A, 0xFB5A, 0xFB5A }, -{ 0xFB5B, 0xFB5B, 0xFB5B }, -{ 0xFB5C, 0xFB5C, 0xFB5C }, -{ 0xFB5D, 0xFB5D, 0xFB5D }, -{ 0xFB5E, 0xFB5E, 0xFB5E }, -{ 0xFB5F, 0xFB5F, 0xFB5F }, -{ 0xFB60, 0xFB60, 0xFB60 }, -{ 0xFB61, 0xFB61, 0xFB61 }, -{ 0xFB62, 0xFB62, 0xFB62 }, -{ 0xFB63, 0xFB63, 0xFB63 }, -{ 0xFB64, 0xFB64, 0xFB64 }, -{ 0xFB65, 0xFB65, 0xFB65 }, -{ 0xFB66, 0xFB66, 0xFB66 }, -{ 0xFB67, 0xFB67, 0xFB67 }, -{ 0xFB68, 0xFB68, 0xFB68 }, -{ 0xFB69, 0xFB69, 0xFB69 }, -{ 0xFB6A, 0xFB6A, 0xFB6A }, -{ 0xFB6B, 0xFB6B, 0xFB6B }, -{ 0xFB6C, 0xFB6C, 0xFB6C }, -{ 0xFB6D, 0xFB6D, 0xFB6D }, -{ 0xFB6E, 0xFB6E, 0xFB6E }, -{ 0xFB6F, 0xFB6F, 0xFB6F }, -{ 0xFB70, 0xFB70, 0xFB70 }, -{ 0xFB71, 0xFB71, 0xFB71 }, -{ 0xFB72, 0xFB72, 0xFB72 }, -{ 0xFB73, 0xFB73, 0xFB73 }, -{ 0xFB74, 0xFB74, 0xFB74 }, -{ 0xFB75, 0xFB75, 0xFB75 }, -{ 0xFB76, 0xFB76, 0xFB76 }, -{ 0xFB77, 0xFB77, 0xFB77 }, -{ 0xFB78, 0xFB78, 0xFB78 }, -{ 0xFB79, 0xFB79, 0xFB79 }, -{ 0xFB7A, 0xFB7A, 0xFB7A }, -{ 0xFB7B, 0xFB7B, 0xFB7B }, -{ 0xFB7C, 0xFB7C, 0xFB7C }, -{ 0xFB7D, 0xFB7D, 0xFB7D }, -{ 0xFB7E, 0xFB7E, 0xFB7E }, -{ 0xFB7F, 0xFB7F, 0xFB7F }, -{ 0xFB80, 0xFB80, 0xFB80 }, -{ 0xFB81, 0xFB81, 0xFB81 }, -{ 0xFB82, 0xFB82, 0xFB82 }, -{ 0xFB83, 0xFB83, 0xFB83 }, -{ 0xFB84, 0xFB84, 0xFB84 }, -{ 0xFB85, 0xFB85, 0xFB85 }, -{ 0xFB86, 0xFB86, 0xFB86 }, -{ 0xFB87, 0xFB87, 0xFB87 }, -{ 0xFB88, 0xFB88, 0xFB88 }, -{ 0xFB89, 0xFB89, 0xFB89 }, -{ 0xFB8A, 0xFB8A, 0xFB8A }, -{ 0xFB8B, 0xFB8B, 0xFB8B }, -{ 0xFB8C, 0xFB8C, 0xFB8C }, -{ 0xFB8D, 0xFB8D, 0xFB8D }, -{ 0xFB8E, 0xFB8E, 0xFB8E }, -{ 0xFB8F, 0xFB8F, 0xFB8F }, -{ 0xFB90, 0xFB90, 0xFB90 }, -{ 0xFB91, 0xFB91, 0xFB91 }, -{ 0xFB92, 0xFB92, 0xFB92 }, -{ 0xFB93, 0xFB93, 0xFB93 }, -{ 0xFB94, 0xFB94, 0xFB94 }, -{ 0xFB95, 0xFB95, 0xFB95 }, -{ 0xFB96, 0xFB96, 0xFB96 }, -{ 0xFB97, 0xFB97, 0xFB97 }, -{ 0xFB98, 0xFB98, 0xFB98 }, -{ 0xFB99, 0xFB99, 0xFB99 }, -{ 0xFB9A, 0xFB9A, 0xFB9A }, -{ 0xFB9B, 0xFB9B, 0xFB9B }, -{ 0xFB9C, 0xFB9C, 0xFB9C }, -{ 0xFB9D, 0xFB9D, 0xFB9D }, -{ 0xFB9E, 0xFB9E, 0xFB9E }, -{ 0xFB9F, 0xFB9F, 0xFB9F }, -{ 0xFBA0, 0xFBA0, 0xFBA0 }, -{ 0xFBA1, 0xFBA1, 0xFBA1 }, -{ 0xFBA2, 0xFBA2, 0xFBA2 }, -{ 0xFBA3, 0xFBA3, 0xFBA3 }, -{ 0xFBA4, 0xFBA4, 0xFBA4 }, -{ 0xFBA5, 0xFBA5, 0xFBA5 }, -{ 0xFBA6, 0xFBA6, 0xFBA6 }, -{ 0xFBA7, 0xFBA7, 0xFBA7 }, -{ 0xFBA8, 0xFBA8, 0xFBA8 }, -{ 0xFBA9, 0xFBA9, 0xFBA9 }, -{ 0xFBAA, 0xFBAA, 0xFBAA }, -{ 0xFBAB, 0xFBAB, 0xFBAB }, -{ 0xFBAC, 0xFBAC, 0xFBAC }, -{ 0xFBAD, 0xFBAD, 0xFBAD }, -{ 0xFBAE, 0xFBAE, 0xFBAE }, -{ 0xFBAF, 0xFBAF, 0xFBAF }, -{ 0xFBB0, 0xFBB0, 0xFBB0 }, -{ 0xFBB1, 0xFBB1, 0xFBB1 }, -{ 0xFBD3, 0xFBD3, 0xFBD3 }, -{ 0xFBD4, 0xFBD4, 0xFBD4 }, -{ 0xFBD5, 0xFBD5, 0xFBD5 }, -{ 0xFBD6, 0xFBD6, 0xFBD6 }, -{ 0xFBD7, 0xFBD7, 0xFBD7 }, -{ 0xFBD8, 0xFBD8, 0xFBD8 }, -{ 0xFBD9, 0xFBD9, 0xFBD9 }, -{ 0xFBDA, 0xFBDA, 0xFBDA }, -{ 0xFBDB, 0xFBDB, 0xFBDB }, -{ 0xFBDC, 0xFBDC, 0xFBDC }, -{ 0xFBDD, 0xFBDD, 0xFBDD }, -{ 0xFBDE, 0xFBDE, 0xFBDE }, -{ 0xFBDF, 0xFBDF, 0xFBDF }, -{ 0xFBE0, 0xFBE0, 0xFBE0 }, -{ 0xFBE1, 0xFBE1, 0xFBE1 }, -{ 0xFBE2, 0xFBE2, 0xFBE2 }, -{ 0xFBE3, 0xFBE3, 0xFBE3 }, -{ 0xFBE4, 0xFBE4, 0xFBE4 }, -{ 0xFBE5, 0xFBE5, 0xFBE5 }, -{ 0xFBE6, 0xFBE6, 0xFBE6 }, -{ 0xFBE7, 0xFBE7, 0xFBE7 }, -{ 0xFBE8, 0xFBE8, 0xFBE8 }, -{ 0xFBE9, 0xFBE9, 0xFBE9 }, -{ 0xFBEA, 0xFBEA, 0xFBEA }, -{ 0xFBEB, 0xFBEB, 0xFBEB }, -{ 0xFBEC, 0xFBEC, 0xFBEC }, -{ 0xFBED, 0xFBED, 0xFBED }, -{ 0xFBEE, 0xFBEE, 0xFBEE }, -{ 0xFBEF, 0xFBEF, 0xFBEF }, -{ 0xFBF0, 0xFBF0, 0xFBF0 }, -{ 0xFBF1, 0xFBF1, 0xFBF1 }, -{ 0xFBF2, 0xFBF2, 0xFBF2 }, -{ 0xFBF3, 0xFBF3, 0xFBF3 }, -{ 0xFBF4, 0xFBF4, 0xFBF4 }, -{ 0xFBF5, 0xFBF5, 0xFBF5 }, -{ 0xFBF6, 0xFBF6, 0xFBF6 }, -{ 0xFBF7, 0xFBF7, 0xFBF7 }, -{ 0xFBF8, 0xFBF8, 0xFBF8 }, -{ 0xFBF9, 0xFBF9, 0xFBF9 }, -{ 0xFBFA, 0xFBFA, 0xFBFA }, -{ 0xFBFB, 0xFBFB, 0xFBFB }, -{ 0xFBFC, 0xFBFC, 0xFBFC }, -{ 0xFBFD, 0xFBFD, 0xFBFD }, -{ 0xFBFE, 0xFBFE, 0xFBFE }, -{ 0xFBFF, 0xFBFF, 0xFBFF }, -{ 0xFC00, 0xFC00, 0xFC00 }, -{ 0xFC01, 0xFC01, 0xFC01 }, -{ 0xFC02, 0xFC02, 0xFC02 }, -{ 0xFC03, 0xFC03, 0xFC03 }, -{ 0xFC04, 0xFC04, 0xFC04 }, -{ 0xFC05, 0xFC05, 0xFC05 }, -{ 0xFC06, 0xFC06, 0xFC06 }, -{ 0xFC07, 0xFC07, 0xFC07 }, -{ 0xFC08, 0xFC08, 0xFC08 }, -{ 0xFC09, 0xFC09, 0xFC09 }, -{ 0xFC0A, 0xFC0A, 0xFC0A }, -{ 0xFC0B, 0xFC0B, 0xFC0B }, -{ 0xFC0C, 0xFC0C, 0xFC0C }, -{ 0xFC0D, 0xFC0D, 0xFC0D }, -{ 0xFC0E, 0xFC0E, 0xFC0E }, -{ 0xFC0F, 0xFC0F, 0xFC0F }, -{ 0xFC10, 0xFC10, 0xFC10 }, -{ 0xFC11, 0xFC11, 0xFC11 }, -{ 0xFC12, 0xFC12, 0xFC12 }, -{ 0xFC13, 0xFC13, 0xFC13 }, -{ 0xFC14, 0xFC14, 0xFC14 }, -{ 0xFC15, 0xFC15, 0xFC15 }, -{ 0xFC16, 0xFC16, 0xFC16 }, -{ 0xFC17, 0xFC17, 0xFC17 }, -{ 0xFC18, 0xFC18, 0xFC18 }, -{ 0xFC19, 0xFC19, 0xFC19 }, -{ 0xFC1A, 0xFC1A, 0xFC1A }, -{ 0xFC1B, 0xFC1B, 0xFC1B }, -{ 0xFC1C, 0xFC1C, 0xFC1C }, -{ 0xFC1D, 0xFC1D, 0xFC1D }, -{ 0xFC1E, 0xFC1E, 0xFC1E }, -{ 0xFC1F, 0xFC1F, 0xFC1F }, -{ 0xFC20, 0xFC20, 0xFC20 }, -{ 0xFC21, 0xFC21, 0xFC21 }, -{ 0xFC22, 0xFC22, 0xFC22 }, -{ 0xFC23, 0xFC23, 0xFC23 }, -{ 0xFC24, 0xFC24, 0xFC24 }, -{ 0xFC25, 0xFC25, 0xFC25 }, -{ 0xFC26, 0xFC26, 0xFC26 }, -{ 0xFC27, 0xFC27, 0xFC27 }, -{ 0xFC28, 0xFC28, 0xFC28 }, -{ 0xFC29, 0xFC29, 0xFC29 }, -{ 0xFC2A, 0xFC2A, 0xFC2A }, -{ 0xFC2B, 0xFC2B, 0xFC2B }, -{ 0xFC2C, 0xFC2C, 0xFC2C }, -{ 0xFC2D, 0xFC2D, 0xFC2D }, -{ 0xFC2E, 0xFC2E, 0xFC2E }, -{ 0xFC2F, 0xFC2F, 0xFC2F }, -{ 0xFC30, 0xFC30, 0xFC30 }, -{ 0xFC31, 0xFC31, 0xFC31 }, -{ 0xFC32, 0xFC32, 0xFC32 }, -{ 0xFC33, 0xFC33, 0xFC33 }, -{ 0xFC34, 0xFC34, 0xFC34 }, -{ 0xFC35, 0xFC35, 0xFC35 }, -{ 0xFC36, 0xFC36, 0xFC36 }, -{ 0xFC37, 0xFC37, 0xFC37 }, -{ 0xFC38, 0xFC38, 0xFC38 }, -{ 0xFC39, 0xFC39, 0xFC39 }, -{ 0xFC3A, 0xFC3A, 0xFC3A }, -{ 0xFC3B, 0xFC3B, 0xFC3B }, -{ 0xFC3C, 0xFC3C, 0xFC3C }, -{ 0xFC3D, 0xFC3D, 0xFC3D }, -{ 0xFC3E, 0xFC3E, 0xFC3E }, -{ 0xFC3F, 0xFC3F, 0xFC3F }, -{ 0xFC40, 0xFC40, 0xFC40 }, -{ 0xFC41, 0xFC41, 0xFC41 }, -{ 0xFC42, 0xFC42, 0xFC42 }, -{ 0xFC43, 0xFC43, 0xFC43 }, -{ 0xFC44, 0xFC44, 0xFC44 }, -{ 0xFC45, 0xFC45, 0xFC45 }, -{ 0xFC46, 0xFC46, 0xFC46 }, -{ 0xFC47, 0xFC47, 0xFC47 }, -{ 0xFC48, 0xFC48, 0xFC48 }, -{ 0xFC49, 0xFC49, 0xFC49 }, -{ 0xFC4A, 0xFC4A, 0xFC4A }, -{ 0xFC4B, 0xFC4B, 0xFC4B }, -{ 0xFC4C, 0xFC4C, 0xFC4C }, -{ 0xFC4D, 0xFC4D, 0xFC4D }, -{ 0xFC4E, 0xFC4E, 0xFC4E }, -{ 0xFC4F, 0xFC4F, 0xFC4F }, -{ 0xFC50, 0xFC50, 0xFC50 }, -{ 0xFC51, 0xFC51, 0xFC51 }, -{ 0xFC52, 0xFC52, 0xFC52 }, -{ 0xFC53, 0xFC53, 0xFC53 }, -{ 0xFC54, 0xFC54, 0xFC54 }, -{ 0xFC55, 0xFC55, 0xFC55 }, -{ 0xFC56, 0xFC56, 0xFC56 }, -{ 0xFC57, 0xFC57, 0xFC57 }, -{ 0xFC58, 0xFC58, 0xFC58 }, -{ 0xFC59, 0xFC59, 0xFC59 }, -{ 0xFC5A, 0xFC5A, 0xFC5A }, -{ 0xFC5B, 0xFC5B, 0xFC5B }, -{ 0xFC5C, 0xFC5C, 0xFC5C }, -{ 0xFC5D, 0xFC5D, 0xFC5D }, -{ 0xFC5E, 0xFC5E, 0xFC5E }, -{ 0xFC5F, 0xFC5F, 0xFC5F }, -{ 0xFC60, 0xFC60, 0xFC60 }, -{ 0xFC61, 0xFC61, 0xFC61 }, -{ 0xFC62, 0xFC62, 0xFC62 }, -{ 0xFC63, 0xFC63, 0xFC63 }, -{ 0xFC64, 0xFC64, 0xFC64 }, -{ 0xFC65, 0xFC65, 0xFC65 }, -{ 0xFC66, 0xFC66, 0xFC66 }, -{ 0xFC67, 0xFC67, 0xFC67 }, -{ 0xFC68, 0xFC68, 0xFC68 }, -{ 0xFC69, 0xFC69, 0xFC69 }, -{ 0xFC6A, 0xFC6A, 0xFC6A }, -{ 0xFC6B, 0xFC6B, 0xFC6B }, -{ 0xFC6C, 0xFC6C, 0xFC6C }, -{ 0xFC6D, 0xFC6D, 0xFC6D }, -{ 0xFC6E, 0xFC6E, 0xFC6E }, -{ 0xFC6F, 0xFC6F, 0xFC6F }, -{ 0xFC70, 0xFC70, 0xFC70 }, -{ 0xFC71, 0xFC71, 0xFC71 }, -{ 0xFC72, 0xFC72, 0xFC72 }, -{ 0xFC73, 0xFC73, 0xFC73 }, -{ 0xFC74, 0xFC74, 0xFC74 }, -{ 0xFC75, 0xFC75, 0xFC75 }, -{ 0xFC76, 0xFC76, 0xFC76 }, -{ 0xFC77, 0xFC77, 0xFC77 }, -{ 0xFC78, 0xFC78, 0xFC78 }, -{ 0xFC79, 0xFC79, 0xFC79 }, -{ 0xFC7A, 0xFC7A, 0xFC7A }, -{ 0xFC7B, 0xFC7B, 0xFC7B }, -{ 0xFC7C, 0xFC7C, 0xFC7C }, -{ 0xFC7D, 0xFC7D, 0xFC7D }, -{ 0xFC7E, 0xFC7E, 0xFC7E }, -{ 0xFC7F, 0xFC7F, 0xFC7F }, -{ 0xFC80, 0xFC80, 0xFC80 }, -{ 0xFC81, 0xFC81, 0xFC81 }, -{ 0xFC82, 0xFC82, 0xFC82 }, -{ 0xFC83, 0xFC83, 0xFC83 }, -{ 0xFC84, 0xFC84, 0xFC84 }, -{ 0xFC85, 0xFC85, 0xFC85 }, -{ 0xFC86, 0xFC86, 0xFC86 }, -{ 0xFC87, 0xFC87, 0xFC87 }, -{ 0xFC88, 0xFC88, 0xFC88 }, -{ 0xFC89, 0xFC89, 0xFC89 }, -{ 0xFC8A, 0xFC8A, 0xFC8A }, -{ 0xFC8B, 0xFC8B, 0xFC8B }, -{ 0xFC8C, 0xFC8C, 0xFC8C }, -{ 0xFC8D, 0xFC8D, 0xFC8D }, -{ 0xFC8E, 0xFC8E, 0xFC8E }, -{ 0xFC8F, 0xFC8F, 0xFC8F }, -{ 0xFC90, 0xFC90, 0xFC90 }, -{ 0xFC91, 0xFC91, 0xFC91 }, -{ 0xFC92, 0xFC92, 0xFC92 }, -{ 0xFC93, 0xFC93, 0xFC93 }, -{ 0xFC94, 0xFC94, 0xFC94 }, -{ 0xFC95, 0xFC95, 0xFC95 }, -{ 0xFC96, 0xFC96, 0xFC96 }, -{ 0xFC97, 0xFC97, 0xFC97 }, -{ 0xFC98, 0xFC98, 0xFC98 }, -{ 0xFC99, 0xFC99, 0xFC99 }, -{ 0xFC9A, 0xFC9A, 0xFC9A }, -{ 0xFC9B, 0xFC9B, 0xFC9B }, -{ 0xFC9C, 0xFC9C, 0xFC9C }, -{ 0xFC9D, 0xFC9D, 0xFC9D }, -{ 0xFC9E, 0xFC9E, 0xFC9E }, -{ 0xFC9F, 0xFC9F, 0xFC9F }, -{ 0xFCA0, 0xFCA0, 0xFCA0 }, -{ 0xFCA1, 0xFCA1, 0xFCA1 }, -{ 0xFCA2, 0xFCA2, 0xFCA2 }, -{ 0xFCA3, 0xFCA3, 0xFCA3 }, -{ 0xFCA4, 0xFCA4, 0xFCA4 }, -{ 0xFCA5, 0xFCA5, 0xFCA5 }, -{ 0xFCA6, 0xFCA6, 0xFCA6 }, -{ 0xFCA7, 0xFCA7, 0xFCA7 }, -{ 0xFCA8, 0xFCA8, 0xFCA8 }, -{ 0xFCA9, 0xFCA9, 0xFCA9 }, -{ 0xFCAA, 0xFCAA, 0xFCAA }, -{ 0xFCAB, 0xFCAB, 0xFCAB }, -{ 0xFCAC, 0xFCAC, 0xFCAC }, -{ 0xFCAD, 0xFCAD, 0xFCAD }, -{ 0xFCAE, 0xFCAE, 0xFCAE }, -{ 0xFCAF, 0xFCAF, 0xFCAF }, -{ 0xFCB0, 0xFCB0, 0xFCB0 }, -{ 0xFCB1, 0xFCB1, 0xFCB1 }, -{ 0xFCB2, 0xFCB2, 0xFCB2 }, -{ 0xFCB3, 0xFCB3, 0xFCB3 }, -{ 0xFCB4, 0xFCB4, 0xFCB4 }, -{ 0xFCB5, 0xFCB5, 0xFCB5 }, -{ 0xFCB6, 0xFCB6, 0xFCB6 }, -{ 0xFCB7, 0xFCB7, 0xFCB7 }, -{ 0xFCB8, 0xFCB8, 0xFCB8 }, -{ 0xFCB9, 0xFCB9, 0xFCB9 }, -{ 0xFCBA, 0xFCBA, 0xFCBA }, -{ 0xFCBB, 0xFCBB, 0xFCBB }, -{ 0xFCBC, 0xFCBC, 0xFCBC }, -{ 0xFCBD, 0xFCBD, 0xFCBD }, -{ 0xFCBE, 0xFCBE, 0xFCBE }, -{ 0xFCBF, 0xFCBF, 0xFCBF }, -{ 0xFCC0, 0xFCC0, 0xFCC0 }, -{ 0xFCC1, 0xFCC1, 0xFCC1 }, -{ 0xFCC2, 0xFCC2, 0xFCC2 }, -{ 0xFCC3, 0xFCC3, 0xFCC3 }, -{ 0xFCC4, 0xFCC4, 0xFCC4 }, -{ 0xFCC5, 0xFCC5, 0xFCC5 }, -{ 0xFCC6, 0xFCC6, 0xFCC6 }, -{ 0xFCC7, 0xFCC7, 0xFCC7 }, -{ 0xFCC8, 0xFCC8, 0xFCC8 }, -{ 0xFCC9, 0xFCC9, 0xFCC9 }, -{ 0xFCCA, 0xFCCA, 0xFCCA }, -{ 0xFCCB, 0xFCCB, 0xFCCB }, -{ 0xFCCC, 0xFCCC, 0xFCCC }, -{ 0xFCCD, 0xFCCD, 0xFCCD }, -{ 0xFCCE, 0xFCCE, 0xFCCE }, -{ 0xFCCF, 0xFCCF, 0xFCCF }, -{ 0xFCD0, 0xFCD0, 0xFCD0 }, -{ 0xFCD1, 0xFCD1, 0xFCD1 }, -{ 0xFCD2, 0xFCD2, 0xFCD2 }, -{ 0xFCD3, 0xFCD3, 0xFCD3 }, -{ 0xFCD4, 0xFCD4, 0xFCD4 }, -{ 0xFCD5, 0xFCD5, 0xFCD5 }, -{ 0xFCD6, 0xFCD6, 0xFCD6 }, -{ 0xFCD7, 0xFCD7, 0xFCD7 }, -{ 0xFCD8, 0xFCD8, 0xFCD8 }, -{ 0xFCD9, 0xFCD9, 0xFCD9 }, -{ 0xFCDA, 0xFCDA, 0xFCDA }, -{ 0xFCDB, 0xFCDB, 0xFCDB }, -{ 0xFCDC, 0xFCDC, 0xFCDC }, -{ 0xFCDD, 0xFCDD, 0xFCDD }, -{ 0xFCDE, 0xFCDE, 0xFCDE }, -{ 0xFCDF, 0xFCDF, 0xFCDF }, -{ 0xFCE0, 0xFCE0, 0xFCE0 }, -{ 0xFCE1, 0xFCE1, 0xFCE1 }, -{ 0xFCE2, 0xFCE2, 0xFCE2 }, -{ 0xFCE3, 0xFCE3, 0xFCE3 }, -{ 0xFCE4, 0xFCE4, 0xFCE4 }, -{ 0xFCE5, 0xFCE5, 0xFCE5 }, -{ 0xFCE6, 0xFCE6, 0xFCE6 }, -{ 0xFCE7, 0xFCE7, 0xFCE7 }, -{ 0xFCE8, 0xFCE8, 0xFCE8 }, -{ 0xFCE9, 0xFCE9, 0xFCE9 }, -{ 0xFCEA, 0xFCEA, 0xFCEA }, -{ 0xFCEB, 0xFCEB, 0xFCEB }, -{ 0xFCEC, 0xFCEC, 0xFCEC }, -{ 0xFCED, 0xFCED, 0xFCED }, -{ 0xFCEE, 0xFCEE, 0xFCEE }, -{ 0xFCEF, 0xFCEF, 0xFCEF }, -{ 0xFCF0, 0xFCF0, 0xFCF0 }, -{ 0xFCF1, 0xFCF1, 0xFCF1 }, -{ 0xFCF2, 0xFCF2, 0xFCF2 }, -{ 0xFCF3, 0xFCF3, 0xFCF3 }, -{ 0xFCF4, 0xFCF4, 0xFCF4 }, -{ 0xFCF5, 0xFCF5, 0xFCF5 }, -{ 0xFCF6, 0xFCF6, 0xFCF6 }, -{ 0xFCF7, 0xFCF7, 0xFCF7 }, -{ 0xFCF8, 0xFCF8, 0xFCF8 }, -{ 0xFCF9, 0xFCF9, 0xFCF9 }, -{ 0xFCFA, 0xFCFA, 0xFCFA }, -{ 0xFCFB, 0xFCFB, 0xFCFB }, -{ 0xFCFC, 0xFCFC, 0xFCFC }, -{ 0xFCFD, 0xFCFD, 0xFCFD }, -{ 0xFCFE, 0xFCFE, 0xFCFE }, -{ 0xFCFF, 0xFCFF, 0xFCFF }, -{ 0xFD00, 0xFD00, 0xFD00 }, -{ 0xFD01, 0xFD01, 0xFD01 }, -{ 0xFD02, 0xFD02, 0xFD02 }, -{ 0xFD03, 0xFD03, 0xFD03 }, -{ 0xFD04, 0xFD04, 0xFD04 }, -{ 0xFD05, 0xFD05, 0xFD05 }, -{ 0xFD06, 0xFD06, 0xFD06 }, -{ 0xFD07, 0xFD07, 0xFD07 }, -{ 0xFD08, 0xFD08, 0xFD08 }, -{ 0xFD09, 0xFD09, 0xFD09 }, -{ 0xFD0A, 0xFD0A, 0xFD0A }, -{ 0xFD0B, 0xFD0B, 0xFD0B }, -{ 0xFD0C, 0xFD0C, 0xFD0C }, -{ 0xFD0D, 0xFD0D, 0xFD0D }, -{ 0xFD0E, 0xFD0E, 0xFD0E }, -{ 0xFD0F, 0xFD0F, 0xFD0F }, -{ 0xFD10, 0xFD10, 0xFD10 }, -{ 0xFD11, 0xFD11, 0xFD11 }, -{ 0xFD12, 0xFD12, 0xFD12 }, -{ 0xFD13, 0xFD13, 0xFD13 }, -{ 0xFD14, 0xFD14, 0xFD14 }, -{ 0xFD15, 0xFD15, 0xFD15 }, -{ 0xFD16, 0xFD16, 0xFD16 }, -{ 0xFD17, 0xFD17, 0xFD17 }, -{ 0xFD18, 0xFD18, 0xFD18 }, -{ 0xFD19, 0xFD19, 0xFD19 }, -{ 0xFD1A, 0xFD1A, 0xFD1A }, -{ 0xFD1B, 0xFD1B, 0xFD1B }, -{ 0xFD1C, 0xFD1C, 0xFD1C }, -{ 0xFD1D, 0xFD1D, 0xFD1D }, -{ 0xFD1E, 0xFD1E, 0xFD1E }, -{ 0xFD1F, 0xFD1F, 0xFD1F }, -{ 0xFD20, 0xFD20, 0xFD20 }, -{ 0xFD21, 0xFD21, 0xFD21 }, -{ 0xFD22, 0xFD22, 0xFD22 }, -{ 0xFD23, 0xFD23, 0xFD23 }, -{ 0xFD24, 0xFD24, 0xFD24 }, -{ 0xFD25, 0xFD25, 0xFD25 }, -{ 0xFD26, 0xFD26, 0xFD26 }, -{ 0xFD27, 0xFD27, 0xFD27 }, -{ 0xFD28, 0xFD28, 0xFD28 }, -{ 0xFD29, 0xFD29, 0xFD29 }, -{ 0xFD2A, 0xFD2A, 0xFD2A }, -{ 0xFD2B, 0xFD2B, 0xFD2B }, -{ 0xFD2C, 0xFD2C, 0xFD2C }, -{ 0xFD2D, 0xFD2D, 0xFD2D }, -{ 0xFD2E, 0xFD2E, 0xFD2E }, -{ 0xFD2F, 0xFD2F, 0xFD2F }, -{ 0xFD30, 0xFD30, 0xFD30 }, -{ 0xFD31, 0xFD31, 0xFD31 }, -{ 0xFD32, 0xFD32, 0xFD32 }, -{ 0xFD33, 0xFD33, 0xFD33 }, -{ 0xFD34, 0xFD34, 0xFD34 }, -{ 0xFD35, 0xFD35, 0xFD35 }, -{ 0xFD36, 0xFD36, 0xFD36 }, -{ 0xFD37, 0xFD37, 0xFD37 }, -{ 0xFD38, 0xFD38, 0xFD38 }, -{ 0xFD39, 0xFD39, 0xFD39 }, -{ 0xFD3A, 0xFD3A, 0xFD3A }, -{ 0xFD3B, 0xFD3B, 0xFD3B }, -{ 0xFD3C, 0xFD3C, 0xFD3C }, -{ 0xFD3D, 0xFD3D, 0xFD3D }, -{ 0xFD50, 0xFD50, 0xFD50 }, -{ 0xFD51, 0xFD51, 0xFD51 }, -{ 0xFD52, 0xFD52, 0xFD52 }, -{ 0xFD53, 0xFD53, 0xFD53 }, -{ 0xFD54, 0xFD54, 0xFD54 }, -{ 0xFD55, 0xFD55, 0xFD55 }, -{ 0xFD56, 0xFD56, 0xFD56 }, -{ 0xFD57, 0xFD57, 0xFD57 }, -{ 0xFD58, 0xFD58, 0xFD58 }, -{ 0xFD59, 0xFD59, 0xFD59 }, -{ 0xFD5A, 0xFD5A, 0xFD5A }, -{ 0xFD5B, 0xFD5B, 0xFD5B }, -{ 0xFD5C, 0xFD5C, 0xFD5C }, -{ 0xFD5D, 0xFD5D, 0xFD5D }, -{ 0xFD5E, 0xFD5E, 0xFD5E }, -{ 0xFD5F, 0xFD5F, 0xFD5F }, -{ 0xFD60, 0xFD60, 0xFD60 }, -{ 0xFD61, 0xFD61, 0xFD61 }, -{ 0xFD62, 0xFD62, 0xFD62 }, -{ 0xFD63, 0xFD63, 0xFD63 }, -{ 0xFD64, 0xFD64, 0xFD64 }, -{ 0xFD65, 0xFD65, 0xFD65 }, -{ 0xFD66, 0xFD66, 0xFD66 }, -{ 0xFD67, 0xFD67, 0xFD67 }, -{ 0xFD68, 0xFD68, 0xFD68 }, -{ 0xFD69, 0xFD69, 0xFD69 }, -{ 0xFD6A, 0xFD6A, 0xFD6A }, -{ 0xFD6B, 0xFD6B, 0xFD6B }, -{ 0xFD6C, 0xFD6C, 0xFD6C }, -{ 0xFD6D, 0xFD6D, 0xFD6D }, -{ 0xFD6E, 0xFD6E, 0xFD6E }, -{ 0xFD6F, 0xFD6F, 0xFD6F }, -{ 0xFD70, 0xFD70, 0xFD70 }, -{ 0xFD71, 0xFD71, 0xFD71 }, -{ 0xFD72, 0xFD72, 0xFD72 }, -{ 0xFD73, 0xFD73, 0xFD73 }, -{ 0xFD74, 0xFD74, 0xFD74 }, -{ 0xFD75, 0xFD75, 0xFD75 }, -{ 0xFD76, 0xFD76, 0xFD76 }, -{ 0xFD77, 0xFD77, 0xFD77 }, -{ 0xFD78, 0xFD78, 0xFD78 }, -{ 0xFD79, 0xFD79, 0xFD79 }, -{ 0xFD7A, 0xFD7A, 0xFD7A }, -{ 0xFD7B, 0xFD7B, 0xFD7B }, -{ 0xFD7C, 0xFD7C, 0xFD7C }, -{ 0xFD7D, 0xFD7D, 0xFD7D }, -{ 0xFD7E, 0xFD7E, 0xFD7E }, -{ 0xFD7F, 0xFD7F, 0xFD7F }, -{ 0xFD80, 0xFD80, 0xFD80 }, -{ 0xFD81, 0xFD81, 0xFD81 }, -{ 0xFD82, 0xFD82, 0xFD82 }, -{ 0xFD83, 0xFD83, 0xFD83 }, -{ 0xFD84, 0xFD84, 0xFD84 }, -{ 0xFD85, 0xFD85, 0xFD85 }, -{ 0xFD86, 0xFD86, 0xFD86 }, -{ 0xFD87, 0xFD87, 0xFD87 }, -{ 0xFD88, 0xFD88, 0xFD88 }, -{ 0xFD89, 0xFD89, 0xFD89 }, -{ 0xFD8A, 0xFD8A, 0xFD8A }, -{ 0xFD8B, 0xFD8B, 0xFD8B }, -{ 0xFD8C, 0xFD8C, 0xFD8C }, -{ 0xFD8D, 0xFD8D, 0xFD8D }, -{ 0xFD8E, 0xFD8E, 0xFD8E }, -{ 0xFD8F, 0xFD8F, 0xFD8F }, -{ 0xFD92, 0xFD92, 0xFD92 }, -{ 0xFD93, 0xFD93, 0xFD93 }, -{ 0xFD94, 0xFD94, 0xFD94 }, -{ 0xFD95, 0xFD95, 0xFD95 }, -{ 0xFD96, 0xFD96, 0xFD96 }, -{ 0xFD97, 0xFD97, 0xFD97 }, -{ 0xFD98, 0xFD98, 0xFD98 }, -{ 0xFD99, 0xFD99, 0xFD99 }, -{ 0xFD9A, 0xFD9A, 0xFD9A }, -{ 0xFD9B, 0xFD9B, 0xFD9B }, -{ 0xFD9C, 0xFD9C, 0xFD9C }, -{ 0xFD9D, 0xFD9D, 0xFD9D }, -{ 0xFD9E, 0xFD9E, 0xFD9E }, -{ 0xFD9F, 0xFD9F, 0xFD9F }, -{ 0xFDA0, 0xFDA0, 0xFDA0 }, -{ 0xFDA1, 0xFDA1, 0xFDA1 }, -{ 0xFDA2, 0xFDA2, 0xFDA2 }, -{ 0xFDA3, 0xFDA3, 0xFDA3 }, -{ 0xFDA4, 0xFDA4, 0xFDA4 }, -{ 0xFDA5, 0xFDA5, 0xFDA5 }, -{ 0xFDA6, 0xFDA6, 0xFDA6 }, -{ 0xFDA7, 0xFDA7, 0xFDA7 }, -{ 0xFDA8, 0xFDA8, 0xFDA8 }, -{ 0xFDA9, 0xFDA9, 0xFDA9 }, -{ 0xFDAA, 0xFDAA, 0xFDAA }, -{ 0xFDAB, 0xFDAB, 0xFDAB }, -{ 0xFDAC, 0xFDAC, 0xFDAC }, -{ 0xFDAD, 0xFDAD, 0xFDAD }, -{ 0xFDAE, 0xFDAE, 0xFDAE }, -{ 0xFDAF, 0xFDAF, 0xFDAF }, -{ 0xFDB0, 0xFDB0, 0xFDB0 }, -{ 0xFDB1, 0xFDB1, 0xFDB1 }, -{ 0xFDB2, 0xFDB2, 0xFDB2 }, -{ 0xFDB3, 0xFDB3, 0xFDB3 }, -{ 0xFDB4, 0xFDB4, 0xFDB4 }, -{ 0xFDB5, 0xFDB5, 0xFDB5 }, -{ 0xFDB6, 0xFDB6, 0xFDB6 }, -{ 0xFDB7, 0xFDB7, 0xFDB7 }, -{ 0xFDB8, 0xFDB8, 0xFDB8 }, -{ 0xFDB9, 0xFDB9, 0xFDB9 }, -{ 0xFDBA, 0xFDBA, 0xFDBA }, -{ 0xFDBB, 0xFDBB, 0xFDBB }, -{ 0xFDBC, 0xFDBC, 0xFDBC }, -{ 0xFDBD, 0xFDBD, 0xFDBD }, -{ 0xFDBE, 0xFDBE, 0xFDBE }, -{ 0xFDBF, 0xFDBF, 0xFDBF }, -{ 0xFDC0, 0xFDC0, 0xFDC0 }, -{ 0xFDC1, 0xFDC1, 0xFDC1 }, -{ 0xFDC2, 0xFDC2, 0xFDC2 }, -{ 0xFDC3, 0xFDC3, 0xFDC3 }, -{ 0xFDC4, 0xFDC4, 0xFDC4 }, -{ 0xFDC5, 0xFDC5, 0xFDC5 }, -{ 0xFDC6, 0xFDC6, 0xFDC6 }, -{ 0xFDC7, 0xFDC7, 0xFDC7 }, -{ 0xFDF0, 0xFDF0, 0xFDF0 }, -{ 0xFDF1, 0xFDF1, 0xFDF1 }, -{ 0xFDF2, 0xFDF2, 0xFDF2 }, -{ 0xFDF3, 0xFDF3, 0xFDF3 }, -{ 0xFDF4, 0xFDF4, 0xFDF4 }, -{ 0xFDF5, 0xFDF5, 0xFDF5 }, -{ 0xFDF6, 0xFDF6, 0xFDF6 }, -{ 0xFDF7, 0xFDF7, 0xFDF7 }, -{ 0xFDF8, 0xFDF8, 0xFDF8 }, -{ 0xFDF9, 0xFDF9, 0xFDF9 }, -{ 0xFDFA, 0xFDFA, 0xFDFA }, -{ 0xFDFB, 0xFDFB, 0xFDFB }, -{ 0xFE00, 0xFE00, 0xFE00 }, -{ 0xFE01, 0xFE01, 0xFE01 }, -{ 0xFE02, 0xFE02, 0xFE02 }, -{ 0xFE03, 0xFE03, 0xFE03 }, -{ 0xFE04, 0xFE04, 0xFE04 }, -{ 0xFE05, 0xFE05, 0xFE05 }, -{ 0xFE06, 0xFE06, 0xFE06 }, -{ 0xFE07, 0xFE07, 0xFE07 }, -{ 0xFE08, 0xFE08, 0xFE08 }, -{ 0xFE09, 0xFE09, 0xFE09 }, -{ 0xFE0A, 0xFE0A, 0xFE0A }, -{ 0xFE0B, 0xFE0B, 0xFE0B }, -{ 0xFE0C, 0xFE0C, 0xFE0C }, -{ 0xFE0D, 0xFE0D, 0xFE0D }, -{ 0xFE0E, 0xFE0E, 0xFE0E }, -{ 0xFE0F, 0xFE0F, 0xFE0F }, -{ 0xFE20, 0xFE20, 0xFE20 }, -{ 0xFE21, 0xFE21, 0xFE21 }, -{ 0xFE22, 0xFE22, 0xFE22 }, -{ 0xFE23, 0xFE23, 0xFE23 }, -{ 0xFE70, 0xFE70, 0xFE70 }, -{ 0xFE71, 0xFE71, 0xFE71 }, -{ 0xFE72, 0xFE72, 0xFE72 }, -{ 0xFE73, 0xFE73, 0xFE73 }, -{ 0xFE74, 0xFE74, 0xFE74 }, -{ 0xFE76, 0xFE76, 0xFE76 }, -{ 0xFE77, 0xFE77, 0xFE77 }, -{ 0xFE78, 0xFE78, 0xFE78 }, -{ 0xFE79, 0xFE79, 0xFE79 }, -{ 0xFE7A, 0xFE7A, 0xFE7A }, -{ 0xFE7B, 0xFE7B, 0xFE7B }, -{ 0xFE7C, 0xFE7C, 0xFE7C }, -{ 0xFE7D, 0xFE7D, 0xFE7D }, -{ 0xFE7E, 0xFE7E, 0xFE7E }, -{ 0xFE7F, 0xFE7F, 0xFE7F }, -{ 0xFE80, 0xFE80, 0xFE80 }, -{ 0xFE81, 0xFE81, 0xFE81 }, -{ 0xFE82, 0xFE82, 0xFE82 }, -{ 0xFE83, 0xFE83, 0xFE83 }, -{ 0xFE84, 0xFE84, 0xFE84 }, -{ 0xFE85, 0xFE85, 0xFE85 }, -{ 0xFE86, 0xFE86, 0xFE86 }, -{ 0xFE87, 0xFE87, 0xFE87 }, -{ 0xFE88, 0xFE88, 0xFE88 }, -{ 0xFE89, 0xFE89, 0xFE89 }, -{ 0xFE8A, 0xFE8A, 0xFE8A }, -{ 0xFE8B, 0xFE8B, 0xFE8B }, -{ 0xFE8C, 0xFE8C, 0xFE8C }, -{ 0xFE8D, 0xFE8D, 0xFE8D }, -{ 0xFE8E, 0xFE8E, 0xFE8E }, -{ 0xFE8F, 0xFE8F, 0xFE8F }, -{ 0xFE90, 0xFE90, 0xFE90 }, -{ 0xFE91, 0xFE91, 0xFE91 }, -{ 0xFE92, 0xFE92, 0xFE92 }, -{ 0xFE93, 0xFE93, 0xFE93 }, -{ 0xFE94, 0xFE94, 0xFE94 }, -{ 0xFE95, 0xFE95, 0xFE95 }, -{ 0xFE96, 0xFE96, 0xFE96 }, -{ 0xFE97, 0xFE97, 0xFE97 }, -{ 0xFE98, 0xFE98, 0xFE98 }, -{ 0xFE99, 0xFE99, 0xFE99 }, -{ 0xFE9A, 0xFE9A, 0xFE9A }, -{ 0xFE9B, 0xFE9B, 0xFE9B }, -{ 0xFE9C, 0xFE9C, 0xFE9C }, -{ 0xFE9D, 0xFE9D, 0xFE9D }, -{ 0xFE9E, 0xFE9E, 0xFE9E }, -{ 0xFE9F, 0xFE9F, 0xFE9F }, -{ 0xFEA0, 0xFEA0, 0xFEA0 }, -{ 0xFEA1, 0xFEA1, 0xFEA1 }, -{ 0xFEA2, 0xFEA2, 0xFEA2 }, -{ 0xFEA3, 0xFEA3, 0xFEA3 }, -{ 0xFEA4, 0xFEA4, 0xFEA4 }, -{ 0xFEA5, 0xFEA5, 0xFEA5 }, -{ 0xFEA6, 0xFEA6, 0xFEA6 }, -{ 0xFEA7, 0xFEA7, 0xFEA7 }, -{ 0xFEA8, 0xFEA8, 0xFEA8 }, -{ 0xFEA9, 0xFEA9, 0xFEA9 }, -{ 0xFEAA, 0xFEAA, 0xFEAA }, -{ 0xFEAB, 0xFEAB, 0xFEAB }, -{ 0xFEAC, 0xFEAC, 0xFEAC }, -{ 0xFEAD, 0xFEAD, 0xFEAD }, -{ 0xFEAE, 0xFEAE, 0xFEAE }, -{ 0xFEAF, 0xFEAF, 0xFEAF }, -{ 0xFEB0, 0xFEB0, 0xFEB0 }, -{ 0xFEB1, 0xFEB1, 0xFEB1 }, -{ 0xFEB2, 0xFEB2, 0xFEB2 }, -{ 0xFEB3, 0xFEB3, 0xFEB3 }, -{ 0xFEB4, 0xFEB4, 0xFEB4 }, -{ 0xFEB5, 0xFEB5, 0xFEB5 }, -{ 0xFEB6, 0xFEB6, 0xFEB6 }, -{ 0xFEB7, 0xFEB7, 0xFEB7 }, -{ 0xFEB8, 0xFEB8, 0xFEB8 }, -{ 0xFEB9, 0xFEB9, 0xFEB9 }, -{ 0xFEBA, 0xFEBA, 0xFEBA }, -{ 0xFEBB, 0xFEBB, 0xFEBB }, -{ 0xFEBC, 0xFEBC, 0xFEBC }, -{ 0xFEBD, 0xFEBD, 0xFEBD }, -{ 0xFEBE, 0xFEBE, 0xFEBE }, -{ 0xFEBF, 0xFEBF, 0xFEBF }, -{ 0xFEC0, 0xFEC0, 0xFEC0 }, -{ 0xFEC1, 0xFEC1, 0xFEC1 }, -{ 0xFEC2, 0xFEC2, 0xFEC2 }, -{ 0xFEC3, 0xFEC3, 0xFEC3 }, -{ 0xFEC4, 0xFEC4, 0xFEC4 }, -{ 0xFEC5, 0xFEC5, 0xFEC5 }, -{ 0xFEC6, 0xFEC6, 0xFEC6 }, -{ 0xFEC7, 0xFEC7, 0xFEC7 }, -{ 0xFEC8, 0xFEC8, 0xFEC8 }, -{ 0xFEC9, 0xFEC9, 0xFEC9 }, -{ 0xFECA, 0xFECA, 0xFECA }, -{ 0xFECB, 0xFECB, 0xFECB }, -{ 0xFECC, 0xFECC, 0xFECC }, -{ 0xFECD, 0xFECD, 0xFECD }, -{ 0xFECE, 0xFECE, 0xFECE }, -{ 0xFECF, 0xFECF, 0xFECF }, -{ 0xFED0, 0xFED0, 0xFED0 }, -{ 0xFED1, 0xFED1, 0xFED1 }, -{ 0xFED2, 0xFED2, 0xFED2 }, -{ 0xFED3, 0xFED3, 0xFED3 }, -{ 0xFED4, 0xFED4, 0xFED4 }, -{ 0xFED5, 0xFED5, 0xFED5 }, -{ 0xFED6, 0xFED6, 0xFED6 }, -{ 0xFED7, 0xFED7, 0xFED7 }, -{ 0xFED8, 0xFED8, 0xFED8 }, -{ 0xFED9, 0xFED9, 0xFED9 }, -{ 0xFEDA, 0xFEDA, 0xFEDA }, -{ 0xFEDB, 0xFEDB, 0xFEDB }, -{ 0xFEDC, 0xFEDC, 0xFEDC }, -{ 0xFEDD, 0xFEDD, 0xFEDD }, -{ 0xFEDE, 0xFEDE, 0xFEDE }, -{ 0xFEDF, 0xFEDF, 0xFEDF }, -{ 0xFEE0, 0xFEE0, 0xFEE0 }, -{ 0xFEE1, 0xFEE1, 0xFEE1 }, -{ 0xFEE2, 0xFEE2, 0xFEE2 }, -{ 0xFEE3, 0xFEE3, 0xFEE3 }, -{ 0xFEE4, 0xFEE4, 0xFEE4 }, -{ 0xFEE5, 0xFEE5, 0xFEE5 }, -{ 0xFEE6, 0xFEE6, 0xFEE6 }, -{ 0xFEE7, 0xFEE7, 0xFEE7 }, -{ 0xFEE8, 0xFEE8, 0xFEE8 }, -{ 0xFEE9, 0xFEE9, 0xFEE9 }, -{ 0xFEEA, 0xFEEA, 0xFEEA }, -{ 0xFEEB, 0xFEEB, 0xFEEB }, -{ 0xFEEC, 0xFEEC, 0xFEEC }, -{ 0xFEED, 0xFEED, 0xFEED }, -{ 0xFEEE, 0xFEEE, 0xFEEE }, -{ 0xFEEF, 0xFEEF, 0xFEEF }, -{ 0xFEF0, 0xFEF0, 0xFEF0 }, -{ 0xFEF1, 0xFEF1, 0xFEF1 }, -{ 0xFEF2, 0xFEF2, 0xFEF2 }, -{ 0xFEF3, 0xFEF3, 0xFEF3 }, -{ 0xFEF4, 0xFEF4, 0xFEF4 }, -{ 0xFEF5, 0xFEF5, 0xFEF5 }, -{ 0xFEF6, 0xFEF6, 0xFEF6 }, -{ 0xFEF7, 0xFEF7, 0xFEF7 }, -{ 0xFEF8, 0xFEF8, 0xFEF8 }, -{ 0xFEF9, 0xFEF9, 0xFEF9 }, -{ 0xFEFA, 0xFEFA, 0xFEFA }, -{ 0xFEFB, 0xFEFB, 0xFEFB }, -{ 0xFEFC, 0xFEFC, 0xFEFC }, -{ 0xFF21, 0xFF21, 0xFF41 }, -{ 0xFF22, 0xFF22, 0xFF42 }, -{ 0xFF23, 0xFF23, 0xFF43 }, -{ 0xFF24, 0xFF24, 0xFF44 }, -{ 0xFF25, 0xFF25, 0xFF45 }, -{ 0xFF26, 0xFF26, 0xFF46 }, -{ 0xFF27, 0xFF27, 0xFF47 }, -{ 0xFF28, 0xFF28, 0xFF48 }, -{ 0xFF29, 0xFF29, 0xFF49 }, -{ 0xFF2A, 0xFF2A, 0xFF4A }, -{ 0xFF2B, 0xFF2B, 0xFF4B }, -{ 0xFF2C, 0xFF2C, 0xFF4C }, -{ 0xFF2D, 0xFF2D, 0xFF4D }, -{ 0xFF2E, 0xFF2E, 0xFF4E }, -{ 0xFF2F, 0xFF2F, 0xFF4F }, -{ 0xFF30, 0xFF30, 0xFF50 }, -{ 0xFF31, 0xFF31, 0xFF51 }, -{ 0xFF32, 0xFF32, 0xFF52 }, -{ 0xFF33, 0xFF33, 0xFF53 }, -{ 0xFF34, 0xFF34, 0xFF54 }, -{ 0xFF35, 0xFF35, 0xFF55 }, -{ 0xFF36, 0xFF36, 0xFF56 }, -{ 0xFF37, 0xFF37, 0xFF57 }, -{ 0xFF38, 0xFF38, 0xFF58 }, -{ 0xFF39, 0xFF39, 0xFF59 }, -{ 0xFF3A, 0xFF3A, 0xFF5A }, -{ 0xFF41, 0xFF21, 0xFF41 }, -{ 0xFF42, 0xFF22, 0xFF42 }, -{ 0xFF43, 0xFF23, 0xFF43 }, -{ 0xFF44, 0xFF24, 0xFF44 }, -{ 0xFF45, 0xFF25, 0xFF45 }, -{ 0xFF46, 0xFF26, 0xFF46 }, -{ 0xFF47, 0xFF27, 0xFF47 }, -{ 0xFF48, 0xFF28, 0xFF48 }, -{ 0xFF49, 0xFF29, 0xFF49 }, -{ 0xFF4A, 0xFF2A, 0xFF4A }, -{ 0xFF4B, 0xFF2B, 0xFF4B }, -{ 0xFF4C, 0xFF2C, 0xFF4C }, -{ 0xFF4D, 0xFF2D, 0xFF4D }, -{ 0xFF4E, 0xFF2E, 0xFF4E }, -{ 0xFF4F, 0xFF2F, 0xFF4F }, -{ 0xFF50, 0xFF30, 0xFF50 }, -{ 0xFF51, 0xFF31, 0xFF51 }, -{ 0xFF52, 0xFF32, 0xFF52 }, -{ 0xFF53, 0xFF33, 0xFF53 }, -{ 0xFF54, 0xFF34, 0xFF54 }, -{ 0xFF55, 0xFF35, 0xFF55 }, -{ 0xFF56, 0xFF36, 0xFF56 }, -{ 0xFF57, 0xFF37, 0xFF57 }, -{ 0xFF58, 0xFF38, 0xFF58 }, -{ 0xFF59, 0xFF39, 0xFF59 }, -{ 0xFF5A, 0xFF3A, 0xFF5A }, -{ 0xFF66, 0xFF66, 0xFF66 }, -{ 0xFF67, 0xFF67, 0xFF67 }, -{ 0xFF68, 0xFF68, 0xFF68 }, -{ 0xFF69, 0xFF69, 0xFF69 }, -{ 0xFF6A, 0xFF6A, 0xFF6A }, -{ 0xFF6B, 0xFF6B, 0xFF6B }, -{ 0xFF6C, 0xFF6C, 0xFF6C }, -{ 0xFF6D, 0xFF6D, 0xFF6D }, -{ 0xFF6E, 0xFF6E, 0xFF6E }, -{ 0xFF6F, 0xFF6F, 0xFF6F }, -{ 0xFF70, 0xFF70, 0xFF70 }, -{ 0xFF71, 0xFF71, 0xFF71 }, -{ 0xFF72, 0xFF72, 0xFF72 }, -{ 0xFF73, 0xFF73, 0xFF73 }, -{ 0xFF74, 0xFF74, 0xFF74 }, -{ 0xFF75, 0xFF75, 0xFF75 }, -{ 0xFF76, 0xFF76, 0xFF76 }, -{ 0xFF77, 0xFF77, 0xFF77 }, -{ 0xFF78, 0xFF78, 0xFF78 }, -{ 0xFF79, 0xFF79, 0xFF79 }, -{ 0xFF7A, 0xFF7A, 0xFF7A }, -{ 0xFF7B, 0xFF7B, 0xFF7B }, -{ 0xFF7C, 0xFF7C, 0xFF7C }, -{ 0xFF7D, 0xFF7D, 0xFF7D }, -{ 0xFF7E, 0xFF7E, 0xFF7E }, -{ 0xFF7F, 0xFF7F, 0xFF7F }, -{ 0xFF80, 0xFF80, 0xFF80 }, -{ 0xFF81, 0xFF81, 0xFF81 }, -{ 0xFF82, 0xFF82, 0xFF82 }, -{ 0xFF83, 0xFF83, 0xFF83 }, -{ 0xFF84, 0xFF84, 0xFF84 }, -{ 0xFF85, 0xFF85, 0xFF85 }, -{ 0xFF86, 0xFF86, 0xFF86 }, -{ 0xFF87, 0xFF87, 0xFF87 }, -{ 0xFF88, 0xFF88, 0xFF88 }, -{ 0xFF89, 0xFF89, 0xFF89 }, -{ 0xFF8A, 0xFF8A, 0xFF8A }, -{ 0xFF8B, 0xFF8B, 0xFF8B }, -{ 0xFF8C, 0xFF8C, 0xFF8C }, -{ 0xFF8D, 0xFF8D, 0xFF8D }, -{ 0xFF8E, 0xFF8E, 0xFF8E }, -{ 0xFF8F, 0xFF8F, 0xFF8F }, -{ 0xFF90, 0xFF90, 0xFF90 }, -{ 0xFF91, 0xFF91, 0xFF91 }, -{ 0xFF92, 0xFF92, 0xFF92 }, -{ 0xFF93, 0xFF93, 0xFF93 }, -{ 0xFF94, 0xFF94, 0xFF94 }, -{ 0xFF95, 0xFF95, 0xFF95 }, -{ 0xFF96, 0xFF96, 0xFF96 }, -{ 0xFF97, 0xFF97, 0xFF97 }, -{ 0xFF98, 0xFF98, 0xFF98 }, -{ 0xFF99, 0xFF99, 0xFF99 }, -{ 0xFF9A, 0xFF9A, 0xFF9A }, -{ 0xFF9B, 0xFF9B, 0xFF9B }, -{ 0xFF9C, 0xFF9C, 0xFF9C }, -{ 0xFF9D, 0xFF9D, 0xFF9D }, -{ 0xFF9E, 0xFF9E, 0xFF9E }, -{ 0xFF9F, 0xFF9F, 0xFF9F }, -{ 0xFFA0, 0xFFA0, 0xFFA0 }, -{ 0xFFA1, 0xFFA1, 0xFFA1 }, -{ 0xFFA2, 0xFFA2, 0xFFA2 }, -{ 0xFFA3, 0xFFA3, 0xFFA3 }, -{ 0xFFA4, 0xFFA4, 0xFFA4 }, -{ 0xFFA5, 0xFFA5, 0xFFA5 }, -{ 0xFFA6, 0xFFA6, 0xFFA6 }, -{ 0xFFA7, 0xFFA7, 0xFFA7 }, -{ 0xFFA8, 0xFFA8, 0xFFA8 }, -{ 0xFFA9, 0xFFA9, 0xFFA9 }, -{ 0xFFAA, 0xFFAA, 0xFFAA }, -{ 0xFFAB, 0xFFAB, 0xFFAB }, -{ 0xFFAC, 0xFFAC, 0xFFAC }, -{ 0xFFAD, 0xFFAD, 0xFFAD }, -{ 0xFFAE, 0xFFAE, 0xFFAE }, -{ 0xFFAF, 0xFFAF, 0xFFAF }, -{ 0xFFB0, 0xFFB0, 0xFFB0 }, -{ 0xFFB1, 0xFFB1, 0xFFB1 }, -{ 0xFFB2, 0xFFB2, 0xFFB2 }, -{ 0xFFB3, 0xFFB3, 0xFFB3 }, -{ 0xFFB4, 0xFFB4, 0xFFB4 }, -{ 0xFFB5, 0xFFB5, 0xFFB5 }, -{ 0xFFB6, 0xFFB6, 0xFFB6 }, -{ 0xFFB7, 0xFFB7, 0xFFB7 }, -{ 0xFFB8, 0xFFB8, 0xFFB8 }, -{ 0xFFB9, 0xFFB9, 0xFFB9 }, -{ 0xFFBA, 0xFFBA, 0xFFBA }, -{ 0xFFBB, 0xFFBB, 0xFFBB }, -{ 0xFFBC, 0xFFBC, 0xFFBC }, -{ 0xFFBD, 0xFFBD, 0xFFBD }, -{ 0xFFBE, 0xFFBE, 0xFFBE }, -{ 0xFFC2, 0xFFC2, 0xFFC2 }, -{ 0xFFC3, 0xFFC3, 0xFFC3 }, -{ 0xFFC4, 0xFFC4, 0xFFC4 }, -{ 0xFFC5, 0xFFC5, 0xFFC5 }, -{ 0xFFC6, 0xFFC6, 0xFFC6 }, -{ 0xFFC7, 0xFFC7, 0xFFC7 }, -{ 0xFFCA, 0xFFCA, 0xFFCA }, -{ 0xFFCB, 0xFFCB, 0xFFCB }, -{ 0xFFCC, 0xFFCC, 0xFFCC }, -{ 0xFFCD, 0xFFCD, 0xFFCD }, -{ 0xFFCE, 0xFFCE, 0xFFCE }, -{ 0xFFCF, 0xFFCF, 0xFFCF }, -{ 0xFFD2, 0xFFD2, 0xFFD2 }, -{ 0xFFD3, 0xFFD3, 0xFFD3 }, -{ 0xFFD4, 0xFFD4, 0xFFD4 }, -{ 0xFFD5, 0xFFD5, 0xFFD5 }, -{ 0xFFD6, 0xFFD6, 0xFFD6 }, -{ 0xFFD7, 0xFFD7, 0xFFD7 }, -{ 0xFFDA, 0xFFDA, 0xFFDA }, -{ 0xFFDB, 0xFFDB, 0xFFDB }, -{ 0xFFDC, 0xFFDC, 0xFFDC } -}; + {0x0041, 0x0041, 0x0061}, {0x0042, 0x0042, 0x0062}, + {0x0043, 0x0043, 0x0063}, {0x0044, 0x0044, 0x0064}, + {0x0045, 0x0045, 0x0065}, {0x0046, 0x0046, 0x0066}, + {0x0047, 0x0047, 0x0067}, {0x0048, 0x0048, 0x0068}, + {0x0049, 0x0049, 0x0069}, {0x004A, 0x004A, 0x006A}, + {0x004B, 0x004B, 0x006B}, {0x004C, 0x004C, 0x006C}, + {0x004D, 0x004D, 0x006D}, {0x004E, 0x004E, 0x006E}, + {0x004F, 0x004F, 0x006F}, {0x0050, 0x0050, 0x0070}, + {0x0051, 0x0051, 0x0071}, {0x0052, 0x0052, 0x0072}, + {0x0053, 0x0053, 0x0073}, {0x0054, 0x0054, 0x0074}, + {0x0055, 0x0055, 0x0075}, {0x0056, 0x0056, 0x0076}, + {0x0057, 0x0057, 0x0077}, {0x0058, 0x0058, 0x0078}, + {0x0059, 0x0059, 0x0079}, {0x005A, 0x005A, 0x007A}, + {0x0061, 0x0041, 0x0061}, {0x0062, 0x0042, 0x0062}, + {0x0063, 0x0043, 0x0063}, {0x0064, 0x0044, 0x0064}, + {0x0065, 0x0045, 0x0065}, {0x0066, 0x0046, 0x0066}, + {0x0067, 0x0047, 0x0067}, {0x0068, 0x0048, 0x0068}, + {0x0069, 0x0049, 0x0069}, {0x006A, 0x004A, 0x006A}, + {0x006B, 0x004B, 0x006B}, {0x006C, 0x004C, 0x006C}, + {0x006D, 0x004D, 0x006D}, {0x006E, 0x004E, 0x006E}, + {0x006F, 0x004F, 0x006F}, {0x0070, 0x0050, 0x0070}, + {0x0071, 0x0051, 0x0071}, {0x0072, 0x0052, 0x0072}, + {0x0073, 0x0053, 0x0073}, {0x0074, 0x0054, 0x0074}, + {0x0075, 0x0055, 0x0075}, {0x0076, 0x0056, 0x0076}, + {0x0077, 0x0057, 0x0077}, {0x0078, 0x0058, 0x0078}, + {0x0079, 0x0059, 0x0079}, {0x007A, 0x005A, 0x007A}, + {0x00AA, 0x00AA, 0x00AA}, {0x00B5, 0x039C, 0x00B5}, + {0x00BA, 0x00BA, 0x00BA}, {0x00C0, 0x00C0, 0x00E0}, + {0x00C1, 0x00C1, 0x00E1}, {0x00C2, 0x00C2, 0x00E2}, + {0x00C3, 0x00C3, 0x00E3}, {0x00C4, 0x00C4, 0x00E4}, + {0x00C5, 0x00C5, 0x00E5}, {0x00C6, 0x00C6, 0x00E6}, + {0x00C7, 0x00C7, 0x00E7}, {0x00C8, 0x00C8, 0x00E8}, + {0x00C9, 0x00C9, 0x00E9}, {0x00CA, 0x00CA, 0x00EA}, + {0x00CB, 0x00CB, 0x00EB}, {0x00CC, 0x00CC, 0x00EC}, + {0x00CD, 0x00CD, 0x00ED}, {0x00CE, 0x00CE, 0x00EE}, + {0x00CF, 0x00CF, 0x00EF}, {0x00D0, 0x00D0, 0x00F0}, + {0x00D1, 0x00D1, 0x00F1}, {0x00D2, 0x00D2, 0x00F2}, + {0x00D3, 0x00D3, 0x00F3}, {0x00D4, 0x00D4, 0x00F4}, + {0x00D5, 0x00D5, 0x00F5}, {0x00D6, 0x00D6, 0x00F6}, + {0x00D8, 0x00D8, 0x00F8}, {0x00D9, 0x00D9, 0x00F9}, + {0x00DA, 0x00DA, 0x00FA}, {0x00DB, 0x00DB, 0x00FB}, + {0x00DC, 0x00DC, 0x00FC}, {0x00DD, 0x00DD, 0x00FD}, + {0x00DE, 0x00DE, 0x00FE}, {0x00DF, 0x00DF, 0x00DF}, + {0x00E0, 0x00C0, 0x00E0}, {0x00E1, 0x00C1, 0x00E1}, + {0x00E2, 0x00C2, 0x00E2}, {0x00E3, 0x00C3, 0x00E3}, + {0x00E4, 0x00C4, 0x00E4}, {0x00E5, 0x00C5, 0x00E5}, + {0x00E6, 0x00C6, 0x00E6}, {0x00E7, 0x00C7, 0x00E7}, + {0x00E8, 0x00C8, 0x00E8}, {0x00E9, 0x00C9, 0x00E9}, + {0x00EA, 0x00CA, 0x00EA}, {0x00EB, 0x00CB, 0x00EB}, + {0x00EC, 0x00CC, 0x00EC}, {0x00ED, 0x00CD, 0x00ED}, + {0x00EE, 0x00CE, 0x00EE}, {0x00EF, 0x00CF, 0x00EF}, + {0x00F0, 0x00D0, 0x00F0}, {0x00F1, 0x00D1, 0x00F1}, + {0x00F2, 0x00D2, 0x00F2}, {0x00F3, 0x00D3, 0x00F3}, + {0x00F4, 0x00D4, 0x00F4}, {0x00F5, 0x00D5, 0x00F5}, + {0x00F6, 0x00D6, 0x00F6}, {0x00F8, 0x00D8, 0x00F8}, + {0x00F9, 0x00D9, 0x00F9}, {0x00FA, 0x00DA, 0x00FA}, + {0x00FB, 0x00DB, 0x00FB}, {0x00FC, 0x00DC, 0x00FC}, + {0x00FD, 0x00DD, 0x00FD}, {0x00FE, 0x00DE, 0x00FE}, + {0x00FF, 0x0178, 0x00FF}, {0x0100, 0x0100, 0x0101}, + {0x0101, 0x0100, 0x0101}, {0x0102, 0x0102, 0x0103}, + {0x0103, 0x0102, 0x0103}, {0x0104, 0x0104, 0x0105}, + {0x0105, 0x0104, 0x0105}, {0x0106, 0x0106, 0x0107}, + {0x0107, 0x0106, 0x0107}, {0x0108, 0x0108, 0x0109}, + {0x0109, 0x0108, 0x0109}, {0x010A, 0x010A, 0x010B}, + {0x010B, 0x010A, 0x010B}, {0x010C, 0x010C, 0x010D}, + {0x010D, 0x010C, 0x010D}, {0x010E, 0x010E, 0x010F}, + {0x010F, 0x010E, 0x010F}, {0x0110, 0x0110, 0x0111}, + {0x0111, 0x0110, 0x0111}, {0x0112, 0x0112, 0x0113}, + {0x0113, 0x0112, 0x0113}, {0x0114, 0x0114, 0x0115}, + {0x0115, 0x0114, 0x0115}, {0x0116, 0x0116, 0x0117}, + {0x0117, 0x0116, 0x0117}, {0x0118, 0x0118, 0x0119}, + {0x0119, 0x0118, 0x0119}, {0x011A, 0x011A, 0x011B}, + {0x011B, 0x011A, 0x011B}, {0x011C, 0x011C, 0x011D}, + {0x011D, 0x011C, 0x011D}, {0x011E, 0x011E, 0x011F}, + {0x011F, 0x011E, 0x011F}, {0x0120, 0x0120, 0x0121}, + {0x0121, 0x0120, 0x0121}, {0x0122, 0x0122, 0x0123}, + {0x0123, 0x0122, 0x0123}, {0x0124, 0x0124, 0x0125}, + {0x0125, 0x0124, 0x0125}, {0x0126, 0x0126, 0x0127}, + {0x0127, 0x0126, 0x0127}, {0x0128, 0x0128, 0x0129}, + {0x0129, 0x0128, 0x0129}, {0x012A, 0x012A, 0x012B}, + {0x012B, 0x012A, 0x012B}, {0x012C, 0x012C, 0x012D}, + {0x012D, 0x012C, 0x012D}, {0x012E, 0x012E, 0x012F}, + {0x012F, 0x012E, 0x012F}, {0x0130, 0x0130, 0x0069}, + {0x0131, 0x0049, 0x0131}, {0x0132, 0x0132, 0x0133}, + {0x0133, 0x0132, 0x0133}, {0x0134, 0x0134, 0x0135}, + {0x0135, 0x0134, 0x0135}, {0x0136, 0x0136, 0x0137}, + {0x0137, 0x0136, 0x0137}, {0x0138, 0x0138, 0x0138}, + {0x0139, 0x0139, 0x013A}, {0x013A, 0x0139, 0x013A}, + {0x013B, 0x013B, 0x013C}, {0x013C, 0x013B, 0x013C}, + {0x013D, 0x013D, 0x013E}, {0x013E, 0x013D, 0x013E}, + {0x013F, 0x013F, 0x0140}, {0x0140, 0x013F, 0x0140}, + {0x0141, 0x0141, 0x0142}, {0x0142, 0x0141, 0x0142}, + {0x0143, 0x0143, 0x0144}, {0x0144, 0x0143, 0x0144}, + {0x0145, 0x0145, 0x0146}, {0x0146, 0x0145, 0x0146}, + {0x0147, 0x0147, 0x0148}, {0x0148, 0x0147, 0x0148}, + {0x0149, 0x0149, 0x0149}, {0x014A, 0x014A, 0x014B}, + {0x014B, 0x014A, 0x014B}, {0x014C, 0x014C, 0x014D}, + {0x014D, 0x014C, 0x014D}, {0x014E, 0x014E, 0x014F}, + {0x014F, 0x014E, 0x014F}, {0x0150, 0x0150, 0x0151}, + {0x0151, 0x0150, 0x0151}, {0x0152, 0x0152, 0x0153}, + {0x0153, 0x0152, 0x0153}, {0x0154, 0x0154, 0x0155}, + {0x0155, 0x0154, 0x0155}, {0x0156, 0x0156, 0x0157}, + {0x0157, 0x0156, 0x0157}, {0x0158, 0x0158, 0x0159}, + {0x0159, 0x0158, 0x0159}, {0x015A, 0x015A, 0x015B}, + {0x015B, 0x015A, 0x015B}, {0x015C, 0x015C, 0x015D}, + {0x015D, 0x015C, 0x015D}, {0x015E, 0x015E, 0x015F}, + {0x015F, 0x015E, 0x015F}, {0x0160, 0x0160, 0x0161}, + {0x0161, 0x0160, 0x0161}, {0x0162, 0x0162, 0x0163}, + {0x0163, 0x0162, 0x0163}, {0x0164, 0x0164, 0x0165}, + {0x0165, 0x0164, 0x0165}, {0x0166, 0x0166, 0x0167}, + {0x0167, 0x0166, 0x0167}, {0x0168, 0x0168, 0x0169}, + {0x0169, 0x0168, 0x0169}, {0x016A, 0x016A, 0x016B}, + {0x016B, 0x016A, 0x016B}, {0x016C, 0x016C, 0x016D}, + {0x016D, 0x016C, 0x016D}, {0x016E, 0x016E, 0x016F}, + {0x016F, 0x016E, 0x016F}, {0x0170, 0x0170, 0x0171}, + {0x0171, 0x0170, 0x0171}, {0x0172, 0x0172, 0x0173}, + {0x0173, 0x0172, 0x0173}, {0x0174, 0x0174, 0x0175}, + {0x0175, 0x0174, 0x0175}, {0x0176, 0x0176, 0x0177}, + {0x0177, 0x0176, 0x0177}, {0x0178, 0x0178, 0x00FF}, + {0x0179, 0x0179, 0x017A}, {0x017A, 0x0179, 0x017A}, + {0x017B, 0x017B, 0x017C}, {0x017C, 0x017B, 0x017C}, + {0x017D, 0x017D, 0x017E}, {0x017E, 0x017D, 0x017E}, + {0x017F, 0x0053, 0x017F}, {0x0180, 0x0180, 0x0180}, + {0x0181, 0x0181, 0x0253}, {0x0182, 0x0182, 0x0183}, + {0x0183, 0x0182, 0x0183}, {0x0184, 0x0184, 0x0185}, + {0x0185, 0x0184, 0x0185}, {0x0186, 0x0186, 0x0254}, + {0x0187, 0x0187, 0x0188}, {0x0188, 0x0187, 0x0188}, + {0x0189, 0x0189, 0x0256}, {0x018A, 0x018A, 0x0257}, + {0x018B, 0x018B, 0x018C}, {0x018C, 0x018B, 0x018C}, + {0x018D, 0x018D, 0x018D}, {0x018E, 0x018E, 0x01DD}, + {0x018F, 0x018F, 0x0259}, {0x0190, 0x0190, 0x025B}, + {0x0191, 0x0191, 0x0192}, {0x0192, 0x0191, 0x0192}, + {0x0193, 0x0193, 0x0260}, {0x0194, 0x0194, 0x0263}, + {0x0195, 0x01F6, 0x0195}, {0x0196, 0x0196, 0x0269}, + {0x0197, 0x0197, 0x0268}, {0x0198, 0x0198, 0x0199}, + {0x0199, 0x0198, 0x0199}, {0x019A, 0x023D, 0x019A}, + {0x019B, 0x019B, 0x019B}, {0x019C, 0x019C, 0x026F}, + {0x019D, 0x019D, 0x0272}, {0x019E, 0x0220, 0x019E}, + {0x019F, 0x019F, 0x0275}, {0x01A0, 0x01A0, 0x01A1}, + {0x01A1, 0x01A0, 0x01A1}, {0x01A2, 0x01A2, 0x01A3}, + {0x01A3, 0x01A2, 0x01A3}, {0x01A4, 0x01A4, 0x01A5}, + {0x01A5, 0x01A4, 0x01A5}, {0x01A6, 0x01A6, 0x0280}, + {0x01A7, 0x01A7, 0x01A8}, {0x01A8, 0x01A7, 0x01A8}, + {0x01A9, 0x01A9, 0x0283}, {0x01AA, 0x01AA, 0x01AA}, + {0x01AB, 0x01AB, 0x01AB}, {0x01AC, 0x01AC, 0x01AD}, + {0x01AD, 0x01AC, 0x01AD}, {0x01AE, 0x01AE, 0x0288}, + {0x01AF, 0x01AF, 0x01B0}, {0x01B0, 0x01AF, 0x01B0}, + {0x01B1, 0x01B1, 0x028A}, {0x01B2, 0x01B2, 0x028B}, + {0x01B3, 0x01B3, 0x01B4}, {0x01B4, 0x01B3, 0x01B4}, + {0x01B5, 0x01B5, 0x01B6}, {0x01B6, 0x01B5, 0x01B6}, + {0x01B7, 0x01B7, 0x0292}, {0x01B8, 0x01B8, 0x01B9}, + {0x01B9, 0x01B8, 0x01B9}, {0x01BA, 0x01BA, 0x01BA}, + {0x01BB, 0x01BB, 0x01BB}, {0x01BC, 0x01BC, 0x01BD}, + {0x01BD, 0x01BC, 0x01BD}, {0x01BE, 0x01BE, 0x01BE}, + {0x01BF, 0x01F7, 0x01BF}, {0x01C0, 0x01C0, 0x01C0}, + {0x01C1, 0x01C1, 0x01C1}, {0x01C2, 0x01C2, 0x01C2}, + {0x01C3, 0x01C3, 0x01C3}, {0x01C4, 0x01C4, 0x01C6}, + {0x01C5, 0x01C4, 0x01C6}, {0x01C6, 0x01C4, 0x01C6}, + {0x01C7, 0x01C7, 0x01C9}, {0x01C8, 0x01C7, 0x01C9}, + {0x01C9, 0x01C7, 0x01C9}, {0x01CA, 0x01CA, 0x01CC}, + {0x01CB, 0x01CA, 0x01CC}, {0x01CC, 0x01CA, 0x01CC}, + {0x01CD, 0x01CD, 0x01CE}, {0x01CE, 0x01CD, 0x01CE}, + {0x01CF, 0x01CF, 0x01D0}, {0x01D0, 0x01CF, 0x01D0}, + {0x01D1, 0x01D1, 0x01D2}, {0x01D2, 0x01D1, 0x01D2}, + {0x01D3, 0x01D3, 0x01D4}, {0x01D4, 0x01D3, 0x01D4}, + {0x01D5, 0x01D5, 0x01D6}, {0x01D6, 0x01D5, 0x01D6}, + {0x01D7, 0x01D7, 0x01D8}, {0x01D8, 0x01D7, 0x01D8}, + {0x01D9, 0x01D9, 0x01DA}, {0x01DA, 0x01D9, 0x01DA}, + {0x01DB, 0x01DB, 0x01DC}, {0x01DC, 0x01DB, 0x01DC}, + {0x01DD, 0x018E, 0x01DD}, {0x01DE, 0x01DE, 0x01DF}, + {0x01DF, 0x01DE, 0x01DF}, {0x01E0, 0x01E0, 0x01E1}, + {0x01E1, 0x01E0, 0x01E1}, {0x01E2, 0x01E2, 0x01E3}, + {0x01E3, 0x01E2, 0x01E3}, {0x01E4, 0x01E4, 0x01E5}, + {0x01E5, 0x01E4, 0x01E5}, {0x01E6, 0x01E6, 0x01E7}, + {0x01E7, 0x01E6, 0x01E7}, {0x01E8, 0x01E8, 0x01E9}, + {0x01E9, 0x01E8, 0x01E9}, {0x01EA, 0x01EA, 0x01EB}, + {0x01EB, 0x01EA, 0x01EB}, {0x01EC, 0x01EC, 0x01ED}, + {0x01ED, 0x01EC, 0x01ED}, {0x01EE, 0x01EE, 0x01EF}, + {0x01EF, 0x01EE, 0x01EF}, {0x01F0, 0x01F0, 0x01F0}, + {0x01F1, 0x01F1, 0x01F3}, {0x01F2, 0x01F1, 0x01F3}, + {0x01F3, 0x01F1, 0x01F3}, {0x01F4, 0x01F4, 0x01F5}, + {0x01F5, 0x01F4, 0x01F5}, {0x01F6, 0x01F6, 0x0195}, + {0x01F7, 0x01F7, 0x01BF}, {0x01F8, 0x01F8, 0x01F9}, + {0x01F9, 0x01F8, 0x01F9}, {0x01FA, 0x01FA, 0x01FB}, + {0x01FB, 0x01FA, 0x01FB}, {0x01FC, 0x01FC, 0x01FD}, + {0x01FD, 0x01FC, 0x01FD}, {0x01FE, 0x01FE, 0x01FF}, + {0x01FF, 0x01FE, 0x01FF}, {0x0200, 0x0200, 0x0201}, + {0x0201, 0x0200, 0x0201}, {0x0202, 0x0202, 0x0203}, + {0x0203, 0x0202, 0x0203}, {0x0204, 0x0204, 0x0205}, + {0x0205, 0x0204, 0x0205}, {0x0206, 0x0206, 0x0207}, + {0x0207, 0x0206, 0x0207}, {0x0208, 0x0208, 0x0209}, + {0x0209, 0x0208, 0x0209}, {0x020A, 0x020A, 0x020B}, + {0x020B, 0x020A, 0x020B}, {0x020C, 0x020C, 0x020D}, + {0x020D, 0x020C, 0x020D}, {0x020E, 0x020E, 0x020F}, + {0x020F, 0x020E, 0x020F}, {0x0210, 0x0210, 0x0211}, + {0x0211, 0x0210, 0x0211}, {0x0212, 0x0212, 0x0213}, + {0x0213, 0x0212, 0x0213}, {0x0214, 0x0214, 0x0215}, + {0x0215, 0x0214, 0x0215}, {0x0216, 0x0216, 0x0217}, + {0x0217, 0x0216, 0x0217}, {0x0218, 0x0218, 0x0219}, + {0x0219, 0x0218, 0x0219}, {0x021A, 0x021A, 0x021B}, + {0x021B, 0x021A, 0x021B}, {0x021C, 0x021C, 0x021D}, + {0x021D, 0x021C, 0x021D}, {0x021E, 0x021E, 0x021F}, + {0x021F, 0x021E, 0x021F}, {0x0220, 0x0220, 0x019E}, + {0x0221, 0x0221, 0x0221}, {0x0222, 0x0222, 0x0223}, + {0x0223, 0x0222, 0x0223}, {0x0224, 0x0224, 0x0225}, + {0x0225, 0x0224, 0x0225}, {0x0226, 0x0226, 0x0227}, + {0x0227, 0x0226, 0x0227}, {0x0228, 0x0228, 0x0229}, + {0x0229, 0x0228, 0x0229}, {0x022A, 0x022A, 0x022B}, + {0x022B, 0x022A, 0x022B}, {0x022C, 0x022C, 0x022D}, + {0x022D, 0x022C, 0x022D}, {0x022E, 0x022E, 0x022F}, + {0x022F, 0x022E, 0x022F}, {0x0230, 0x0230, 0x0231}, + {0x0231, 0x0230, 0x0231}, {0x0232, 0x0232, 0x0233}, + {0x0233, 0x0232, 0x0233}, {0x0234, 0x0234, 0x0234}, + {0x0235, 0x0235, 0x0235}, {0x0236, 0x0236, 0x0236}, + {0x0237, 0x0237, 0x0237}, {0x0238, 0x0238, 0x0238}, + {0x0239, 0x0239, 0x0239}, {0x023A, 0x023A, 0x023A}, + {0x023B, 0x023B, 0x023C}, {0x023C, 0x023B, 0x023C}, + {0x023D, 0x023D, 0x019A}, {0x023E, 0x023E, 0x023E}, + {0x023F, 0x023F, 0x023F}, {0x0240, 0x0240, 0x0240}, + {0x0241, 0x0241, 0x0294}, {0x0250, 0x0250, 0x0250}, + {0x0251, 0x0251, 0x0251}, {0x0252, 0x0252, 0x0252}, + {0x0253, 0x0181, 0x0253}, {0x0254, 0x0186, 0x0254}, + {0x0255, 0x0255, 0x0255}, {0x0256, 0x0189, 0x0256}, + {0x0257, 0x018A, 0x0257}, {0x0258, 0x0258, 0x0258}, + {0x0259, 0x018F, 0x0259}, {0x025A, 0x025A, 0x025A}, + {0x025B, 0x0190, 0x025B}, {0x025C, 0x025C, 0x025C}, + {0x025D, 0x025D, 0x025D}, {0x025E, 0x025E, 0x025E}, + {0x025F, 0x025F, 0x025F}, {0x0260, 0x0193, 0x0260}, + {0x0261, 0x0261, 0x0261}, {0x0262, 0x0262, 0x0262}, + {0x0263, 0x0194, 0x0263}, {0x0264, 0x0264, 0x0264}, + {0x0265, 0x0265, 0x0265}, {0x0266, 0x0266, 0x0266}, + {0x0267, 0x0267, 0x0267}, {0x0268, 0x0197, 0x0268}, + {0x0269, 0x0196, 0x0269}, {0x026A, 0x026A, 0x026A}, + {0x026B, 0x026B, 0x026B}, {0x026C, 0x026C, 0x026C}, + {0x026D, 0x026D, 0x026D}, {0x026E, 0x026E, 0x026E}, + {0x026F, 0x019C, 0x026F}, {0x0270, 0x0270, 0x0270}, + {0x0271, 0x0271, 0x0271}, {0x0272, 0x019D, 0x0272}, + {0x0273, 0x0273, 0x0273}, {0x0274, 0x0274, 0x0274}, + {0x0275, 0x019F, 0x0275}, {0x0276, 0x0276, 0x0276}, + {0x0277, 0x0277, 0x0277}, {0x0278, 0x0278, 0x0278}, + {0x0279, 0x0279, 0x0279}, {0x027A, 0x027A, 0x027A}, + {0x027B, 0x027B, 0x027B}, {0x027C, 0x027C, 0x027C}, + {0x027D, 0x027D, 0x027D}, {0x027E, 0x027E, 0x027E}, + {0x027F, 0x027F, 0x027F}, {0x0280, 0x01A6, 0x0280}, + {0x0281, 0x0281, 0x0281}, {0x0282, 0x0282, 0x0282}, + {0x0283, 0x01A9, 0x0283}, {0x0284, 0x0284, 0x0284}, + {0x0285, 0x0285, 0x0285}, {0x0286, 0x0286, 0x0286}, + {0x0287, 0x0287, 0x0287}, {0x0288, 0x01AE, 0x0288}, + {0x0289, 0x0289, 0x0289}, {0x028A, 0x01B1, 0x028A}, + {0x028B, 0x01B2, 0x028B}, {0x028C, 0x028C, 0x028C}, + {0x028D, 0x028D, 0x028D}, {0x028E, 0x028E, 0x028E}, + {0x028F, 0x028F, 0x028F}, {0x0290, 0x0290, 0x0290}, + {0x0291, 0x0291, 0x0291}, {0x0292, 0x01B7, 0x0292}, + {0x0293, 0x0293, 0x0293}, {0x0294, 0x0241, 0x0294}, + {0x0295, 0x0295, 0x0295}, {0x0296, 0x0296, 0x0296}, + {0x0297, 0x0297, 0x0297}, {0x0298, 0x0298, 0x0298}, + {0x0299, 0x0299, 0x0299}, {0x029A, 0x029A, 0x029A}, + {0x029B, 0x029B, 0x029B}, {0x029C, 0x029C, 0x029C}, + {0x029D, 0x029D, 0x029D}, {0x029E, 0x029E, 0x029E}, + {0x029F, 0x029F, 0x029F}, {0x02A0, 0x02A0, 0x02A0}, + {0x02A1, 0x02A1, 0x02A1}, {0x02A2, 0x02A2, 0x02A2}, + {0x02A3, 0x02A3, 0x02A3}, {0x02A4, 0x02A4, 0x02A4}, + {0x02A5, 0x02A5, 0x02A5}, {0x02A6, 0x02A6, 0x02A6}, + {0x02A7, 0x02A7, 0x02A7}, {0x02A8, 0x02A8, 0x02A8}, + {0x02A9, 0x02A9, 0x02A9}, {0x02AA, 0x02AA, 0x02AA}, + {0x02AB, 0x02AB, 0x02AB}, {0x02AC, 0x02AC, 0x02AC}, + {0x02AD, 0x02AD, 0x02AD}, {0x02AE, 0x02AE, 0x02AE}, + {0x02AF, 0x02AF, 0x02AF}, {0x02B0, 0x02B0, 0x02B0}, + {0x02B1, 0x02B1, 0x02B1}, {0x02B2, 0x02B2, 0x02B2}, + {0x02B3, 0x02B3, 0x02B3}, {0x02B4, 0x02B4, 0x02B4}, + {0x02B5, 0x02B5, 0x02B5}, {0x02B6, 0x02B6, 0x02B6}, + {0x02B7, 0x02B7, 0x02B7}, {0x02B8, 0x02B8, 0x02B8}, + {0x02B9, 0x02B9, 0x02B9}, {0x02BA, 0x02BA, 0x02BA}, + {0x02BB, 0x02BB, 0x02BB}, {0x02BC, 0x02BC, 0x02BC}, + {0x02BD, 0x02BD, 0x02BD}, {0x02BE, 0x02BE, 0x02BE}, + {0x02BF, 0x02BF, 0x02BF}, {0x02C0, 0x02C0, 0x02C0}, + {0x02C1, 0x02C1, 0x02C1}, {0x02C6, 0x02C6, 0x02C6}, + {0x02C7, 0x02C7, 0x02C7}, {0x02C8, 0x02C8, 0x02C8}, + {0x02C9, 0x02C9, 0x02C9}, {0x02CA, 0x02CA, 0x02CA}, + {0x02CB, 0x02CB, 0x02CB}, {0x02CC, 0x02CC, 0x02CC}, + {0x02CD, 0x02CD, 0x02CD}, {0x02CE, 0x02CE, 0x02CE}, + {0x02CF, 0x02CF, 0x02CF}, {0x02D0, 0x02D0, 0x02D0}, + {0x02D1, 0x02D1, 0x02D1}, {0x02E0, 0x02E0, 0x02E0}, + {0x02E1, 0x02E1, 0x02E1}, {0x02E2, 0x02E2, 0x02E2}, + {0x02E3, 0x02E3, 0x02E3}, {0x02E4, 0x02E4, 0x02E4}, + {0x02EE, 0x02EE, 0x02EE}, {0x0300, 0x0300, 0x0300}, + {0x0301, 0x0301, 0x0301}, {0x0302, 0x0302, 0x0302}, + {0x0303, 0x0303, 0x0303}, {0x0304, 0x0304, 0x0304}, + {0x0305, 0x0305, 0x0305}, {0x0306, 0x0306, 0x0306}, + {0x0307, 0x0307, 0x0307}, {0x0308, 0x0308, 0x0308}, + {0x0309, 0x0309, 0x0309}, {0x030A, 0x030A, 0x030A}, + {0x030B, 0x030B, 0x030B}, {0x030C, 0x030C, 0x030C}, + {0x030D, 0x030D, 0x030D}, {0x030E, 0x030E, 0x030E}, + {0x030F, 0x030F, 0x030F}, {0x0310, 0x0310, 0x0310}, + {0x0311, 0x0311, 0x0311}, {0x0312, 0x0312, 0x0312}, + {0x0313, 0x0313, 0x0313}, {0x0314, 0x0314, 0x0314}, + {0x0315, 0x0315, 0x0315}, {0x0316, 0x0316, 0x0316}, + {0x0317, 0x0317, 0x0317}, {0x0318, 0x0318, 0x0318}, + {0x0319, 0x0319, 0x0319}, {0x031A, 0x031A, 0x031A}, + {0x031B, 0x031B, 0x031B}, {0x031C, 0x031C, 0x031C}, + {0x031D, 0x031D, 0x031D}, {0x031E, 0x031E, 0x031E}, + {0x031F, 0x031F, 0x031F}, {0x0320, 0x0320, 0x0320}, + {0x0321, 0x0321, 0x0321}, {0x0322, 0x0322, 0x0322}, + {0x0323, 0x0323, 0x0323}, {0x0324, 0x0324, 0x0324}, + {0x0325, 0x0325, 0x0325}, {0x0326, 0x0326, 0x0326}, + {0x0327, 0x0327, 0x0327}, {0x0328, 0x0328, 0x0328}, + {0x0329, 0x0329, 0x0329}, {0x032A, 0x032A, 0x032A}, + {0x032B, 0x032B, 0x032B}, {0x032C, 0x032C, 0x032C}, + {0x032D, 0x032D, 0x032D}, {0x032E, 0x032E, 0x032E}, + {0x032F, 0x032F, 0x032F}, {0x0330, 0x0330, 0x0330}, + {0x0331, 0x0331, 0x0331}, {0x0332, 0x0332, 0x0332}, + {0x0333, 0x0333, 0x0333}, {0x0334, 0x0334, 0x0334}, + {0x0335, 0x0335, 0x0335}, {0x0336, 0x0336, 0x0336}, + {0x0337, 0x0337, 0x0337}, {0x0338, 0x0338, 0x0338}, + {0x0339, 0x0339, 0x0339}, {0x033A, 0x033A, 0x033A}, + {0x033B, 0x033B, 0x033B}, {0x033C, 0x033C, 0x033C}, + {0x033D, 0x033D, 0x033D}, {0x033E, 0x033E, 0x033E}, + {0x033F, 0x033F, 0x033F}, {0x0340, 0x0340, 0x0340}, + {0x0341, 0x0341, 0x0341}, {0x0342, 0x0342, 0x0342}, + {0x0343, 0x0343, 0x0343}, {0x0344, 0x0344, 0x0344}, + {0x0345, 0x0399, 0x0345}, {0x0346, 0x0346, 0x0346}, + {0x0347, 0x0347, 0x0347}, {0x0348, 0x0348, 0x0348}, + {0x0349, 0x0349, 0x0349}, {0x034A, 0x034A, 0x034A}, + {0x034B, 0x034B, 0x034B}, {0x034C, 0x034C, 0x034C}, + {0x034D, 0x034D, 0x034D}, {0x034E, 0x034E, 0x034E}, + {0x034F, 0x034F, 0x034F}, {0x0350, 0x0350, 0x0350}, + {0x0351, 0x0351, 0x0351}, {0x0352, 0x0352, 0x0352}, + {0x0353, 0x0353, 0x0353}, {0x0354, 0x0354, 0x0354}, + {0x0355, 0x0355, 0x0355}, {0x0356, 0x0356, 0x0356}, + {0x0357, 0x0357, 0x0357}, {0x0358, 0x0358, 0x0358}, + {0x0359, 0x0359, 0x0359}, {0x035A, 0x035A, 0x035A}, + {0x035B, 0x035B, 0x035B}, {0x035C, 0x035C, 0x035C}, + {0x035D, 0x035D, 0x035D}, {0x035E, 0x035E, 0x035E}, + {0x035F, 0x035F, 0x035F}, {0x0360, 0x0360, 0x0360}, + {0x0361, 0x0361, 0x0361}, {0x0362, 0x0362, 0x0362}, + {0x0363, 0x0363, 0x0363}, {0x0364, 0x0364, 0x0364}, + {0x0365, 0x0365, 0x0365}, {0x0366, 0x0366, 0x0366}, + {0x0367, 0x0367, 0x0367}, {0x0368, 0x0368, 0x0368}, + {0x0369, 0x0369, 0x0369}, {0x036A, 0x036A, 0x036A}, + {0x036B, 0x036B, 0x036B}, {0x036C, 0x036C, 0x036C}, + {0x036D, 0x036D, 0x036D}, {0x036E, 0x036E, 0x036E}, + {0x036F, 0x036F, 0x036F}, {0x037A, 0x037A, 0x037A}, + {0x0386, 0x0386, 0x03AC}, {0x0388, 0x0388, 0x03AD}, + {0x0389, 0x0389, 0x03AE}, {0x038A, 0x038A, 0x03AF}, + {0x038C, 0x038C, 0x03CC}, {0x038E, 0x038E, 0x03CD}, + {0x038F, 0x038F, 0x03CE}, {0x0390, 0x0390, 0x0390}, + {0x0391, 0x0391, 0x03B1}, {0x0392, 0x0392, 0x03B2}, + {0x0393, 0x0393, 0x03B3}, {0x0394, 0x0394, 0x03B4}, + {0x0395, 0x0395, 0x03B5}, {0x0396, 0x0396, 0x03B6}, + {0x0397, 0x0397, 0x03B7}, {0x0398, 0x0398, 0x03B8}, + {0x0399, 0x0399, 0x03B9}, {0x039A, 0x039A, 0x03BA}, + {0x039B, 0x039B, 0x03BB}, {0x039C, 0x039C, 0x03BC}, + {0x039D, 0x039D, 0x03BD}, {0x039E, 0x039E, 0x03BE}, + {0x039F, 0x039F, 0x03BF}, {0x03A0, 0x03A0, 0x03C0}, + {0x03A1, 0x03A1, 0x03C1}, {0x03A3, 0x03A3, 0x03C3}, + {0x03A4, 0x03A4, 0x03C4}, {0x03A5, 0x03A5, 0x03C5}, + {0x03A6, 0x03A6, 0x03C6}, {0x03A7, 0x03A7, 0x03C7}, + {0x03A8, 0x03A8, 0x03C8}, {0x03A9, 0x03A9, 0x03C9}, + {0x03AA, 0x03AA, 0x03CA}, {0x03AB, 0x03AB, 0x03CB}, + {0x03AC, 0x0386, 0x03AC}, {0x03AD, 0x0388, 0x03AD}, + {0x03AE, 0x0389, 0x03AE}, {0x03AF, 0x038A, 0x03AF}, + {0x03B0, 0x03B0, 0x03B0}, {0x03B1, 0x0391, 0x03B1}, + {0x03B2, 0x0392, 0x03B2}, {0x03B3, 0x0393, 0x03B3}, + {0x03B4, 0x0394, 0x03B4}, {0x03B5, 0x0395, 0x03B5}, + {0x03B6, 0x0396, 0x03B6}, {0x03B7, 0x0397, 0x03B7}, + {0x03B8, 0x0398, 0x03B8}, {0x03B9, 0x0399, 0x03B9}, + {0x03BA, 0x039A, 0x03BA}, {0x03BB, 0x039B, 0x03BB}, + {0x03BC, 0x039C, 0x03BC}, {0x03BD, 0x039D, 0x03BD}, + {0x03BE, 0x039E, 0x03BE}, {0x03BF, 0x039F, 0x03BF}, + {0x03C0, 0x03A0, 0x03C0}, {0x03C1, 0x03A1, 0x03C1}, + {0x03C2, 0x03A3, 0x03C2}, {0x03C3, 0x03A3, 0x03C3}, + {0x03C4, 0x03A4, 0x03C4}, {0x03C5, 0x03A5, 0x03C5}, + {0x03C6, 0x03A6, 0x03C6}, {0x03C7, 0x03A7, 0x03C7}, + {0x03C8, 0x03A8, 0x03C8}, {0x03C9, 0x03A9, 0x03C9}, + {0x03CA, 0x03AA, 0x03CA}, {0x03CB, 0x03AB, 0x03CB}, + {0x03CC, 0x038C, 0x03CC}, {0x03CD, 0x038E, 0x03CD}, + {0x03CE, 0x038F, 0x03CE}, {0x03D0, 0x0392, 0x03D0}, + {0x03D1, 0x0398, 0x03D1}, {0x03D2, 0x03D2, 0x03D2}, + {0x03D3, 0x03D3, 0x03D3}, {0x03D4, 0x03D4, 0x03D4}, + {0x03D5, 0x03A6, 0x03D5}, {0x03D6, 0x03A0, 0x03D6}, + {0x03D7, 0x03D7, 0x03D7}, {0x03D8, 0x03D8, 0x03D9}, + {0x03D9, 0x03D8, 0x03D9}, {0x03DA, 0x03DA, 0x03DB}, + {0x03DB, 0x03DA, 0x03DB}, {0x03DC, 0x03DC, 0x03DD}, + {0x03DD, 0x03DC, 0x03DD}, {0x03DE, 0x03DE, 0x03DF}, + {0x03DF, 0x03DE, 0x03DF}, {0x03E0, 0x03E0, 0x03E1}, + {0x03E1, 0x03E0, 0x03E1}, {0x03E2, 0x03E2, 0x03E3}, + {0x03E3, 0x03E2, 0x03E3}, {0x03E4, 0x03E4, 0x03E5}, + {0x03E5, 0x03E4, 0x03E5}, {0x03E6, 0x03E6, 0x03E7}, + {0x03E7, 0x03E6, 0x03E7}, {0x03E8, 0x03E8, 0x03E9}, + {0x03E9, 0x03E8, 0x03E9}, {0x03EA, 0x03EA, 0x03EB}, + {0x03EB, 0x03EA, 0x03EB}, {0x03EC, 0x03EC, 0x03ED}, + {0x03ED, 0x03EC, 0x03ED}, {0x03EE, 0x03EE, 0x03EF}, + {0x03EF, 0x03EE, 0x03EF}, {0x03F0, 0x039A, 0x03F0}, + {0x03F1, 0x03A1, 0x03F1}, {0x03F2, 0x03F9, 0x03F2}, + {0x03F3, 0x03F3, 0x03F3}, {0x03F4, 0x03F4, 0x03B8}, + {0x03F5, 0x0395, 0x03F5}, {0x03F7, 0x03F7, 0x03F8}, + {0x03F8, 0x03F7, 0x03F8}, {0x03F9, 0x03F9, 0x03F2}, + {0x03FA, 0x03FA, 0x03FB}, {0x03FB, 0x03FA, 0x03FB}, + {0x03FC, 0x03FC, 0x03FC}, {0x03FD, 0x03FD, 0x03FD}, + {0x03FE, 0x03FE, 0x03FE}, {0x03FF, 0x03FF, 0x03FF}, + {0x0400, 0x0400, 0x0450}, {0x0401, 0x0401, 0x0451}, + {0x0402, 0x0402, 0x0452}, {0x0403, 0x0403, 0x0453}, + {0x0404, 0x0404, 0x0454}, {0x0405, 0x0405, 0x0455}, + {0x0406, 0x0406, 0x0456}, {0x0407, 0x0407, 0x0457}, + {0x0408, 0x0408, 0x0458}, {0x0409, 0x0409, 0x0459}, + {0x040A, 0x040A, 0x045A}, {0x040B, 0x040B, 0x045B}, + {0x040C, 0x040C, 0x045C}, {0x040D, 0x040D, 0x045D}, + {0x040E, 0x040E, 0x045E}, {0x040F, 0x040F, 0x045F}, + {0x0410, 0x0410, 0x0430}, {0x0411, 0x0411, 0x0431}, + {0x0412, 0x0412, 0x0432}, {0x0413, 0x0413, 0x0433}, + {0x0414, 0x0414, 0x0434}, {0x0415, 0x0415, 0x0435}, + {0x0416, 0x0416, 0x0436}, {0x0417, 0x0417, 0x0437}, + {0x0418, 0x0418, 0x0438}, {0x0419, 0x0419, 0x0439}, + {0x041A, 0x041A, 0x043A}, {0x041B, 0x041B, 0x043B}, + {0x041C, 0x041C, 0x043C}, {0x041D, 0x041D, 0x043D}, + {0x041E, 0x041E, 0x043E}, {0x041F, 0x041F, 0x043F}, + {0x0420, 0x0420, 0x0440}, {0x0421, 0x0421, 0x0441}, + {0x0422, 0x0422, 0x0442}, {0x0423, 0x0423, 0x0443}, + {0x0424, 0x0424, 0x0444}, {0x0425, 0x0425, 0x0445}, + {0x0426, 0x0426, 0x0446}, {0x0427, 0x0427, 0x0447}, + {0x0428, 0x0428, 0x0448}, {0x0429, 0x0429, 0x0449}, + {0x042A, 0x042A, 0x044A}, {0x042B, 0x042B, 0x044B}, + {0x042C, 0x042C, 0x044C}, {0x042D, 0x042D, 0x044D}, + {0x042E, 0x042E, 0x044E}, {0x042F, 0x042F, 0x044F}, + {0x0430, 0x0410, 0x0430}, {0x0431, 0x0411, 0x0431}, + {0x0432, 0x0412, 0x0432}, {0x0433, 0x0413, 0x0433}, + {0x0434, 0x0414, 0x0434}, {0x0435, 0x0415, 0x0435}, + {0x0436, 0x0416, 0x0436}, {0x0437, 0x0417, 0x0437}, + {0x0438, 0x0418, 0x0438}, {0x0439, 0x0419, 0x0439}, + {0x043A, 0x041A, 0x043A}, {0x043B, 0x041B, 0x043B}, + {0x043C, 0x041C, 0x043C}, {0x043D, 0x041D, 0x043D}, + {0x043E, 0x041E, 0x043E}, {0x043F, 0x041F, 0x043F}, + {0x0440, 0x0420, 0x0440}, {0x0441, 0x0421, 0x0441}, + {0x0442, 0x0422, 0x0442}, {0x0443, 0x0423, 0x0443}, + {0x0444, 0x0424, 0x0444}, {0x0445, 0x0425, 0x0445}, + {0x0446, 0x0426, 0x0446}, {0x0447, 0x0427, 0x0447}, + {0x0448, 0x0428, 0x0448}, {0x0449, 0x0429, 0x0449}, + {0x044A, 0x042A, 0x044A}, {0x044B, 0x042B, 0x044B}, + {0x044C, 0x042C, 0x044C}, {0x044D, 0x042D, 0x044D}, + {0x044E, 0x042E, 0x044E}, {0x044F, 0x042F, 0x044F}, + {0x0450, 0x0400, 0x0450}, {0x0451, 0x0401, 0x0451}, + {0x0452, 0x0402, 0x0452}, {0x0453, 0x0403, 0x0453}, + {0x0454, 0x0404, 0x0454}, {0x0455, 0x0405, 0x0455}, + {0x0456, 0x0406, 0x0456}, {0x0457, 0x0407, 0x0457}, + {0x0458, 0x0408, 0x0458}, {0x0459, 0x0409, 0x0459}, + {0x045A, 0x040A, 0x045A}, {0x045B, 0x040B, 0x045B}, + {0x045C, 0x040C, 0x045C}, {0x045D, 0x040D, 0x045D}, + {0x045E, 0x040E, 0x045E}, {0x045F, 0x040F, 0x045F}, + {0x0460, 0x0460, 0x0461}, {0x0461, 0x0460, 0x0461}, + {0x0462, 0x0462, 0x0463}, {0x0463, 0x0462, 0x0463}, + {0x0464, 0x0464, 0x0465}, {0x0465, 0x0464, 0x0465}, + {0x0466, 0x0466, 0x0467}, {0x0467, 0x0466, 0x0467}, + {0x0468, 0x0468, 0x0469}, {0x0469, 0x0468, 0x0469}, + {0x046A, 0x046A, 0x046B}, {0x046B, 0x046A, 0x046B}, + {0x046C, 0x046C, 0x046D}, {0x046D, 0x046C, 0x046D}, + {0x046E, 0x046E, 0x046F}, {0x046F, 0x046E, 0x046F}, + {0x0470, 0x0470, 0x0471}, {0x0471, 0x0470, 0x0471}, + {0x0472, 0x0472, 0x0473}, {0x0473, 0x0472, 0x0473}, + {0x0474, 0x0474, 0x0475}, {0x0475, 0x0474, 0x0475}, + {0x0476, 0x0476, 0x0477}, {0x0477, 0x0476, 0x0477}, + {0x0478, 0x0478, 0x0479}, {0x0479, 0x0478, 0x0479}, + {0x047A, 0x047A, 0x047B}, {0x047B, 0x047A, 0x047B}, + {0x047C, 0x047C, 0x047D}, {0x047D, 0x047C, 0x047D}, + {0x047E, 0x047E, 0x047F}, {0x047F, 0x047E, 0x047F}, + {0x0480, 0x0480, 0x0481}, {0x0481, 0x0480, 0x0481}, + {0x0483, 0x0483, 0x0483}, {0x0484, 0x0484, 0x0484}, + {0x0485, 0x0485, 0x0485}, {0x0486, 0x0486, 0x0486}, + {0x048A, 0x048A, 0x048B}, {0x048B, 0x048A, 0x048B}, + {0x048C, 0x048C, 0x048D}, {0x048D, 0x048C, 0x048D}, + {0x048E, 0x048E, 0x048F}, {0x048F, 0x048E, 0x048F}, + {0x0490, 0x0490, 0x0491}, {0x0491, 0x0490, 0x0491}, + {0x0492, 0x0492, 0x0493}, {0x0493, 0x0492, 0x0493}, + {0x0494, 0x0494, 0x0495}, {0x0495, 0x0494, 0x0495}, + {0x0496, 0x0496, 0x0497}, {0x0497, 0x0496, 0x0497}, + {0x0498, 0x0498, 0x0499}, {0x0499, 0x0498, 0x0499}, + {0x049A, 0x049A, 0x049B}, {0x049B, 0x049A, 0x049B}, + {0x049C, 0x049C, 0x049D}, {0x049D, 0x049C, 0x049D}, + {0x049E, 0x049E, 0x049F}, {0x049F, 0x049E, 0x049F}, + {0x04A0, 0x04A0, 0x04A1}, {0x04A1, 0x04A0, 0x04A1}, + {0x04A2, 0x04A2, 0x04A3}, {0x04A3, 0x04A2, 0x04A3}, + {0x04A4, 0x04A4, 0x04A5}, {0x04A5, 0x04A4, 0x04A5}, + {0x04A6, 0x04A6, 0x04A7}, {0x04A7, 0x04A6, 0x04A7}, + {0x04A8, 0x04A8, 0x04A9}, {0x04A9, 0x04A8, 0x04A9}, + {0x04AA, 0x04AA, 0x04AB}, {0x04AB, 0x04AA, 0x04AB}, + {0x04AC, 0x04AC, 0x04AD}, {0x04AD, 0x04AC, 0x04AD}, + {0x04AE, 0x04AE, 0x04AF}, {0x04AF, 0x04AE, 0x04AF}, + {0x04B0, 0x04B0, 0x04B1}, {0x04B1, 0x04B0, 0x04B1}, + {0x04B2, 0x04B2, 0x04B3}, {0x04B3, 0x04B2, 0x04B3}, + {0x04B4, 0x04B4, 0x04B5}, {0x04B5, 0x04B4, 0x04B5}, + {0x04B6, 0x04B6, 0x04B7}, {0x04B7, 0x04B6, 0x04B7}, + {0x04B8, 0x04B8, 0x04B9}, {0x04B9, 0x04B8, 0x04B9}, + {0x04BA, 0x04BA, 0x04BB}, {0x04BB, 0x04BA, 0x04BB}, + {0x04BC, 0x04BC, 0x04BD}, {0x04BD, 0x04BC, 0x04BD}, + {0x04BE, 0x04BE, 0x04BF}, {0x04BF, 0x04BE, 0x04BF}, + {0x04C0, 0x04C0, 0x04C0}, {0x04C1, 0x04C1, 0x04C2}, + {0x04C2, 0x04C1, 0x04C2}, {0x04C3, 0x04C3, 0x04C4}, + {0x04C4, 0x04C3, 0x04C4}, {0x04C5, 0x04C5, 0x04C6}, + {0x04C6, 0x04C5, 0x04C6}, {0x04C7, 0x04C7, 0x04C8}, + {0x04C8, 0x04C7, 0x04C8}, {0x04C9, 0x04C9, 0x04CA}, + {0x04CA, 0x04C9, 0x04CA}, {0x04CB, 0x04CB, 0x04CC}, + {0x04CC, 0x04CB, 0x04CC}, {0x04CD, 0x04CD, 0x04CE}, + {0x04CE, 0x04CD, 0x04CE}, {0x04D0, 0x04D0, 0x04D1}, + {0x04D1, 0x04D0, 0x04D1}, {0x04D2, 0x04D2, 0x04D3}, + {0x04D3, 0x04D2, 0x04D3}, {0x04D4, 0x04D4, 0x04D5}, + {0x04D5, 0x04D4, 0x04D5}, {0x04D6, 0x04D6, 0x04D7}, + {0x04D7, 0x04D6, 0x04D7}, {0x04D8, 0x04D8, 0x04D9}, + {0x04D9, 0x04D8, 0x04D9}, {0x04DA, 0x04DA, 0x04DB}, + {0x04DB, 0x04DA, 0x04DB}, {0x04DC, 0x04DC, 0x04DD}, + {0x04DD, 0x04DC, 0x04DD}, {0x04DE, 0x04DE, 0x04DF}, + {0x04DF, 0x04DE, 0x04DF}, {0x04E0, 0x04E0, 0x04E1}, + {0x04E1, 0x04E0, 0x04E1}, {0x04E2, 0x04E2, 0x04E3}, + {0x04E3, 0x04E2, 0x04E3}, {0x04E4, 0x04E4, 0x04E5}, + {0x04E5, 0x04E4, 0x04E5}, {0x04E6, 0x04E6, 0x04E7}, + {0x04E7, 0x04E6, 0x04E7}, {0x04E8, 0x04E8, 0x04E9}, + {0x04E9, 0x04E8, 0x04E9}, {0x04EA, 0x04EA, 0x04EB}, + {0x04EB, 0x04EA, 0x04EB}, {0x04EC, 0x04EC, 0x04ED}, + {0x04ED, 0x04EC, 0x04ED}, {0x04EE, 0x04EE, 0x04EF}, + {0x04EF, 0x04EE, 0x04EF}, {0x04F0, 0x04F0, 0x04F1}, + {0x04F1, 0x04F0, 0x04F1}, {0x04F2, 0x04F2, 0x04F3}, + {0x04F3, 0x04F2, 0x04F3}, {0x04F4, 0x04F4, 0x04F5}, + {0x04F5, 0x04F4, 0x04F5}, {0x04F6, 0x04F6, 0x04F7}, + {0x04F7, 0x04F6, 0x04F7}, {0x04F8, 0x04F8, 0x04F9}, + {0x04F9, 0x04F8, 0x04F9}, {0x0500, 0x0500, 0x0501}, + {0x0501, 0x0500, 0x0501}, {0x0502, 0x0502, 0x0503}, + {0x0503, 0x0502, 0x0503}, {0x0504, 0x0504, 0x0505}, + {0x0505, 0x0504, 0x0505}, {0x0506, 0x0506, 0x0507}, + {0x0507, 0x0506, 0x0507}, {0x0508, 0x0508, 0x0509}, + {0x0509, 0x0508, 0x0509}, {0x050A, 0x050A, 0x050B}, + {0x050B, 0x050A, 0x050B}, {0x050C, 0x050C, 0x050D}, + {0x050D, 0x050C, 0x050D}, {0x050E, 0x050E, 0x050F}, + {0x050F, 0x050E, 0x050F}, {0x0531, 0x0531, 0x0561}, + {0x0532, 0x0532, 0x0562}, {0x0533, 0x0533, 0x0563}, + {0x0534, 0x0534, 0x0564}, {0x0535, 0x0535, 0x0565}, + {0x0536, 0x0536, 0x0566}, {0x0537, 0x0537, 0x0567}, + {0x0538, 0x0538, 0x0568}, {0x0539, 0x0539, 0x0569}, + {0x053A, 0x053A, 0x056A}, {0x053B, 0x053B, 0x056B}, + {0x053C, 0x053C, 0x056C}, {0x053D, 0x053D, 0x056D}, + {0x053E, 0x053E, 0x056E}, {0x053F, 0x053F, 0x056F}, + {0x0540, 0x0540, 0x0570}, {0x0541, 0x0541, 0x0571}, + {0x0542, 0x0542, 0x0572}, {0x0543, 0x0543, 0x0573}, + {0x0544, 0x0544, 0x0574}, {0x0545, 0x0545, 0x0575}, + {0x0546, 0x0546, 0x0576}, {0x0547, 0x0547, 0x0577}, + {0x0548, 0x0548, 0x0578}, {0x0549, 0x0549, 0x0579}, + {0x054A, 0x054A, 0x057A}, {0x054B, 0x054B, 0x057B}, + {0x054C, 0x054C, 0x057C}, {0x054D, 0x054D, 0x057D}, + {0x054E, 0x054E, 0x057E}, {0x054F, 0x054F, 0x057F}, + {0x0550, 0x0550, 0x0580}, {0x0551, 0x0551, 0x0581}, + {0x0552, 0x0552, 0x0582}, {0x0553, 0x0553, 0x0583}, + {0x0554, 0x0554, 0x0584}, {0x0555, 0x0555, 0x0585}, + {0x0556, 0x0556, 0x0586}, {0x0559, 0x0559, 0x0559}, + {0x0561, 0x0531, 0x0561}, {0x0562, 0x0532, 0x0562}, + {0x0563, 0x0533, 0x0563}, {0x0564, 0x0534, 0x0564}, + {0x0565, 0x0535, 0x0565}, {0x0566, 0x0536, 0x0566}, + {0x0567, 0x0537, 0x0567}, {0x0568, 0x0538, 0x0568}, + {0x0569, 0x0539, 0x0569}, {0x056A, 0x053A, 0x056A}, + {0x056B, 0x053B, 0x056B}, {0x056C, 0x053C, 0x056C}, + {0x056D, 0x053D, 0x056D}, {0x056E, 0x053E, 0x056E}, + {0x056F, 0x053F, 0x056F}, {0x0570, 0x0540, 0x0570}, + {0x0571, 0x0541, 0x0571}, {0x0572, 0x0542, 0x0572}, + {0x0573, 0x0543, 0x0573}, {0x0574, 0x0544, 0x0574}, + {0x0575, 0x0545, 0x0575}, {0x0576, 0x0546, 0x0576}, + {0x0577, 0x0547, 0x0577}, {0x0578, 0x0548, 0x0578}, + {0x0579, 0x0549, 0x0579}, {0x057A, 0x054A, 0x057A}, + {0x057B, 0x054B, 0x057B}, {0x057C, 0x054C, 0x057C}, + {0x057D, 0x054D, 0x057D}, {0x057E, 0x054E, 0x057E}, + {0x057F, 0x054F, 0x057F}, {0x0580, 0x0550, 0x0580}, + {0x0581, 0x0551, 0x0581}, {0x0582, 0x0552, 0x0582}, + {0x0583, 0x0553, 0x0583}, {0x0584, 0x0554, 0x0584}, + {0x0585, 0x0555, 0x0585}, {0x0586, 0x0556, 0x0586}, + {0x0587, 0x0587, 0x0587}, {0x0591, 0x0591, 0x0591}, + {0x0592, 0x0592, 0x0592}, {0x0593, 0x0593, 0x0593}, + {0x0594, 0x0594, 0x0594}, {0x0595, 0x0595, 0x0595}, + {0x0596, 0x0596, 0x0596}, {0x0597, 0x0597, 0x0597}, + {0x0598, 0x0598, 0x0598}, {0x0599, 0x0599, 0x0599}, + {0x059A, 0x059A, 0x059A}, {0x059B, 0x059B, 0x059B}, + {0x059C, 0x059C, 0x059C}, {0x059D, 0x059D, 0x059D}, + {0x059E, 0x059E, 0x059E}, {0x059F, 0x059F, 0x059F}, + {0x05A0, 0x05A0, 0x05A0}, {0x05A1, 0x05A1, 0x05A1}, + {0x05A2, 0x05A2, 0x05A2}, {0x05A3, 0x05A3, 0x05A3}, + {0x05A4, 0x05A4, 0x05A4}, {0x05A5, 0x05A5, 0x05A5}, + {0x05A6, 0x05A6, 0x05A6}, {0x05A7, 0x05A7, 0x05A7}, + {0x05A8, 0x05A8, 0x05A8}, {0x05A9, 0x05A9, 0x05A9}, + {0x05AA, 0x05AA, 0x05AA}, {0x05AB, 0x05AB, 0x05AB}, + {0x05AC, 0x05AC, 0x05AC}, {0x05AD, 0x05AD, 0x05AD}, + {0x05AE, 0x05AE, 0x05AE}, {0x05AF, 0x05AF, 0x05AF}, + {0x05B0, 0x05B0, 0x05B0}, {0x05B1, 0x05B1, 0x05B1}, + {0x05B2, 0x05B2, 0x05B2}, {0x05B3, 0x05B3, 0x05B3}, + {0x05B4, 0x05B4, 0x05B4}, {0x05B5, 0x05B5, 0x05B5}, + {0x05B6, 0x05B6, 0x05B6}, {0x05B7, 0x05B7, 0x05B7}, + {0x05B8, 0x05B8, 0x05B8}, {0x05B9, 0x05B9, 0x05B9}, + {0x05BB, 0x05BB, 0x05BB}, {0x05BC, 0x05BC, 0x05BC}, + {0x05BD, 0x05BD, 0x05BD}, {0x05BF, 0x05BF, 0x05BF}, + {0x05C1, 0x05C1, 0x05C1}, {0x05C2, 0x05C2, 0x05C2}, + {0x05C4, 0x05C4, 0x05C4}, {0x05C5, 0x05C5, 0x05C5}, + {0x05C7, 0x05C7, 0x05C7}, {0x05D0, 0x05D0, 0x05D0}, + {0x05D1, 0x05D1, 0x05D1}, {0x05D2, 0x05D2, 0x05D2}, + {0x05D3, 0x05D3, 0x05D3}, {0x05D4, 0x05D4, 0x05D4}, + {0x05D5, 0x05D5, 0x05D5}, {0x05D6, 0x05D6, 0x05D6}, + {0x05D7, 0x05D7, 0x05D7}, {0x05D8, 0x05D8, 0x05D8}, + {0x05D9, 0x05D9, 0x05D9}, {0x05DA, 0x05DA, 0x05DA}, + {0x05DB, 0x05DB, 0x05DB}, {0x05DC, 0x05DC, 0x05DC}, + {0x05DD, 0x05DD, 0x05DD}, {0x05DE, 0x05DE, 0x05DE}, + {0x05DF, 0x05DF, 0x05DF}, {0x05E0, 0x05E0, 0x05E0}, + {0x05E1, 0x05E1, 0x05E1}, {0x05E2, 0x05E2, 0x05E2}, + {0x05E3, 0x05E3, 0x05E3}, {0x05E4, 0x05E4, 0x05E4}, + {0x05E5, 0x05E5, 0x05E5}, {0x05E6, 0x05E6, 0x05E6}, + {0x05E7, 0x05E7, 0x05E7}, {0x05E8, 0x05E8, 0x05E8}, + {0x05E9, 0x05E9, 0x05E9}, {0x05EA, 0x05EA, 0x05EA}, + {0x05F0, 0x05F0, 0x05F0}, {0x05F1, 0x05F1, 0x05F1}, + {0x05F2, 0x05F2, 0x05F2}, {0x0610, 0x0610, 0x0610}, + {0x0611, 0x0611, 0x0611}, {0x0612, 0x0612, 0x0612}, + {0x0613, 0x0613, 0x0613}, {0x0614, 0x0614, 0x0614}, + {0x0615, 0x0615, 0x0615}, {0x0621, 0x0621, 0x0621}, + {0x0622, 0x0622, 0x0622}, {0x0623, 0x0623, 0x0623}, + {0x0624, 0x0624, 0x0624}, {0x0625, 0x0625, 0x0625}, + {0x0626, 0x0626, 0x0626}, {0x0627, 0x0627, 0x0627}, + {0x0628, 0x0628, 0x0628}, {0x0629, 0x0629, 0x0629}, + {0x062A, 0x062A, 0x062A}, {0x062B, 0x062B, 0x062B}, + {0x062C, 0x062C, 0x062C}, {0x062D, 0x062D, 0x062D}, + {0x062E, 0x062E, 0x062E}, {0x062F, 0x062F, 0x062F}, + {0x0630, 0x0630, 0x0630}, {0x0631, 0x0631, 0x0631}, + {0x0632, 0x0632, 0x0632}, {0x0633, 0x0633, 0x0633}, + {0x0634, 0x0634, 0x0634}, {0x0635, 0x0635, 0x0635}, + {0x0636, 0x0636, 0x0636}, {0x0637, 0x0637, 0x0637}, + {0x0638, 0x0638, 0x0638}, {0x0639, 0x0639, 0x0639}, + {0x063A, 0x063A, 0x063A}, {0x0640, 0x0640, 0x0640}, + {0x0641, 0x0641, 0x0641}, {0x0642, 0x0642, 0x0642}, + {0x0643, 0x0643, 0x0643}, {0x0644, 0x0644, 0x0644}, + {0x0645, 0x0645, 0x0645}, {0x0646, 0x0646, 0x0646}, + {0x0647, 0x0647, 0x0647}, {0x0648, 0x0648, 0x0648}, + {0x0649, 0x0649, 0x0649}, {0x064A, 0x064A, 0x064A}, + {0x064B, 0x064B, 0x064B}, {0x064C, 0x064C, 0x064C}, + {0x064D, 0x064D, 0x064D}, {0x064E, 0x064E, 0x064E}, + {0x064F, 0x064F, 0x064F}, {0x0650, 0x0650, 0x0650}, + {0x0651, 0x0651, 0x0651}, {0x0652, 0x0652, 0x0652}, + {0x0653, 0x0653, 0x0653}, {0x0654, 0x0654, 0x0654}, + {0x0655, 0x0655, 0x0655}, {0x0656, 0x0656, 0x0656}, + {0x0657, 0x0657, 0x0657}, {0x0658, 0x0658, 0x0658}, + {0x0659, 0x0659, 0x0659}, {0x065A, 0x065A, 0x065A}, + {0x065B, 0x065B, 0x065B}, {0x065C, 0x065C, 0x065C}, + {0x065D, 0x065D, 0x065D}, {0x065E, 0x065E, 0x065E}, + {0x066E, 0x066E, 0x066E}, {0x066F, 0x066F, 0x066F}, + {0x0670, 0x0670, 0x0670}, {0x0671, 0x0671, 0x0671}, + {0x0672, 0x0672, 0x0672}, {0x0673, 0x0673, 0x0673}, + {0x0674, 0x0674, 0x0674}, {0x0675, 0x0675, 0x0675}, + {0x0676, 0x0676, 0x0676}, {0x0677, 0x0677, 0x0677}, + {0x0678, 0x0678, 0x0678}, {0x0679, 0x0679, 0x0679}, + {0x067A, 0x067A, 0x067A}, {0x067B, 0x067B, 0x067B}, + {0x067C, 0x067C, 0x067C}, {0x067D, 0x067D, 0x067D}, + {0x067E, 0x067E, 0x067E}, {0x067F, 0x067F, 0x067F}, + {0x0680, 0x0680, 0x0680}, {0x0681, 0x0681, 0x0681}, + {0x0682, 0x0682, 0x0682}, {0x0683, 0x0683, 0x0683}, + {0x0684, 0x0684, 0x0684}, {0x0685, 0x0685, 0x0685}, + {0x0686, 0x0686, 0x0686}, {0x0687, 0x0687, 0x0687}, + {0x0688, 0x0688, 0x0688}, {0x0689, 0x0689, 0x0689}, + {0x068A, 0x068A, 0x068A}, {0x068B, 0x068B, 0x068B}, + {0x068C, 0x068C, 0x068C}, {0x068D, 0x068D, 0x068D}, + {0x068E, 0x068E, 0x068E}, {0x068F, 0x068F, 0x068F}, + {0x0690, 0x0690, 0x0690}, {0x0691, 0x0691, 0x0691}, + {0x0692, 0x0692, 0x0692}, {0x0693, 0x0693, 0x0693}, + {0x0694, 0x0694, 0x0694}, {0x0695, 0x0695, 0x0695}, + {0x0696, 0x0696, 0x0696}, {0x0697, 0x0697, 0x0697}, + {0x0698, 0x0698, 0x0698}, {0x0699, 0x0699, 0x0699}, + {0x069A, 0x069A, 0x069A}, {0x069B, 0x069B, 0x069B}, + {0x069C, 0x069C, 0x069C}, {0x069D, 0x069D, 0x069D}, + {0x069E, 0x069E, 0x069E}, {0x069F, 0x069F, 0x069F}, + {0x06A0, 0x06A0, 0x06A0}, {0x06A1, 0x06A1, 0x06A1}, + {0x06A2, 0x06A2, 0x06A2}, {0x06A3, 0x06A3, 0x06A3}, + {0x06A4, 0x06A4, 0x06A4}, {0x06A5, 0x06A5, 0x06A5}, + {0x06A6, 0x06A6, 0x06A6}, {0x06A7, 0x06A7, 0x06A7}, + {0x06A8, 0x06A8, 0x06A8}, {0x06A9, 0x06A9, 0x06A9}, + {0x06AA, 0x06AA, 0x06AA}, {0x06AB, 0x06AB, 0x06AB}, + {0x06AC, 0x06AC, 0x06AC}, {0x06AD, 0x06AD, 0x06AD}, + {0x06AE, 0x06AE, 0x06AE}, {0x06AF, 0x06AF, 0x06AF}, + {0x06B0, 0x06B0, 0x06B0}, {0x06B1, 0x06B1, 0x06B1}, + {0x06B2, 0x06B2, 0x06B2}, {0x06B3, 0x06B3, 0x06B3}, + {0x06B4, 0x06B4, 0x06B4}, {0x06B5, 0x06B5, 0x06B5}, + {0x06B6, 0x06B6, 0x06B6}, {0x06B7, 0x06B7, 0x06B7}, + {0x06B8, 0x06B8, 0x06B8}, {0x06B9, 0x06B9, 0x06B9}, + {0x06BA, 0x06BA, 0x06BA}, {0x06BB, 0x06BB, 0x06BB}, + {0x06BC, 0x06BC, 0x06BC}, {0x06BD, 0x06BD, 0x06BD}, + {0x06BE, 0x06BE, 0x06BE}, {0x06BF, 0x06BF, 0x06BF}, + {0x06C0, 0x06C0, 0x06C0}, {0x06C1, 0x06C1, 0x06C1}, + {0x06C2, 0x06C2, 0x06C2}, {0x06C3, 0x06C3, 0x06C3}, + {0x06C4, 0x06C4, 0x06C4}, {0x06C5, 0x06C5, 0x06C5}, + {0x06C6, 0x06C6, 0x06C6}, {0x06C7, 0x06C7, 0x06C7}, + {0x06C8, 0x06C8, 0x06C8}, {0x06C9, 0x06C9, 0x06C9}, + {0x06CA, 0x06CA, 0x06CA}, {0x06CB, 0x06CB, 0x06CB}, + {0x06CC, 0x06CC, 0x06CC}, {0x06CD, 0x06CD, 0x06CD}, + {0x06CE, 0x06CE, 0x06CE}, {0x06CF, 0x06CF, 0x06CF}, + {0x06D0, 0x06D0, 0x06D0}, {0x06D1, 0x06D1, 0x06D1}, + {0x06D2, 0x06D2, 0x06D2}, {0x06D3, 0x06D3, 0x06D3}, + {0x06D5, 0x06D5, 0x06D5}, {0x06D6, 0x06D6, 0x06D6}, + {0x06D7, 0x06D7, 0x06D7}, {0x06D8, 0x06D8, 0x06D8}, + {0x06D9, 0x06D9, 0x06D9}, {0x06DA, 0x06DA, 0x06DA}, + {0x06DB, 0x06DB, 0x06DB}, {0x06DC, 0x06DC, 0x06DC}, + {0x06DF, 0x06DF, 0x06DF}, {0x06E0, 0x06E0, 0x06E0}, + {0x06E1, 0x06E1, 0x06E1}, {0x06E2, 0x06E2, 0x06E2}, + {0x06E3, 0x06E3, 0x06E3}, {0x06E4, 0x06E4, 0x06E4}, + {0x06E5, 0x06E5, 0x06E5}, {0x06E6, 0x06E6, 0x06E6}, + {0x06E7, 0x06E7, 0x06E7}, {0x06E8, 0x06E8, 0x06E8}, + {0x06EA, 0x06EA, 0x06EA}, {0x06EB, 0x06EB, 0x06EB}, + {0x06EC, 0x06EC, 0x06EC}, {0x06ED, 0x06ED, 0x06ED}, + {0x06EE, 0x06EE, 0x06EE}, {0x06EF, 0x06EF, 0x06EF}, + {0x06FA, 0x06FA, 0x06FA}, {0x06FB, 0x06FB, 0x06FB}, + {0x06FC, 0x06FC, 0x06FC}, {0x06FF, 0x06FF, 0x06FF}, + {0x0710, 0x0710, 0x0710}, {0x0711, 0x0711, 0x0711}, + {0x0712, 0x0712, 0x0712}, {0x0713, 0x0713, 0x0713}, + {0x0714, 0x0714, 0x0714}, {0x0715, 0x0715, 0x0715}, + {0x0716, 0x0716, 0x0716}, {0x0717, 0x0717, 0x0717}, + {0x0718, 0x0718, 0x0718}, {0x0719, 0x0719, 0x0719}, + {0x071A, 0x071A, 0x071A}, {0x071B, 0x071B, 0x071B}, + {0x071C, 0x071C, 0x071C}, {0x071D, 0x071D, 0x071D}, + {0x071E, 0x071E, 0x071E}, {0x071F, 0x071F, 0x071F}, + {0x0720, 0x0720, 0x0720}, {0x0721, 0x0721, 0x0721}, + {0x0722, 0x0722, 0x0722}, {0x0723, 0x0723, 0x0723}, + {0x0724, 0x0724, 0x0724}, {0x0725, 0x0725, 0x0725}, + {0x0726, 0x0726, 0x0726}, {0x0727, 0x0727, 0x0727}, + {0x0728, 0x0728, 0x0728}, {0x0729, 0x0729, 0x0729}, + {0x072A, 0x072A, 0x072A}, {0x072B, 0x072B, 0x072B}, + {0x072C, 0x072C, 0x072C}, {0x072D, 0x072D, 0x072D}, + {0x072E, 0x072E, 0x072E}, {0x072F, 0x072F, 0x072F}, + {0x0730, 0x0730, 0x0730}, {0x0731, 0x0731, 0x0731}, + {0x0732, 0x0732, 0x0732}, {0x0733, 0x0733, 0x0733}, + {0x0734, 0x0734, 0x0734}, {0x0735, 0x0735, 0x0735}, + {0x0736, 0x0736, 0x0736}, {0x0737, 0x0737, 0x0737}, + {0x0738, 0x0738, 0x0738}, {0x0739, 0x0739, 0x0739}, + {0x073A, 0x073A, 0x073A}, {0x073B, 0x073B, 0x073B}, + {0x073C, 0x073C, 0x073C}, {0x073D, 0x073D, 0x073D}, + {0x073E, 0x073E, 0x073E}, {0x073F, 0x073F, 0x073F}, + {0x0740, 0x0740, 0x0740}, {0x0741, 0x0741, 0x0741}, + {0x0742, 0x0742, 0x0742}, {0x0743, 0x0743, 0x0743}, + {0x0744, 0x0744, 0x0744}, {0x0745, 0x0745, 0x0745}, + {0x0746, 0x0746, 0x0746}, {0x0747, 0x0747, 0x0747}, + {0x0748, 0x0748, 0x0748}, {0x0749, 0x0749, 0x0749}, + {0x074A, 0x074A, 0x074A}, {0x074D, 0x074D, 0x074D}, + {0x074E, 0x074E, 0x074E}, {0x074F, 0x074F, 0x074F}, + {0x0750, 0x0750, 0x0750}, {0x0751, 0x0751, 0x0751}, + {0x0752, 0x0752, 0x0752}, {0x0753, 0x0753, 0x0753}, + {0x0754, 0x0754, 0x0754}, {0x0755, 0x0755, 0x0755}, + {0x0756, 0x0756, 0x0756}, {0x0757, 0x0757, 0x0757}, + {0x0758, 0x0758, 0x0758}, {0x0759, 0x0759, 0x0759}, + {0x075A, 0x075A, 0x075A}, {0x075B, 0x075B, 0x075B}, + {0x075C, 0x075C, 0x075C}, {0x075D, 0x075D, 0x075D}, + {0x075E, 0x075E, 0x075E}, {0x075F, 0x075F, 0x075F}, + {0x0760, 0x0760, 0x0760}, {0x0761, 0x0761, 0x0761}, + {0x0762, 0x0762, 0x0762}, {0x0763, 0x0763, 0x0763}, + {0x0764, 0x0764, 0x0764}, {0x0765, 0x0765, 0x0765}, + {0x0766, 0x0766, 0x0766}, {0x0767, 0x0767, 0x0767}, + {0x0768, 0x0768, 0x0768}, {0x0769, 0x0769, 0x0769}, + {0x076A, 0x076A, 0x076A}, {0x076B, 0x076B, 0x076B}, + {0x076C, 0x076C, 0x076C}, {0x076D, 0x076D, 0x076D}, + {0x0780, 0x0780, 0x0780}, {0x0781, 0x0781, 0x0781}, + {0x0782, 0x0782, 0x0782}, {0x0783, 0x0783, 0x0783}, + {0x0784, 0x0784, 0x0784}, {0x0785, 0x0785, 0x0785}, + {0x0786, 0x0786, 0x0786}, {0x0787, 0x0787, 0x0787}, + {0x0788, 0x0788, 0x0788}, {0x0789, 0x0789, 0x0789}, + {0x078A, 0x078A, 0x078A}, {0x078B, 0x078B, 0x078B}, + {0x078C, 0x078C, 0x078C}, {0x078D, 0x078D, 0x078D}, + {0x078E, 0x078E, 0x078E}, {0x078F, 0x078F, 0x078F}, + {0x0790, 0x0790, 0x0790}, {0x0791, 0x0791, 0x0791}, + {0x0792, 0x0792, 0x0792}, {0x0793, 0x0793, 0x0793}, + {0x0794, 0x0794, 0x0794}, {0x0795, 0x0795, 0x0795}, + {0x0796, 0x0796, 0x0796}, {0x0797, 0x0797, 0x0797}, + {0x0798, 0x0798, 0x0798}, {0x0799, 0x0799, 0x0799}, + {0x079A, 0x079A, 0x079A}, {0x079B, 0x079B, 0x079B}, + {0x079C, 0x079C, 0x079C}, {0x079D, 0x079D, 0x079D}, + {0x079E, 0x079E, 0x079E}, {0x079F, 0x079F, 0x079F}, + {0x07A0, 0x07A0, 0x07A0}, {0x07A1, 0x07A1, 0x07A1}, + {0x07A2, 0x07A2, 0x07A2}, {0x07A3, 0x07A3, 0x07A3}, + {0x07A4, 0x07A4, 0x07A4}, {0x07A5, 0x07A5, 0x07A5}, + {0x07A6, 0x07A6, 0x07A6}, {0x07A7, 0x07A7, 0x07A7}, + {0x07A8, 0x07A8, 0x07A8}, {0x07A9, 0x07A9, 0x07A9}, + {0x07AA, 0x07AA, 0x07AA}, {0x07AB, 0x07AB, 0x07AB}, + {0x07AC, 0x07AC, 0x07AC}, {0x07AD, 0x07AD, 0x07AD}, + {0x07AE, 0x07AE, 0x07AE}, {0x07AF, 0x07AF, 0x07AF}, + {0x07B0, 0x07B0, 0x07B0}, {0x07B1, 0x07B1, 0x07B1}, + {0x0901, 0x0901, 0x0901}, {0x0902, 0x0902, 0x0902}, + {0x0904, 0x0904, 0x0904}, {0x0905, 0x0905, 0x0905}, + {0x0906, 0x0906, 0x0906}, {0x0907, 0x0907, 0x0907}, + {0x0908, 0x0908, 0x0908}, {0x0909, 0x0909, 0x0909}, + {0x090A, 0x090A, 0x090A}, {0x090B, 0x090B, 0x090B}, + {0x090C, 0x090C, 0x090C}, {0x090D, 0x090D, 0x090D}, + {0x090E, 0x090E, 0x090E}, {0x090F, 0x090F, 0x090F}, + {0x0910, 0x0910, 0x0910}, {0x0911, 0x0911, 0x0911}, + {0x0912, 0x0912, 0x0912}, {0x0913, 0x0913, 0x0913}, + {0x0914, 0x0914, 0x0914}, {0x0915, 0x0915, 0x0915}, + {0x0916, 0x0916, 0x0916}, {0x0917, 0x0917, 0x0917}, + {0x0918, 0x0918, 0x0918}, {0x0919, 0x0919, 0x0919}, + {0x091A, 0x091A, 0x091A}, {0x091B, 0x091B, 0x091B}, + {0x091C, 0x091C, 0x091C}, {0x091D, 0x091D, 0x091D}, + {0x091E, 0x091E, 0x091E}, {0x091F, 0x091F, 0x091F}, + {0x0920, 0x0920, 0x0920}, {0x0921, 0x0921, 0x0921}, + {0x0922, 0x0922, 0x0922}, {0x0923, 0x0923, 0x0923}, + {0x0924, 0x0924, 0x0924}, {0x0925, 0x0925, 0x0925}, + {0x0926, 0x0926, 0x0926}, {0x0927, 0x0927, 0x0927}, + {0x0928, 0x0928, 0x0928}, {0x0929, 0x0929, 0x0929}, + {0x092A, 0x092A, 0x092A}, {0x092B, 0x092B, 0x092B}, + {0x092C, 0x092C, 0x092C}, {0x092D, 0x092D, 0x092D}, + {0x092E, 0x092E, 0x092E}, {0x092F, 0x092F, 0x092F}, + {0x0930, 0x0930, 0x0930}, {0x0931, 0x0931, 0x0931}, + {0x0932, 0x0932, 0x0932}, {0x0933, 0x0933, 0x0933}, + {0x0934, 0x0934, 0x0934}, {0x0935, 0x0935, 0x0935}, + {0x0936, 0x0936, 0x0936}, {0x0937, 0x0937, 0x0937}, + {0x0938, 0x0938, 0x0938}, {0x0939, 0x0939, 0x0939}, + {0x093C, 0x093C, 0x093C}, {0x093D, 0x093D, 0x093D}, + {0x0941, 0x0941, 0x0941}, {0x0942, 0x0942, 0x0942}, + {0x0943, 0x0943, 0x0943}, {0x0944, 0x0944, 0x0944}, + {0x0945, 0x0945, 0x0945}, {0x0946, 0x0946, 0x0946}, + {0x0947, 0x0947, 0x0947}, {0x0948, 0x0948, 0x0948}, + {0x094D, 0x094D, 0x094D}, {0x0950, 0x0950, 0x0950}, + {0x0951, 0x0951, 0x0951}, {0x0952, 0x0952, 0x0952}, + {0x0953, 0x0953, 0x0953}, {0x0954, 0x0954, 0x0954}, + {0x0958, 0x0958, 0x0958}, {0x0959, 0x0959, 0x0959}, + {0x095A, 0x095A, 0x095A}, {0x095B, 0x095B, 0x095B}, + {0x095C, 0x095C, 0x095C}, {0x095D, 0x095D, 0x095D}, + {0x095E, 0x095E, 0x095E}, {0x095F, 0x095F, 0x095F}, + {0x0960, 0x0960, 0x0960}, {0x0961, 0x0961, 0x0961}, + {0x0962, 0x0962, 0x0962}, {0x0963, 0x0963, 0x0963}, + {0x097D, 0x097D, 0x097D}, {0x0981, 0x0981, 0x0981}, + {0x0985, 0x0985, 0x0985}, {0x0986, 0x0986, 0x0986}, + {0x0987, 0x0987, 0x0987}, {0x0988, 0x0988, 0x0988}, + {0x0989, 0x0989, 0x0989}, {0x098A, 0x098A, 0x098A}, + {0x098B, 0x098B, 0x098B}, {0x098C, 0x098C, 0x098C}, + {0x098F, 0x098F, 0x098F}, {0x0990, 0x0990, 0x0990}, + {0x0993, 0x0993, 0x0993}, {0x0994, 0x0994, 0x0994}, + {0x0995, 0x0995, 0x0995}, {0x0996, 0x0996, 0x0996}, + {0x0997, 0x0997, 0x0997}, {0x0998, 0x0998, 0x0998}, + {0x0999, 0x0999, 0x0999}, {0x099A, 0x099A, 0x099A}, + {0x099B, 0x099B, 0x099B}, {0x099C, 0x099C, 0x099C}, + {0x099D, 0x099D, 0x099D}, {0x099E, 0x099E, 0x099E}, + {0x099F, 0x099F, 0x099F}, {0x09A0, 0x09A0, 0x09A0}, + {0x09A1, 0x09A1, 0x09A1}, {0x09A2, 0x09A2, 0x09A2}, + {0x09A3, 0x09A3, 0x09A3}, {0x09A4, 0x09A4, 0x09A4}, + {0x09A5, 0x09A5, 0x09A5}, {0x09A6, 0x09A6, 0x09A6}, + {0x09A7, 0x09A7, 0x09A7}, {0x09A8, 0x09A8, 0x09A8}, + {0x09AA, 0x09AA, 0x09AA}, {0x09AB, 0x09AB, 0x09AB}, + {0x09AC, 0x09AC, 0x09AC}, {0x09AD, 0x09AD, 0x09AD}, + {0x09AE, 0x09AE, 0x09AE}, {0x09AF, 0x09AF, 0x09AF}, + {0x09B0, 0x09B0, 0x09B0}, {0x09B2, 0x09B2, 0x09B2}, + {0x09B6, 0x09B6, 0x09B6}, {0x09B7, 0x09B7, 0x09B7}, + {0x09B8, 0x09B8, 0x09B8}, {0x09B9, 0x09B9, 0x09B9}, + {0x09BC, 0x09BC, 0x09BC}, {0x09BD, 0x09BD, 0x09BD}, + {0x09C1, 0x09C1, 0x09C1}, {0x09C2, 0x09C2, 0x09C2}, + {0x09C3, 0x09C3, 0x09C3}, {0x09C4, 0x09C4, 0x09C4}, + {0x09CD, 0x09CD, 0x09CD}, {0x09CE, 0x09CE, 0x09CE}, + {0x09DC, 0x09DC, 0x09DC}, {0x09DD, 0x09DD, 0x09DD}, + {0x09DF, 0x09DF, 0x09DF}, {0x09E0, 0x09E0, 0x09E0}, + {0x09E1, 0x09E1, 0x09E1}, {0x09E2, 0x09E2, 0x09E2}, + {0x09E3, 0x09E3, 0x09E3}, {0x09F0, 0x09F0, 0x09F0}, + {0x09F1, 0x09F1, 0x09F1}, {0x0A01, 0x0A01, 0x0A01}, + {0x0A02, 0x0A02, 0x0A02}, {0x0A05, 0x0A05, 0x0A05}, + {0x0A06, 0x0A06, 0x0A06}, {0x0A07, 0x0A07, 0x0A07}, + {0x0A08, 0x0A08, 0x0A08}, {0x0A09, 0x0A09, 0x0A09}, + {0x0A0A, 0x0A0A, 0x0A0A}, {0x0A0F, 0x0A0F, 0x0A0F}, + {0x0A10, 0x0A10, 0x0A10}, {0x0A13, 0x0A13, 0x0A13}, + {0x0A14, 0x0A14, 0x0A14}, {0x0A15, 0x0A15, 0x0A15}, + {0x0A16, 0x0A16, 0x0A16}, {0x0A17, 0x0A17, 0x0A17}, + {0x0A18, 0x0A18, 0x0A18}, {0x0A19, 0x0A19, 0x0A19}, + {0x0A1A, 0x0A1A, 0x0A1A}, {0x0A1B, 0x0A1B, 0x0A1B}, + {0x0A1C, 0x0A1C, 0x0A1C}, {0x0A1D, 0x0A1D, 0x0A1D}, + {0x0A1E, 0x0A1E, 0x0A1E}, {0x0A1F, 0x0A1F, 0x0A1F}, + {0x0A20, 0x0A20, 0x0A20}, {0x0A21, 0x0A21, 0x0A21}, + {0x0A22, 0x0A22, 0x0A22}, {0x0A23, 0x0A23, 0x0A23}, + {0x0A24, 0x0A24, 0x0A24}, {0x0A25, 0x0A25, 0x0A25}, + {0x0A26, 0x0A26, 0x0A26}, {0x0A27, 0x0A27, 0x0A27}, + {0x0A28, 0x0A28, 0x0A28}, {0x0A2A, 0x0A2A, 0x0A2A}, + {0x0A2B, 0x0A2B, 0x0A2B}, {0x0A2C, 0x0A2C, 0x0A2C}, + {0x0A2D, 0x0A2D, 0x0A2D}, {0x0A2E, 0x0A2E, 0x0A2E}, + {0x0A2F, 0x0A2F, 0x0A2F}, {0x0A30, 0x0A30, 0x0A30}, + {0x0A32, 0x0A32, 0x0A32}, {0x0A33, 0x0A33, 0x0A33}, + {0x0A35, 0x0A35, 0x0A35}, {0x0A36, 0x0A36, 0x0A36}, + {0x0A38, 0x0A38, 0x0A38}, {0x0A39, 0x0A39, 0x0A39}, + {0x0A3C, 0x0A3C, 0x0A3C}, {0x0A41, 0x0A41, 0x0A41}, + {0x0A42, 0x0A42, 0x0A42}, {0x0A47, 0x0A47, 0x0A47}, + {0x0A48, 0x0A48, 0x0A48}, {0x0A4B, 0x0A4B, 0x0A4B}, + {0x0A4C, 0x0A4C, 0x0A4C}, {0x0A4D, 0x0A4D, 0x0A4D}, + {0x0A59, 0x0A59, 0x0A59}, {0x0A5A, 0x0A5A, 0x0A5A}, + {0x0A5B, 0x0A5B, 0x0A5B}, {0x0A5C, 0x0A5C, 0x0A5C}, + {0x0A5E, 0x0A5E, 0x0A5E}, {0x0A70, 0x0A70, 0x0A70}, + {0x0A71, 0x0A71, 0x0A71}, {0x0A72, 0x0A72, 0x0A72}, + {0x0A73, 0x0A73, 0x0A73}, {0x0A74, 0x0A74, 0x0A74}, + {0x0A81, 0x0A81, 0x0A81}, {0x0A82, 0x0A82, 0x0A82}, + {0x0A85, 0x0A85, 0x0A85}, {0x0A86, 0x0A86, 0x0A86}, + {0x0A87, 0x0A87, 0x0A87}, {0x0A88, 0x0A88, 0x0A88}, + {0x0A89, 0x0A89, 0x0A89}, {0x0A8A, 0x0A8A, 0x0A8A}, + {0x0A8B, 0x0A8B, 0x0A8B}, {0x0A8C, 0x0A8C, 0x0A8C}, + {0x0A8D, 0x0A8D, 0x0A8D}, {0x0A8F, 0x0A8F, 0x0A8F}, + {0x0A90, 0x0A90, 0x0A90}, {0x0A91, 0x0A91, 0x0A91}, + {0x0A93, 0x0A93, 0x0A93}, {0x0A94, 0x0A94, 0x0A94}, + {0x0A95, 0x0A95, 0x0A95}, {0x0A96, 0x0A96, 0x0A96}, + {0x0A97, 0x0A97, 0x0A97}, {0x0A98, 0x0A98, 0x0A98}, + {0x0A99, 0x0A99, 0x0A99}, {0x0A9A, 0x0A9A, 0x0A9A}, + {0x0A9B, 0x0A9B, 0x0A9B}, {0x0A9C, 0x0A9C, 0x0A9C}, + {0x0A9D, 0x0A9D, 0x0A9D}, {0x0A9E, 0x0A9E, 0x0A9E}, + {0x0A9F, 0x0A9F, 0x0A9F}, {0x0AA0, 0x0AA0, 0x0AA0}, + {0x0AA1, 0x0AA1, 0x0AA1}, {0x0AA2, 0x0AA2, 0x0AA2}, + {0x0AA3, 0x0AA3, 0x0AA3}, {0x0AA4, 0x0AA4, 0x0AA4}, + {0x0AA5, 0x0AA5, 0x0AA5}, {0x0AA6, 0x0AA6, 0x0AA6}, + {0x0AA7, 0x0AA7, 0x0AA7}, {0x0AA8, 0x0AA8, 0x0AA8}, + {0x0AAA, 0x0AAA, 0x0AAA}, {0x0AAB, 0x0AAB, 0x0AAB}, + {0x0AAC, 0x0AAC, 0x0AAC}, {0x0AAD, 0x0AAD, 0x0AAD}, + {0x0AAE, 0x0AAE, 0x0AAE}, {0x0AAF, 0x0AAF, 0x0AAF}, + {0x0AB0, 0x0AB0, 0x0AB0}, {0x0AB2, 0x0AB2, 0x0AB2}, + {0x0AB3, 0x0AB3, 0x0AB3}, {0x0AB5, 0x0AB5, 0x0AB5}, + {0x0AB6, 0x0AB6, 0x0AB6}, {0x0AB7, 0x0AB7, 0x0AB7}, + {0x0AB8, 0x0AB8, 0x0AB8}, {0x0AB9, 0x0AB9, 0x0AB9}, + {0x0ABC, 0x0ABC, 0x0ABC}, {0x0ABD, 0x0ABD, 0x0ABD}, + {0x0AC1, 0x0AC1, 0x0AC1}, {0x0AC2, 0x0AC2, 0x0AC2}, + {0x0AC3, 0x0AC3, 0x0AC3}, {0x0AC4, 0x0AC4, 0x0AC4}, + {0x0AC5, 0x0AC5, 0x0AC5}, {0x0AC7, 0x0AC7, 0x0AC7}, + {0x0AC8, 0x0AC8, 0x0AC8}, {0x0ACD, 0x0ACD, 0x0ACD}, + {0x0AD0, 0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE0, 0x0AE0}, + {0x0AE1, 0x0AE1, 0x0AE1}, {0x0AE2, 0x0AE2, 0x0AE2}, + {0x0AE3, 0x0AE3, 0x0AE3}, {0x0B01, 0x0B01, 0x0B01}, + {0x0B05, 0x0B05, 0x0B05}, {0x0B06, 0x0B06, 0x0B06}, + {0x0B07, 0x0B07, 0x0B07}, {0x0B08, 0x0B08, 0x0B08}, + {0x0B09, 0x0B09, 0x0B09}, {0x0B0A, 0x0B0A, 0x0B0A}, + {0x0B0B, 0x0B0B, 0x0B0B}, {0x0B0C, 0x0B0C, 0x0B0C}, + {0x0B0F, 0x0B0F, 0x0B0F}, {0x0B10, 0x0B10, 0x0B10}, + {0x0B13, 0x0B13, 0x0B13}, {0x0B14, 0x0B14, 0x0B14}, + {0x0B15, 0x0B15, 0x0B15}, {0x0B16, 0x0B16, 0x0B16}, + {0x0B17, 0x0B17, 0x0B17}, {0x0B18, 0x0B18, 0x0B18}, + {0x0B19, 0x0B19, 0x0B19}, {0x0B1A, 0x0B1A, 0x0B1A}, + {0x0B1B, 0x0B1B, 0x0B1B}, {0x0B1C, 0x0B1C, 0x0B1C}, + {0x0B1D, 0x0B1D, 0x0B1D}, {0x0B1E, 0x0B1E, 0x0B1E}, + {0x0B1F, 0x0B1F, 0x0B1F}, {0x0B20, 0x0B20, 0x0B20}, + {0x0B21, 0x0B21, 0x0B21}, {0x0B22, 0x0B22, 0x0B22}, + {0x0B23, 0x0B23, 0x0B23}, {0x0B24, 0x0B24, 0x0B24}, + {0x0B25, 0x0B25, 0x0B25}, {0x0B26, 0x0B26, 0x0B26}, + {0x0B27, 0x0B27, 0x0B27}, {0x0B28, 0x0B28, 0x0B28}, + {0x0B2A, 0x0B2A, 0x0B2A}, {0x0B2B, 0x0B2B, 0x0B2B}, + {0x0B2C, 0x0B2C, 0x0B2C}, {0x0B2D, 0x0B2D, 0x0B2D}, + {0x0B2E, 0x0B2E, 0x0B2E}, {0x0B2F, 0x0B2F, 0x0B2F}, + {0x0B30, 0x0B30, 0x0B30}, {0x0B32, 0x0B32, 0x0B32}, + {0x0B33, 0x0B33, 0x0B33}, {0x0B35, 0x0B35, 0x0B35}, + {0x0B36, 0x0B36, 0x0B36}, {0x0B37, 0x0B37, 0x0B37}, + {0x0B38, 0x0B38, 0x0B38}, {0x0B39, 0x0B39, 0x0B39}, + {0x0B3C, 0x0B3C, 0x0B3C}, {0x0B3D, 0x0B3D, 0x0B3D}, + {0x0B3F, 0x0B3F, 0x0B3F}, {0x0B41, 0x0B41, 0x0B41}, + {0x0B42, 0x0B42, 0x0B42}, {0x0B43, 0x0B43, 0x0B43}, + {0x0B4D, 0x0B4D, 0x0B4D}, {0x0B56, 0x0B56, 0x0B56}, + {0x0B5C, 0x0B5C, 0x0B5C}, {0x0B5D, 0x0B5D, 0x0B5D}, + {0x0B5F, 0x0B5F, 0x0B5F}, {0x0B60, 0x0B60, 0x0B60}, + {0x0B61, 0x0B61, 0x0B61}, {0x0B71, 0x0B71, 0x0B71}, + {0x0B82, 0x0B82, 0x0B82}, {0x0B83, 0x0B83, 0x0B83}, + {0x0B85, 0x0B85, 0x0B85}, {0x0B86, 0x0B86, 0x0B86}, + {0x0B87, 0x0B87, 0x0B87}, {0x0B88, 0x0B88, 0x0B88}, + {0x0B89, 0x0B89, 0x0B89}, {0x0B8A, 0x0B8A, 0x0B8A}, + {0x0B8E, 0x0B8E, 0x0B8E}, {0x0B8F, 0x0B8F, 0x0B8F}, + {0x0B90, 0x0B90, 0x0B90}, {0x0B92, 0x0B92, 0x0B92}, + {0x0B93, 0x0B93, 0x0B93}, {0x0B94, 0x0B94, 0x0B94}, + {0x0B95, 0x0B95, 0x0B95}, {0x0B99, 0x0B99, 0x0B99}, + {0x0B9A, 0x0B9A, 0x0B9A}, {0x0B9C, 0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9E, 0x0B9E}, {0x0B9F, 0x0B9F, 0x0B9F}, + {0x0BA3, 0x0BA3, 0x0BA3}, {0x0BA4, 0x0BA4, 0x0BA4}, + {0x0BA8, 0x0BA8, 0x0BA8}, {0x0BA9, 0x0BA9, 0x0BA9}, + {0x0BAA, 0x0BAA, 0x0BAA}, {0x0BAE, 0x0BAE, 0x0BAE}, + {0x0BAF, 0x0BAF, 0x0BAF}, {0x0BB0, 0x0BB0, 0x0BB0}, + {0x0BB1, 0x0BB1, 0x0BB1}, {0x0BB2, 0x0BB2, 0x0BB2}, + {0x0BB3, 0x0BB3, 0x0BB3}, {0x0BB4, 0x0BB4, 0x0BB4}, + {0x0BB5, 0x0BB5, 0x0BB5}, {0x0BB6, 0x0BB6, 0x0BB6}, + {0x0BB7, 0x0BB7, 0x0BB7}, {0x0BB8, 0x0BB8, 0x0BB8}, + {0x0BB9, 0x0BB9, 0x0BB9}, {0x0BC0, 0x0BC0, 0x0BC0}, + {0x0BCD, 0x0BCD, 0x0BCD}, {0x0C05, 0x0C05, 0x0C05}, + {0x0C06, 0x0C06, 0x0C06}, {0x0C07, 0x0C07, 0x0C07}, + {0x0C08, 0x0C08, 0x0C08}, {0x0C09, 0x0C09, 0x0C09}, + {0x0C0A, 0x0C0A, 0x0C0A}, {0x0C0B, 0x0C0B, 0x0C0B}, + {0x0C0C, 0x0C0C, 0x0C0C}, {0x0C0E, 0x0C0E, 0x0C0E}, + {0x0C0F, 0x0C0F, 0x0C0F}, {0x0C10, 0x0C10, 0x0C10}, + {0x0C12, 0x0C12, 0x0C12}, {0x0C13, 0x0C13, 0x0C13}, + {0x0C14, 0x0C14, 0x0C14}, {0x0C15, 0x0C15, 0x0C15}, + {0x0C16, 0x0C16, 0x0C16}, {0x0C17, 0x0C17, 0x0C17}, + {0x0C18, 0x0C18, 0x0C18}, {0x0C19, 0x0C19, 0x0C19}, + {0x0C1A, 0x0C1A, 0x0C1A}, {0x0C1B, 0x0C1B, 0x0C1B}, + {0x0C1C, 0x0C1C, 0x0C1C}, {0x0C1D, 0x0C1D, 0x0C1D}, + {0x0C1E, 0x0C1E, 0x0C1E}, {0x0C1F, 0x0C1F, 0x0C1F}, + {0x0C20, 0x0C20, 0x0C20}, {0x0C21, 0x0C21, 0x0C21}, + {0x0C22, 0x0C22, 0x0C22}, {0x0C23, 0x0C23, 0x0C23}, + {0x0C24, 0x0C24, 0x0C24}, {0x0C25, 0x0C25, 0x0C25}, + {0x0C26, 0x0C26, 0x0C26}, {0x0C27, 0x0C27, 0x0C27}, + {0x0C28, 0x0C28, 0x0C28}, {0x0C2A, 0x0C2A, 0x0C2A}, + {0x0C2B, 0x0C2B, 0x0C2B}, {0x0C2C, 0x0C2C, 0x0C2C}, + {0x0C2D, 0x0C2D, 0x0C2D}, {0x0C2E, 0x0C2E, 0x0C2E}, + {0x0C2F, 0x0C2F, 0x0C2F}, {0x0C30, 0x0C30, 0x0C30}, + {0x0C31, 0x0C31, 0x0C31}, {0x0C32, 0x0C32, 0x0C32}, + {0x0C33, 0x0C33, 0x0C33}, {0x0C35, 0x0C35, 0x0C35}, + {0x0C36, 0x0C36, 0x0C36}, {0x0C37, 0x0C37, 0x0C37}, + {0x0C38, 0x0C38, 0x0C38}, {0x0C39, 0x0C39, 0x0C39}, + {0x0C3E, 0x0C3E, 0x0C3E}, {0x0C3F, 0x0C3F, 0x0C3F}, + {0x0C40, 0x0C40, 0x0C40}, {0x0C46, 0x0C46, 0x0C46}, + {0x0C47, 0x0C47, 0x0C47}, {0x0C48, 0x0C48, 0x0C48}, + {0x0C4A, 0x0C4A, 0x0C4A}, {0x0C4B, 0x0C4B, 0x0C4B}, + {0x0C4C, 0x0C4C, 0x0C4C}, {0x0C4D, 0x0C4D, 0x0C4D}, + {0x0C55, 0x0C55, 0x0C55}, {0x0C56, 0x0C56, 0x0C56}, + {0x0C60, 0x0C60, 0x0C60}, {0x0C61, 0x0C61, 0x0C61}, + {0x0C85, 0x0C85, 0x0C85}, {0x0C86, 0x0C86, 0x0C86}, + {0x0C87, 0x0C87, 0x0C87}, {0x0C88, 0x0C88, 0x0C88}, + {0x0C89, 0x0C89, 0x0C89}, {0x0C8A, 0x0C8A, 0x0C8A}, + {0x0C8B, 0x0C8B, 0x0C8B}, {0x0C8C, 0x0C8C, 0x0C8C}, + {0x0C8E, 0x0C8E, 0x0C8E}, {0x0C8F, 0x0C8F, 0x0C8F}, + {0x0C90, 0x0C90, 0x0C90}, {0x0C92, 0x0C92, 0x0C92}, + {0x0C93, 0x0C93, 0x0C93}, {0x0C94, 0x0C94, 0x0C94}, + {0x0C95, 0x0C95, 0x0C95}, {0x0C96, 0x0C96, 0x0C96}, + {0x0C97, 0x0C97, 0x0C97}, {0x0C98, 0x0C98, 0x0C98}, + {0x0C99, 0x0C99, 0x0C99}, {0x0C9A, 0x0C9A, 0x0C9A}, + {0x0C9B, 0x0C9B, 0x0C9B}, {0x0C9C, 0x0C9C, 0x0C9C}, + {0x0C9D, 0x0C9D, 0x0C9D}, {0x0C9E, 0x0C9E, 0x0C9E}, + {0x0C9F, 0x0C9F, 0x0C9F}, {0x0CA0, 0x0CA0, 0x0CA0}, + {0x0CA1, 0x0CA1, 0x0CA1}, {0x0CA2, 0x0CA2, 0x0CA2}, + {0x0CA3, 0x0CA3, 0x0CA3}, {0x0CA4, 0x0CA4, 0x0CA4}, + {0x0CA5, 0x0CA5, 0x0CA5}, {0x0CA6, 0x0CA6, 0x0CA6}, + {0x0CA7, 0x0CA7, 0x0CA7}, {0x0CA8, 0x0CA8, 0x0CA8}, + {0x0CAA, 0x0CAA, 0x0CAA}, {0x0CAB, 0x0CAB, 0x0CAB}, + {0x0CAC, 0x0CAC, 0x0CAC}, {0x0CAD, 0x0CAD, 0x0CAD}, + {0x0CAE, 0x0CAE, 0x0CAE}, {0x0CAF, 0x0CAF, 0x0CAF}, + {0x0CB0, 0x0CB0, 0x0CB0}, {0x0CB1, 0x0CB1, 0x0CB1}, + {0x0CB2, 0x0CB2, 0x0CB2}, {0x0CB3, 0x0CB3, 0x0CB3}, + {0x0CB5, 0x0CB5, 0x0CB5}, {0x0CB6, 0x0CB6, 0x0CB6}, + {0x0CB7, 0x0CB7, 0x0CB7}, {0x0CB8, 0x0CB8, 0x0CB8}, + {0x0CB9, 0x0CB9, 0x0CB9}, {0x0CBC, 0x0CBC, 0x0CBC}, + {0x0CBD, 0x0CBD, 0x0CBD}, {0x0CBF, 0x0CBF, 0x0CBF}, + {0x0CC6, 0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCC, 0x0CCC}, + {0x0CCD, 0x0CCD, 0x0CCD}, {0x0CDE, 0x0CDE, 0x0CDE}, + {0x0CE0, 0x0CE0, 0x0CE0}, {0x0CE1, 0x0CE1, 0x0CE1}, + {0x0D05, 0x0D05, 0x0D05}, {0x0D06, 0x0D06, 0x0D06}, + {0x0D07, 0x0D07, 0x0D07}, {0x0D08, 0x0D08, 0x0D08}, + {0x0D09, 0x0D09, 0x0D09}, {0x0D0A, 0x0D0A, 0x0D0A}, + {0x0D0B, 0x0D0B, 0x0D0B}, {0x0D0C, 0x0D0C, 0x0D0C}, + {0x0D0E, 0x0D0E, 0x0D0E}, {0x0D0F, 0x0D0F, 0x0D0F}, + {0x0D10, 0x0D10, 0x0D10}, {0x0D12, 0x0D12, 0x0D12}, + {0x0D13, 0x0D13, 0x0D13}, {0x0D14, 0x0D14, 0x0D14}, + {0x0D15, 0x0D15, 0x0D15}, {0x0D16, 0x0D16, 0x0D16}, + {0x0D17, 0x0D17, 0x0D17}, {0x0D18, 0x0D18, 0x0D18}, + {0x0D19, 0x0D19, 0x0D19}, {0x0D1A, 0x0D1A, 0x0D1A}, + {0x0D1B, 0x0D1B, 0x0D1B}, {0x0D1C, 0x0D1C, 0x0D1C}, + {0x0D1D, 0x0D1D, 0x0D1D}, {0x0D1E, 0x0D1E, 0x0D1E}, + {0x0D1F, 0x0D1F, 0x0D1F}, {0x0D20, 0x0D20, 0x0D20}, + {0x0D21, 0x0D21, 0x0D21}, {0x0D22, 0x0D22, 0x0D22}, + {0x0D23, 0x0D23, 0x0D23}, {0x0D24, 0x0D24, 0x0D24}, + {0x0D25, 0x0D25, 0x0D25}, {0x0D26, 0x0D26, 0x0D26}, + {0x0D27, 0x0D27, 0x0D27}, {0x0D28, 0x0D28, 0x0D28}, + {0x0D2A, 0x0D2A, 0x0D2A}, {0x0D2B, 0x0D2B, 0x0D2B}, + {0x0D2C, 0x0D2C, 0x0D2C}, {0x0D2D, 0x0D2D, 0x0D2D}, + {0x0D2E, 0x0D2E, 0x0D2E}, {0x0D2F, 0x0D2F, 0x0D2F}, + {0x0D30, 0x0D30, 0x0D30}, {0x0D31, 0x0D31, 0x0D31}, + {0x0D32, 0x0D32, 0x0D32}, {0x0D33, 0x0D33, 0x0D33}, + {0x0D34, 0x0D34, 0x0D34}, {0x0D35, 0x0D35, 0x0D35}, + {0x0D36, 0x0D36, 0x0D36}, {0x0D37, 0x0D37, 0x0D37}, + {0x0D38, 0x0D38, 0x0D38}, {0x0D39, 0x0D39, 0x0D39}, + {0x0D41, 0x0D41, 0x0D41}, {0x0D42, 0x0D42, 0x0D42}, + {0x0D43, 0x0D43, 0x0D43}, {0x0D4D, 0x0D4D, 0x0D4D}, + {0x0D60, 0x0D60, 0x0D60}, {0x0D61, 0x0D61, 0x0D61}, + {0x0D85, 0x0D85, 0x0D85}, {0x0D86, 0x0D86, 0x0D86}, + {0x0D87, 0x0D87, 0x0D87}, {0x0D88, 0x0D88, 0x0D88}, + {0x0D89, 0x0D89, 0x0D89}, {0x0D8A, 0x0D8A, 0x0D8A}, + {0x0D8B, 0x0D8B, 0x0D8B}, {0x0D8C, 0x0D8C, 0x0D8C}, + {0x0D8D, 0x0D8D, 0x0D8D}, {0x0D8E, 0x0D8E, 0x0D8E}, + {0x0D8F, 0x0D8F, 0x0D8F}, {0x0D90, 0x0D90, 0x0D90}, + {0x0D91, 0x0D91, 0x0D91}, {0x0D92, 0x0D92, 0x0D92}, + {0x0D93, 0x0D93, 0x0D93}, {0x0D94, 0x0D94, 0x0D94}, + {0x0D95, 0x0D95, 0x0D95}, {0x0D96, 0x0D96, 0x0D96}, + {0x0D9A, 0x0D9A, 0x0D9A}, {0x0D9B, 0x0D9B, 0x0D9B}, + {0x0D9C, 0x0D9C, 0x0D9C}, {0x0D9D, 0x0D9D, 0x0D9D}, + {0x0D9E, 0x0D9E, 0x0D9E}, {0x0D9F, 0x0D9F, 0x0D9F}, + {0x0DA0, 0x0DA0, 0x0DA0}, {0x0DA1, 0x0DA1, 0x0DA1}, + {0x0DA2, 0x0DA2, 0x0DA2}, {0x0DA3, 0x0DA3, 0x0DA3}, + {0x0DA4, 0x0DA4, 0x0DA4}, {0x0DA5, 0x0DA5, 0x0DA5}, + {0x0DA6, 0x0DA6, 0x0DA6}, {0x0DA7, 0x0DA7, 0x0DA7}, + {0x0DA8, 0x0DA8, 0x0DA8}, {0x0DA9, 0x0DA9, 0x0DA9}, + {0x0DAA, 0x0DAA, 0x0DAA}, {0x0DAB, 0x0DAB, 0x0DAB}, + {0x0DAC, 0x0DAC, 0x0DAC}, {0x0DAD, 0x0DAD, 0x0DAD}, + {0x0DAE, 0x0DAE, 0x0DAE}, {0x0DAF, 0x0DAF, 0x0DAF}, + {0x0DB0, 0x0DB0, 0x0DB0}, {0x0DB1, 0x0DB1, 0x0DB1}, + {0x0DB3, 0x0DB3, 0x0DB3}, {0x0DB4, 0x0DB4, 0x0DB4}, + {0x0DB5, 0x0DB5, 0x0DB5}, {0x0DB6, 0x0DB6, 0x0DB6}, + {0x0DB7, 0x0DB7, 0x0DB7}, {0x0DB8, 0x0DB8, 0x0DB8}, + {0x0DB9, 0x0DB9, 0x0DB9}, {0x0DBA, 0x0DBA, 0x0DBA}, + {0x0DBB, 0x0DBB, 0x0DBB}, {0x0DBD, 0x0DBD, 0x0DBD}, + {0x0DC0, 0x0DC0, 0x0DC0}, {0x0DC1, 0x0DC1, 0x0DC1}, + {0x0DC2, 0x0DC2, 0x0DC2}, {0x0DC3, 0x0DC3, 0x0DC3}, + {0x0DC4, 0x0DC4, 0x0DC4}, {0x0DC5, 0x0DC5, 0x0DC5}, + {0x0DC6, 0x0DC6, 0x0DC6}, {0x0DCA, 0x0DCA, 0x0DCA}, + {0x0DD2, 0x0DD2, 0x0DD2}, {0x0DD3, 0x0DD3, 0x0DD3}, + {0x0DD4, 0x0DD4, 0x0DD4}, {0x0DD6, 0x0DD6, 0x0DD6}, + {0x0E01, 0x0E01, 0x0E01}, {0x0E02, 0x0E02, 0x0E02}, + {0x0E03, 0x0E03, 0x0E03}, {0x0E04, 0x0E04, 0x0E04}, + {0x0E05, 0x0E05, 0x0E05}, {0x0E06, 0x0E06, 0x0E06}, + {0x0E07, 0x0E07, 0x0E07}, {0x0E08, 0x0E08, 0x0E08}, + {0x0E09, 0x0E09, 0x0E09}, {0x0E0A, 0x0E0A, 0x0E0A}, + {0x0E0B, 0x0E0B, 0x0E0B}, {0x0E0C, 0x0E0C, 0x0E0C}, + {0x0E0D, 0x0E0D, 0x0E0D}, {0x0E0E, 0x0E0E, 0x0E0E}, + {0x0E0F, 0x0E0F, 0x0E0F}, {0x0E10, 0x0E10, 0x0E10}, + {0x0E11, 0x0E11, 0x0E11}, {0x0E12, 0x0E12, 0x0E12}, + {0x0E13, 0x0E13, 0x0E13}, {0x0E14, 0x0E14, 0x0E14}, + {0x0E15, 0x0E15, 0x0E15}, {0x0E16, 0x0E16, 0x0E16}, + {0x0E17, 0x0E17, 0x0E17}, {0x0E18, 0x0E18, 0x0E18}, + {0x0E19, 0x0E19, 0x0E19}, {0x0E1A, 0x0E1A, 0x0E1A}, + {0x0E1B, 0x0E1B, 0x0E1B}, {0x0E1C, 0x0E1C, 0x0E1C}, + {0x0E1D, 0x0E1D, 0x0E1D}, {0x0E1E, 0x0E1E, 0x0E1E}, + {0x0E1F, 0x0E1F, 0x0E1F}, {0x0E20, 0x0E20, 0x0E20}, + {0x0E21, 0x0E21, 0x0E21}, {0x0E22, 0x0E22, 0x0E22}, + {0x0E23, 0x0E23, 0x0E23}, {0x0E24, 0x0E24, 0x0E24}, + {0x0E25, 0x0E25, 0x0E25}, {0x0E26, 0x0E26, 0x0E26}, + {0x0E27, 0x0E27, 0x0E27}, {0x0E28, 0x0E28, 0x0E28}, + {0x0E29, 0x0E29, 0x0E29}, {0x0E2A, 0x0E2A, 0x0E2A}, + {0x0E2B, 0x0E2B, 0x0E2B}, {0x0E2C, 0x0E2C, 0x0E2C}, + {0x0E2D, 0x0E2D, 0x0E2D}, {0x0E2E, 0x0E2E, 0x0E2E}, + {0x0E2F, 0x0E2F, 0x0E2F}, {0x0E30, 0x0E30, 0x0E30}, + {0x0E31, 0x0E31, 0x0E31}, {0x0E32, 0x0E32, 0x0E32}, + {0x0E33, 0x0E33, 0x0E33}, {0x0E34, 0x0E34, 0x0E34}, + {0x0E35, 0x0E35, 0x0E35}, {0x0E36, 0x0E36, 0x0E36}, + {0x0E37, 0x0E37, 0x0E37}, {0x0E38, 0x0E38, 0x0E38}, + {0x0E39, 0x0E39, 0x0E39}, {0x0E3A, 0x0E3A, 0x0E3A}, + {0x0E40, 0x0E40, 0x0E40}, {0x0E41, 0x0E41, 0x0E41}, + {0x0E42, 0x0E42, 0x0E42}, {0x0E43, 0x0E43, 0x0E43}, + {0x0E44, 0x0E44, 0x0E44}, {0x0E45, 0x0E45, 0x0E45}, + {0x0E46, 0x0E46, 0x0E46}, {0x0E47, 0x0E47, 0x0E47}, + {0x0E48, 0x0E48, 0x0E48}, {0x0E49, 0x0E49, 0x0E49}, + {0x0E4A, 0x0E4A, 0x0E4A}, {0x0E4B, 0x0E4B, 0x0E4B}, + {0x0E4C, 0x0E4C, 0x0E4C}, {0x0E4D, 0x0E4D, 0x0E4D}, + {0x0E4E, 0x0E4E, 0x0E4E}, {0x0E81, 0x0E81, 0x0E81}, + {0x0E82, 0x0E82, 0x0E82}, {0x0E84, 0x0E84, 0x0E84}, + {0x0E87, 0x0E87, 0x0E87}, {0x0E88, 0x0E88, 0x0E88}, + {0x0E8A, 0x0E8A, 0x0E8A}, {0x0E8D, 0x0E8D, 0x0E8D}, + {0x0E94, 0x0E94, 0x0E94}, {0x0E95, 0x0E95, 0x0E95}, + {0x0E96, 0x0E96, 0x0E96}, {0x0E97, 0x0E97, 0x0E97}, + {0x0E99, 0x0E99, 0x0E99}, {0x0E9A, 0x0E9A, 0x0E9A}, + {0x0E9B, 0x0E9B, 0x0E9B}, {0x0E9C, 0x0E9C, 0x0E9C}, + {0x0E9D, 0x0E9D, 0x0E9D}, {0x0E9E, 0x0E9E, 0x0E9E}, + {0x0E9F, 0x0E9F, 0x0E9F}, {0x0EA1, 0x0EA1, 0x0EA1}, + {0x0EA2, 0x0EA2, 0x0EA2}, {0x0EA3, 0x0EA3, 0x0EA3}, + {0x0EA5, 0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7, 0x0EA7}, + {0x0EAA, 0x0EAA, 0x0EAA}, {0x0EAB, 0x0EAB, 0x0EAB}, + {0x0EAD, 0x0EAD, 0x0EAD}, {0x0EAE, 0x0EAE, 0x0EAE}, + {0x0EAF, 0x0EAF, 0x0EAF}, {0x0EB0, 0x0EB0, 0x0EB0}, + {0x0EB1, 0x0EB1, 0x0EB1}, {0x0EB2, 0x0EB2, 0x0EB2}, + {0x0EB3, 0x0EB3, 0x0EB3}, {0x0EB4, 0x0EB4, 0x0EB4}, + {0x0EB5, 0x0EB5, 0x0EB5}, {0x0EB6, 0x0EB6, 0x0EB6}, + {0x0EB7, 0x0EB7, 0x0EB7}, {0x0EB8, 0x0EB8, 0x0EB8}, + {0x0EB9, 0x0EB9, 0x0EB9}, {0x0EBB, 0x0EBB, 0x0EBB}, + {0x0EBC, 0x0EBC, 0x0EBC}, {0x0EBD, 0x0EBD, 0x0EBD}, + {0x0EC0, 0x0EC0, 0x0EC0}, {0x0EC1, 0x0EC1, 0x0EC1}, + {0x0EC2, 0x0EC2, 0x0EC2}, {0x0EC3, 0x0EC3, 0x0EC3}, + {0x0EC4, 0x0EC4, 0x0EC4}, {0x0EC6, 0x0EC6, 0x0EC6}, + {0x0EC8, 0x0EC8, 0x0EC8}, {0x0EC9, 0x0EC9, 0x0EC9}, + {0x0ECA, 0x0ECA, 0x0ECA}, {0x0ECB, 0x0ECB, 0x0ECB}, + {0x0ECC, 0x0ECC, 0x0ECC}, {0x0ECD, 0x0ECD, 0x0ECD}, + {0x0EDC, 0x0EDC, 0x0EDC}, {0x0EDD, 0x0EDD, 0x0EDD}, + {0x0F00, 0x0F00, 0x0F00}, {0x0F18, 0x0F18, 0x0F18}, + {0x0F19, 0x0F19, 0x0F19}, {0x0F35, 0x0F35, 0x0F35}, + {0x0F37, 0x0F37, 0x0F37}, {0x0F39, 0x0F39, 0x0F39}, + {0x0F40, 0x0F40, 0x0F40}, {0x0F41, 0x0F41, 0x0F41}, + {0x0F42, 0x0F42, 0x0F42}, {0x0F43, 0x0F43, 0x0F43}, + {0x0F44, 0x0F44, 0x0F44}, {0x0F45, 0x0F45, 0x0F45}, + {0x0F46, 0x0F46, 0x0F46}, {0x0F47, 0x0F47, 0x0F47}, + {0x0F49, 0x0F49, 0x0F49}, {0x0F4A, 0x0F4A, 0x0F4A}, + {0x0F4B, 0x0F4B, 0x0F4B}, {0x0F4C, 0x0F4C, 0x0F4C}, + {0x0F4D, 0x0F4D, 0x0F4D}, {0x0F4E, 0x0F4E, 0x0F4E}, + {0x0F4F, 0x0F4F, 0x0F4F}, {0x0F50, 0x0F50, 0x0F50}, + {0x0F51, 0x0F51, 0x0F51}, {0x0F52, 0x0F52, 0x0F52}, + {0x0F53, 0x0F53, 0x0F53}, {0x0F54, 0x0F54, 0x0F54}, + {0x0F55, 0x0F55, 0x0F55}, {0x0F56, 0x0F56, 0x0F56}, + {0x0F57, 0x0F57, 0x0F57}, {0x0F58, 0x0F58, 0x0F58}, + {0x0F59, 0x0F59, 0x0F59}, {0x0F5A, 0x0F5A, 0x0F5A}, + {0x0F5B, 0x0F5B, 0x0F5B}, {0x0F5C, 0x0F5C, 0x0F5C}, + {0x0F5D, 0x0F5D, 0x0F5D}, {0x0F5E, 0x0F5E, 0x0F5E}, + {0x0F5F, 0x0F5F, 0x0F5F}, {0x0F60, 0x0F60, 0x0F60}, + {0x0F61, 0x0F61, 0x0F61}, {0x0F62, 0x0F62, 0x0F62}, + {0x0F63, 0x0F63, 0x0F63}, {0x0F64, 0x0F64, 0x0F64}, + {0x0F65, 0x0F65, 0x0F65}, {0x0F66, 0x0F66, 0x0F66}, + {0x0F67, 0x0F67, 0x0F67}, {0x0F68, 0x0F68, 0x0F68}, + {0x0F69, 0x0F69, 0x0F69}, {0x0F6A, 0x0F6A, 0x0F6A}, + {0x0F71, 0x0F71, 0x0F71}, {0x0F72, 0x0F72, 0x0F72}, + {0x0F73, 0x0F73, 0x0F73}, {0x0F74, 0x0F74, 0x0F74}, + {0x0F75, 0x0F75, 0x0F75}, {0x0F76, 0x0F76, 0x0F76}, + {0x0F77, 0x0F77, 0x0F77}, {0x0F78, 0x0F78, 0x0F78}, + {0x0F79, 0x0F79, 0x0F79}, {0x0F7A, 0x0F7A, 0x0F7A}, + {0x0F7B, 0x0F7B, 0x0F7B}, {0x0F7C, 0x0F7C, 0x0F7C}, + {0x0F7D, 0x0F7D, 0x0F7D}, {0x0F7E, 0x0F7E, 0x0F7E}, + {0x0F80, 0x0F80, 0x0F80}, {0x0F81, 0x0F81, 0x0F81}, + {0x0F82, 0x0F82, 0x0F82}, {0x0F83, 0x0F83, 0x0F83}, + {0x0F84, 0x0F84, 0x0F84}, {0x0F86, 0x0F86, 0x0F86}, + {0x0F87, 0x0F87, 0x0F87}, {0x0F88, 0x0F88, 0x0F88}, + {0x0F89, 0x0F89, 0x0F89}, {0x0F8A, 0x0F8A, 0x0F8A}, + {0x0F8B, 0x0F8B, 0x0F8B}, {0x0F90, 0x0F90, 0x0F90}, + {0x0F91, 0x0F91, 0x0F91}, {0x0F92, 0x0F92, 0x0F92}, + {0x0F93, 0x0F93, 0x0F93}, {0x0F94, 0x0F94, 0x0F94}, + {0x0F95, 0x0F95, 0x0F95}, {0x0F96, 0x0F96, 0x0F96}, + {0x0F97, 0x0F97, 0x0F97}, {0x0F99, 0x0F99, 0x0F99}, + {0x0F9A, 0x0F9A, 0x0F9A}, {0x0F9B, 0x0F9B, 0x0F9B}, + {0x0F9C, 0x0F9C, 0x0F9C}, {0x0F9D, 0x0F9D, 0x0F9D}, + {0x0F9E, 0x0F9E, 0x0F9E}, {0x0F9F, 0x0F9F, 0x0F9F}, + {0x0FA0, 0x0FA0, 0x0FA0}, {0x0FA1, 0x0FA1, 0x0FA1}, + {0x0FA2, 0x0FA2, 0x0FA2}, {0x0FA3, 0x0FA3, 0x0FA3}, + {0x0FA4, 0x0FA4, 0x0FA4}, {0x0FA5, 0x0FA5, 0x0FA5}, + {0x0FA6, 0x0FA6, 0x0FA6}, {0x0FA7, 0x0FA7, 0x0FA7}, + {0x0FA8, 0x0FA8, 0x0FA8}, {0x0FA9, 0x0FA9, 0x0FA9}, + {0x0FAA, 0x0FAA, 0x0FAA}, {0x0FAB, 0x0FAB, 0x0FAB}, + {0x0FAC, 0x0FAC, 0x0FAC}, {0x0FAD, 0x0FAD, 0x0FAD}, + {0x0FAE, 0x0FAE, 0x0FAE}, {0x0FAF, 0x0FAF, 0x0FAF}, + {0x0FB0, 0x0FB0, 0x0FB0}, {0x0FB1, 0x0FB1, 0x0FB1}, + {0x0FB2, 0x0FB2, 0x0FB2}, {0x0FB3, 0x0FB3, 0x0FB3}, + {0x0FB4, 0x0FB4, 0x0FB4}, {0x0FB5, 0x0FB5, 0x0FB5}, + {0x0FB6, 0x0FB6, 0x0FB6}, {0x0FB7, 0x0FB7, 0x0FB7}, + {0x0FB8, 0x0FB8, 0x0FB8}, {0x0FB9, 0x0FB9, 0x0FB9}, + {0x0FBA, 0x0FBA, 0x0FBA}, {0x0FBB, 0x0FBB, 0x0FBB}, + {0x0FBC, 0x0FBC, 0x0FBC}, {0x0FC6, 0x0FC6, 0x0FC6}, + {0x1000, 0x1000, 0x1000}, {0x1001, 0x1001, 0x1001}, + {0x1002, 0x1002, 0x1002}, {0x1003, 0x1003, 0x1003}, + {0x1004, 0x1004, 0x1004}, {0x1005, 0x1005, 0x1005}, + {0x1006, 0x1006, 0x1006}, {0x1007, 0x1007, 0x1007}, + {0x1008, 0x1008, 0x1008}, {0x1009, 0x1009, 0x1009}, + {0x100A, 0x100A, 0x100A}, {0x100B, 0x100B, 0x100B}, + {0x100C, 0x100C, 0x100C}, {0x100D, 0x100D, 0x100D}, + {0x100E, 0x100E, 0x100E}, {0x100F, 0x100F, 0x100F}, + {0x1010, 0x1010, 0x1010}, {0x1011, 0x1011, 0x1011}, + {0x1012, 0x1012, 0x1012}, {0x1013, 0x1013, 0x1013}, + {0x1014, 0x1014, 0x1014}, {0x1015, 0x1015, 0x1015}, + {0x1016, 0x1016, 0x1016}, {0x1017, 0x1017, 0x1017}, + {0x1018, 0x1018, 0x1018}, {0x1019, 0x1019, 0x1019}, + {0x101A, 0x101A, 0x101A}, {0x101B, 0x101B, 0x101B}, + {0x101C, 0x101C, 0x101C}, {0x101D, 0x101D, 0x101D}, + {0x101E, 0x101E, 0x101E}, {0x101F, 0x101F, 0x101F}, + {0x1020, 0x1020, 0x1020}, {0x1021, 0x1021, 0x1021}, + {0x1023, 0x1023, 0x1023}, {0x1024, 0x1024, 0x1024}, + {0x1025, 0x1025, 0x1025}, {0x1026, 0x1026, 0x1026}, + {0x1027, 0x1027, 0x1027}, {0x1029, 0x1029, 0x1029}, + {0x102A, 0x102A, 0x102A}, {0x102D, 0x102D, 0x102D}, + {0x102E, 0x102E, 0x102E}, {0x102F, 0x102F, 0x102F}, + {0x1030, 0x1030, 0x1030}, {0x1032, 0x1032, 0x1032}, + {0x1036, 0x1036, 0x1036}, {0x1037, 0x1037, 0x1037}, + {0x1039, 0x1039, 0x1039}, {0x1050, 0x1050, 0x1050}, + {0x1051, 0x1051, 0x1051}, {0x1052, 0x1052, 0x1052}, + {0x1053, 0x1053, 0x1053}, {0x1054, 0x1054, 0x1054}, + {0x1055, 0x1055, 0x1055}, {0x1058, 0x1058, 0x1058}, + {0x1059, 0x1059, 0x1059}, {0x10A0, 0x10A0, 0x2D00}, + {0x10A1, 0x10A1, 0x2D01}, {0x10A2, 0x10A2, 0x2D02}, + {0x10A3, 0x10A3, 0x2D03}, {0x10A4, 0x10A4, 0x2D04}, + {0x10A5, 0x10A5, 0x2D05}, {0x10A6, 0x10A6, 0x2D06}, + {0x10A7, 0x10A7, 0x2D07}, {0x10A8, 0x10A8, 0x2D08}, + {0x10A9, 0x10A9, 0x2D09}, {0x10AA, 0x10AA, 0x2D0A}, + {0x10AB, 0x10AB, 0x2D0B}, {0x10AC, 0x10AC, 0x2D0C}, + {0x10AD, 0x10AD, 0x2D0D}, {0x10AE, 0x10AE, 0x2D0E}, + {0x10AF, 0x10AF, 0x2D0F}, {0x10B0, 0x10B0, 0x2D10}, + {0x10B1, 0x10B1, 0x2D11}, {0x10B2, 0x10B2, 0x2D12}, + {0x10B3, 0x10B3, 0x2D13}, {0x10B4, 0x10B4, 0x2D14}, + {0x10B5, 0x10B5, 0x2D15}, {0x10B6, 0x10B6, 0x2D16}, + {0x10B7, 0x10B7, 0x2D17}, {0x10B8, 0x10B8, 0x2D18}, + {0x10B9, 0x10B9, 0x2D19}, {0x10BA, 0x10BA, 0x2D1A}, + {0x10BB, 0x10BB, 0x2D1B}, {0x10BC, 0x10BC, 0x2D1C}, + {0x10BD, 0x10BD, 0x2D1D}, {0x10BE, 0x10BE, 0x2D1E}, + {0x10BF, 0x10BF, 0x2D1F}, {0x10C0, 0x10C0, 0x2D20}, + {0x10C1, 0x10C1, 0x2D21}, {0x10C2, 0x10C2, 0x2D22}, + {0x10C3, 0x10C3, 0x2D23}, {0x10C4, 0x10C4, 0x2D24}, + {0x10C5, 0x10C5, 0x2D25}, {0x10D0, 0x10D0, 0x10D0}, + {0x10D1, 0x10D1, 0x10D1}, {0x10D2, 0x10D2, 0x10D2}, + {0x10D3, 0x10D3, 0x10D3}, {0x10D4, 0x10D4, 0x10D4}, + {0x10D5, 0x10D5, 0x10D5}, {0x10D6, 0x10D6, 0x10D6}, + {0x10D7, 0x10D7, 0x10D7}, {0x10D8, 0x10D8, 0x10D8}, + {0x10D9, 0x10D9, 0x10D9}, {0x10DA, 0x10DA, 0x10DA}, + {0x10DB, 0x10DB, 0x10DB}, {0x10DC, 0x10DC, 0x10DC}, + {0x10DD, 0x10DD, 0x10DD}, {0x10DE, 0x10DE, 0x10DE}, + {0x10DF, 0x10DF, 0x10DF}, {0x10E0, 0x10E0, 0x10E0}, + {0x10E1, 0x10E1, 0x10E1}, {0x10E2, 0x10E2, 0x10E2}, + {0x10E3, 0x10E3, 0x10E3}, {0x10E4, 0x10E4, 0x10E4}, + {0x10E5, 0x10E5, 0x10E5}, {0x10E6, 0x10E6, 0x10E6}, + {0x10E7, 0x10E7, 0x10E7}, {0x10E8, 0x10E8, 0x10E8}, + {0x10E9, 0x10E9, 0x10E9}, {0x10EA, 0x10EA, 0x10EA}, + {0x10EB, 0x10EB, 0x10EB}, {0x10EC, 0x10EC, 0x10EC}, + {0x10ED, 0x10ED, 0x10ED}, {0x10EE, 0x10EE, 0x10EE}, + {0x10EF, 0x10EF, 0x10EF}, {0x10F0, 0x10F0, 0x10F0}, + {0x10F1, 0x10F1, 0x10F1}, {0x10F2, 0x10F2, 0x10F2}, + {0x10F3, 0x10F3, 0x10F3}, {0x10F4, 0x10F4, 0x10F4}, + {0x10F5, 0x10F5, 0x10F5}, {0x10F6, 0x10F6, 0x10F6}, + {0x10F7, 0x10F7, 0x10F7}, {0x10F8, 0x10F8, 0x10F8}, + {0x10F9, 0x10F9, 0x10F9}, {0x10FA, 0x10FA, 0x10FA}, + {0x10FC, 0x10FC, 0x10FC}, {0x1100, 0x1100, 0x1100}, + {0x1101, 0x1101, 0x1101}, {0x1102, 0x1102, 0x1102}, + {0x1103, 0x1103, 0x1103}, {0x1104, 0x1104, 0x1104}, + {0x1105, 0x1105, 0x1105}, {0x1106, 0x1106, 0x1106}, + {0x1107, 0x1107, 0x1107}, {0x1108, 0x1108, 0x1108}, + {0x1109, 0x1109, 0x1109}, {0x110A, 0x110A, 0x110A}, + {0x110B, 0x110B, 0x110B}, {0x110C, 0x110C, 0x110C}, + {0x110D, 0x110D, 0x110D}, {0x110E, 0x110E, 0x110E}, + {0x110F, 0x110F, 0x110F}, {0x1110, 0x1110, 0x1110}, + {0x1111, 0x1111, 0x1111}, {0x1112, 0x1112, 0x1112}, + {0x1113, 0x1113, 0x1113}, {0x1114, 0x1114, 0x1114}, + {0x1115, 0x1115, 0x1115}, {0x1116, 0x1116, 0x1116}, + {0x1117, 0x1117, 0x1117}, {0x1118, 0x1118, 0x1118}, + {0x1119, 0x1119, 0x1119}, {0x111A, 0x111A, 0x111A}, + {0x111B, 0x111B, 0x111B}, {0x111C, 0x111C, 0x111C}, + {0x111D, 0x111D, 0x111D}, {0x111E, 0x111E, 0x111E}, + {0x111F, 0x111F, 0x111F}, {0x1120, 0x1120, 0x1120}, + {0x1121, 0x1121, 0x1121}, {0x1122, 0x1122, 0x1122}, + {0x1123, 0x1123, 0x1123}, {0x1124, 0x1124, 0x1124}, + {0x1125, 0x1125, 0x1125}, {0x1126, 0x1126, 0x1126}, + {0x1127, 0x1127, 0x1127}, {0x1128, 0x1128, 0x1128}, + {0x1129, 0x1129, 0x1129}, {0x112A, 0x112A, 0x112A}, + {0x112B, 0x112B, 0x112B}, {0x112C, 0x112C, 0x112C}, + {0x112D, 0x112D, 0x112D}, {0x112E, 0x112E, 0x112E}, + {0x112F, 0x112F, 0x112F}, {0x1130, 0x1130, 0x1130}, + {0x1131, 0x1131, 0x1131}, {0x1132, 0x1132, 0x1132}, + {0x1133, 0x1133, 0x1133}, {0x1134, 0x1134, 0x1134}, + {0x1135, 0x1135, 0x1135}, {0x1136, 0x1136, 0x1136}, + {0x1137, 0x1137, 0x1137}, {0x1138, 0x1138, 0x1138}, + {0x1139, 0x1139, 0x1139}, {0x113A, 0x113A, 0x113A}, + {0x113B, 0x113B, 0x113B}, {0x113C, 0x113C, 0x113C}, + {0x113D, 0x113D, 0x113D}, {0x113E, 0x113E, 0x113E}, + {0x113F, 0x113F, 0x113F}, {0x1140, 0x1140, 0x1140}, + {0x1141, 0x1141, 0x1141}, {0x1142, 0x1142, 0x1142}, + {0x1143, 0x1143, 0x1143}, {0x1144, 0x1144, 0x1144}, + {0x1145, 0x1145, 0x1145}, {0x1146, 0x1146, 0x1146}, + {0x1147, 0x1147, 0x1147}, {0x1148, 0x1148, 0x1148}, + {0x1149, 0x1149, 0x1149}, {0x114A, 0x114A, 0x114A}, + {0x114B, 0x114B, 0x114B}, {0x114C, 0x114C, 0x114C}, + {0x114D, 0x114D, 0x114D}, {0x114E, 0x114E, 0x114E}, + {0x114F, 0x114F, 0x114F}, {0x1150, 0x1150, 0x1150}, + {0x1151, 0x1151, 0x1151}, {0x1152, 0x1152, 0x1152}, + {0x1153, 0x1153, 0x1153}, {0x1154, 0x1154, 0x1154}, + {0x1155, 0x1155, 0x1155}, {0x1156, 0x1156, 0x1156}, + {0x1157, 0x1157, 0x1157}, {0x1158, 0x1158, 0x1158}, + {0x1159, 0x1159, 0x1159}, {0x115F, 0x115F, 0x115F}, + {0x1160, 0x1160, 0x1160}, {0x1161, 0x1161, 0x1161}, + {0x1162, 0x1162, 0x1162}, {0x1163, 0x1163, 0x1163}, + {0x1164, 0x1164, 0x1164}, {0x1165, 0x1165, 0x1165}, + {0x1166, 0x1166, 0x1166}, {0x1167, 0x1167, 0x1167}, + {0x1168, 0x1168, 0x1168}, {0x1169, 0x1169, 0x1169}, + {0x116A, 0x116A, 0x116A}, {0x116B, 0x116B, 0x116B}, + {0x116C, 0x116C, 0x116C}, {0x116D, 0x116D, 0x116D}, + {0x116E, 0x116E, 0x116E}, {0x116F, 0x116F, 0x116F}, + {0x1170, 0x1170, 0x1170}, {0x1171, 0x1171, 0x1171}, + {0x1172, 0x1172, 0x1172}, {0x1173, 0x1173, 0x1173}, + {0x1174, 0x1174, 0x1174}, {0x1175, 0x1175, 0x1175}, + {0x1176, 0x1176, 0x1176}, {0x1177, 0x1177, 0x1177}, + {0x1178, 0x1178, 0x1178}, {0x1179, 0x1179, 0x1179}, + {0x117A, 0x117A, 0x117A}, {0x117B, 0x117B, 0x117B}, + {0x117C, 0x117C, 0x117C}, {0x117D, 0x117D, 0x117D}, + {0x117E, 0x117E, 0x117E}, {0x117F, 0x117F, 0x117F}, + {0x1180, 0x1180, 0x1180}, {0x1181, 0x1181, 0x1181}, + {0x1182, 0x1182, 0x1182}, {0x1183, 0x1183, 0x1183}, + {0x1184, 0x1184, 0x1184}, {0x1185, 0x1185, 0x1185}, + {0x1186, 0x1186, 0x1186}, {0x1187, 0x1187, 0x1187}, + {0x1188, 0x1188, 0x1188}, {0x1189, 0x1189, 0x1189}, + {0x118A, 0x118A, 0x118A}, {0x118B, 0x118B, 0x118B}, + {0x118C, 0x118C, 0x118C}, {0x118D, 0x118D, 0x118D}, + {0x118E, 0x118E, 0x118E}, {0x118F, 0x118F, 0x118F}, + {0x1190, 0x1190, 0x1190}, {0x1191, 0x1191, 0x1191}, + {0x1192, 0x1192, 0x1192}, {0x1193, 0x1193, 0x1193}, + {0x1194, 0x1194, 0x1194}, {0x1195, 0x1195, 0x1195}, + {0x1196, 0x1196, 0x1196}, {0x1197, 0x1197, 0x1197}, + {0x1198, 0x1198, 0x1198}, {0x1199, 0x1199, 0x1199}, + {0x119A, 0x119A, 0x119A}, {0x119B, 0x119B, 0x119B}, + {0x119C, 0x119C, 0x119C}, {0x119D, 0x119D, 0x119D}, + {0x119E, 0x119E, 0x119E}, {0x119F, 0x119F, 0x119F}, + {0x11A0, 0x11A0, 0x11A0}, {0x11A1, 0x11A1, 0x11A1}, + {0x11A2, 0x11A2, 0x11A2}, {0x11A8, 0x11A8, 0x11A8}, + {0x11A9, 0x11A9, 0x11A9}, {0x11AA, 0x11AA, 0x11AA}, + {0x11AB, 0x11AB, 0x11AB}, {0x11AC, 0x11AC, 0x11AC}, + {0x11AD, 0x11AD, 0x11AD}, {0x11AE, 0x11AE, 0x11AE}, + {0x11AF, 0x11AF, 0x11AF}, {0x11B0, 0x11B0, 0x11B0}, + {0x11B1, 0x11B1, 0x11B1}, {0x11B2, 0x11B2, 0x11B2}, + {0x11B3, 0x11B3, 0x11B3}, {0x11B4, 0x11B4, 0x11B4}, + {0x11B5, 0x11B5, 0x11B5}, {0x11B6, 0x11B6, 0x11B6}, + {0x11B7, 0x11B7, 0x11B7}, {0x11B8, 0x11B8, 0x11B8}, + {0x11B9, 0x11B9, 0x11B9}, {0x11BA, 0x11BA, 0x11BA}, + {0x11BB, 0x11BB, 0x11BB}, {0x11BC, 0x11BC, 0x11BC}, + {0x11BD, 0x11BD, 0x11BD}, {0x11BE, 0x11BE, 0x11BE}, + {0x11BF, 0x11BF, 0x11BF}, {0x11C0, 0x11C0, 0x11C0}, + {0x11C1, 0x11C1, 0x11C1}, {0x11C2, 0x11C2, 0x11C2}, + {0x11C3, 0x11C3, 0x11C3}, {0x11C4, 0x11C4, 0x11C4}, + {0x11C5, 0x11C5, 0x11C5}, {0x11C6, 0x11C6, 0x11C6}, + {0x11C7, 0x11C7, 0x11C7}, {0x11C8, 0x11C8, 0x11C8}, + {0x11C9, 0x11C9, 0x11C9}, {0x11CA, 0x11CA, 0x11CA}, + {0x11CB, 0x11CB, 0x11CB}, {0x11CC, 0x11CC, 0x11CC}, + {0x11CD, 0x11CD, 0x11CD}, {0x11CE, 0x11CE, 0x11CE}, + {0x11CF, 0x11CF, 0x11CF}, {0x11D0, 0x11D0, 0x11D0}, + {0x11D1, 0x11D1, 0x11D1}, {0x11D2, 0x11D2, 0x11D2}, + {0x11D3, 0x11D3, 0x11D3}, {0x11D4, 0x11D4, 0x11D4}, + {0x11D5, 0x11D5, 0x11D5}, {0x11D6, 0x11D6, 0x11D6}, + {0x11D7, 0x11D7, 0x11D7}, {0x11D8, 0x11D8, 0x11D8}, + {0x11D9, 0x11D9, 0x11D9}, {0x11DA, 0x11DA, 0x11DA}, + {0x11DB, 0x11DB, 0x11DB}, {0x11DC, 0x11DC, 0x11DC}, + {0x11DD, 0x11DD, 0x11DD}, {0x11DE, 0x11DE, 0x11DE}, + {0x11DF, 0x11DF, 0x11DF}, {0x11E0, 0x11E0, 0x11E0}, + {0x11E1, 0x11E1, 0x11E1}, {0x11E2, 0x11E2, 0x11E2}, + {0x11E3, 0x11E3, 0x11E3}, {0x11E4, 0x11E4, 0x11E4}, + {0x11E5, 0x11E5, 0x11E5}, {0x11E6, 0x11E6, 0x11E6}, + {0x11E7, 0x11E7, 0x11E7}, {0x11E8, 0x11E8, 0x11E8}, + {0x11E9, 0x11E9, 0x11E9}, {0x11EA, 0x11EA, 0x11EA}, + {0x11EB, 0x11EB, 0x11EB}, {0x11EC, 0x11EC, 0x11EC}, + {0x11ED, 0x11ED, 0x11ED}, {0x11EE, 0x11EE, 0x11EE}, + {0x11EF, 0x11EF, 0x11EF}, {0x11F0, 0x11F0, 0x11F0}, + {0x11F1, 0x11F1, 0x11F1}, {0x11F2, 0x11F2, 0x11F2}, + {0x11F3, 0x11F3, 0x11F3}, {0x11F4, 0x11F4, 0x11F4}, + {0x11F5, 0x11F5, 0x11F5}, {0x11F6, 0x11F6, 0x11F6}, + {0x11F7, 0x11F7, 0x11F7}, {0x11F8, 0x11F8, 0x11F8}, + {0x11F9, 0x11F9, 0x11F9}, {0x1200, 0x1200, 0x1200}, + {0x1201, 0x1201, 0x1201}, {0x1202, 0x1202, 0x1202}, + {0x1203, 0x1203, 0x1203}, {0x1204, 0x1204, 0x1204}, + {0x1205, 0x1205, 0x1205}, {0x1206, 0x1206, 0x1206}, + {0x1207, 0x1207, 0x1207}, {0x1208, 0x1208, 0x1208}, + {0x1209, 0x1209, 0x1209}, {0x120A, 0x120A, 0x120A}, + {0x120B, 0x120B, 0x120B}, {0x120C, 0x120C, 0x120C}, + {0x120D, 0x120D, 0x120D}, {0x120E, 0x120E, 0x120E}, + {0x120F, 0x120F, 0x120F}, {0x1210, 0x1210, 0x1210}, + {0x1211, 0x1211, 0x1211}, {0x1212, 0x1212, 0x1212}, + {0x1213, 0x1213, 0x1213}, {0x1214, 0x1214, 0x1214}, + {0x1215, 0x1215, 0x1215}, {0x1216, 0x1216, 0x1216}, + {0x1217, 0x1217, 0x1217}, {0x1218, 0x1218, 0x1218}, + {0x1219, 0x1219, 0x1219}, {0x121A, 0x121A, 0x121A}, + {0x121B, 0x121B, 0x121B}, {0x121C, 0x121C, 0x121C}, + {0x121D, 0x121D, 0x121D}, {0x121E, 0x121E, 0x121E}, + {0x121F, 0x121F, 0x121F}, {0x1220, 0x1220, 0x1220}, + {0x1221, 0x1221, 0x1221}, {0x1222, 0x1222, 0x1222}, + {0x1223, 0x1223, 0x1223}, {0x1224, 0x1224, 0x1224}, + {0x1225, 0x1225, 0x1225}, {0x1226, 0x1226, 0x1226}, + {0x1227, 0x1227, 0x1227}, {0x1228, 0x1228, 0x1228}, + {0x1229, 0x1229, 0x1229}, {0x122A, 0x122A, 0x122A}, + {0x122B, 0x122B, 0x122B}, {0x122C, 0x122C, 0x122C}, + {0x122D, 0x122D, 0x122D}, {0x122E, 0x122E, 0x122E}, + {0x122F, 0x122F, 0x122F}, {0x1230, 0x1230, 0x1230}, + {0x1231, 0x1231, 0x1231}, {0x1232, 0x1232, 0x1232}, + {0x1233, 0x1233, 0x1233}, {0x1234, 0x1234, 0x1234}, + {0x1235, 0x1235, 0x1235}, {0x1236, 0x1236, 0x1236}, + {0x1237, 0x1237, 0x1237}, {0x1238, 0x1238, 0x1238}, + {0x1239, 0x1239, 0x1239}, {0x123A, 0x123A, 0x123A}, + {0x123B, 0x123B, 0x123B}, {0x123C, 0x123C, 0x123C}, + {0x123D, 0x123D, 0x123D}, {0x123E, 0x123E, 0x123E}, + {0x123F, 0x123F, 0x123F}, {0x1240, 0x1240, 0x1240}, + {0x1241, 0x1241, 0x1241}, {0x1242, 0x1242, 0x1242}, + {0x1243, 0x1243, 0x1243}, {0x1244, 0x1244, 0x1244}, + {0x1245, 0x1245, 0x1245}, {0x1246, 0x1246, 0x1246}, + {0x1247, 0x1247, 0x1247}, {0x1248, 0x1248, 0x1248}, + {0x124A, 0x124A, 0x124A}, {0x124B, 0x124B, 0x124B}, + {0x124C, 0x124C, 0x124C}, {0x124D, 0x124D, 0x124D}, + {0x1250, 0x1250, 0x1250}, {0x1251, 0x1251, 0x1251}, + {0x1252, 0x1252, 0x1252}, {0x1253, 0x1253, 0x1253}, + {0x1254, 0x1254, 0x1254}, {0x1255, 0x1255, 0x1255}, + {0x1256, 0x1256, 0x1256}, {0x1258, 0x1258, 0x1258}, + {0x125A, 0x125A, 0x125A}, {0x125B, 0x125B, 0x125B}, + {0x125C, 0x125C, 0x125C}, {0x125D, 0x125D, 0x125D}, + {0x1260, 0x1260, 0x1260}, {0x1261, 0x1261, 0x1261}, + {0x1262, 0x1262, 0x1262}, {0x1263, 0x1263, 0x1263}, + {0x1264, 0x1264, 0x1264}, {0x1265, 0x1265, 0x1265}, + {0x1266, 0x1266, 0x1266}, {0x1267, 0x1267, 0x1267}, + {0x1268, 0x1268, 0x1268}, {0x1269, 0x1269, 0x1269}, + {0x126A, 0x126A, 0x126A}, {0x126B, 0x126B, 0x126B}, + {0x126C, 0x126C, 0x126C}, {0x126D, 0x126D, 0x126D}, + {0x126E, 0x126E, 0x126E}, {0x126F, 0x126F, 0x126F}, + {0x1270, 0x1270, 0x1270}, {0x1271, 0x1271, 0x1271}, + {0x1272, 0x1272, 0x1272}, {0x1273, 0x1273, 0x1273}, + {0x1274, 0x1274, 0x1274}, {0x1275, 0x1275, 0x1275}, + {0x1276, 0x1276, 0x1276}, {0x1277, 0x1277, 0x1277}, + {0x1278, 0x1278, 0x1278}, {0x1279, 0x1279, 0x1279}, + {0x127A, 0x127A, 0x127A}, {0x127B, 0x127B, 0x127B}, + {0x127C, 0x127C, 0x127C}, {0x127D, 0x127D, 0x127D}, + {0x127E, 0x127E, 0x127E}, {0x127F, 0x127F, 0x127F}, + {0x1280, 0x1280, 0x1280}, {0x1281, 0x1281, 0x1281}, + {0x1282, 0x1282, 0x1282}, {0x1283, 0x1283, 0x1283}, + {0x1284, 0x1284, 0x1284}, {0x1285, 0x1285, 0x1285}, + {0x1286, 0x1286, 0x1286}, {0x1287, 0x1287, 0x1287}, + {0x1288, 0x1288, 0x1288}, {0x128A, 0x128A, 0x128A}, + {0x128B, 0x128B, 0x128B}, {0x128C, 0x128C, 0x128C}, + {0x128D, 0x128D, 0x128D}, {0x1290, 0x1290, 0x1290}, + {0x1291, 0x1291, 0x1291}, {0x1292, 0x1292, 0x1292}, + {0x1293, 0x1293, 0x1293}, {0x1294, 0x1294, 0x1294}, + {0x1295, 0x1295, 0x1295}, {0x1296, 0x1296, 0x1296}, + {0x1297, 0x1297, 0x1297}, {0x1298, 0x1298, 0x1298}, + {0x1299, 0x1299, 0x1299}, {0x129A, 0x129A, 0x129A}, + {0x129B, 0x129B, 0x129B}, {0x129C, 0x129C, 0x129C}, + {0x129D, 0x129D, 0x129D}, {0x129E, 0x129E, 0x129E}, + {0x129F, 0x129F, 0x129F}, {0x12A0, 0x12A0, 0x12A0}, + {0x12A1, 0x12A1, 0x12A1}, {0x12A2, 0x12A2, 0x12A2}, + {0x12A3, 0x12A3, 0x12A3}, {0x12A4, 0x12A4, 0x12A4}, + {0x12A5, 0x12A5, 0x12A5}, {0x12A6, 0x12A6, 0x12A6}, + {0x12A7, 0x12A7, 0x12A7}, {0x12A8, 0x12A8, 0x12A8}, + {0x12A9, 0x12A9, 0x12A9}, {0x12AA, 0x12AA, 0x12AA}, + {0x12AB, 0x12AB, 0x12AB}, {0x12AC, 0x12AC, 0x12AC}, + {0x12AD, 0x12AD, 0x12AD}, {0x12AE, 0x12AE, 0x12AE}, + {0x12AF, 0x12AF, 0x12AF}, {0x12B0, 0x12B0, 0x12B0}, + {0x12B2, 0x12B2, 0x12B2}, {0x12B3, 0x12B3, 0x12B3}, + {0x12B4, 0x12B4, 0x12B4}, {0x12B5, 0x12B5, 0x12B5}, + {0x12B8, 0x12B8, 0x12B8}, {0x12B9, 0x12B9, 0x12B9}, + {0x12BA, 0x12BA, 0x12BA}, {0x12BB, 0x12BB, 0x12BB}, + {0x12BC, 0x12BC, 0x12BC}, {0x12BD, 0x12BD, 0x12BD}, + {0x12BE, 0x12BE, 0x12BE}, {0x12C0, 0x12C0, 0x12C0}, + {0x12C2, 0x12C2, 0x12C2}, {0x12C3, 0x12C3, 0x12C3}, + {0x12C4, 0x12C4, 0x12C4}, {0x12C5, 0x12C5, 0x12C5}, + {0x12C8, 0x12C8, 0x12C8}, {0x12C9, 0x12C9, 0x12C9}, + {0x12CA, 0x12CA, 0x12CA}, {0x12CB, 0x12CB, 0x12CB}, + {0x12CC, 0x12CC, 0x12CC}, {0x12CD, 0x12CD, 0x12CD}, + {0x12CE, 0x12CE, 0x12CE}, {0x12CF, 0x12CF, 0x12CF}, + {0x12D0, 0x12D0, 0x12D0}, {0x12D1, 0x12D1, 0x12D1}, + {0x12D2, 0x12D2, 0x12D2}, {0x12D3, 0x12D3, 0x12D3}, + {0x12D4, 0x12D4, 0x12D4}, {0x12D5, 0x12D5, 0x12D5}, + {0x12D6, 0x12D6, 0x12D6}, {0x12D8, 0x12D8, 0x12D8}, + {0x12D9, 0x12D9, 0x12D9}, {0x12DA, 0x12DA, 0x12DA}, + {0x12DB, 0x12DB, 0x12DB}, {0x12DC, 0x12DC, 0x12DC}, + {0x12DD, 0x12DD, 0x12DD}, {0x12DE, 0x12DE, 0x12DE}, + {0x12DF, 0x12DF, 0x12DF}, {0x12E0, 0x12E0, 0x12E0}, + {0x12E1, 0x12E1, 0x12E1}, {0x12E2, 0x12E2, 0x12E2}, + {0x12E3, 0x12E3, 0x12E3}, {0x12E4, 0x12E4, 0x12E4}, + {0x12E5, 0x12E5, 0x12E5}, {0x12E6, 0x12E6, 0x12E6}, + {0x12E7, 0x12E7, 0x12E7}, {0x12E8, 0x12E8, 0x12E8}, + {0x12E9, 0x12E9, 0x12E9}, {0x12EA, 0x12EA, 0x12EA}, + {0x12EB, 0x12EB, 0x12EB}, {0x12EC, 0x12EC, 0x12EC}, + {0x12ED, 0x12ED, 0x12ED}, {0x12EE, 0x12EE, 0x12EE}, + {0x12EF, 0x12EF, 0x12EF}, {0x12F0, 0x12F0, 0x12F0}, + {0x12F1, 0x12F1, 0x12F1}, {0x12F2, 0x12F2, 0x12F2}, + {0x12F3, 0x12F3, 0x12F3}, {0x12F4, 0x12F4, 0x12F4}, + {0x12F5, 0x12F5, 0x12F5}, {0x12F6, 0x12F6, 0x12F6}, + {0x12F7, 0x12F7, 0x12F7}, {0x12F8, 0x12F8, 0x12F8}, + {0x12F9, 0x12F9, 0x12F9}, {0x12FA, 0x12FA, 0x12FA}, + {0x12FB, 0x12FB, 0x12FB}, {0x12FC, 0x12FC, 0x12FC}, + {0x12FD, 0x12FD, 0x12FD}, {0x12FE, 0x12FE, 0x12FE}, + {0x12FF, 0x12FF, 0x12FF}, {0x1300, 0x1300, 0x1300}, + {0x1301, 0x1301, 0x1301}, {0x1302, 0x1302, 0x1302}, + {0x1303, 0x1303, 0x1303}, {0x1304, 0x1304, 0x1304}, + {0x1305, 0x1305, 0x1305}, {0x1306, 0x1306, 0x1306}, + {0x1307, 0x1307, 0x1307}, {0x1308, 0x1308, 0x1308}, + {0x1309, 0x1309, 0x1309}, {0x130A, 0x130A, 0x130A}, + {0x130B, 0x130B, 0x130B}, {0x130C, 0x130C, 0x130C}, + {0x130D, 0x130D, 0x130D}, {0x130E, 0x130E, 0x130E}, + {0x130F, 0x130F, 0x130F}, {0x1310, 0x1310, 0x1310}, + {0x1312, 0x1312, 0x1312}, {0x1313, 0x1313, 0x1313}, + {0x1314, 0x1314, 0x1314}, {0x1315, 0x1315, 0x1315}, + {0x1318, 0x1318, 0x1318}, {0x1319, 0x1319, 0x1319}, + {0x131A, 0x131A, 0x131A}, {0x131B, 0x131B, 0x131B}, + {0x131C, 0x131C, 0x131C}, {0x131D, 0x131D, 0x131D}, + {0x131E, 0x131E, 0x131E}, {0x131F, 0x131F, 0x131F}, + {0x1320, 0x1320, 0x1320}, {0x1321, 0x1321, 0x1321}, + {0x1322, 0x1322, 0x1322}, {0x1323, 0x1323, 0x1323}, + {0x1324, 0x1324, 0x1324}, {0x1325, 0x1325, 0x1325}, + {0x1326, 0x1326, 0x1326}, {0x1327, 0x1327, 0x1327}, + {0x1328, 0x1328, 0x1328}, {0x1329, 0x1329, 0x1329}, + {0x132A, 0x132A, 0x132A}, {0x132B, 0x132B, 0x132B}, + {0x132C, 0x132C, 0x132C}, {0x132D, 0x132D, 0x132D}, + {0x132E, 0x132E, 0x132E}, {0x132F, 0x132F, 0x132F}, + {0x1330, 0x1330, 0x1330}, {0x1331, 0x1331, 0x1331}, + {0x1332, 0x1332, 0x1332}, {0x1333, 0x1333, 0x1333}, + {0x1334, 0x1334, 0x1334}, {0x1335, 0x1335, 0x1335}, + {0x1336, 0x1336, 0x1336}, {0x1337, 0x1337, 0x1337}, + {0x1338, 0x1338, 0x1338}, {0x1339, 0x1339, 0x1339}, + {0x133A, 0x133A, 0x133A}, {0x133B, 0x133B, 0x133B}, + {0x133C, 0x133C, 0x133C}, {0x133D, 0x133D, 0x133D}, + {0x133E, 0x133E, 0x133E}, {0x133F, 0x133F, 0x133F}, + {0x1340, 0x1340, 0x1340}, {0x1341, 0x1341, 0x1341}, + {0x1342, 0x1342, 0x1342}, {0x1343, 0x1343, 0x1343}, + {0x1344, 0x1344, 0x1344}, {0x1345, 0x1345, 0x1345}, + {0x1346, 0x1346, 0x1346}, {0x1347, 0x1347, 0x1347}, + {0x1348, 0x1348, 0x1348}, {0x1349, 0x1349, 0x1349}, + {0x134A, 0x134A, 0x134A}, {0x134B, 0x134B, 0x134B}, + {0x134C, 0x134C, 0x134C}, {0x134D, 0x134D, 0x134D}, + {0x134E, 0x134E, 0x134E}, {0x134F, 0x134F, 0x134F}, + {0x1350, 0x1350, 0x1350}, {0x1351, 0x1351, 0x1351}, + {0x1352, 0x1352, 0x1352}, {0x1353, 0x1353, 0x1353}, + {0x1354, 0x1354, 0x1354}, {0x1355, 0x1355, 0x1355}, + {0x1356, 0x1356, 0x1356}, {0x1357, 0x1357, 0x1357}, + {0x1358, 0x1358, 0x1358}, {0x1359, 0x1359, 0x1359}, + {0x135A, 0x135A, 0x135A}, {0x135F, 0x135F, 0x135F}, + {0x1380, 0x1380, 0x1380}, {0x1381, 0x1381, 0x1381}, + {0x1382, 0x1382, 0x1382}, {0x1383, 0x1383, 0x1383}, + {0x1384, 0x1384, 0x1384}, {0x1385, 0x1385, 0x1385}, + {0x1386, 0x1386, 0x1386}, {0x1387, 0x1387, 0x1387}, + {0x1388, 0x1388, 0x1388}, {0x1389, 0x1389, 0x1389}, + {0x138A, 0x138A, 0x138A}, {0x138B, 0x138B, 0x138B}, + {0x138C, 0x138C, 0x138C}, {0x138D, 0x138D, 0x138D}, + {0x138E, 0x138E, 0x138E}, {0x138F, 0x138F, 0x138F}, + {0x13A0, 0x13A0, 0x13A0}, {0x13A1, 0x13A1, 0x13A1}, + {0x13A2, 0x13A2, 0x13A2}, {0x13A3, 0x13A3, 0x13A3}, + {0x13A4, 0x13A4, 0x13A4}, {0x13A5, 0x13A5, 0x13A5}, + {0x13A6, 0x13A6, 0x13A6}, {0x13A7, 0x13A7, 0x13A7}, + {0x13A8, 0x13A8, 0x13A8}, {0x13A9, 0x13A9, 0x13A9}, + {0x13AA, 0x13AA, 0x13AA}, {0x13AB, 0x13AB, 0x13AB}, + {0x13AC, 0x13AC, 0x13AC}, {0x13AD, 0x13AD, 0x13AD}, + {0x13AE, 0x13AE, 0x13AE}, {0x13AF, 0x13AF, 0x13AF}, + {0x13B0, 0x13B0, 0x13B0}, {0x13B1, 0x13B1, 0x13B1}, + {0x13B2, 0x13B2, 0x13B2}, {0x13B3, 0x13B3, 0x13B3}, + {0x13B4, 0x13B4, 0x13B4}, {0x13B5, 0x13B5, 0x13B5}, + {0x13B6, 0x13B6, 0x13B6}, {0x13B7, 0x13B7, 0x13B7}, + {0x13B8, 0x13B8, 0x13B8}, {0x13B9, 0x13B9, 0x13B9}, + {0x13BA, 0x13BA, 0x13BA}, {0x13BB, 0x13BB, 0x13BB}, + {0x13BC, 0x13BC, 0x13BC}, {0x13BD, 0x13BD, 0x13BD}, + {0x13BE, 0x13BE, 0x13BE}, {0x13BF, 0x13BF, 0x13BF}, + {0x13C0, 0x13C0, 0x13C0}, {0x13C1, 0x13C1, 0x13C1}, + {0x13C2, 0x13C2, 0x13C2}, {0x13C3, 0x13C3, 0x13C3}, + {0x13C4, 0x13C4, 0x13C4}, {0x13C5, 0x13C5, 0x13C5}, + {0x13C6, 0x13C6, 0x13C6}, {0x13C7, 0x13C7, 0x13C7}, + {0x13C8, 0x13C8, 0x13C8}, {0x13C9, 0x13C9, 0x13C9}, + {0x13CA, 0x13CA, 0x13CA}, {0x13CB, 0x13CB, 0x13CB}, + {0x13CC, 0x13CC, 0x13CC}, {0x13CD, 0x13CD, 0x13CD}, + {0x13CE, 0x13CE, 0x13CE}, {0x13CF, 0x13CF, 0x13CF}, + {0x13D0, 0x13D0, 0x13D0}, {0x13D1, 0x13D1, 0x13D1}, + {0x13D2, 0x13D2, 0x13D2}, {0x13D3, 0x13D3, 0x13D3}, + {0x13D4, 0x13D4, 0x13D4}, {0x13D5, 0x13D5, 0x13D5}, + {0x13D6, 0x13D6, 0x13D6}, {0x13D7, 0x13D7, 0x13D7}, + {0x13D8, 0x13D8, 0x13D8}, {0x13D9, 0x13D9, 0x13D9}, + {0x13DA, 0x13DA, 0x13DA}, {0x13DB, 0x13DB, 0x13DB}, + {0x13DC, 0x13DC, 0x13DC}, {0x13DD, 0x13DD, 0x13DD}, + {0x13DE, 0x13DE, 0x13DE}, {0x13DF, 0x13DF, 0x13DF}, + {0x13E0, 0x13E0, 0x13E0}, {0x13E1, 0x13E1, 0x13E1}, + {0x13E2, 0x13E2, 0x13E2}, {0x13E3, 0x13E3, 0x13E3}, + {0x13E4, 0x13E4, 0x13E4}, {0x13E5, 0x13E5, 0x13E5}, + {0x13E6, 0x13E6, 0x13E6}, {0x13E7, 0x13E7, 0x13E7}, + {0x13E8, 0x13E8, 0x13E8}, {0x13E9, 0x13E9, 0x13E9}, + {0x13EA, 0x13EA, 0x13EA}, {0x13EB, 0x13EB, 0x13EB}, + {0x13EC, 0x13EC, 0x13EC}, {0x13ED, 0x13ED, 0x13ED}, + {0x13EE, 0x13EE, 0x13EE}, {0x13EF, 0x13EF, 0x13EF}, + {0x13F0, 0x13F0, 0x13F0}, {0x13F1, 0x13F1, 0x13F1}, + {0x13F2, 0x13F2, 0x13F2}, {0x13F3, 0x13F3, 0x13F3}, + {0x13F4, 0x13F4, 0x13F4}, {0x1401, 0x1401, 0x1401}, + {0x1402, 0x1402, 0x1402}, {0x1403, 0x1403, 0x1403}, + {0x1404, 0x1404, 0x1404}, {0x1405, 0x1405, 0x1405}, + {0x1406, 0x1406, 0x1406}, {0x1407, 0x1407, 0x1407}, + {0x1408, 0x1408, 0x1408}, {0x1409, 0x1409, 0x1409}, + {0x140A, 0x140A, 0x140A}, {0x140B, 0x140B, 0x140B}, + {0x140C, 0x140C, 0x140C}, {0x140D, 0x140D, 0x140D}, + {0x140E, 0x140E, 0x140E}, {0x140F, 0x140F, 0x140F}, + {0x1410, 0x1410, 0x1410}, {0x1411, 0x1411, 0x1411}, + {0x1412, 0x1412, 0x1412}, {0x1413, 0x1413, 0x1413}, + {0x1414, 0x1414, 0x1414}, {0x1415, 0x1415, 0x1415}, + {0x1416, 0x1416, 0x1416}, {0x1417, 0x1417, 0x1417}, + {0x1418, 0x1418, 0x1418}, {0x1419, 0x1419, 0x1419}, + {0x141A, 0x141A, 0x141A}, {0x141B, 0x141B, 0x141B}, + {0x141C, 0x141C, 0x141C}, {0x141D, 0x141D, 0x141D}, + {0x141E, 0x141E, 0x141E}, {0x141F, 0x141F, 0x141F}, + {0x1420, 0x1420, 0x1420}, {0x1421, 0x1421, 0x1421}, + {0x1422, 0x1422, 0x1422}, {0x1423, 0x1423, 0x1423}, + {0x1424, 0x1424, 0x1424}, {0x1425, 0x1425, 0x1425}, + {0x1426, 0x1426, 0x1426}, {0x1427, 0x1427, 0x1427}, + {0x1428, 0x1428, 0x1428}, {0x1429, 0x1429, 0x1429}, + {0x142A, 0x142A, 0x142A}, {0x142B, 0x142B, 0x142B}, + {0x142C, 0x142C, 0x142C}, {0x142D, 0x142D, 0x142D}, + {0x142E, 0x142E, 0x142E}, {0x142F, 0x142F, 0x142F}, + {0x1430, 0x1430, 0x1430}, {0x1431, 0x1431, 0x1431}, + {0x1432, 0x1432, 0x1432}, {0x1433, 0x1433, 0x1433}, + {0x1434, 0x1434, 0x1434}, {0x1435, 0x1435, 0x1435}, + {0x1436, 0x1436, 0x1436}, {0x1437, 0x1437, 0x1437}, + {0x1438, 0x1438, 0x1438}, {0x1439, 0x1439, 0x1439}, + {0x143A, 0x143A, 0x143A}, {0x143B, 0x143B, 0x143B}, + {0x143C, 0x143C, 0x143C}, {0x143D, 0x143D, 0x143D}, + {0x143E, 0x143E, 0x143E}, {0x143F, 0x143F, 0x143F}, + {0x1440, 0x1440, 0x1440}, {0x1441, 0x1441, 0x1441}, + {0x1442, 0x1442, 0x1442}, {0x1443, 0x1443, 0x1443}, + {0x1444, 0x1444, 0x1444}, {0x1445, 0x1445, 0x1445}, + {0x1446, 0x1446, 0x1446}, {0x1447, 0x1447, 0x1447}, + {0x1448, 0x1448, 0x1448}, {0x1449, 0x1449, 0x1449}, + {0x144A, 0x144A, 0x144A}, {0x144B, 0x144B, 0x144B}, + {0x144C, 0x144C, 0x144C}, {0x144D, 0x144D, 0x144D}, + {0x144E, 0x144E, 0x144E}, {0x144F, 0x144F, 0x144F}, + {0x1450, 0x1450, 0x1450}, {0x1451, 0x1451, 0x1451}, + {0x1452, 0x1452, 0x1452}, {0x1453, 0x1453, 0x1453}, + {0x1454, 0x1454, 0x1454}, {0x1455, 0x1455, 0x1455}, + {0x1456, 0x1456, 0x1456}, {0x1457, 0x1457, 0x1457}, + {0x1458, 0x1458, 0x1458}, {0x1459, 0x1459, 0x1459}, + {0x145A, 0x145A, 0x145A}, {0x145B, 0x145B, 0x145B}, + {0x145C, 0x145C, 0x145C}, {0x145D, 0x145D, 0x145D}, + {0x145E, 0x145E, 0x145E}, {0x145F, 0x145F, 0x145F}, + {0x1460, 0x1460, 0x1460}, {0x1461, 0x1461, 0x1461}, + {0x1462, 0x1462, 0x1462}, {0x1463, 0x1463, 0x1463}, + {0x1464, 0x1464, 0x1464}, {0x1465, 0x1465, 0x1465}, + {0x1466, 0x1466, 0x1466}, {0x1467, 0x1467, 0x1467}, + {0x1468, 0x1468, 0x1468}, {0x1469, 0x1469, 0x1469}, + {0x146A, 0x146A, 0x146A}, {0x146B, 0x146B, 0x146B}, + {0x146C, 0x146C, 0x146C}, {0x146D, 0x146D, 0x146D}, + {0x146E, 0x146E, 0x146E}, {0x146F, 0x146F, 0x146F}, + {0x1470, 0x1470, 0x1470}, {0x1471, 0x1471, 0x1471}, + {0x1472, 0x1472, 0x1472}, {0x1473, 0x1473, 0x1473}, + {0x1474, 0x1474, 0x1474}, {0x1475, 0x1475, 0x1475}, + {0x1476, 0x1476, 0x1476}, {0x1477, 0x1477, 0x1477}, + {0x1478, 0x1478, 0x1478}, {0x1479, 0x1479, 0x1479}, + {0x147A, 0x147A, 0x147A}, {0x147B, 0x147B, 0x147B}, + {0x147C, 0x147C, 0x147C}, {0x147D, 0x147D, 0x147D}, + {0x147E, 0x147E, 0x147E}, {0x147F, 0x147F, 0x147F}, + {0x1480, 0x1480, 0x1480}, {0x1481, 0x1481, 0x1481}, + {0x1482, 0x1482, 0x1482}, {0x1483, 0x1483, 0x1483}, + {0x1484, 0x1484, 0x1484}, {0x1485, 0x1485, 0x1485}, + {0x1486, 0x1486, 0x1486}, {0x1487, 0x1487, 0x1487}, + {0x1488, 0x1488, 0x1488}, {0x1489, 0x1489, 0x1489}, + {0x148A, 0x148A, 0x148A}, {0x148B, 0x148B, 0x148B}, + {0x148C, 0x148C, 0x148C}, {0x148D, 0x148D, 0x148D}, + {0x148E, 0x148E, 0x148E}, {0x148F, 0x148F, 0x148F}, + {0x1490, 0x1490, 0x1490}, {0x1491, 0x1491, 0x1491}, + {0x1492, 0x1492, 0x1492}, {0x1493, 0x1493, 0x1493}, + {0x1494, 0x1494, 0x1494}, {0x1495, 0x1495, 0x1495}, + {0x1496, 0x1496, 0x1496}, {0x1497, 0x1497, 0x1497}, + {0x1498, 0x1498, 0x1498}, {0x1499, 0x1499, 0x1499}, + {0x149A, 0x149A, 0x149A}, {0x149B, 0x149B, 0x149B}, + {0x149C, 0x149C, 0x149C}, {0x149D, 0x149D, 0x149D}, + {0x149E, 0x149E, 0x149E}, {0x149F, 0x149F, 0x149F}, + {0x14A0, 0x14A0, 0x14A0}, {0x14A1, 0x14A1, 0x14A1}, + {0x14A2, 0x14A2, 0x14A2}, {0x14A3, 0x14A3, 0x14A3}, + {0x14A4, 0x14A4, 0x14A4}, {0x14A5, 0x14A5, 0x14A5}, + {0x14A6, 0x14A6, 0x14A6}, {0x14A7, 0x14A7, 0x14A7}, + {0x14A8, 0x14A8, 0x14A8}, {0x14A9, 0x14A9, 0x14A9}, + {0x14AA, 0x14AA, 0x14AA}, {0x14AB, 0x14AB, 0x14AB}, + {0x14AC, 0x14AC, 0x14AC}, {0x14AD, 0x14AD, 0x14AD}, + {0x14AE, 0x14AE, 0x14AE}, {0x14AF, 0x14AF, 0x14AF}, + {0x14B0, 0x14B0, 0x14B0}, {0x14B1, 0x14B1, 0x14B1}, + {0x14B2, 0x14B2, 0x14B2}, {0x14B3, 0x14B3, 0x14B3}, + {0x14B4, 0x14B4, 0x14B4}, {0x14B5, 0x14B5, 0x14B5}, + {0x14B6, 0x14B6, 0x14B6}, {0x14B7, 0x14B7, 0x14B7}, + {0x14B8, 0x14B8, 0x14B8}, {0x14B9, 0x14B9, 0x14B9}, + {0x14BA, 0x14BA, 0x14BA}, {0x14BB, 0x14BB, 0x14BB}, + {0x14BC, 0x14BC, 0x14BC}, {0x14BD, 0x14BD, 0x14BD}, + {0x14BE, 0x14BE, 0x14BE}, {0x14BF, 0x14BF, 0x14BF}, + {0x14C0, 0x14C0, 0x14C0}, {0x14C1, 0x14C1, 0x14C1}, + {0x14C2, 0x14C2, 0x14C2}, {0x14C3, 0x14C3, 0x14C3}, + {0x14C4, 0x14C4, 0x14C4}, {0x14C5, 0x14C5, 0x14C5}, + {0x14C6, 0x14C6, 0x14C6}, {0x14C7, 0x14C7, 0x14C7}, + {0x14C8, 0x14C8, 0x14C8}, {0x14C9, 0x14C9, 0x14C9}, + {0x14CA, 0x14CA, 0x14CA}, {0x14CB, 0x14CB, 0x14CB}, + {0x14CC, 0x14CC, 0x14CC}, {0x14CD, 0x14CD, 0x14CD}, + {0x14CE, 0x14CE, 0x14CE}, {0x14CF, 0x14CF, 0x14CF}, + {0x14D0, 0x14D0, 0x14D0}, {0x14D1, 0x14D1, 0x14D1}, + {0x14D2, 0x14D2, 0x14D2}, {0x14D3, 0x14D3, 0x14D3}, + {0x14D4, 0x14D4, 0x14D4}, {0x14D5, 0x14D5, 0x14D5}, + {0x14D6, 0x14D6, 0x14D6}, {0x14D7, 0x14D7, 0x14D7}, + {0x14D8, 0x14D8, 0x14D8}, {0x14D9, 0x14D9, 0x14D9}, + {0x14DA, 0x14DA, 0x14DA}, {0x14DB, 0x14DB, 0x14DB}, + {0x14DC, 0x14DC, 0x14DC}, {0x14DD, 0x14DD, 0x14DD}, + {0x14DE, 0x14DE, 0x14DE}, {0x14DF, 0x14DF, 0x14DF}, + {0x14E0, 0x14E0, 0x14E0}, {0x14E1, 0x14E1, 0x14E1}, + {0x14E2, 0x14E2, 0x14E2}, {0x14E3, 0x14E3, 0x14E3}, + {0x14E4, 0x14E4, 0x14E4}, {0x14E5, 0x14E5, 0x14E5}, + {0x14E6, 0x14E6, 0x14E6}, {0x14E7, 0x14E7, 0x14E7}, + {0x14E8, 0x14E8, 0x14E8}, {0x14E9, 0x14E9, 0x14E9}, + {0x14EA, 0x14EA, 0x14EA}, {0x14EB, 0x14EB, 0x14EB}, + {0x14EC, 0x14EC, 0x14EC}, {0x14ED, 0x14ED, 0x14ED}, + {0x14EE, 0x14EE, 0x14EE}, {0x14EF, 0x14EF, 0x14EF}, + {0x14F0, 0x14F0, 0x14F0}, {0x14F1, 0x14F1, 0x14F1}, + {0x14F2, 0x14F2, 0x14F2}, {0x14F3, 0x14F3, 0x14F3}, + {0x14F4, 0x14F4, 0x14F4}, {0x14F5, 0x14F5, 0x14F5}, + {0x14F6, 0x14F6, 0x14F6}, {0x14F7, 0x14F7, 0x14F7}, + {0x14F8, 0x14F8, 0x14F8}, {0x14F9, 0x14F9, 0x14F9}, + {0x14FA, 0x14FA, 0x14FA}, {0x14FB, 0x14FB, 0x14FB}, + {0x14FC, 0x14FC, 0x14FC}, {0x14FD, 0x14FD, 0x14FD}, + {0x14FE, 0x14FE, 0x14FE}, {0x14FF, 0x14FF, 0x14FF}, + {0x1500, 0x1500, 0x1500}, {0x1501, 0x1501, 0x1501}, + {0x1502, 0x1502, 0x1502}, {0x1503, 0x1503, 0x1503}, + {0x1504, 0x1504, 0x1504}, {0x1505, 0x1505, 0x1505}, + {0x1506, 0x1506, 0x1506}, {0x1507, 0x1507, 0x1507}, + {0x1508, 0x1508, 0x1508}, {0x1509, 0x1509, 0x1509}, + {0x150A, 0x150A, 0x150A}, {0x150B, 0x150B, 0x150B}, + {0x150C, 0x150C, 0x150C}, {0x150D, 0x150D, 0x150D}, + {0x150E, 0x150E, 0x150E}, {0x150F, 0x150F, 0x150F}, + {0x1510, 0x1510, 0x1510}, {0x1511, 0x1511, 0x1511}, + {0x1512, 0x1512, 0x1512}, {0x1513, 0x1513, 0x1513}, + {0x1514, 0x1514, 0x1514}, {0x1515, 0x1515, 0x1515}, + {0x1516, 0x1516, 0x1516}, {0x1517, 0x1517, 0x1517}, + {0x1518, 0x1518, 0x1518}, {0x1519, 0x1519, 0x1519}, + {0x151A, 0x151A, 0x151A}, {0x151B, 0x151B, 0x151B}, + {0x151C, 0x151C, 0x151C}, {0x151D, 0x151D, 0x151D}, + {0x151E, 0x151E, 0x151E}, {0x151F, 0x151F, 0x151F}, + {0x1520, 0x1520, 0x1520}, {0x1521, 0x1521, 0x1521}, + {0x1522, 0x1522, 0x1522}, {0x1523, 0x1523, 0x1523}, + {0x1524, 0x1524, 0x1524}, {0x1525, 0x1525, 0x1525}, + {0x1526, 0x1526, 0x1526}, {0x1527, 0x1527, 0x1527}, + {0x1528, 0x1528, 0x1528}, {0x1529, 0x1529, 0x1529}, + {0x152A, 0x152A, 0x152A}, {0x152B, 0x152B, 0x152B}, + {0x152C, 0x152C, 0x152C}, {0x152D, 0x152D, 0x152D}, + {0x152E, 0x152E, 0x152E}, {0x152F, 0x152F, 0x152F}, + {0x1530, 0x1530, 0x1530}, {0x1531, 0x1531, 0x1531}, + {0x1532, 0x1532, 0x1532}, {0x1533, 0x1533, 0x1533}, + {0x1534, 0x1534, 0x1534}, {0x1535, 0x1535, 0x1535}, + {0x1536, 0x1536, 0x1536}, {0x1537, 0x1537, 0x1537}, + {0x1538, 0x1538, 0x1538}, {0x1539, 0x1539, 0x1539}, + {0x153A, 0x153A, 0x153A}, {0x153B, 0x153B, 0x153B}, + {0x153C, 0x153C, 0x153C}, {0x153D, 0x153D, 0x153D}, + {0x153E, 0x153E, 0x153E}, {0x153F, 0x153F, 0x153F}, + {0x1540, 0x1540, 0x1540}, {0x1541, 0x1541, 0x1541}, + {0x1542, 0x1542, 0x1542}, {0x1543, 0x1543, 0x1543}, + {0x1544, 0x1544, 0x1544}, {0x1545, 0x1545, 0x1545}, + {0x1546, 0x1546, 0x1546}, {0x1547, 0x1547, 0x1547}, + {0x1548, 0x1548, 0x1548}, {0x1549, 0x1549, 0x1549}, + {0x154A, 0x154A, 0x154A}, {0x154B, 0x154B, 0x154B}, + {0x154C, 0x154C, 0x154C}, {0x154D, 0x154D, 0x154D}, + {0x154E, 0x154E, 0x154E}, {0x154F, 0x154F, 0x154F}, + {0x1550, 0x1550, 0x1550}, {0x1551, 0x1551, 0x1551}, + {0x1552, 0x1552, 0x1552}, {0x1553, 0x1553, 0x1553}, + {0x1554, 0x1554, 0x1554}, {0x1555, 0x1555, 0x1555}, + {0x1556, 0x1556, 0x1556}, {0x1557, 0x1557, 0x1557}, + {0x1558, 0x1558, 0x1558}, {0x1559, 0x1559, 0x1559}, + {0x155A, 0x155A, 0x155A}, {0x155B, 0x155B, 0x155B}, + {0x155C, 0x155C, 0x155C}, {0x155D, 0x155D, 0x155D}, + {0x155E, 0x155E, 0x155E}, {0x155F, 0x155F, 0x155F}, + {0x1560, 0x1560, 0x1560}, {0x1561, 0x1561, 0x1561}, + {0x1562, 0x1562, 0x1562}, {0x1563, 0x1563, 0x1563}, + {0x1564, 0x1564, 0x1564}, {0x1565, 0x1565, 0x1565}, + {0x1566, 0x1566, 0x1566}, {0x1567, 0x1567, 0x1567}, + {0x1568, 0x1568, 0x1568}, {0x1569, 0x1569, 0x1569}, + {0x156A, 0x156A, 0x156A}, {0x156B, 0x156B, 0x156B}, + {0x156C, 0x156C, 0x156C}, {0x156D, 0x156D, 0x156D}, + {0x156E, 0x156E, 0x156E}, {0x156F, 0x156F, 0x156F}, + {0x1570, 0x1570, 0x1570}, {0x1571, 0x1571, 0x1571}, + {0x1572, 0x1572, 0x1572}, {0x1573, 0x1573, 0x1573}, + {0x1574, 0x1574, 0x1574}, {0x1575, 0x1575, 0x1575}, + {0x1576, 0x1576, 0x1576}, {0x1577, 0x1577, 0x1577}, + {0x1578, 0x1578, 0x1578}, {0x1579, 0x1579, 0x1579}, + {0x157A, 0x157A, 0x157A}, {0x157B, 0x157B, 0x157B}, + {0x157C, 0x157C, 0x157C}, {0x157D, 0x157D, 0x157D}, + {0x157E, 0x157E, 0x157E}, {0x157F, 0x157F, 0x157F}, + {0x1580, 0x1580, 0x1580}, {0x1581, 0x1581, 0x1581}, + {0x1582, 0x1582, 0x1582}, {0x1583, 0x1583, 0x1583}, + {0x1584, 0x1584, 0x1584}, {0x1585, 0x1585, 0x1585}, + {0x1586, 0x1586, 0x1586}, {0x1587, 0x1587, 0x1587}, + {0x1588, 0x1588, 0x1588}, {0x1589, 0x1589, 0x1589}, + {0x158A, 0x158A, 0x158A}, {0x158B, 0x158B, 0x158B}, + {0x158C, 0x158C, 0x158C}, {0x158D, 0x158D, 0x158D}, + {0x158E, 0x158E, 0x158E}, {0x158F, 0x158F, 0x158F}, + {0x1590, 0x1590, 0x1590}, {0x1591, 0x1591, 0x1591}, + {0x1592, 0x1592, 0x1592}, {0x1593, 0x1593, 0x1593}, + {0x1594, 0x1594, 0x1594}, {0x1595, 0x1595, 0x1595}, + {0x1596, 0x1596, 0x1596}, {0x1597, 0x1597, 0x1597}, + {0x1598, 0x1598, 0x1598}, {0x1599, 0x1599, 0x1599}, + {0x159A, 0x159A, 0x159A}, {0x159B, 0x159B, 0x159B}, + {0x159C, 0x159C, 0x159C}, {0x159D, 0x159D, 0x159D}, + {0x159E, 0x159E, 0x159E}, {0x159F, 0x159F, 0x159F}, + {0x15A0, 0x15A0, 0x15A0}, {0x15A1, 0x15A1, 0x15A1}, + {0x15A2, 0x15A2, 0x15A2}, {0x15A3, 0x15A3, 0x15A3}, + {0x15A4, 0x15A4, 0x15A4}, {0x15A5, 0x15A5, 0x15A5}, + {0x15A6, 0x15A6, 0x15A6}, {0x15A7, 0x15A7, 0x15A7}, + {0x15A8, 0x15A8, 0x15A8}, {0x15A9, 0x15A9, 0x15A9}, + {0x15AA, 0x15AA, 0x15AA}, {0x15AB, 0x15AB, 0x15AB}, + {0x15AC, 0x15AC, 0x15AC}, {0x15AD, 0x15AD, 0x15AD}, + {0x15AE, 0x15AE, 0x15AE}, {0x15AF, 0x15AF, 0x15AF}, + {0x15B0, 0x15B0, 0x15B0}, {0x15B1, 0x15B1, 0x15B1}, + {0x15B2, 0x15B2, 0x15B2}, {0x15B3, 0x15B3, 0x15B3}, + {0x15B4, 0x15B4, 0x15B4}, {0x15B5, 0x15B5, 0x15B5}, + {0x15B6, 0x15B6, 0x15B6}, {0x15B7, 0x15B7, 0x15B7}, + {0x15B8, 0x15B8, 0x15B8}, {0x15B9, 0x15B9, 0x15B9}, + {0x15BA, 0x15BA, 0x15BA}, {0x15BB, 0x15BB, 0x15BB}, + {0x15BC, 0x15BC, 0x15BC}, {0x15BD, 0x15BD, 0x15BD}, + {0x15BE, 0x15BE, 0x15BE}, {0x15BF, 0x15BF, 0x15BF}, + {0x15C0, 0x15C0, 0x15C0}, {0x15C1, 0x15C1, 0x15C1}, + {0x15C2, 0x15C2, 0x15C2}, {0x15C3, 0x15C3, 0x15C3}, + {0x15C4, 0x15C4, 0x15C4}, {0x15C5, 0x15C5, 0x15C5}, + {0x15C6, 0x15C6, 0x15C6}, {0x15C7, 0x15C7, 0x15C7}, + {0x15C8, 0x15C8, 0x15C8}, {0x15C9, 0x15C9, 0x15C9}, + {0x15CA, 0x15CA, 0x15CA}, {0x15CB, 0x15CB, 0x15CB}, + {0x15CC, 0x15CC, 0x15CC}, {0x15CD, 0x15CD, 0x15CD}, + {0x15CE, 0x15CE, 0x15CE}, {0x15CF, 0x15CF, 0x15CF}, + {0x15D0, 0x15D0, 0x15D0}, {0x15D1, 0x15D1, 0x15D1}, + {0x15D2, 0x15D2, 0x15D2}, {0x15D3, 0x15D3, 0x15D3}, + {0x15D4, 0x15D4, 0x15D4}, {0x15D5, 0x15D5, 0x15D5}, + {0x15D6, 0x15D6, 0x15D6}, {0x15D7, 0x15D7, 0x15D7}, + {0x15D8, 0x15D8, 0x15D8}, {0x15D9, 0x15D9, 0x15D9}, + {0x15DA, 0x15DA, 0x15DA}, {0x15DB, 0x15DB, 0x15DB}, + {0x15DC, 0x15DC, 0x15DC}, {0x15DD, 0x15DD, 0x15DD}, + {0x15DE, 0x15DE, 0x15DE}, {0x15DF, 0x15DF, 0x15DF}, + {0x15E0, 0x15E0, 0x15E0}, {0x15E1, 0x15E1, 0x15E1}, + {0x15E2, 0x15E2, 0x15E2}, {0x15E3, 0x15E3, 0x15E3}, + {0x15E4, 0x15E4, 0x15E4}, {0x15E5, 0x15E5, 0x15E5}, + {0x15E6, 0x15E6, 0x15E6}, {0x15E7, 0x15E7, 0x15E7}, + {0x15E8, 0x15E8, 0x15E8}, {0x15E9, 0x15E9, 0x15E9}, + {0x15EA, 0x15EA, 0x15EA}, {0x15EB, 0x15EB, 0x15EB}, + {0x15EC, 0x15EC, 0x15EC}, {0x15ED, 0x15ED, 0x15ED}, + {0x15EE, 0x15EE, 0x15EE}, {0x15EF, 0x15EF, 0x15EF}, + {0x15F0, 0x15F0, 0x15F0}, {0x15F1, 0x15F1, 0x15F1}, + {0x15F2, 0x15F2, 0x15F2}, {0x15F3, 0x15F3, 0x15F3}, + {0x15F4, 0x15F4, 0x15F4}, {0x15F5, 0x15F5, 0x15F5}, + {0x15F6, 0x15F6, 0x15F6}, {0x15F7, 0x15F7, 0x15F7}, + {0x15F8, 0x15F8, 0x15F8}, {0x15F9, 0x15F9, 0x15F9}, + {0x15FA, 0x15FA, 0x15FA}, {0x15FB, 0x15FB, 0x15FB}, + {0x15FC, 0x15FC, 0x15FC}, {0x15FD, 0x15FD, 0x15FD}, + {0x15FE, 0x15FE, 0x15FE}, {0x15FF, 0x15FF, 0x15FF}, + {0x1600, 0x1600, 0x1600}, {0x1601, 0x1601, 0x1601}, + {0x1602, 0x1602, 0x1602}, {0x1603, 0x1603, 0x1603}, + {0x1604, 0x1604, 0x1604}, {0x1605, 0x1605, 0x1605}, + {0x1606, 0x1606, 0x1606}, {0x1607, 0x1607, 0x1607}, + {0x1608, 0x1608, 0x1608}, {0x1609, 0x1609, 0x1609}, + {0x160A, 0x160A, 0x160A}, {0x160B, 0x160B, 0x160B}, + {0x160C, 0x160C, 0x160C}, {0x160D, 0x160D, 0x160D}, + {0x160E, 0x160E, 0x160E}, {0x160F, 0x160F, 0x160F}, + {0x1610, 0x1610, 0x1610}, {0x1611, 0x1611, 0x1611}, + {0x1612, 0x1612, 0x1612}, {0x1613, 0x1613, 0x1613}, + {0x1614, 0x1614, 0x1614}, {0x1615, 0x1615, 0x1615}, + {0x1616, 0x1616, 0x1616}, {0x1617, 0x1617, 0x1617}, + {0x1618, 0x1618, 0x1618}, {0x1619, 0x1619, 0x1619}, + {0x161A, 0x161A, 0x161A}, {0x161B, 0x161B, 0x161B}, + {0x161C, 0x161C, 0x161C}, {0x161D, 0x161D, 0x161D}, + {0x161E, 0x161E, 0x161E}, {0x161F, 0x161F, 0x161F}, + {0x1620, 0x1620, 0x1620}, {0x1621, 0x1621, 0x1621}, + {0x1622, 0x1622, 0x1622}, {0x1623, 0x1623, 0x1623}, + {0x1624, 0x1624, 0x1624}, {0x1625, 0x1625, 0x1625}, + {0x1626, 0x1626, 0x1626}, {0x1627, 0x1627, 0x1627}, + {0x1628, 0x1628, 0x1628}, {0x1629, 0x1629, 0x1629}, + {0x162A, 0x162A, 0x162A}, {0x162B, 0x162B, 0x162B}, + {0x162C, 0x162C, 0x162C}, {0x162D, 0x162D, 0x162D}, + {0x162E, 0x162E, 0x162E}, {0x162F, 0x162F, 0x162F}, + {0x1630, 0x1630, 0x1630}, {0x1631, 0x1631, 0x1631}, + {0x1632, 0x1632, 0x1632}, {0x1633, 0x1633, 0x1633}, + {0x1634, 0x1634, 0x1634}, {0x1635, 0x1635, 0x1635}, + {0x1636, 0x1636, 0x1636}, {0x1637, 0x1637, 0x1637}, + {0x1638, 0x1638, 0x1638}, {0x1639, 0x1639, 0x1639}, + {0x163A, 0x163A, 0x163A}, {0x163B, 0x163B, 0x163B}, + {0x163C, 0x163C, 0x163C}, {0x163D, 0x163D, 0x163D}, + {0x163E, 0x163E, 0x163E}, {0x163F, 0x163F, 0x163F}, + {0x1640, 0x1640, 0x1640}, {0x1641, 0x1641, 0x1641}, + {0x1642, 0x1642, 0x1642}, {0x1643, 0x1643, 0x1643}, + {0x1644, 0x1644, 0x1644}, {0x1645, 0x1645, 0x1645}, + {0x1646, 0x1646, 0x1646}, {0x1647, 0x1647, 0x1647}, + {0x1648, 0x1648, 0x1648}, {0x1649, 0x1649, 0x1649}, + {0x164A, 0x164A, 0x164A}, {0x164B, 0x164B, 0x164B}, + {0x164C, 0x164C, 0x164C}, {0x164D, 0x164D, 0x164D}, + {0x164E, 0x164E, 0x164E}, {0x164F, 0x164F, 0x164F}, + {0x1650, 0x1650, 0x1650}, {0x1651, 0x1651, 0x1651}, + {0x1652, 0x1652, 0x1652}, {0x1653, 0x1653, 0x1653}, + {0x1654, 0x1654, 0x1654}, {0x1655, 0x1655, 0x1655}, + {0x1656, 0x1656, 0x1656}, {0x1657, 0x1657, 0x1657}, + {0x1658, 0x1658, 0x1658}, {0x1659, 0x1659, 0x1659}, + {0x165A, 0x165A, 0x165A}, {0x165B, 0x165B, 0x165B}, + {0x165C, 0x165C, 0x165C}, {0x165D, 0x165D, 0x165D}, + {0x165E, 0x165E, 0x165E}, {0x165F, 0x165F, 0x165F}, + {0x1660, 0x1660, 0x1660}, {0x1661, 0x1661, 0x1661}, + {0x1662, 0x1662, 0x1662}, {0x1663, 0x1663, 0x1663}, + {0x1664, 0x1664, 0x1664}, {0x1665, 0x1665, 0x1665}, + {0x1666, 0x1666, 0x1666}, {0x1667, 0x1667, 0x1667}, + {0x1668, 0x1668, 0x1668}, {0x1669, 0x1669, 0x1669}, + {0x166A, 0x166A, 0x166A}, {0x166B, 0x166B, 0x166B}, + {0x166C, 0x166C, 0x166C}, {0x166F, 0x166F, 0x166F}, + {0x1670, 0x1670, 0x1670}, {0x1671, 0x1671, 0x1671}, + {0x1672, 0x1672, 0x1672}, {0x1673, 0x1673, 0x1673}, + {0x1674, 0x1674, 0x1674}, {0x1675, 0x1675, 0x1675}, + {0x1676, 0x1676, 0x1676}, {0x1681, 0x1681, 0x1681}, + {0x1682, 0x1682, 0x1682}, {0x1683, 0x1683, 0x1683}, + {0x1684, 0x1684, 0x1684}, {0x1685, 0x1685, 0x1685}, + {0x1686, 0x1686, 0x1686}, {0x1687, 0x1687, 0x1687}, + {0x1688, 0x1688, 0x1688}, {0x1689, 0x1689, 0x1689}, + {0x168A, 0x168A, 0x168A}, {0x168B, 0x168B, 0x168B}, + {0x168C, 0x168C, 0x168C}, {0x168D, 0x168D, 0x168D}, + {0x168E, 0x168E, 0x168E}, {0x168F, 0x168F, 0x168F}, + {0x1690, 0x1690, 0x1690}, {0x1691, 0x1691, 0x1691}, + {0x1692, 0x1692, 0x1692}, {0x1693, 0x1693, 0x1693}, + {0x1694, 0x1694, 0x1694}, {0x1695, 0x1695, 0x1695}, + {0x1696, 0x1696, 0x1696}, {0x1697, 0x1697, 0x1697}, + {0x1698, 0x1698, 0x1698}, {0x1699, 0x1699, 0x1699}, + {0x169A, 0x169A, 0x169A}, {0x16A0, 0x16A0, 0x16A0}, + {0x16A1, 0x16A1, 0x16A1}, {0x16A2, 0x16A2, 0x16A2}, + {0x16A3, 0x16A3, 0x16A3}, {0x16A4, 0x16A4, 0x16A4}, + {0x16A5, 0x16A5, 0x16A5}, {0x16A6, 0x16A6, 0x16A6}, + {0x16A7, 0x16A7, 0x16A7}, {0x16A8, 0x16A8, 0x16A8}, + {0x16A9, 0x16A9, 0x16A9}, {0x16AA, 0x16AA, 0x16AA}, + {0x16AB, 0x16AB, 0x16AB}, {0x16AC, 0x16AC, 0x16AC}, + {0x16AD, 0x16AD, 0x16AD}, {0x16AE, 0x16AE, 0x16AE}, + {0x16AF, 0x16AF, 0x16AF}, {0x16B0, 0x16B0, 0x16B0}, + {0x16B1, 0x16B1, 0x16B1}, {0x16B2, 0x16B2, 0x16B2}, + {0x16B3, 0x16B3, 0x16B3}, {0x16B4, 0x16B4, 0x16B4}, + {0x16B5, 0x16B5, 0x16B5}, {0x16B6, 0x16B6, 0x16B6}, + {0x16B7, 0x16B7, 0x16B7}, {0x16B8, 0x16B8, 0x16B8}, + {0x16B9, 0x16B9, 0x16B9}, {0x16BA, 0x16BA, 0x16BA}, + {0x16BB, 0x16BB, 0x16BB}, {0x16BC, 0x16BC, 0x16BC}, + {0x16BD, 0x16BD, 0x16BD}, {0x16BE, 0x16BE, 0x16BE}, + {0x16BF, 0x16BF, 0x16BF}, {0x16C0, 0x16C0, 0x16C0}, + {0x16C1, 0x16C1, 0x16C1}, {0x16C2, 0x16C2, 0x16C2}, + {0x16C3, 0x16C3, 0x16C3}, {0x16C4, 0x16C4, 0x16C4}, + {0x16C5, 0x16C5, 0x16C5}, {0x16C6, 0x16C6, 0x16C6}, + {0x16C7, 0x16C7, 0x16C7}, {0x16C8, 0x16C8, 0x16C8}, + {0x16C9, 0x16C9, 0x16C9}, {0x16CA, 0x16CA, 0x16CA}, + {0x16CB, 0x16CB, 0x16CB}, {0x16CC, 0x16CC, 0x16CC}, + {0x16CD, 0x16CD, 0x16CD}, {0x16CE, 0x16CE, 0x16CE}, + {0x16CF, 0x16CF, 0x16CF}, {0x16D0, 0x16D0, 0x16D0}, + {0x16D1, 0x16D1, 0x16D1}, {0x16D2, 0x16D2, 0x16D2}, + {0x16D3, 0x16D3, 0x16D3}, {0x16D4, 0x16D4, 0x16D4}, + {0x16D5, 0x16D5, 0x16D5}, {0x16D6, 0x16D6, 0x16D6}, + {0x16D7, 0x16D7, 0x16D7}, {0x16D8, 0x16D8, 0x16D8}, + {0x16D9, 0x16D9, 0x16D9}, {0x16DA, 0x16DA, 0x16DA}, + {0x16DB, 0x16DB, 0x16DB}, {0x16DC, 0x16DC, 0x16DC}, + {0x16DD, 0x16DD, 0x16DD}, {0x16DE, 0x16DE, 0x16DE}, + {0x16DF, 0x16DF, 0x16DF}, {0x16E0, 0x16E0, 0x16E0}, + {0x16E1, 0x16E1, 0x16E1}, {0x16E2, 0x16E2, 0x16E2}, + {0x16E3, 0x16E3, 0x16E3}, {0x16E4, 0x16E4, 0x16E4}, + {0x16E5, 0x16E5, 0x16E5}, {0x16E6, 0x16E6, 0x16E6}, + {0x16E7, 0x16E7, 0x16E7}, {0x16E8, 0x16E8, 0x16E8}, + {0x16E9, 0x16E9, 0x16E9}, {0x16EA, 0x16EA, 0x16EA}, + {0x1700, 0x1700, 0x1700}, {0x1701, 0x1701, 0x1701}, + {0x1702, 0x1702, 0x1702}, {0x1703, 0x1703, 0x1703}, + {0x1704, 0x1704, 0x1704}, {0x1705, 0x1705, 0x1705}, + {0x1706, 0x1706, 0x1706}, {0x1707, 0x1707, 0x1707}, + {0x1708, 0x1708, 0x1708}, {0x1709, 0x1709, 0x1709}, + {0x170A, 0x170A, 0x170A}, {0x170B, 0x170B, 0x170B}, + {0x170C, 0x170C, 0x170C}, {0x170E, 0x170E, 0x170E}, + {0x170F, 0x170F, 0x170F}, {0x1710, 0x1710, 0x1710}, + {0x1711, 0x1711, 0x1711}, {0x1712, 0x1712, 0x1712}, + {0x1713, 0x1713, 0x1713}, {0x1714, 0x1714, 0x1714}, + {0x1720, 0x1720, 0x1720}, {0x1721, 0x1721, 0x1721}, + {0x1722, 0x1722, 0x1722}, {0x1723, 0x1723, 0x1723}, + {0x1724, 0x1724, 0x1724}, {0x1725, 0x1725, 0x1725}, + {0x1726, 0x1726, 0x1726}, {0x1727, 0x1727, 0x1727}, + {0x1728, 0x1728, 0x1728}, {0x1729, 0x1729, 0x1729}, + {0x172A, 0x172A, 0x172A}, {0x172B, 0x172B, 0x172B}, + {0x172C, 0x172C, 0x172C}, {0x172D, 0x172D, 0x172D}, + {0x172E, 0x172E, 0x172E}, {0x172F, 0x172F, 0x172F}, + {0x1730, 0x1730, 0x1730}, {0x1731, 0x1731, 0x1731}, + {0x1732, 0x1732, 0x1732}, {0x1733, 0x1733, 0x1733}, + {0x1734, 0x1734, 0x1734}, {0x1740, 0x1740, 0x1740}, + {0x1741, 0x1741, 0x1741}, {0x1742, 0x1742, 0x1742}, + {0x1743, 0x1743, 0x1743}, {0x1744, 0x1744, 0x1744}, + {0x1745, 0x1745, 0x1745}, {0x1746, 0x1746, 0x1746}, + {0x1747, 0x1747, 0x1747}, {0x1748, 0x1748, 0x1748}, + {0x1749, 0x1749, 0x1749}, {0x174A, 0x174A, 0x174A}, + {0x174B, 0x174B, 0x174B}, {0x174C, 0x174C, 0x174C}, + {0x174D, 0x174D, 0x174D}, {0x174E, 0x174E, 0x174E}, + {0x174F, 0x174F, 0x174F}, {0x1750, 0x1750, 0x1750}, + {0x1751, 0x1751, 0x1751}, {0x1752, 0x1752, 0x1752}, + {0x1753, 0x1753, 0x1753}, {0x1760, 0x1760, 0x1760}, + {0x1761, 0x1761, 0x1761}, {0x1762, 0x1762, 0x1762}, + {0x1763, 0x1763, 0x1763}, {0x1764, 0x1764, 0x1764}, + {0x1765, 0x1765, 0x1765}, {0x1766, 0x1766, 0x1766}, + {0x1767, 0x1767, 0x1767}, {0x1768, 0x1768, 0x1768}, + {0x1769, 0x1769, 0x1769}, {0x176A, 0x176A, 0x176A}, + {0x176B, 0x176B, 0x176B}, {0x176C, 0x176C, 0x176C}, + {0x176E, 0x176E, 0x176E}, {0x176F, 0x176F, 0x176F}, + {0x1770, 0x1770, 0x1770}, {0x1772, 0x1772, 0x1772}, + {0x1773, 0x1773, 0x1773}, {0x1780, 0x1780, 0x1780}, + {0x1781, 0x1781, 0x1781}, {0x1782, 0x1782, 0x1782}, + {0x1783, 0x1783, 0x1783}, {0x1784, 0x1784, 0x1784}, + {0x1785, 0x1785, 0x1785}, {0x1786, 0x1786, 0x1786}, + {0x1787, 0x1787, 0x1787}, {0x1788, 0x1788, 0x1788}, + {0x1789, 0x1789, 0x1789}, {0x178A, 0x178A, 0x178A}, + {0x178B, 0x178B, 0x178B}, {0x178C, 0x178C, 0x178C}, + {0x178D, 0x178D, 0x178D}, {0x178E, 0x178E, 0x178E}, + {0x178F, 0x178F, 0x178F}, {0x1790, 0x1790, 0x1790}, + {0x1791, 0x1791, 0x1791}, {0x1792, 0x1792, 0x1792}, + {0x1793, 0x1793, 0x1793}, {0x1794, 0x1794, 0x1794}, + {0x1795, 0x1795, 0x1795}, {0x1796, 0x1796, 0x1796}, + {0x1797, 0x1797, 0x1797}, {0x1798, 0x1798, 0x1798}, + {0x1799, 0x1799, 0x1799}, {0x179A, 0x179A, 0x179A}, + {0x179B, 0x179B, 0x179B}, {0x179C, 0x179C, 0x179C}, + {0x179D, 0x179D, 0x179D}, {0x179E, 0x179E, 0x179E}, + {0x179F, 0x179F, 0x179F}, {0x17A0, 0x17A0, 0x17A0}, + {0x17A1, 0x17A1, 0x17A1}, {0x17A2, 0x17A2, 0x17A2}, + {0x17A3, 0x17A3, 0x17A3}, {0x17A4, 0x17A4, 0x17A4}, + {0x17A5, 0x17A5, 0x17A5}, {0x17A6, 0x17A6, 0x17A6}, + {0x17A7, 0x17A7, 0x17A7}, {0x17A8, 0x17A8, 0x17A8}, + {0x17A9, 0x17A9, 0x17A9}, {0x17AA, 0x17AA, 0x17AA}, + {0x17AB, 0x17AB, 0x17AB}, {0x17AC, 0x17AC, 0x17AC}, + {0x17AD, 0x17AD, 0x17AD}, {0x17AE, 0x17AE, 0x17AE}, + {0x17AF, 0x17AF, 0x17AF}, {0x17B0, 0x17B0, 0x17B0}, + {0x17B1, 0x17B1, 0x17B1}, {0x17B2, 0x17B2, 0x17B2}, + {0x17B3, 0x17B3, 0x17B3}, {0x17B7, 0x17B7, 0x17B7}, + {0x17B8, 0x17B8, 0x17B8}, {0x17B9, 0x17B9, 0x17B9}, + {0x17BA, 0x17BA, 0x17BA}, {0x17BB, 0x17BB, 0x17BB}, + {0x17BC, 0x17BC, 0x17BC}, {0x17BD, 0x17BD, 0x17BD}, + {0x17C6, 0x17C6, 0x17C6}, {0x17C9, 0x17C9, 0x17C9}, + {0x17CA, 0x17CA, 0x17CA}, {0x17CB, 0x17CB, 0x17CB}, + {0x17CC, 0x17CC, 0x17CC}, {0x17CD, 0x17CD, 0x17CD}, + {0x17CE, 0x17CE, 0x17CE}, {0x17CF, 0x17CF, 0x17CF}, + {0x17D0, 0x17D0, 0x17D0}, {0x17D1, 0x17D1, 0x17D1}, + {0x17D2, 0x17D2, 0x17D2}, {0x17D3, 0x17D3, 0x17D3}, + {0x17D7, 0x17D7, 0x17D7}, {0x17DC, 0x17DC, 0x17DC}, + {0x17DD, 0x17DD, 0x17DD}, {0x180B, 0x180B, 0x180B}, + {0x180C, 0x180C, 0x180C}, {0x180D, 0x180D, 0x180D}, + {0x1820, 0x1820, 0x1820}, {0x1821, 0x1821, 0x1821}, + {0x1822, 0x1822, 0x1822}, {0x1823, 0x1823, 0x1823}, + {0x1824, 0x1824, 0x1824}, {0x1825, 0x1825, 0x1825}, + {0x1826, 0x1826, 0x1826}, {0x1827, 0x1827, 0x1827}, + {0x1828, 0x1828, 0x1828}, {0x1829, 0x1829, 0x1829}, + {0x182A, 0x182A, 0x182A}, {0x182B, 0x182B, 0x182B}, + {0x182C, 0x182C, 0x182C}, {0x182D, 0x182D, 0x182D}, + {0x182E, 0x182E, 0x182E}, {0x182F, 0x182F, 0x182F}, + {0x1830, 0x1830, 0x1830}, {0x1831, 0x1831, 0x1831}, + {0x1832, 0x1832, 0x1832}, {0x1833, 0x1833, 0x1833}, + {0x1834, 0x1834, 0x1834}, {0x1835, 0x1835, 0x1835}, + {0x1836, 0x1836, 0x1836}, {0x1837, 0x1837, 0x1837}, + {0x1838, 0x1838, 0x1838}, {0x1839, 0x1839, 0x1839}, + {0x183A, 0x183A, 0x183A}, {0x183B, 0x183B, 0x183B}, + {0x183C, 0x183C, 0x183C}, {0x183D, 0x183D, 0x183D}, + {0x183E, 0x183E, 0x183E}, {0x183F, 0x183F, 0x183F}, + {0x1840, 0x1840, 0x1840}, {0x1841, 0x1841, 0x1841}, + {0x1842, 0x1842, 0x1842}, {0x1843, 0x1843, 0x1843}, + {0x1844, 0x1844, 0x1844}, {0x1845, 0x1845, 0x1845}, + {0x1846, 0x1846, 0x1846}, {0x1847, 0x1847, 0x1847}, + {0x1848, 0x1848, 0x1848}, {0x1849, 0x1849, 0x1849}, + {0x184A, 0x184A, 0x184A}, {0x184B, 0x184B, 0x184B}, + {0x184C, 0x184C, 0x184C}, {0x184D, 0x184D, 0x184D}, + {0x184E, 0x184E, 0x184E}, {0x184F, 0x184F, 0x184F}, + {0x1850, 0x1850, 0x1850}, {0x1851, 0x1851, 0x1851}, + {0x1852, 0x1852, 0x1852}, {0x1853, 0x1853, 0x1853}, + {0x1854, 0x1854, 0x1854}, {0x1855, 0x1855, 0x1855}, + {0x1856, 0x1856, 0x1856}, {0x1857, 0x1857, 0x1857}, + {0x1858, 0x1858, 0x1858}, {0x1859, 0x1859, 0x1859}, + {0x185A, 0x185A, 0x185A}, {0x185B, 0x185B, 0x185B}, + {0x185C, 0x185C, 0x185C}, {0x185D, 0x185D, 0x185D}, + {0x185E, 0x185E, 0x185E}, {0x185F, 0x185F, 0x185F}, + {0x1860, 0x1860, 0x1860}, {0x1861, 0x1861, 0x1861}, + {0x1862, 0x1862, 0x1862}, {0x1863, 0x1863, 0x1863}, + {0x1864, 0x1864, 0x1864}, {0x1865, 0x1865, 0x1865}, + {0x1866, 0x1866, 0x1866}, {0x1867, 0x1867, 0x1867}, + {0x1868, 0x1868, 0x1868}, {0x1869, 0x1869, 0x1869}, + {0x186A, 0x186A, 0x186A}, {0x186B, 0x186B, 0x186B}, + {0x186C, 0x186C, 0x186C}, {0x186D, 0x186D, 0x186D}, + {0x186E, 0x186E, 0x186E}, {0x186F, 0x186F, 0x186F}, + {0x1870, 0x1870, 0x1870}, {0x1871, 0x1871, 0x1871}, + {0x1872, 0x1872, 0x1872}, {0x1873, 0x1873, 0x1873}, + {0x1874, 0x1874, 0x1874}, {0x1875, 0x1875, 0x1875}, + {0x1876, 0x1876, 0x1876}, {0x1877, 0x1877, 0x1877}, + {0x1880, 0x1880, 0x1880}, {0x1881, 0x1881, 0x1881}, + {0x1882, 0x1882, 0x1882}, {0x1883, 0x1883, 0x1883}, + {0x1884, 0x1884, 0x1884}, {0x1885, 0x1885, 0x1885}, + {0x1886, 0x1886, 0x1886}, {0x1887, 0x1887, 0x1887}, + {0x1888, 0x1888, 0x1888}, {0x1889, 0x1889, 0x1889}, + {0x188A, 0x188A, 0x188A}, {0x188B, 0x188B, 0x188B}, + {0x188C, 0x188C, 0x188C}, {0x188D, 0x188D, 0x188D}, + {0x188E, 0x188E, 0x188E}, {0x188F, 0x188F, 0x188F}, + {0x1890, 0x1890, 0x1890}, {0x1891, 0x1891, 0x1891}, + {0x1892, 0x1892, 0x1892}, {0x1893, 0x1893, 0x1893}, + {0x1894, 0x1894, 0x1894}, {0x1895, 0x1895, 0x1895}, + {0x1896, 0x1896, 0x1896}, {0x1897, 0x1897, 0x1897}, + {0x1898, 0x1898, 0x1898}, {0x1899, 0x1899, 0x1899}, + {0x189A, 0x189A, 0x189A}, {0x189B, 0x189B, 0x189B}, + {0x189C, 0x189C, 0x189C}, {0x189D, 0x189D, 0x189D}, + {0x189E, 0x189E, 0x189E}, {0x189F, 0x189F, 0x189F}, + {0x18A0, 0x18A0, 0x18A0}, {0x18A1, 0x18A1, 0x18A1}, + {0x18A2, 0x18A2, 0x18A2}, {0x18A3, 0x18A3, 0x18A3}, + {0x18A4, 0x18A4, 0x18A4}, {0x18A5, 0x18A5, 0x18A5}, + {0x18A6, 0x18A6, 0x18A6}, {0x18A7, 0x18A7, 0x18A7}, + {0x18A8, 0x18A8, 0x18A8}, {0x18A9, 0x18A9, 0x18A9}, + {0x1900, 0x1900, 0x1900}, {0x1901, 0x1901, 0x1901}, + {0x1902, 0x1902, 0x1902}, {0x1903, 0x1903, 0x1903}, + {0x1904, 0x1904, 0x1904}, {0x1905, 0x1905, 0x1905}, + {0x1906, 0x1906, 0x1906}, {0x1907, 0x1907, 0x1907}, + {0x1908, 0x1908, 0x1908}, {0x1909, 0x1909, 0x1909}, + {0x190A, 0x190A, 0x190A}, {0x190B, 0x190B, 0x190B}, + {0x190C, 0x190C, 0x190C}, {0x190D, 0x190D, 0x190D}, + {0x190E, 0x190E, 0x190E}, {0x190F, 0x190F, 0x190F}, + {0x1910, 0x1910, 0x1910}, {0x1911, 0x1911, 0x1911}, + {0x1912, 0x1912, 0x1912}, {0x1913, 0x1913, 0x1913}, + {0x1914, 0x1914, 0x1914}, {0x1915, 0x1915, 0x1915}, + {0x1916, 0x1916, 0x1916}, {0x1917, 0x1917, 0x1917}, + {0x1918, 0x1918, 0x1918}, {0x1919, 0x1919, 0x1919}, + {0x191A, 0x191A, 0x191A}, {0x191B, 0x191B, 0x191B}, + {0x191C, 0x191C, 0x191C}, {0x1920, 0x1920, 0x1920}, + {0x1921, 0x1921, 0x1921}, {0x1922, 0x1922, 0x1922}, + {0x1927, 0x1927, 0x1927}, {0x1928, 0x1928, 0x1928}, + {0x1932, 0x1932, 0x1932}, {0x1939, 0x1939, 0x1939}, + {0x193A, 0x193A, 0x193A}, {0x193B, 0x193B, 0x193B}, + {0x1950, 0x1950, 0x1950}, {0x1951, 0x1951, 0x1951}, + {0x1952, 0x1952, 0x1952}, {0x1953, 0x1953, 0x1953}, + {0x1954, 0x1954, 0x1954}, {0x1955, 0x1955, 0x1955}, + {0x1956, 0x1956, 0x1956}, {0x1957, 0x1957, 0x1957}, + {0x1958, 0x1958, 0x1958}, {0x1959, 0x1959, 0x1959}, + {0x195A, 0x195A, 0x195A}, {0x195B, 0x195B, 0x195B}, + {0x195C, 0x195C, 0x195C}, {0x195D, 0x195D, 0x195D}, + {0x195E, 0x195E, 0x195E}, {0x195F, 0x195F, 0x195F}, + {0x1960, 0x1960, 0x1960}, {0x1961, 0x1961, 0x1961}, + {0x1962, 0x1962, 0x1962}, {0x1963, 0x1963, 0x1963}, + {0x1964, 0x1964, 0x1964}, {0x1965, 0x1965, 0x1965}, + {0x1966, 0x1966, 0x1966}, {0x1967, 0x1967, 0x1967}, + {0x1968, 0x1968, 0x1968}, {0x1969, 0x1969, 0x1969}, + {0x196A, 0x196A, 0x196A}, {0x196B, 0x196B, 0x196B}, + {0x196C, 0x196C, 0x196C}, {0x196D, 0x196D, 0x196D}, + {0x1970, 0x1970, 0x1970}, {0x1971, 0x1971, 0x1971}, + {0x1972, 0x1972, 0x1972}, {0x1973, 0x1973, 0x1973}, + {0x1974, 0x1974, 0x1974}, {0x1980, 0x1980, 0x1980}, + {0x1981, 0x1981, 0x1981}, {0x1982, 0x1982, 0x1982}, + {0x1983, 0x1983, 0x1983}, {0x1984, 0x1984, 0x1984}, + {0x1985, 0x1985, 0x1985}, {0x1986, 0x1986, 0x1986}, + {0x1987, 0x1987, 0x1987}, {0x1988, 0x1988, 0x1988}, + {0x1989, 0x1989, 0x1989}, {0x198A, 0x198A, 0x198A}, + {0x198B, 0x198B, 0x198B}, {0x198C, 0x198C, 0x198C}, + {0x198D, 0x198D, 0x198D}, {0x198E, 0x198E, 0x198E}, + {0x198F, 0x198F, 0x198F}, {0x1990, 0x1990, 0x1990}, + {0x1991, 0x1991, 0x1991}, {0x1992, 0x1992, 0x1992}, + {0x1993, 0x1993, 0x1993}, {0x1994, 0x1994, 0x1994}, + {0x1995, 0x1995, 0x1995}, {0x1996, 0x1996, 0x1996}, + {0x1997, 0x1997, 0x1997}, {0x1998, 0x1998, 0x1998}, + {0x1999, 0x1999, 0x1999}, {0x199A, 0x199A, 0x199A}, + {0x199B, 0x199B, 0x199B}, {0x199C, 0x199C, 0x199C}, + {0x199D, 0x199D, 0x199D}, {0x199E, 0x199E, 0x199E}, + {0x199F, 0x199F, 0x199F}, {0x19A0, 0x19A0, 0x19A0}, + {0x19A1, 0x19A1, 0x19A1}, {0x19A2, 0x19A2, 0x19A2}, + {0x19A3, 0x19A3, 0x19A3}, {0x19A4, 0x19A4, 0x19A4}, + {0x19A5, 0x19A5, 0x19A5}, {0x19A6, 0x19A6, 0x19A6}, + {0x19A7, 0x19A7, 0x19A7}, {0x19A8, 0x19A8, 0x19A8}, + {0x19A9, 0x19A9, 0x19A9}, {0x19C1, 0x19C1, 0x19C1}, + {0x19C2, 0x19C2, 0x19C2}, {0x19C3, 0x19C3, 0x19C3}, + {0x19C4, 0x19C4, 0x19C4}, {0x19C5, 0x19C5, 0x19C5}, + {0x19C6, 0x19C6, 0x19C6}, {0x19C7, 0x19C7, 0x19C7}, + {0x1A00, 0x1A00, 0x1A00}, {0x1A01, 0x1A01, 0x1A01}, + {0x1A02, 0x1A02, 0x1A02}, {0x1A03, 0x1A03, 0x1A03}, + {0x1A04, 0x1A04, 0x1A04}, {0x1A05, 0x1A05, 0x1A05}, + {0x1A06, 0x1A06, 0x1A06}, {0x1A07, 0x1A07, 0x1A07}, + {0x1A08, 0x1A08, 0x1A08}, {0x1A09, 0x1A09, 0x1A09}, + {0x1A0A, 0x1A0A, 0x1A0A}, {0x1A0B, 0x1A0B, 0x1A0B}, + {0x1A0C, 0x1A0C, 0x1A0C}, {0x1A0D, 0x1A0D, 0x1A0D}, + {0x1A0E, 0x1A0E, 0x1A0E}, {0x1A0F, 0x1A0F, 0x1A0F}, + {0x1A10, 0x1A10, 0x1A10}, {0x1A11, 0x1A11, 0x1A11}, + {0x1A12, 0x1A12, 0x1A12}, {0x1A13, 0x1A13, 0x1A13}, + {0x1A14, 0x1A14, 0x1A14}, {0x1A15, 0x1A15, 0x1A15}, + {0x1A16, 0x1A16, 0x1A16}, {0x1A17, 0x1A17, 0x1A17}, + {0x1A18, 0x1A18, 0x1A18}, {0x1D00, 0x1D00, 0x1D00}, + {0x1D01, 0x1D01, 0x1D01}, {0x1D02, 0x1D02, 0x1D02}, + {0x1D03, 0x1D03, 0x1D03}, {0x1D04, 0x1D04, 0x1D04}, + {0x1D05, 0x1D05, 0x1D05}, {0x1D06, 0x1D06, 0x1D06}, + {0x1D07, 0x1D07, 0x1D07}, {0x1D08, 0x1D08, 0x1D08}, + {0x1D09, 0x1D09, 0x1D09}, {0x1D0A, 0x1D0A, 0x1D0A}, + {0x1D0B, 0x1D0B, 0x1D0B}, {0x1D0C, 0x1D0C, 0x1D0C}, + {0x1D0D, 0x1D0D, 0x1D0D}, {0x1D0E, 0x1D0E, 0x1D0E}, + {0x1D0F, 0x1D0F, 0x1D0F}, {0x1D10, 0x1D10, 0x1D10}, + {0x1D11, 0x1D11, 0x1D11}, {0x1D12, 0x1D12, 0x1D12}, + {0x1D13, 0x1D13, 0x1D13}, {0x1D14, 0x1D14, 0x1D14}, + {0x1D15, 0x1D15, 0x1D15}, {0x1D16, 0x1D16, 0x1D16}, + {0x1D17, 0x1D17, 0x1D17}, {0x1D18, 0x1D18, 0x1D18}, + {0x1D19, 0x1D19, 0x1D19}, {0x1D1A, 0x1D1A, 0x1D1A}, + {0x1D1B, 0x1D1B, 0x1D1B}, {0x1D1C, 0x1D1C, 0x1D1C}, + {0x1D1D, 0x1D1D, 0x1D1D}, {0x1D1E, 0x1D1E, 0x1D1E}, + {0x1D1F, 0x1D1F, 0x1D1F}, {0x1D20, 0x1D20, 0x1D20}, + {0x1D21, 0x1D21, 0x1D21}, {0x1D22, 0x1D22, 0x1D22}, + {0x1D23, 0x1D23, 0x1D23}, {0x1D24, 0x1D24, 0x1D24}, + {0x1D25, 0x1D25, 0x1D25}, {0x1D26, 0x1D26, 0x1D26}, + {0x1D27, 0x1D27, 0x1D27}, {0x1D28, 0x1D28, 0x1D28}, + {0x1D29, 0x1D29, 0x1D29}, {0x1D2A, 0x1D2A, 0x1D2A}, + {0x1D2B, 0x1D2B, 0x1D2B}, {0x1D2C, 0x1D2C, 0x1D2C}, + {0x1D2D, 0x1D2D, 0x1D2D}, {0x1D2E, 0x1D2E, 0x1D2E}, + {0x1D2F, 0x1D2F, 0x1D2F}, {0x1D30, 0x1D30, 0x1D30}, + {0x1D31, 0x1D31, 0x1D31}, {0x1D32, 0x1D32, 0x1D32}, + {0x1D33, 0x1D33, 0x1D33}, {0x1D34, 0x1D34, 0x1D34}, + {0x1D35, 0x1D35, 0x1D35}, {0x1D36, 0x1D36, 0x1D36}, + {0x1D37, 0x1D37, 0x1D37}, {0x1D38, 0x1D38, 0x1D38}, + {0x1D39, 0x1D39, 0x1D39}, {0x1D3A, 0x1D3A, 0x1D3A}, + {0x1D3B, 0x1D3B, 0x1D3B}, {0x1D3C, 0x1D3C, 0x1D3C}, + {0x1D3D, 0x1D3D, 0x1D3D}, {0x1D3E, 0x1D3E, 0x1D3E}, + {0x1D3F, 0x1D3F, 0x1D3F}, {0x1D40, 0x1D40, 0x1D40}, + {0x1D41, 0x1D41, 0x1D41}, {0x1D42, 0x1D42, 0x1D42}, + {0x1D43, 0x1D43, 0x1D43}, {0x1D44, 0x1D44, 0x1D44}, + {0x1D45, 0x1D45, 0x1D45}, {0x1D46, 0x1D46, 0x1D46}, + {0x1D47, 0x1D47, 0x1D47}, {0x1D48, 0x1D48, 0x1D48}, + {0x1D49, 0x1D49, 0x1D49}, {0x1D4A, 0x1D4A, 0x1D4A}, + {0x1D4B, 0x1D4B, 0x1D4B}, {0x1D4C, 0x1D4C, 0x1D4C}, + {0x1D4D, 0x1D4D, 0x1D4D}, {0x1D4E, 0x1D4E, 0x1D4E}, + {0x1D4F, 0x1D4F, 0x1D4F}, {0x1D50, 0x1D50, 0x1D50}, + {0x1D51, 0x1D51, 0x1D51}, {0x1D52, 0x1D52, 0x1D52}, + {0x1D53, 0x1D53, 0x1D53}, {0x1D54, 0x1D54, 0x1D54}, + {0x1D55, 0x1D55, 0x1D55}, {0x1D56, 0x1D56, 0x1D56}, + {0x1D57, 0x1D57, 0x1D57}, {0x1D58, 0x1D58, 0x1D58}, + {0x1D59, 0x1D59, 0x1D59}, {0x1D5A, 0x1D5A, 0x1D5A}, + {0x1D5B, 0x1D5B, 0x1D5B}, {0x1D5C, 0x1D5C, 0x1D5C}, + {0x1D5D, 0x1D5D, 0x1D5D}, {0x1D5E, 0x1D5E, 0x1D5E}, + {0x1D5F, 0x1D5F, 0x1D5F}, {0x1D60, 0x1D60, 0x1D60}, + {0x1D61, 0x1D61, 0x1D61}, {0x1D62, 0x1D62, 0x1D62}, + {0x1D63, 0x1D63, 0x1D63}, {0x1D64, 0x1D64, 0x1D64}, + {0x1D65, 0x1D65, 0x1D65}, {0x1D66, 0x1D66, 0x1D66}, + {0x1D67, 0x1D67, 0x1D67}, {0x1D68, 0x1D68, 0x1D68}, + {0x1D69, 0x1D69, 0x1D69}, {0x1D6A, 0x1D6A, 0x1D6A}, + {0x1D6B, 0x1D6B, 0x1D6B}, {0x1D6C, 0x1D6C, 0x1D6C}, + {0x1D6D, 0x1D6D, 0x1D6D}, {0x1D6E, 0x1D6E, 0x1D6E}, + {0x1D6F, 0x1D6F, 0x1D6F}, {0x1D70, 0x1D70, 0x1D70}, + {0x1D71, 0x1D71, 0x1D71}, {0x1D72, 0x1D72, 0x1D72}, + {0x1D73, 0x1D73, 0x1D73}, {0x1D74, 0x1D74, 0x1D74}, + {0x1D75, 0x1D75, 0x1D75}, {0x1D76, 0x1D76, 0x1D76}, + {0x1D77, 0x1D77, 0x1D77}, {0x1D78, 0x1D78, 0x1D78}, + {0x1D79, 0x1D79, 0x1D79}, {0x1D7A, 0x1D7A, 0x1D7A}, + {0x1D7B, 0x1D7B, 0x1D7B}, {0x1D7C, 0x1D7C, 0x1D7C}, + {0x1D7D, 0x1D7D, 0x1D7D}, {0x1D7E, 0x1D7E, 0x1D7E}, + {0x1D7F, 0x1D7F, 0x1D7F}, {0x1D80, 0x1D80, 0x1D80}, + {0x1D81, 0x1D81, 0x1D81}, {0x1D82, 0x1D82, 0x1D82}, + {0x1D83, 0x1D83, 0x1D83}, {0x1D84, 0x1D84, 0x1D84}, + {0x1D85, 0x1D85, 0x1D85}, {0x1D86, 0x1D86, 0x1D86}, + {0x1D87, 0x1D87, 0x1D87}, {0x1D88, 0x1D88, 0x1D88}, + {0x1D89, 0x1D89, 0x1D89}, {0x1D8A, 0x1D8A, 0x1D8A}, + {0x1D8B, 0x1D8B, 0x1D8B}, {0x1D8C, 0x1D8C, 0x1D8C}, + {0x1D8D, 0x1D8D, 0x1D8D}, {0x1D8E, 0x1D8E, 0x1D8E}, + {0x1D8F, 0x1D8F, 0x1D8F}, {0x1D90, 0x1D90, 0x1D90}, + {0x1D91, 0x1D91, 0x1D91}, {0x1D92, 0x1D92, 0x1D92}, + {0x1D93, 0x1D93, 0x1D93}, {0x1D94, 0x1D94, 0x1D94}, + {0x1D95, 0x1D95, 0x1D95}, {0x1D96, 0x1D96, 0x1D96}, + {0x1D97, 0x1D97, 0x1D97}, {0x1D98, 0x1D98, 0x1D98}, + {0x1D99, 0x1D99, 0x1D99}, {0x1D9A, 0x1D9A, 0x1D9A}, + {0x1D9B, 0x1D9B, 0x1D9B}, {0x1D9C, 0x1D9C, 0x1D9C}, + {0x1D9D, 0x1D9D, 0x1D9D}, {0x1D9E, 0x1D9E, 0x1D9E}, + {0x1D9F, 0x1D9F, 0x1D9F}, {0x1DA0, 0x1DA0, 0x1DA0}, + {0x1DA1, 0x1DA1, 0x1DA1}, {0x1DA2, 0x1DA2, 0x1DA2}, + {0x1DA3, 0x1DA3, 0x1DA3}, {0x1DA4, 0x1DA4, 0x1DA4}, + {0x1DA5, 0x1DA5, 0x1DA5}, {0x1DA6, 0x1DA6, 0x1DA6}, + {0x1DA7, 0x1DA7, 0x1DA7}, {0x1DA8, 0x1DA8, 0x1DA8}, + {0x1DA9, 0x1DA9, 0x1DA9}, {0x1DAA, 0x1DAA, 0x1DAA}, + {0x1DAB, 0x1DAB, 0x1DAB}, {0x1DAC, 0x1DAC, 0x1DAC}, + {0x1DAD, 0x1DAD, 0x1DAD}, {0x1DAE, 0x1DAE, 0x1DAE}, + {0x1DAF, 0x1DAF, 0x1DAF}, {0x1DB0, 0x1DB0, 0x1DB0}, + {0x1DB1, 0x1DB1, 0x1DB1}, {0x1DB2, 0x1DB2, 0x1DB2}, + {0x1DB3, 0x1DB3, 0x1DB3}, {0x1DB4, 0x1DB4, 0x1DB4}, + {0x1DB5, 0x1DB5, 0x1DB5}, {0x1DB6, 0x1DB6, 0x1DB6}, + {0x1DB7, 0x1DB7, 0x1DB7}, {0x1DB8, 0x1DB8, 0x1DB8}, + {0x1DB9, 0x1DB9, 0x1DB9}, {0x1DBA, 0x1DBA, 0x1DBA}, + {0x1DBB, 0x1DBB, 0x1DBB}, {0x1DBC, 0x1DBC, 0x1DBC}, + {0x1DBD, 0x1DBD, 0x1DBD}, {0x1DBE, 0x1DBE, 0x1DBE}, + {0x1DBF, 0x1DBF, 0x1DBF}, {0x1DC0, 0x1DC0, 0x1DC0}, + {0x1DC1, 0x1DC1, 0x1DC1}, {0x1DC2, 0x1DC2, 0x1DC2}, + {0x1DC3, 0x1DC3, 0x1DC3}, {0x1E00, 0x1E00, 0x1E01}, + {0x1E01, 0x1E00, 0x1E01}, {0x1E02, 0x1E02, 0x1E03}, + {0x1E03, 0x1E02, 0x1E03}, {0x1E04, 0x1E04, 0x1E05}, + {0x1E05, 0x1E04, 0x1E05}, {0x1E06, 0x1E06, 0x1E07}, + {0x1E07, 0x1E06, 0x1E07}, {0x1E08, 0x1E08, 0x1E09}, + {0x1E09, 0x1E08, 0x1E09}, {0x1E0A, 0x1E0A, 0x1E0B}, + {0x1E0B, 0x1E0A, 0x1E0B}, {0x1E0C, 0x1E0C, 0x1E0D}, + {0x1E0D, 0x1E0C, 0x1E0D}, {0x1E0E, 0x1E0E, 0x1E0F}, + {0x1E0F, 0x1E0E, 0x1E0F}, {0x1E10, 0x1E10, 0x1E11}, + {0x1E11, 0x1E10, 0x1E11}, {0x1E12, 0x1E12, 0x1E13}, + {0x1E13, 0x1E12, 0x1E13}, {0x1E14, 0x1E14, 0x1E15}, + {0x1E15, 0x1E14, 0x1E15}, {0x1E16, 0x1E16, 0x1E17}, + {0x1E17, 0x1E16, 0x1E17}, {0x1E18, 0x1E18, 0x1E19}, + {0x1E19, 0x1E18, 0x1E19}, {0x1E1A, 0x1E1A, 0x1E1B}, + {0x1E1B, 0x1E1A, 0x1E1B}, {0x1E1C, 0x1E1C, 0x1E1D}, + {0x1E1D, 0x1E1C, 0x1E1D}, {0x1E1E, 0x1E1E, 0x1E1F}, + {0x1E1F, 0x1E1E, 0x1E1F}, {0x1E20, 0x1E20, 0x1E21}, + {0x1E21, 0x1E20, 0x1E21}, {0x1E22, 0x1E22, 0x1E23}, + {0x1E23, 0x1E22, 0x1E23}, {0x1E24, 0x1E24, 0x1E25}, + {0x1E25, 0x1E24, 0x1E25}, {0x1E26, 0x1E26, 0x1E27}, + {0x1E27, 0x1E26, 0x1E27}, {0x1E28, 0x1E28, 0x1E29}, + {0x1E29, 0x1E28, 0x1E29}, {0x1E2A, 0x1E2A, 0x1E2B}, + {0x1E2B, 0x1E2A, 0x1E2B}, {0x1E2C, 0x1E2C, 0x1E2D}, + {0x1E2D, 0x1E2C, 0x1E2D}, {0x1E2E, 0x1E2E, 0x1E2F}, + {0x1E2F, 0x1E2E, 0x1E2F}, {0x1E30, 0x1E30, 0x1E31}, + {0x1E31, 0x1E30, 0x1E31}, {0x1E32, 0x1E32, 0x1E33}, + {0x1E33, 0x1E32, 0x1E33}, {0x1E34, 0x1E34, 0x1E35}, + {0x1E35, 0x1E34, 0x1E35}, {0x1E36, 0x1E36, 0x1E37}, + {0x1E37, 0x1E36, 0x1E37}, {0x1E38, 0x1E38, 0x1E39}, + {0x1E39, 0x1E38, 0x1E39}, {0x1E3A, 0x1E3A, 0x1E3B}, + {0x1E3B, 0x1E3A, 0x1E3B}, {0x1E3C, 0x1E3C, 0x1E3D}, + {0x1E3D, 0x1E3C, 0x1E3D}, {0x1E3E, 0x1E3E, 0x1E3F}, + {0x1E3F, 0x1E3E, 0x1E3F}, {0x1E40, 0x1E40, 0x1E41}, + {0x1E41, 0x1E40, 0x1E41}, {0x1E42, 0x1E42, 0x1E43}, + {0x1E43, 0x1E42, 0x1E43}, {0x1E44, 0x1E44, 0x1E45}, + {0x1E45, 0x1E44, 0x1E45}, {0x1E46, 0x1E46, 0x1E47}, + {0x1E47, 0x1E46, 0x1E47}, {0x1E48, 0x1E48, 0x1E49}, + {0x1E49, 0x1E48, 0x1E49}, {0x1E4A, 0x1E4A, 0x1E4B}, + {0x1E4B, 0x1E4A, 0x1E4B}, {0x1E4C, 0x1E4C, 0x1E4D}, + {0x1E4D, 0x1E4C, 0x1E4D}, {0x1E4E, 0x1E4E, 0x1E4F}, + {0x1E4F, 0x1E4E, 0x1E4F}, {0x1E50, 0x1E50, 0x1E51}, + {0x1E51, 0x1E50, 0x1E51}, {0x1E52, 0x1E52, 0x1E53}, + {0x1E53, 0x1E52, 0x1E53}, {0x1E54, 0x1E54, 0x1E55}, + {0x1E55, 0x1E54, 0x1E55}, {0x1E56, 0x1E56, 0x1E57}, + {0x1E57, 0x1E56, 0x1E57}, {0x1E58, 0x1E58, 0x1E59}, + {0x1E59, 0x1E58, 0x1E59}, {0x1E5A, 0x1E5A, 0x1E5B}, + {0x1E5B, 0x1E5A, 0x1E5B}, {0x1E5C, 0x1E5C, 0x1E5D}, + {0x1E5D, 0x1E5C, 0x1E5D}, {0x1E5E, 0x1E5E, 0x1E5F}, + {0x1E5F, 0x1E5E, 0x1E5F}, {0x1E60, 0x1E60, 0x1E61}, + {0x1E61, 0x1E60, 0x1E61}, {0x1E62, 0x1E62, 0x1E63}, + {0x1E63, 0x1E62, 0x1E63}, {0x1E64, 0x1E64, 0x1E65}, + {0x1E65, 0x1E64, 0x1E65}, {0x1E66, 0x1E66, 0x1E67}, + {0x1E67, 0x1E66, 0x1E67}, {0x1E68, 0x1E68, 0x1E69}, + {0x1E69, 0x1E68, 0x1E69}, {0x1E6A, 0x1E6A, 0x1E6B}, + {0x1E6B, 0x1E6A, 0x1E6B}, {0x1E6C, 0x1E6C, 0x1E6D}, + {0x1E6D, 0x1E6C, 0x1E6D}, {0x1E6E, 0x1E6E, 0x1E6F}, + {0x1E6F, 0x1E6E, 0x1E6F}, {0x1E70, 0x1E70, 0x1E71}, + {0x1E71, 0x1E70, 0x1E71}, {0x1E72, 0x1E72, 0x1E73}, + {0x1E73, 0x1E72, 0x1E73}, {0x1E74, 0x1E74, 0x1E75}, + {0x1E75, 0x1E74, 0x1E75}, {0x1E76, 0x1E76, 0x1E77}, + {0x1E77, 0x1E76, 0x1E77}, {0x1E78, 0x1E78, 0x1E79}, + {0x1E79, 0x1E78, 0x1E79}, {0x1E7A, 0x1E7A, 0x1E7B}, + {0x1E7B, 0x1E7A, 0x1E7B}, {0x1E7C, 0x1E7C, 0x1E7D}, + {0x1E7D, 0x1E7C, 0x1E7D}, {0x1E7E, 0x1E7E, 0x1E7F}, + {0x1E7F, 0x1E7E, 0x1E7F}, {0x1E80, 0x1E80, 0x1E81}, + {0x1E81, 0x1E80, 0x1E81}, {0x1E82, 0x1E82, 0x1E83}, + {0x1E83, 0x1E82, 0x1E83}, {0x1E84, 0x1E84, 0x1E85}, + {0x1E85, 0x1E84, 0x1E85}, {0x1E86, 0x1E86, 0x1E87}, + {0x1E87, 0x1E86, 0x1E87}, {0x1E88, 0x1E88, 0x1E89}, + {0x1E89, 0x1E88, 0x1E89}, {0x1E8A, 0x1E8A, 0x1E8B}, + {0x1E8B, 0x1E8A, 0x1E8B}, {0x1E8C, 0x1E8C, 0x1E8D}, + {0x1E8D, 0x1E8C, 0x1E8D}, {0x1E8E, 0x1E8E, 0x1E8F}, + {0x1E8F, 0x1E8E, 0x1E8F}, {0x1E90, 0x1E90, 0x1E91}, + {0x1E91, 0x1E90, 0x1E91}, {0x1E92, 0x1E92, 0x1E93}, + {0x1E93, 0x1E92, 0x1E93}, {0x1E94, 0x1E94, 0x1E95}, + {0x1E95, 0x1E94, 0x1E95}, {0x1E96, 0x1E96, 0x1E96}, + {0x1E97, 0x1E97, 0x1E97}, {0x1E98, 0x1E98, 0x1E98}, + {0x1E99, 0x1E99, 0x1E99}, {0x1E9A, 0x1E9A, 0x1E9A}, + {0x1E9B, 0x1E60, 0x1E9B}, {0x1EA0, 0x1EA0, 0x1EA1}, + {0x1EA1, 0x1EA0, 0x1EA1}, {0x1EA2, 0x1EA2, 0x1EA3}, + {0x1EA3, 0x1EA2, 0x1EA3}, {0x1EA4, 0x1EA4, 0x1EA5}, + {0x1EA5, 0x1EA4, 0x1EA5}, {0x1EA6, 0x1EA6, 0x1EA7}, + {0x1EA7, 0x1EA6, 0x1EA7}, {0x1EA8, 0x1EA8, 0x1EA9}, + {0x1EA9, 0x1EA8, 0x1EA9}, {0x1EAA, 0x1EAA, 0x1EAB}, + {0x1EAB, 0x1EAA, 0x1EAB}, {0x1EAC, 0x1EAC, 0x1EAD}, + {0x1EAD, 0x1EAC, 0x1EAD}, {0x1EAE, 0x1EAE, 0x1EAF}, + {0x1EAF, 0x1EAE, 0x1EAF}, {0x1EB0, 0x1EB0, 0x1EB1}, + {0x1EB1, 0x1EB0, 0x1EB1}, {0x1EB2, 0x1EB2, 0x1EB3}, + {0x1EB3, 0x1EB2, 0x1EB3}, {0x1EB4, 0x1EB4, 0x1EB5}, + {0x1EB5, 0x1EB4, 0x1EB5}, {0x1EB6, 0x1EB6, 0x1EB7}, + {0x1EB7, 0x1EB6, 0x1EB7}, {0x1EB8, 0x1EB8, 0x1EB9}, + {0x1EB9, 0x1EB8, 0x1EB9}, {0x1EBA, 0x1EBA, 0x1EBB}, + {0x1EBB, 0x1EBA, 0x1EBB}, {0x1EBC, 0x1EBC, 0x1EBD}, + {0x1EBD, 0x1EBC, 0x1EBD}, {0x1EBE, 0x1EBE, 0x1EBF}, + {0x1EBF, 0x1EBE, 0x1EBF}, {0x1EC0, 0x1EC0, 0x1EC1}, + {0x1EC1, 0x1EC0, 0x1EC1}, {0x1EC2, 0x1EC2, 0x1EC3}, + {0x1EC3, 0x1EC2, 0x1EC3}, {0x1EC4, 0x1EC4, 0x1EC5}, + {0x1EC5, 0x1EC4, 0x1EC5}, {0x1EC6, 0x1EC6, 0x1EC7}, + {0x1EC7, 0x1EC6, 0x1EC7}, {0x1EC8, 0x1EC8, 0x1EC9}, + {0x1EC9, 0x1EC8, 0x1EC9}, {0x1ECA, 0x1ECA, 0x1ECB}, + {0x1ECB, 0x1ECA, 0x1ECB}, {0x1ECC, 0x1ECC, 0x1ECD}, + {0x1ECD, 0x1ECC, 0x1ECD}, {0x1ECE, 0x1ECE, 0x1ECF}, + {0x1ECF, 0x1ECE, 0x1ECF}, {0x1ED0, 0x1ED0, 0x1ED1}, + {0x1ED1, 0x1ED0, 0x1ED1}, {0x1ED2, 0x1ED2, 0x1ED3}, + {0x1ED3, 0x1ED2, 0x1ED3}, {0x1ED4, 0x1ED4, 0x1ED5}, + {0x1ED5, 0x1ED4, 0x1ED5}, {0x1ED6, 0x1ED6, 0x1ED7}, + {0x1ED7, 0x1ED6, 0x1ED7}, {0x1ED8, 0x1ED8, 0x1ED9}, + {0x1ED9, 0x1ED8, 0x1ED9}, {0x1EDA, 0x1EDA, 0x1EDB}, + {0x1EDB, 0x1EDA, 0x1EDB}, {0x1EDC, 0x1EDC, 0x1EDD}, + {0x1EDD, 0x1EDC, 0x1EDD}, {0x1EDE, 0x1EDE, 0x1EDF}, + {0x1EDF, 0x1EDE, 0x1EDF}, {0x1EE0, 0x1EE0, 0x1EE1}, + {0x1EE1, 0x1EE0, 0x1EE1}, {0x1EE2, 0x1EE2, 0x1EE3}, + {0x1EE3, 0x1EE2, 0x1EE3}, {0x1EE4, 0x1EE4, 0x1EE5}, + {0x1EE5, 0x1EE4, 0x1EE5}, {0x1EE6, 0x1EE6, 0x1EE7}, + {0x1EE7, 0x1EE6, 0x1EE7}, {0x1EE8, 0x1EE8, 0x1EE9}, + {0x1EE9, 0x1EE8, 0x1EE9}, {0x1EEA, 0x1EEA, 0x1EEB}, + {0x1EEB, 0x1EEA, 0x1EEB}, {0x1EEC, 0x1EEC, 0x1EED}, + {0x1EED, 0x1EEC, 0x1EED}, {0x1EEE, 0x1EEE, 0x1EEF}, + {0x1EEF, 0x1EEE, 0x1EEF}, {0x1EF0, 0x1EF0, 0x1EF1}, + {0x1EF1, 0x1EF0, 0x1EF1}, {0x1EF2, 0x1EF2, 0x1EF3}, + {0x1EF3, 0x1EF2, 0x1EF3}, {0x1EF4, 0x1EF4, 0x1EF5}, + {0x1EF5, 0x1EF4, 0x1EF5}, {0x1EF6, 0x1EF6, 0x1EF7}, + {0x1EF7, 0x1EF6, 0x1EF7}, {0x1EF8, 0x1EF8, 0x1EF9}, + {0x1EF9, 0x1EF8, 0x1EF9}, {0x1F00, 0x1F08, 0x1F00}, + {0x1F01, 0x1F09, 0x1F01}, {0x1F02, 0x1F0A, 0x1F02}, + {0x1F03, 0x1F0B, 0x1F03}, {0x1F04, 0x1F0C, 0x1F04}, + {0x1F05, 0x1F0D, 0x1F05}, {0x1F06, 0x1F0E, 0x1F06}, + {0x1F07, 0x1F0F, 0x1F07}, {0x1F08, 0x1F08, 0x1F00}, + {0x1F09, 0x1F09, 0x1F01}, {0x1F0A, 0x1F0A, 0x1F02}, + {0x1F0B, 0x1F0B, 0x1F03}, {0x1F0C, 0x1F0C, 0x1F04}, + {0x1F0D, 0x1F0D, 0x1F05}, {0x1F0E, 0x1F0E, 0x1F06}, + {0x1F0F, 0x1F0F, 0x1F07}, {0x1F10, 0x1F18, 0x1F10}, + {0x1F11, 0x1F19, 0x1F11}, {0x1F12, 0x1F1A, 0x1F12}, + {0x1F13, 0x1F1B, 0x1F13}, {0x1F14, 0x1F1C, 0x1F14}, + {0x1F15, 0x1F1D, 0x1F15}, {0x1F18, 0x1F18, 0x1F10}, + {0x1F19, 0x1F19, 0x1F11}, {0x1F1A, 0x1F1A, 0x1F12}, + {0x1F1B, 0x1F1B, 0x1F13}, {0x1F1C, 0x1F1C, 0x1F14}, + {0x1F1D, 0x1F1D, 0x1F15}, {0x1F20, 0x1F28, 0x1F20}, + {0x1F21, 0x1F29, 0x1F21}, {0x1F22, 0x1F2A, 0x1F22}, + {0x1F23, 0x1F2B, 0x1F23}, {0x1F24, 0x1F2C, 0x1F24}, + {0x1F25, 0x1F2D, 0x1F25}, {0x1F26, 0x1F2E, 0x1F26}, + {0x1F27, 0x1F2F, 0x1F27}, {0x1F28, 0x1F28, 0x1F20}, + {0x1F29, 0x1F29, 0x1F21}, {0x1F2A, 0x1F2A, 0x1F22}, + {0x1F2B, 0x1F2B, 0x1F23}, {0x1F2C, 0x1F2C, 0x1F24}, + {0x1F2D, 0x1F2D, 0x1F25}, {0x1F2E, 0x1F2E, 0x1F26}, + {0x1F2F, 0x1F2F, 0x1F27}, {0x1F30, 0x1F38, 0x1F30}, + {0x1F31, 0x1F39, 0x1F31}, {0x1F32, 0x1F3A, 0x1F32}, + {0x1F33, 0x1F3B, 0x1F33}, {0x1F34, 0x1F3C, 0x1F34}, + {0x1F35, 0x1F3D, 0x1F35}, {0x1F36, 0x1F3E, 0x1F36}, + {0x1F37, 0x1F3F, 0x1F37}, {0x1F38, 0x1F38, 0x1F30}, + {0x1F39, 0x1F39, 0x1F31}, {0x1F3A, 0x1F3A, 0x1F32}, + {0x1F3B, 0x1F3B, 0x1F33}, {0x1F3C, 0x1F3C, 0x1F34}, + {0x1F3D, 0x1F3D, 0x1F35}, {0x1F3E, 0x1F3E, 0x1F36}, + {0x1F3F, 0x1F3F, 0x1F37}, {0x1F40, 0x1F48, 0x1F40}, + {0x1F41, 0x1F49, 0x1F41}, {0x1F42, 0x1F4A, 0x1F42}, + {0x1F43, 0x1F4B, 0x1F43}, {0x1F44, 0x1F4C, 0x1F44}, + {0x1F45, 0x1F4D, 0x1F45}, {0x1F48, 0x1F48, 0x1F40}, + {0x1F49, 0x1F49, 0x1F41}, {0x1F4A, 0x1F4A, 0x1F42}, + {0x1F4B, 0x1F4B, 0x1F43}, {0x1F4C, 0x1F4C, 0x1F44}, + {0x1F4D, 0x1F4D, 0x1F45}, {0x1F50, 0x1F50, 0x1F50}, + {0x1F51, 0x1F59, 0x1F51}, {0x1F52, 0x1F52, 0x1F52}, + {0x1F53, 0x1F5B, 0x1F53}, {0x1F54, 0x1F54, 0x1F54}, + {0x1F55, 0x1F5D, 0x1F55}, {0x1F56, 0x1F56, 0x1F56}, + {0x1F57, 0x1F5F, 0x1F57}, {0x1F59, 0x1F59, 0x1F51}, + {0x1F5B, 0x1F5B, 0x1F53}, {0x1F5D, 0x1F5D, 0x1F55}, + {0x1F5F, 0x1F5F, 0x1F57}, {0x1F60, 0x1F68, 0x1F60}, + {0x1F61, 0x1F69, 0x1F61}, {0x1F62, 0x1F6A, 0x1F62}, + {0x1F63, 0x1F6B, 0x1F63}, {0x1F64, 0x1F6C, 0x1F64}, + {0x1F65, 0x1F6D, 0x1F65}, {0x1F66, 0x1F6E, 0x1F66}, + {0x1F67, 0x1F6F, 0x1F67}, {0x1F68, 0x1F68, 0x1F60}, + {0x1F69, 0x1F69, 0x1F61}, {0x1F6A, 0x1F6A, 0x1F62}, + {0x1F6B, 0x1F6B, 0x1F63}, {0x1F6C, 0x1F6C, 0x1F64}, + {0x1F6D, 0x1F6D, 0x1F65}, {0x1F6E, 0x1F6E, 0x1F66}, + {0x1F6F, 0x1F6F, 0x1F67}, {0x1F70, 0x1FBA, 0x1F70}, + {0x1F71, 0x1FBB, 0x1F71}, {0x1F72, 0x1FC8, 0x1F72}, + {0x1F73, 0x1FC9, 0x1F73}, {0x1F74, 0x1FCA, 0x1F74}, + {0x1F75, 0x1FCB, 0x1F75}, {0x1F76, 0x1FDA, 0x1F76}, + {0x1F77, 0x1FDB, 0x1F77}, {0x1F78, 0x1FF8, 0x1F78}, + {0x1F79, 0x1FF9, 0x1F79}, {0x1F7A, 0x1FEA, 0x1F7A}, + {0x1F7B, 0x1FEB, 0x1F7B}, {0x1F7C, 0x1FFA, 0x1F7C}, + {0x1F7D, 0x1FFB, 0x1F7D}, {0x1F80, 0x1F88, 0x1F80}, + {0x1F81, 0x1F89, 0x1F81}, {0x1F82, 0x1F8A, 0x1F82}, + {0x1F83, 0x1F8B, 0x1F83}, {0x1F84, 0x1F8C, 0x1F84}, + {0x1F85, 0x1F8D, 0x1F85}, {0x1F86, 0x1F8E, 0x1F86}, + {0x1F87, 0x1F8F, 0x1F87}, {0x1F88, 0x1F88, 0x1F80}, + {0x1F89, 0x1F89, 0x1F81}, {0x1F8A, 0x1F8A, 0x1F82}, + {0x1F8B, 0x1F8B, 0x1F83}, {0x1F8C, 0x1F8C, 0x1F84}, + {0x1F8D, 0x1F8D, 0x1F85}, {0x1F8E, 0x1F8E, 0x1F86}, + {0x1F8F, 0x1F8F, 0x1F87}, {0x1F90, 0x1F98, 0x1F90}, + {0x1F91, 0x1F99, 0x1F91}, {0x1F92, 0x1F9A, 0x1F92}, + {0x1F93, 0x1F9B, 0x1F93}, {0x1F94, 0x1F9C, 0x1F94}, + {0x1F95, 0x1F9D, 0x1F95}, {0x1F96, 0x1F9E, 0x1F96}, + {0x1F97, 0x1F9F, 0x1F97}, {0x1F98, 0x1F98, 0x1F90}, + {0x1F99, 0x1F99, 0x1F91}, {0x1F9A, 0x1F9A, 0x1F92}, + {0x1F9B, 0x1F9B, 0x1F93}, {0x1F9C, 0x1F9C, 0x1F94}, + {0x1F9D, 0x1F9D, 0x1F95}, {0x1F9E, 0x1F9E, 0x1F96}, + {0x1F9F, 0x1F9F, 0x1F97}, {0x1FA0, 0x1FA8, 0x1FA0}, + {0x1FA1, 0x1FA9, 0x1FA1}, {0x1FA2, 0x1FAA, 0x1FA2}, + {0x1FA3, 0x1FAB, 0x1FA3}, {0x1FA4, 0x1FAC, 0x1FA4}, + {0x1FA5, 0x1FAD, 0x1FA5}, {0x1FA6, 0x1FAE, 0x1FA6}, + {0x1FA7, 0x1FAF, 0x1FA7}, {0x1FA8, 0x1FA8, 0x1FA0}, + {0x1FA9, 0x1FA9, 0x1FA1}, {0x1FAA, 0x1FAA, 0x1FA2}, + {0x1FAB, 0x1FAB, 0x1FA3}, {0x1FAC, 0x1FAC, 0x1FA4}, + {0x1FAD, 0x1FAD, 0x1FA5}, {0x1FAE, 0x1FAE, 0x1FA6}, + {0x1FAF, 0x1FAF, 0x1FA7}, {0x1FB0, 0x1FB8, 0x1FB0}, + {0x1FB1, 0x1FB9, 0x1FB1}, {0x1FB2, 0x1FB2, 0x1FB2}, + {0x1FB3, 0x1FBC, 0x1FB3}, {0x1FB4, 0x1FB4, 0x1FB4}, + {0x1FB6, 0x1FB6, 0x1FB6}, {0x1FB7, 0x1FB7, 0x1FB7}, + {0x1FB8, 0x1FB8, 0x1FB0}, {0x1FB9, 0x1FB9, 0x1FB1}, + {0x1FBA, 0x1FBA, 0x1F70}, {0x1FBB, 0x1FBB, 0x1F71}, + {0x1FBC, 0x1FBC, 0x1FB3}, {0x1FBE, 0x0399, 0x1FBE}, + {0x1FC2, 0x1FC2, 0x1FC2}, {0x1FC3, 0x1FCC, 0x1FC3}, + {0x1FC4, 0x1FC4, 0x1FC4}, {0x1FC6, 0x1FC6, 0x1FC6}, + {0x1FC7, 0x1FC7, 0x1FC7}, {0x1FC8, 0x1FC8, 0x1F72}, + {0x1FC9, 0x1FC9, 0x1F73}, {0x1FCA, 0x1FCA, 0x1F74}, + {0x1FCB, 0x1FCB, 0x1F75}, {0x1FCC, 0x1FCC, 0x1FC3}, + {0x1FD0, 0x1FD8, 0x1FD0}, {0x1FD1, 0x1FD9, 0x1FD1}, + {0x1FD2, 0x1FD2, 0x1FD2}, {0x1FD3, 0x1FD3, 0x1FD3}, + {0x1FD6, 0x1FD6, 0x1FD6}, {0x1FD7, 0x1FD7, 0x1FD7}, + {0x1FD8, 0x1FD8, 0x1FD0}, {0x1FD9, 0x1FD9, 0x1FD1}, + {0x1FDA, 0x1FDA, 0x1F76}, {0x1FDB, 0x1FDB, 0x1F77}, + {0x1FE0, 0x1FE8, 0x1FE0}, {0x1FE1, 0x1FE9, 0x1FE1}, + {0x1FE2, 0x1FE2, 0x1FE2}, {0x1FE3, 0x1FE3, 0x1FE3}, + {0x1FE4, 0x1FE4, 0x1FE4}, {0x1FE5, 0x1FEC, 0x1FE5}, + {0x1FE6, 0x1FE6, 0x1FE6}, {0x1FE7, 0x1FE7, 0x1FE7}, + {0x1FE8, 0x1FE8, 0x1FE0}, {0x1FE9, 0x1FE9, 0x1FE1}, + {0x1FEA, 0x1FEA, 0x1F7A}, {0x1FEB, 0x1FEB, 0x1F7B}, + {0x1FEC, 0x1FEC, 0x1FE5}, {0x1FF2, 0x1FF2, 0x1FF2}, + {0x1FF3, 0x1FFC, 0x1FF3}, {0x1FF4, 0x1FF4, 0x1FF4}, + {0x1FF6, 0x1FF6, 0x1FF6}, {0x1FF7, 0x1FF7, 0x1FF7}, + {0x1FF8, 0x1FF8, 0x1F78}, {0x1FF9, 0x1FF9, 0x1F79}, + {0x1FFA, 0x1FFA, 0x1F7C}, {0x1FFB, 0x1FFB, 0x1F7D}, + {0x1FFC, 0x1FFC, 0x1FF3}, {0x2071, 0x2071, 0x2071}, + {0x207F, 0x207F, 0x207F}, {0x2090, 0x2090, 0x2090}, + {0x2091, 0x2091, 0x2091}, {0x2092, 0x2092, 0x2092}, + {0x2093, 0x2093, 0x2093}, {0x2094, 0x2094, 0x2094}, + {0x20D0, 0x20D0, 0x20D0}, {0x20D1, 0x20D1, 0x20D1}, + {0x20D2, 0x20D2, 0x20D2}, {0x20D3, 0x20D3, 0x20D3}, + {0x20D4, 0x20D4, 0x20D4}, {0x20D5, 0x20D5, 0x20D5}, + {0x20D6, 0x20D6, 0x20D6}, {0x20D7, 0x20D7, 0x20D7}, + {0x20D8, 0x20D8, 0x20D8}, {0x20D9, 0x20D9, 0x20D9}, + {0x20DA, 0x20DA, 0x20DA}, {0x20DB, 0x20DB, 0x20DB}, + {0x20DC, 0x20DC, 0x20DC}, {0x20E1, 0x20E1, 0x20E1}, + {0x20E5, 0x20E5, 0x20E5}, {0x20E6, 0x20E6, 0x20E6}, + {0x20E7, 0x20E7, 0x20E7}, {0x20E8, 0x20E8, 0x20E8}, + {0x20E9, 0x20E9, 0x20E9}, {0x20EA, 0x20EA, 0x20EA}, + {0x20EB, 0x20EB, 0x20EB}, {0x2102, 0x2102, 0x2102}, + {0x2107, 0x2107, 0x2107}, {0x210A, 0x210A, 0x210A}, + {0x210B, 0x210B, 0x210B}, {0x210C, 0x210C, 0x210C}, + {0x210D, 0x210D, 0x210D}, {0x210E, 0x210E, 0x210E}, + {0x210F, 0x210F, 0x210F}, {0x2110, 0x2110, 0x2110}, + {0x2111, 0x2111, 0x2111}, {0x2112, 0x2112, 0x2112}, + {0x2113, 0x2113, 0x2113}, {0x2115, 0x2115, 0x2115}, + {0x2119, 0x2119, 0x2119}, {0x211A, 0x211A, 0x211A}, + {0x211B, 0x211B, 0x211B}, {0x211C, 0x211C, 0x211C}, + {0x211D, 0x211D, 0x211D}, {0x2124, 0x2124, 0x2124}, + {0x2126, 0x2126, 0x03C9}, {0x2128, 0x2128, 0x2128}, + {0x212A, 0x212A, 0x006B}, {0x212B, 0x212B, 0x00E5}, + {0x212C, 0x212C, 0x212C}, {0x212D, 0x212D, 0x212D}, + {0x212F, 0x212F, 0x212F}, {0x2130, 0x2130, 0x2130}, + {0x2131, 0x2131, 0x2131}, {0x2133, 0x2133, 0x2133}, + {0x2134, 0x2134, 0x2134}, {0x2135, 0x2135, 0x2135}, + {0x2136, 0x2136, 0x2136}, {0x2137, 0x2137, 0x2137}, + {0x2138, 0x2138, 0x2138}, {0x2139, 0x2139, 0x2139}, + {0x213C, 0x213C, 0x213C}, {0x213D, 0x213D, 0x213D}, + {0x213E, 0x213E, 0x213E}, {0x213F, 0x213F, 0x213F}, + {0x2145, 0x2145, 0x2145}, {0x2146, 0x2146, 0x2146}, + {0x2147, 0x2147, 0x2147}, {0x2148, 0x2148, 0x2148}, + {0x2149, 0x2149, 0x2149}, {0x2C00, 0x2C00, 0x2C30}, + {0x2C01, 0x2C01, 0x2C31}, {0x2C02, 0x2C02, 0x2C32}, + {0x2C03, 0x2C03, 0x2C33}, {0x2C04, 0x2C04, 0x2C34}, + {0x2C05, 0x2C05, 0x2C35}, {0x2C06, 0x2C06, 0x2C36}, + {0x2C07, 0x2C07, 0x2C37}, {0x2C08, 0x2C08, 0x2C38}, + {0x2C09, 0x2C09, 0x2C39}, {0x2C0A, 0x2C0A, 0x2C3A}, + {0x2C0B, 0x2C0B, 0x2C3B}, {0x2C0C, 0x2C0C, 0x2C3C}, + {0x2C0D, 0x2C0D, 0x2C3D}, {0x2C0E, 0x2C0E, 0x2C3E}, + {0x2C0F, 0x2C0F, 0x2C3F}, {0x2C10, 0x2C10, 0x2C40}, + {0x2C11, 0x2C11, 0x2C41}, {0x2C12, 0x2C12, 0x2C42}, + {0x2C13, 0x2C13, 0x2C43}, {0x2C14, 0x2C14, 0x2C44}, + {0x2C15, 0x2C15, 0x2C45}, {0x2C16, 0x2C16, 0x2C46}, + {0x2C17, 0x2C17, 0x2C47}, {0x2C18, 0x2C18, 0x2C48}, + {0x2C19, 0x2C19, 0x2C49}, {0x2C1A, 0x2C1A, 0x2C4A}, + {0x2C1B, 0x2C1B, 0x2C4B}, {0x2C1C, 0x2C1C, 0x2C4C}, + {0x2C1D, 0x2C1D, 0x2C4D}, {0x2C1E, 0x2C1E, 0x2C4E}, + {0x2C1F, 0x2C1F, 0x2C4F}, {0x2C20, 0x2C20, 0x2C50}, + {0x2C21, 0x2C21, 0x2C51}, {0x2C22, 0x2C22, 0x2C52}, + {0x2C23, 0x2C23, 0x2C53}, {0x2C24, 0x2C24, 0x2C54}, + {0x2C25, 0x2C25, 0x2C55}, {0x2C26, 0x2C26, 0x2C56}, + {0x2C27, 0x2C27, 0x2C57}, {0x2C28, 0x2C28, 0x2C58}, + {0x2C29, 0x2C29, 0x2C59}, {0x2C2A, 0x2C2A, 0x2C5A}, + {0x2C2B, 0x2C2B, 0x2C5B}, {0x2C2C, 0x2C2C, 0x2C5C}, + {0x2C2D, 0x2C2D, 0x2C5D}, {0x2C2E, 0x2C2E, 0x2C5E}, + {0x2C30, 0x2C00, 0x2C30}, {0x2C31, 0x2C01, 0x2C31}, + {0x2C32, 0x2C02, 0x2C32}, {0x2C33, 0x2C03, 0x2C33}, + {0x2C34, 0x2C04, 0x2C34}, {0x2C35, 0x2C05, 0x2C35}, + {0x2C36, 0x2C06, 0x2C36}, {0x2C37, 0x2C07, 0x2C37}, + {0x2C38, 0x2C08, 0x2C38}, {0x2C39, 0x2C09, 0x2C39}, + {0x2C3A, 0x2C0A, 0x2C3A}, {0x2C3B, 0x2C0B, 0x2C3B}, + {0x2C3C, 0x2C0C, 0x2C3C}, {0x2C3D, 0x2C0D, 0x2C3D}, + {0x2C3E, 0x2C0E, 0x2C3E}, {0x2C3F, 0x2C0F, 0x2C3F}, + {0x2C40, 0x2C10, 0x2C40}, {0x2C41, 0x2C11, 0x2C41}, + {0x2C42, 0x2C12, 0x2C42}, {0x2C43, 0x2C13, 0x2C43}, + {0x2C44, 0x2C14, 0x2C44}, {0x2C45, 0x2C15, 0x2C45}, + {0x2C46, 0x2C16, 0x2C46}, {0x2C47, 0x2C17, 0x2C47}, + {0x2C48, 0x2C18, 0x2C48}, {0x2C49, 0x2C19, 0x2C49}, + {0x2C4A, 0x2C1A, 0x2C4A}, {0x2C4B, 0x2C1B, 0x2C4B}, + {0x2C4C, 0x2C1C, 0x2C4C}, {0x2C4D, 0x2C1D, 0x2C4D}, + {0x2C4E, 0x2C1E, 0x2C4E}, {0x2C4F, 0x2C1F, 0x2C4F}, + {0x2C50, 0x2C20, 0x2C50}, {0x2C51, 0x2C21, 0x2C51}, + {0x2C52, 0x2C22, 0x2C52}, {0x2C53, 0x2C23, 0x2C53}, + {0x2C54, 0x2C24, 0x2C54}, {0x2C55, 0x2C25, 0x2C55}, + {0x2C56, 0x2C26, 0x2C56}, {0x2C57, 0x2C27, 0x2C57}, + {0x2C58, 0x2C28, 0x2C58}, {0x2C59, 0x2C29, 0x2C59}, + {0x2C5A, 0x2C2A, 0x2C5A}, {0x2C5B, 0x2C2B, 0x2C5B}, + {0x2C5C, 0x2C2C, 0x2C5C}, {0x2C5D, 0x2C2D, 0x2C5D}, + {0x2C5E, 0x2C2E, 0x2C5E}, {0x2C80, 0x2C80, 0x2C81}, + {0x2C81, 0x2C80, 0x2C81}, {0x2C82, 0x2C82, 0x2C83}, + {0x2C83, 0x2C82, 0x2C83}, {0x2C84, 0x2C84, 0x2C85}, + {0x2C85, 0x2C84, 0x2C85}, {0x2C86, 0x2C86, 0x2C87}, + {0x2C87, 0x2C86, 0x2C87}, {0x2C88, 0x2C88, 0x2C89}, + {0x2C89, 0x2C88, 0x2C89}, {0x2C8A, 0x2C8A, 0x2C8B}, + {0x2C8B, 0x2C8A, 0x2C8B}, {0x2C8C, 0x2C8C, 0x2C8D}, + {0x2C8D, 0x2C8C, 0x2C8D}, {0x2C8E, 0x2C8E, 0x2C8F}, + {0x2C8F, 0x2C8E, 0x2C8F}, {0x2C90, 0x2C90, 0x2C91}, + {0x2C91, 0x2C90, 0x2C91}, {0x2C92, 0x2C92, 0x2C93}, + {0x2C93, 0x2C92, 0x2C93}, {0x2C94, 0x2C94, 0x2C95}, + {0x2C95, 0x2C94, 0x2C95}, {0x2C96, 0x2C96, 0x2C97}, + {0x2C97, 0x2C96, 0x2C97}, {0x2C98, 0x2C98, 0x2C99}, + {0x2C99, 0x2C98, 0x2C99}, {0x2C9A, 0x2C9A, 0x2C9B}, + {0x2C9B, 0x2C9A, 0x2C9B}, {0x2C9C, 0x2C9C, 0x2C9D}, + {0x2C9D, 0x2C9C, 0x2C9D}, {0x2C9E, 0x2C9E, 0x2C9F}, + {0x2C9F, 0x2C9E, 0x2C9F}, {0x2CA0, 0x2CA0, 0x2CA1}, + {0x2CA1, 0x2CA0, 0x2CA1}, {0x2CA2, 0x2CA2, 0x2CA3}, + {0x2CA3, 0x2CA2, 0x2CA3}, {0x2CA4, 0x2CA4, 0x2CA5}, + {0x2CA5, 0x2CA4, 0x2CA5}, {0x2CA6, 0x2CA6, 0x2CA7}, + {0x2CA7, 0x2CA6, 0x2CA7}, {0x2CA8, 0x2CA8, 0x2CA9}, + {0x2CA9, 0x2CA8, 0x2CA9}, {0x2CAA, 0x2CAA, 0x2CAB}, + {0x2CAB, 0x2CAA, 0x2CAB}, {0x2CAC, 0x2CAC, 0x2CAD}, + {0x2CAD, 0x2CAC, 0x2CAD}, {0x2CAE, 0x2CAE, 0x2CAF}, + {0x2CAF, 0x2CAE, 0x2CAF}, {0x2CB0, 0x2CB0, 0x2CB1}, + {0x2CB1, 0x2CB0, 0x2CB1}, {0x2CB2, 0x2CB2, 0x2CB3}, + {0x2CB3, 0x2CB2, 0x2CB3}, {0x2CB4, 0x2CB4, 0x2CB5}, + {0x2CB5, 0x2CB4, 0x2CB5}, {0x2CB6, 0x2CB6, 0x2CB7}, + {0x2CB7, 0x2CB6, 0x2CB7}, {0x2CB8, 0x2CB8, 0x2CB9}, + {0x2CB9, 0x2CB8, 0x2CB9}, {0x2CBA, 0x2CBA, 0x2CBB}, + {0x2CBB, 0x2CBA, 0x2CBB}, {0x2CBC, 0x2CBC, 0x2CBD}, + {0x2CBD, 0x2CBC, 0x2CBD}, {0x2CBE, 0x2CBE, 0x2CBF}, + {0x2CBF, 0x2CBE, 0x2CBF}, {0x2CC0, 0x2CC0, 0x2CC1}, + {0x2CC1, 0x2CC0, 0x2CC1}, {0x2CC2, 0x2CC2, 0x2CC3}, + {0x2CC3, 0x2CC2, 0x2CC3}, {0x2CC4, 0x2CC4, 0x2CC5}, + {0x2CC5, 0x2CC4, 0x2CC5}, {0x2CC6, 0x2CC6, 0x2CC7}, + {0x2CC7, 0x2CC6, 0x2CC7}, {0x2CC8, 0x2CC8, 0x2CC9}, + {0x2CC9, 0x2CC8, 0x2CC9}, {0x2CCA, 0x2CCA, 0x2CCB}, + {0x2CCB, 0x2CCA, 0x2CCB}, {0x2CCC, 0x2CCC, 0x2CCD}, + {0x2CCD, 0x2CCC, 0x2CCD}, {0x2CCE, 0x2CCE, 0x2CCF}, + {0x2CCF, 0x2CCE, 0x2CCF}, {0x2CD0, 0x2CD0, 0x2CD1}, + {0x2CD1, 0x2CD0, 0x2CD1}, {0x2CD2, 0x2CD2, 0x2CD3}, + {0x2CD3, 0x2CD2, 0x2CD3}, {0x2CD4, 0x2CD4, 0x2CD5}, + {0x2CD5, 0x2CD4, 0x2CD5}, {0x2CD6, 0x2CD6, 0x2CD7}, + {0x2CD7, 0x2CD6, 0x2CD7}, {0x2CD8, 0x2CD8, 0x2CD9}, + {0x2CD9, 0x2CD8, 0x2CD9}, {0x2CDA, 0x2CDA, 0x2CDB}, + {0x2CDB, 0x2CDA, 0x2CDB}, {0x2CDC, 0x2CDC, 0x2CDD}, + {0x2CDD, 0x2CDC, 0x2CDD}, {0x2CDE, 0x2CDE, 0x2CDF}, + {0x2CDF, 0x2CDE, 0x2CDF}, {0x2CE0, 0x2CE0, 0x2CE1}, + {0x2CE1, 0x2CE0, 0x2CE1}, {0x2CE2, 0x2CE2, 0x2CE3}, + {0x2CE3, 0x2CE2, 0x2CE3}, {0x2CE4, 0x2CE4, 0x2CE4}, + {0x2D00, 0x10A0, 0x2D00}, {0x2D01, 0x10A1, 0x2D01}, + {0x2D02, 0x10A2, 0x2D02}, {0x2D03, 0x10A3, 0x2D03}, + {0x2D04, 0x10A4, 0x2D04}, {0x2D05, 0x10A5, 0x2D05}, + {0x2D06, 0x10A6, 0x2D06}, {0x2D07, 0x10A7, 0x2D07}, + {0x2D08, 0x10A8, 0x2D08}, {0x2D09, 0x10A9, 0x2D09}, + {0x2D0A, 0x10AA, 0x2D0A}, {0x2D0B, 0x10AB, 0x2D0B}, + {0x2D0C, 0x10AC, 0x2D0C}, {0x2D0D, 0x10AD, 0x2D0D}, + {0x2D0E, 0x10AE, 0x2D0E}, {0x2D0F, 0x10AF, 0x2D0F}, + {0x2D10, 0x10B0, 0x2D10}, {0x2D11, 0x10B1, 0x2D11}, + {0x2D12, 0x10B2, 0x2D12}, {0x2D13, 0x10B3, 0x2D13}, + {0x2D14, 0x10B4, 0x2D14}, {0x2D15, 0x10B5, 0x2D15}, + {0x2D16, 0x10B6, 0x2D16}, {0x2D17, 0x10B7, 0x2D17}, + {0x2D18, 0x10B8, 0x2D18}, {0x2D19, 0x10B9, 0x2D19}, + {0x2D1A, 0x10BA, 0x2D1A}, {0x2D1B, 0x10BB, 0x2D1B}, + {0x2D1C, 0x10BC, 0x2D1C}, {0x2D1D, 0x10BD, 0x2D1D}, + {0x2D1E, 0x10BE, 0x2D1E}, {0x2D1F, 0x10BF, 0x2D1F}, + {0x2D20, 0x10C0, 0x2D20}, {0x2D21, 0x10C1, 0x2D21}, + {0x2D22, 0x10C2, 0x2D22}, {0x2D23, 0x10C3, 0x2D23}, + {0x2D24, 0x10C4, 0x2D24}, {0x2D25, 0x10C5, 0x2D25}, + {0x2D30, 0x2D30, 0x2D30}, {0x2D31, 0x2D31, 0x2D31}, + {0x2D32, 0x2D32, 0x2D32}, {0x2D33, 0x2D33, 0x2D33}, + {0x2D34, 0x2D34, 0x2D34}, {0x2D35, 0x2D35, 0x2D35}, + {0x2D36, 0x2D36, 0x2D36}, {0x2D37, 0x2D37, 0x2D37}, + {0x2D38, 0x2D38, 0x2D38}, {0x2D39, 0x2D39, 0x2D39}, + {0x2D3A, 0x2D3A, 0x2D3A}, {0x2D3B, 0x2D3B, 0x2D3B}, + {0x2D3C, 0x2D3C, 0x2D3C}, {0x2D3D, 0x2D3D, 0x2D3D}, + {0x2D3E, 0x2D3E, 0x2D3E}, {0x2D3F, 0x2D3F, 0x2D3F}, + {0x2D40, 0x2D40, 0x2D40}, {0x2D41, 0x2D41, 0x2D41}, + {0x2D42, 0x2D42, 0x2D42}, {0x2D43, 0x2D43, 0x2D43}, + {0x2D44, 0x2D44, 0x2D44}, {0x2D45, 0x2D45, 0x2D45}, + {0x2D46, 0x2D46, 0x2D46}, {0x2D47, 0x2D47, 0x2D47}, + {0x2D48, 0x2D48, 0x2D48}, {0x2D49, 0x2D49, 0x2D49}, + {0x2D4A, 0x2D4A, 0x2D4A}, {0x2D4B, 0x2D4B, 0x2D4B}, + {0x2D4C, 0x2D4C, 0x2D4C}, {0x2D4D, 0x2D4D, 0x2D4D}, + {0x2D4E, 0x2D4E, 0x2D4E}, {0x2D4F, 0x2D4F, 0x2D4F}, + {0x2D50, 0x2D50, 0x2D50}, {0x2D51, 0x2D51, 0x2D51}, + {0x2D52, 0x2D52, 0x2D52}, {0x2D53, 0x2D53, 0x2D53}, + {0x2D54, 0x2D54, 0x2D54}, {0x2D55, 0x2D55, 0x2D55}, + {0x2D56, 0x2D56, 0x2D56}, {0x2D57, 0x2D57, 0x2D57}, + {0x2D58, 0x2D58, 0x2D58}, {0x2D59, 0x2D59, 0x2D59}, + {0x2D5A, 0x2D5A, 0x2D5A}, {0x2D5B, 0x2D5B, 0x2D5B}, + {0x2D5C, 0x2D5C, 0x2D5C}, {0x2D5D, 0x2D5D, 0x2D5D}, + {0x2D5E, 0x2D5E, 0x2D5E}, {0x2D5F, 0x2D5F, 0x2D5F}, + {0x2D60, 0x2D60, 0x2D60}, {0x2D61, 0x2D61, 0x2D61}, + {0x2D62, 0x2D62, 0x2D62}, {0x2D63, 0x2D63, 0x2D63}, + {0x2D64, 0x2D64, 0x2D64}, {0x2D65, 0x2D65, 0x2D65}, + {0x2D6F, 0x2D6F, 0x2D6F}, {0x2D80, 0x2D80, 0x2D80}, + {0x2D81, 0x2D81, 0x2D81}, {0x2D82, 0x2D82, 0x2D82}, + {0x2D83, 0x2D83, 0x2D83}, {0x2D84, 0x2D84, 0x2D84}, + {0x2D85, 0x2D85, 0x2D85}, {0x2D86, 0x2D86, 0x2D86}, + {0x2D87, 0x2D87, 0x2D87}, {0x2D88, 0x2D88, 0x2D88}, + {0x2D89, 0x2D89, 0x2D89}, {0x2D8A, 0x2D8A, 0x2D8A}, + {0x2D8B, 0x2D8B, 0x2D8B}, {0x2D8C, 0x2D8C, 0x2D8C}, + {0x2D8D, 0x2D8D, 0x2D8D}, {0x2D8E, 0x2D8E, 0x2D8E}, + {0x2D8F, 0x2D8F, 0x2D8F}, {0x2D90, 0x2D90, 0x2D90}, + {0x2D91, 0x2D91, 0x2D91}, {0x2D92, 0x2D92, 0x2D92}, + {0x2D93, 0x2D93, 0x2D93}, {0x2D94, 0x2D94, 0x2D94}, + {0x2D95, 0x2D95, 0x2D95}, {0x2D96, 0x2D96, 0x2D96}, + {0x2DA0, 0x2DA0, 0x2DA0}, {0x2DA1, 0x2DA1, 0x2DA1}, + {0x2DA2, 0x2DA2, 0x2DA2}, {0x2DA3, 0x2DA3, 0x2DA3}, + {0x2DA4, 0x2DA4, 0x2DA4}, {0x2DA5, 0x2DA5, 0x2DA5}, + {0x2DA6, 0x2DA6, 0x2DA6}, {0x2DA8, 0x2DA8, 0x2DA8}, + {0x2DA9, 0x2DA9, 0x2DA9}, {0x2DAA, 0x2DAA, 0x2DAA}, + {0x2DAB, 0x2DAB, 0x2DAB}, {0x2DAC, 0x2DAC, 0x2DAC}, + {0x2DAD, 0x2DAD, 0x2DAD}, {0x2DAE, 0x2DAE, 0x2DAE}, + {0x2DB0, 0x2DB0, 0x2DB0}, {0x2DB1, 0x2DB1, 0x2DB1}, + {0x2DB2, 0x2DB2, 0x2DB2}, {0x2DB3, 0x2DB3, 0x2DB3}, + {0x2DB4, 0x2DB4, 0x2DB4}, {0x2DB5, 0x2DB5, 0x2DB5}, + {0x2DB6, 0x2DB6, 0x2DB6}, {0x2DB8, 0x2DB8, 0x2DB8}, + {0x2DB9, 0x2DB9, 0x2DB9}, {0x2DBA, 0x2DBA, 0x2DBA}, + {0x2DBB, 0x2DBB, 0x2DBB}, {0x2DBC, 0x2DBC, 0x2DBC}, + {0x2DBD, 0x2DBD, 0x2DBD}, {0x2DBE, 0x2DBE, 0x2DBE}, + {0x2DC0, 0x2DC0, 0x2DC0}, {0x2DC1, 0x2DC1, 0x2DC1}, + {0x2DC2, 0x2DC2, 0x2DC2}, {0x2DC3, 0x2DC3, 0x2DC3}, + {0x2DC4, 0x2DC4, 0x2DC4}, {0x2DC5, 0x2DC5, 0x2DC5}, + {0x2DC6, 0x2DC6, 0x2DC6}, {0x2DC8, 0x2DC8, 0x2DC8}, + {0x2DC9, 0x2DC9, 0x2DC9}, {0x2DCA, 0x2DCA, 0x2DCA}, + {0x2DCB, 0x2DCB, 0x2DCB}, {0x2DCC, 0x2DCC, 0x2DCC}, + {0x2DCD, 0x2DCD, 0x2DCD}, {0x2DCE, 0x2DCE, 0x2DCE}, + {0x2DD0, 0x2DD0, 0x2DD0}, {0x2DD1, 0x2DD1, 0x2DD1}, + {0x2DD2, 0x2DD2, 0x2DD2}, {0x2DD3, 0x2DD3, 0x2DD3}, + {0x2DD4, 0x2DD4, 0x2DD4}, {0x2DD5, 0x2DD5, 0x2DD5}, + {0x2DD6, 0x2DD6, 0x2DD6}, {0x2DD8, 0x2DD8, 0x2DD8}, + {0x2DD9, 0x2DD9, 0x2DD9}, {0x2DDA, 0x2DDA, 0x2DDA}, + {0x2DDB, 0x2DDB, 0x2DDB}, {0x2DDC, 0x2DDC, 0x2DDC}, + {0x2DDD, 0x2DDD, 0x2DDD}, {0x2DDE, 0x2DDE, 0x2DDE}, + {0x3005, 0x3005, 0x3005}, {0x3006, 0x3006, 0x3006}, + {0x302A, 0x302A, 0x302A}, {0x302B, 0x302B, 0x302B}, + {0x302C, 0x302C, 0x302C}, {0x302D, 0x302D, 0x302D}, + {0x302E, 0x302E, 0x302E}, {0x302F, 0x302F, 0x302F}, + {0x3031, 0x3031, 0x3031}, {0x3032, 0x3032, 0x3032}, + {0x3033, 0x3033, 0x3033}, {0x3034, 0x3034, 0x3034}, + {0x3035, 0x3035, 0x3035}, {0x303B, 0x303B, 0x303B}, + {0x303C, 0x303C, 0x303C}, {0x3041, 0x3041, 0x3041}, + {0x3042, 0x3042, 0x3042}, {0x3043, 0x3043, 0x3043}, + {0x3044, 0x3044, 0x3044}, {0x3045, 0x3045, 0x3045}, + {0x3046, 0x3046, 0x3046}, {0x3047, 0x3047, 0x3047}, + {0x3048, 0x3048, 0x3048}, {0x3049, 0x3049, 0x3049}, + {0x304A, 0x304A, 0x304A}, {0x304B, 0x304B, 0x304B}, + {0x304C, 0x304C, 0x304C}, {0x304D, 0x304D, 0x304D}, + {0x304E, 0x304E, 0x304E}, {0x304F, 0x304F, 0x304F}, + {0x3050, 0x3050, 0x3050}, {0x3051, 0x3051, 0x3051}, + {0x3052, 0x3052, 0x3052}, {0x3053, 0x3053, 0x3053}, + {0x3054, 0x3054, 0x3054}, {0x3055, 0x3055, 0x3055}, + {0x3056, 0x3056, 0x3056}, {0x3057, 0x3057, 0x3057}, + {0x3058, 0x3058, 0x3058}, {0x3059, 0x3059, 0x3059}, + {0x305A, 0x305A, 0x305A}, {0x305B, 0x305B, 0x305B}, + {0x305C, 0x305C, 0x305C}, {0x305D, 0x305D, 0x305D}, + {0x305E, 0x305E, 0x305E}, {0x305F, 0x305F, 0x305F}, + {0x3060, 0x3060, 0x3060}, {0x3061, 0x3061, 0x3061}, + {0x3062, 0x3062, 0x3062}, {0x3063, 0x3063, 0x3063}, + {0x3064, 0x3064, 0x3064}, {0x3065, 0x3065, 0x3065}, + {0x3066, 0x3066, 0x3066}, {0x3067, 0x3067, 0x3067}, + {0x3068, 0x3068, 0x3068}, {0x3069, 0x3069, 0x3069}, + {0x306A, 0x306A, 0x306A}, {0x306B, 0x306B, 0x306B}, + {0x306C, 0x306C, 0x306C}, {0x306D, 0x306D, 0x306D}, + {0x306E, 0x306E, 0x306E}, {0x306F, 0x306F, 0x306F}, + {0x3070, 0x3070, 0x3070}, {0x3071, 0x3071, 0x3071}, + {0x3072, 0x3072, 0x3072}, {0x3073, 0x3073, 0x3073}, + {0x3074, 0x3074, 0x3074}, {0x3075, 0x3075, 0x3075}, + {0x3076, 0x3076, 0x3076}, {0x3077, 0x3077, 0x3077}, + {0x3078, 0x3078, 0x3078}, {0x3079, 0x3079, 0x3079}, + {0x307A, 0x307A, 0x307A}, {0x307B, 0x307B, 0x307B}, + {0x307C, 0x307C, 0x307C}, {0x307D, 0x307D, 0x307D}, + {0x307E, 0x307E, 0x307E}, {0x307F, 0x307F, 0x307F}, + {0x3080, 0x3080, 0x3080}, {0x3081, 0x3081, 0x3081}, + {0x3082, 0x3082, 0x3082}, {0x3083, 0x3083, 0x3083}, + {0x3084, 0x3084, 0x3084}, {0x3085, 0x3085, 0x3085}, + {0x3086, 0x3086, 0x3086}, {0x3087, 0x3087, 0x3087}, + {0x3088, 0x3088, 0x3088}, {0x3089, 0x3089, 0x3089}, + {0x308A, 0x308A, 0x308A}, {0x308B, 0x308B, 0x308B}, + {0x308C, 0x308C, 0x308C}, {0x308D, 0x308D, 0x308D}, + {0x308E, 0x308E, 0x308E}, {0x308F, 0x308F, 0x308F}, + {0x3090, 0x3090, 0x3090}, {0x3091, 0x3091, 0x3091}, + {0x3092, 0x3092, 0x3092}, {0x3093, 0x3093, 0x3093}, + {0x3094, 0x3094, 0x3094}, {0x3095, 0x3095, 0x3095}, + {0x3096, 0x3096, 0x3096}, {0x3099, 0x3099, 0x3099}, + {0x309A, 0x309A, 0x309A}, {0x309D, 0x309D, 0x309D}, + {0x309E, 0x309E, 0x309E}, {0x309F, 0x309F, 0x309F}, + {0x30A1, 0x30A1, 0x30A1}, {0x30A2, 0x30A2, 0x30A2}, + {0x30A3, 0x30A3, 0x30A3}, {0x30A4, 0x30A4, 0x30A4}, + {0x30A5, 0x30A5, 0x30A5}, {0x30A6, 0x30A6, 0x30A6}, + {0x30A7, 0x30A7, 0x30A7}, {0x30A8, 0x30A8, 0x30A8}, + {0x30A9, 0x30A9, 0x30A9}, {0x30AA, 0x30AA, 0x30AA}, + {0x30AB, 0x30AB, 0x30AB}, {0x30AC, 0x30AC, 0x30AC}, + {0x30AD, 0x30AD, 0x30AD}, {0x30AE, 0x30AE, 0x30AE}, + {0x30AF, 0x30AF, 0x30AF}, {0x30B0, 0x30B0, 0x30B0}, + {0x30B1, 0x30B1, 0x30B1}, {0x30B2, 0x30B2, 0x30B2}, + {0x30B3, 0x30B3, 0x30B3}, {0x30B4, 0x30B4, 0x30B4}, + {0x30B5, 0x30B5, 0x30B5}, {0x30B6, 0x30B6, 0x30B6}, + {0x30B7, 0x30B7, 0x30B7}, {0x30B8, 0x30B8, 0x30B8}, + {0x30B9, 0x30B9, 0x30B9}, {0x30BA, 0x30BA, 0x30BA}, + {0x30BB, 0x30BB, 0x30BB}, {0x30BC, 0x30BC, 0x30BC}, + {0x30BD, 0x30BD, 0x30BD}, {0x30BE, 0x30BE, 0x30BE}, + {0x30BF, 0x30BF, 0x30BF}, {0x30C0, 0x30C0, 0x30C0}, + {0x30C1, 0x30C1, 0x30C1}, {0x30C2, 0x30C2, 0x30C2}, + {0x30C3, 0x30C3, 0x30C3}, {0x30C4, 0x30C4, 0x30C4}, + {0x30C5, 0x30C5, 0x30C5}, {0x30C6, 0x30C6, 0x30C6}, + {0x30C7, 0x30C7, 0x30C7}, {0x30C8, 0x30C8, 0x30C8}, + {0x30C9, 0x30C9, 0x30C9}, {0x30CA, 0x30CA, 0x30CA}, + {0x30CB, 0x30CB, 0x30CB}, {0x30CC, 0x30CC, 0x30CC}, + {0x30CD, 0x30CD, 0x30CD}, {0x30CE, 0x30CE, 0x30CE}, + {0x30CF, 0x30CF, 0x30CF}, {0x30D0, 0x30D0, 0x30D0}, + {0x30D1, 0x30D1, 0x30D1}, {0x30D2, 0x30D2, 0x30D2}, + {0x30D3, 0x30D3, 0x30D3}, {0x30D4, 0x30D4, 0x30D4}, + {0x30D5, 0x30D5, 0x30D5}, {0x30D6, 0x30D6, 0x30D6}, + {0x30D7, 0x30D7, 0x30D7}, {0x30D8, 0x30D8, 0x30D8}, + {0x30D9, 0x30D9, 0x30D9}, {0x30DA, 0x30DA, 0x30DA}, + {0x30DB, 0x30DB, 0x30DB}, {0x30DC, 0x30DC, 0x30DC}, + {0x30DD, 0x30DD, 0x30DD}, {0x30DE, 0x30DE, 0x30DE}, + {0x30DF, 0x30DF, 0x30DF}, {0x30E0, 0x30E0, 0x30E0}, + {0x30E1, 0x30E1, 0x30E1}, {0x30E2, 0x30E2, 0x30E2}, + {0x30E3, 0x30E3, 0x30E3}, {0x30E4, 0x30E4, 0x30E4}, + {0x30E5, 0x30E5, 0x30E5}, {0x30E6, 0x30E6, 0x30E6}, + {0x30E7, 0x30E7, 0x30E7}, {0x30E8, 0x30E8, 0x30E8}, + {0x30E9, 0x30E9, 0x30E9}, {0x30EA, 0x30EA, 0x30EA}, + {0x30EB, 0x30EB, 0x30EB}, {0x30EC, 0x30EC, 0x30EC}, + {0x30ED, 0x30ED, 0x30ED}, {0x30EE, 0x30EE, 0x30EE}, + {0x30EF, 0x30EF, 0x30EF}, {0x30F0, 0x30F0, 0x30F0}, + {0x30F1, 0x30F1, 0x30F1}, {0x30F2, 0x30F2, 0x30F2}, + {0x30F3, 0x30F3, 0x30F3}, {0x30F4, 0x30F4, 0x30F4}, + {0x30F5, 0x30F5, 0x30F5}, {0x30F6, 0x30F6, 0x30F6}, + {0x30F7, 0x30F7, 0x30F7}, {0x30F8, 0x30F8, 0x30F8}, + {0x30F9, 0x30F9, 0x30F9}, {0x30FA, 0x30FA, 0x30FA}, + {0x30FC, 0x30FC, 0x30FC}, {0x30FD, 0x30FD, 0x30FD}, + {0x30FE, 0x30FE, 0x30FE}, {0x30FF, 0x30FF, 0x30FF}, + {0x3105, 0x3105, 0x3105}, {0x3106, 0x3106, 0x3106}, + {0x3107, 0x3107, 0x3107}, {0x3108, 0x3108, 0x3108}, + {0x3109, 0x3109, 0x3109}, {0x310A, 0x310A, 0x310A}, + {0x310B, 0x310B, 0x310B}, {0x310C, 0x310C, 0x310C}, + {0x310D, 0x310D, 0x310D}, {0x310E, 0x310E, 0x310E}, + {0x310F, 0x310F, 0x310F}, {0x3110, 0x3110, 0x3110}, + {0x3111, 0x3111, 0x3111}, {0x3112, 0x3112, 0x3112}, + {0x3113, 0x3113, 0x3113}, {0x3114, 0x3114, 0x3114}, + {0x3115, 0x3115, 0x3115}, {0x3116, 0x3116, 0x3116}, + {0x3117, 0x3117, 0x3117}, {0x3118, 0x3118, 0x3118}, + {0x3119, 0x3119, 0x3119}, {0x311A, 0x311A, 0x311A}, + {0x311B, 0x311B, 0x311B}, {0x311C, 0x311C, 0x311C}, + {0x311D, 0x311D, 0x311D}, {0x311E, 0x311E, 0x311E}, + {0x311F, 0x311F, 0x311F}, {0x3120, 0x3120, 0x3120}, + {0x3121, 0x3121, 0x3121}, {0x3122, 0x3122, 0x3122}, + {0x3123, 0x3123, 0x3123}, {0x3124, 0x3124, 0x3124}, + {0x3125, 0x3125, 0x3125}, {0x3126, 0x3126, 0x3126}, + {0x3127, 0x3127, 0x3127}, {0x3128, 0x3128, 0x3128}, + {0x3129, 0x3129, 0x3129}, {0x312A, 0x312A, 0x312A}, + {0x312B, 0x312B, 0x312B}, {0x312C, 0x312C, 0x312C}, + {0x3131, 0x3131, 0x3131}, {0x3132, 0x3132, 0x3132}, + {0x3133, 0x3133, 0x3133}, {0x3134, 0x3134, 0x3134}, + {0x3135, 0x3135, 0x3135}, {0x3136, 0x3136, 0x3136}, + {0x3137, 0x3137, 0x3137}, {0x3138, 0x3138, 0x3138}, + {0x3139, 0x3139, 0x3139}, {0x313A, 0x313A, 0x313A}, + {0x313B, 0x313B, 0x313B}, {0x313C, 0x313C, 0x313C}, + {0x313D, 0x313D, 0x313D}, {0x313E, 0x313E, 0x313E}, + {0x313F, 0x313F, 0x313F}, {0x3140, 0x3140, 0x3140}, + {0x3141, 0x3141, 0x3141}, {0x3142, 0x3142, 0x3142}, + {0x3143, 0x3143, 0x3143}, {0x3144, 0x3144, 0x3144}, + {0x3145, 0x3145, 0x3145}, {0x3146, 0x3146, 0x3146}, + {0x3147, 0x3147, 0x3147}, {0x3148, 0x3148, 0x3148}, + {0x3149, 0x3149, 0x3149}, {0x314A, 0x314A, 0x314A}, + {0x314B, 0x314B, 0x314B}, {0x314C, 0x314C, 0x314C}, + {0x314D, 0x314D, 0x314D}, {0x314E, 0x314E, 0x314E}, + {0x314F, 0x314F, 0x314F}, {0x3150, 0x3150, 0x3150}, + {0x3151, 0x3151, 0x3151}, {0x3152, 0x3152, 0x3152}, + {0x3153, 0x3153, 0x3153}, {0x3154, 0x3154, 0x3154}, + {0x3155, 0x3155, 0x3155}, {0x3156, 0x3156, 0x3156}, + {0x3157, 0x3157, 0x3157}, {0x3158, 0x3158, 0x3158}, + {0x3159, 0x3159, 0x3159}, {0x315A, 0x315A, 0x315A}, + {0x315B, 0x315B, 0x315B}, {0x315C, 0x315C, 0x315C}, + {0x315D, 0x315D, 0x315D}, {0x315E, 0x315E, 0x315E}, + {0x315F, 0x315F, 0x315F}, {0x3160, 0x3160, 0x3160}, + {0x3161, 0x3161, 0x3161}, {0x3162, 0x3162, 0x3162}, + {0x3163, 0x3163, 0x3163}, {0x3164, 0x3164, 0x3164}, + {0x3165, 0x3165, 0x3165}, {0x3166, 0x3166, 0x3166}, + {0x3167, 0x3167, 0x3167}, {0x3168, 0x3168, 0x3168}, + {0x3169, 0x3169, 0x3169}, {0x316A, 0x316A, 0x316A}, + {0x316B, 0x316B, 0x316B}, {0x316C, 0x316C, 0x316C}, + {0x316D, 0x316D, 0x316D}, {0x316E, 0x316E, 0x316E}, + {0x316F, 0x316F, 0x316F}, {0x3170, 0x3170, 0x3170}, + {0x3171, 0x3171, 0x3171}, {0x3172, 0x3172, 0x3172}, + {0x3173, 0x3173, 0x3173}, {0x3174, 0x3174, 0x3174}, + {0x3175, 0x3175, 0x3175}, {0x3176, 0x3176, 0x3176}, + {0x3177, 0x3177, 0x3177}, {0x3178, 0x3178, 0x3178}, + {0x3179, 0x3179, 0x3179}, {0x317A, 0x317A, 0x317A}, + {0x317B, 0x317B, 0x317B}, {0x317C, 0x317C, 0x317C}, + {0x317D, 0x317D, 0x317D}, {0x317E, 0x317E, 0x317E}, + {0x317F, 0x317F, 0x317F}, {0x3180, 0x3180, 0x3180}, + {0x3181, 0x3181, 0x3181}, {0x3182, 0x3182, 0x3182}, + {0x3183, 0x3183, 0x3183}, {0x3184, 0x3184, 0x3184}, + {0x3185, 0x3185, 0x3185}, {0x3186, 0x3186, 0x3186}, + {0x3187, 0x3187, 0x3187}, {0x3188, 0x3188, 0x3188}, + {0x3189, 0x3189, 0x3189}, {0x318A, 0x318A, 0x318A}, + {0x318B, 0x318B, 0x318B}, {0x318C, 0x318C, 0x318C}, + {0x318D, 0x318D, 0x318D}, {0x318E, 0x318E, 0x318E}, + {0x31A0, 0x31A0, 0x31A0}, {0x31A1, 0x31A1, 0x31A1}, + {0x31A2, 0x31A2, 0x31A2}, {0x31A3, 0x31A3, 0x31A3}, + {0x31A4, 0x31A4, 0x31A4}, {0x31A5, 0x31A5, 0x31A5}, + {0x31A6, 0x31A6, 0x31A6}, {0x31A7, 0x31A7, 0x31A7}, + {0x31A8, 0x31A8, 0x31A8}, {0x31A9, 0x31A9, 0x31A9}, + {0x31AA, 0x31AA, 0x31AA}, {0x31AB, 0x31AB, 0x31AB}, + {0x31AC, 0x31AC, 0x31AC}, {0x31AD, 0x31AD, 0x31AD}, + {0x31AE, 0x31AE, 0x31AE}, {0x31AF, 0x31AF, 0x31AF}, + {0x31B0, 0x31B0, 0x31B0}, {0x31B1, 0x31B1, 0x31B1}, + {0x31B2, 0x31B2, 0x31B2}, {0x31B3, 0x31B3, 0x31B3}, + {0x31B4, 0x31B4, 0x31B4}, {0x31B5, 0x31B5, 0x31B5}, + {0x31B6, 0x31B6, 0x31B6}, {0x31B7, 0x31B7, 0x31B7}, + {0x31F0, 0x31F0, 0x31F0}, {0x31F1, 0x31F1, 0x31F1}, + {0x31F2, 0x31F2, 0x31F2}, {0x31F3, 0x31F3, 0x31F3}, + {0x31F4, 0x31F4, 0x31F4}, {0x31F5, 0x31F5, 0x31F5}, + {0x31F6, 0x31F6, 0x31F6}, {0x31F7, 0x31F7, 0x31F7}, + {0x31F8, 0x31F8, 0x31F8}, {0x31F9, 0x31F9, 0x31F9}, + {0x31FA, 0x31FA, 0x31FA}, {0x31FB, 0x31FB, 0x31FB}, + {0x31FC, 0x31FC, 0x31FC}, {0x31FD, 0x31FD, 0x31FD}, + {0x31FE, 0x31FE, 0x31FE}, {0x31FF, 0x31FF, 0x31FF}, + {0x3400, 0x3400, 0x3400}, {0x4DB5, 0x4DB5, 0x4DB5}, + {0x4E00, 0x4E00, 0x4E00}, {0x9FBB, 0x9FBB, 0x9FBB}, + {0xA000, 0xA000, 0xA000}, {0xA001, 0xA001, 0xA001}, + {0xA002, 0xA002, 0xA002}, {0xA003, 0xA003, 0xA003}, + {0xA004, 0xA004, 0xA004}, {0xA005, 0xA005, 0xA005}, + {0xA006, 0xA006, 0xA006}, {0xA007, 0xA007, 0xA007}, + {0xA008, 0xA008, 0xA008}, {0xA009, 0xA009, 0xA009}, + {0xA00A, 0xA00A, 0xA00A}, {0xA00B, 0xA00B, 0xA00B}, + {0xA00C, 0xA00C, 0xA00C}, {0xA00D, 0xA00D, 0xA00D}, + {0xA00E, 0xA00E, 0xA00E}, {0xA00F, 0xA00F, 0xA00F}, + {0xA010, 0xA010, 0xA010}, {0xA011, 0xA011, 0xA011}, + {0xA012, 0xA012, 0xA012}, {0xA013, 0xA013, 0xA013}, + {0xA014, 0xA014, 0xA014}, {0xA015, 0xA015, 0xA015}, + {0xA016, 0xA016, 0xA016}, {0xA017, 0xA017, 0xA017}, + {0xA018, 0xA018, 0xA018}, {0xA019, 0xA019, 0xA019}, + {0xA01A, 0xA01A, 0xA01A}, {0xA01B, 0xA01B, 0xA01B}, + {0xA01C, 0xA01C, 0xA01C}, {0xA01D, 0xA01D, 0xA01D}, + {0xA01E, 0xA01E, 0xA01E}, {0xA01F, 0xA01F, 0xA01F}, + {0xA020, 0xA020, 0xA020}, {0xA021, 0xA021, 0xA021}, + {0xA022, 0xA022, 0xA022}, {0xA023, 0xA023, 0xA023}, + {0xA024, 0xA024, 0xA024}, {0xA025, 0xA025, 0xA025}, + {0xA026, 0xA026, 0xA026}, {0xA027, 0xA027, 0xA027}, + {0xA028, 0xA028, 0xA028}, {0xA029, 0xA029, 0xA029}, + {0xA02A, 0xA02A, 0xA02A}, {0xA02B, 0xA02B, 0xA02B}, + {0xA02C, 0xA02C, 0xA02C}, {0xA02D, 0xA02D, 0xA02D}, + {0xA02E, 0xA02E, 0xA02E}, {0xA02F, 0xA02F, 0xA02F}, + {0xA030, 0xA030, 0xA030}, {0xA031, 0xA031, 0xA031}, + {0xA032, 0xA032, 0xA032}, {0xA033, 0xA033, 0xA033}, + {0xA034, 0xA034, 0xA034}, {0xA035, 0xA035, 0xA035}, + {0xA036, 0xA036, 0xA036}, {0xA037, 0xA037, 0xA037}, + {0xA038, 0xA038, 0xA038}, {0xA039, 0xA039, 0xA039}, + {0xA03A, 0xA03A, 0xA03A}, {0xA03B, 0xA03B, 0xA03B}, + {0xA03C, 0xA03C, 0xA03C}, {0xA03D, 0xA03D, 0xA03D}, + {0xA03E, 0xA03E, 0xA03E}, {0xA03F, 0xA03F, 0xA03F}, + {0xA040, 0xA040, 0xA040}, {0xA041, 0xA041, 0xA041}, + {0xA042, 0xA042, 0xA042}, {0xA043, 0xA043, 0xA043}, + {0xA044, 0xA044, 0xA044}, {0xA045, 0xA045, 0xA045}, + {0xA046, 0xA046, 0xA046}, {0xA047, 0xA047, 0xA047}, + {0xA048, 0xA048, 0xA048}, {0xA049, 0xA049, 0xA049}, + {0xA04A, 0xA04A, 0xA04A}, {0xA04B, 0xA04B, 0xA04B}, + {0xA04C, 0xA04C, 0xA04C}, {0xA04D, 0xA04D, 0xA04D}, + {0xA04E, 0xA04E, 0xA04E}, {0xA04F, 0xA04F, 0xA04F}, + {0xA050, 0xA050, 0xA050}, {0xA051, 0xA051, 0xA051}, + {0xA052, 0xA052, 0xA052}, {0xA053, 0xA053, 0xA053}, + {0xA054, 0xA054, 0xA054}, {0xA055, 0xA055, 0xA055}, + {0xA056, 0xA056, 0xA056}, {0xA057, 0xA057, 0xA057}, + {0xA058, 0xA058, 0xA058}, {0xA059, 0xA059, 0xA059}, + {0xA05A, 0xA05A, 0xA05A}, {0xA05B, 0xA05B, 0xA05B}, + {0xA05C, 0xA05C, 0xA05C}, {0xA05D, 0xA05D, 0xA05D}, + {0xA05E, 0xA05E, 0xA05E}, {0xA05F, 0xA05F, 0xA05F}, + {0xA060, 0xA060, 0xA060}, {0xA061, 0xA061, 0xA061}, + {0xA062, 0xA062, 0xA062}, {0xA063, 0xA063, 0xA063}, + {0xA064, 0xA064, 0xA064}, {0xA065, 0xA065, 0xA065}, + {0xA066, 0xA066, 0xA066}, {0xA067, 0xA067, 0xA067}, + {0xA068, 0xA068, 0xA068}, {0xA069, 0xA069, 0xA069}, + {0xA06A, 0xA06A, 0xA06A}, {0xA06B, 0xA06B, 0xA06B}, + {0xA06C, 0xA06C, 0xA06C}, {0xA06D, 0xA06D, 0xA06D}, + {0xA06E, 0xA06E, 0xA06E}, {0xA06F, 0xA06F, 0xA06F}, + {0xA070, 0xA070, 0xA070}, {0xA071, 0xA071, 0xA071}, + {0xA072, 0xA072, 0xA072}, {0xA073, 0xA073, 0xA073}, + {0xA074, 0xA074, 0xA074}, {0xA075, 0xA075, 0xA075}, + {0xA076, 0xA076, 0xA076}, {0xA077, 0xA077, 0xA077}, + {0xA078, 0xA078, 0xA078}, {0xA079, 0xA079, 0xA079}, + {0xA07A, 0xA07A, 0xA07A}, {0xA07B, 0xA07B, 0xA07B}, + {0xA07C, 0xA07C, 0xA07C}, {0xA07D, 0xA07D, 0xA07D}, + {0xA07E, 0xA07E, 0xA07E}, {0xA07F, 0xA07F, 0xA07F}, + {0xA080, 0xA080, 0xA080}, {0xA081, 0xA081, 0xA081}, + {0xA082, 0xA082, 0xA082}, {0xA083, 0xA083, 0xA083}, + {0xA084, 0xA084, 0xA084}, {0xA085, 0xA085, 0xA085}, + {0xA086, 0xA086, 0xA086}, {0xA087, 0xA087, 0xA087}, + {0xA088, 0xA088, 0xA088}, {0xA089, 0xA089, 0xA089}, + {0xA08A, 0xA08A, 0xA08A}, {0xA08B, 0xA08B, 0xA08B}, + {0xA08C, 0xA08C, 0xA08C}, {0xA08D, 0xA08D, 0xA08D}, + {0xA08E, 0xA08E, 0xA08E}, {0xA08F, 0xA08F, 0xA08F}, + {0xA090, 0xA090, 0xA090}, {0xA091, 0xA091, 0xA091}, + {0xA092, 0xA092, 0xA092}, {0xA093, 0xA093, 0xA093}, + {0xA094, 0xA094, 0xA094}, {0xA095, 0xA095, 0xA095}, + {0xA096, 0xA096, 0xA096}, {0xA097, 0xA097, 0xA097}, + {0xA098, 0xA098, 0xA098}, {0xA099, 0xA099, 0xA099}, + {0xA09A, 0xA09A, 0xA09A}, {0xA09B, 0xA09B, 0xA09B}, + {0xA09C, 0xA09C, 0xA09C}, {0xA09D, 0xA09D, 0xA09D}, + {0xA09E, 0xA09E, 0xA09E}, {0xA09F, 0xA09F, 0xA09F}, + {0xA0A0, 0xA0A0, 0xA0A0}, {0xA0A1, 0xA0A1, 0xA0A1}, + {0xA0A2, 0xA0A2, 0xA0A2}, {0xA0A3, 0xA0A3, 0xA0A3}, + {0xA0A4, 0xA0A4, 0xA0A4}, {0xA0A5, 0xA0A5, 0xA0A5}, + {0xA0A6, 0xA0A6, 0xA0A6}, {0xA0A7, 0xA0A7, 0xA0A7}, + {0xA0A8, 0xA0A8, 0xA0A8}, {0xA0A9, 0xA0A9, 0xA0A9}, + {0xA0AA, 0xA0AA, 0xA0AA}, {0xA0AB, 0xA0AB, 0xA0AB}, + {0xA0AC, 0xA0AC, 0xA0AC}, {0xA0AD, 0xA0AD, 0xA0AD}, + {0xA0AE, 0xA0AE, 0xA0AE}, {0xA0AF, 0xA0AF, 0xA0AF}, + {0xA0B0, 0xA0B0, 0xA0B0}, {0xA0B1, 0xA0B1, 0xA0B1}, + {0xA0B2, 0xA0B2, 0xA0B2}, {0xA0B3, 0xA0B3, 0xA0B3}, + {0xA0B4, 0xA0B4, 0xA0B4}, {0xA0B5, 0xA0B5, 0xA0B5}, + {0xA0B6, 0xA0B6, 0xA0B6}, {0xA0B7, 0xA0B7, 0xA0B7}, + {0xA0B8, 0xA0B8, 0xA0B8}, {0xA0B9, 0xA0B9, 0xA0B9}, + {0xA0BA, 0xA0BA, 0xA0BA}, {0xA0BB, 0xA0BB, 0xA0BB}, + {0xA0BC, 0xA0BC, 0xA0BC}, {0xA0BD, 0xA0BD, 0xA0BD}, + {0xA0BE, 0xA0BE, 0xA0BE}, {0xA0BF, 0xA0BF, 0xA0BF}, + {0xA0C0, 0xA0C0, 0xA0C0}, {0xA0C1, 0xA0C1, 0xA0C1}, + {0xA0C2, 0xA0C2, 0xA0C2}, {0xA0C3, 0xA0C3, 0xA0C3}, + {0xA0C4, 0xA0C4, 0xA0C4}, {0xA0C5, 0xA0C5, 0xA0C5}, + {0xA0C6, 0xA0C6, 0xA0C6}, {0xA0C7, 0xA0C7, 0xA0C7}, + {0xA0C8, 0xA0C8, 0xA0C8}, {0xA0C9, 0xA0C9, 0xA0C9}, + {0xA0CA, 0xA0CA, 0xA0CA}, {0xA0CB, 0xA0CB, 0xA0CB}, + {0xA0CC, 0xA0CC, 0xA0CC}, {0xA0CD, 0xA0CD, 0xA0CD}, + {0xA0CE, 0xA0CE, 0xA0CE}, {0xA0CF, 0xA0CF, 0xA0CF}, + {0xA0D0, 0xA0D0, 0xA0D0}, {0xA0D1, 0xA0D1, 0xA0D1}, + {0xA0D2, 0xA0D2, 0xA0D2}, {0xA0D3, 0xA0D3, 0xA0D3}, + {0xA0D4, 0xA0D4, 0xA0D4}, {0xA0D5, 0xA0D5, 0xA0D5}, + {0xA0D6, 0xA0D6, 0xA0D6}, {0xA0D7, 0xA0D7, 0xA0D7}, + {0xA0D8, 0xA0D8, 0xA0D8}, {0xA0D9, 0xA0D9, 0xA0D9}, + {0xA0DA, 0xA0DA, 0xA0DA}, {0xA0DB, 0xA0DB, 0xA0DB}, + {0xA0DC, 0xA0DC, 0xA0DC}, {0xA0DD, 0xA0DD, 0xA0DD}, + {0xA0DE, 0xA0DE, 0xA0DE}, {0xA0DF, 0xA0DF, 0xA0DF}, + {0xA0E0, 0xA0E0, 0xA0E0}, {0xA0E1, 0xA0E1, 0xA0E1}, + {0xA0E2, 0xA0E2, 0xA0E2}, {0xA0E3, 0xA0E3, 0xA0E3}, + {0xA0E4, 0xA0E4, 0xA0E4}, {0xA0E5, 0xA0E5, 0xA0E5}, + {0xA0E6, 0xA0E6, 0xA0E6}, {0xA0E7, 0xA0E7, 0xA0E7}, + {0xA0E8, 0xA0E8, 0xA0E8}, {0xA0E9, 0xA0E9, 0xA0E9}, + {0xA0EA, 0xA0EA, 0xA0EA}, {0xA0EB, 0xA0EB, 0xA0EB}, + {0xA0EC, 0xA0EC, 0xA0EC}, {0xA0ED, 0xA0ED, 0xA0ED}, + {0xA0EE, 0xA0EE, 0xA0EE}, {0xA0EF, 0xA0EF, 0xA0EF}, + {0xA0F0, 0xA0F0, 0xA0F0}, {0xA0F1, 0xA0F1, 0xA0F1}, + {0xA0F2, 0xA0F2, 0xA0F2}, {0xA0F3, 0xA0F3, 0xA0F3}, + {0xA0F4, 0xA0F4, 0xA0F4}, {0xA0F5, 0xA0F5, 0xA0F5}, + {0xA0F6, 0xA0F6, 0xA0F6}, {0xA0F7, 0xA0F7, 0xA0F7}, + {0xA0F8, 0xA0F8, 0xA0F8}, {0xA0F9, 0xA0F9, 0xA0F9}, + {0xA0FA, 0xA0FA, 0xA0FA}, {0xA0FB, 0xA0FB, 0xA0FB}, + {0xA0FC, 0xA0FC, 0xA0FC}, {0xA0FD, 0xA0FD, 0xA0FD}, + {0xA0FE, 0xA0FE, 0xA0FE}, {0xA0FF, 0xA0FF, 0xA0FF}, + {0xA100, 0xA100, 0xA100}, {0xA101, 0xA101, 0xA101}, + {0xA102, 0xA102, 0xA102}, {0xA103, 0xA103, 0xA103}, + {0xA104, 0xA104, 0xA104}, {0xA105, 0xA105, 0xA105}, + {0xA106, 0xA106, 0xA106}, {0xA107, 0xA107, 0xA107}, + {0xA108, 0xA108, 0xA108}, {0xA109, 0xA109, 0xA109}, + {0xA10A, 0xA10A, 0xA10A}, {0xA10B, 0xA10B, 0xA10B}, + {0xA10C, 0xA10C, 0xA10C}, {0xA10D, 0xA10D, 0xA10D}, + {0xA10E, 0xA10E, 0xA10E}, {0xA10F, 0xA10F, 0xA10F}, + {0xA110, 0xA110, 0xA110}, {0xA111, 0xA111, 0xA111}, + {0xA112, 0xA112, 0xA112}, {0xA113, 0xA113, 0xA113}, + {0xA114, 0xA114, 0xA114}, {0xA115, 0xA115, 0xA115}, + {0xA116, 0xA116, 0xA116}, {0xA117, 0xA117, 0xA117}, + {0xA118, 0xA118, 0xA118}, {0xA119, 0xA119, 0xA119}, + {0xA11A, 0xA11A, 0xA11A}, {0xA11B, 0xA11B, 0xA11B}, + {0xA11C, 0xA11C, 0xA11C}, {0xA11D, 0xA11D, 0xA11D}, + {0xA11E, 0xA11E, 0xA11E}, {0xA11F, 0xA11F, 0xA11F}, + {0xA120, 0xA120, 0xA120}, {0xA121, 0xA121, 0xA121}, + {0xA122, 0xA122, 0xA122}, {0xA123, 0xA123, 0xA123}, + {0xA124, 0xA124, 0xA124}, {0xA125, 0xA125, 0xA125}, + {0xA126, 0xA126, 0xA126}, {0xA127, 0xA127, 0xA127}, + {0xA128, 0xA128, 0xA128}, {0xA129, 0xA129, 0xA129}, + {0xA12A, 0xA12A, 0xA12A}, {0xA12B, 0xA12B, 0xA12B}, + {0xA12C, 0xA12C, 0xA12C}, {0xA12D, 0xA12D, 0xA12D}, + {0xA12E, 0xA12E, 0xA12E}, {0xA12F, 0xA12F, 0xA12F}, + {0xA130, 0xA130, 0xA130}, {0xA131, 0xA131, 0xA131}, + {0xA132, 0xA132, 0xA132}, {0xA133, 0xA133, 0xA133}, + {0xA134, 0xA134, 0xA134}, {0xA135, 0xA135, 0xA135}, + {0xA136, 0xA136, 0xA136}, {0xA137, 0xA137, 0xA137}, + {0xA138, 0xA138, 0xA138}, {0xA139, 0xA139, 0xA139}, + {0xA13A, 0xA13A, 0xA13A}, {0xA13B, 0xA13B, 0xA13B}, + {0xA13C, 0xA13C, 0xA13C}, {0xA13D, 0xA13D, 0xA13D}, + {0xA13E, 0xA13E, 0xA13E}, {0xA13F, 0xA13F, 0xA13F}, + {0xA140, 0xA140, 0xA140}, {0xA141, 0xA141, 0xA141}, + {0xA142, 0xA142, 0xA142}, {0xA143, 0xA143, 0xA143}, + {0xA144, 0xA144, 0xA144}, {0xA145, 0xA145, 0xA145}, + {0xA146, 0xA146, 0xA146}, {0xA147, 0xA147, 0xA147}, + {0xA148, 0xA148, 0xA148}, {0xA149, 0xA149, 0xA149}, + {0xA14A, 0xA14A, 0xA14A}, {0xA14B, 0xA14B, 0xA14B}, + {0xA14C, 0xA14C, 0xA14C}, {0xA14D, 0xA14D, 0xA14D}, + {0xA14E, 0xA14E, 0xA14E}, {0xA14F, 0xA14F, 0xA14F}, + {0xA150, 0xA150, 0xA150}, {0xA151, 0xA151, 0xA151}, + {0xA152, 0xA152, 0xA152}, {0xA153, 0xA153, 0xA153}, + {0xA154, 0xA154, 0xA154}, {0xA155, 0xA155, 0xA155}, + {0xA156, 0xA156, 0xA156}, {0xA157, 0xA157, 0xA157}, + {0xA158, 0xA158, 0xA158}, {0xA159, 0xA159, 0xA159}, + {0xA15A, 0xA15A, 0xA15A}, {0xA15B, 0xA15B, 0xA15B}, + {0xA15C, 0xA15C, 0xA15C}, {0xA15D, 0xA15D, 0xA15D}, + {0xA15E, 0xA15E, 0xA15E}, {0xA15F, 0xA15F, 0xA15F}, + {0xA160, 0xA160, 0xA160}, {0xA161, 0xA161, 0xA161}, + {0xA162, 0xA162, 0xA162}, {0xA163, 0xA163, 0xA163}, + {0xA164, 0xA164, 0xA164}, {0xA165, 0xA165, 0xA165}, + {0xA166, 0xA166, 0xA166}, {0xA167, 0xA167, 0xA167}, + {0xA168, 0xA168, 0xA168}, {0xA169, 0xA169, 0xA169}, + {0xA16A, 0xA16A, 0xA16A}, {0xA16B, 0xA16B, 0xA16B}, + {0xA16C, 0xA16C, 0xA16C}, {0xA16D, 0xA16D, 0xA16D}, + {0xA16E, 0xA16E, 0xA16E}, {0xA16F, 0xA16F, 0xA16F}, + {0xA170, 0xA170, 0xA170}, {0xA171, 0xA171, 0xA171}, + {0xA172, 0xA172, 0xA172}, {0xA173, 0xA173, 0xA173}, + {0xA174, 0xA174, 0xA174}, {0xA175, 0xA175, 0xA175}, + {0xA176, 0xA176, 0xA176}, {0xA177, 0xA177, 0xA177}, + {0xA178, 0xA178, 0xA178}, {0xA179, 0xA179, 0xA179}, + {0xA17A, 0xA17A, 0xA17A}, {0xA17B, 0xA17B, 0xA17B}, + {0xA17C, 0xA17C, 0xA17C}, {0xA17D, 0xA17D, 0xA17D}, + {0xA17E, 0xA17E, 0xA17E}, {0xA17F, 0xA17F, 0xA17F}, + {0xA180, 0xA180, 0xA180}, {0xA181, 0xA181, 0xA181}, + {0xA182, 0xA182, 0xA182}, {0xA183, 0xA183, 0xA183}, + {0xA184, 0xA184, 0xA184}, {0xA185, 0xA185, 0xA185}, + {0xA186, 0xA186, 0xA186}, {0xA187, 0xA187, 0xA187}, + {0xA188, 0xA188, 0xA188}, {0xA189, 0xA189, 0xA189}, + {0xA18A, 0xA18A, 0xA18A}, {0xA18B, 0xA18B, 0xA18B}, + {0xA18C, 0xA18C, 0xA18C}, {0xA18D, 0xA18D, 0xA18D}, + {0xA18E, 0xA18E, 0xA18E}, {0xA18F, 0xA18F, 0xA18F}, + {0xA190, 0xA190, 0xA190}, {0xA191, 0xA191, 0xA191}, + {0xA192, 0xA192, 0xA192}, {0xA193, 0xA193, 0xA193}, + {0xA194, 0xA194, 0xA194}, {0xA195, 0xA195, 0xA195}, + {0xA196, 0xA196, 0xA196}, {0xA197, 0xA197, 0xA197}, + {0xA198, 0xA198, 0xA198}, {0xA199, 0xA199, 0xA199}, + {0xA19A, 0xA19A, 0xA19A}, {0xA19B, 0xA19B, 0xA19B}, + {0xA19C, 0xA19C, 0xA19C}, {0xA19D, 0xA19D, 0xA19D}, + {0xA19E, 0xA19E, 0xA19E}, {0xA19F, 0xA19F, 0xA19F}, + {0xA1A0, 0xA1A0, 0xA1A0}, {0xA1A1, 0xA1A1, 0xA1A1}, + {0xA1A2, 0xA1A2, 0xA1A2}, {0xA1A3, 0xA1A3, 0xA1A3}, + {0xA1A4, 0xA1A4, 0xA1A4}, {0xA1A5, 0xA1A5, 0xA1A5}, + {0xA1A6, 0xA1A6, 0xA1A6}, {0xA1A7, 0xA1A7, 0xA1A7}, + {0xA1A8, 0xA1A8, 0xA1A8}, {0xA1A9, 0xA1A9, 0xA1A9}, + {0xA1AA, 0xA1AA, 0xA1AA}, {0xA1AB, 0xA1AB, 0xA1AB}, + {0xA1AC, 0xA1AC, 0xA1AC}, {0xA1AD, 0xA1AD, 0xA1AD}, + {0xA1AE, 0xA1AE, 0xA1AE}, {0xA1AF, 0xA1AF, 0xA1AF}, + {0xA1B0, 0xA1B0, 0xA1B0}, {0xA1B1, 0xA1B1, 0xA1B1}, + {0xA1B2, 0xA1B2, 0xA1B2}, {0xA1B3, 0xA1B3, 0xA1B3}, + {0xA1B4, 0xA1B4, 0xA1B4}, {0xA1B5, 0xA1B5, 0xA1B5}, + {0xA1B6, 0xA1B6, 0xA1B6}, {0xA1B7, 0xA1B7, 0xA1B7}, + {0xA1B8, 0xA1B8, 0xA1B8}, {0xA1B9, 0xA1B9, 0xA1B9}, + {0xA1BA, 0xA1BA, 0xA1BA}, {0xA1BB, 0xA1BB, 0xA1BB}, + {0xA1BC, 0xA1BC, 0xA1BC}, {0xA1BD, 0xA1BD, 0xA1BD}, + {0xA1BE, 0xA1BE, 0xA1BE}, {0xA1BF, 0xA1BF, 0xA1BF}, + {0xA1C0, 0xA1C0, 0xA1C0}, {0xA1C1, 0xA1C1, 0xA1C1}, + {0xA1C2, 0xA1C2, 0xA1C2}, {0xA1C3, 0xA1C3, 0xA1C3}, + {0xA1C4, 0xA1C4, 0xA1C4}, {0xA1C5, 0xA1C5, 0xA1C5}, + {0xA1C6, 0xA1C6, 0xA1C6}, {0xA1C7, 0xA1C7, 0xA1C7}, + {0xA1C8, 0xA1C8, 0xA1C8}, {0xA1C9, 0xA1C9, 0xA1C9}, + {0xA1CA, 0xA1CA, 0xA1CA}, {0xA1CB, 0xA1CB, 0xA1CB}, + {0xA1CC, 0xA1CC, 0xA1CC}, {0xA1CD, 0xA1CD, 0xA1CD}, + {0xA1CE, 0xA1CE, 0xA1CE}, {0xA1CF, 0xA1CF, 0xA1CF}, + {0xA1D0, 0xA1D0, 0xA1D0}, {0xA1D1, 0xA1D1, 0xA1D1}, + {0xA1D2, 0xA1D2, 0xA1D2}, {0xA1D3, 0xA1D3, 0xA1D3}, + {0xA1D4, 0xA1D4, 0xA1D4}, {0xA1D5, 0xA1D5, 0xA1D5}, + {0xA1D6, 0xA1D6, 0xA1D6}, {0xA1D7, 0xA1D7, 0xA1D7}, + {0xA1D8, 0xA1D8, 0xA1D8}, {0xA1D9, 0xA1D9, 0xA1D9}, + {0xA1DA, 0xA1DA, 0xA1DA}, {0xA1DB, 0xA1DB, 0xA1DB}, + {0xA1DC, 0xA1DC, 0xA1DC}, {0xA1DD, 0xA1DD, 0xA1DD}, + {0xA1DE, 0xA1DE, 0xA1DE}, {0xA1DF, 0xA1DF, 0xA1DF}, + {0xA1E0, 0xA1E0, 0xA1E0}, {0xA1E1, 0xA1E1, 0xA1E1}, + {0xA1E2, 0xA1E2, 0xA1E2}, {0xA1E3, 0xA1E3, 0xA1E3}, + {0xA1E4, 0xA1E4, 0xA1E4}, {0xA1E5, 0xA1E5, 0xA1E5}, + {0xA1E6, 0xA1E6, 0xA1E6}, {0xA1E7, 0xA1E7, 0xA1E7}, + {0xA1E8, 0xA1E8, 0xA1E8}, {0xA1E9, 0xA1E9, 0xA1E9}, + {0xA1EA, 0xA1EA, 0xA1EA}, {0xA1EB, 0xA1EB, 0xA1EB}, + {0xA1EC, 0xA1EC, 0xA1EC}, {0xA1ED, 0xA1ED, 0xA1ED}, + {0xA1EE, 0xA1EE, 0xA1EE}, {0xA1EF, 0xA1EF, 0xA1EF}, + {0xA1F0, 0xA1F0, 0xA1F0}, {0xA1F1, 0xA1F1, 0xA1F1}, + {0xA1F2, 0xA1F2, 0xA1F2}, {0xA1F3, 0xA1F3, 0xA1F3}, + {0xA1F4, 0xA1F4, 0xA1F4}, {0xA1F5, 0xA1F5, 0xA1F5}, + {0xA1F6, 0xA1F6, 0xA1F6}, {0xA1F7, 0xA1F7, 0xA1F7}, + {0xA1F8, 0xA1F8, 0xA1F8}, {0xA1F9, 0xA1F9, 0xA1F9}, + {0xA1FA, 0xA1FA, 0xA1FA}, {0xA1FB, 0xA1FB, 0xA1FB}, + {0xA1FC, 0xA1FC, 0xA1FC}, {0xA1FD, 0xA1FD, 0xA1FD}, + {0xA1FE, 0xA1FE, 0xA1FE}, {0xA1FF, 0xA1FF, 0xA1FF}, + {0xA200, 0xA200, 0xA200}, {0xA201, 0xA201, 0xA201}, + {0xA202, 0xA202, 0xA202}, {0xA203, 0xA203, 0xA203}, + {0xA204, 0xA204, 0xA204}, {0xA205, 0xA205, 0xA205}, + {0xA206, 0xA206, 0xA206}, {0xA207, 0xA207, 0xA207}, + {0xA208, 0xA208, 0xA208}, {0xA209, 0xA209, 0xA209}, + {0xA20A, 0xA20A, 0xA20A}, {0xA20B, 0xA20B, 0xA20B}, + {0xA20C, 0xA20C, 0xA20C}, {0xA20D, 0xA20D, 0xA20D}, + {0xA20E, 0xA20E, 0xA20E}, {0xA20F, 0xA20F, 0xA20F}, + {0xA210, 0xA210, 0xA210}, {0xA211, 0xA211, 0xA211}, + {0xA212, 0xA212, 0xA212}, {0xA213, 0xA213, 0xA213}, + {0xA214, 0xA214, 0xA214}, {0xA215, 0xA215, 0xA215}, + {0xA216, 0xA216, 0xA216}, {0xA217, 0xA217, 0xA217}, + {0xA218, 0xA218, 0xA218}, {0xA219, 0xA219, 0xA219}, + {0xA21A, 0xA21A, 0xA21A}, {0xA21B, 0xA21B, 0xA21B}, + {0xA21C, 0xA21C, 0xA21C}, {0xA21D, 0xA21D, 0xA21D}, + {0xA21E, 0xA21E, 0xA21E}, {0xA21F, 0xA21F, 0xA21F}, + {0xA220, 0xA220, 0xA220}, {0xA221, 0xA221, 0xA221}, + {0xA222, 0xA222, 0xA222}, {0xA223, 0xA223, 0xA223}, + {0xA224, 0xA224, 0xA224}, {0xA225, 0xA225, 0xA225}, + {0xA226, 0xA226, 0xA226}, {0xA227, 0xA227, 0xA227}, + {0xA228, 0xA228, 0xA228}, {0xA229, 0xA229, 0xA229}, + {0xA22A, 0xA22A, 0xA22A}, {0xA22B, 0xA22B, 0xA22B}, + {0xA22C, 0xA22C, 0xA22C}, {0xA22D, 0xA22D, 0xA22D}, + {0xA22E, 0xA22E, 0xA22E}, {0xA22F, 0xA22F, 0xA22F}, + {0xA230, 0xA230, 0xA230}, {0xA231, 0xA231, 0xA231}, + {0xA232, 0xA232, 0xA232}, {0xA233, 0xA233, 0xA233}, + {0xA234, 0xA234, 0xA234}, {0xA235, 0xA235, 0xA235}, + {0xA236, 0xA236, 0xA236}, {0xA237, 0xA237, 0xA237}, + {0xA238, 0xA238, 0xA238}, {0xA239, 0xA239, 0xA239}, + {0xA23A, 0xA23A, 0xA23A}, {0xA23B, 0xA23B, 0xA23B}, + {0xA23C, 0xA23C, 0xA23C}, {0xA23D, 0xA23D, 0xA23D}, + {0xA23E, 0xA23E, 0xA23E}, {0xA23F, 0xA23F, 0xA23F}, + {0xA240, 0xA240, 0xA240}, {0xA241, 0xA241, 0xA241}, + {0xA242, 0xA242, 0xA242}, {0xA243, 0xA243, 0xA243}, + {0xA244, 0xA244, 0xA244}, {0xA245, 0xA245, 0xA245}, + {0xA246, 0xA246, 0xA246}, {0xA247, 0xA247, 0xA247}, + {0xA248, 0xA248, 0xA248}, {0xA249, 0xA249, 0xA249}, + {0xA24A, 0xA24A, 0xA24A}, {0xA24B, 0xA24B, 0xA24B}, + {0xA24C, 0xA24C, 0xA24C}, {0xA24D, 0xA24D, 0xA24D}, + {0xA24E, 0xA24E, 0xA24E}, {0xA24F, 0xA24F, 0xA24F}, + {0xA250, 0xA250, 0xA250}, {0xA251, 0xA251, 0xA251}, + {0xA252, 0xA252, 0xA252}, {0xA253, 0xA253, 0xA253}, + {0xA254, 0xA254, 0xA254}, {0xA255, 0xA255, 0xA255}, + {0xA256, 0xA256, 0xA256}, {0xA257, 0xA257, 0xA257}, + {0xA258, 0xA258, 0xA258}, {0xA259, 0xA259, 0xA259}, + {0xA25A, 0xA25A, 0xA25A}, {0xA25B, 0xA25B, 0xA25B}, + {0xA25C, 0xA25C, 0xA25C}, {0xA25D, 0xA25D, 0xA25D}, + {0xA25E, 0xA25E, 0xA25E}, {0xA25F, 0xA25F, 0xA25F}, + {0xA260, 0xA260, 0xA260}, {0xA261, 0xA261, 0xA261}, + {0xA262, 0xA262, 0xA262}, {0xA263, 0xA263, 0xA263}, + {0xA264, 0xA264, 0xA264}, {0xA265, 0xA265, 0xA265}, + {0xA266, 0xA266, 0xA266}, {0xA267, 0xA267, 0xA267}, + {0xA268, 0xA268, 0xA268}, {0xA269, 0xA269, 0xA269}, + {0xA26A, 0xA26A, 0xA26A}, {0xA26B, 0xA26B, 0xA26B}, + {0xA26C, 0xA26C, 0xA26C}, {0xA26D, 0xA26D, 0xA26D}, + {0xA26E, 0xA26E, 0xA26E}, {0xA26F, 0xA26F, 0xA26F}, + {0xA270, 0xA270, 0xA270}, {0xA271, 0xA271, 0xA271}, + {0xA272, 0xA272, 0xA272}, {0xA273, 0xA273, 0xA273}, + {0xA274, 0xA274, 0xA274}, {0xA275, 0xA275, 0xA275}, + {0xA276, 0xA276, 0xA276}, {0xA277, 0xA277, 0xA277}, + {0xA278, 0xA278, 0xA278}, {0xA279, 0xA279, 0xA279}, + {0xA27A, 0xA27A, 0xA27A}, {0xA27B, 0xA27B, 0xA27B}, + {0xA27C, 0xA27C, 0xA27C}, {0xA27D, 0xA27D, 0xA27D}, + {0xA27E, 0xA27E, 0xA27E}, {0xA27F, 0xA27F, 0xA27F}, + {0xA280, 0xA280, 0xA280}, {0xA281, 0xA281, 0xA281}, + {0xA282, 0xA282, 0xA282}, {0xA283, 0xA283, 0xA283}, + {0xA284, 0xA284, 0xA284}, {0xA285, 0xA285, 0xA285}, + {0xA286, 0xA286, 0xA286}, {0xA287, 0xA287, 0xA287}, + {0xA288, 0xA288, 0xA288}, {0xA289, 0xA289, 0xA289}, + {0xA28A, 0xA28A, 0xA28A}, {0xA28B, 0xA28B, 0xA28B}, + {0xA28C, 0xA28C, 0xA28C}, {0xA28D, 0xA28D, 0xA28D}, + {0xA28E, 0xA28E, 0xA28E}, {0xA28F, 0xA28F, 0xA28F}, + {0xA290, 0xA290, 0xA290}, {0xA291, 0xA291, 0xA291}, + {0xA292, 0xA292, 0xA292}, {0xA293, 0xA293, 0xA293}, + {0xA294, 0xA294, 0xA294}, {0xA295, 0xA295, 0xA295}, + {0xA296, 0xA296, 0xA296}, {0xA297, 0xA297, 0xA297}, + {0xA298, 0xA298, 0xA298}, {0xA299, 0xA299, 0xA299}, + {0xA29A, 0xA29A, 0xA29A}, {0xA29B, 0xA29B, 0xA29B}, + {0xA29C, 0xA29C, 0xA29C}, {0xA29D, 0xA29D, 0xA29D}, + {0xA29E, 0xA29E, 0xA29E}, {0xA29F, 0xA29F, 0xA29F}, + {0xA2A0, 0xA2A0, 0xA2A0}, {0xA2A1, 0xA2A1, 0xA2A1}, + {0xA2A2, 0xA2A2, 0xA2A2}, {0xA2A3, 0xA2A3, 0xA2A3}, + {0xA2A4, 0xA2A4, 0xA2A4}, {0xA2A5, 0xA2A5, 0xA2A5}, + {0xA2A6, 0xA2A6, 0xA2A6}, {0xA2A7, 0xA2A7, 0xA2A7}, + {0xA2A8, 0xA2A8, 0xA2A8}, {0xA2A9, 0xA2A9, 0xA2A9}, + {0xA2AA, 0xA2AA, 0xA2AA}, {0xA2AB, 0xA2AB, 0xA2AB}, + {0xA2AC, 0xA2AC, 0xA2AC}, {0xA2AD, 0xA2AD, 0xA2AD}, + {0xA2AE, 0xA2AE, 0xA2AE}, {0xA2AF, 0xA2AF, 0xA2AF}, + {0xA2B0, 0xA2B0, 0xA2B0}, {0xA2B1, 0xA2B1, 0xA2B1}, + {0xA2B2, 0xA2B2, 0xA2B2}, {0xA2B3, 0xA2B3, 0xA2B3}, + {0xA2B4, 0xA2B4, 0xA2B4}, {0xA2B5, 0xA2B5, 0xA2B5}, + {0xA2B6, 0xA2B6, 0xA2B6}, {0xA2B7, 0xA2B7, 0xA2B7}, + {0xA2B8, 0xA2B8, 0xA2B8}, {0xA2B9, 0xA2B9, 0xA2B9}, + {0xA2BA, 0xA2BA, 0xA2BA}, {0xA2BB, 0xA2BB, 0xA2BB}, + {0xA2BC, 0xA2BC, 0xA2BC}, {0xA2BD, 0xA2BD, 0xA2BD}, + {0xA2BE, 0xA2BE, 0xA2BE}, {0xA2BF, 0xA2BF, 0xA2BF}, + {0xA2C0, 0xA2C0, 0xA2C0}, {0xA2C1, 0xA2C1, 0xA2C1}, + {0xA2C2, 0xA2C2, 0xA2C2}, {0xA2C3, 0xA2C3, 0xA2C3}, + {0xA2C4, 0xA2C4, 0xA2C4}, {0xA2C5, 0xA2C5, 0xA2C5}, + {0xA2C6, 0xA2C6, 0xA2C6}, {0xA2C7, 0xA2C7, 0xA2C7}, + {0xA2C8, 0xA2C8, 0xA2C8}, {0xA2C9, 0xA2C9, 0xA2C9}, + {0xA2CA, 0xA2CA, 0xA2CA}, {0xA2CB, 0xA2CB, 0xA2CB}, + {0xA2CC, 0xA2CC, 0xA2CC}, {0xA2CD, 0xA2CD, 0xA2CD}, + {0xA2CE, 0xA2CE, 0xA2CE}, {0xA2CF, 0xA2CF, 0xA2CF}, + {0xA2D0, 0xA2D0, 0xA2D0}, {0xA2D1, 0xA2D1, 0xA2D1}, + {0xA2D2, 0xA2D2, 0xA2D2}, {0xA2D3, 0xA2D3, 0xA2D3}, + {0xA2D4, 0xA2D4, 0xA2D4}, {0xA2D5, 0xA2D5, 0xA2D5}, + {0xA2D6, 0xA2D6, 0xA2D6}, {0xA2D7, 0xA2D7, 0xA2D7}, + {0xA2D8, 0xA2D8, 0xA2D8}, {0xA2D9, 0xA2D9, 0xA2D9}, + {0xA2DA, 0xA2DA, 0xA2DA}, {0xA2DB, 0xA2DB, 0xA2DB}, + {0xA2DC, 0xA2DC, 0xA2DC}, {0xA2DD, 0xA2DD, 0xA2DD}, + {0xA2DE, 0xA2DE, 0xA2DE}, {0xA2DF, 0xA2DF, 0xA2DF}, + {0xA2E0, 0xA2E0, 0xA2E0}, {0xA2E1, 0xA2E1, 0xA2E1}, + {0xA2E2, 0xA2E2, 0xA2E2}, {0xA2E3, 0xA2E3, 0xA2E3}, + {0xA2E4, 0xA2E4, 0xA2E4}, {0xA2E5, 0xA2E5, 0xA2E5}, + {0xA2E6, 0xA2E6, 0xA2E6}, {0xA2E7, 0xA2E7, 0xA2E7}, + {0xA2E8, 0xA2E8, 0xA2E8}, {0xA2E9, 0xA2E9, 0xA2E9}, + {0xA2EA, 0xA2EA, 0xA2EA}, {0xA2EB, 0xA2EB, 0xA2EB}, + {0xA2EC, 0xA2EC, 0xA2EC}, {0xA2ED, 0xA2ED, 0xA2ED}, + {0xA2EE, 0xA2EE, 0xA2EE}, {0xA2EF, 0xA2EF, 0xA2EF}, + {0xA2F0, 0xA2F0, 0xA2F0}, {0xA2F1, 0xA2F1, 0xA2F1}, + {0xA2F2, 0xA2F2, 0xA2F2}, {0xA2F3, 0xA2F3, 0xA2F3}, + {0xA2F4, 0xA2F4, 0xA2F4}, {0xA2F5, 0xA2F5, 0xA2F5}, + {0xA2F6, 0xA2F6, 0xA2F6}, {0xA2F7, 0xA2F7, 0xA2F7}, + {0xA2F8, 0xA2F8, 0xA2F8}, {0xA2F9, 0xA2F9, 0xA2F9}, + {0xA2FA, 0xA2FA, 0xA2FA}, {0xA2FB, 0xA2FB, 0xA2FB}, + {0xA2FC, 0xA2FC, 0xA2FC}, {0xA2FD, 0xA2FD, 0xA2FD}, + {0xA2FE, 0xA2FE, 0xA2FE}, {0xA2FF, 0xA2FF, 0xA2FF}, + {0xA300, 0xA300, 0xA300}, {0xA301, 0xA301, 0xA301}, + {0xA302, 0xA302, 0xA302}, {0xA303, 0xA303, 0xA303}, + {0xA304, 0xA304, 0xA304}, {0xA305, 0xA305, 0xA305}, + {0xA306, 0xA306, 0xA306}, {0xA307, 0xA307, 0xA307}, + {0xA308, 0xA308, 0xA308}, {0xA309, 0xA309, 0xA309}, + {0xA30A, 0xA30A, 0xA30A}, {0xA30B, 0xA30B, 0xA30B}, + {0xA30C, 0xA30C, 0xA30C}, {0xA30D, 0xA30D, 0xA30D}, + {0xA30E, 0xA30E, 0xA30E}, {0xA30F, 0xA30F, 0xA30F}, + {0xA310, 0xA310, 0xA310}, {0xA311, 0xA311, 0xA311}, + {0xA312, 0xA312, 0xA312}, {0xA313, 0xA313, 0xA313}, + {0xA314, 0xA314, 0xA314}, {0xA315, 0xA315, 0xA315}, + {0xA316, 0xA316, 0xA316}, {0xA317, 0xA317, 0xA317}, + {0xA318, 0xA318, 0xA318}, {0xA319, 0xA319, 0xA319}, + {0xA31A, 0xA31A, 0xA31A}, {0xA31B, 0xA31B, 0xA31B}, + {0xA31C, 0xA31C, 0xA31C}, {0xA31D, 0xA31D, 0xA31D}, + {0xA31E, 0xA31E, 0xA31E}, {0xA31F, 0xA31F, 0xA31F}, + {0xA320, 0xA320, 0xA320}, {0xA321, 0xA321, 0xA321}, + {0xA322, 0xA322, 0xA322}, {0xA323, 0xA323, 0xA323}, + {0xA324, 0xA324, 0xA324}, {0xA325, 0xA325, 0xA325}, + {0xA326, 0xA326, 0xA326}, {0xA327, 0xA327, 0xA327}, + {0xA328, 0xA328, 0xA328}, {0xA329, 0xA329, 0xA329}, + {0xA32A, 0xA32A, 0xA32A}, {0xA32B, 0xA32B, 0xA32B}, + {0xA32C, 0xA32C, 0xA32C}, {0xA32D, 0xA32D, 0xA32D}, + {0xA32E, 0xA32E, 0xA32E}, {0xA32F, 0xA32F, 0xA32F}, + {0xA330, 0xA330, 0xA330}, {0xA331, 0xA331, 0xA331}, + {0xA332, 0xA332, 0xA332}, {0xA333, 0xA333, 0xA333}, + {0xA334, 0xA334, 0xA334}, {0xA335, 0xA335, 0xA335}, + {0xA336, 0xA336, 0xA336}, {0xA337, 0xA337, 0xA337}, + {0xA338, 0xA338, 0xA338}, {0xA339, 0xA339, 0xA339}, + {0xA33A, 0xA33A, 0xA33A}, {0xA33B, 0xA33B, 0xA33B}, + {0xA33C, 0xA33C, 0xA33C}, {0xA33D, 0xA33D, 0xA33D}, + {0xA33E, 0xA33E, 0xA33E}, {0xA33F, 0xA33F, 0xA33F}, + {0xA340, 0xA340, 0xA340}, {0xA341, 0xA341, 0xA341}, + {0xA342, 0xA342, 0xA342}, {0xA343, 0xA343, 0xA343}, + {0xA344, 0xA344, 0xA344}, {0xA345, 0xA345, 0xA345}, + {0xA346, 0xA346, 0xA346}, {0xA347, 0xA347, 0xA347}, + {0xA348, 0xA348, 0xA348}, {0xA349, 0xA349, 0xA349}, + {0xA34A, 0xA34A, 0xA34A}, {0xA34B, 0xA34B, 0xA34B}, + {0xA34C, 0xA34C, 0xA34C}, {0xA34D, 0xA34D, 0xA34D}, + {0xA34E, 0xA34E, 0xA34E}, {0xA34F, 0xA34F, 0xA34F}, + {0xA350, 0xA350, 0xA350}, {0xA351, 0xA351, 0xA351}, + {0xA352, 0xA352, 0xA352}, {0xA353, 0xA353, 0xA353}, + {0xA354, 0xA354, 0xA354}, {0xA355, 0xA355, 0xA355}, + {0xA356, 0xA356, 0xA356}, {0xA357, 0xA357, 0xA357}, + {0xA358, 0xA358, 0xA358}, {0xA359, 0xA359, 0xA359}, + {0xA35A, 0xA35A, 0xA35A}, {0xA35B, 0xA35B, 0xA35B}, + {0xA35C, 0xA35C, 0xA35C}, {0xA35D, 0xA35D, 0xA35D}, + {0xA35E, 0xA35E, 0xA35E}, {0xA35F, 0xA35F, 0xA35F}, + {0xA360, 0xA360, 0xA360}, {0xA361, 0xA361, 0xA361}, + {0xA362, 0xA362, 0xA362}, {0xA363, 0xA363, 0xA363}, + {0xA364, 0xA364, 0xA364}, {0xA365, 0xA365, 0xA365}, + {0xA366, 0xA366, 0xA366}, {0xA367, 0xA367, 0xA367}, + {0xA368, 0xA368, 0xA368}, {0xA369, 0xA369, 0xA369}, + {0xA36A, 0xA36A, 0xA36A}, {0xA36B, 0xA36B, 0xA36B}, + {0xA36C, 0xA36C, 0xA36C}, {0xA36D, 0xA36D, 0xA36D}, + {0xA36E, 0xA36E, 0xA36E}, {0xA36F, 0xA36F, 0xA36F}, + {0xA370, 0xA370, 0xA370}, {0xA371, 0xA371, 0xA371}, + {0xA372, 0xA372, 0xA372}, {0xA373, 0xA373, 0xA373}, + {0xA374, 0xA374, 0xA374}, {0xA375, 0xA375, 0xA375}, + {0xA376, 0xA376, 0xA376}, {0xA377, 0xA377, 0xA377}, + {0xA378, 0xA378, 0xA378}, {0xA379, 0xA379, 0xA379}, + {0xA37A, 0xA37A, 0xA37A}, {0xA37B, 0xA37B, 0xA37B}, + {0xA37C, 0xA37C, 0xA37C}, {0xA37D, 0xA37D, 0xA37D}, + {0xA37E, 0xA37E, 0xA37E}, {0xA37F, 0xA37F, 0xA37F}, + {0xA380, 0xA380, 0xA380}, {0xA381, 0xA381, 0xA381}, + {0xA382, 0xA382, 0xA382}, {0xA383, 0xA383, 0xA383}, + {0xA384, 0xA384, 0xA384}, {0xA385, 0xA385, 0xA385}, + {0xA386, 0xA386, 0xA386}, {0xA387, 0xA387, 0xA387}, + {0xA388, 0xA388, 0xA388}, {0xA389, 0xA389, 0xA389}, + {0xA38A, 0xA38A, 0xA38A}, {0xA38B, 0xA38B, 0xA38B}, + {0xA38C, 0xA38C, 0xA38C}, {0xA38D, 0xA38D, 0xA38D}, + {0xA38E, 0xA38E, 0xA38E}, {0xA38F, 0xA38F, 0xA38F}, + {0xA390, 0xA390, 0xA390}, {0xA391, 0xA391, 0xA391}, + {0xA392, 0xA392, 0xA392}, {0xA393, 0xA393, 0xA393}, + {0xA394, 0xA394, 0xA394}, {0xA395, 0xA395, 0xA395}, + {0xA396, 0xA396, 0xA396}, {0xA397, 0xA397, 0xA397}, + {0xA398, 0xA398, 0xA398}, {0xA399, 0xA399, 0xA399}, + {0xA39A, 0xA39A, 0xA39A}, {0xA39B, 0xA39B, 0xA39B}, + {0xA39C, 0xA39C, 0xA39C}, {0xA39D, 0xA39D, 0xA39D}, + {0xA39E, 0xA39E, 0xA39E}, {0xA39F, 0xA39F, 0xA39F}, + {0xA3A0, 0xA3A0, 0xA3A0}, {0xA3A1, 0xA3A1, 0xA3A1}, + {0xA3A2, 0xA3A2, 0xA3A2}, {0xA3A3, 0xA3A3, 0xA3A3}, + {0xA3A4, 0xA3A4, 0xA3A4}, {0xA3A5, 0xA3A5, 0xA3A5}, + {0xA3A6, 0xA3A6, 0xA3A6}, {0xA3A7, 0xA3A7, 0xA3A7}, + {0xA3A8, 0xA3A8, 0xA3A8}, {0xA3A9, 0xA3A9, 0xA3A9}, + {0xA3AA, 0xA3AA, 0xA3AA}, {0xA3AB, 0xA3AB, 0xA3AB}, + {0xA3AC, 0xA3AC, 0xA3AC}, {0xA3AD, 0xA3AD, 0xA3AD}, + {0xA3AE, 0xA3AE, 0xA3AE}, {0xA3AF, 0xA3AF, 0xA3AF}, + {0xA3B0, 0xA3B0, 0xA3B0}, {0xA3B1, 0xA3B1, 0xA3B1}, + {0xA3B2, 0xA3B2, 0xA3B2}, {0xA3B3, 0xA3B3, 0xA3B3}, + {0xA3B4, 0xA3B4, 0xA3B4}, {0xA3B5, 0xA3B5, 0xA3B5}, + {0xA3B6, 0xA3B6, 0xA3B6}, {0xA3B7, 0xA3B7, 0xA3B7}, + {0xA3B8, 0xA3B8, 0xA3B8}, {0xA3B9, 0xA3B9, 0xA3B9}, + {0xA3BA, 0xA3BA, 0xA3BA}, {0xA3BB, 0xA3BB, 0xA3BB}, + {0xA3BC, 0xA3BC, 0xA3BC}, {0xA3BD, 0xA3BD, 0xA3BD}, + {0xA3BE, 0xA3BE, 0xA3BE}, {0xA3BF, 0xA3BF, 0xA3BF}, + {0xA3C0, 0xA3C0, 0xA3C0}, {0xA3C1, 0xA3C1, 0xA3C1}, + {0xA3C2, 0xA3C2, 0xA3C2}, {0xA3C3, 0xA3C3, 0xA3C3}, + {0xA3C4, 0xA3C4, 0xA3C4}, {0xA3C5, 0xA3C5, 0xA3C5}, + {0xA3C6, 0xA3C6, 0xA3C6}, {0xA3C7, 0xA3C7, 0xA3C7}, + {0xA3C8, 0xA3C8, 0xA3C8}, {0xA3C9, 0xA3C9, 0xA3C9}, + {0xA3CA, 0xA3CA, 0xA3CA}, {0xA3CB, 0xA3CB, 0xA3CB}, + {0xA3CC, 0xA3CC, 0xA3CC}, {0xA3CD, 0xA3CD, 0xA3CD}, + {0xA3CE, 0xA3CE, 0xA3CE}, {0xA3CF, 0xA3CF, 0xA3CF}, + {0xA3D0, 0xA3D0, 0xA3D0}, {0xA3D1, 0xA3D1, 0xA3D1}, + {0xA3D2, 0xA3D2, 0xA3D2}, {0xA3D3, 0xA3D3, 0xA3D3}, + {0xA3D4, 0xA3D4, 0xA3D4}, {0xA3D5, 0xA3D5, 0xA3D5}, + {0xA3D6, 0xA3D6, 0xA3D6}, {0xA3D7, 0xA3D7, 0xA3D7}, + {0xA3D8, 0xA3D8, 0xA3D8}, {0xA3D9, 0xA3D9, 0xA3D9}, + {0xA3DA, 0xA3DA, 0xA3DA}, {0xA3DB, 0xA3DB, 0xA3DB}, + {0xA3DC, 0xA3DC, 0xA3DC}, {0xA3DD, 0xA3DD, 0xA3DD}, + {0xA3DE, 0xA3DE, 0xA3DE}, {0xA3DF, 0xA3DF, 0xA3DF}, + {0xA3E0, 0xA3E0, 0xA3E0}, {0xA3E1, 0xA3E1, 0xA3E1}, + {0xA3E2, 0xA3E2, 0xA3E2}, {0xA3E3, 0xA3E3, 0xA3E3}, + {0xA3E4, 0xA3E4, 0xA3E4}, {0xA3E5, 0xA3E5, 0xA3E5}, + {0xA3E6, 0xA3E6, 0xA3E6}, {0xA3E7, 0xA3E7, 0xA3E7}, + {0xA3E8, 0xA3E8, 0xA3E8}, {0xA3E9, 0xA3E9, 0xA3E9}, + {0xA3EA, 0xA3EA, 0xA3EA}, {0xA3EB, 0xA3EB, 0xA3EB}, + {0xA3EC, 0xA3EC, 0xA3EC}, {0xA3ED, 0xA3ED, 0xA3ED}, + {0xA3EE, 0xA3EE, 0xA3EE}, {0xA3EF, 0xA3EF, 0xA3EF}, + {0xA3F0, 0xA3F0, 0xA3F0}, {0xA3F1, 0xA3F1, 0xA3F1}, + {0xA3F2, 0xA3F2, 0xA3F2}, {0xA3F3, 0xA3F3, 0xA3F3}, + {0xA3F4, 0xA3F4, 0xA3F4}, {0xA3F5, 0xA3F5, 0xA3F5}, + {0xA3F6, 0xA3F6, 0xA3F6}, {0xA3F7, 0xA3F7, 0xA3F7}, + {0xA3F8, 0xA3F8, 0xA3F8}, {0xA3F9, 0xA3F9, 0xA3F9}, + {0xA3FA, 0xA3FA, 0xA3FA}, {0xA3FB, 0xA3FB, 0xA3FB}, + {0xA3FC, 0xA3FC, 0xA3FC}, {0xA3FD, 0xA3FD, 0xA3FD}, + {0xA3FE, 0xA3FE, 0xA3FE}, {0xA3FF, 0xA3FF, 0xA3FF}, + {0xA400, 0xA400, 0xA400}, {0xA401, 0xA401, 0xA401}, + {0xA402, 0xA402, 0xA402}, {0xA403, 0xA403, 0xA403}, + {0xA404, 0xA404, 0xA404}, {0xA405, 0xA405, 0xA405}, + {0xA406, 0xA406, 0xA406}, {0xA407, 0xA407, 0xA407}, + {0xA408, 0xA408, 0xA408}, {0xA409, 0xA409, 0xA409}, + {0xA40A, 0xA40A, 0xA40A}, {0xA40B, 0xA40B, 0xA40B}, + {0xA40C, 0xA40C, 0xA40C}, {0xA40D, 0xA40D, 0xA40D}, + {0xA40E, 0xA40E, 0xA40E}, {0xA40F, 0xA40F, 0xA40F}, + {0xA410, 0xA410, 0xA410}, {0xA411, 0xA411, 0xA411}, + {0xA412, 0xA412, 0xA412}, {0xA413, 0xA413, 0xA413}, + {0xA414, 0xA414, 0xA414}, {0xA415, 0xA415, 0xA415}, + {0xA416, 0xA416, 0xA416}, {0xA417, 0xA417, 0xA417}, + {0xA418, 0xA418, 0xA418}, {0xA419, 0xA419, 0xA419}, + {0xA41A, 0xA41A, 0xA41A}, {0xA41B, 0xA41B, 0xA41B}, + {0xA41C, 0xA41C, 0xA41C}, {0xA41D, 0xA41D, 0xA41D}, + {0xA41E, 0xA41E, 0xA41E}, {0xA41F, 0xA41F, 0xA41F}, + {0xA420, 0xA420, 0xA420}, {0xA421, 0xA421, 0xA421}, + {0xA422, 0xA422, 0xA422}, {0xA423, 0xA423, 0xA423}, + {0xA424, 0xA424, 0xA424}, {0xA425, 0xA425, 0xA425}, + {0xA426, 0xA426, 0xA426}, {0xA427, 0xA427, 0xA427}, + {0xA428, 0xA428, 0xA428}, {0xA429, 0xA429, 0xA429}, + {0xA42A, 0xA42A, 0xA42A}, {0xA42B, 0xA42B, 0xA42B}, + {0xA42C, 0xA42C, 0xA42C}, {0xA42D, 0xA42D, 0xA42D}, + {0xA42E, 0xA42E, 0xA42E}, {0xA42F, 0xA42F, 0xA42F}, + {0xA430, 0xA430, 0xA430}, {0xA431, 0xA431, 0xA431}, + {0xA432, 0xA432, 0xA432}, {0xA433, 0xA433, 0xA433}, + {0xA434, 0xA434, 0xA434}, {0xA435, 0xA435, 0xA435}, + {0xA436, 0xA436, 0xA436}, {0xA437, 0xA437, 0xA437}, + {0xA438, 0xA438, 0xA438}, {0xA439, 0xA439, 0xA439}, + {0xA43A, 0xA43A, 0xA43A}, {0xA43B, 0xA43B, 0xA43B}, + {0xA43C, 0xA43C, 0xA43C}, {0xA43D, 0xA43D, 0xA43D}, + {0xA43E, 0xA43E, 0xA43E}, {0xA43F, 0xA43F, 0xA43F}, + {0xA440, 0xA440, 0xA440}, {0xA441, 0xA441, 0xA441}, + {0xA442, 0xA442, 0xA442}, {0xA443, 0xA443, 0xA443}, + {0xA444, 0xA444, 0xA444}, {0xA445, 0xA445, 0xA445}, + {0xA446, 0xA446, 0xA446}, {0xA447, 0xA447, 0xA447}, + {0xA448, 0xA448, 0xA448}, {0xA449, 0xA449, 0xA449}, + {0xA44A, 0xA44A, 0xA44A}, {0xA44B, 0xA44B, 0xA44B}, + {0xA44C, 0xA44C, 0xA44C}, {0xA44D, 0xA44D, 0xA44D}, + {0xA44E, 0xA44E, 0xA44E}, {0xA44F, 0xA44F, 0xA44F}, + {0xA450, 0xA450, 0xA450}, {0xA451, 0xA451, 0xA451}, + {0xA452, 0xA452, 0xA452}, {0xA453, 0xA453, 0xA453}, + {0xA454, 0xA454, 0xA454}, {0xA455, 0xA455, 0xA455}, + {0xA456, 0xA456, 0xA456}, {0xA457, 0xA457, 0xA457}, + {0xA458, 0xA458, 0xA458}, {0xA459, 0xA459, 0xA459}, + {0xA45A, 0xA45A, 0xA45A}, {0xA45B, 0xA45B, 0xA45B}, + {0xA45C, 0xA45C, 0xA45C}, {0xA45D, 0xA45D, 0xA45D}, + {0xA45E, 0xA45E, 0xA45E}, {0xA45F, 0xA45F, 0xA45F}, + {0xA460, 0xA460, 0xA460}, {0xA461, 0xA461, 0xA461}, + {0xA462, 0xA462, 0xA462}, {0xA463, 0xA463, 0xA463}, + {0xA464, 0xA464, 0xA464}, {0xA465, 0xA465, 0xA465}, + {0xA466, 0xA466, 0xA466}, {0xA467, 0xA467, 0xA467}, + {0xA468, 0xA468, 0xA468}, {0xA469, 0xA469, 0xA469}, + {0xA46A, 0xA46A, 0xA46A}, {0xA46B, 0xA46B, 0xA46B}, + {0xA46C, 0xA46C, 0xA46C}, {0xA46D, 0xA46D, 0xA46D}, + {0xA46E, 0xA46E, 0xA46E}, {0xA46F, 0xA46F, 0xA46F}, + {0xA470, 0xA470, 0xA470}, {0xA471, 0xA471, 0xA471}, + {0xA472, 0xA472, 0xA472}, {0xA473, 0xA473, 0xA473}, + {0xA474, 0xA474, 0xA474}, {0xA475, 0xA475, 0xA475}, + {0xA476, 0xA476, 0xA476}, {0xA477, 0xA477, 0xA477}, + {0xA478, 0xA478, 0xA478}, {0xA479, 0xA479, 0xA479}, + {0xA47A, 0xA47A, 0xA47A}, {0xA47B, 0xA47B, 0xA47B}, + {0xA47C, 0xA47C, 0xA47C}, {0xA47D, 0xA47D, 0xA47D}, + {0xA47E, 0xA47E, 0xA47E}, {0xA47F, 0xA47F, 0xA47F}, + {0xA480, 0xA480, 0xA480}, {0xA481, 0xA481, 0xA481}, + {0xA482, 0xA482, 0xA482}, {0xA483, 0xA483, 0xA483}, + {0xA484, 0xA484, 0xA484}, {0xA485, 0xA485, 0xA485}, + {0xA486, 0xA486, 0xA486}, {0xA487, 0xA487, 0xA487}, + {0xA488, 0xA488, 0xA488}, {0xA489, 0xA489, 0xA489}, + {0xA48A, 0xA48A, 0xA48A}, {0xA48B, 0xA48B, 0xA48B}, + {0xA48C, 0xA48C, 0xA48C}, {0xA800, 0xA800, 0xA800}, + {0xA801, 0xA801, 0xA801}, {0xA803, 0xA803, 0xA803}, + {0xA804, 0xA804, 0xA804}, {0xA805, 0xA805, 0xA805}, + {0xA806, 0xA806, 0xA806}, {0xA807, 0xA807, 0xA807}, + {0xA808, 0xA808, 0xA808}, {0xA809, 0xA809, 0xA809}, + {0xA80A, 0xA80A, 0xA80A}, {0xA80B, 0xA80B, 0xA80B}, + {0xA80C, 0xA80C, 0xA80C}, {0xA80D, 0xA80D, 0xA80D}, + {0xA80E, 0xA80E, 0xA80E}, {0xA80F, 0xA80F, 0xA80F}, + {0xA810, 0xA810, 0xA810}, {0xA811, 0xA811, 0xA811}, + {0xA812, 0xA812, 0xA812}, {0xA813, 0xA813, 0xA813}, + {0xA814, 0xA814, 0xA814}, {0xA815, 0xA815, 0xA815}, + {0xA816, 0xA816, 0xA816}, {0xA817, 0xA817, 0xA817}, + {0xA818, 0xA818, 0xA818}, {0xA819, 0xA819, 0xA819}, + {0xA81A, 0xA81A, 0xA81A}, {0xA81B, 0xA81B, 0xA81B}, + {0xA81C, 0xA81C, 0xA81C}, {0xA81D, 0xA81D, 0xA81D}, + {0xA81E, 0xA81E, 0xA81E}, {0xA81F, 0xA81F, 0xA81F}, + {0xA820, 0xA820, 0xA820}, {0xA821, 0xA821, 0xA821}, + {0xA822, 0xA822, 0xA822}, {0xA825, 0xA825, 0xA825}, + {0xA826, 0xA826, 0xA826}, {0xAC00, 0xAC00, 0xAC00}, + {0xAC01, 0xAC01, 0xAC01}, {0xAC02, 0xAC02, 0xAC02}, + {0xAC03, 0xAC03, 0xAC03}, {0xAC04, 0xAC04, 0xAC04}, + {0xAC05, 0xAC05, 0xAC05}, {0xAC06, 0xAC06, 0xAC06}, + {0xAC07, 0xAC07, 0xAC07}, {0xAC08, 0xAC08, 0xAC08}, + {0xAC09, 0xAC09, 0xAC09}, {0xAC0A, 0xAC0A, 0xAC0A}, + {0xAC0B, 0xAC0B, 0xAC0B}, {0xAC0C, 0xAC0C, 0xAC0C}, + {0xAC0D, 0xAC0D, 0xAC0D}, {0xAC0E, 0xAC0E, 0xAC0E}, + {0xAC0F, 0xAC0F, 0xAC0F}, {0xAC10, 0xAC10, 0xAC10}, + {0xAC11, 0xAC11, 0xAC11}, {0xAC12, 0xAC12, 0xAC12}, + {0xAC13, 0xAC13, 0xAC13}, {0xAC14, 0xAC14, 0xAC14}, + {0xAC15, 0xAC15, 0xAC15}, {0xAC16, 0xAC16, 0xAC16}, + {0xAC17, 0xAC17, 0xAC17}, {0xAC18, 0xAC18, 0xAC18}, + {0xAC19, 0xAC19, 0xAC19}, {0xAC1A, 0xAC1A, 0xAC1A}, + {0xAC1B, 0xAC1B, 0xAC1B}, {0xAC1C, 0xAC1C, 0xAC1C}, + {0xAC1D, 0xAC1D, 0xAC1D}, {0xAC1E, 0xAC1E, 0xAC1E}, + {0xAC1F, 0xAC1F, 0xAC1F}, {0xAC20, 0xAC20, 0xAC20}, + {0xAC21, 0xAC21, 0xAC21}, {0xAC22, 0xAC22, 0xAC22}, + {0xAC23, 0xAC23, 0xAC23}, {0xAC24, 0xAC24, 0xAC24}, + {0xAC25, 0xAC25, 0xAC25}, {0xAC26, 0xAC26, 0xAC26}, + {0xAC27, 0xAC27, 0xAC27}, {0xAC28, 0xAC28, 0xAC28}, + {0xAC29, 0xAC29, 0xAC29}, {0xAC2A, 0xAC2A, 0xAC2A}, + {0xAC2B, 0xAC2B, 0xAC2B}, {0xAC2C, 0xAC2C, 0xAC2C}, + {0xAC2D, 0xAC2D, 0xAC2D}, {0xAC2E, 0xAC2E, 0xAC2E}, + {0xAC2F, 0xAC2F, 0xAC2F}, {0xAC30, 0xAC30, 0xAC30}, + {0xAC31, 0xAC31, 0xAC31}, {0xAC32, 0xAC32, 0xAC32}, + {0xAC33, 0xAC33, 0xAC33}, {0xAC34, 0xAC34, 0xAC34}, + {0xAC35, 0xAC35, 0xAC35}, {0xAC36, 0xAC36, 0xAC36}, + {0xAC37, 0xAC37, 0xAC37}, {0xAC38, 0xAC38, 0xAC38}, + {0xAC39, 0xAC39, 0xAC39}, {0xAC3A, 0xAC3A, 0xAC3A}, + {0xAC3B, 0xAC3B, 0xAC3B}, {0xAC3C, 0xAC3C, 0xAC3C}, + {0xAC3D, 0xAC3D, 0xAC3D}, {0xAC3E, 0xAC3E, 0xAC3E}, + {0xAC3F, 0xAC3F, 0xAC3F}, {0xAC40, 0xAC40, 0xAC40}, + {0xAC41, 0xAC41, 0xAC41}, {0xAC42, 0xAC42, 0xAC42}, + {0xAC43, 0xAC43, 0xAC43}, {0xAC44, 0xAC44, 0xAC44}, + {0xAC45, 0xAC45, 0xAC45}, {0xAC46, 0xAC46, 0xAC46}, + {0xAC47, 0xAC47, 0xAC47}, {0xAC48, 0xAC48, 0xAC48}, + {0xAC49, 0xAC49, 0xAC49}, {0xAC4A, 0xAC4A, 0xAC4A}, + {0xAC4B, 0xAC4B, 0xAC4B}, {0xAC4C, 0xAC4C, 0xAC4C}, + {0xAC4D, 0xAC4D, 0xAC4D}, {0xAC4E, 0xAC4E, 0xAC4E}, + {0xAC4F, 0xAC4F, 0xAC4F}, {0xAC50, 0xAC50, 0xAC50}, + {0xAC51, 0xAC51, 0xAC51}, {0xAC52, 0xAC52, 0xAC52}, + {0xAC53, 0xAC53, 0xAC53}, {0xAC54, 0xAC54, 0xAC54}, + {0xAC55, 0xAC55, 0xAC55}, {0xAC56, 0xAC56, 0xAC56}, + {0xAC57, 0xAC57, 0xAC57}, {0xAC58, 0xAC58, 0xAC58}, + {0xAC59, 0xAC59, 0xAC59}, {0xAC5A, 0xAC5A, 0xAC5A}, + {0xAC5B, 0xAC5B, 0xAC5B}, {0xAC5C, 0xAC5C, 0xAC5C}, + {0xAC5D, 0xAC5D, 0xAC5D}, {0xAC5E, 0xAC5E, 0xAC5E}, + {0xAC5F, 0xAC5F, 0xAC5F}, {0xAC60, 0xAC60, 0xAC60}, + {0xAC61, 0xAC61, 0xAC61}, {0xAC62, 0xAC62, 0xAC62}, + {0xAC63, 0xAC63, 0xAC63}, {0xAC64, 0xAC64, 0xAC64}, + {0xAC65, 0xAC65, 0xAC65}, {0xAC66, 0xAC66, 0xAC66}, + {0xAC67, 0xAC67, 0xAC67}, {0xAC68, 0xAC68, 0xAC68}, + {0xAC69, 0xAC69, 0xAC69}, {0xAC6A, 0xAC6A, 0xAC6A}, + {0xAC6B, 0xAC6B, 0xAC6B}, {0xAC6C, 0xAC6C, 0xAC6C}, + {0xAC6D, 0xAC6D, 0xAC6D}, {0xAC6E, 0xAC6E, 0xAC6E}, + {0xAC6F, 0xAC6F, 0xAC6F}, {0xAC70, 0xAC70, 0xAC70}, + {0xAC71, 0xAC71, 0xAC71}, {0xAC72, 0xAC72, 0xAC72}, + {0xAC73, 0xAC73, 0xAC73}, {0xAC74, 0xAC74, 0xAC74}, + {0xAC75, 0xAC75, 0xAC75}, {0xAC76, 0xAC76, 0xAC76}, + {0xAC77, 0xAC77, 0xAC77}, {0xAC78, 0xAC78, 0xAC78}, + {0xAC79, 0xAC79, 0xAC79}, {0xAC7A, 0xAC7A, 0xAC7A}, + {0xAC7B, 0xAC7B, 0xAC7B}, {0xAC7C, 0xAC7C, 0xAC7C}, + {0xAC7D, 0xAC7D, 0xAC7D}, {0xAC7E, 0xAC7E, 0xAC7E}, + {0xAC7F, 0xAC7F, 0xAC7F}, {0xAC80, 0xAC80, 0xAC80}, + {0xAC81, 0xAC81, 0xAC81}, {0xAC82, 0xAC82, 0xAC82}, + {0xAC83, 0xAC83, 0xAC83}, {0xAC84, 0xAC84, 0xAC84}, + {0xAC85, 0xAC85, 0xAC85}, {0xAC86, 0xAC86, 0xAC86}, + {0xAC87, 0xAC87, 0xAC87}, {0xAC88, 0xAC88, 0xAC88}, + {0xAC89, 0xAC89, 0xAC89}, {0xAC8A, 0xAC8A, 0xAC8A}, + {0xAC8B, 0xAC8B, 0xAC8B}, {0xAC8C, 0xAC8C, 0xAC8C}, + {0xAC8D, 0xAC8D, 0xAC8D}, {0xAC8E, 0xAC8E, 0xAC8E}, + {0xAC8F, 0xAC8F, 0xAC8F}, {0xAC90, 0xAC90, 0xAC90}, + {0xAC91, 0xAC91, 0xAC91}, {0xAC92, 0xAC92, 0xAC92}, + {0xAC93, 0xAC93, 0xAC93}, {0xAC94, 0xAC94, 0xAC94}, + {0xAC95, 0xAC95, 0xAC95}, {0xAC96, 0xAC96, 0xAC96}, + {0xAC97, 0xAC97, 0xAC97}, {0xAC98, 0xAC98, 0xAC98}, + {0xAC99, 0xAC99, 0xAC99}, {0xAC9A, 0xAC9A, 0xAC9A}, + {0xAC9B, 0xAC9B, 0xAC9B}, {0xAC9C, 0xAC9C, 0xAC9C}, + {0xAC9D, 0xAC9D, 0xAC9D}, {0xAC9E, 0xAC9E, 0xAC9E}, + {0xAC9F, 0xAC9F, 0xAC9F}, {0xACA0, 0xACA0, 0xACA0}, + {0xACA1, 0xACA1, 0xACA1}, {0xACA2, 0xACA2, 0xACA2}, + {0xACA3, 0xACA3, 0xACA3}, {0xACA4, 0xACA4, 0xACA4}, + {0xACA5, 0xACA5, 0xACA5}, {0xACA6, 0xACA6, 0xACA6}, + {0xACA7, 0xACA7, 0xACA7}, {0xACA8, 0xACA8, 0xACA8}, + {0xACA9, 0xACA9, 0xACA9}, {0xACAA, 0xACAA, 0xACAA}, + {0xACAB, 0xACAB, 0xACAB}, {0xACAC, 0xACAC, 0xACAC}, + {0xACAD, 0xACAD, 0xACAD}, {0xACAE, 0xACAE, 0xACAE}, + {0xACAF, 0xACAF, 0xACAF}, {0xACB0, 0xACB0, 0xACB0}, + {0xACB1, 0xACB1, 0xACB1}, {0xACB2, 0xACB2, 0xACB2}, + {0xACB3, 0xACB3, 0xACB3}, {0xACB4, 0xACB4, 0xACB4}, + {0xACB5, 0xACB5, 0xACB5}, {0xACB6, 0xACB6, 0xACB6}, + {0xACB7, 0xACB7, 0xACB7}, {0xACB8, 0xACB8, 0xACB8}, + {0xACB9, 0xACB9, 0xACB9}, {0xACBA, 0xACBA, 0xACBA}, + {0xACBB, 0xACBB, 0xACBB}, {0xACBC, 0xACBC, 0xACBC}, + {0xACBD, 0xACBD, 0xACBD}, {0xACBE, 0xACBE, 0xACBE}, + {0xACBF, 0xACBF, 0xACBF}, {0xACC0, 0xACC0, 0xACC0}, + {0xACC1, 0xACC1, 0xACC1}, {0xACC2, 0xACC2, 0xACC2}, + {0xACC3, 0xACC3, 0xACC3}, {0xACC4, 0xACC4, 0xACC4}, + {0xACC5, 0xACC5, 0xACC5}, {0xACC6, 0xACC6, 0xACC6}, + {0xACC7, 0xACC7, 0xACC7}, {0xACC8, 0xACC8, 0xACC8}, + {0xACC9, 0xACC9, 0xACC9}, {0xACCA, 0xACCA, 0xACCA}, + {0xACCB, 0xACCB, 0xACCB}, {0xACCC, 0xACCC, 0xACCC}, + {0xACCD, 0xACCD, 0xACCD}, {0xACCE, 0xACCE, 0xACCE}, + {0xACCF, 0xACCF, 0xACCF}, {0xACD0, 0xACD0, 0xACD0}, + {0xACD1, 0xACD1, 0xACD1}, {0xACD2, 0xACD2, 0xACD2}, + {0xACD3, 0xACD3, 0xACD3}, {0xACD4, 0xACD4, 0xACD4}, + {0xACD5, 0xACD5, 0xACD5}, {0xACD6, 0xACD6, 0xACD6}, + {0xACD7, 0xACD7, 0xACD7}, {0xACD8, 0xACD8, 0xACD8}, + {0xACD9, 0xACD9, 0xACD9}, {0xACDA, 0xACDA, 0xACDA}, + {0xACDB, 0xACDB, 0xACDB}, {0xACDC, 0xACDC, 0xACDC}, + {0xACDD, 0xACDD, 0xACDD}, {0xACDE, 0xACDE, 0xACDE}, + {0xACDF, 0xACDF, 0xACDF}, {0xACE0, 0xACE0, 0xACE0}, + {0xACE1, 0xACE1, 0xACE1}, {0xACE2, 0xACE2, 0xACE2}, + {0xACE3, 0xACE3, 0xACE3}, {0xACE4, 0xACE4, 0xACE4}, + {0xACE5, 0xACE5, 0xACE5}, {0xACE6, 0xACE6, 0xACE6}, + {0xACE7, 0xACE7, 0xACE7}, {0xACE8, 0xACE8, 0xACE8}, + {0xACE9, 0xACE9, 0xACE9}, {0xACEA, 0xACEA, 0xACEA}, + {0xACEB, 0xACEB, 0xACEB}, {0xACEC, 0xACEC, 0xACEC}, + {0xACED, 0xACED, 0xACED}, {0xACEE, 0xACEE, 0xACEE}, + {0xACEF, 0xACEF, 0xACEF}, {0xACF0, 0xACF0, 0xACF0}, + {0xACF1, 0xACF1, 0xACF1}, {0xACF2, 0xACF2, 0xACF2}, + {0xACF3, 0xACF3, 0xACF3}, {0xACF4, 0xACF4, 0xACF4}, + {0xACF5, 0xACF5, 0xACF5}, {0xACF6, 0xACF6, 0xACF6}, + {0xACF7, 0xACF7, 0xACF7}, {0xACF8, 0xACF8, 0xACF8}, + {0xACF9, 0xACF9, 0xACF9}, {0xACFA, 0xACFA, 0xACFA}, + {0xACFB, 0xACFB, 0xACFB}, {0xACFC, 0xACFC, 0xACFC}, + {0xACFD, 0xACFD, 0xACFD}, {0xACFE, 0xACFE, 0xACFE}, + {0xACFF, 0xACFF, 0xACFF}, {0xAD00, 0xAD00, 0xAD00}, + {0xAD01, 0xAD01, 0xAD01}, {0xAD02, 0xAD02, 0xAD02}, + {0xAD03, 0xAD03, 0xAD03}, {0xAD04, 0xAD04, 0xAD04}, + {0xAD05, 0xAD05, 0xAD05}, {0xAD06, 0xAD06, 0xAD06}, + {0xAD07, 0xAD07, 0xAD07}, {0xAD08, 0xAD08, 0xAD08}, + {0xAD09, 0xAD09, 0xAD09}, {0xAD0A, 0xAD0A, 0xAD0A}, + {0xAD0B, 0xAD0B, 0xAD0B}, {0xAD0C, 0xAD0C, 0xAD0C}, + {0xAD0D, 0xAD0D, 0xAD0D}, {0xAD0E, 0xAD0E, 0xAD0E}, + {0xAD0F, 0xAD0F, 0xAD0F}, {0xAD10, 0xAD10, 0xAD10}, + {0xAD11, 0xAD11, 0xAD11}, {0xAD12, 0xAD12, 0xAD12}, + {0xAD13, 0xAD13, 0xAD13}, {0xAD14, 0xAD14, 0xAD14}, + {0xAD15, 0xAD15, 0xAD15}, {0xAD16, 0xAD16, 0xAD16}, + {0xAD17, 0xAD17, 0xAD17}, {0xAD18, 0xAD18, 0xAD18}, + {0xAD19, 0xAD19, 0xAD19}, {0xAD1A, 0xAD1A, 0xAD1A}, + {0xAD1B, 0xAD1B, 0xAD1B}, {0xAD1C, 0xAD1C, 0xAD1C}, + {0xAD1D, 0xAD1D, 0xAD1D}, {0xAD1E, 0xAD1E, 0xAD1E}, + {0xAD1F, 0xAD1F, 0xAD1F}, {0xAD20, 0xAD20, 0xAD20}, + {0xAD21, 0xAD21, 0xAD21}, {0xAD22, 0xAD22, 0xAD22}, + {0xAD23, 0xAD23, 0xAD23}, {0xAD24, 0xAD24, 0xAD24}, + {0xAD25, 0xAD25, 0xAD25}, {0xAD26, 0xAD26, 0xAD26}, + {0xAD27, 0xAD27, 0xAD27}, {0xAD28, 0xAD28, 0xAD28}, + {0xAD29, 0xAD29, 0xAD29}, {0xAD2A, 0xAD2A, 0xAD2A}, + {0xAD2B, 0xAD2B, 0xAD2B}, {0xAD2C, 0xAD2C, 0xAD2C}, + {0xAD2D, 0xAD2D, 0xAD2D}, {0xAD2E, 0xAD2E, 0xAD2E}, + {0xAD2F, 0xAD2F, 0xAD2F}, {0xAD30, 0xAD30, 0xAD30}, + {0xAD31, 0xAD31, 0xAD31}, {0xAD32, 0xAD32, 0xAD32}, + {0xAD33, 0xAD33, 0xAD33}, {0xAD34, 0xAD34, 0xAD34}, + {0xAD35, 0xAD35, 0xAD35}, {0xAD36, 0xAD36, 0xAD36}, + {0xAD37, 0xAD37, 0xAD37}, {0xAD38, 0xAD38, 0xAD38}, + {0xAD39, 0xAD39, 0xAD39}, {0xAD3A, 0xAD3A, 0xAD3A}, + {0xAD3B, 0xAD3B, 0xAD3B}, {0xAD3C, 0xAD3C, 0xAD3C}, + {0xAD3D, 0xAD3D, 0xAD3D}, {0xAD3E, 0xAD3E, 0xAD3E}, + {0xAD3F, 0xAD3F, 0xAD3F}, {0xAD40, 0xAD40, 0xAD40}, + {0xAD41, 0xAD41, 0xAD41}, {0xAD42, 0xAD42, 0xAD42}, + {0xAD43, 0xAD43, 0xAD43}, {0xAD44, 0xAD44, 0xAD44}, + {0xAD45, 0xAD45, 0xAD45}, {0xAD46, 0xAD46, 0xAD46}, + {0xAD47, 0xAD47, 0xAD47}, {0xAD48, 0xAD48, 0xAD48}, + {0xAD49, 0xAD49, 0xAD49}, {0xAD4A, 0xAD4A, 0xAD4A}, + {0xAD4B, 0xAD4B, 0xAD4B}, {0xAD4C, 0xAD4C, 0xAD4C}, + {0xAD4D, 0xAD4D, 0xAD4D}, {0xAD4E, 0xAD4E, 0xAD4E}, + {0xAD4F, 0xAD4F, 0xAD4F}, {0xAD50, 0xAD50, 0xAD50}, + {0xAD51, 0xAD51, 0xAD51}, {0xAD52, 0xAD52, 0xAD52}, + {0xAD53, 0xAD53, 0xAD53}, {0xAD54, 0xAD54, 0xAD54}, + {0xAD55, 0xAD55, 0xAD55}, {0xAD56, 0xAD56, 0xAD56}, + {0xAD57, 0xAD57, 0xAD57}, {0xAD58, 0xAD58, 0xAD58}, + {0xAD59, 0xAD59, 0xAD59}, {0xAD5A, 0xAD5A, 0xAD5A}, + {0xAD5B, 0xAD5B, 0xAD5B}, {0xAD5C, 0xAD5C, 0xAD5C}, + {0xAD5D, 0xAD5D, 0xAD5D}, {0xAD5E, 0xAD5E, 0xAD5E}, + {0xAD5F, 0xAD5F, 0xAD5F}, {0xAD60, 0xAD60, 0xAD60}, + {0xAD61, 0xAD61, 0xAD61}, {0xAD62, 0xAD62, 0xAD62}, + {0xAD63, 0xAD63, 0xAD63}, {0xAD64, 0xAD64, 0xAD64}, + {0xAD65, 0xAD65, 0xAD65}, {0xAD66, 0xAD66, 0xAD66}, + {0xAD67, 0xAD67, 0xAD67}, {0xAD68, 0xAD68, 0xAD68}, + {0xAD69, 0xAD69, 0xAD69}, {0xAD6A, 0xAD6A, 0xAD6A}, + {0xAD6B, 0xAD6B, 0xAD6B}, {0xAD6C, 0xAD6C, 0xAD6C}, + {0xAD6D, 0xAD6D, 0xAD6D}, {0xAD6E, 0xAD6E, 0xAD6E}, + {0xAD6F, 0xAD6F, 0xAD6F}, {0xAD70, 0xAD70, 0xAD70}, + {0xAD71, 0xAD71, 0xAD71}, {0xAD72, 0xAD72, 0xAD72}, + {0xAD73, 0xAD73, 0xAD73}, {0xAD74, 0xAD74, 0xAD74}, + {0xAD75, 0xAD75, 0xAD75}, {0xAD76, 0xAD76, 0xAD76}, + {0xAD77, 0xAD77, 0xAD77}, {0xAD78, 0xAD78, 0xAD78}, + {0xAD79, 0xAD79, 0xAD79}, {0xAD7A, 0xAD7A, 0xAD7A}, + {0xAD7B, 0xAD7B, 0xAD7B}, {0xAD7C, 0xAD7C, 0xAD7C}, + {0xAD7D, 0xAD7D, 0xAD7D}, {0xAD7E, 0xAD7E, 0xAD7E}, + {0xAD7F, 0xAD7F, 0xAD7F}, {0xAD80, 0xAD80, 0xAD80}, + {0xAD81, 0xAD81, 0xAD81}, {0xAD82, 0xAD82, 0xAD82}, + {0xAD83, 0xAD83, 0xAD83}, {0xAD84, 0xAD84, 0xAD84}, + {0xAD85, 0xAD85, 0xAD85}, {0xAD86, 0xAD86, 0xAD86}, + {0xAD87, 0xAD87, 0xAD87}, {0xAD88, 0xAD88, 0xAD88}, + {0xAD89, 0xAD89, 0xAD89}, {0xAD8A, 0xAD8A, 0xAD8A}, + {0xAD8B, 0xAD8B, 0xAD8B}, {0xAD8C, 0xAD8C, 0xAD8C}, + {0xAD8D, 0xAD8D, 0xAD8D}, {0xAD8E, 0xAD8E, 0xAD8E}, + {0xAD8F, 0xAD8F, 0xAD8F}, {0xAD90, 0xAD90, 0xAD90}, + {0xAD91, 0xAD91, 0xAD91}, {0xAD92, 0xAD92, 0xAD92}, + {0xAD93, 0xAD93, 0xAD93}, {0xAD94, 0xAD94, 0xAD94}, + {0xAD95, 0xAD95, 0xAD95}, {0xAD96, 0xAD96, 0xAD96}, + {0xAD97, 0xAD97, 0xAD97}, {0xAD98, 0xAD98, 0xAD98}, + {0xAD99, 0xAD99, 0xAD99}, {0xAD9A, 0xAD9A, 0xAD9A}, + {0xAD9B, 0xAD9B, 0xAD9B}, {0xAD9C, 0xAD9C, 0xAD9C}, + {0xAD9D, 0xAD9D, 0xAD9D}, {0xAD9E, 0xAD9E, 0xAD9E}, + {0xAD9F, 0xAD9F, 0xAD9F}, {0xADA0, 0xADA0, 0xADA0}, + {0xADA1, 0xADA1, 0xADA1}, {0xADA2, 0xADA2, 0xADA2}, + {0xADA3, 0xADA3, 0xADA3}, {0xADA4, 0xADA4, 0xADA4}, + {0xADA5, 0xADA5, 0xADA5}, {0xADA6, 0xADA6, 0xADA6}, + {0xADA7, 0xADA7, 0xADA7}, {0xADA8, 0xADA8, 0xADA8}, + {0xADA9, 0xADA9, 0xADA9}, {0xADAA, 0xADAA, 0xADAA}, + {0xADAB, 0xADAB, 0xADAB}, {0xADAC, 0xADAC, 0xADAC}, + {0xADAD, 0xADAD, 0xADAD}, {0xADAE, 0xADAE, 0xADAE}, + {0xADAF, 0xADAF, 0xADAF}, {0xADB0, 0xADB0, 0xADB0}, + {0xADB1, 0xADB1, 0xADB1}, {0xADB2, 0xADB2, 0xADB2}, + {0xADB3, 0xADB3, 0xADB3}, {0xADB4, 0xADB4, 0xADB4}, + {0xADB5, 0xADB5, 0xADB5}, {0xADB6, 0xADB6, 0xADB6}, + {0xADB7, 0xADB7, 0xADB7}, {0xADB8, 0xADB8, 0xADB8}, + {0xADB9, 0xADB9, 0xADB9}, {0xADBA, 0xADBA, 0xADBA}, + {0xADBB, 0xADBB, 0xADBB}, {0xADBC, 0xADBC, 0xADBC}, + {0xADBD, 0xADBD, 0xADBD}, {0xADBE, 0xADBE, 0xADBE}, + {0xADBF, 0xADBF, 0xADBF}, {0xADC0, 0xADC0, 0xADC0}, + {0xADC1, 0xADC1, 0xADC1}, {0xADC2, 0xADC2, 0xADC2}, + {0xADC3, 0xADC3, 0xADC3}, {0xADC4, 0xADC4, 0xADC4}, + {0xADC5, 0xADC5, 0xADC5}, {0xADC6, 0xADC6, 0xADC6}, + {0xADC7, 0xADC7, 0xADC7}, {0xADC8, 0xADC8, 0xADC8}, + {0xADC9, 0xADC9, 0xADC9}, {0xADCA, 0xADCA, 0xADCA}, + {0xADCB, 0xADCB, 0xADCB}, {0xADCC, 0xADCC, 0xADCC}, + {0xADCD, 0xADCD, 0xADCD}, {0xADCE, 0xADCE, 0xADCE}, + {0xADCF, 0xADCF, 0xADCF}, {0xADD0, 0xADD0, 0xADD0}, + {0xADD1, 0xADD1, 0xADD1}, {0xADD2, 0xADD2, 0xADD2}, + {0xADD3, 0xADD3, 0xADD3}, {0xADD4, 0xADD4, 0xADD4}, + {0xADD5, 0xADD5, 0xADD5}, {0xADD6, 0xADD6, 0xADD6}, + {0xADD7, 0xADD7, 0xADD7}, {0xADD8, 0xADD8, 0xADD8}, + {0xADD9, 0xADD9, 0xADD9}, {0xADDA, 0xADDA, 0xADDA}, + {0xADDB, 0xADDB, 0xADDB}, {0xADDC, 0xADDC, 0xADDC}, + {0xADDD, 0xADDD, 0xADDD}, {0xADDE, 0xADDE, 0xADDE}, + {0xADDF, 0xADDF, 0xADDF}, {0xADE0, 0xADE0, 0xADE0}, + {0xADE1, 0xADE1, 0xADE1}, {0xADE2, 0xADE2, 0xADE2}, + {0xADE3, 0xADE3, 0xADE3}, {0xADE4, 0xADE4, 0xADE4}, + {0xADE5, 0xADE5, 0xADE5}, {0xADE6, 0xADE6, 0xADE6}, + {0xADE7, 0xADE7, 0xADE7}, {0xADE8, 0xADE8, 0xADE8}, + {0xADE9, 0xADE9, 0xADE9}, {0xADEA, 0xADEA, 0xADEA}, + {0xADEB, 0xADEB, 0xADEB}, {0xADEC, 0xADEC, 0xADEC}, + {0xADED, 0xADED, 0xADED}, {0xADEE, 0xADEE, 0xADEE}, + {0xADEF, 0xADEF, 0xADEF}, {0xADF0, 0xADF0, 0xADF0}, + {0xADF1, 0xADF1, 0xADF1}, {0xADF2, 0xADF2, 0xADF2}, + {0xADF3, 0xADF3, 0xADF3}, {0xADF4, 0xADF4, 0xADF4}, + {0xADF5, 0xADF5, 0xADF5}, {0xADF6, 0xADF6, 0xADF6}, + {0xADF7, 0xADF7, 0xADF7}, {0xADF8, 0xADF8, 0xADF8}, + {0xADF9, 0xADF9, 0xADF9}, {0xADFA, 0xADFA, 0xADFA}, + {0xADFB, 0xADFB, 0xADFB}, {0xADFC, 0xADFC, 0xADFC}, + {0xADFD, 0xADFD, 0xADFD}, {0xADFE, 0xADFE, 0xADFE}, + {0xADFF, 0xADFF, 0xADFF}, {0xAE00, 0xAE00, 0xAE00}, + {0xAE01, 0xAE01, 0xAE01}, {0xAE02, 0xAE02, 0xAE02}, + {0xAE03, 0xAE03, 0xAE03}, {0xAE04, 0xAE04, 0xAE04}, + {0xAE05, 0xAE05, 0xAE05}, {0xAE06, 0xAE06, 0xAE06}, + {0xAE07, 0xAE07, 0xAE07}, {0xAE08, 0xAE08, 0xAE08}, + {0xAE09, 0xAE09, 0xAE09}, {0xAE0A, 0xAE0A, 0xAE0A}, + {0xAE0B, 0xAE0B, 0xAE0B}, {0xAE0C, 0xAE0C, 0xAE0C}, + {0xAE0D, 0xAE0D, 0xAE0D}, {0xAE0E, 0xAE0E, 0xAE0E}, + {0xAE0F, 0xAE0F, 0xAE0F}, {0xAE10, 0xAE10, 0xAE10}, + {0xAE11, 0xAE11, 0xAE11}, {0xAE12, 0xAE12, 0xAE12}, + {0xAE13, 0xAE13, 0xAE13}, {0xAE14, 0xAE14, 0xAE14}, + {0xAE15, 0xAE15, 0xAE15}, {0xAE16, 0xAE16, 0xAE16}, + {0xAE17, 0xAE17, 0xAE17}, {0xAE18, 0xAE18, 0xAE18}, + {0xAE19, 0xAE19, 0xAE19}, {0xAE1A, 0xAE1A, 0xAE1A}, + {0xAE1B, 0xAE1B, 0xAE1B}, {0xAE1C, 0xAE1C, 0xAE1C}, + {0xAE1D, 0xAE1D, 0xAE1D}, {0xAE1E, 0xAE1E, 0xAE1E}, + {0xAE1F, 0xAE1F, 0xAE1F}, {0xAE20, 0xAE20, 0xAE20}, + {0xAE21, 0xAE21, 0xAE21}, {0xAE22, 0xAE22, 0xAE22}, + {0xAE23, 0xAE23, 0xAE23}, {0xAE24, 0xAE24, 0xAE24}, + {0xAE25, 0xAE25, 0xAE25}, {0xAE26, 0xAE26, 0xAE26}, + {0xAE27, 0xAE27, 0xAE27}, {0xAE28, 0xAE28, 0xAE28}, + {0xAE29, 0xAE29, 0xAE29}, {0xAE2A, 0xAE2A, 0xAE2A}, + {0xAE2B, 0xAE2B, 0xAE2B}, {0xAE2C, 0xAE2C, 0xAE2C}, + {0xAE2D, 0xAE2D, 0xAE2D}, {0xAE2E, 0xAE2E, 0xAE2E}, + {0xAE2F, 0xAE2F, 0xAE2F}, {0xAE30, 0xAE30, 0xAE30}, + {0xAE31, 0xAE31, 0xAE31}, {0xAE32, 0xAE32, 0xAE32}, + {0xAE33, 0xAE33, 0xAE33}, {0xAE34, 0xAE34, 0xAE34}, + {0xAE35, 0xAE35, 0xAE35}, {0xAE36, 0xAE36, 0xAE36}, + {0xAE37, 0xAE37, 0xAE37}, {0xAE38, 0xAE38, 0xAE38}, + {0xAE39, 0xAE39, 0xAE39}, {0xAE3A, 0xAE3A, 0xAE3A}, + {0xAE3B, 0xAE3B, 0xAE3B}, {0xAE3C, 0xAE3C, 0xAE3C}, + {0xAE3D, 0xAE3D, 0xAE3D}, {0xAE3E, 0xAE3E, 0xAE3E}, + {0xAE3F, 0xAE3F, 0xAE3F}, {0xAE40, 0xAE40, 0xAE40}, + {0xAE41, 0xAE41, 0xAE41}, {0xAE42, 0xAE42, 0xAE42}, + {0xAE43, 0xAE43, 0xAE43}, {0xAE44, 0xAE44, 0xAE44}, + {0xAE45, 0xAE45, 0xAE45}, {0xAE46, 0xAE46, 0xAE46}, + {0xAE47, 0xAE47, 0xAE47}, {0xAE48, 0xAE48, 0xAE48}, + {0xAE49, 0xAE49, 0xAE49}, {0xAE4A, 0xAE4A, 0xAE4A}, + {0xAE4B, 0xAE4B, 0xAE4B}, {0xAE4C, 0xAE4C, 0xAE4C}, + {0xAE4D, 0xAE4D, 0xAE4D}, {0xAE4E, 0xAE4E, 0xAE4E}, + {0xAE4F, 0xAE4F, 0xAE4F}, {0xAE50, 0xAE50, 0xAE50}, + {0xAE51, 0xAE51, 0xAE51}, {0xAE52, 0xAE52, 0xAE52}, + {0xAE53, 0xAE53, 0xAE53}, {0xAE54, 0xAE54, 0xAE54}, + {0xAE55, 0xAE55, 0xAE55}, {0xAE56, 0xAE56, 0xAE56}, + {0xAE57, 0xAE57, 0xAE57}, {0xAE58, 0xAE58, 0xAE58}, + {0xAE59, 0xAE59, 0xAE59}, {0xAE5A, 0xAE5A, 0xAE5A}, + {0xAE5B, 0xAE5B, 0xAE5B}, {0xAE5C, 0xAE5C, 0xAE5C}, + {0xAE5D, 0xAE5D, 0xAE5D}, {0xAE5E, 0xAE5E, 0xAE5E}, + {0xAE5F, 0xAE5F, 0xAE5F}, {0xAE60, 0xAE60, 0xAE60}, + {0xAE61, 0xAE61, 0xAE61}, {0xAE62, 0xAE62, 0xAE62}, + {0xAE63, 0xAE63, 0xAE63}, {0xAE64, 0xAE64, 0xAE64}, + {0xAE65, 0xAE65, 0xAE65}, {0xAE66, 0xAE66, 0xAE66}, + {0xAE67, 0xAE67, 0xAE67}, {0xAE68, 0xAE68, 0xAE68}, + {0xAE69, 0xAE69, 0xAE69}, {0xAE6A, 0xAE6A, 0xAE6A}, + {0xAE6B, 0xAE6B, 0xAE6B}, {0xAE6C, 0xAE6C, 0xAE6C}, + {0xAE6D, 0xAE6D, 0xAE6D}, {0xAE6E, 0xAE6E, 0xAE6E}, + {0xAE6F, 0xAE6F, 0xAE6F}, {0xAE70, 0xAE70, 0xAE70}, + {0xAE71, 0xAE71, 0xAE71}, {0xAE72, 0xAE72, 0xAE72}, + {0xAE73, 0xAE73, 0xAE73}, {0xAE74, 0xAE74, 0xAE74}, + {0xAE75, 0xAE75, 0xAE75}, {0xAE76, 0xAE76, 0xAE76}, + {0xAE77, 0xAE77, 0xAE77}, {0xAE78, 0xAE78, 0xAE78}, + {0xAE79, 0xAE79, 0xAE79}, {0xAE7A, 0xAE7A, 0xAE7A}, + {0xAE7B, 0xAE7B, 0xAE7B}, {0xAE7C, 0xAE7C, 0xAE7C}, + {0xAE7D, 0xAE7D, 0xAE7D}, {0xAE7E, 0xAE7E, 0xAE7E}, + {0xAE7F, 0xAE7F, 0xAE7F}, {0xAE80, 0xAE80, 0xAE80}, + {0xAE81, 0xAE81, 0xAE81}, {0xAE82, 0xAE82, 0xAE82}, + {0xAE83, 0xAE83, 0xAE83}, {0xAE84, 0xAE84, 0xAE84}, + {0xAE85, 0xAE85, 0xAE85}, {0xAE86, 0xAE86, 0xAE86}, + {0xAE87, 0xAE87, 0xAE87}, {0xAE88, 0xAE88, 0xAE88}, + {0xAE89, 0xAE89, 0xAE89}, {0xAE8A, 0xAE8A, 0xAE8A}, + {0xAE8B, 0xAE8B, 0xAE8B}, {0xAE8C, 0xAE8C, 0xAE8C}, + {0xAE8D, 0xAE8D, 0xAE8D}, {0xAE8E, 0xAE8E, 0xAE8E}, + {0xAE8F, 0xAE8F, 0xAE8F}, {0xAE90, 0xAE90, 0xAE90}, + {0xAE91, 0xAE91, 0xAE91}, {0xAE92, 0xAE92, 0xAE92}, + {0xAE93, 0xAE93, 0xAE93}, {0xAE94, 0xAE94, 0xAE94}, + {0xAE95, 0xAE95, 0xAE95}, {0xAE96, 0xAE96, 0xAE96}, + {0xAE97, 0xAE97, 0xAE97}, {0xAE98, 0xAE98, 0xAE98}, + {0xAE99, 0xAE99, 0xAE99}, {0xAE9A, 0xAE9A, 0xAE9A}, + {0xAE9B, 0xAE9B, 0xAE9B}, {0xAE9C, 0xAE9C, 0xAE9C}, + {0xAE9D, 0xAE9D, 0xAE9D}, {0xAE9E, 0xAE9E, 0xAE9E}, + {0xAE9F, 0xAE9F, 0xAE9F}, {0xAEA0, 0xAEA0, 0xAEA0}, + {0xAEA1, 0xAEA1, 0xAEA1}, {0xAEA2, 0xAEA2, 0xAEA2}, + {0xAEA3, 0xAEA3, 0xAEA3}, {0xAEA4, 0xAEA4, 0xAEA4}, + {0xAEA5, 0xAEA5, 0xAEA5}, {0xAEA6, 0xAEA6, 0xAEA6}, + {0xAEA7, 0xAEA7, 0xAEA7}, {0xAEA8, 0xAEA8, 0xAEA8}, + {0xAEA9, 0xAEA9, 0xAEA9}, {0xAEAA, 0xAEAA, 0xAEAA}, + {0xAEAB, 0xAEAB, 0xAEAB}, {0xAEAC, 0xAEAC, 0xAEAC}, + {0xAEAD, 0xAEAD, 0xAEAD}, {0xAEAE, 0xAEAE, 0xAEAE}, + {0xAEAF, 0xAEAF, 0xAEAF}, {0xAEB0, 0xAEB0, 0xAEB0}, + {0xAEB1, 0xAEB1, 0xAEB1}, {0xAEB2, 0xAEB2, 0xAEB2}, + {0xAEB3, 0xAEB3, 0xAEB3}, {0xAEB4, 0xAEB4, 0xAEB4}, + {0xAEB5, 0xAEB5, 0xAEB5}, {0xAEB6, 0xAEB6, 0xAEB6}, + {0xAEB7, 0xAEB7, 0xAEB7}, {0xAEB8, 0xAEB8, 0xAEB8}, + {0xAEB9, 0xAEB9, 0xAEB9}, {0xAEBA, 0xAEBA, 0xAEBA}, + {0xAEBB, 0xAEBB, 0xAEBB}, {0xAEBC, 0xAEBC, 0xAEBC}, + {0xAEBD, 0xAEBD, 0xAEBD}, {0xAEBE, 0xAEBE, 0xAEBE}, + {0xAEBF, 0xAEBF, 0xAEBF}, {0xAEC0, 0xAEC0, 0xAEC0}, + {0xAEC1, 0xAEC1, 0xAEC1}, {0xAEC2, 0xAEC2, 0xAEC2}, + {0xAEC3, 0xAEC3, 0xAEC3}, {0xAEC4, 0xAEC4, 0xAEC4}, + {0xAEC5, 0xAEC5, 0xAEC5}, {0xAEC6, 0xAEC6, 0xAEC6}, + {0xAEC7, 0xAEC7, 0xAEC7}, {0xAEC8, 0xAEC8, 0xAEC8}, + {0xAEC9, 0xAEC9, 0xAEC9}, {0xAECA, 0xAECA, 0xAECA}, + {0xAECB, 0xAECB, 0xAECB}, {0xAECC, 0xAECC, 0xAECC}, + {0xAECD, 0xAECD, 0xAECD}, {0xAECE, 0xAECE, 0xAECE}, + {0xAECF, 0xAECF, 0xAECF}, {0xAED0, 0xAED0, 0xAED0}, + {0xAED1, 0xAED1, 0xAED1}, {0xAED2, 0xAED2, 0xAED2}, + {0xAED3, 0xAED3, 0xAED3}, {0xAED4, 0xAED4, 0xAED4}, + {0xAED5, 0xAED5, 0xAED5}, {0xAED6, 0xAED6, 0xAED6}, + {0xAED7, 0xAED7, 0xAED7}, {0xAED8, 0xAED8, 0xAED8}, + {0xAED9, 0xAED9, 0xAED9}, {0xAEDA, 0xAEDA, 0xAEDA}, + {0xAEDB, 0xAEDB, 0xAEDB}, {0xAEDC, 0xAEDC, 0xAEDC}, + {0xAEDD, 0xAEDD, 0xAEDD}, {0xAEDE, 0xAEDE, 0xAEDE}, + {0xAEDF, 0xAEDF, 0xAEDF}, {0xAEE0, 0xAEE0, 0xAEE0}, + {0xAEE1, 0xAEE1, 0xAEE1}, {0xAEE2, 0xAEE2, 0xAEE2}, + {0xAEE3, 0xAEE3, 0xAEE3}, {0xAEE4, 0xAEE4, 0xAEE4}, + {0xAEE5, 0xAEE5, 0xAEE5}, {0xAEE6, 0xAEE6, 0xAEE6}, + {0xAEE7, 0xAEE7, 0xAEE7}, {0xAEE8, 0xAEE8, 0xAEE8}, + {0xAEE9, 0xAEE9, 0xAEE9}, {0xAEEA, 0xAEEA, 0xAEEA}, + {0xAEEB, 0xAEEB, 0xAEEB}, {0xAEEC, 0xAEEC, 0xAEEC}, + {0xAEED, 0xAEED, 0xAEED}, {0xAEEE, 0xAEEE, 0xAEEE}, + {0xAEEF, 0xAEEF, 0xAEEF}, {0xAEF0, 0xAEF0, 0xAEF0}, + {0xAEF1, 0xAEF1, 0xAEF1}, {0xAEF2, 0xAEF2, 0xAEF2}, + {0xAEF3, 0xAEF3, 0xAEF3}, {0xAEF4, 0xAEF4, 0xAEF4}, + {0xAEF5, 0xAEF5, 0xAEF5}, {0xAEF6, 0xAEF6, 0xAEF6}, + {0xAEF7, 0xAEF7, 0xAEF7}, {0xAEF8, 0xAEF8, 0xAEF8}, + {0xAEF9, 0xAEF9, 0xAEF9}, {0xAEFA, 0xAEFA, 0xAEFA}, + {0xAEFB, 0xAEFB, 0xAEFB}, {0xAEFC, 0xAEFC, 0xAEFC}, + {0xAEFD, 0xAEFD, 0xAEFD}, {0xAEFE, 0xAEFE, 0xAEFE}, + {0xAEFF, 0xAEFF, 0xAEFF}, {0xAF00, 0xAF00, 0xAF00}, + {0xAF01, 0xAF01, 0xAF01}, {0xAF02, 0xAF02, 0xAF02}, + {0xAF03, 0xAF03, 0xAF03}, {0xAF04, 0xAF04, 0xAF04}, + {0xAF05, 0xAF05, 0xAF05}, {0xAF06, 0xAF06, 0xAF06}, + {0xAF07, 0xAF07, 0xAF07}, {0xAF08, 0xAF08, 0xAF08}, + {0xAF09, 0xAF09, 0xAF09}, {0xAF0A, 0xAF0A, 0xAF0A}, + {0xAF0B, 0xAF0B, 0xAF0B}, {0xAF0C, 0xAF0C, 0xAF0C}, + {0xAF0D, 0xAF0D, 0xAF0D}, {0xAF0E, 0xAF0E, 0xAF0E}, + {0xAF0F, 0xAF0F, 0xAF0F}, {0xAF10, 0xAF10, 0xAF10}, + {0xAF11, 0xAF11, 0xAF11}, {0xAF12, 0xAF12, 0xAF12}, + {0xAF13, 0xAF13, 0xAF13}, {0xAF14, 0xAF14, 0xAF14}, + {0xAF15, 0xAF15, 0xAF15}, {0xAF16, 0xAF16, 0xAF16}, + {0xAF17, 0xAF17, 0xAF17}, {0xAF18, 0xAF18, 0xAF18}, + {0xAF19, 0xAF19, 0xAF19}, {0xAF1A, 0xAF1A, 0xAF1A}, + {0xAF1B, 0xAF1B, 0xAF1B}, {0xAF1C, 0xAF1C, 0xAF1C}, + {0xAF1D, 0xAF1D, 0xAF1D}, {0xAF1E, 0xAF1E, 0xAF1E}, + {0xAF1F, 0xAF1F, 0xAF1F}, {0xAF20, 0xAF20, 0xAF20}, + {0xAF21, 0xAF21, 0xAF21}, {0xAF22, 0xAF22, 0xAF22}, + {0xAF23, 0xAF23, 0xAF23}, {0xAF24, 0xAF24, 0xAF24}, + {0xAF25, 0xAF25, 0xAF25}, {0xAF26, 0xAF26, 0xAF26}, + {0xAF27, 0xAF27, 0xAF27}, {0xAF28, 0xAF28, 0xAF28}, + {0xAF29, 0xAF29, 0xAF29}, {0xAF2A, 0xAF2A, 0xAF2A}, + {0xAF2B, 0xAF2B, 0xAF2B}, {0xAF2C, 0xAF2C, 0xAF2C}, + {0xAF2D, 0xAF2D, 0xAF2D}, {0xAF2E, 0xAF2E, 0xAF2E}, + {0xAF2F, 0xAF2F, 0xAF2F}, {0xAF30, 0xAF30, 0xAF30}, + {0xAF31, 0xAF31, 0xAF31}, {0xAF32, 0xAF32, 0xAF32}, + {0xAF33, 0xAF33, 0xAF33}, {0xAF34, 0xAF34, 0xAF34}, + {0xAF35, 0xAF35, 0xAF35}, {0xAF36, 0xAF36, 0xAF36}, + {0xAF37, 0xAF37, 0xAF37}, {0xAF38, 0xAF38, 0xAF38}, + {0xAF39, 0xAF39, 0xAF39}, {0xAF3A, 0xAF3A, 0xAF3A}, + {0xAF3B, 0xAF3B, 0xAF3B}, {0xAF3C, 0xAF3C, 0xAF3C}, + {0xAF3D, 0xAF3D, 0xAF3D}, {0xAF3E, 0xAF3E, 0xAF3E}, + {0xAF3F, 0xAF3F, 0xAF3F}, {0xAF40, 0xAF40, 0xAF40}, + {0xAF41, 0xAF41, 0xAF41}, {0xAF42, 0xAF42, 0xAF42}, + {0xAF43, 0xAF43, 0xAF43}, {0xAF44, 0xAF44, 0xAF44}, + {0xAF45, 0xAF45, 0xAF45}, {0xAF46, 0xAF46, 0xAF46}, + {0xAF47, 0xAF47, 0xAF47}, {0xAF48, 0xAF48, 0xAF48}, + {0xAF49, 0xAF49, 0xAF49}, {0xAF4A, 0xAF4A, 0xAF4A}, + {0xAF4B, 0xAF4B, 0xAF4B}, {0xAF4C, 0xAF4C, 0xAF4C}, + {0xAF4D, 0xAF4D, 0xAF4D}, {0xAF4E, 0xAF4E, 0xAF4E}, + {0xAF4F, 0xAF4F, 0xAF4F}, {0xAF50, 0xAF50, 0xAF50}, + {0xAF51, 0xAF51, 0xAF51}, {0xAF52, 0xAF52, 0xAF52}, + {0xAF53, 0xAF53, 0xAF53}, {0xAF54, 0xAF54, 0xAF54}, + {0xAF55, 0xAF55, 0xAF55}, {0xAF56, 0xAF56, 0xAF56}, + {0xAF57, 0xAF57, 0xAF57}, {0xAF58, 0xAF58, 0xAF58}, + {0xAF59, 0xAF59, 0xAF59}, {0xAF5A, 0xAF5A, 0xAF5A}, + {0xAF5B, 0xAF5B, 0xAF5B}, {0xAF5C, 0xAF5C, 0xAF5C}, + {0xAF5D, 0xAF5D, 0xAF5D}, {0xAF5E, 0xAF5E, 0xAF5E}, + {0xAF5F, 0xAF5F, 0xAF5F}, {0xAF60, 0xAF60, 0xAF60}, + {0xAF61, 0xAF61, 0xAF61}, {0xAF62, 0xAF62, 0xAF62}, + {0xAF63, 0xAF63, 0xAF63}, {0xAF64, 0xAF64, 0xAF64}, + {0xAF65, 0xAF65, 0xAF65}, {0xAF66, 0xAF66, 0xAF66}, + {0xAF67, 0xAF67, 0xAF67}, {0xAF68, 0xAF68, 0xAF68}, + {0xAF69, 0xAF69, 0xAF69}, {0xAF6A, 0xAF6A, 0xAF6A}, + {0xAF6B, 0xAF6B, 0xAF6B}, {0xAF6C, 0xAF6C, 0xAF6C}, + {0xAF6D, 0xAF6D, 0xAF6D}, {0xAF6E, 0xAF6E, 0xAF6E}, + {0xAF6F, 0xAF6F, 0xAF6F}, {0xAF70, 0xAF70, 0xAF70}, + {0xAF71, 0xAF71, 0xAF71}, {0xAF72, 0xAF72, 0xAF72}, + {0xAF73, 0xAF73, 0xAF73}, {0xAF74, 0xAF74, 0xAF74}, + {0xAF75, 0xAF75, 0xAF75}, {0xAF76, 0xAF76, 0xAF76}, + {0xAF77, 0xAF77, 0xAF77}, {0xAF78, 0xAF78, 0xAF78}, + {0xAF79, 0xAF79, 0xAF79}, {0xAF7A, 0xAF7A, 0xAF7A}, + {0xAF7B, 0xAF7B, 0xAF7B}, {0xAF7C, 0xAF7C, 0xAF7C}, + {0xAF7D, 0xAF7D, 0xAF7D}, {0xAF7E, 0xAF7E, 0xAF7E}, + {0xAF7F, 0xAF7F, 0xAF7F}, {0xAF80, 0xAF80, 0xAF80}, + {0xAF81, 0xAF81, 0xAF81}, {0xAF82, 0xAF82, 0xAF82}, + {0xAF83, 0xAF83, 0xAF83}, {0xAF84, 0xAF84, 0xAF84}, + {0xAF85, 0xAF85, 0xAF85}, {0xAF86, 0xAF86, 0xAF86}, + {0xAF87, 0xAF87, 0xAF87}, {0xAF88, 0xAF88, 0xAF88}, + {0xAF89, 0xAF89, 0xAF89}, {0xAF8A, 0xAF8A, 0xAF8A}, + {0xAF8B, 0xAF8B, 0xAF8B}, {0xAF8C, 0xAF8C, 0xAF8C}, + {0xAF8D, 0xAF8D, 0xAF8D}, {0xAF8E, 0xAF8E, 0xAF8E}, + {0xAF8F, 0xAF8F, 0xAF8F}, {0xAF90, 0xAF90, 0xAF90}, + {0xAF91, 0xAF91, 0xAF91}, {0xAF92, 0xAF92, 0xAF92}, + {0xAF93, 0xAF93, 0xAF93}, {0xAF94, 0xAF94, 0xAF94}, + {0xAF95, 0xAF95, 0xAF95}, {0xAF96, 0xAF96, 0xAF96}, + {0xAF97, 0xAF97, 0xAF97}, {0xAF98, 0xAF98, 0xAF98}, + {0xAF99, 0xAF99, 0xAF99}, {0xAF9A, 0xAF9A, 0xAF9A}, + {0xAF9B, 0xAF9B, 0xAF9B}, {0xAF9C, 0xAF9C, 0xAF9C}, + {0xAF9D, 0xAF9D, 0xAF9D}, {0xAF9E, 0xAF9E, 0xAF9E}, + {0xAF9F, 0xAF9F, 0xAF9F}, {0xAFA0, 0xAFA0, 0xAFA0}, + {0xAFA1, 0xAFA1, 0xAFA1}, {0xAFA2, 0xAFA2, 0xAFA2}, + {0xAFA3, 0xAFA3, 0xAFA3}, {0xAFA4, 0xAFA4, 0xAFA4}, + {0xAFA5, 0xAFA5, 0xAFA5}, {0xAFA6, 0xAFA6, 0xAFA6}, + {0xAFA7, 0xAFA7, 0xAFA7}, {0xAFA8, 0xAFA8, 0xAFA8}, + {0xAFA9, 0xAFA9, 0xAFA9}, {0xAFAA, 0xAFAA, 0xAFAA}, + {0xAFAB, 0xAFAB, 0xAFAB}, {0xAFAC, 0xAFAC, 0xAFAC}, + {0xAFAD, 0xAFAD, 0xAFAD}, {0xAFAE, 0xAFAE, 0xAFAE}, + {0xAFAF, 0xAFAF, 0xAFAF}, {0xAFB0, 0xAFB0, 0xAFB0}, + {0xAFB1, 0xAFB1, 0xAFB1}, {0xAFB2, 0xAFB2, 0xAFB2}, + {0xAFB3, 0xAFB3, 0xAFB3}, {0xAFB4, 0xAFB4, 0xAFB4}, + {0xAFB5, 0xAFB5, 0xAFB5}, {0xAFB6, 0xAFB6, 0xAFB6}, + {0xAFB7, 0xAFB7, 0xAFB7}, {0xAFB8, 0xAFB8, 0xAFB8}, + {0xAFB9, 0xAFB9, 0xAFB9}, {0xAFBA, 0xAFBA, 0xAFBA}, + {0xAFBB, 0xAFBB, 0xAFBB}, {0xAFBC, 0xAFBC, 0xAFBC}, + {0xAFBD, 0xAFBD, 0xAFBD}, {0xAFBE, 0xAFBE, 0xAFBE}, + {0xAFBF, 0xAFBF, 0xAFBF}, {0xAFC0, 0xAFC0, 0xAFC0}, + {0xAFC1, 0xAFC1, 0xAFC1}, {0xAFC2, 0xAFC2, 0xAFC2}, + {0xAFC3, 0xAFC3, 0xAFC3}, {0xAFC4, 0xAFC4, 0xAFC4}, + {0xAFC5, 0xAFC5, 0xAFC5}, {0xAFC6, 0xAFC6, 0xAFC6}, + {0xAFC7, 0xAFC7, 0xAFC7}, {0xAFC8, 0xAFC8, 0xAFC8}, + {0xAFC9, 0xAFC9, 0xAFC9}, {0xAFCA, 0xAFCA, 0xAFCA}, + {0xAFCB, 0xAFCB, 0xAFCB}, {0xAFCC, 0xAFCC, 0xAFCC}, + {0xAFCD, 0xAFCD, 0xAFCD}, {0xAFCE, 0xAFCE, 0xAFCE}, + {0xAFCF, 0xAFCF, 0xAFCF}, {0xAFD0, 0xAFD0, 0xAFD0}, + {0xAFD1, 0xAFD1, 0xAFD1}, {0xAFD2, 0xAFD2, 0xAFD2}, + {0xAFD3, 0xAFD3, 0xAFD3}, {0xAFD4, 0xAFD4, 0xAFD4}, + {0xAFD5, 0xAFD5, 0xAFD5}, {0xAFD6, 0xAFD6, 0xAFD6}, + {0xAFD7, 0xAFD7, 0xAFD7}, {0xAFD8, 0xAFD8, 0xAFD8}, + {0xAFD9, 0xAFD9, 0xAFD9}, {0xAFDA, 0xAFDA, 0xAFDA}, + {0xAFDB, 0xAFDB, 0xAFDB}, {0xAFDC, 0xAFDC, 0xAFDC}, + {0xAFDD, 0xAFDD, 0xAFDD}, {0xAFDE, 0xAFDE, 0xAFDE}, + {0xAFDF, 0xAFDF, 0xAFDF}, {0xAFE0, 0xAFE0, 0xAFE0}, + {0xAFE1, 0xAFE1, 0xAFE1}, {0xAFE2, 0xAFE2, 0xAFE2}, + {0xAFE3, 0xAFE3, 0xAFE3}, {0xAFE4, 0xAFE4, 0xAFE4}, + {0xAFE5, 0xAFE5, 0xAFE5}, {0xAFE6, 0xAFE6, 0xAFE6}, + {0xAFE7, 0xAFE7, 0xAFE7}, {0xAFE8, 0xAFE8, 0xAFE8}, + {0xAFE9, 0xAFE9, 0xAFE9}, {0xAFEA, 0xAFEA, 0xAFEA}, + {0xAFEB, 0xAFEB, 0xAFEB}, {0xAFEC, 0xAFEC, 0xAFEC}, + {0xAFED, 0xAFED, 0xAFED}, {0xAFEE, 0xAFEE, 0xAFEE}, + {0xAFEF, 0xAFEF, 0xAFEF}, {0xAFF0, 0xAFF0, 0xAFF0}, + {0xAFF1, 0xAFF1, 0xAFF1}, {0xAFF2, 0xAFF2, 0xAFF2}, + {0xAFF3, 0xAFF3, 0xAFF3}, {0xAFF4, 0xAFF4, 0xAFF4}, + {0xAFF5, 0xAFF5, 0xAFF5}, {0xAFF6, 0xAFF6, 0xAFF6}, + {0xAFF7, 0xAFF7, 0xAFF7}, {0xAFF8, 0xAFF8, 0xAFF8}, + {0xAFF9, 0xAFF9, 0xAFF9}, {0xAFFA, 0xAFFA, 0xAFFA}, + {0xAFFB, 0xAFFB, 0xAFFB}, {0xAFFC, 0xAFFC, 0xAFFC}, + {0xAFFD, 0xAFFD, 0xAFFD}, {0xAFFE, 0xAFFE, 0xAFFE}, + {0xAFFF, 0xAFFF, 0xAFFF}, {0xB000, 0xB000, 0xB000}, + {0xB001, 0xB001, 0xB001}, {0xB002, 0xB002, 0xB002}, + {0xB003, 0xB003, 0xB003}, {0xB004, 0xB004, 0xB004}, + {0xB005, 0xB005, 0xB005}, {0xB006, 0xB006, 0xB006}, + {0xB007, 0xB007, 0xB007}, {0xB008, 0xB008, 0xB008}, + {0xB009, 0xB009, 0xB009}, {0xB00A, 0xB00A, 0xB00A}, + {0xB00B, 0xB00B, 0xB00B}, {0xB00C, 0xB00C, 0xB00C}, + {0xB00D, 0xB00D, 0xB00D}, {0xB00E, 0xB00E, 0xB00E}, + {0xB00F, 0xB00F, 0xB00F}, {0xB010, 0xB010, 0xB010}, + {0xB011, 0xB011, 0xB011}, {0xB012, 0xB012, 0xB012}, + {0xB013, 0xB013, 0xB013}, {0xB014, 0xB014, 0xB014}, + {0xB015, 0xB015, 0xB015}, {0xB016, 0xB016, 0xB016}, + {0xB017, 0xB017, 0xB017}, {0xB018, 0xB018, 0xB018}, + {0xB019, 0xB019, 0xB019}, {0xB01A, 0xB01A, 0xB01A}, + {0xB01B, 0xB01B, 0xB01B}, {0xB01C, 0xB01C, 0xB01C}, + {0xB01D, 0xB01D, 0xB01D}, {0xB01E, 0xB01E, 0xB01E}, + {0xB01F, 0xB01F, 0xB01F}, {0xB020, 0xB020, 0xB020}, + {0xB021, 0xB021, 0xB021}, {0xB022, 0xB022, 0xB022}, + {0xB023, 0xB023, 0xB023}, {0xB024, 0xB024, 0xB024}, + {0xB025, 0xB025, 0xB025}, {0xB026, 0xB026, 0xB026}, + {0xB027, 0xB027, 0xB027}, {0xB028, 0xB028, 0xB028}, + {0xB029, 0xB029, 0xB029}, {0xB02A, 0xB02A, 0xB02A}, + {0xB02B, 0xB02B, 0xB02B}, {0xB02C, 0xB02C, 0xB02C}, + {0xB02D, 0xB02D, 0xB02D}, {0xB02E, 0xB02E, 0xB02E}, + {0xB02F, 0xB02F, 0xB02F}, {0xB030, 0xB030, 0xB030}, + {0xB031, 0xB031, 0xB031}, {0xB032, 0xB032, 0xB032}, + {0xB033, 0xB033, 0xB033}, {0xB034, 0xB034, 0xB034}, + {0xB035, 0xB035, 0xB035}, {0xB036, 0xB036, 0xB036}, + {0xB037, 0xB037, 0xB037}, {0xB038, 0xB038, 0xB038}, + {0xB039, 0xB039, 0xB039}, {0xB03A, 0xB03A, 0xB03A}, + {0xB03B, 0xB03B, 0xB03B}, {0xB03C, 0xB03C, 0xB03C}, + {0xB03D, 0xB03D, 0xB03D}, {0xB03E, 0xB03E, 0xB03E}, + {0xB03F, 0xB03F, 0xB03F}, {0xB040, 0xB040, 0xB040}, + {0xB041, 0xB041, 0xB041}, {0xB042, 0xB042, 0xB042}, + {0xB043, 0xB043, 0xB043}, {0xB044, 0xB044, 0xB044}, + {0xB045, 0xB045, 0xB045}, {0xB046, 0xB046, 0xB046}, + {0xB047, 0xB047, 0xB047}, {0xB048, 0xB048, 0xB048}, + {0xB049, 0xB049, 0xB049}, {0xB04A, 0xB04A, 0xB04A}, + {0xB04B, 0xB04B, 0xB04B}, {0xB04C, 0xB04C, 0xB04C}, + {0xB04D, 0xB04D, 0xB04D}, {0xB04E, 0xB04E, 0xB04E}, + {0xB04F, 0xB04F, 0xB04F}, {0xB050, 0xB050, 0xB050}, + {0xB051, 0xB051, 0xB051}, {0xB052, 0xB052, 0xB052}, + {0xB053, 0xB053, 0xB053}, {0xB054, 0xB054, 0xB054}, + {0xB055, 0xB055, 0xB055}, {0xB056, 0xB056, 0xB056}, + {0xB057, 0xB057, 0xB057}, {0xB058, 0xB058, 0xB058}, + {0xB059, 0xB059, 0xB059}, {0xB05A, 0xB05A, 0xB05A}, + {0xB05B, 0xB05B, 0xB05B}, {0xB05C, 0xB05C, 0xB05C}, + {0xB05D, 0xB05D, 0xB05D}, {0xB05E, 0xB05E, 0xB05E}, + {0xB05F, 0xB05F, 0xB05F}, {0xB060, 0xB060, 0xB060}, + {0xB061, 0xB061, 0xB061}, {0xB062, 0xB062, 0xB062}, + {0xB063, 0xB063, 0xB063}, {0xB064, 0xB064, 0xB064}, + {0xB065, 0xB065, 0xB065}, {0xB066, 0xB066, 0xB066}, + {0xB067, 0xB067, 0xB067}, {0xB068, 0xB068, 0xB068}, + {0xB069, 0xB069, 0xB069}, {0xB06A, 0xB06A, 0xB06A}, + {0xB06B, 0xB06B, 0xB06B}, {0xB06C, 0xB06C, 0xB06C}, + {0xB06D, 0xB06D, 0xB06D}, {0xB06E, 0xB06E, 0xB06E}, + {0xB06F, 0xB06F, 0xB06F}, {0xB070, 0xB070, 0xB070}, + {0xB071, 0xB071, 0xB071}, {0xB072, 0xB072, 0xB072}, + {0xB073, 0xB073, 0xB073}, {0xB074, 0xB074, 0xB074}, + {0xB075, 0xB075, 0xB075}, {0xB076, 0xB076, 0xB076}, + {0xB077, 0xB077, 0xB077}, {0xB078, 0xB078, 0xB078}, + {0xB079, 0xB079, 0xB079}, {0xB07A, 0xB07A, 0xB07A}, + {0xB07B, 0xB07B, 0xB07B}, {0xB07C, 0xB07C, 0xB07C}, + {0xB07D, 0xB07D, 0xB07D}, {0xB07E, 0xB07E, 0xB07E}, + {0xB07F, 0xB07F, 0xB07F}, {0xB080, 0xB080, 0xB080}, + {0xB081, 0xB081, 0xB081}, {0xB082, 0xB082, 0xB082}, + {0xB083, 0xB083, 0xB083}, {0xB084, 0xB084, 0xB084}, + {0xB085, 0xB085, 0xB085}, {0xB086, 0xB086, 0xB086}, + {0xB087, 0xB087, 0xB087}, {0xB088, 0xB088, 0xB088}, + {0xB089, 0xB089, 0xB089}, {0xB08A, 0xB08A, 0xB08A}, + {0xB08B, 0xB08B, 0xB08B}, {0xB08C, 0xB08C, 0xB08C}, + {0xB08D, 0xB08D, 0xB08D}, {0xB08E, 0xB08E, 0xB08E}, + {0xB08F, 0xB08F, 0xB08F}, {0xB090, 0xB090, 0xB090}, + {0xB091, 0xB091, 0xB091}, {0xB092, 0xB092, 0xB092}, + {0xB093, 0xB093, 0xB093}, {0xB094, 0xB094, 0xB094}, + {0xB095, 0xB095, 0xB095}, {0xB096, 0xB096, 0xB096}, + {0xB097, 0xB097, 0xB097}, {0xB098, 0xB098, 0xB098}, + {0xB099, 0xB099, 0xB099}, {0xB09A, 0xB09A, 0xB09A}, + {0xB09B, 0xB09B, 0xB09B}, {0xB09C, 0xB09C, 0xB09C}, + {0xB09D, 0xB09D, 0xB09D}, {0xB09E, 0xB09E, 0xB09E}, + {0xB09F, 0xB09F, 0xB09F}, {0xB0A0, 0xB0A0, 0xB0A0}, + {0xB0A1, 0xB0A1, 0xB0A1}, {0xB0A2, 0xB0A2, 0xB0A2}, + {0xB0A3, 0xB0A3, 0xB0A3}, {0xB0A4, 0xB0A4, 0xB0A4}, + {0xB0A5, 0xB0A5, 0xB0A5}, {0xB0A6, 0xB0A6, 0xB0A6}, + {0xB0A7, 0xB0A7, 0xB0A7}, {0xB0A8, 0xB0A8, 0xB0A8}, + {0xB0A9, 0xB0A9, 0xB0A9}, {0xB0AA, 0xB0AA, 0xB0AA}, + {0xB0AB, 0xB0AB, 0xB0AB}, {0xB0AC, 0xB0AC, 0xB0AC}, + {0xB0AD, 0xB0AD, 0xB0AD}, {0xB0AE, 0xB0AE, 0xB0AE}, + {0xB0AF, 0xB0AF, 0xB0AF}, {0xB0B0, 0xB0B0, 0xB0B0}, + {0xB0B1, 0xB0B1, 0xB0B1}, {0xB0B2, 0xB0B2, 0xB0B2}, + {0xB0B3, 0xB0B3, 0xB0B3}, {0xB0B4, 0xB0B4, 0xB0B4}, + {0xB0B5, 0xB0B5, 0xB0B5}, {0xB0B6, 0xB0B6, 0xB0B6}, + {0xB0B7, 0xB0B7, 0xB0B7}, {0xB0B8, 0xB0B8, 0xB0B8}, + {0xB0B9, 0xB0B9, 0xB0B9}, {0xB0BA, 0xB0BA, 0xB0BA}, + {0xB0BB, 0xB0BB, 0xB0BB}, {0xB0BC, 0xB0BC, 0xB0BC}, + {0xB0BD, 0xB0BD, 0xB0BD}, {0xB0BE, 0xB0BE, 0xB0BE}, + {0xB0BF, 0xB0BF, 0xB0BF}, {0xB0C0, 0xB0C0, 0xB0C0}, + {0xB0C1, 0xB0C1, 0xB0C1}, {0xB0C2, 0xB0C2, 0xB0C2}, + {0xB0C3, 0xB0C3, 0xB0C3}, {0xB0C4, 0xB0C4, 0xB0C4}, + {0xB0C5, 0xB0C5, 0xB0C5}, {0xB0C6, 0xB0C6, 0xB0C6}, + {0xB0C7, 0xB0C7, 0xB0C7}, {0xB0C8, 0xB0C8, 0xB0C8}, + {0xB0C9, 0xB0C9, 0xB0C9}, {0xB0CA, 0xB0CA, 0xB0CA}, + {0xB0CB, 0xB0CB, 0xB0CB}, {0xB0CC, 0xB0CC, 0xB0CC}, + {0xB0CD, 0xB0CD, 0xB0CD}, {0xB0CE, 0xB0CE, 0xB0CE}, + {0xB0CF, 0xB0CF, 0xB0CF}, {0xB0D0, 0xB0D0, 0xB0D0}, + {0xB0D1, 0xB0D1, 0xB0D1}, {0xB0D2, 0xB0D2, 0xB0D2}, + {0xB0D3, 0xB0D3, 0xB0D3}, {0xB0D4, 0xB0D4, 0xB0D4}, + {0xB0D5, 0xB0D5, 0xB0D5}, {0xB0D6, 0xB0D6, 0xB0D6}, + {0xB0D7, 0xB0D7, 0xB0D7}, {0xB0D8, 0xB0D8, 0xB0D8}, + {0xB0D9, 0xB0D9, 0xB0D9}, {0xB0DA, 0xB0DA, 0xB0DA}, + {0xB0DB, 0xB0DB, 0xB0DB}, {0xB0DC, 0xB0DC, 0xB0DC}, + {0xB0DD, 0xB0DD, 0xB0DD}, {0xB0DE, 0xB0DE, 0xB0DE}, + {0xB0DF, 0xB0DF, 0xB0DF}, {0xB0E0, 0xB0E0, 0xB0E0}, + {0xB0E1, 0xB0E1, 0xB0E1}, {0xB0E2, 0xB0E2, 0xB0E2}, + {0xB0E3, 0xB0E3, 0xB0E3}, {0xB0E4, 0xB0E4, 0xB0E4}, + {0xB0E5, 0xB0E5, 0xB0E5}, {0xB0E6, 0xB0E6, 0xB0E6}, + {0xB0E7, 0xB0E7, 0xB0E7}, {0xB0E8, 0xB0E8, 0xB0E8}, + {0xB0E9, 0xB0E9, 0xB0E9}, {0xB0EA, 0xB0EA, 0xB0EA}, + {0xB0EB, 0xB0EB, 0xB0EB}, {0xB0EC, 0xB0EC, 0xB0EC}, + {0xB0ED, 0xB0ED, 0xB0ED}, {0xB0EE, 0xB0EE, 0xB0EE}, + {0xB0EF, 0xB0EF, 0xB0EF}, {0xB0F0, 0xB0F0, 0xB0F0}, + {0xB0F1, 0xB0F1, 0xB0F1}, {0xB0F2, 0xB0F2, 0xB0F2}, + {0xB0F3, 0xB0F3, 0xB0F3}, {0xB0F4, 0xB0F4, 0xB0F4}, + {0xB0F5, 0xB0F5, 0xB0F5}, {0xB0F6, 0xB0F6, 0xB0F6}, + {0xB0F7, 0xB0F7, 0xB0F7}, {0xB0F8, 0xB0F8, 0xB0F8}, + {0xB0F9, 0xB0F9, 0xB0F9}, {0xB0FA, 0xB0FA, 0xB0FA}, + {0xB0FB, 0xB0FB, 0xB0FB}, {0xB0FC, 0xB0FC, 0xB0FC}, + {0xB0FD, 0xB0FD, 0xB0FD}, {0xB0FE, 0xB0FE, 0xB0FE}, + {0xB0FF, 0xB0FF, 0xB0FF}, {0xB100, 0xB100, 0xB100}, + {0xB101, 0xB101, 0xB101}, {0xB102, 0xB102, 0xB102}, + {0xB103, 0xB103, 0xB103}, {0xB104, 0xB104, 0xB104}, + {0xB105, 0xB105, 0xB105}, {0xB106, 0xB106, 0xB106}, + {0xB107, 0xB107, 0xB107}, {0xB108, 0xB108, 0xB108}, + {0xB109, 0xB109, 0xB109}, {0xB10A, 0xB10A, 0xB10A}, + {0xB10B, 0xB10B, 0xB10B}, {0xB10C, 0xB10C, 0xB10C}, + {0xB10D, 0xB10D, 0xB10D}, {0xB10E, 0xB10E, 0xB10E}, + {0xB10F, 0xB10F, 0xB10F}, {0xB110, 0xB110, 0xB110}, + {0xB111, 0xB111, 0xB111}, {0xB112, 0xB112, 0xB112}, + {0xB113, 0xB113, 0xB113}, {0xB114, 0xB114, 0xB114}, + {0xB115, 0xB115, 0xB115}, {0xB116, 0xB116, 0xB116}, + {0xB117, 0xB117, 0xB117}, {0xB118, 0xB118, 0xB118}, + {0xB119, 0xB119, 0xB119}, {0xB11A, 0xB11A, 0xB11A}, + {0xB11B, 0xB11B, 0xB11B}, {0xB11C, 0xB11C, 0xB11C}, + {0xB11D, 0xB11D, 0xB11D}, {0xB11E, 0xB11E, 0xB11E}, + {0xB11F, 0xB11F, 0xB11F}, {0xB120, 0xB120, 0xB120}, + {0xB121, 0xB121, 0xB121}, {0xB122, 0xB122, 0xB122}, + {0xB123, 0xB123, 0xB123}, {0xB124, 0xB124, 0xB124}, + {0xB125, 0xB125, 0xB125}, {0xB126, 0xB126, 0xB126}, + {0xB127, 0xB127, 0xB127}, {0xB128, 0xB128, 0xB128}, + {0xB129, 0xB129, 0xB129}, {0xB12A, 0xB12A, 0xB12A}, + {0xB12B, 0xB12B, 0xB12B}, {0xB12C, 0xB12C, 0xB12C}, + {0xB12D, 0xB12D, 0xB12D}, {0xB12E, 0xB12E, 0xB12E}, + {0xB12F, 0xB12F, 0xB12F}, {0xB130, 0xB130, 0xB130}, + {0xB131, 0xB131, 0xB131}, {0xB132, 0xB132, 0xB132}, + {0xB133, 0xB133, 0xB133}, {0xB134, 0xB134, 0xB134}, + {0xB135, 0xB135, 0xB135}, {0xB136, 0xB136, 0xB136}, + {0xB137, 0xB137, 0xB137}, {0xB138, 0xB138, 0xB138}, + {0xB139, 0xB139, 0xB139}, {0xB13A, 0xB13A, 0xB13A}, + {0xB13B, 0xB13B, 0xB13B}, {0xB13C, 0xB13C, 0xB13C}, + {0xB13D, 0xB13D, 0xB13D}, {0xB13E, 0xB13E, 0xB13E}, + {0xB13F, 0xB13F, 0xB13F}, {0xB140, 0xB140, 0xB140}, + {0xB141, 0xB141, 0xB141}, {0xB142, 0xB142, 0xB142}, + {0xB143, 0xB143, 0xB143}, {0xB144, 0xB144, 0xB144}, + {0xB145, 0xB145, 0xB145}, {0xB146, 0xB146, 0xB146}, + {0xB147, 0xB147, 0xB147}, {0xB148, 0xB148, 0xB148}, + {0xB149, 0xB149, 0xB149}, {0xB14A, 0xB14A, 0xB14A}, + {0xB14B, 0xB14B, 0xB14B}, {0xB14C, 0xB14C, 0xB14C}, + {0xB14D, 0xB14D, 0xB14D}, {0xB14E, 0xB14E, 0xB14E}, + {0xB14F, 0xB14F, 0xB14F}, {0xB150, 0xB150, 0xB150}, + {0xB151, 0xB151, 0xB151}, {0xB152, 0xB152, 0xB152}, + {0xB153, 0xB153, 0xB153}, {0xB154, 0xB154, 0xB154}, + {0xB155, 0xB155, 0xB155}, {0xB156, 0xB156, 0xB156}, + {0xB157, 0xB157, 0xB157}, {0xB158, 0xB158, 0xB158}, + {0xB159, 0xB159, 0xB159}, {0xB15A, 0xB15A, 0xB15A}, + {0xB15B, 0xB15B, 0xB15B}, {0xB15C, 0xB15C, 0xB15C}, + {0xB15D, 0xB15D, 0xB15D}, {0xB15E, 0xB15E, 0xB15E}, + {0xB15F, 0xB15F, 0xB15F}, {0xB160, 0xB160, 0xB160}, + {0xB161, 0xB161, 0xB161}, {0xB162, 0xB162, 0xB162}, + {0xB163, 0xB163, 0xB163}, {0xB164, 0xB164, 0xB164}, + {0xB165, 0xB165, 0xB165}, {0xB166, 0xB166, 0xB166}, + {0xB167, 0xB167, 0xB167}, {0xB168, 0xB168, 0xB168}, + {0xB169, 0xB169, 0xB169}, {0xB16A, 0xB16A, 0xB16A}, + {0xB16B, 0xB16B, 0xB16B}, {0xB16C, 0xB16C, 0xB16C}, + {0xB16D, 0xB16D, 0xB16D}, {0xB16E, 0xB16E, 0xB16E}, + {0xB16F, 0xB16F, 0xB16F}, {0xB170, 0xB170, 0xB170}, + {0xB171, 0xB171, 0xB171}, {0xB172, 0xB172, 0xB172}, + {0xB173, 0xB173, 0xB173}, {0xB174, 0xB174, 0xB174}, + {0xB175, 0xB175, 0xB175}, {0xB176, 0xB176, 0xB176}, + {0xB177, 0xB177, 0xB177}, {0xB178, 0xB178, 0xB178}, + {0xB179, 0xB179, 0xB179}, {0xB17A, 0xB17A, 0xB17A}, + {0xB17B, 0xB17B, 0xB17B}, {0xB17C, 0xB17C, 0xB17C}, + {0xB17D, 0xB17D, 0xB17D}, {0xB17E, 0xB17E, 0xB17E}, + {0xB17F, 0xB17F, 0xB17F}, {0xB180, 0xB180, 0xB180}, + {0xB181, 0xB181, 0xB181}, {0xB182, 0xB182, 0xB182}, + {0xB183, 0xB183, 0xB183}, {0xB184, 0xB184, 0xB184}, + {0xB185, 0xB185, 0xB185}, {0xB186, 0xB186, 0xB186}, + {0xB187, 0xB187, 0xB187}, {0xB188, 0xB188, 0xB188}, + {0xB189, 0xB189, 0xB189}, {0xB18A, 0xB18A, 0xB18A}, + {0xB18B, 0xB18B, 0xB18B}, {0xB18C, 0xB18C, 0xB18C}, + {0xB18D, 0xB18D, 0xB18D}, {0xB18E, 0xB18E, 0xB18E}, + {0xB18F, 0xB18F, 0xB18F}, {0xB190, 0xB190, 0xB190}, + {0xB191, 0xB191, 0xB191}, {0xB192, 0xB192, 0xB192}, + {0xB193, 0xB193, 0xB193}, {0xB194, 0xB194, 0xB194}, + {0xB195, 0xB195, 0xB195}, {0xB196, 0xB196, 0xB196}, + {0xB197, 0xB197, 0xB197}, {0xB198, 0xB198, 0xB198}, + {0xB199, 0xB199, 0xB199}, {0xB19A, 0xB19A, 0xB19A}, + {0xB19B, 0xB19B, 0xB19B}, {0xB19C, 0xB19C, 0xB19C}, + {0xB19D, 0xB19D, 0xB19D}, {0xB19E, 0xB19E, 0xB19E}, + {0xB19F, 0xB19F, 0xB19F}, {0xB1A0, 0xB1A0, 0xB1A0}, + {0xB1A1, 0xB1A1, 0xB1A1}, {0xB1A2, 0xB1A2, 0xB1A2}, + {0xB1A3, 0xB1A3, 0xB1A3}, {0xB1A4, 0xB1A4, 0xB1A4}, + {0xB1A5, 0xB1A5, 0xB1A5}, {0xB1A6, 0xB1A6, 0xB1A6}, + {0xB1A7, 0xB1A7, 0xB1A7}, {0xB1A8, 0xB1A8, 0xB1A8}, + {0xB1A9, 0xB1A9, 0xB1A9}, {0xB1AA, 0xB1AA, 0xB1AA}, + {0xB1AB, 0xB1AB, 0xB1AB}, {0xB1AC, 0xB1AC, 0xB1AC}, + {0xB1AD, 0xB1AD, 0xB1AD}, {0xB1AE, 0xB1AE, 0xB1AE}, + {0xB1AF, 0xB1AF, 0xB1AF}, {0xB1B0, 0xB1B0, 0xB1B0}, + {0xB1B1, 0xB1B1, 0xB1B1}, {0xB1B2, 0xB1B2, 0xB1B2}, + {0xB1B3, 0xB1B3, 0xB1B3}, {0xB1B4, 0xB1B4, 0xB1B4}, + {0xB1B5, 0xB1B5, 0xB1B5}, {0xB1B6, 0xB1B6, 0xB1B6}, + {0xB1B7, 0xB1B7, 0xB1B7}, {0xB1B8, 0xB1B8, 0xB1B8}, + {0xB1B9, 0xB1B9, 0xB1B9}, {0xB1BA, 0xB1BA, 0xB1BA}, + {0xB1BB, 0xB1BB, 0xB1BB}, {0xB1BC, 0xB1BC, 0xB1BC}, + {0xB1BD, 0xB1BD, 0xB1BD}, {0xB1BE, 0xB1BE, 0xB1BE}, + {0xB1BF, 0xB1BF, 0xB1BF}, {0xB1C0, 0xB1C0, 0xB1C0}, + {0xB1C1, 0xB1C1, 0xB1C1}, {0xB1C2, 0xB1C2, 0xB1C2}, + {0xB1C3, 0xB1C3, 0xB1C3}, {0xB1C4, 0xB1C4, 0xB1C4}, + {0xB1C5, 0xB1C5, 0xB1C5}, {0xB1C6, 0xB1C6, 0xB1C6}, + {0xB1C7, 0xB1C7, 0xB1C7}, {0xB1C8, 0xB1C8, 0xB1C8}, + {0xB1C9, 0xB1C9, 0xB1C9}, {0xB1CA, 0xB1CA, 0xB1CA}, + {0xB1CB, 0xB1CB, 0xB1CB}, {0xB1CC, 0xB1CC, 0xB1CC}, + {0xB1CD, 0xB1CD, 0xB1CD}, {0xB1CE, 0xB1CE, 0xB1CE}, + {0xB1CF, 0xB1CF, 0xB1CF}, {0xB1D0, 0xB1D0, 0xB1D0}, + {0xB1D1, 0xB1D1, 0xB1D1}, {0xB1D2, 0xB1D2, 0xB1D2}, + {0xB1D3, 0xB1D3, 0xB1D3}, {0xB1D4, 0xB1D4, 0xB1D4}, + {0xB1D5, 0xB1D5, 0xB1D5}, {0xB1D6, 0xB1D6, 0xB1D6}, + {0xB1D7, 0xB1D7, 0xB1D7}, {0xB1D8, 0xB1D8, 0xB1D8}, + {0xB1D9, 0xB1D9, 0xB1D9}, {0xB1DA, 0xB1DA, 0xB1DA}, + {0xB1DB, 0xB1DB, 0xB1DB}, {0xB1DC, 0xB1DC, 0xB1DC}, + {0xB1DD, 0xB1DD, 0xB1DD}, {0xB1DE, 0xB1DE, 0xB1DE}, + {0xB1DF, 0xB1DF, 0xB1DF}, {0xB1E0, 0xB1E0, 0xB1E0}, + {0xB1E1, 0xB1E1, 0xB1E1}, {0xB1E2, 0xB1E2, 0xB1E2}, + {0xB1E3, 0xB1E3, 0xB1E3}, {0xB1E4, 0xB1E4, 0xB1E4}, + {0xB1E5, 0xB1E5, 0xB1E5}, {0xB1E6, 0xB1E6, 0xB1E6}, + {0xB1E7, 0xB1E7, 0xB1E7}, {0xB1E8, 0xB1E8, 0xB1E8}, + {0xB1E9, 0xB1E9, 0xB1E9}, {0xB1EA, 0xB1EA, 0xB1EA}, + {0xB1EB, 0xB1EB, 0xB1EB}, {0xB1EC, 0xB1EC, 0xB1EC}, + {0xB1ED, 0xB1ED, 0xB1ED}, {0xB1EE, 0xB1EE, 0xB1EE}, + {0xB1EF, 0xB1EF, 0xB1EF}, {0xB1F0, 0xB1F0, 0xB1F0}, + {0xB1F1, 0xB1F1, 0xB1F1}, {0xB1F2, 0xB1F2, 0xB1F2}, + {0xB1F3, 0xB1F3, 0xB1F3}, {0xB1F4, 0xB1F4, 0xB1F4}, + {0xB1F5, 0xB1F5, 0xB1F5}, {0xB1F6, 0xB1F6, 0xB1F6}, + {0xB1F7, 0xB1F7, 0xB1F7}, {0xB1F8, 0xB1F8, 0xB1F8}, + {0xB1F9, 0xB1F9, 0xB1F9}, {0xB1FA, 0xB1FA, 0xB1FA}, + {0xB1FB, 0xB1FB, 0xB1FB}, {0xB1FC, 0xB1FC, 0xB1FC}, + {0xB1FD, 0xB1FD, 0xB1FD}, {0xB1FE, 0xB1FE, 0xB1FE}, + {0xB1FF, 0xB1FF, 0xB1FF}, {0xB200, 0xB200, 0xB200}, + {0xB201, 0xB201, 0xB201}, {0xB202, 0xB202, 0xB202}, + {0xB203, 0xB203, 0xB203}, {0xB204, 0xB204, 0xB204}, + {0xB205, 0xB205, 0xB205}, {0xB206, 0xB206, 0xB206}, + {0xB207, 0xB207, 0xB207}, {0xB208, 0xB208, 0xB208}, + {0xB209, 0xB209, 0xB209}, {0xB20A, 0xB20A, 0xB20A}, + {0xB20B, 0xB20B, 0xB20B}, {0xB20C, 0xB20C, 0xB20C}, + {0xB20D, 0xB20D, 0xB20D}, {0xB20E, 0xB20E, 0xB20E}, + {0xB20F, 0xB20F, 0xB20F}, {0xB210, 0xB210, 0xB210}, + {0xB211, 0xB211, 0xB211}, {0xB212, 0xB212, 0xB212}, + {0xB213, 0xB213, 0xB213}, {0xB214, 0xB214, 0xB214}, + {0xB215, 0xB215, 0xB215}, {0xB216, 0xB216, 0xB216}, + {0xB217, 0xB217, 0xB217}, {0xB218, 0xB218, 0xB218}, + {0xB219, 0xB219, 0xB219}, {0xB21A, 0xB21A, 0xB21A}, + {0xB21B, 0xB21B, 0xB21B}, {0xB21C, 0xB21C, 0xB21C}, + {0xB21D, 0xB21D, 0xB21D}, {0xB21E, 0xB21E, 0xB21E}, + {0xB21F, 0xB21F, 0xB21F}, {0xB220, 0xB220, 0xB220}, + {0xB221, 0xB221, 0xB221}, {0xB222, 0xB222, 0xB222}, + {0xB223, 0xB223, 0xB223}, {0xB224, 0xB224, 0xB224}, + {0xB225, 0xB225, 0xB225}, {0xB226, 0xB226, 0xB226}, + {0xB227, 0xB227, 0xB227}, {0xB228, 0xB228, 0xB228}, + {0xB229, 0xB229, 0xB229}, {0xB22A, 0xB22A, 0xB22A}, + {0xB22B, 0xB22B, 0xB22B}, {0xB22C, 0xB22C, 0xB22C}, + {0xB22D, 0xB22D, 0xB22D}, {0xB22E, 0xB22E, 0xB22E}, + {0xB22F, 0xB22F, 0xB22F}, {0xB230, 0xB230, 0xB230}, + {0xB231, 0xB231, 0xB231}, {0xB232, 0xB232, 0xB232}, + {0xB233, 0xB233, 0xB233}, {0xB234, 0xB234, 0xB234}, + {0xB235, 0xB235, 0xB235}, {0xB236, 0xB236, 0xB236}, + {0xB237, 0xB237, 0xB237}, {0xB238, 0xB238, 0xB238}, + {0xB239, 0xB239, 0xB239}, {0xB23A, 0xB23A, 0xB23A}, + {0xB23B, 0xB23B, 0xB23B}, {0xB23C, 0xB23C, 0xB23C}, + {0xB23D, 0xB23D, 0xB23D}, {0xB23E, 0xB23E, 0xB23E}, + {0xB23F, 0xB23F, 0xB23F}, {0xB240, 0xB240, 0xB240}, + {0xB241, 0xB241, 0xB241}, {0xB242, 0xB242, 0xB242}, + {0xB243, 0xB243, 0xB243}, {0xB244, 0xB244, 0xB244}, + {0xB245, 0xB245, 0xB245}, {0xB246, 0xB246, 0xB246}, + {0xB247, 0xB247, 0xB247}, {0xB248, 0xB248, 0xB248}, + {0xB249, 0xB249, 0xB249}, {0xB24A, 0xB24A, 0xB24A}, + {0xB24B, 0xB24B, 0xB24B}, {0xB24C, 0xB24C, 0xB24C}, + {0xB24D, 0xB24D, 0xB24D}, {0xB24E, 0xB24E, 0xB24E}, + {0xB24F, 0xB24F, 0xB24F}, {0xB250, 0xB250, 0xB250}, + {0xB251, 0xB251, 0xB251}, {0xB252, 0xB252, 0xB252}, + {0xB253, 0xB253, 0xB253}, {0xB254, 0xB254, 0xB254}, + {0xB255, 0xB255, 0xB255}, {0xB256, 0xB256, 0xB256}, + {0xB257, 0xB257, 0xB257}, {0xB258, 0xB258, 0xB258}, + {0xB259, 0xB259, 0xB259}, {0xB25A, 0xB25A, 0xB25A}, + {0xB25B, 0xB25B, 0xB25B}, {0xB25C, 0xB25C, 0xB25C}, + {0xB25D, 0xB25D, 0xB25D}, {0xB25E, 0xB25E, 0xB25E}, + {0xB25F, 0xB25F, 0xB25F}, {0xB260, 0xB260, 0xB260}, + {0xB261, 0xB261, 0xB261}, {0xB262, 0xB262, 0xB262}, + {0xB263, 0xB263, 0xB263}, {0xB264, 0xB264, 0xB264}, + {0xB265, 0xB265, 0xB265}, {0xB266, 0xB266, 0xB266}, + {0xB267, 0xB267, 0xB267}, {0xB268, 0xB268, 0xB268}, + {0xB269, 0xB269, 0xB269}, {0xB26A, 0xB26A, 0xB26A}, + {0xB26B, 0xB26B, 0xB26B}, {0xB26C, 0xB26C, 0xB26C}, + {0xB26D, 0xB26D, 0xB26D}, {0xB26E, 0xB26E, 0xB26E}, + {0xB26F, 0xB26F, 0xB26F}, {0xB270, 0xB270, 0xB270}, + {0xB271, 0xB271, 0xB271}, {0xB272, 0xB272, 0xB272}, + {0xB273, 0xB273, 0xB273}, {0xB274, 0xB274, 0xB274}, + {0xB275, 0xB275, 0xB275}, {0xB276, 0xB276, 0xB276}, + {0xB277, 0xB277, 0xB277}, {0xB278, 0xB278, 0xB278}, + {0xB279, 0xB279, 0xB279}, {0xB27A, 0xB27A, 0xB27A}, + {0xB27B, 0xB27B, 0xB27B}, {0xB27C, 0xB27C, 0xB27C}, + {0xB27D, 0xB27D, 0xB27D}, {0xB27E, 0xB27E, 0xB27E}, + {0xB27F, 0xB27F, 0xB27F}, {0xB280, 0xB280, 0xB280}, + {0xB281, 0xB281, 0xB281}, {0xB282, 0xB282, 0xB282}, + {0xB283, 0xB283, 0xB283}, {0xB284, 0xB284, 0xB284}, + {0xB285, 0xB285, 0xB285}, {0xB286, 0xB286, 0xB286}, + {0xB287, 0xB287, 0xB287}, {0xB288, 0xB288, 0xB288}, + {0xB289, 0xB289, 0xB289}, {0xB28A, 0xB28A, 0xB28A}, + {0xB28B, 0xB28B, 0xB28B}, {0xB28C, 0xB28C, 0xB28C}, + {0xB28D, 0xB28D, 0xB28D}, {0xB28E, 0xB28E, 0xB28E}, + {0xB28F, 0xB28F, 0xB28F}, {0xB290, 0xB290, 0xB290}, + {0xB291, 0xB291, 0xB291}, {0xB292, 0xB292, 0xB292}, + {0xB293, 0xB293, 0xB293}, {0xB294, 0xB294, 0xB294}, + {0xB295, 0xB295, 0xB295}, {0xB296, 0xB296, 0xB296}, + {0xB297, 0xB297, 0xB297}, {0xB298, 0xB298, 0xB298}, + {0xB299, 0xB299, 0xB299}, {0xB29A, 0xB29A, 0xB29A}, + {0xB29B, 0xB29B, 0xB29B}, {0xB29C, 0xB29C, 0xB29C}, + {0xB29D, 0xB29D, 0xB29D}, {0xB29E, 0xB29E, 0xB29E}, + {0xB29F, 0xB29F, 0xB29F}, {0xB2A0, 0xB2A0, 0xB2A0}, + {0xB2A1, 0xB2A1, 0xB2A1}, {0xB2A2, 0xB2A2, 0xB2A2}, + {0xB2A3, 0xB2A3, 0xB2A3}, {0xB2A4, 0xB2A4, 0xB2A4}, + {0xB2A5, 0xB2A5, 0xB2A5}, {0xB2A6, 0xB2A6, 0xB2A6}, + {0xB2A7, 0xB2A7, 0xB2A7}, {0xB2A8, 0xB2A8, 0xB2A8}, + {0xB2A9, 0xB2A9, 0xB2A9}, {0xB2AA, 0xB2AA, 0xB2AA}, + {0xB2AB, 0xB2AB, 0xB2AB}, {0xB2AC, 0xB2AC, 0xB2AC}, + {0xB2AD, 0xB2AD, 0xB2AD}, {0xB2AE, 0xB2AE, 0xB2AE}, + {0xB2AF, 0xB2AF, 0xB2AF}, {0xB2B0, 0xB2B0, 0xB2B0}, + {0xB2B1, 0xB2B1, 0xB2B1}, {0xB2B2, 0xB2B2, 0xB2B2}, + {0xB2B3, 0xB2B3, 0xB2B3}, {0xB2B4, 0xB2B4, 0xB2B4}, + {0xB2B5, 0xB2B5, 0xB2B5}, {0xB2B6, 0xB2B6, 0xB2B6}, + {0xB2B7, 0xB2B7, 0xB2B7}, {0xB2B8, 0xB2B8, 0xB2B8}, + {0xB2B9, 0xB2B9, 0xB2B9}, {0xB2BA, 0xB2BA, 0xB2BA}, + {0xB2BB, 0xB2BB, 0xB2BB}, {0xB2BC, 0xB2BC, 0xB2BC}, + {0xB2BD, 0xB2BD, 0xB2BD}, {0xB2BE, 0xB2BE, 0xB2BE}, + {0xB2BF, 0xB2BF, 0xB2BF}, {0xB2C0, 0xB2C0, 0xB2C0}, + {0xB2C1, 0xB2C1, 0xB2C1}, {0xB2C2, 0xB2C2, 0xB2C2}, + {0xB2C3, 0xB2C3, 0xB2C3}, {0xB2C4, 0xB2C4, 0xB2C4}, + {0xB2C5, 0xB2C5, 0xB2C5}, {0xB2C6, 0xB2C6, 0xB2C6}, + {0xB2C7, 0xB2C7, 0xB2C7}, {0xB2C8, 0xB2C8, 0xB2C8}, + {0xB2C9, 0xB2C9, 0xB2C9}, {0xB2CA, 0xB2CA, 0xB2CA}, + {0xB2CB, 0xB2CB, 0xB2CB}, {0xB2CC, 0xB2CC, 0xB2CC}, + {0xB2CD, 0xB2CD, 0xB2CD}, {0xB2CE, 0xB2CE, 0xB2CE}, + {0xB2CF, 0xB2CF, 0xB2CF}, {0xB2D0, 0xB2D0, 0xB2D0}, + {0xB2D1, 0xB2D1, 0xB2D1}, {0xB2D2, 0xB2D2, 0xB2D2}, + {0xB2D3, 0xB2D3, 0xB2D3}, {0xB2D4, 0xB2D4, 0xB2D4}, + {0xB2D5, 0xB2D5, 0xB2D5}, {0xB2D6, 0xB2D6, 0xB2D6}, + {0xB2D7, 0xB2D7, 0xB2D7}, {0xB2D8, 0xB2D8, 0xB2D8}, + {0xB2D9, 0xB2D9, 0xB2D9}, {0xB2DA, 0xB2DA, 0xB2DA}, + {0xB2DB, 0xB2DB, 0xB2DB}, {0xB2DC, 0xB2DC, 0xB2DC}, + {0xB2DD, 0xB2DD, 0xB2DD}, {0xB2DE, 0xB2DE, 0xB2DE}, + {0xB2DF, 0xB2DF, 0xB2DF}, {0xB2E0, 0xB2E0, 0xB2E0}, + {0xB2E1, 0xB2E1, 0xB2E1}, {0xB2E2, 0xB2E2, 0xB2E2}, + {0xB2E3, 0xB2E3, 0xB2E3}, {0xB2E4, 0xB2E4, 0xB2E4}, + {0xB2E5, 0xB2E5, 0xB2E5}, {0xB2E6, 0xB2E6, 0xB2E6}, + {0xB2E7, 0xB2E7, 0xB2E7}, {0xB2E8, 0xB2E8, 0xB2E8}, + {0xB2E9, 0xB2E9, 0xB2E9}, {0xB2EA, 0xB2EA, 0xB2EA}, + {0xB2EB, 0xB2EB, 0xB2EB}, {0xB2EC, 0xB2EC, 0xB2EC}, + {0xB2ED, 0xB2ED, 0xB2ED}, {0xB2EE, 0xB2EE, 0xB2EE}, + {0xB2EF, 0xB2EF, 0xB2EF}, {0xB2F0, 0xB2F0, 0xB2F0}, + {0xB2F1, 0xB2F1, 0xB2F1}, {0xB2F2, 0xB2F2, 0xB2F2}, + {0xB2F3, 0xB2F3, 0xB2F3}, {0xB2F4, 0xB2F4, 0xB2F4}, + {0xB2F5, 0xB2F5, 0xB2F5}, {0xB2F6, 0xB2F6, 0xB2F6}, + {0xB2F7, 0xB2F7, 0xB2F7}, {0xB2F8, 0xB2F8, 0xB2F8}, + {0xB2F9, 0xB2F9, 0xB2F9}, {0xB2FA, 0xB2FA, 0xB2FA}, + {0xB2FB, 0xB2FB, 0xB2FB}, {0xB2FC, 0xB2FC, 0xB2FC}, + {0xB2FD, 0xB2FD, 0xB2FD}, {0xB2FE, 0xB2FE, 0xB2FE}, + {0xB2FF, 0xB2FF, 0xB2FF}, {0xB300, 0xB300, 0xB300}, + {0xB301, 0xB301, 0xB301}, {0xB302, 0xB302, 0xB302}, + {0xB303, 0xB303, 0xB303}, {0xB304, 0xB304, 0xB304}, + {0xB305, 0xB305, 0xB305}, {0xB306, 0xB306, 0xB306}, + {0xB307, 0xB307, 0xB307}, {0xB308, 0xB308, 0xB308}, + {0xB309, 0xB309, 0xB309}, {0xB30A, 0xB30A, 0xB30A}, + {0xB30B, 0xB30B, 0xB30B}, {0xB30C, 0xB30C, 0xB30C}, + {0xB30D, 0xB30D, 0xB30D}, {0xB30E, 0xB30E, 0xB30E}, + {0xB30F, 0xB30F, 0xB30F}, {0xB310, 0xB310, 0xB310}, + {0xB311, 0xB311, 0xB311}, {0xB312, 0xB312, 0xB312}, + {0xB313, 0xB313, 0xB313}, {0xB314, 0xB314, 0xB314}, + {0xB315, 0xB315, 0xB315}, {0xB316, 0xB316, 0xB316}, + {0xB317, 0xB317, 0xB317}, {0xB318, 0xB318, 0xB318}, + {0xB319, 0xB319, 0xB319}, {0xB31A, 0xB31A, 0xB31A}, + {0xB31B, 0xB31B, 0xB31B}, {0xB31C, 0xB31C, 0xB31C}, + {0xB31D, 0xB31D, 0xB31D}, {0xB31E, 0xB31E, 0xB31E}, + {0xB31F, 0xB31F, 0xB31F}, {0xB320, 0xB320, 0xB320}, + {0xB321, 0xB321, 0xB321}, {0xB322, 0xB322, 0xB322}, + {0xB323, 0xB323, 0xB323}, {0xB324, 0xB324, 0xB324}, + {0xB325, 0xB325, 0xB325}, {0xB326, 0xB326, 0xB326}, + {0xB327, 0xB327, 0xB327}, {0xB328, 0xB328, 0xB328}, + {0xB329, 0xB329, 0xB329}, {0xB32A, 0xB32A, 0xB32A}, + {0xB32B, 0xB32B, 0xB32B}, {0xB32C, 0xB32C, 0xB32C}, + {0xB32D, 0xB32D, 0xB32D}, {0xB32E, 0xB32E, 0xB32E}, + {0xB32F, 0xB32F, 0xB32F}, {0xB330, 0xB330, 0xB330}, + {0xB331, 0xB331, 0xB331}, {0xB332, 0xB332, 0xB332}, + {0xB333, 0xB333, 0xB333}, {0xB334, 0xB334, 0xB334}, + {0xB335, 0xB335, 0xB335}, {0xB336, 0xB336, 0xB336}, + {0xB337, 0xB337, 0xB337}, {0xB338, 0xB338, 0xB338}, + {0xB339, 0xB339, 0xB339}, {0xB33A, 0xB33A, 0xB33A}, + {0xB33B, 0xB33B, 0xB33B}, {0xB33C, 0xB33C, 0xB33C}, + {0xB33D, 0xB33D, 0xB33D}, {0xB33E, 0xB33E, 0xB33E}, + {0xB33F, 0xB33F, 0xB33F}, {0xB340, 0xB340, 0xB340}, + {0xB341, 0xB341, 0xB341}, {0xB342, 0xB342, 0xB342}, + {0xB343, 0xB343, 0xB343}, {0xB344, 0xB344, 0xB344}, + {0xB345, 0xB345, 0xB345}, {0xB346, 0xB346, 0xB346}, + {0xB347, 0xB347, 0xB347}, {0xB348, 0xB348, 0xB348}, + {0xB349, 0xB349, 0xB349}, {0xB34A, 0xB34A, 0xB34A}, + {0xB34B, 0xB34B, 0xB34B}, {0xB34C, 0xB34C, 0xB34C}, + {0xB34D, 0xB34D, 0xB34D}, {0xB34E, 0xB34E, 0xB34E}, + {0xB34F, 0xB34F, 0xB34F}, {0xB350, 0xB350, 0xB350}, + {0xB351, 0xB351, 0xB351}, {0xB352, 0xB352, 0xB352}, + {0xB353, 0xB353, 0xB353}, {0xB354, 0xB354, 0xB354}, + {0xB355, 0xB355, 0xB355}, {0xB356, 0xB356, 0xB356}, + {0xB357, 0xB357, 0xB357}, {0xB358, 0xB358, 0xB358}, + {0xB359, 0xB359, 0xB359}, {0xB35A, 0xB35A, 0xB35A}, + {0xB35B, 0xB35B, 0xB35B}, {0xB35C, 0xB35C, 0xB35C}, + {0xB35D, 0xB35D, 0xB35D}, {0xB35E, 0xB35E, 0xB35E}, + {0xB35F, 0xB35F, 0xB35F}, {0xB360, 0xB360, 0xB360}, + {0xB361, 0xB361, 0xB361}, {0xB362, 0xB362, 0xB362}, + {0xB363, 0xB363, 0xB363}, {0xB364, 0xB364, 0xB364}, + {0xB365, 0xB365, 0xB365}, {0xB366, 0xB366, 0xB366}, + {0xB367, 0xB367, 0xB367}, {0xB368, 0xB368, 0xB368}, + {0xB369, 0xB369, 0xB369}, {0xB36A, 0xB36A, 0xB36A}, + {0xB36B, 0xB36B, 0xB36B}, {0xB36C, 0xB36C, 0xB36C}, + {0xB36D, 0xB36D, 0xB36D}, {0xB36E, 0xB36E, 0xB36E}, + {0xB36F, 0xB36F, 0xB36F}, {0xB370, 0xB370, 0xB370}, + {0xB371, 0xB371, 0xB371}, {0xB372, 0xB372, 0xB372}, + {0xB373, 0xB373, 0xB373}, {0xB374, 0xB374, 0xB374}, + {0xB375, 0xB375, 0xB375}, {0xB376, 0xB376, 0xB376}, + {0xB377, 0xB377, 0xB377}, {0xB378, 0xB378, 0xB378}, + {0xB379, 0xB379, 0xB379}, {0xB37A, 0xB37A, 0xB37A}, + {0xB37B, 0xB37B, 0xB37B}, {0xB37C, 0xB37C, 0xB37C}, + {0xB37D, 0xB37D, 0xB37D}, {0xB37E, 0xB37E, 0xB37E}, + {0xB37F, 0xB37F, 0xB37F}, {0xB380, 0xB380, 0xB380}, + {0xB381, 0xB381, 0xB381}, {0xB382, 0xB382, 0xB382}, + {0xB383, 0xB383, 0xB383}, {0xB384, 0xB384, 0xB384}, + {0xB385, 0xB385, 0xB385}, {0xB386, 0xB386, 0xB386}, + {0xB387, 0xB387, 0xB387}, {0xB388, 0xB388, 0xB388}, + {0xB389, 0xB389, 0xB389}, {0xB38A, 0xB38A, 0xB38A}, + {0xB38B, 0xB38B, 0xB38B}, {0xB38C, 0xB38C, 0xB38C}, + {0xB38D, 0xB38D, 0xB38D}, {0xB38E, 0xB38E, 0xB38E}, + {0xB38F, 0xB38F, 0xB38F}, {0xB390, 0xB390, 0xB390}, + {0xB391, 0xB391, 0xB391}, {0xB392, 0xB392, 0xB392}, + {0xB393, 0xB393, 0xB393}, {0xB394, 0xB394, 0xB394}, + {0xB395, 0xB395, 0xB395}, {0xB396, 0xB396, 0xB396}, + {0xB397, 0xB397, 0xB397}, {0xB398, 0xB398, 0xB398}, + {0xB399, 0xB399, 0xB399}, {0xB39A, 0xB39A, 0xB39A}, + {0xB39B, 0xB39B, 0xB39B}, {0xB39C, 0xB39C, 0xB39C}, + {0xB39D, 0xB39D, 0xB39D}, {0xB39E, 0xB39E, 0xB39E}, + {0xB39F, 0xB39F, 0xB39F}, {0xB3A0, 0xB3A0, 0xB3A0}, + {0xB3A1, 0xB3A1, 0xB3A1}, {0xB3A2, 0xB3A2, 0xB3A2}, + {0xB3A3, 0xB3A3, 0xB3A3}, {0xB3A4, 0xB3A4, 0xB3A4}, + {0xB3A5, 0xB3A5, 0xB3A5}, {0xB3A6, 0xB3A6, 0xB3A6}, + {0xB3A7, 0xB3A7, 0xB3A7}, {0xB3A8, 0xB3A8, 0xB3A8}, + {0xB3A9, 0xB3A9, 0xB3A9}, {0xB3AA, 0xB3AA, 0xB3AA}, + {0xB3AB, 0xB3AB, 0xB3AB}, {0xB3AC, 0xB3AC, 0xB3AC}, + {0xB3AD, 0xB3AD, 0xB3AD}, {0xB3AE, 0xB3AE, 0xB3AE}, + {0xB3AF, 0xB3AF, 0xB3AF}, {0xB3B0, 0xB3B0, 0xB3B0}, + {0xB3B1, 0xB3B1, 0xB3B1}, {0xB3B2, 0xB3B2, 0xB3B2}, + {0xB3B3, 0xB3B3, 0xB3B3}, {0xB3B4, 0xB3B4, 0xB3B4}, + {0xB3B5, 0xB3B5, 0xB3B5}, {0xB3B6, 0xB3B6, 0xB3B6}, + {0xB3B7, 0xB3B7, 0xB3B7}, {0xB3B8, 0xB3B8, 0xB3B8}, + {0xB3B9, 0xB3B9, 0xB3B9}, {0xB3BA, 0xB3BA, 0xB3BA}, + {0xB3BB, 0xB3BB, 0xB3BB}, {0xB3BC, 0xB3BC, 0xB3BC}, + {0xB3BD, 0xB3BD, 0xB3BD}, {0xB3BE, 0xB3BE, 0xB3BE}, + {0xB3BF, 0xB3BF, 0xB3BF}, {0xB3C0, 0xB3C0, 0xB3C0}, + {0xB3C1, 0xB3C1, 0xB3C1}, {0xB3C2, 0xB3C2, 0xB3C2}, + {0xB3C3, 0xB3C3, 0xB3C3}, {0xB3C4, 0xB3C4, 0xB3C4}, + {0xB3C5, 0xB3C5, 0xB3C5}, {0xB3C6, 0xB3C6, 0xB3C6}, + {0xB3C7, 0xB3C7, 0xB3C7}, {0xB3C8, 0xB3C8, 0xB3C8}, + {0xB3C9, 0xB3C9, 0xB3C9}, {0xB3CA, 0xB3CA, 0xB3CA}, + {0xB3CB, 0xB3CB, 0xB3CB}, {0xB3CC, 0xB3CC, 0xB3CC}, + {0xB3CD, 0xB3CD, 0xB3CD}, {0xB3CE, 0xB3CE, 0xB3CE}, + {0xB3CF, 0xB3CF, 0xB3CF}, {0xB3D0, 0xB3D0, 0xB3D0}, + {0xB3D1, 0xB3D1, 0xB3D1}, {0xB3D2, 0xB3D2, 0xB3D2}, + {0xB3D3, 0xB3D3, 0xB3D3}, {0xB3D4, 0xB3D4, 0xB3D4}, + {0xB3D5, 0xB3D5, 0xB3D5}, {0xB3D6, 0xB3D6, 0xB3D6}, + {0xB3D7, 0xB3D7, 0xB3D7}, {0xB3D8, 0xB3D8, 0xB3D8}, + {0xB3D9, 0xB3D9, 0xB3D9}, {0xB3DA, 0xB3DA, 0xB3DA}, + {0xB3DB, 0xB3DB, 0xB3DB}, {0xB3DC, 0xB3DC, 0xB3DC}, + {0xB3DD, 0xB3DD, 0xB3DD}, {0xB3DE, 0xB3DE, 0xB3DE}, + {0xB3DF, 0xB3DF, 0xB3DF}, {0xB3E0, 0xB3E0, 0xB3E0}, + {0xB3E1, 0xB3E1, 0xB3E1}, {0xB3E2, 0xB3E2, 0xB3E2}, + {0xB3E3, 0xB3E3, 0xB3E3}, {0xB3E4, 0xB3E4, 0xB3E4}, + {0xB3E5, 0xB3E5, 0xB3E5}, {0xB3E6, 0xB3E6, 0xB3E6}, + {0xB3E7, 0xB3E7, 0xB3E7}, {0xB3E8, 0xB3E8, 0xB3E8}, + {0xB3E9, 0xB3E9, 0xB3E9}, {0xB3EA, 0xB3EA, 0xB3EA}, + {0xB3EB, 0xB3EB, 0xB3EB}, {0xB3EC, 0xB3EC, 0xB3EC}, + {0xB3ED, 0xB3ED, 0xB3ED}, {0xB3EE, 0xB3EE, 0xB3EE}, + {0xB3EF, 0xB3EF, 0xB3EF}, {0xB3F0, 0xB3F0, 0xB3F0}, + {0xB3F1, 0xB3F1, 0xB3F1}, {0xB3F2, 0xB3F2, 0xB3F2}, + {0xB3F3, 0xB3F3, 0xB3F3}, {0xB3F4, 0xB3F4, 0xB3F4}, + {0xB3F5, 0xB3F5, 0xB3F5}, {0xB3F6, 0xB3F6, 0xB3F6}, + {0xB3F7, 0xB3F7, 0xB3F7}, {0xB3F8, 0xB3F8, 0xB3F8}, + {0xB3F9, 0xB3F9, 0xB3F9}, {0xB3FA, 0xB3FA, 0xB3FA}, + {0xB3FB, 0xB3FB, 0xB3FB}, {0xB3FC, 0xB3FC, 0xB3FC}, + {0xB3FD, 0xB3FD, 0xB3FD}, {0xB3FE, 0xB3FE, 0xB3FE}, + {0xB3FF, 0xB3FF, 0xB3FF}, {0xB400, 0xB400, 0xB400}, + {0xB401, 0xB401, 0xB401}, {0xB402, 0xB402, 0xB402}, + {0xB403, 0xB403, 0xB403}, {0xB404, 0xB404, 0xB404}, + {0xB405, 0xB405, 0xB405}, {0xB406, 0xB406, 0xB406}, + {0xB407, 0xB407, 0xB407}, {0xB408, 0xB408, 0xB408}, + {0xB409, 0xB409, 0xB409}, {0xB40A, 0xB40A, 0xB40A}, + {0xB40B, 0xB40B, 0xB40B}, {0xB40C, 0xB40C, 0xB40C}, + {0xB40D, 0xB40D, 0xB40D}, {0xB40E, 0xB40E, 0xB40E}, + {0xB40F, 0xB40F, 0xB40F}, {0xB410, 0xB410, 0xB410}, + {0xB411, 0xB411, 0xB411}, {0xB412, 0xB412, 0xB412}, + {0xB413, 0xB413, 0xB413}, {0xB414, 0xB414, 0xB414}, + {0xB415, 0xB415, 0xB415}, {0xB416, 0xB416, 0xB416}, + {0xB417, 0xB417, 0xB417}, {0xB418, 0xB418, 0xB418}, + {0xB419, 0xB419, 0xB419}, {0xB41A, 0xB41A, 0xB41A}, + {0xB41B, 0xB41B, 0xB41B}, {0xB41C, 0xB41C, 0xB41C}, + {0xB41D, 0xB41D, 0xB41D}, {0xB41E, 0xB41E, 0xB41E}, + {0xB41F, 0xB41F, 0xB41F}, {0xB420, 0xB420, 0xB420}, + {0xB421, 0xB421, 0xB421}, {0xB422, 0xB422, 0xB422}, + {0xB423, 0xB423, 0xB423}, {0xB424, 0xB424, 0xB424}, + {0xB425, 0xB425, 0xB425}, {0xB426, 0xB426, 0xB426}, + {0xB427, 0xB427, 0xB427}, {0xB428, 0xB428, 0xB428}, + {0xB429, 0xB429, 0xB429}, {0xB42A, 0xB42A, 0xB42A}, + {0xB42B, 0xB42B, 0xB42B}, {0xB42C, 0xB42C, 0xB42C}, + {0xB42D, 0xB42D, 0xB42D}, {0xB42E, 0xB42E, 0xB42E}, + {0xB42F, 0xB42F, 0xB42F}, {0xB430, 0xB430, 0xB430}, + {0xB431, 0xB431, 0xB431}, {0xB432, 0xB432, 0xB432}, + {0xB433, 0xB433, 0xB433}, {0xB434, 0xB434, 0xB434}, + {0xB435, 0xB435, 0xB435}, {0xB436, 0xB436, 0xB436}, + {0xB437, 0xB437, 0xB437}, {0xB438, 0xB438, 0xB438}, + {0xB439, 0xB439, 0xB439}, {0xB43A, 0xB43A, 0xB43A}, + {0xB43B, 0xB43B, 0xB43B}, {0xB43C, 0xB43C, 0xB43C}, + {0xB43D, 0xB43D, 0xB43D}, {0xB43E, 0xB43E, 0xB43E}, + {0xB43F, 0xB43F, 0xB43F}, {0xB440, 0xB440, 0xB440}, + {0xB441, 0xB441, 0xB441}, {0xB442, 0xB442, 0xB442}, + {0xB443, 0xB443, 0xB443}, {0xB444, 0xB444, 0xB444}, + {0xB445, 0xB445, 0xB445}, {0xB446, 0xB446, 0xB446}, + {0xB447, 0xB447, 0xB447}, {0xB448, 0xB448, 0xB448}, + {0xB449, 0xB449, 0xB449}, {0xB44A, 0xB44A, 0xB44A}, + {0xB44B, 0xB44B, 0xB44B}, {0xB44C, 0xB44C, 0xB44C}, + {0xB44D, 0xB44D, 0xB44D}, {0xB44E, 0xB44E, 0xB44E}, + {0xB44F, 0xB44F, 0xB44F}, {0xB450, 0xB450, 0xB450}, + {0xB451, 0xB451, 0xB451}, {0xB452, 0xB452, 0xB452}, + {0xB453, 0xB453, 0xB453}, {0xB454, 0xB454, 0xB454}, + {0xB455, 0xB455, 0xB455}, {0xB456, 0xB456, 0xB456}, + {0xB457, 0xB457, 0xB457}, {0xB458, 0xB458, 0xB458}, + {0xB459, 0xB459, 0xB459}, {0xB45A, 0xB45A, 0xB45A}, + {0xB45B, 0xB45B, 0xB45B}, {0xB45C, 0xB45C, 0xB45C}, + {0xB45D, 0xB45D, 0xB45D}, {0xB45E, 0xB45E, 0xB45E}, + {0xB45F, 0xB45F, 0xB45F}, {0xB460, 0xB460, 0xB460}, + {0xB461, 0xB461, 0xB461}, {0xB462, 0xB462, 0xB462}, + {0xB463, 0xB463, 0xB463}, {0xB464, 0xB464, 0xB464}, + {0xB465, 0xB465, 0xB465}, {0xB466, 0xB466, 0xB466}, + {0xB467, 0xB467, 0xB467}, {0xB468, 0xB468, 0xB468}, + {0xB469, 0xB469, 0xB469}, {0xB46A, 0xB46A, 0xB46A}, + {0xB46B, 0xB46B, 0xB46B}, {0xB46C, 0xB46C, 0xB46C}, + {0xB46D, 0xB46D, 0xB46D}, {0xB46E, 0xB46E, 0xB46E}, + {0xB46F, 0xB46F, 0xB46F}, {0xB470, 0xB470, 0xB470}, + {0xB471, 0xB471, 0xB471}, {0xB472, 0xB472, 0xB472}, + {0xB473, 0xB473, 0xB473}, {0xB474, 0xB474, 0xB474}, + {0xB475, 0xB475, 0xB475}, {0xB476, 0xB476, 0xB476}, + {0xB477, 0xB477, 0xB477}, {0xB478, 0xB478, 0xB478}, + {0xB479, 0xB479, 0xB479}, {0xB47A, 0xB47A, 0xB47A}, + {0xB47B, 0xB47B, 0xB47B}, {0xB47C, 0xB47C, 0xB47C}, + {0xB47D, 0xB47D, 0xB47D}, {0xB47E, 0xB47E, 0xB47E}, + {0xB47F, 0xB47F, 0xB47F}, {0xB480, 0xB480, 0xB480}, + {0xB481, 0xB481, 0xB481}, {0xB482, 0xB482, 0xB482}, + {0xB483, 0xB483, 0xB483}, {0xB484, 0xB484, 0xB484}, + {0xB485, 0xB485, 0xB485}, {0xB486, 0xB486, 0xB486}, + {0xB487, 0xB487, 0xB487}, {0xB488, 0xB488, 0xB488}, + {0xB489, 0xB489, 0xB489}, {0xB48A, 0xB48A, 0xB48A}, + {0xB48B, 0xB48B, 0xB48B}, {0xB48C, 0xB48C, 0xB48C}, + {0xB48D, 0xB48D, 0xB48D}, {0xB48E, 0xB48E, 0xB48E}, + {0xB48F, 0xB48F, 0xB48F}, {0xB490, 0xB490, 0xB490}, + {0xB491, 0xB491, 0xB491}, {0xB492, 0xB492, 0xB492}, + {0xB493, 0xB493, 0xB493}, {0xB494, 0xB494, 0xB494}, + {0xB495, 0xB495, 0xB495}, {0xB496, 0xB496, 0xB496}, + {0xB497, 0xB497, 0xB497}, {0xB498, 0xB498, 0xB498}, + {0xB499, 0xB499, 0xB499}, {0xB49A, 0xB49A, 0xB49A}, + {0xB49B, 0xB49B, 0xB49B}, {0xB49C, 0xB49C, 0xB49C}, + {0xB49D, 0xB49D, 0xB49D}, {0xB49E, 0xB49E, 0xB49E}, + {0xB49F, 0xB49F, 0xB49F}, {0xB4A0, 0xB4A0, 0xB4A0}, + {0xB4A1, 0xB4A1, 0xB4A1}, {0xB4A2, 0xB4A2, 0xB4A2}, + {0xB4A3, 0xB4A3, 0xB4A3}, {0xB4A4, 0xB4A4, 0xB4A4}, + {0xB4A5, 0xB4A5, 0xB4A5}, {0xB4A6, 0xB4A6, 0xB4A6}, + {0xB4A7, 0xB4A7, 0xB4A7}, {0xB4A8, 0xB4A8, 0xB4A8}, + {0xB4A9, 0xB4A9, 0xB4A9}, {0xB4AA, 0xB4AA, 0xB4AA}, + {0xB4AB, 0xB4AB, 0xB4AB}, {0xB4AC, 0xB4AC, 0xB4AC}, + {0xB4AD, 0xB4AD, 0xB4AD}, {0xB4AE, 0xB4AE, 0xB4AE}, + {0xB4AF, 0xB4AF, 0xB4AF}, {0xB4B0, 0xB4B0, 0xB4B0}, + {0xB4B1, 0xB4B1, 0xB4B1}, {0xB4B2, 0xB4B2, 0xB4B2}, + {0xB4B3, 0xB4B3, 0xB4B3}, {0xB4B4, 0xB4B4, 0xB4B4}, + {0xB4B5, 0xB4B5, 0xB4B5}, {0xB4B6, 0xB4B6, 0xB4B6}, + {0xB4B7, 0xB4B7, 0xB4B7}, {0xB4B8, 0xB4B8, 0xB4B8}, + {0xB4B9, 0xB4B9, 0xB4B9}, {0xB4BA, 0xB4BA, 0xB4BA}, + {0xB4BB, 0xB4BB, 0xB4BB}, {0xB4BC, 0xB4BC, 0xB4BC}, + {0xB4BD, 0xB4BD, 0xB4BD}, {0xB4BE, 0xB4BE, 0xB4BE}, + {0xB4BF, 0xB4BF, 0xB4BF}, {0xB4C0, 0xB4C0, 0xB4C0}, + {0xB4C1, 0xB4C1, 0xB4C1}, {0xB4C2, 0xB4C2, 0xB4C2}, + {0xB4C3, 0xB4C3, 0xB4C3}, {0xB4C4, 0xB4C4, 0xB4C4}, + {0xB4C5, 0xB4C5, 0xB4C5}, {0xB4C6, 0xB4C6, 0xB4C6}, + {0xB4C7, 0xB4C7, 0xB4C7}, {0xB4C8, 0xB4C8, 0xB4C8}, + {0xB4C9, 0xB4C9, 0xB4C9}, {0xB4CA, 0xB4CA, 0xB4CA}, + {0xB4CB, 0xB4CB, 0xB4CB}, {0xB4CC, 0xB4CC, 0xB4CC}, + {0xB4CD, 0xB4CD, 0xB4CD}, {0xB4CE, 0xB4CE, 0xB4CE}, + {0xB4CF, 0xB4CF, 0xB4CF}, {0xB4D0, 0xB4D0, 0xB4D0}, + {0xB4D1, 0xB4D1, 0xB4D1}, {0xB4D2, 0xB4D2, 0xB4D2}, + {0xB4D3, 0xB4D3, 0xB4D3}, {0xB4D4, 0xB4D4, 0xB4D4}, + {0xB4D5, 0xB4D5, 0xB4D5}, {0xB4D6, 0xB4D6, 0xB4D6}, + {0xB4D7, 0xB4D7, 0xB4D7}, {0xB4D8, 0xB4D8, 0xB4D8}, + {0xB4D9, 0xB4D9, 0xB4D9}, {0xB4DA, 0xB4DA, 0xB4DA}, + {0xB4DB, 0xB4DB, 0xB4DB}, {0xB4DC, 0xB4DC, 0xB4DC}, + {0xB4DD, 0xB4DD, 0xB4DD}, {0xB4DE, 0xB4DE, 0xB4DE}, + {0xB4DF, 0xB4DF, 0xB4DF}, {0xB4E0, 0xB4E0, 0xB4E0}, + {0xB4E1, 0xB4E1, 0xB4E1}, {0xB4E2, 0xB4E2, 0xB4E2}, + {0xB4E3, 0xB4E3, 0xB4E3}, {0xB4E4, 0xB4E4, 0xB4E4}, + {0xB4E5, 0xB4E5, 0xB4E5}, {0xB4E6, 0xB4E6, 0xB4E6}, + {0xB4E7, 0xB4E7, 0xB4E7}, {0xB4E8, 0xB4E8, 0xB4E8}, + {0xB4E9, 0xB4E9, 0xB4E9}, {0xB4EA, 0xB4EA, 0xB4EA}, + {0xB4EB, 0xB4EB, 0xB4EB}, {0xB4EC, 0xB4EC, 0xB4EC}, + {0xB4ED, 0xB4ED, 0xB4ED}, {0xB4EE, 0xB4EE, 0xB4EE}, + {0xB4EF, 0xB4EF, 0xB4EF}, {0xB4F0, 0xB4F0, 0xB4F0}, + {0xB4F1, 0xB4F1, 0xB4F1}, {0xB4F2, 0xB4F2, 0xB4F2}, + {0xB4F3, 0xB4F3, 0xB4F3}, {0xB4F4, 0xB4F4, 0xB4F4}, + {0xB4F5, 0xB4F5, 0xB4F5}, {0xB4F6, 0xB4F6, 0xB4F6}, + {0xB4F7, 0xB4F7, 0xB4F7}, {0xB4F8, 0xB4F8, 0xB4F8}, + {0xB4F9, 0xB4F9, 0xB4F9}, {0xB4FA, 0xB4FA, 0xB4FA}, + {0xB4FB, 0xB4FB, 0xB4FB}, {0xB4FC, 0xB4FC, 0xB4FC}, + {0xB4FD, 0xB4FD, 0xB4FD}, {0xB4FE, 0xB4FE, 0xB4FE}, + {0xB4FF, 0xB4FF, 0xB4FF}, {0xB500, 0xB500, 0xB500}, + {0xB501, 0xB501, 0xB501}, {0xB502, 0xB502, 0xB502}, + {0xB503, 0xB503, 0xB503}, {0xB504, 0xB504, 0xB504}, + {0xB505, 0xB505, 0xB505}, {0xB506, 0xB506, 0xB506}, + {0xB507, 0xB507, 0xB507}, {0xB508, 0xB508, 0xB508}, + {0xB509, 0xB509, 0xB509}, {0xB50A, 0xB50A, 0xB50A}, + {0xB50B, 0xB50B, 0xB50B}, {0xB50C, 0xB50C, 0xB50C}, + {0xB50D, 0xB50D, 0xB50D}, {0xB50E, 0xB50E, 0xB50E}, + {0xB50F, 0xB50F, 0xB50F}, {0xB510, 0xB510, 0xB510}, + {0xB511, 0xB511, 0xB511}, {0xB512, 0xB512, 0xB512}, + {0xB513, 0xB513, 0xB513}, {0xB514, 0xB514, 0xB514}, + {0xB515, 0xB515, 0xB515}, {0xB516, 0xB516, 0xB516}, + {0xB517, 0xB517, 0xB517}, {0xB518, 0xB518, 0xB518}, + {0xB519, 0xB519, 0xB519}, {0xB51A, 0xB51A, 0xB51A}, + {0xB51B, 0xB51B, 0xB51B}, {0xB51C, 0xB51C, 0xB51C}, + {0xB51D, 0xB51D, 0xB51D}, {0xB51E, 0xB51E, 0xB51E}, + {0xB51F, 0xB51F, 0xB51F}, {0xB520, 0xB520, 0xB520}, + {0xB521, 0xB521, 0xB521}, {0xB522, 0xB522, 0xB522}, + {0xB523, 0xB523, 0xB523}, {0xB524, 0xB524, 0xB524}, + {0xB525, 0xB525, 0xB525}, {0xB526, 0xB526, 0xB526}, + {0xB527, 0xB527, 0xB527}, {0xB528, 0xB528, 0xB528}, + {0xB529, 0xB529, 0xB529}, {0xB52A, 0xB52A, 0xB52A}, + {0xB52B, 0xB52B, 0xB52B}, {0xB52C, 0xB52C, 0xB52C}, + {0xB52D, 0xB52D, 0xB52D}, {0xB52E, 0xB52E, 0xB52E}, + {0xB52F, 0xB52F, 0xB52F}, {0xB530, 0xB530, 0xB530}, + {0xB531, 0xB531, 0xB531}, {0xB532, 0xB532, 0xB532}, + {0xB533, 0xB533, 0xB533}, {0xB534, 0xB534, 0xB534}, + {0xB535, 0xB535, 0xB535}, {0xB536, 0xB536, 0xB536}, + {0xB537, 0xB537, 0xB537}, {0xB538, 0xB538, 0xB538}, + {0xB539, 0xB539, 0xB539}, {0xB53A, 0xB53A, 0xB53A}, + {0xB53B, 0xB53B, 0xB53B}, {0xB53C, 0xB53C, 0xB53C}, + {0xB53D, 0xB53D, 0xB53D}, {0xB53E, 0xB53E, 0xB53E}, + {0xB53F, 0xB53F, 0xB53F}, {0xB540, 0xB540, 0xB540}, + {0xB541, 0xB541, 0xB541}, {0xB542, 0xB542, 0xB542}, + {0xB543, 0xB543, 0xB543}, {0xB544, 0xB544, 0xB544}, + {0xB545, 0xB545, 0xB545}, {0xB546, 0xB546, 0xB546}, + {0xB547, 0xB547, 0xB547}, {0xB548, 0xB548, 0xB548}, + {0xB549, 0xB549, 0xB549}, {0xB54A, 0xB54A, 0xB54A}, + {0xB54B, 0xB54B, 0xB54B}, {0xB54C, 0xB54C, 0xB54C}, + {0xB54D, 0xB54D, 0xB54D}, {0xB54E, 0xB54E, 0xB54E}, + {0xB54F, 0xB54F, 0xB54F}, {0xB550, 0xB550, 0xB550}, + {0xB551, 0xB551, 0xB551}, {0xB552, 0xB552, 0xB552}, + {0xB553, 0xB553, 0xB553}, {0xB554, 0xB554, 0xB554}, + {0xB555, 0xB555, 0xB555}, {0xB556, 0xB556, 0xB556}, + {0xB557, 0xB557, 0xB557}, {0xB558, 0xB558, 0xB558}, + {0xB559, 0xB559, 0xB559}, {0xB55A, 0xB55A, 0xB55A}, + {0xB55B, 0xB55B, 0xB55B}, {0xB55C, 0xB55C, 0xB55C}, + {0xB55D, 0xB55D, 0xB55D}, {0xB55E, 0xB55E, 0xB55E}, + {0xB55F, 0xB55F, 0xB55F}, {0xB560, 0xB560, 0xB560}, + {0xB561, 0xB561, 0xB561}, {0xB562, 0xB562, 0xB562}, + {0xB563, 0xB563, 0xB563}, {0xB564, 0xB564, 0xB564}, + {0xB565, 0xB565, 0xB565}, {0xB566, 0xB566, 0xB566}, + {0xB567, 0xB567, 0xB567}, {0xB568, 0xB568, 0xB568}, + {0xB569, 0xB569, 0xB569}, {0xB56A, 0xB56A, 0xB56A}, + {0xB56B, 0xB56B, 0xB56B}, {0xB56C, 0xB56C, 0xB56C}, + {0xB56D, 0xB56D, 0xB56D}, {0xB56E, 0xB56E, 0xB56E}, + {0xB56F, 0xB56F, 0xB56F}, {0xB570, 0xB570, 0xB570}, + {0xB571, 0xB571, 0xB571}, {0xB572, 0xB572, 0xB572}, + {0xB573, 0xB573, 0xB573}, {0xB574, 0xB574, 0xB574}, + {0xB575, 0xB575, 0xB575}, {0xB576, 0xB576, 0xB576}, + {0xB577, 0xB577, 0xB577}, {0xB578, 0xB578, 0xB578}, + {0xB579, 0xB579, 0xB579}, {0xB57A, 0xB57A, 0xB57A}, + {0xB57B, 0xB57B, 0xB57B}, {0xB57C, 0xB57C, 0xB57C}, + {0xB57D, 0xB57D, 0xB57D}, {0xB57E, 0xB57E, 0xB57E}, + {0xB57F, 0xB57F, 0xB57F}, {0xB580, 0xB580, 0xB580}, + {0xB581, 0xB581, 0xB581}, {0xB582, 0xB582, 0xB582}, + {0xB583, 0xB583, 0xB583}, {0xB584, 0xB584, 0xB584}, + {0xB585, 0xB585, 0xB585}, {0xB586, 0xB586, 0xB586}, + {0xB587, 0xB587, 0xB587}, {0xB588, 0xB588, 0xB588}, + {0xB589, 0xB589, 0xB589}, {0xB58A, 0xB58A, 0xB58A}, + {0xB58B, 0xB58B, 0xB58B}, {0xB58C, 0xB58C, 0xB58C}, + {0xB58D, 0xB58D, 0xB58D}, {0xB58E, 0xB58E, 0xB58E}, + {0xB58F, 0xB58F, 0xB58F}, {0xB590, 0xB590, 0xB590}, + {0xB591, 0xB591, 0xB591}, {0xB592, 0xB592, 0xB592}, + {0xB593, 0xB593, 0xB593}, {0xB594, 0xB594, 0xB594}, + {0xB595, 0xB595, 0xB595}, {0xB596, 0xB596, 0xB596}, + {0xB597, 0xB597, 0xB597}, {0xB598, 0xB598, 0xB598}, + {0xB599, 0xB599, 0xB599}, {0xB59A, 0xB59A, 0xB59A}, + {0xB59B, 0xB59B, 0xB59B}, {0xB59C, 0xB59C, 0xB59C}, + {0xB59D, 0xB59D, 0xB59D}, {0xB59E, 0xB59E, 0xB59E}, + {0xB59F, 0xB59F, 0xB59F}, {0xB5A0, 0xB5A0, 0xB5A0}, + {0xB5A1, 0xB5A1, 0xB5A1}, {0xB5A2, 0xB5A2, 0xB5A2}, + {0xB5A3, 0xB5A3, 0xB5A3}, {0xB5A4, 0xB5A4, 0xB5A4}, + {0xB5A5, 0xB5A5, 0xB5A5}, {0xB5A6, 0xB5A6, 0xB5A6}, + {0xB5A7, 0xB5A7, 0xB5A7}, {0xB5A8, 0xB5A8, 0xB5A8}, + {0xB5A9, 0xB5A9, 0xB5A9}, {0xB5AA, 0xB5AA, 0xB5AA}, + {0xB5AB, 0xB5AB, 0xB5AB}, {0xB5AC, 0xB5AC, 0xB5AC}, + {0xB5AD, 0xB5AD, 0xB5AD}, {0xB5AE, 0xB5AE, 0xB5AE}, + {0xB5AF, 0xB5AF, 0xB5AF}, {0xB5B0, 0xB5B0, 0xB5B0}, + {0xB5B1, 0xB5B1, 0xB5B1}, {0xB5B2, 0xB5B2, 0xB5B2}, + {0xB5B3, 0xB5B3, 0xB5B3}, {0xB5B4, 0xB5B4, 0xB5B4}, + {0xB5B5, 0xB5B5, 0xB5B5}, {0xB5B6, 0xB5B6, 0xB5B6}, + {0xB5B7, 0xB5B7, 0xB5B7}, {0xB5B8, 0xB5B8, 0xB5B8}, + {0xB5B9, 0xB5B9, 0xB5B9}, {0xB5BA, 0xB5BA, 0xB5BA}, + {0xB5BB, 0xB5BB, 0xB5BB}, {0xB5BC, 0xB5BC, 0xB5BC}, + {0xB5BD, 0xB5BD, 0xB5BD}, {0xB5BE, 0xB5BE, 0xB5BE}, + {0xB5BF, 0xB5BF, 0xB5BF}, {0xB5C0, 0xB5C0, 0xB5C0}, + {0xB5C1, 0xB5C1, 0xB5C1}, {0xB5C2, 0xB5C2, 0xB5C2}, + {0xB5C3, 0xB5C3, 0xB5C3}, {0xB5C4, 0xB5C4, 0xB5C4}, + {0xB5C5, 0xB5C5, 0xB5C5}, {0xB5C6, 0xB5C6, 0xB5C6}, + {0xB5C7, 0xB5C7, 0xB5C7}, {0xB5C8, 0xB5C8, 0xB5C8}, + {0xB5C9, 0xB5C9, 0xB5C9}, {0xB5CA, 0xB5CA, 0xB5CA}, + {0xB5CB, 0xB5CB, 0xB5CB}, {0xB5CC, 0xB5CC, 0xB5CC}, + {0xB5CD, 0xB5CD, 0xB5CD}, {0xB5CE, 0xB5CE, 0xB5CE}, + {0xB5CF, 0xB5CF, 0xB5CF}, {0xB5D0, 0xB5D0, 0xB5D0}, + {0xB5D1, 0xB5D1, 0xB5D1}, {0xB5D2, 0xB5D2, 0xB5D2}, + {0xB5D3, 0xB5D3, 0xB5D3}, {0xB5D4, 0xB5D4, 0xB5D4}, + {0xB5D5, 0xB5D5, 0xB5D5}, {0xB5D6, 0xB5D6, 0xB5D6}, + {0xB5D7, 0xB5D7, 0xB5D7}, {0xB5D8, 0xB5D8, 0xB5D8}, + {0xB5D9, 0xB5D9, 0xB5D9}, {0xB5DA, 0xB5DA, 0xB5DA}, + {0xB5DB, 0xB5DB, 0xB5DB}, {0xB5DC, 0xB5DC, 0xB5DC}, + {0xB5DD, 0xB5DD, 0xB5DD}, {0xB5DE, 0xB5DE, 0xB5DE}, + {0xB5DF, 0xB5DF, 0xB5DF}, {0xB5E0, 0xB5E0, 0xB5E0}, + {0xB5E1, 0xB5E1, 0xB5E1}, {0xB5E2, 0xB5E2, 0xB5E2}, + {0xB5E3, 0xB5E3, 0xB5E3}, {0xB5E4, 0xB5E4, 0xB5E4}, + {0xB5E5, 0xB5E5, 0xB5E5}, {0xB5E6, 0xB5E6, 0xB5E6}, + {0xB5E7, 0xB5E7, 0xB5E7}, {0xB5E8, 0xB5E8, 0xB5E8}, + {0xB5E9, 0xB5E9, 0xB5E9}, {0xB5EA, 0xB5EA, 0xB5EA}, + {0xB5EB, 0xB5EB, 0xB5EB}, {0xB5EC, 0xB5EC, 0xB5EC}, + {0xB5ED, 0xB5ED, 0xB5ED}, {0xB5EE, 0xB5EE, 0xB5EE}, + {0xB5EF, 0xB5EF, 0xB5EF}, {0xB5F0, 0xB5F0, 0xB5F0}, + {0xB5F1, 0xB5F1, 0xB5F1}, {0xB5F2, 0xB5F2, 0xB5F2}, + {0xB5F3, 0xB5F3, 0xB5F3}, {0xB5F4, 0xB5F4, 0xB5F4}, + {0xB5F5, 0xB5F5, 0xB5F5}, {0xB5F6, 0xB5F6, 0xB5F6}, + {0xB5F7, 0xB5F7, 0xB5F7}, {0xB5F8, 0xB5F8, 0xB5F8}, + {0xB5F9, 0xB5F9, 0xB5F9}, {0xB5FA, 0xB5FA, 0xB5FA}, + {0xB5FB, 0xB5FB, 0xB5FB}, {0xB5FC, 0xB5FC, 0xB5FC}, + {0xB5FD, 0xB5FD, 0xB5FD}, {0xB5FE, 0xB5FE, 0xB5FE}, + {0xB5FF, 0xB5FF, 0xB5FF}, {0xB600, 0xB600, 0xB600}, + {0xB601, 0xB601, 0xB601}, {0xB602, 0xB602, 0xB602}, + {0xB603, 0xB603, 0xB603}, {0xB604, 0xB604, 0xB604}, + {0xB605, 0xB605, 0xB605}, {0xB606, 0xB606, 0xB606}, + {0xB607, 0xB607, 0xB607}, {0xB608, 0xB608, 0xB608}, + {0xB609, 0xB609, 0xB609}, {0xB60A, 0xB60A, 0xB60A}, + {0xB60B, 0xB60B, 0xB60B}, {0xB60C, 0xB60C, 0xB60C}, + {0xB60D, 0xB60D, 0xB60D}, {0xB60E, 0xB60E, 0xB60E}, + {0xB60F, 0xB60F, 0xB60F}, {0xB610, 0xB610, 0xB610}, + {0xB611, 0xB611, 0xB611}, {0xB612, 0xB612, 0xB612}, + {0xB613, 0xB613, 0xB613}, {0xB614, 0xB614, 0xB614}, + {0xB615, 0xB615, 0xB615}, {0xB616, 0xB616, 0xB616}, + {0xB617, 0xB617, 0xB617}, {0xB618, 0xB618, 0xB618}, + {0xB619, 0xB619, 0xB619}, {0xB61A, 0xB61A, 0xB61A}, + {0xB61B, 0xB61B, 0xB61B}, {0xB61C, 0xB61C, 0xB61C}, + {0xB61D, 0xB61D, 0xB61D}, {0xB61E, 0xB61E, 0xB61E}, + {0xB61F, 0xB61F, 0xB61F}, {0xB620, 0xB620, 0xB620}, + {0xB621, 0xB621, 0xB621}, {0xB622, 0xB622, 0xB622}, + {0xB623, 0xB623, 0xB623}, {0xB624, 0xB624, 0xB624}, + {0xB625, 0xB625, 0xB625}, {0xB626, 0xB626, 0xB626}, + {0xB627, 0xB627, 0xB627}, {0xB628, 0xB628, 0xB628}, + {0xB629, 0xB629, 0xB629}, {0xB62A, 0xB62A, 0xB62A}, + {0xB62B, 0xB62B, 0xB62B}, {0xB62C, 0xB62C, 0xB62C}, + {0xB62D, 0xB62D, 0xB62D}, {0xB62E, 0xB62E, 0xB62E}, + {0xB62F, 0xB62F, 0xB62F}, {0xB630, 0xB630, 0xB630}, + {0xB631, 0xB631, 0xB631}, {0xB632, 0xB632, 0xB632}, + {0xB633, 0xB633, 0xB633}, {0xB634, 0xB634, 0xB634}, + {0xB635, 0xB635, 0xB635}, {0xB636, 0xB636, 0xB636}, + {0xB637, 0xB637, 0xB637}, {0xB638, 0xB638, 0xB638}, + {0xB639, 0xB639, 0xB639}, {0xB63A, 0xB63A, 0xB63A}, + {0xB63B, 0xB63B, 0xB63B}, {0xB63C, 0xB63C, 0xB63C}, + {0xB63D, 0xB63D, 0xB63D}, {0xB63E, 0xB63E, 0xB63E}, + {0xB63F, 0xB63F, 0xB63F}, {0xB640, 0xB640, 0xB640}, + {0xB641, 0xB641, 0xB641}, {0xB642, 0xB642, 0xB642}, + {0xB643, 0xB643, 0xB643}, {0xB644, 0xB644, 0xB644}, + {0xB645, 0xB645, 0xB645}, {0xB646, 0xB646, 0xB646}, + {0xB647, 0xB647, 0xB647}, {0xB648, 0xB648, 0xB648}, + {0xB649, 0xB649, 0xB649}, {0xB64A, 0xB64A, 0xB64A}, + {0xB64B, 0xB64B, 0xB64B}, {0xB64C, 0xB64C, 0xB64C}, + {0xB64D, 0xB64D, 0xB64D}, {0xB64E, 0xB64E, 0xB64E}, + {0xB64F, 0xB64F, 0xB64F}, {0xB650, 0xB650, 0xB650}, + {0xB651, 0xB651, 0xB651}, {0xB652, 0xB652, 0xB652}, + {0xB653, 0xB653, 0xB653}, {0xB654, 0xB654, 0xB654}, + {0xB655, 0xB655, 0xB655}, {0xB656, 0xB656, 0xB656}, + {0xB657, 0xB657, 0xB657}, {0xB658, 0xB658, 0xB658}, + {0xB659, 0xB659, 0xB659}, {0xB65A, 0xB65A, 0xB65A}, + {0xB65B, 0xB65B, 0xB65B}, {0xB65C, 0xB65C, 0xB65C}, + {0xB65D, 0xB65D, 0xB65D}, {0xB65E, 0xB65E, 0xB65E}, + {0xB65F, 0xB65F, 0xB65F}, {0xB660, 0xB660, 0xB660}, + {0xB661, 0xB661, 0xB661}, {0xB662, 0xB662, 0xB662}, + {0xB663, 0xB663, 0xB663}, {0xB664, 0xB664, 0xB664}, + {0xB665, 0xB665, 0xB665}, {0xB666, 0xB666, 0xB666}, + {0xB667, 0xB667, 0xB667}, {0xB668, 0xB668, 0xB668}, + {0xB669, 0xB669, 0xB669}, {0xB66A, 0xB66A, 0xB66A}, + {0xB66B, 0xB66B, 0xB66B}, {0xB66C, 0xB66C, 0xB66C}, + {0xB66D, 0xB66D, 0xB66D}, {0xB66E, 0xB66E, 0xB66E}, + {0xB66F, 0xB66F, 0xB66F}, {0xB670, 0xB670, 0xB670}, + {0xB671, 0xB671, 0xB671}, {0xB672, 0xB672, 0xB672}, + {0xB673, 0xB673, 0xB673}, {0xB674, 0xB674, 0xB674}, + {0xB675, 0xB675, 0xB675}, {0xB676, 0xB676, 0xB676}, + {0xB677, 0xB677, 0xB677}, {0xB678, 0xB678, 0xB678}, + {0xB679, 0xB679, 0xB679}, {0xB67A, 0xB67A, 0xB67A}, + {0xB67B, 0xB67B, 0xB67B}, {0xB67C, 0xB67C, 0xB67C}, + {0xB67D, 0xB67D, 0xB67D}, {0xB67E, 0xB67E, 0xB67E}, + {0xB67F, 0xB67F, 0xB67F}, {0xB680, 0xB680, 0xB680}, + {0xB681, 0xB681, 0xB681}, {0xB682, 0xB682, 0xB682}, + {0xB683, 0xB683, 0xB683}, {0xB684, 0xB684, 0xB684}, + {0xB685, 0xB685, 0xB685}, {0xB686, 0xB686, 0xB686}, + {0xB687, 0xB687, 0xB687}, {0xB688, 0xB688, 0xB688}, + {0xB689, 0xB689, 0xB689}, {0xB68A, 0xB68A, 0xB68A}, + {0xB68B, 0xB68B, 0xB68B}, {0xB68C, 0xB68C, 0xB68C}, + {0xB68D, 0xB68D, 0xB68D}, {0xB68E, 0xB68E, 0xB68E}, + {0xB68F, 0xB68F, 0xB68F}, {0xB690, 0xB690, 0xB690}, + {0xB691, 0xB691, 0xB691}, {0xB692, 0xB692, 0xB692}, + {0xB693, 0xB693, 0xB693}, {0xB694, 0xB694, 0xB694}, + {0xB695, 0xB695, 0xB695}, {0xB696, 0xB696, 0xB696}, + {0xB697, 0xB697, 0xB697}, {0xB698, 0xB698, 0xB698}, + {0xB699, 0xB699, 0xB699}, {0xB69A, 0xB69A, 0xB69A}, + {0xB69B, 0xB69B, 0xB69B}, {0xB69C, 0xB69C, 0xB69C}, + {0xB69D, 0xB69D, 0xB69D}, {0xB69E, 0xB69E, 0xB69E}, + {0xB69F, 0xB69F, 0xB69F}, {0xB6A0, 0xB6A0, 0xB6A0}, + {0xB6A1, 0xB6A1, 0xB6A1}, {0xB6A2, 0xB6A2, 0xB6A2}, + {0xB6A3, 0xB6A3, 0xB6A3}, {0xB6A4, 0xB6A4, 0xB6A4}, + {0xB6A5, 0xB6A5, 0xB6A5}, {0xB6A6, 0xB6A6, 0xB6A6}, + {0xB6A7, 0xB6A7, 0xB6A7}, {0xB6A8, 0xB6A8, 0xB6A8}, + {0xB6A9, 0xB6A9, 0xB6A9}, {0xB6AA, 0xB6AA, 0xB6AA}, + {0xB6AB, 0xB6AB, 0xB6AB}, {0xB6AC, 0xB6AC, 0xB6AC}, + {0xB6AD, 0xB6AD, 0xB6AD}, {0xB6AE, 0xB6AE, 0xB6AE}, + {0xB6AF, 0xB6AF, 0xB6AF}, {0xB6B0, 0xB6B0, 0xB6B0}, + {0xB6B1, 0xB6B1, 0xB6B1}, {0xB6B2, 0xB6B2, 0xB6B2}, + {0xB6B3, 0xB6B3, 0xB6B3}, {0xB6B4, 0xB6B4, 0xB6B4}, + {0xB6B5, 0xB6B5, 0xB6B5}, {0xB6B6, 0xB6B6, 0xB6B6}, + {0xB6B7, 0xB6B7, 0xB6B7}, {0xB6B8, 0xB6B8, 0xB6B8}, + {0xB6B9, 0xB6B9, 0xB6B9}, {0xB6BA, 0xB6BA, 0xB6BA}, + {0xB6BB, 0xB6BB, 0xB6BB}, {0xB6BC, 0xB6BC, 0xB6BC}, + {0xB6BD, 0xB6BD, 0xB6BD}, {0xB6BE, 0xB6BE, 0xB6BE}, + {0xB6BF, 0xB6BF, 0xB6BF}, {0xB6C0, 0xB6C0, 0xB6C0}, + {0xB6C1, 0xB6C1, 0xB6C1}, {0xB6C2, 0xB6C2, 0xB6C2}, + {0xB6C3, 0xB6C3, 0xB6C3}, {0xB6C4, 0xB6C4, 0xB6C4}, + {0xB6C5, 0xB6C5, 0xB6C5}, {0xB6C6, 0xB6C6, 0xB6C6}, + {0xB6C7, 0xB6C7, 0xB6C7}, {0xB6C8, 0xB6C8, 0xB6C8}, + {0xB6C9, 0xB6C9, 0xB6C9}, {0xB6CA, 0xB6CA, 0xB6CA}, + {0xB6CB, 0xB6CB, 0xB6CB}, {0xB6CC, 0xB6CC, 0xB6CC}, + {0xB6CD, 0xB6CD, 0xB6CD}, {0xB6CE, 0xB6CE, 0xB6CE}, + {0xB6CF, 0xB6CF, 0xB6CF}, {0xB6D0, 0xB6D0, 0xB6D0}, + {0xB6D1, 0xB6D1, 0xB6D1}, {0xB6D2, 0xB6D2, 0xB6D2}, + {0xB6D3, 0xB6D3, 0xB6D3}, {0xB6D4, 0xB6D4, 0xB6D4}, + {0xB6D5, 0xB6D5, 0xB6D5}, {0xB6D6, 0xB6D6, 0xB6D6}, + {0xB6D7, 0xB6D7, 0xB6D7}, {0xB6D8, 0xB6D8, 0xB6D8}, + {0xB6D9, 0xB6D9, 0xB6D9}, {0xB6DA, 0xB6DA, 0xB6DA}, + {0xB6DB, 0xB6DB, 0xB6DB}, {0xB6DC, 0xB6DC, 0xB6DC}, + {0xB6DD, 0xB6DD, 0xB6DD}, {0xB6DE, 0xB6DE, 0xB6DE}, + {0xB6DF, 0xB6DF, 0xB6DF}, {0xB6E0, 0xB6E0, 0xB6E0}, + {0xB6E1, 0xB6E1, 0xB6E1}, {0xB6E2, 0xB6E2, 0xB6E2}, + {0xB6E3, 0xB6E3, 0xB6E3}, {0xB6E4, 0xB6E4, 0xB6E4}, + {0xB6E5, 0xB6E5, 0xB6E5}, {0xB6E6, 0xB6E6, 0xB6E6}, + {0xB6E7, 0xB6E7, 0xB6E7}, {0xB6E8, 0xB6E8, 0xB6E8}, + {0xB6E9, 0xB6E9, 0xB6E9}, {0xB6EA, 0xB6EA, 0xB6EA}, + {0xB6EB, 0xB6EB, 0xB6EB}, {0xB6EC, 0xB6EC, 0xB6EC}, + {0xB6ED, 0xB6ED, 0xB6ED}, {0xB6EE, 0xB6EE, 0xB6EE}, + {0xB6EF, 0xB6EF, 0xB6EF}, {0xB6F0, 0xB6F0, 0xB6F0}, + {0xB6F1, 0xB6F1, 0xB6F1}, {0xB6F2, 0xB6F2, 0xB6F2}, + {0xB6F3, 0xB6F3, 0xB6F3}, {0xB6F4, 0xB6F4, 0xB6F4}, + {0xB6F5, 0xB6F5, 0xB6F5}, {0xB6F6, 0xB6F6, 0xB6F6}, + {0xB6F7, 0xB6F7, 0xB6F7}, {0xB6F8, 0xB6F8, 0xB6F8}, + {0xB6F9, 0xB6F9, 0xB6F9}, {0xB6FA, 0xB6FA, 0xB6FA}, + {0xB6FB, 0xB6FB, 0xB6FB}, {0xB6FC, 0xB6FC, 0xB6FC}, + {0xB6FD, 0xB6FD, 0xB6FD}, {0xB6FE, 0xB6FE, 0xB6FE}, + {0xB6FF, 0xB6FF, 0xB6FF}, {0xB700, 0xB700, 0xB700}, + {0xB701, 0xB701, 0xB701}, {0xB702, 0xB702, 0xB702}, + {0xB703, 0xB703, 0xB703}, {0xB704, 0xB704, 0xB704}, + {0xB705, 0xB705, 0xB705}, {0xB706, 0xB706, 0xB706}, + {0xB707, 0xB707, 0xB707}, {0xB708, 0xB708, 0xB708}, + {0xB709, 0xB709, 0xB709}, {0xB70A, 0xB70A, 0xB70A}, + {0xB70B, 0xB70B, 0xB70B}, {0xB70C, 0xB70C, 0xB70C}, + {0xB70D, 0xB70D, 0xB70D}, {0xB70E, 0xB70E, 0xB70E}, + {0xB70F, 0xB70F, 0xB70F}, {0xB710, 0xB710, 0xB710}, + {0xB711, 0xB711, 0xB711}, {0xB712, 0xB712, 0xB712}, + {0xB713, 0xB713, 0xB713}, {0xB714, 0xB714, 0xB714}, + {0xB715, 0xB715, 0xB715}, {0xB716, 0xB716, 0xB716}, + {0xB717, 0xB717, 0xB717}, {0xB718, 0xB718, 0xB718}, + {0xB719, 0xB719, 0xB719}, {0xB71A, 0xB71A, 0xB71A}, + {0xB71B, 0xB71B, 0xB71B}, {0xB71C, 0xB71C, 0xB71C}, + {0xB71D, 0xB71D, 0xB71D}, {0xB71E, 0xB71E, 0xB71E}, + {0xB71F, 0xB71F, 0xB71F}, {0xB720, 0xB720, 0xB720}, + {0xB721, 0xB721, 0xB721}, {0xB722, 0xB722, 0xB722}, + {0xB723, 0xB723, 0xB723}, {0xB724, 0xB724, 0xB724}, + {0xB725, 0xB725, 0xB725}, {0xB726, 0xB726, 0xB726}, + {0xB727, 0xB727, 0xB727}, {0xB728, 0xB728, 0xB728}, + {0xB729, 0xB729, 0xB729}, {0xB72A, 0xB72A, 0xB72A}, + {0xB72B, 0xB72B, 0xB72B}, {0xB72C, 0xB72C, 0xB72C}, + {0xB72D, 0xB72D, 0xB72D}, {0xB72E, 0xB72E, 0xB72E}, + {0xB72F, 0xB72F, 0xB72F}, {0xB730, 0xB730, 0xB730}, + {0xB731, 0xB731, 0xB731}, {0xB732, 0xB732, 0xB732}, + {0xB733, 0xB733, 0xB733}, {0xB734, 0xB734, 0xB734}, + {0xB735, 0xB735, 0xB735}, {0xB736, 0xB736, 0xB736}, + {0xB737, 0xB737, 0xB737}, {0xB738, 0xB738, 0xB738}, + {0xB739, 0xB739, 0xB739}, {0xB73A, 0xB73A, 0xB73A}, + {0xB73B, 0xB73B, 0xB73B}, {0xB73C, 0xB73C, 0xB73C}, + {0xB73D, 0xB73D, 0xB73D}, {0xB73E, 0xB73E, 0xB73E}, + {0xB73F, 0xB73F, 0xB73F}, {0xB740, 0xB740, 0xB740}, + {0xB741, 0xB741, 0xB741}, {0xB742, 0xB742, 0xB742}, + {0xB743, 0xB743, 0xB743}, {0xB744, 0xB744, 0xB744}, + {0xB745, 0xB745, 0xB745}, {0xB746, 0xB746, 0xB746}, + {0xB747, 0xB747, 0xB747}, {0xB748, 0xB748, 0xB748}, + {0xB749, 0xB749, 0xB749}, {0xB74A, 0xB74A, 0xB74A}, + {0xB74B, 0xB74B, 0xB74B}, {0xB74C, 0xB74C, 0xB74C}, + {0xB74D, 0xB74D, 0xB74D}, {0xB74E, 0xB74E, 0xB74E}, + {0xB74F, 0xB74F, 0xB74F}, {0xB750, 0xB750, 0xB750}, + {0xB751, 0xB751, 0xB751}, {0xB752, 0xB752, 0xB752}, + {0xB753, 0xB753, 0xB753}, {0xB754, 0xB754, 0xB754}, + {0xB755, 0xB755, 0xB755}, {0xB756, 0xB756, 0xB756}, + {0xB757, 0xB757, 0xB757}, {0xB758, 0xB758, 0xB758}, + {0xB759, 0xB759, 0xB759}, {0xB75A, 0xB75A, 0xB75A}, + {0xB75B, 0xB75B, 0xB75B}, {0xB75C, 0xB75C, 0xB75C}, + {0xB75D, 0xB75D, 0xB75D}, {0xB75E, 0xB75E, 0xB75E}, + {0xB75F, 0xB75F, 0xB75F}, {0xB760, 0xB760, 0xB760}, + {0xB761, 0xB761, 0xB761}, {0xB762, 0xB762, 0xB762}, + {0xB763, 0xB763, 0xB763}, {0xB764, 0xB764, 0xB764}, + {0xB765, 0xB765, 0xB765}, {0xB766, 0xB766, 0xB766}, + {0xB767, 0xB767, 0xB767}, {0xB768, 0xB768, 0xB768}, + {0xB769, 0xB769, 0xB769}, {0xB76A, 0xB76A, 0xB76A}, + {0xB76B, 0xB76B, 0xB76B}, {0xB76C, 0xB76C, 0xB76C}, + {0xB76D, 0xB76D, 0xB76D}, {0xB76E, 0xB76E, 0xB76E}, + {0xB76F, 0xB76F, 0xB76F}, {0xB770, 0xB770, 0xB770}, + {0xB771, 0xB771, 0xB771}, {0xB772, 0xB772, 0xB772}, + {0xB773, 0xB773, 0xB773}, {0xB774, 0xB774, 0xB774}, + {0xB775, 0xB775, 0xB775}, {0xB776, 0xB776, 0xB776}, + {0xB777, 0xB777, 0xB777}, {0xB778, 0xB778, 0xB778}, + {0xB779, 0xB779, 0xB779}, {0xB77A, 0xB77A, 0xB77A}, + {0xB77B, 0xB77B, 0xB77B}, {0xB77C, 0xB77C, 0xB77C}, + {0xB77D, 0xB77D, 0xB77D}, {0xB77E, 0xB77E, 0xB77E}, + {0xB77F, 0xB77F, 0xB77F}, {0xB780, 0xB780, 0xB780}, + {0xB781, 0xB781, 0xB781}, {0xB782, 0xB782, 0xB782}, + {0xB783, 0xB783, 0xB783}, {0xB784, 0xB784, 0xB784}, + {0xB785, 0xB785, 0xB785}, {0xB786, 0xB786, 0xB786}, + {0xB787, 0xB787, 0xB787}, {0xB788, 0xB788, 0xB788}, + {0xB789, 0xB789, 0xB789}, {0xB78A, 0xB78A, 0xB78A}, + {0xB78B, 0xB78B, 0xB78B}, {0xB78C, 0xB78C, 0xB78C}, + {0xB78D, 0xB78D, 0xB78D}, {0xB78E, 0xB78E, 0xB78E}, + {0xB78F, 0xB78F, 0xB78F}, {0xB790, 0xB790, 0xB790}, + {0xB791, 0xB791, 0xB791}, {0xB792, 0xB792, 0xB792}, + {0xB793, 0xB793, 0xB793}, {0xB794, 0xB794, 0xB794}, + {0xB795, 0xB795, 0xB795}, {0xB796, 0xB796, 0xB796}, + {0xB797, 0xB797, 0xB797}, {0xB798, 0xB798, 0xB798}, + {0xB799, 0xB799, 0xB799}, {0xB79A, 0xB79A, 0xB79A}, + {0xB79B, 0xB79B, 0xB79B}, {0xB79C, 0xB79C, 0xB79C}, + {0xB79D, 0xB79D, 0xB79D}, {0xB79E, 0xB79E, 0xB79E}, + {0xB79F, 0xB79F, 0xB79F}, {0xB7A0, 0xB7A0, 0xB7A0}, + {0xB7A1, 0xB7A1, 0xB7A1}, {0xB7A2, 0xB7A2, 0xB7A2}, + {0xB7A3, 0xB7A3, 0xB7A3}, {0xB7A4, 0xB7A4, 0xB7A4}, + {0xB7A5, 0xB7A5, 0xB7A5}, {0xB7A6, 0xB7A6, 0xB7A6}, + {0xB7A7, 0xB7A7, 0xB7A7}, {0xB7A8, 0xB7A8, 0xB7A8}, + {0xB7A9, 0xB7A9, 0xB7A9}, {0xB7AA, 0xB7AA, 0xB7AA}, + {0xB7AB, 0xB7AB, 0xB7AB}, {0xB7AC, 0xB7AC, 0xB7AC}, + {0xB7AD, 0xB7AD, 0xB7AD}, {0xB7AE, 0xB7AE, 0xB7AE}, + {0xB7AF, 0xB7AF, 0xB7AF}, {0xB7B0, 0xB7B0, 0xB7B0}, + {0xB7B1, 0xB7B1, 0xB7B1}, {0xB7B2, 0xB7B2, 0xB7B2}, + {0xB7B3, 0xB7B3, 0xB7B3}, {0xB7B4, 0xB7B4, 0xB7B4}, + {0xB7B5, 0xB7B5, 0xB7B5}, {0xB7B6, 0xB7B6, 0xB7B6}, + {0xB7B7, 0xB7B7, 0xB7B7}, {0xB7B8, 0xB7B8, 0xB7B8}, + {0xB7B9, 0xB7B9, 0xB7B9}, {0xB7BA, 0xB7BA, 0xB7BA}, + {0xB7BB, 0xB7BB, 0xB7BB}, {0xB7BC, 0xB7BC, 0xB7BC}, + {0xB7BD, 0xB7BD, 0xB7BD}, {0xB7BE, 0xB7BE, 0xB7BE}, + {0xB7BF, 0xB7BF, 0xB7BF}, {0xB7C0, 0xB7C0, 0xB7C0}, + {0xB7C1, 0xB7C1, 0xB7C1}, {0xB7C2, 0xB7C2, 0xB7C2}, + {0xB7C3, 0xB7C3, 0xB7C3}, {0xB7C4, 0xB7C4, 0xB7C4}, + {0xB7C5, 0xB7C5, 0xB7C5}, {0xB7C6, 0xB7C6, 0xB7C6}, + {0xB7C7, 0xB7C7, 0xB7C7}, {0xB7C8, 0xB7C8, 0xB7C8}, + {0xB7C9, 0xB7C9, 0xB7C9}, {0xB7CA, 0xB7CA, 0xB7CA}, + {0xB7CB, 0xB7CB, 0xB7CB}, {0xB7CC, 0xB7CC, 0xB7CC}, + {0xB7CD, 0xB7CD, 0xB7CD}, {0xB7CE, 0xB7CE, 0xB7CE}, + {0xB7CF, 0xB7CF, 0xB7CF}, {0xB7D0, 0xB7D0, 0xB7D0}, + {0xB7D1, 0xB7D1, 0xB7D1}, {0xB7D2, 0xB7D2, 0xB7D2}, + {0xB7D3, 0xB7D3, 0xB7D3}, {0xB7D4, 0xB7D4, 0xB7D4}, + {0xB7D5, 0xB7D5, 0xB7D5}, {0xB7D6, 0xB7D6, 0xB7D6}, + {0xB7D7, 0xB7D7, 0xB7D7}, {0xB7D8, 0xB7D8, 0xB7D8}, + {0xB7D9, 0xB7D9, 0xB7D9}, {0xB7DA, 0xB7DA, 0xB7DA}, + {0xB7DB, 0xB7DB, 0xB7DB}, {0xB7DC, 0xB7DC, 0xB7DC}, + {0xB7DD, 0xB7DD, 0xB7DD}, {0xB7DE, 0xB7DE, 0xB7DE}, + {0xB7DF, 0xB7DF, 0xB7DF}, {0xB7E0, 0xB7E0, 0xB7E0}, + {0xB7E1, 0xB7E1, 0xB7E1}, {0xB7E2, 0xB7E2, 0xB7E2}, + {0xB7E3, 0xB7E3, 0xB7E3}, {0xB7E4, 0xB7E4, 0xB7E4}, + {0xB7E5, 0xB7E5, 0xB7E5}, {0xB7E6, 0xB7E6, 0xB7E6}, + {0xB7E7, 0xB7E7, 0xB7E7}, {0xB7E8, 0xB7E8, 0xB7E8}, + {0xB7E9, 0xB7E9, 0xB7E9}, {0xB7EA, 0xB7EA, 0xB7EA}, + {0xB7EB, 0xB7EB, 0xB7EB}, {0xB7EC, 0xB7EC, 0xB7EC}, + {0xB7ED, 0xB7ED, 0xB7ED}, {0xB7EE, 0xB7EE, 0xB7EE}, + {0xB7EF, 0xB7EF, 0xB7EF}, {0xB7F0, 0xB7F0, 0xB7F0}, + {0xB7F1, 0xB7F1, 0xB7F1}, {0xB7F2, 0xB7F2, 0xB7F2}, + {0xB7F3, 0xB7F3, 0xB7F3}, {0xB7F4, 0xB7F4, 0xB7F4}, + {0xB7F5, 0xB7F5, 0xB7F5}, {0xB7F6, 0xB7F6, 0xB7F6}, + {0xB7F7, 0xB7F7, 0xB7F7}, {0xB7F8, 0xB7F8, 0xB7F8}, + {0xB7F9, 0xB7F9, 0xB7F9}, {0xB7FA, 0xB7FA, 0xB7FA}, + {0xB7FB, 0xB7FB, 0xB7FB}, {0xB7FC, 0xB7FC, 0xB7FC}, + {0xB7FD, 0xB7FD, 0xB7FD}, {0xB7FE, 0xB7FE, 0xB7FE}, + {0xB7FF, 0xB7FF, 0xB7FF}, {0xB800, 0xB800, 0xB800}, + {0xB801, 0xB801, 0xB801}, {0xB802, 0xB802, 0xB802}, + {0xB803, 0xB803, 0xB803}, {0xB804, 0xB804, 0xB804}, + {0xB805, 0xB805, 0xB805}, {0xB806, 0xB806, 0xB806}, + {0xB807, 0xB807, 0xB807}, {0xB808, 0xB808, 0xB808}, + {0xB809, 0xB809, 0xB809}, {0xB80A, 0xB80A, 0xB80A}, + {0xB80B, 0xB80B, 0xB80B}, {0xB80C, 0xB80C, 0xB80C}, + {0xB80D, 0xB80D, 0xB80D}, {0xB80E, 0xB80E, 0xB80E}, + {0xB80F, 0xB80F, 0xB80F}, {0xB810, 0xB810, 0xB810}, + {0xB811, 0xB811, 0xB811}, {0xB812, 0xB812, 0xB812}, + {0xB813, 0xB813, 0xB813}, {0xB814, 0xB814, 0xB814}, + {0xB815, 0xB815, 0xB815}, {0xB816, 0xB816, 0xB816}, + {0xB817, 0xB817, 0xB817}, {0xB818, 0xB818, 0xB818}, + {0xB819, 0xB819, 0xB819}, {0xB81A, 0xB81A, 0xB81A}, + {0xB81B, 0xB81B, 0xB81B}, {0xB81C, 0xB81C, 0xB81C}, + {0xB81D, 0xB81D, 0xB81D}, {0xB81E, 0xB81E, 0xB81E}, + {0xB81F, 0xB81F, 0xB81F}, {0xB820, 0xB820, 0xB820}, + {0xB821, 0xB821, 0xB821}, {0xB822, 0xB822, 0xB822}, + {0xB823, 0xB823, 0xB823}, {0xB824, 0xB824, 0xB824}, + {0xB825, 0xB825, 0xB825}, {0xB826, 0xB826, 0xB826}, + {0xB827, 0xB827, 0xB827}, {0xB828, 0xB828, 0xB828}, + {0xB829, 0xB829, 0xB829}, {0xB82A, 0xB82A, 0xB82A}, + {0xB82B, 0xB82B, 0xB82B}, {0xB82C, 0xB82C, 0xB82C}, + {0xB82D, 0xB82D, 0xB82D}, {0xB82E, 0xB82E, 0xB82E}, + {0xB82F, 0xB82F, 0xB82F}, {0xB830, 0xB830, 0xB830}, + {0xB831, 0xB831, 0xB831}, {0xB832, 0xB832, 0xB832}, + {0xB833, 0xB833, 0xB833}, {0xB834, 0xB834, 0xB834}, + {0xB835, 0xB835, 0xB835}, {0xB836, 0xB836, 0xB836}, + {0xB837, 0xB837, 0xB837}, {0xB838, 0xB838, 0xB838}, + {0xB839, 0xB839, 0xB839}, {0xB83A, 0xB83A, 0xB83A}, + {0xB83B, 0xB83B, 0xB83B}, {0xB83C, 0xB83C, 0xB83C}, + {0xB83D, 0xB83D, 0xB83D}, {0xB83E, 0xB83E, 0xB83E}, + {0xB83F, 0xB83F, 0xB83F}, {0xB840, 0xB840, 0xB840}, + {0xB841, 0xB841, 0xB841}, {0xB842, 0xB842, 0xB842}, + {0xB843, 0xB843, 0xB843}, {0xB844, 0xB844, 0xB844}, + {0xB845, 0xB845, 0xB845}, {0xB846, 0xB846, 0xB846}, + {0xB847, 0xB847, 0xB847}, {0xB848, 0xB848, 0xB848}, + {0xB849, 0xB849, 0xB849}, {0xB84A, 0xB84A, 0xB84A}, + {0xB84B, 0xB84B, 0xB84B}, {0xB84C, 0xB84C, 0xB84C}, + {0xB84D, 0xB84D, 0xB84D}, {0xB84E, 0xB84E, 0xB84E}, + {0xB84F, 0xB84F, 0xB84F}, {0xB850, 0xB850, 0xB850}, + {0xB851, 0xB851, 0xB851}, {0xB852, 0xB852, 0xB852}, + {0xB853, 0xB853, 0xB853}, {0xB854, 0xB854, 0xB854}, + {0xB855, 0xB855, 0xB855}, {0xB856, 0xB856, 0xB856}, + {0xB857, 0xB857, 0xB857}, {0xB858, 0xB858, 0xB858}, + {0xB859, 0xB859, 0xB859}, {0xB85A, 0xB85A, 0xB85A}, + {0xB85B, 0xB85B, 0xB85B}, {0xB85C, 0xB85C, 0xB85C}, + {0xB85D, 0xB85D, 0xB85D}, {0xB85E, 0xB85E, 0xB85E}, + {0xB85F, 0xB85F, 0xB85F}, {0xB860, 0xB860, 0xB860}, + {0xB861, 0xB861, 0xB861}, {0xB862, 0xB862, 0xB862}, + {0xB863, 0xB863, 0xB863}, {0xB864, 0xB864, 0xB864}, + {0xB865, 0xB865, 0xB865}, {0xB866, 0xB866, 0xB866}, + {0xB867, 0xB867, 0xB867}, {0xB868, 0xB868, 0xB868}, + {0xB869, 0xB869, 0xB869}, {0xB86A, 0xB86A, 0xB86A}, + {0xB86B, 0xB86B, 0xB86B}, {0xB86C, 0xB86C, 0xB86C}, + {0xB86D, 0xB86D, 0xB86D}, {0xB86E, 0xB86E, 0xB86E}, + {0xB86F, 0xB86F, 0xB86F}, {0xB870, 0xB870, 0xB870}, + {0xB871, 0xB871, 0xB871}, {0xB872, 0xB872, 0xB872}, + {0xB873, 0xB873, 0xB873}, {0xB874, 0xB874, 0xB874}, + {0xB875, 0xB875, 0xB875}, {0xB876, 0xB876, 0xB876}, + {0xB877, 0xB877, 0xB877}, {0xB878, 0xB878, 0xB878}, + {0xB879, 0xB879, 0xB879}, {0xB87A, 0xB87A, 0xB87A}, + {0xB87B, 0xB87B, 0xB87B}, {0xB87C, 0xB87C, 0xB87C}, + {0xB87D, 0xB87D, 0xB87D}, {0xB87E, 0xB87E, 0xB87E}, + {0xB87F, 0xB87F, 0xB87F}, {0xB880, 0xB880, 0xB880}, + {0xB881, 0xB881, 0xB881}, {0xB882, 0xB882, 0xB882}, + {0xB883, 0xB883, 0xB883}, {0xB884, 0xB884, 0xB884}, + {0xB885, 0xB885, 0xB885}, {0xB886, 0xB886, 0xB886}, + {0xB887, 0xB887, 0xB887}, {0xB888, 0xB888, 0xB888}, + {0xB889, 0xB889, 0xB889}, {0xB88A, 0xB88A, 0xB88A}, + {0xB88B, 0xB88B, 0xB88B}, {0xB88C, 0xB88C, 0xB88C}, + {0xB88D, 0xB88D, 0xB88D}, {0xB88E, 0xB88E, 0xB88E}, + {0xB88F, 0xB88F, 0xB88F}, {0xB890, 0xB890, 0xB890}, + {0xB891, 0xB891, 0xB891}, {0xB892, 0xB892, 0xB892}, + {0xB893, 0xB893, 0xB893}, {0xB894, 0xB894, 0xB894}, + {0xB895, 0xB895, 0xB895}, {0xB896, 0xB896, 0xB896}, + {0xB897, 0xB897, 0xB897}, {0xB898, 0xB898, 0xB898}, + {0xB899, 0xB899, 0xB899}, {0xB89A, 0xB89A, 0xB89A}, + {0xB89B, 0xB89B, 0xB89B}, {0xB89C, 0xB89C, 0xB89C}, + {0xB89D, 0xB89D, 0xB89D}, {0xB89E, 0xB89E, 0xB89E}, + {0xB89F, 0xB89F, 0xB89F}, {0xB8A0, 0xB8A0, 0xB8A0}, + {0xB8A1, 0xB8A1, 0xB8A1}, {0xB8A2, 0xB8A2, 0xB8A2}, + {0xB8A3, 0xB8A3, 0xB8A3}, {0xB8A4, 0xB8A4, 0xB8A4}, + {0xB8A5, 0xB8A5, 0xB8A5}, {0xB8A6, 0xB8A6, 0xB8A6}, + {0xB8A7, 0xB8A7, 0xB8A7}, {0xB8A8, 0xB8A8, 0xB8A8}, + {0xB8A9, 0xB8A9, 0xB8A9}, {0xB8AA, 0xB8AA, 0xB8AA}, + {0xB8AB, 0xB8AB, 0xB8AB}, {0xB8AC, 0xB8AC, 0xB8AC}, + {0xB8AD, 0xB8AD, 0xB8AD}, {0xB8AE, 0xB8AE, 0xB8AE}, + {0xB8AF, 0xB8AF, 0xB8AF}, {0xB8B0, 0xB8B0, 0xB8B0}, + {0xB8B1, 0xB8B1, 0xB8B1}, {0xB8B2, 0xB8B2, 0xB8B2}, + {0xB8B3, 0xB8B3, 0xB8B3}, {0xB8B4, 0xB8B4, 0xB8B4}, + {0xB8B5, 0xB8B5, 0xB8B5}, {0xB8B6, 0xB8B6, 0xB8B6}, + {0xB8B7, 0xB8B7, 0xB8B7}, {0xB8B8, 0xB8B8, 0xB8B8}, + {0xB8B9, 0xB8B9, 0xB8B9}, {0xB8BA, 0xB8BA, 0xB8BA}, + {0xB8BB, 0xB8BB, 0xB8BB}, {0xB8BC, 0xB8BC, 0xB8BC}, + {0xB8BD, 0xB8BD, 0xB8BD}, {0xB8BE, 0xB8BE, 0xB8BE}, + {0xB8BF, 0xB8BF, 0xB8BF}, {0xB8C0, 0xB8C0, 0xB8C0}, + {0xB8C1, 0xB8C1, 0xB8C1}, {0xB8C2, 0xB8C2, 0xB8C2}, + {0xB8C3, 0xB8C3, 0xB8C3}, {0xB8C4, 0xB8C4, 0xB8C4}, + {0xB8C5, 0xB8C5, 0xB8C5}, {0xB8C6, 0xB8C6, 0xB8C6}, + {0xB8C7, 0xB8C7, 0xB8C7}, {0xB8C8, 0xB8C8, 0xB8C8}, + {0xB8C9, 0xB8C9, 0xB8C9}, {0xB8CA, 0xB8CA, 0xB8CA}, + {0xB8CB, 0xB8CB, 0xB8CB}, {0xB8CC, 0xB8CC, 0xB8CC}, + {0xB8CD, 0xB8CD, 0xB8CD}, {0xB8CE, 0xB8CE, 0xB8CE}, + {0xB8CF, 0xB8CF, 0xB8CF}, {0xB8D0, 0xB8D0, 0xB8D0}, + {0xB8D1, 0xB8D1, 0xB8D1}, {0xB8D2, 0xB8D2, 0xB8D2}, + {0xB8D3, 0xB8D3, 0xB8D3}, {0xB8D4, 0xB8D4, 0xB8D4}, + {0xB8D5, 0xB8D5, 0xB8D5}, {0xB8D6, 0xB8D6, 0xB8D6}, + {0xB8D7, 0xB8D7, 0xB8D7}, {0xB8D8, 0xB8D8, 0xB8D8}, + {0xB8D9, 0xB8D9, 0xB8D9}, {0xB8DA, 0xB8DA, 0xB8DA}, + {0xB8DB, 0xB8DB, 0xB8DB}, {0xB8DC, 0xB8DC, 0xB8DC}, + {0xB8DD, 0xB8DD, 0xB8DD}, {0xB8DE, 0xB8DE, 0xB8DE}, + {0xB8DF, 0xB8DF, 0xB8DF}, {0xB8E0, 0xB8E0, 0xB8E0}, + {0xB8E1, 0xB8E1, 0xB8E1}, {0xB8E2, 0xB8E2, 0xB8E2}, + {0xB8E3, 0xB8E3, 0xB8E3}, {0xB8E4, 0xB8E4, 0xB8E4}, + {0xB8E5, 0xB8E5, 0xB8E5}, {0xB8E6, 0xB8E6, 0xB8E6}, + {0xB8E7, 0xB8E7, 0xB8E7}, {0xB8E8, 0xB8E8, 0xB8E8}, + {0xB8E9, 0xB8E9, 0xB8E9}, {0xB8EA, 0xB8EA, 0xB8EA}, + {0xB8EB, 0xB8EB, 0xB8EB}, {0xB8EC, 0xB8EC, 0xB8EC}, + {0xB8ED, 0xB8ED, 0xB8ED}, {0xB8EE, 0xB8EE, 0xB8EE}, + {0xB8EF, 0xB8EF, 0xB8EF}, {0xB8F0, 0xB8F0, 0xB8F0}, + {0xB8F1, 0xB8F1, 0xB8F1}, {0xB8F2, 0xB8F2, 0xB8F2}, + {0xB8F3, 0xB8F3, 0xB8F3}, {0xB8F4, 0xB8F4, 0xB8F4}, + {0xB8F5, 0xB8F5, 0xB8F5}, {0xB8F6, 0xB8F6, 0xB8F6}, + {0xB8F7, 0xB8F7, 0xB8F7}, {0xB8F8, 0xB8F8, 0xB8F8}, + {0xB8F9, 0xB8F9, 0xB8F9}, {0xB8FA, 0xB8FA, 0xB8FA}, + {0xB8FB, 0xB8FB, 0xB8FB}, {0xB8FC, 0xB8FC, 0xB8FC}, + {0xB8FD, 0xB8FD, 0xB8FD}, {0xB8FE, 0xB8FE, 0xB8FE}, + {0xB8FF, 0xB8FF, 0xB8FF}, {0xB900, 0xB900, 0xB900}, + {0xB901, 0xB901, 0xB901}, {0xB902, 0xB902, 0xB902}, + {0xB903, 0xB903, 0xB903}, {0xB904, 0xB904, 0xB904}, + {0xB905, 0xB905, 0xB905}, {0xB906, 0xB906, 0xB906}, + {0xB907, 0xB907, 0xB907}, {0xB908, 0xB908, 0xB908}, + {0xB909, 0xB909, 0xB909}, {0xB90A, 0xB90A, 0xB90A}, + {0xB90B, 0xB90B, 0xB90B}, {0xB90C, 0xB90C, 0xB90C}, + {0xB90D, 0xB90D, 0xB90D}, {0xB90E, 0xB90E, 0xB90E}, + {0xB90F, 0xB90F, 0xB90F}, {0xB910, 0xB910, 0xB910}, + {0xB911, 0xB911, 0xB911}, {0xB912, 0xB912, 0xB912}, + {0xB913, 0xB913, 0xB913}, {0xB914, 0xB914, 0xB914}, + {0xB915, 0xB915, 0xB915}, {0xB916, 0xB916, 0xB916}, + {0xB917, 0xB917, 0xB917}, {0xB918, 0xB918, 0xB918}, + {0xB919, 0xB919, 0xB919}, {0xB91A, 0xB91A, 0xB91A}, + {0xB91B, 0xB91B, 0xB91B}, {0xB91C, 0xB91C, 0xB91C}, + {0xB91D, 0xB91D, 0xB91D}, {0xB91E, 0xB91E, 0xB91E}, + {0xB91F, 0xB91F, 0xB91F}, {0xB920, 0xB920, 0xB920}, + {0xB921, 0xB921, 0xB921}, {0xB922, 0xB922, 0xB922}, + {0xB923, 0xB923, 0xB923}, {0xB924, 0xB924, 0xB924}, + {0xB925, 0xB925, 0xB925}, {0xB926, 0xB926, 0xB926}, + {0xB927, 0xB927, 0xB927}, {0xB928, 0xB928, 0xB928}, + {0xB929, 0xB929, 0xB929}, {0xB92A, 0xB92A, 0xB92A}, + {0xB92B, 0xB92B, 0xB92B}, {0xB92C, 0xB92C, 0xB92C}, + {0xB92D, 0xB92D, 0xB92D}, {0xB92E, 0xB92E, 0xB92E}, + {0xB92F, 0xB92F, 0xB92F}, {0xB930, 0xB930, 0xB930}, + {0xB931, 0xB931, 0xB931}, {0xB932, 0xB932, 0xB932}, + {0xB933, 0xB933, 0xB933}, {0xB934, 0xB934, 0xB934}, + {0xB935, 0xB935, 0xB935}, {0xB936, 0xB936, 0xB936}, + {0xB937, 0xB937, 0xB937}, {0xB938, 0xB938, 0xB938}, + {0xB939, 0xB939, 0xB939}, {0xB93A, 0xB93A, 0xB93A}, + {0xB93B, 0xB93B, 0xB93B}, {0xB93C, 0xB93C, 0xB93C}, + {0xB93D, 0xB93D, 0xB93D}, {0xB93E, 0xB93E, 0xB93E}, + {0xB93F, 0xB93F, 0xB93F}, {0xB940, 0xB940, 0xB940}, + {0xB941, 0xB941, 0xB941}, {0xB942, 0xB942, 0xB942}, + {0xB943, 0xB943, 0xB943}, {0xB944, 0xB944, 0xB944}, + {0xB945, 0xB945, 0xB945}, {0xB946, 0xB946, 0xB946}, + {0xB947, 0xB947, 0xB947}, {0xB948, 0xB948, 0xB948}, + {0xB949, 0xB949, 0xB949}, {0xB94A, 0xB94A, 0xB94A}, + {0xB94B, 0xB94B, 0xB94B}, {0xB94C, 0xB94C, 0xB94C}, + {0xB94D, 0xB94D, 0xB94D}, {0xB94E, 0xB94E, 0xB94E}, + {0xB94F, 0xB94F, 0xB94F}, {0xB950, 0xB950, 0xB950}, + {0xB951, 0xB951, 0xB951}, {0xB952, 0xB952, 0xB952}, + {0xB953, 0xB953, 0xB953}, {0xB954, 0xB954, 0xB954}, + {0xB955, 0xB955, 0xB955}, {0xB956, 0xB956, 0xB956}, + {0xB957, 0xB957, 0xB957}, {0xB958, 0xB958, 0xB958}, + {0xB959, 0xB959, 0xB959}, {0xB95A, 0xB95A, 0xB95A}, + {0xB95B, 0xB95B, 0xB95B}, {0xB95C, 0xB95C, 0xB95C}, + {0xB95D, 0xB95D, 0xB95D}, {0xB95E, 0xB95E, 0xB95E}, + {0xB95F, 0xB95F, 0xB95F}, {0xB960, 0xB960, 0xB960}, + {0xB961, 0xB961, 0xB961}, {0xB962, 0xB962, 0xB962}, + {0xB963, 0xB963, 0xB963}, {0xB964, 0xB964, 0xB964}, + {0xB965, 0xB965, 0xB965}, {0xB966, 0xB966, 0xB966}, + {0xB967, 0xB967, 0xB967}, {0xB968, 0xB968, 0xB968}, + {0xB969, 0xB969, 0xB969}, {0xB96A, 0xB96A, 0xB96A}, + {0xB96B, 0xB96B, 0xB96B}, {0xB96C, 0xB96C, 0xB96C}, + {0xB96D, 0xB96D, 0xB96D}, {0xB96E, 0xB96E, 0xB96E}, + {0xB96F, 0xB96F, 0xB96F}, {0xB970, 0xB970, 0xB970}, + {0xB971, 0xB971, 0xB971}, {0xB972, 0xB972, 0xB972}, + {0xB973, 0xB973, 0xB973}, {0xB974, 0xB974, 0xB974}, + {0xB975, 0xB975, 0xB975}, {0xB976, 0xB976, 0xB976}, + {0xB977, 0xB977, 0xB977}, {0xB978, 0xB978, 0xB978}, + {0xB979, 0xB979, 0xB979}, {0xB97A, 0xB97A, 0xB97A}, + {0xB97B, 0xB97B, 0xB97B}, {0xB97C, 0xB97C, 0xB97C}, + {0xB97D, 0xB97D, 0xB97D}, {0xB97E, 0xB97E, 0xB97E}, + {0xB97F, 0xB97F, 0xB97F}, {0xB980, 0xB980, 0xB980}, + {0xB981, 0xB981, 0xB981}, {0xB982, 0xB982, 0xB982}, + {0xB983, 0xB983, 0xB983}, {0xB984, 0xB984, 0xB984}, + {0xB985, 0xB985, 0xB985}, {0xB986, 0xB986, 0xB986}, + {0xB987, 0xB987, 0xB987}, {0xB988, 0xB988, 0xB988}, + {0xB989, 0xB989, 0xB989}, {0xB98A, 0xB98A, 0xB98A}, + {0xB98B, 0xB98B, 0xB98B}, {0xB98C, 0xB98C, 0xB98C}, + {0xB98D, 0xB98D, 0xB98D}, {0xB98E, 0xB98E, 0xB98E}, + {0xB98F, 0xB98F, 0xB98F}, {0xB990, 0xB990, 0xB990}, + {0xB991, 0xB991, 0xB991}, {0xB992, 0xB992, 0xB992}, + {0xB993, 0xB993, 0xB993}, {0xB994, 0xB994, 0xB994}, + {0xB995, 0xB995, 0xB995}, {0xB996, 0xB996, 0xB996}, + {0xB997, 0xB997, 0xB997}, {0xB998, 0xB998, 0xB998}, + {0xB999, 0xB999, 0xB999}, {0xB99A, 0xB99A, 0xB99A}, + {0xB99B, 0xB99B, 0xB99B}, {0xB99C, 0xB99C, 0xB99C}, + {0xB99D, 0xB99D, 0xB99D}, {0xB99E, 0xB99E, 0xB99E}, + {0xB99F, 0xB99F, 0xB99F}, {0xB9A0, 0xB9A0, 0xB9A0}, + {0xB9A1, 0xB9A1, 0xB9A1}, {0xB9A2, 0xB9A2, 0xB9A2}, + {0xB9A3, 0xB9A3, 0xB9A3}, {0xB9A4, 0xB9A4, 0xB9A4}, + {0xB9A5, 0xB9A5, 0xB9A5}, {0xB9A6, 0xB9A6, 0xB9A6}, + {0xB9A7, 0xB9A7, 0xB9A7}, {0xB9A8, 0xB9A8, 0xB9A8}, + {0xB9A9, 0xB9A9, 0xB9A9}, {0xB9AA, 0xB9AA, 0xB9AA}, + {0xB9AB, 0xB9AB, 0xB9AB}, {0xB9AC, 0xB9AC, 0xB9AC}, + {0xB9AD, 0xB9AD, 0xB9AD}, {0xB9AE, 0xB9AE, 0xB9AE}, + {0xB9AF, 0xB9AF, 0xB9AF}, {0xB9B0, 0xB9B0, 0xB9B0}, + {0xB9B1, 0xB9B1, 0xB9B1}, {0xB9B2, 0xB9B2, 0xB9B2}, + {0xB9B3, 0xB9B3, 0xB9B3}, {0xB9B4, 0xB9B4, 0xB9B4}, + {0xB9B5, 0xB9B5, 0xB9B5}, {0xB9B6, 0xB9B6, 0xB9B6}, + {0xB9B7, 0xB9B7, 0xB9B7}, {0xB9B8, 0xB9B8, 0xB9B8}, + {0xB9B9, 0xB9B9, 0xB9B9}, {0xB9BA, 0xB9BA, 0xB9BA}, + {0xB9BB, 0xB9BB, 0xB9BB}, {0xB9BC, 0xB9BC, 0xB9BC}, + {0xB9BD, 0xB9BD, 0xB9BD}, {0xB9BE, 0xB9BE, 0xB9BE}, + {0xB9BF, 0xB9BF, 0xB9BF}, {0xB9C0, 0xB9C0, 0xB9C0}, + {0xB9C1, 0xB9C1, 0xB9C1}, {0xB9C2, 0xB9C2, 0xB9C2}, + {0xB9C3, 0xB9C3, 0xB9C3}, {0xB9C4, 0xB9C4, 0xB9C4}, + {0xB9C5, 0xB9C5, 0xB9C5}, {0xB9C6, 0xB9C6, 0xB9C6}, + {0xB9C7, 0xB9C7, 0xB9C7}, {0xB9C8, 0xB9C8, 0xB9C8}, + {0xB9C9, 0xB9C9, 0xB9C9}, {0xB9CA, 0xB9CA, 0xB9CA}, + {0xB9CB, 0xB9CB, 0xB9CB}, {0xB9CC, 0xB9CC, 0xB9CC}, + {0xB9CD, 0xB9CD, 0xB9CD}, {0xB9CE, 0xB9CE, 0xB9CE}, + {0xB9CF, 0xB9CF, 0xB9CF}, {0xB9D0, 0xB9D0, 0xB9D0}, + {0xB9D1, 0xB9D1, 0xB9D1}, {0xB9D2, 0xB9D2, 0xB9D2}, + {0xB9D3, 0xB9D3, 0xB9D3}, {0xB9D4, 0xB9D4, 0xB9D4}, + {0xB9D5, 0xB9D5, 0xB9D5}, {0xB9D6, 0xB9D6, 0xB9D6}, + {0xB9D7, 0xB9D7, 0xB9D7}, {0xB9D8, 0xB9D8, 0xB9D8}, + {0xB9D9, 0xB9D9, 0xB9D9}, {0xB9DA, 0xB9DA, 0xB9DA}, + {0xB9DB, 0xB9DB, 0xB9DB}, {0xB9DC, 0xB9DC, 0xB9DC}, + {0xB9DD, 0xB9DD, 0xB9DD}, {0xB9DE, 0xB9DE, 0xB9DE}, + {0xB9DF, 0xB9DF, 0xB9DF}, {0xB9E0, 0xB9E0, 0xB9E0}, + {0xB9E1, 0xB9E1, 0xB9E1}, {0xB9E2, 0xB9E2, 0xB9E2}, + {0xB9E3, 0xB9E3, 0xB9E3}, {0xB9E4, 0xB9E4, 0xB9E4}, + {0xB9E5, 0xB9E5, 0xB9E5}, {0xB9E6, 0xB9E6, 0xB9E6}, + {0xB9E7, 0xB9E7, 0xB9E7}, {0xB9E8, 0xB9E8, 0xB9E8}, + {0xB9E9, 0xB9E9, 0xB9E9}, {0xB9EA, 0xB9EA, 0xB9EA}, + {0xB9EB, 0xB9EB, 0xB9EB}, {0xB9EC, 0xB9EC, 0xB9EC}, + {0xB9ED, 0xB9ED, 0xB9ED}, {0xB9EE, 0xB9EE, 0xB9EE}, + {0xB9EF, 0xB9EF, 0xB9EF}, {0xB9F0, 0xB9F0, 0xB9F0}, + {0xB9F1, 0xB9F1, 0xB9F1}, {0xB9F2, 0xB9F2, 0xB9F2}, + {0xB9F3, 0xB9F3, 0xB9F3}, {0xB9F4, 0xB9F4, 0xB9F4}, + {0xB9F5, 0xB9F5, 0xB9F5}, {0xB9F6, 0xB9F6, 0xB9F6}, + {0xB9F7, 0xB9F7, 0xB9F7}, {0xB9F8, 0xB9F8, 0xB9F8}, + {0xB9F9, 0xB9F9, 0xB9F9}, {0xB9FA, 0xB9FA, 0xB9FA}, + {0xB9FB, 0xB9FB, 0xB9FB}, {0xB9FC, 0xB9FC, 0xB9FC}, + {0xB9FD, 0xB9FD, 0xB9FD}, {0xB9FE, 0xB9FE, 0xB9FE}, + {0xB9FF, 0xB9FF, 0xB9FF}, {0xBA00, 0xBA00, 0xBA00}, + {0xBA01, 0xBA01, 0xBA01}, {0xBA02, 0xBA02, 0xBA02}, + {0xBA03, 0xBA03, 0xBA03}, {0xBA04, 0xBA04, 0xBA04}, + {0xBA05, 0xBA05, 0xBA05}, {0xBA06, 0xBA06, 0xBA06}, + {0xBA07, 0xBA07, 0xBA07}, {0xBA08, 0xBA08, 0xBA08}, + {0xBA09, 0xBA09, 0xBA09}, {0xBA0A, 0xBA0A, 0xBA0A}, + {0xBA0B, 0xBA0B, 0xBA0B}, {0xBA0C, 0xBA0C, 0xBA0C}, + {0xBA0D, 0xBA0D, 0xBA0D}, {0xBA0E, 0xBA0E, 0xBA0E}, + {0xBA0F, 0xBA0F, 0xBA0F}, {0xBA10, 0xBA10, 0xBA10}, + {0xBA11, 0xBA11, 0xBA11}, {0xBA12, 0xBA12, 0xBA12}, + {0xBA13, 0xBA13, 0xBA13}, {0xBA14, 0xBA14, 0xBA14}, + {0xBA15, 0xBA15, 0xBA15}, {0xBA16, 0xBA16, 0xBA16}, + {0xBA17, 0xBA17, 0xBA17}, {0xBA18, 0xBA18, 0xBA18}, + {0xBA19, 0xBA19, 0xBA19}, {0xBA1A, 0xBA1A, 0xBA1A}, + {0xBA1B, 0xBA1B, 0xBA1B}, {0xBA1C, 0xBA1C, 0xBA1C}, + {0xBA1D, 0xBA1D, 0xBA1D}, {0xBA1E, 0xBA1E, 0xBA1E}, + {0xBA1F, 0xBA1F, 0xBA1F}, {0xBA20, 0xBA20, 0xBA20}, + {0xBA21, 0xBA21, 0xBA21}, {0xBA22, 0xBA22, 0xBA22}, + {0xBA23, 0xBA23, 0xBA23}, {0xBA24, 0xBA24, 0xBA24}, + {0xBA25, 0xBA25, 0xBA25}, {0xBA26, 0xBA26, 0xBA26}, + {0xBA27, 0xBA27, 0xBA27}, {0xBA28, 0xBA28, 0xBA28}, + {0xBA29, 0xBA29, 0xBA29}, {0xBA2A, 0xBA2A, 0xBA2A}, + {0xBA2B, 0xBA2B, 0xBA2B}, {0xBA2C, 0xBA2C, 0xBA2C}, + {0xBA2D, 0xBA2D, 0xBA2D}, {0xBA2E, 0xBA2E, 0xBA2E}, + {0xBA2F, 0xBA2F, 0xBA2F}, {0xBA30, 0xBA30, 0xBA30}, + {0xBA31, 0xBA31, 0xBA31}, {0xBA32, 0xBA32, 0xBA32}, + {0xBA33, 0xBA33, 0xBA33}, {0xBA34, 0xBA34, 0xBA34}, + {0xBA35, 0xBA35, 0xBA35}, {0xBA36, 0xBA36, 0xBA36}, + {0xBA37, 0xBA37, 0xBA37}, {0xBA38, 0xBA38, 0xBA38}, + {0xBA39, 0xBA39, 0xBA39}, {0xBA3A, 0xBA3A, 0xBA3A}, + {0xBA3B, 0xBA3B, 0xBA3B}, {0xBA3C, 0xBA3C, 0xBA3C}, + {0xBA3D, 0xBA3D, 0xBA3D}, {0xBA3E, 0xBA3E, 0xBA3E}, + {0xBA3F, 0xBA3F, 0xBA3F}, {0xBA40, 0xBA40, 0xBA40}, + {0xBA41, 0xBA41, 0xBA41}, {0xBA42, 0xBA42, 0xBA42}, + {0xBA43, 0xBA43, 0xBA43}, {0xBA44, 0xBA44, 0xBA44}, + {0xBA45, 0xBA45, 0xBA45}, {0xBA46, 0xBA46, 0xBA46}, + {0xBA47, 0xBA47, 0xBA47}, {0xBA48, 0xBA48, 0xBA48}, + {0xBA49, 0xBA49, 0xBA49}, {0xBA4A, 0xBA4A, 0xBA4A}, + {0xBA4B, 0xBA4B, 0xBA4B}, {0xBA4C, 0xBA4C, 0xBA4C}, + {0xBA4D, 0xBA4D, 0xBA4D}, {0xBA4E, 0xBA4E, 0xBA4E}, + {0xBA4F, 0xBA4F, 0xBA4F}, {0xBA50, 0xBA50, 0xBA50}, + {0xBA51, 0xBA51, 0xBA51}, {0xBA52, 0xBA52, 0xBA52}, + {0xBA53, 0xBA53, 0xBA53}, {0xBA54, 0xBA54, 0xBA54}, + {0xBA55, 0xBA55, 0xBA55}, {0xBA56, 0xBA56, 0xBA56}, + {0xBA57, 0xBA57, 0xBA57}, {0xBA58, 0xBA58, 0xBA58}, + {0xBA59, 0xBA59, 0xBA59}, {0xBA5A, 0xBA5A, 0xBA5A}, + {0xBA5B, 0xBA5B, 0xBA5B}, {0xBA5C, 0xBA5C, 0xBA5C}, + {0xBA5D, 0xBA5D, 0xBA5D}, {0xBA5E, 0xBA5E, 0xBA5E}, + {0xBA5F, 0xBA5F, 0xBA5F}, {0xBA60, 0xBA60, 0xBA60}, + {0xBA61, 0xBA61, 0xBA61}, {0xBA62, 0xBA62, 0xBA62}, + {0xBA63, 0xBA63, 0xBA63}, {0xBA64, 0xBA64, 0xBA64}, + {0xBA65, 0xBA65, 0xBA65}, {0xBA66, 0xBA66, 0xBA66}, + {0xBA67, 0xBA67, 0xBA67}, {0xBA68, 0xBA68, 0xBA68}, + {0xBA69, 0xBA69, 0xBA69}, {0xBA6A, 0xBA6A, 0xBA6A}, + {0xBA6B, 0xBA6B, 0xBA6B}, {0xBA6C, 0xBA6C, 0xBA6C}, + {0xBA6D, 0xBA6D, 0xBA6D}, {0xBA6E, 0xBA6E, 0xBA6E}, + {0xBA6F, 0xBA6F, 0xBA6F}, {0xBA70, 0xBA70, 0xBA70}, + {0xBA71, 0xBA71, 0xBA71}, {0xBA72, 0xBA72, 0xBA72}, + {0xBA73, 0xBA73, 0xBA73}, {0xBA74, 0xBA74, 0xBA74}, + {0xBA75, 0xBA75, 0xBA75}, {0xBA76, 0xBA76, 0xBA76}, + {0xBA77, 0xBA77, 0xBA77}, {0xBA78, 0xBA78, 0xBA78}, + {0xBA79, 0xBA79, 0xBA79}, {0xBA7A, 0xBA7A, 0xBA7A}, + {0xBA7B, 0xBA7B, 0xBA7B}, {0xBA7C, 0xBA7C, 0xBA7C}, + {0xBA7D, 0xBA7D, 0xBA7D}, {0xBA7E, 0xBA7E, 0xBA7E}, + {0xBA7F, 0xBA7F, 0xBA7F}, {0xBA80, 0xBA80, 0xBA80}, + {0xBA81, 0xBA81, 0xBA81}, {0xBA82, 0xBA82, 0xBA82}, + {0xBA83, 0xBA83, 0xBA83}, {0xBA84, 0xBA84, 0xBA84}, + {0xBA85, 0xBA85, 0xBA85}, {0xBA86, 0xBA86, 0xBA86}, + {0xBA87, 0xBA87, 0xBA87}, {0xBA88, 0xBA88, 0xBA88}, + {0xBA89, 0xBA89, 0xBA89}, {0xBA8A, 0xBA8A, 0xBA8A}, + {0xBA8B, 0xBA8B, 0xBA8B}, {0xBA8C, 0xBA8C, 0xBA8C}, + {0xBA8D, 0xBA8D, 0xBA8D}, {0xBA8E, 0xBA8E, 0xBA8E}, + {0xBA8F, 0xBA8F, 0xBA8F}, {0xBA90, 0xBA90, 0xBA90}, + {0xBA91, 0xBA91, 0xBA91}, {0xBA92, 0xBA92, 0xBA92}, + {0xBA93, 0xBA93, 0xBA93}, {0xBA94, 0xBA94, 0xBA94}, + {0xBA95, 0xBA95, 0xBA95}, {0xBA96, 0xBA96, 0xBA96}, + {0xBA97, 0xBA97, 0xBA97}, {0xBA98, 0xBA98, 0xBA98}, + {0xBA99, 0xBA99, 0xBA99}, {0xBA9A, 0xBA9A, 0xBA9A}, + {0xBA9B, 0xBA9B, 0xBA9B}, {0xBA9C, 0xBA9C, 0xBA9C}, + {0xBA9D, 0xBA9D, 0xBA9D}, {0xBA9E, 0xBA9E, 0xBA9E}, + {0xBA9F, 0xBA9F, 0xBA9F}, {0xBAA0, 0xBAA0, 0xBAA0}, + {0xBAA1, 0xBAA1, 0xBAA1}, {0xBAA2, 0xBAA2, 0xBAA2}, + {0xBAA3, 0xBAA3, 0xBAA3}, {0xBAA4, 0xBAA4, 0xBAA4}, + {0xBAA5, 0xBAA5, 0xBAA5}, {0xBAA6, 0xBAA6, 0xBAA6}, + {0xBAA7, 0xBAA7, 0xBAA7}, {0xBAA8, 0xBAA8, 0xBAA8}, + {0xBAA9, 0xBAA9, 0xBAA9}, {0xBAAA, 0xBAAA, 0xBAAA}, + {0xBAAB, 0xBAAB, 0xBAAB}, {0xBAAC, 0xBAAC, 0xBAAC}, + {0xBAAD, 0xBAAD, 0xBAAD}, {0xBAAE, 0xBAAE, 0xBAAE}, + {0xBAAF, 0xBAAF, 0xBAAF}, {0xBAB0, 0xBAB0, 0xBAB0}, + {0xBAB1, 0xBAB1, 0xBAB1}, {0xBAB2, 0xBAB2, 0xBAB2}, + {0xBAB3, 0xBAB3, 0xBAB3}, {0xBAB4, 0xBAB4, 0xBAB4}, + {0xBAB5, 0xBAB5, 0xBAB5}, {0xBAB6, 0xBAB6, 0xBAB6}, + {0xBAB7, 0xBAB7, 0xBAB7}, {0xBAB8, 0xBAB8, 0xBAB8}, + {0xBAB9, 0xBAB9, 0xBAB9}, {0xBABA, 0xBABA, 0xBABA}, + {0xBABB, 0xBABB, 0xBABB}, {0xBABC, 0xBABC, 0xBABC}, + {0xBABD, 0xBABD, 0xBABD}, {0xBABE, 0xBABE, 0xBABE}, + {0xBABF, 0xBABF, 0xBABF}, {0xBAC0, 0xBAC0, 0xBAC0}, + {0xBAC1, 0xBAC1, 0xBAC1}, {0xBAC2, 0xBAC2, 0xBAC2}, + {0xBAC3, 0xBAC3, 0xBAC3}, {0xBAC4, 0xBAC4, 0xBAC4}, + {0xBAC5, 0xBAC5, 0xBAC5}, {0xBAC6, 0xBAC6, 0xBAC6}, + {0xBAC7, 0xBAC7, 0xBAC7}, {0xBAC8, 0xBAC8, 0xBAC8}, + {0xBAC9, 0xBAC9, 0xBAC9}, {0xBACA, 0xBACA, 0xBACA}, + {0xBACB, 0xBACB, 0xBACB}, {0xBACC, 0xBACC, 0xBACC}, + {0xBACD, 0xBACD, 0xBACD}, {0xBACE, 0xBACE, 0xBACE}, + {0xBACF, 0xBACF, 0xBACF}, {0xBAD0, 0xBAD0, 0xBAD0}, + {0xBAD1, 0xBAD1, 0xBAD1}, {0xBAD2, 0xBAD2, 0xBAD2}, + {0xBAD3, 0xBAD3, 0xBAD3}, {0xBAD4, 0xBAD4, 0xBAD4}, + {0xBAD5, 0xBAD5, 0xBAD5}, {0xBAD6, 0xBAD6, 0xBAD6}, + {0xBAD7, 0xBAD7, 0xBAD7}, {0xBAD8, 0xBAD8, 0xBAD8}, + {0xBAD9, 0xBAD9, 0xBAD9}, {0xBADA, 0xBADA, 0xBADA}, + {0xBADB, 0xBADB, 0xBADB}, {0xBADC, 0xBADC, 0xBADC}, + {0xBADD, 0xBADD, 0xBADD}, {0xBADE, 0xBADE, 0xBADE}, + {0xBADF, 0xBADF, 0xBADF}, {0xBAE0, 0xBAE0, 0xBAE0}, + {0xBAE1, 0xBAE1, 0xBAE1}, {0xBAE2, 0xBAE2, 0xBAE2}, + {0xBAE3, 0xBAE3, 0xBAE3}, {0xBAE4, 0xBAE4, 0xBAE4}, + {0xBAE5, 0xBAE5, 0xBAE5}, {0xBAE6, 0xBAE6, 0xBAE6}, + {0xBAE7, 0xBAE7, 0xBAE7}, {0xBAE8, 0xBAE8, 0xBAE8}, + {0xBAE9, 0xBAE9, 0xBAE9}, {0xBAEA, 0xBAEA, 0xBAEA}, + {0xBAEB, 0xBAEB, 0xBAEB}, {0xBAEC, 0xBAEC, 0xBAEC}, + {0xBAED, 0xBAED, 0xBAED}, {0xBAEE, 0xBAEE, 0xBAEE}, + {0xBAEF, 0xBAEF, 0xBAEF}, {0xBAF0, 0xBAF0, 0xBAF0}, + {0xBAF1, 0xBAF1, 0xBAF1}, {0xBAF2, 0xBAF2, 0xBAF2}, + {0xBAF3, 0xBAF3, 0xBAF3}, {0xBAF4, 0xBAF4, 0xBAF4}, + {0xBAF5, 0xBAF5, 0xBAF5}, {0xBAF6, 0xBAF6, 0xBAF6}, + {0xBAF7, 0xBAF7, 0xBAF7}, {0xBAF8, 0xBAF8, 0xBAF8}, + {0xBAF9, 0xBAF9, 0xBAF9}, {0xBAFA, 0xBAFA, 0xBAFA}, + {0xBAFB, 0xBAFB, 0xBAFB}, {0xBAFC, 0xBAFC, 0xBAFC}, + {0xBAFD, 0xBAFD, 0xBAFD}, {0xBAFE, 0xBAFE, 0xBAFE}, + {0xBAFF, 0xBAFF, 0xBAFF}, {0xBB00, 0xBB00, 0xBB00}, + {0xBB01, 0xBB01, 0xBB01}, {0xBB02, 0xBB02, 0xBB02}, + {0xBB03, 0xBB03, 0xBB03}, {0xBB04, 0xBB04, 0xBB04}, + {0xBB05, 0xBB05, 0xBB05}, {0xBB06, 0xBB06, 0xBB06}, + {0xBB07, 0xBB07, 0xBB07}, {0xBB08, 0xBB08, 0xBB08}, + {0xBB09, 0xBB09, 0xBB09}, {0xBB0A, 0xBB0A, 0xBB0A}, + {0xBB0B, 0xBB0B, 0xBB0B}, {0xBB0C, 0xBB0C, 0xBB0C}, + {0xBB0D, 0xBB0D, 0xBB0D}, {0xBB0E, 0xBB0E, 0xBB0E}, + {0xBB0F, 0xBB0F, 0xBB0F}, {0xBB10, 0xBB10, 0xBB10}, + {0xBB11, 0xBB11, 0xBB11}, {0xBB12, 0xBB12, 0xBB12}, + {0xBB13, 0xBB13, 0xBB13}, {0xBB14, 0xBB14, 0xBB14}, + {0xBB15, 0xBB15, 0xBB15}, {0xBB16, 0xBB16, 0xBB16}, + {0xBB17, 0xBB17, 0xBB17}, {0xBB18, 0xBB18, 0xBB18}, + {0xBB19, 0xBB19, 0xBB19}, {0xBB1A, 0xBB1A, 0xBB1A}, + {0xBB1B, 0xBB1B, 0xBB1B}, {0xBB1C, 0xBB1C, 0xBB1C}, + {0xBB1D, 0xBB1D, 0xBB1D}, {0xBB1E, 0xBB1E, 0xBB1E}, + {0xBB1F, 0xBB1F, 0xBB1F}, {0xBB20, 0xBB20, 0xBB20}, + {0xBB21, 0xBB21, 0xBB21}, {0xBB22, 0xBB22, 0xBB22}, + {0xBB23, 0xBB23, 0xBB23}, {0xBB24, 0xBB24, 0xBB24}, + {0xBB25, 0xBB25, 0xBB25}, {0xBB26, 0xBB26, 0xBB26}, + {0xBB27, 0xBB27, 0xBB27}, {0xBB28, 0xBB28, 0xBB28}, + {0xBB29, 0xBB29, 0xBB29}, {0xBB2A, 0xBB2A, 0xBB2A}, + {0xBB2B, 0xBB2B, 0xBB2B}, {0xBB2C, 0xBB2C, 0xBB2C}, + {0xBB2D, 0xBB2D, 0xBB2D}, {0xBB2E, 0xBB2E, 0xBB2E}, + {0xBB2F, 0xBB2F, 0xBB2F}, {0xBB30, 0xBB30, 0xBB30}, + {0xBB31, 0xBB31, 0xBB31}, {0xBB32, 0xBB32, 0xBB32}, + {0xBB33, 0xBB33, 0xBB33}, {0xBB34, 0xBB34, 0xBB34}, + {0xBB35, 0xBB35, 0xBB35}, {0xBB36, 0xBB36, 0xBB36}, + {0xBB37, 0xBB37, 0xBB37}, {0xBB38, 0xBB38, 0xBB38}, + {0xBB39, 0xBB39, 0xBB39}, {0xBB3A, 0xBB3A, 0xBB3A}, + {0xBB3B, 0xBB3B, 0xBB3B}, {0xBB3C, 0xBB3C, 0xBB3C}, + {0xBB3D, 0xBB3D, 0xBB3D}, {0xBB3E, 0xBB3E, 0xBB3E}, + {0xBB3F, 0xBB3F, 0xBB3F}, {0xBB40, 0xBB40, 0xBB40}, + {0xBB41, 0xBB41, 0xBB41}, {0xBB42, 0xBB42, 0xBB42}, + {0xBB43, 0xBB43, 0xBB43}, {0xBB44, 0xBB44, 0xBB44}, + {0xBB45, 0xBB45, 0xBB45}, {0xBB46, 0xBB46, 0xBB46}, + {0xBB47, 0xBB47, 0xBB47}, {0xBB48, 0xBB48, 0xBB48}, + {0xBB49, 0xBB49, 0xBB49}, {0xBB4A, 0xBB4A, 0xBB4A}, + {0xBB4B, 0xBB4B, 0xBB4B}, {0xBB4C, 0xBB4C, 0xBB4C}, + {0xBB4D, 0xBB4D, 0xBB4D}, {0xBB4E, 0xBB4E, 0xBB4E}, + {0xBB4F, 0xBB4F, 0xBB4F}, {0xBB50, 0xBB50, 0xBB50}, + {0xBB51, 0xBB51, 0xBB51}, {0xBB52, 0xBB52, 0xBB52}, + {0xBB53, 0xBB53, 0xBB53}, {0xBB54, 0xBB54, 0xBB54}, + {0xBB55, 0xBB55, 0xBB55}, {0xBB56, 0xBB56, 0xBB56}, + {0xBB57, 0xBB57, 0xBB57}, {0xBB58, 0xBB58, 0xBB58}, + {0xBB59, 0xBB59, 0xBB59}, {0xBB5A, 0xBB5A, 0xBB5A}, + {0xBB5B, 0xBB5B, 0xBB5B}, {0xBB5C, 0xBB5C, 0xBB5C}, + {0xBB5D, 0xBB5D, 0xBB5D}, {0xBB5E, 0xBB5E, 0xBB5E}, + {0xBB5F, 0xBB5F, 0xBB5F}, {0xBB60, 0xBB60, 0xBB60}, + {0xBB61, 0xBB61, 0xBB61}, {0xBB62, 0xBB62, 0xBB62}, + {0xBB63, 0xBB63, 0xBB63}, {0xBB64, 0xBB64, 0xBB64}, + {0xBB65, 0xBB65, 0xBB65}, {0xBB66, 0xBB66, 0xBB66}, + {0xBB67, 0xBB67, 0xBB67}, {0xBB68, 0xBB68, 0xBB68}, + {0xBB69, 0xBB69, 0xBB69}, {0xBB6A, 0xBB6A, 0xBB6A}, + {0xBB6B, 0xBB6B, 0xBB6B}, {0xBB6C, 0xBB6C, 0xBB6C}, + {0xBB6D, 0xBB6D, 0xBB6D}, {0xBB6E, 0xBB6E, 0xBB6E}, + {0xBB6F, 0xBB6F, 0xBB6F}, {0xBB70, 0xBB70, 0xBB70}, + {0xBB71, 0xBB71, 0xBB71}, {0xBB72, 0xBB72, 0xBB72}, + {0xBB73, 0xBB73, 0xBB73}, {0xBB74, 0xBB74, 0xBB74}, + {0xBB75, 0xBB75, 0xBB75}, {0xBB76, 0xBB76, 0xBB76}, + {0xBB77, 0xBB77, 0xBB77}, {0xBB78, 0xBB78, 0xBB78}, + {0xBB79, 0xBB79, 0xBB79}, {0xBB7A, 0xBB7A, 0xBB7A}, + {0xBB7B, 0xBB7B, 0xBB7B}, {0xBB7C, 0xBB7C, 0xBB7C}, + {0xBB7D, 0xBB7D, 0xBB7D}, {0xBB7E, 0xBB7E, 0xBB7E}, + {0xBB7F, 0xBB7F, 0xBB7F}, {0xBB80, 0xBB80, 0xBB80}, + {0xBB81, 0xBB81, 0xBB81}, {0xBB82, 0xBB82, 0xBB82}, + {0xBB83, 0xBB83, 0xBB83}, {0xBB84, 0xBB84, 0xBB84}, + {0xBB85, 0xBB85, 0xBB85}, {0xBB86, 0xBB86, 0xBB86}, + {0xBB87, 0xBB87, 0xBB87}, {0xBB88, 0xBB88, 0xBB88}, + {0xBB89, 0xBB89, 0xBB89}, {0xBB8A, 0xBB8A, 0xBB8A}, + {0xBB8B, 0xBB8B, 0xBB8B}, {0xBB8C, 0xBB8C, 0xBB8C}, + {0xBB8D, 0xBB8D, 0xBB8D}, {0xBB8E, 0xBB8E, 0xBB8E}, + {0xBB8F, 0xBB8F, 0xBB8F}, {0xBB90, 0xBB90, 0xBB90}, + {0xBB91, 0xBB91, 0xBB91}, {0xBB92, 0xBB92, 0xBB92}, + {0xBB93, 0xBB93, 0xBB93}, {0xBB94, 0xBB94, 0xBB94}, + {0xBB95, 0xBB95, 0xBB95}, {0xBB96, 0xBB96, 0xBB96}, + {0xBB97, 0xBB97, 0xBB97}, {0xBB98, 0xBB98, 0xBB98}, + {0xBB99, 0xBB99, 0xBB99}, {0xBB9A, 0xBB9A, 0xBB9A}, + {0xBB9B, 0xBB9B, 0xBB9B}, {0xBB9C, 0xBB9C, 0xBB9C}, + {0xBB9D, 0xBB9D, 0xBB9D}, {0xBB9E, 0xBB9E, 0xBB9E}, + {0xBB9F, 0xBB9F, 0xBB9F}, {0xBBA0, 0xBBA0, 0xBBA0}, + {0xBBA1, 0xBBA1, 0xBBA1}, {0xBBA2, 0xBBA2, 0xBBA2}, + {0xBBA3, 0xBBA3, 0xBBA3}, {0xBBA4, 0xBBA4, 0xBBA4}, + {0xBBA5, 0xBBA5, 0xBBA5}, {0xBBA6, 0xBBA6, 0xBBA6}, + {0xBBA7, 0xBBA7, 0xBBA7}, {0xBBA8, 0xBBA8, 0xBBA8}, + {0xBBA9, 0xBBA9, 0xBBA9}, {0xBBAA, 0xBBAA, 0xBBAA}, + {0xBBAB, 0xBBAB, 0xBBAB}, {0xBBAC, 0xBBAC, 0xBBAC}, + {0xBBAD, 0xBBAD, 0xBBAD}, {0xBBAE, 0xBBAE, 0xBBAE}, + {0xBBAF, 0xBBAF, 0xBBAF}, {0xBBB0, 0xBBB0, 0xBBB0}, + {0xBBB1, 0xBBB1, 0xBBB1}, {0xBBB2, 0xBBB2, 0xBBB2}, + {0xBBB3, 0xBBB3, 0xBBB3}, {0xBBB4, 0xBBB4, 0xBBB4}, + {0xBBB5, 0xBBB5, 0xBBB5}, {0xBBB6, 0xBBB6, 0xBBB6}, + {0xBBB7, 0xBBB7, 0xBBB7}, {0xBBB8, 0xBBB8, 0xBBB8}, + {0xBBB9, 0xBBB9, 0xBBB9}, {0xBBBA, 0xBBBA, 0xBBBA}, + {0xBBBB, 0xBBBB, 0xBBBB}, {0xBBBC, 0xBBBC, 0xBBBC}, + {0xBBBD, 0xBBBD, 0xBBBD}, {0xBBBE, 0xBBBE, 0xBBBE}, + {0xBBBF, 0xBBBF, 0xBBBF}, {0xBBC0, 0xBBC0, 0xBBC0}, + {0xBBC1, 0xBBC1, 0xBBC1}, {0xBBC2, 0xBBC2, 0xBBC2}, + {0xBBC3, 0xBBC3, 0xBBC3}, {0xBBC4, 0xBBC4, 0xBBC4}, + {0xBBC5, 0xBBC5, 0xBBC5}, {0xBBC6, 0xBBC6, 0xBBC6}, + {0xBBC7, 0xBBC7, 0xBBC7}, {0xBBC8, 0xBBC8, 0xBBC8}, + {0xBBC9, 0xBBC9, 0xBBC9}, {0xBBCA, 0xBBCA, 0xBBCA}, + {0xBBCB, 0xBBCB, 0xBBCB}, {0xBBCC, 0xBBCC, 0xBBCC}, + {0xBBCD, 0xBBCD, 0xBBCD}, {0xBBCE, 0xBBCE, 0xBBCE}, + {0xBBCF, 0xBBCF, 0xBBCF}, {0xBBD0, 0xBBD0, 0xBBD0}, + {0xBBD1, 0xBBD1, 0xBBD1}, {0xBBD2, 0xBBD2, 0xBBD2}, + {0xBBD3, 0xBBD3, 0xBBD3}, {0xBBD4, 0xBBD4, 0xBBD4}, + {0xBBD5, 0xBBD5, 0xBBD5}, {0xBBD6, 0xBBD6, 0xBBD6}, + {0xBBD7, 0xBBD7, 0xBBD7}, {0xBBD8, 0xBBD8, 0xBBD8}, + {0xBBD9, 0xBBD9, 0xBBD9}, {0xBBDA, 0xBBDA, 0xBBDA}, + {0xBBDB, 0xBBDB, 0xBBDB}, {0xBBDC, 0xBBDC, 0xBBDC}, + {0xBBDD, 0xBBDD, 0xBBDD}, {0xBBDE, 0xBBDE, 0xBBDE}, + {0xBBDF, 0xBBDF, 0xBBDF}, {0xBBE0, 0xBBE0, 0xBBE0}, + {0xBBE1, 0xBBE1, 0xBBE1}, {0xBBE2, 0xBBE2, 0xBBE2}, + {0xBBE3, 0xBBE3, 0xBBE3}, {0xBBE4, 0xBBE4, 0xBBE4}, + {0xBBE5, 0xBBE5, 0xBBE5}, {0xBBE6, 0xBBE6, 0xBBE6}, + {0xBBE7, 0xBBE7, 0xBBE7}, {0xBBE8, 0xBBE8, 0xBBE8}, + {0xBBE9, 0xBBE9, 0xBBE9}, {0xBBEA, 0xBBEA, 0xBBEA}, + {0xBBEB, 0xBBEB, 0xBBEB}, {0xBBEC, 0xBBEC, 0xBBEC}, + {0xBBED, 0xBBED, 0xBBED}, {0xBBEE, 0xBBEE, 0xBBEE}, + {0xBBEF, 0xBBEF, 0xBBEF}, {0xBBF0, 0xBBF0, 0xBBF0}, + {0xBBF1, 0xBBF1, 0xBBF1}, {0xBBF2, 0xBBF2, 0xBBF2}, + {0xBBF3, 0xBBF3, 0xBBF3}, {0xBBF4, 0xBBF4, 0xBBF4}, + {0xBBF5, 0xBBF5, 0xBBF5}, {0xBBF6, 0xBBF6, 0xBBF6}, + {0xBBF7, 0xBBF7, 0xBBF7}, {0xBBF8, 0xBBF8, 0xBBF8}, + {0xBBF9, 0xBBF9, 0xBBF9}, {0xBBFA, 0xBBFA, 0xBBFA}, + {0xBBFB, 0xBBFB, 0xBBFB}, {0xBBFC, 0xBBFC, 0xBBFC}, + {0xBBFD, 0xBBFD, 0xBBFD}, {0xBBFE, 0xBBFE, 0xBBFE}, + {0xBBFF, 0xBBFF, 0xBBFF}, {0xBC00, 0xBC00, 0xBC00}, + {0xBC01, 0xBC01, 0xBC01}, {0xBC02, 0xBC02, 0xBC02}, + {0xBC03, 0xBC03, 0xBC03}, {0xBC04, 0xBC04, 0xBC04}, + {0xBC05, 0xBC05, 0xBC05}, {0xBC06, 0xBC06, 0xBC06}, + {0xBC07, 0xBC07, 0xBC07}, {0xBC08, 0xBC08, 0xBC08}, + {0xBC09, 0xBC09, 0xBC09}, {0xBC0A, 0xBC0A, 0xBC0A}, + {0xBC0B, 0xBC0B, 0xBC0B}, {0xBC0C, 0xBC0C, 0xBC0C}, + {0xBC0D, 0xBC0D, 0xBC0D}, {0xBC0E, 0xBC0E, 0xBC0E}, + {0xBC0F, 0xBC0F, 0xBC0F}, {0xBC10, 0xBC10, 0xBC10}, + {0xBC11, 0xBC11, 0xBC11}, {0xBC12, 0xBC12, 0xBC12}, + {0xBC13, 0xBC13, 0xBC13}, {0xBC14, 0xBC14, 0xBC14}, + {0xBC15, 0xBC15, 0xBC15}, {0xBC16, 0xBC16, 0xBC16}, + {0xBC17, 0xBC17, 0xBC17}, {0xBC18, 0xBC18, 0xBC18}, + {0xBC19, 0xBC19, 0xBC19}, {0xBC1A, 0xBC1A, 0xBC1A}, + {0xBC1B, 0xBC1B, 0xBC1B}, {0xBC1C, 0xBC1C, 0xBC1C}, + {0xBC1D, 0xBC1D, 0xBC1D}, {0xBC1E, 0xBC1E, 0xBC1E}, + {0xBC1F, 0xBC1F, 0xBC1F}, {0xBC20, 0xBC20, 0xBC20}, + {0xBC21, 0xBC21, 0xBC21}, {0xBC22, 0xBC22, 0xBC22}, + {0xBC23, 0xBC23, 0xBC23}, {0xBC24, 0xBC24, 0xBC24}, + {0xBC25, 0xBC25, 0xBC25}, {0xBC26, 0xBC26, 0xBC26}, + {0xBC27, 0xBC27, 0xBC27}, {0xBC28, 0xBC28, 0xBC28}, + {0xBC29, 0xBC29, 0xBC29}, {0xBC2A, 0xBC2A, 0xBC2A}, + {0xBC2B, 0xBC2B, 0xBC2B}, {0xBC2C, 0xBC2C, 0xBC2C}, + {0xBC2D, 0xBC2D, 0xBC2D}, {0xBC2E, 0xBC2E, 0xBC2E}, + {0xBC2F, 0xBC2F, 0xBC2F}, {0xBC30, 0xBC30, 0xBC30}, + {0xBC31, 0xBC31, 0xBC31}, {0xBC32, 0xBC32, 0xBC32}, + {0xBC33, 0xBC33, 0xBC33}, {0xBC34, 0xBC34, 0xBC34}, + {0xBC35, 0xBC35, 0xBC35}, {0xBC36, 0xBC36, 0xBC36}, + {0xBC37, 0xBC37, 0xBC37}, {0xBC38, 0xBC38, 0xBC38}, + {0xBC39, 0xBC39, 0xBC39}, {0xBC3A, 0xBC3A, 0xBC3A}, + {0xBC3B, 0xBC3B, 0xBC3B}, {0xBC3C, 0xBC3C, 0xBC3C}, + {0xBC3D, 0xBC3D, 0xBC3D}, {0xBC3E, 0xBC3E, 0xBC3E}, + {0xBC3F, 0xBC3F, 0xBC3F}, {0xBC40, 0xBC40, 0xBC40}, + {0xBC41, 0xBC41, 0xBC41}, {0xBC42, 0xBC42, 0xBC42}, + {0xBC43, 0xBC43, 0xBC43}, {0xBC44, 0xBC44, 0xBC44}, + {0xBC45, 0xBC45, 0xBC45}, {0xBC46, 0xBC46, 0xBC46}, + {0xBC47, 0xBC47, 0xBC47}, {0xBC48, 0xBC48, 0xBC48}, + {0xBC49, 0xBC49, 0xBC49}, {0xBC4A, 0xBC4A, 0xBC4A}, + {0xBC4B, 0xBC4B, 0xBC4B}, {0xBC4C, 0xBC4C, 0xBC4C}, + {0xBC4D, 0xBC4D, 0xBC4D}, {0xBC4E, 0xBC4E, 0xBC4E}, + {0xBC4F, 0xBC4F, 0xBC4F}, {0xBC50, 0xBC50, 0xBC50}, + {0xBC51, 0xBC51, 0xBC51}, {0xBC52, 0xBC52, 0xBC52}, + {0xBC53, 0xBC53, 0xBC53}, {0xBC54, 0xBC54, 0xBC54}, + {0xBC55, 0xBC55, 0xBC55}, {0xBC56, 0xBC56, 0xBC56}, + {0xBC57, 0xBC57, 0xBC57}, {0xBC58, 0xBC58, 0xBC58}, + {0xBC59, 0xBC59, 0xBC59}, {0xBC5A, 0xBC5A, 0xBC5A}, + {0xBC5B, 0xBC5B, 0xBC5B}, {0xBC5C, 0xBC5C, 0xBC5C}, + {0xBC5D, 0xBC5D, 0xBC5D}, {0xBC5E, 0xBC5E, 0xBC5E}, + {0xBC5F, 0xBC5F, 0xBC5F}, {0xBC60, 0xBC60, 0xBC60}, + {0xBC61, 0xBC61, 0xBC61}, {0xBC62, 0xBC62, 0xBC62}, + {0xBC63, 0xBC63, 0xBC63}, {0xBC64, 0xBC64, 0xBC64}, + {0xBC65, 0xBC65, 0xBC65}, {0xBC66, 0xBC66, 0xBC66}, + {0xBC67, 0xBC67, 0xBC67}, {0xBC68, 0xBC68, 0xBC68}, + {0xBC69, 0xBC69, 0xBC69}, {0xBC6A, 0xBC6A, 0xBC6A}, + {0xBC6B, 0xBC6B, 0xBC6B}, {0xBC6C, 0xBC6C, 0xBC6C}, + {0xBC6D, 0xBC6D, 0xBC6D}, {0xBC6E, 0xBC6E, 0xBC6E}, + {0xBC6F, 0xBC6F, 0xBC6F}, {0xBC70, 0xBC70, 0xBC70}, + {0xBC71, 0xBC71, 0xBC71}, {0xBC72, 0xBC72, 0xBC72}, + {0xBC73, 0xBC73, 0xBC73}, {0xBC74, 0xBC74, 0xBC74}, + {0xBC75, 0xBC75, 0xBC75}, {0xBC76, 0xBC76, 0xBC76}, + {0xBC77, 0xBC77, 0xBC77}, {0xBC78, 0xBC78, 0xBC78}, + {0xBC79, 0xBC79, 0xBC79}, {0xBC7A, 0xBC7A, 0xBC7A}, + {0xBC7B, 0xBC7B, 0xBC7B}, {0xBC7C, 0xBC7C, 0xBC7C}, + {0xBC7D, 0xBC7D, 0xBC7D}, {0xBC7E, 0xBC7E, 0xBC7E}, + {0xBC7F, 0xBC7F, 0xBC7F}, {0xBC80, 0xBC80, 0xBC80}, + {0xBC81, 0xBC81, 0xBC81}, {0xBC82, 0xBC82, 0xBC82}, + {0xBC83, 0xBC83, 0xBC83}, {0xBC84, 0xBC84, 0xBC84}, + {0xBC85, 0xBC85, 0xBC85}, {0xBC86, 0xBC86, 0xBC86}, + {0xBC87, 0xBC87, 0xBC87}, {0xBC88, 0xBC88, 0xBC88}, + {0xBC89, 0xBC89, 0xBC89}, {0xBC8A, 0xBC8A, 0xBC8A}, + {0xBC8B, 0xBC8B, 0xBC8B}, {0xBC8C, 0xBC8C, 0xBC8C}, + {0xBC8D, 0xBC8D, 0xBC8D}, {0xBC8E, 0xBC8E, 0xBC8E}, + {0xBC8F, 0xBC8F, 0xBC8F}, {0xBC90, 0xBC90, 0xBC90}, + {0xBC91, 0xBC91, 0xBC91}, {0xBC92, 0xBC92, 0xBC92}, + {0xBC93, 0xBC93, 0xBC93}, {0xBC94, 0xBC94, 0xBC94}, + {0xBC95, 0xBC95, 0xBC95}, {0xBC96, 0xBC96, 0xBC96}, + {0xBC97, 0xBC97, 0xBC97}, {0xBC98, 0xBC98, 0xBC98}, + {0xBC99, 0xBC99, 0xBC99}, {0xBC9A, 0xBC9A, 0xBC9A}, + {0xBC9B, 0xBC9B, 0xBC9B}, {0xBC9C, 0xBC9C, 0xBC9C}, + {0xBC9D, 0xBC9D, 0xBC9D}, {0xBC9E, 0xBC9E, 0xBC9E}, + {0xBC9F, 0xBC9F, 0xBC9F}, {0xBCA0, 0xBCA0, 0xBCA0}, + {0xBCA1, 0xBCA1, 0xBCA1}, {0xBCA2, 0xBCA2, 0xBCA2}, + {0xBCA3, 0xBCA3, 0xBCA3}, {0xBCA4, 0xBCA4, 0xBCA4}, + {0xBCA5, 0xBCA5, 0xBCA5}, {0xBCA6, 0xBCA6, 0xBCA6}, + {0xBCA7, 0xBCA7, 0xBCA7}, {0xBCA8, 0xBCA8, 0xBCA8}, + {0xBCA9, 0xBCA9, 0xBCA9}, {0xBCAA, 0xBCAA, 0xBCAA}, + {0xBCAB, 0xBCAB, 0xBCAB}, {0xBCAC, 0xBCAC, 0xBCAC}, + {0xBCAD, 0xBCAD, 0xBCAD}, {0xBCAE, 0xBCAE, 0xBCAE}, + {0xBCAF, 0xBCAF, 0xBCAF}, {0xBCB0, 0xBCB0, 0xBCB0}, + {0xBCB1, 0xBCB1, 0xBCB1}, {0xBCB2, 0xBCB2, 0xBCB2}, + {0xBCB3, 0xBCB3, 0xBCB3}, {0xBCB4, 0xBCB4, 0xBCB4}, + {0xBCB5, 0xBCB5, 0xBCB5}, {0xBCB6, 0xBCB6, 0xBCB6}, + {0xBCB7, 0xBCB7, 0xBCB7}, {0xBCB8, 0xBCB8, 0xBCB8}, + {0xBCB9, 0xBCB9, 0xBCB9}, {0xBCBA, 0xBCBA, 0xBCBA}, + {0xBCBB, 0xBCBB, 0xBCBB}, {0xBCBC, 0xBCBC, 0xBCBC}, + {0xBCBD, 0xBCBD, 0xBCBD}, {0xBCBE, 0xBCBE, 0xBCBE}, + {0xBCBF, 0xBCBF, 0xBCBF}, {0xBCC0, 0xBCC0, 0xBCC0}, + {0xBCC1, 0xBCC1, 0xBCC1}, {0xBCC2, 0xBCC2, 0xBCC2}, + {0xBCC3, 0xBCC3, 0xBCC3}, {0xBCC4, 0xBCC4, 0xBCC4}, + {0xBCC5, 0xBCC5, 0xBCC5}, {0xBCC6, 0xBCC6, 0xBCC6}, + {0xBCC7, 0xBCC7, 0xBCC7}, {0xBCC8, 0xBCC8, 0xBCC8}, + {0xBCC9, 0xBCC9, 0xBCC9}, {0xBCCA, 0xBCCA, 0xBCCA}, + {0xBCCB, 0xBCCB, 0xBCCB}, {0xBCCC, 0xBCCC, 0xBCCC}, + {0xBCCD, 0xBCCD, 0xBCCD}, {0xBCCE, 0xBCCE, 0xBCCE}, + {0xBCCF, 0xBCCF, 0xBCCF}, {0xBCD0, 0xBCD0, 0xBCD0}, + {0xBCD1, 0xBCD1, 0xBCD1}, {0xBCD2, 0xBCD2, 0xBCD2}, + {0xBCD3, 0xBCD3, 0xBCD3}, {0xBCD4, 0xBCD4, 0xBCD4}, + {0xBCD5, 0xBCD5, 0xBCD5}, {0xBCD6, 0xBCD6, 0xBCD6}, + {0xBCD7, 0xBCD7, 0xBCD7}, {0xBCD8, 0xBCD8, 0xBCD8}, + {0xBCD9, 0xBCD9, 0xBCD9}, {0xBCDA, 0xBCDA, 0xBCDA}, + {0xBCDB, 0xBCDB, 0xBCDB}, {0xBCDC, 0xBCDC, 0xBCDC}, + {0xBCDD, 0xBCDD, 0xBCDD}, {0xBCDE, 0xBCDE, 0xBCDE}, + {0xBCDF, 0xBCDF, 0xBCDF}, {0xBCE0, 0xBCE0, 0xBCE0}, + {0xBCE1, 0xBCE1, 0xBCE1}, {0xBCE2, 0xBCE2, 0xBCE2}, + {0xBCE3, 0xBCE3, 0xBCE3}, {0xBCE4, 0xBCE4, 0xBCE4}, + {0xBCE5, 0xBCE5, 0xBCE5}, {0xBCE6, 0xBCE6, 0xBCE6}, + {0xBCE7, 0xBCE7, 0xBCE7}, {0xBCE8, 0xBCE8, 0xBCE8}, + {0xBCE9, 0xBCE9, 0xBCE9}, {0xBCEA, 0xBCEA, 0xBCEA}, + {0xBCEB, 0xBCEB, 0xBCEB}, {0xBCEC, 0xBCEC, 0xBCEC}, + {0xBCED, 0xBCED, 0xBCED}, {0xBCEE, 0xBCEE, 0xBCEE}, + {0xBCEF, 0xBCEF, 0xBCEF}, {0xBCF0, 0xBCF0, 0xBCF0}, + {0xBCF1, 0xBCF1, 0xBCF1}, {0xBCF2, 0xBCF2, 0xBCF2}, + {0xBCF3, 0xBCF3, 0xBCF3}, {0xBCF4, 0xBCF4, 0xBCF4}, + {0xBCF5, 0xBCF5, 0xBCF5}, {0xBCF6, 0xBCF6, 0xBCF6}, + {0xBCF7, 0xBCF7, 0xBCF7}, {0xBCF8, 0xBCF8, 0xBCF8}, + {0xBCF9, 0xBCF9, 0xBCF9}, {0xBCFA, 0xBCFA, 0xBCFA}, + {0xBCFB, 0xBCFB, 0xBCFB}, {0xBCFC, 0xBCFC, 0xBCFC}, + {0xBCFD, 0xBCFD, 0xBCFD}, {0xBCFE, 0xBCFE, 0xBCFE}, + {0xBCFF, 0xBCFF, 0xBCFF}, {0xBD00, 0xBD00, 0xBD00}, + {0xBD01, 0xBD01, 0xBD01}, {0xBD02, 0xBD02, 0xBD02}, + {0xBD03, 0xBD03, 0xBD03}, {0xBD04, 0xBD04, 0xBD04}, + {0xBD05, 0xBD05, 0xBD05}, {0xBD06, 0xBD06, 0xBD06}, + {0xBD07, 0xBD07, 0xBD07}, {0xBD08, 0xBD08, 0xBD08}, + {0xBD09, 0xBD09, 0xBD09}, {0xBD0A, 0xBD0A, 0xBD0A}, + {0xBD0B, 0xBD0B, 0xBD0B}, {0xBD0C, 0xBD0C, 0xBD0C}, + {0xBD0D, 0xBD0D, 0xBD0D}, {0xBD0E, 0xBD0E, 0xBD0E}, + {0xBD0F, 0xBD0F, 0xBD0F}, {0xBD10, 0xBD10, 0xBD10}, + {0xBD11, 0xBD11, 0xBD11}, {0xBD12, 0xBD12, 0xBD12}, + {0xBD13, 0xBD13, 0xBD13}, {0xBD14, 0xBD14, 0xBD14}, + {0xBD15, 0xBD15, 0xBD15}, {0xBD16, 0xBD16, 0xBD16}, + {0xBD17, 0xBD17, 0xBD17}, {0xBD18, 0xBD18, 0xBD18}, + {0xBD19, 0xBD19, 0xBD19}, {0xBD1A, 0xBD1A, 0xBD1A}, + {0xBD1B, 0xBD1B, 0xBD1B}, {0xBD1C, 0xBD1C, 0xBD1C}, + {0xBD1D, 0xBD1D, 0xBD1D}, {0xBD1E, 0xBD1E, 0xBD1E}, + {0xBD1F, 0xBD1F, 0xBD1F}, {0xBD20, 0xBD20, 0xBD20}, + {0xBD21, 0xBD21, 0xBD21}, {0xBD22, 0xBD22, 0xBD22}, + {0xBD23, 0xBD23, 0xBD23}, {0xBD24, 0xBD24, 0xBD24}, + {0xBD25, 0xBD25, 0xBD25}, {0xBD26, 0xBD26, 0xBD26}, + {0xBD27, 0xBD27, 0xBD27}, {0xBD28, 0xBD28, 0xBD28}, + {0xBD29, 0xBD29, 0xBD29}, {0xBD2A, 0xBD2A, 0xBD2A}, + {0xBD2B, 0xBD2B, 0xBD2B}, {0xBD2C, 0xBD2C, 0xBD2C}, + {0xBD2D, 0xBD2D, 0xBD2D}, {0xBD2E, 0xBD2E, 0xBD2E}, + {0xBD2F, 0xBD2F, 0xBD2F}, {0xBD30, 0xBD30, 0xBD30}, + {0xBD31, 0xBD31, 0xBD31}, {0xBD32, 0xBD32, 0xBD32}, + {0xBD33, 0xBD33, 0xBD33}, {0xBD34, 0xBD34, 0xBD34}, + {0xBD35, 0xBD35, 0xBD35}, {0xBD36, 0xBD36, 0xBD36}, + {0xBD37, 0xBD37, 0xBD37}, {0xBD38, 0xBD38, 0xBD38}, + {0xBD39, 0xBD39, 0xBD39}, {0xBD3A, 0xBD3A, 0xBD3A}, + {0xBD3B, 0xBD3B, 0xBD3B}, {0xBD3C, 0xBD3C, 0xBD3C}, + {0xBD3D, 0xBD3D, 0xBD3D}, {0xBD3E, 0xBD3E, 0xBD3E}, + {0xBD3F, 0xBD3F, 0xBD3F}, {0xBD40, 0xBD40, 0xBD40}, + {0xBD41, 0xBD41, 0xBD41}, {0xBD42, 0xBD42, 0xBD42}, + {0xBD43, 0xBD43, 0xBD43}, {0xBD44, 0xBD44, 0xBD44}, + {0xBD45, 0xBD45, 0xBD45}, {0xBD46, 0xBD46, 0xBD46}, + {0xBD47, 0xBD47, 0xBD47}, {0xBD48, 0xBD48, 0xBD48}, + {0xBD49, 0xBD49, 0xBD49}, {0xBD4A, 0xBD4A, 0xBD4A}, + {0xBD4B, 0xBD4B, 0xBD4B}, {0xBD4C, 0xBD4C, 0xBD4C}, + {0xBD4D, 0xBD4D, 0xBD4D}, {0xBD4E, 0xBD4E, 0xBD4E}, + {0xBD4F, 0xBD4F, 0xBD4F}, {0xBD50, 0xBD50, 0xBD50}, + {0xBD51, 0xBD51, 0xBD51}, {0xBD52, 0xBD52, 0xBD52}, + {0xBD53, 0xBD53, 0xBD53}, {0xBD54, 0xBD54, 0xBD54}, + {0xBD55, 0xBD55, 0xBD55}, {0xBD56, 0xBD56, 0xBD56}, + {0xBD57, 0xBD57, 0xBD57}, {0xBD58, 0xBD58, 0xBD58}, + {0xBD59, 0xBD59, 0xBD59}, {0xBD5A, 0xBD5A, 0xBD5A}, + {0xBD5B, 0xBD5B, 0xBD5B}, {0xBD5C, 0xBD5C, 0xBD5C}, + {0xBD5D, 0xBD5D, 0xBD5D}, {0xBD5E, 0xBD5E, 0xBD5E}, + {0xBD5F, 0xBD5F, 0xBD5F}, {0xBD60, 0xBD60, 0xBD60}, + {0xBD61, 0xBD61, 0xBD61}, {0xBD62, 0xBD62, 0xBD62}, + {0xBD63, 0xBD63, 0xBD63}, {0xBD64, 0xBD64, 0xBD64}, + {0xBD65, 0xBD65, 0xBD65}, {0xBD66, 0xBD66, 0xBD66}, + {0xBD67, 0xBD67, 0xBD67}, {0xBD68, 0xBD68, 0xBD68}, + {0xBD69, 0xBD69, 0xBD69}, {0xBD6A, 0xBD6A, 0xBD6A}, + {0xBD6B, 0xBD6B, 0xBD6B}, {0xBD6C, 0xBD6C, 0xBD6C}, + {0xBD6D, 0xBD6D, 0xBD6D}, {0xBD6E, 0xBD6E, 0xBD6E}, + {0xBD6F, 0xBD6F, 0xBD6F}, {0xBD70, 0xBD70, 0xBD70}, + {0xBD71, 0xBD71, 0xBD71}, {0xBD72, 0xBD72, 0xBD72}, + {0xBD73, 0xBD73, 0xBD73}, {0xBD74, 0xBD74, 0xBD74}, + {0xBD75, 0xBD75, 0xBD75}, {0xBD76, 0xBD76, 0xBD76}, + {0xBD77, 0xBD77, 0xBD77}, {0xBD78, 0xBD78, 0xBD78}, + {0xBD79, 0xBD79, 0xBD79}, {0xBD7A, 0xBD7A, 0xBD7A}, + {0xBD7B, 0xBD7B, 0xBD7B}, {0xBD7C, 0xBD7C, 0xBD7C}, + {0xBD7D, 0xBD7D, 0xBD7D}, {0xBD7E, 0xBD7E, 0xBD7E}, + {0xBD7F, 0xBD7F, 0xBD7F}, {0xBD80, 0xBD80, 0xBD80}, + {0xBD81, 0xBD81, 0xBD81}, {0xBD82, 0xBD82, 0xBD82}, + {0xBD83, 0xBD83, 0xBD83}, {0xBD84, 0xBD84, 0xBD84}, + {0xBD85, 0xBD85, 0xBD85}, {0xBD86, 0xBD86, 0xBD86}, + {0xBD87, 0xBD87, 0xBD87}, {0xBD88, 0xBD88, 0xBD88}, + {0xBD89, 0xBD89, 0xBD89}, {0xBD8A, 0xBD8A, 0xBD8A}, + {0xBD8B, 0xBD8B, 0xBD8B}, {0xBD8C, 0xBD8C, 0xBD8C}, + {0xBD8D, 0xBD8D, 0xBD8D}, {0xBD8E, 0xBD8E, 0xBD8E}, + {0xBD8F, 0xBD8F, 0xBD8F}, {0xBD90, 0xBD90, 0xBD90}, + {0xBD91, 0xBD91, 0xBD91}, {0xBD92, 0xBD92, 0xBD92}, + {0xBD93, 0xBD93, 0xBD93}, {0xBD94, 0xBD94, 0xBD94}, + {0xBD95, 0xBD95, 0xBD95}, {0xBD96, 0xBD96, 0xBD96}, + {0xBD97, 0xBD97, 0xBD97}, {0xBD98, 0xBD98, 0xBD98}, + {0xBD99, 0xBD99, 0xBD99}, {0xBD9A, 0xBD9A, 0xBD9A}, + {0xBD9B, 0xBD9B, 0xBD9B}, {0xBD9C, 0xBD9C, 0xBD9C}, + {0xBD9D, 0xBD9D, 0xBD9D}, {0xBD9E, 0xBD9E, 0xBD9E}, + {0xBD9F, 0xBD9F, 0xBD9F}, {0xBDA0, 0xBDA0, 0xBDA0}, + {0xBDA1, 0xBDA1, 0xBDA1}, {0xBDA2, 0xBDA2, 0xBDA2}, + {0xBDA3, 0xBDA3, 0xBDA3}, {0xBDA4, 0xBDA4, 0xBDA4}, + {0xBDA5, 0xBDA5, 0xBDA5}, {0xBDA6, 0xBDA6, 0xBDA6}, + {0xBDA7, 0xBDA7, 0xBDA7}, {0xBDA8, 0xBDA8, 0xBDA8}, + {0xBDA9, 0xBDA9, 0xBDA9}, {0xBDAA, 0xBDAA, 0xBDAA}, + {0xBDAB, 0xBDAB, 0xBDAB}, {0xBDAC, 0xBDAC, 0xBDAC}, + {0xBDAD, 0xBDAD, 0xBDAD}, {0xBDAE, 0xBDAE, 0xBDAE}, + {0xBDAF, 0xBDAF, 0xBDAF}, {0xBDB0, 0xBDB0, 0xBDB0}, + {0xBDB1, 0xBDB1, 0xBDB1}, {0xBDB2, 0xBDB2, 0xBDB2}, + {0xBDB3, 0xBDB3, 0xBDB3}, {0xBDB4, 0xBDB4, 0xBDB4}, + {0xBDB5, 0xBDB5, 0xBDB5}, {0xBDB6, 0xBDB6, 0xBDB6}, + {0xBDB7, 0xBDB7, 0xBDB7}, {0xBDB8, 0xBDB8, 0xBDB8}, + {0xBDB9, 0xBDB9, 0xBDB9}, {0xBDBA, 0xBDBA, 0xBDBA}, + {0xBDBB, 0xBDBB, 0xBDBB}, {0xBDBC, 0xBDBC, 0xBDBC}, + {0xBDBD, 0xBDBD, 0xBDBD}, {0xBDBE, 0xBDBE, 0xBDBE}, + {0xBDBF, 0xBDBF, 0xBDBF}, {0xBDC0, 0xBDC0, 0xBDC0}, + {0xBDC1, 0xBDC1, 0xBDC1}, {0xBDC2, 0xBDC2, 0xBDC2}, + {0xBDC3, 0xBDC3, 0xBDC3}, {0xBDC4, 0xBDC4, 0xBDC4}, + {0xBDC5, 0xBDC5, 0xBDC5}, {0xBDC6, 0xBDC6, 0xBDC6}, + {0xBDC7, 0xBDC7, 0xBDC7}, {0xBDC8, 0xBDC8, 0xBDC8}, + {0xBDC9, 0xBDC9, 0xBDC9}, {0xBDCA, 0xBDCA, 0xBDCA}, + {0xBDCB, 0xBDCB, 0xBDCB}, {0xBDCC, 0xBDCC, 0xBDCC}, + {0xBDCD, 0xBDCD, 0xBDCD}, {0xBDCE, 0xBDCE, 0xBDCE}, + {0xBDCF, 0xBDCF, 0xBDCF}, {0xBDD0, 0xBDD0, 0xBDD0}, + {0xBDD1, 0xBDD1, 0xBDD1}, {0xBDD2, 0xBDD2, 0xBDD2}, + {0xBDD3, 0xBDD3, 0xBDD3}, {0xBDD4, 0xBDD4, 0xBDD4}, + {0xBDD5, 0xBDD5, 0xBDD5}, {0xBDD6, 0xBDD6, 0xBDD6}, + {0xBDD7, 0xBDD7, 0xBDD7}, {0xBDD8, 0xBDD8, 0xBDD8}, + {0xBDD9, 0xBDD9, 0xBDD9}, {0xBDDA, 0xBDDA, 0xBDDA}, + {0xBDDB, 0xBDDB, 0xBDDB}, {0xBDDC, 0xBDDC, 0xBDDC}, + {0xBDDD, 0xBDDD, 0xBDDD}, {0xBDDE, 0xBDDE, 0xBDDE}, + {0xBDDF, 0xBDDF, 0xBDDF}, {0xBDE0, 0xBDE0, 0xBDE0}, + {0xBDE1, 0xBDE1, 0xBDE1}, {0xBDE2, 0xBDE2, 0xBDE2}, + {0xBDE3, 0xBDE3, 0xBDE3}, {0xBDE4, 0xBDE4, 0xBDE4}, + {0xBDE5, 0xBDE5, 0xBDE5}, {0xBDE6, 0xBDE6, 0xBDE6}, + {0xBDE7, 0xBDE7, 0xBDE7}, {0xBDE8, 0xBDE8, 0xBDE8}, + {0xBDE9, 0xBDE9, 0xBDE9}, {0xBDEA, 0xBDEA, 0xBDEA}, + {0xBDEB, 0xBDEB, 0xBDEB}, {0xBDEC, 0xBDEC, 0xBDEC}, + {0xBDED, 0xBDED, 0xBDED}, {0xBDEE, 0xBDEE, 0xBDEE}, + {0xBDEF, 0xBDEF, 0xBDEF}, {0xBDF0, 0xBDF0, 0xBDF0}, + {0xBDF1, 0xBDF1, 0xBDF1}, {0xBDF2, 0xBDF2, 0xBDF2}, + {0xBDF3, 0xBDF3, 0xBDF3}, {0xBDF4, 0xBDF4, 0xBDF4}, + {0xBDF5, 0xBDF5, 0xBDF5}, {0xBDF6, 0xBDF6, 0xBDF6}, + {0xBDF7, 0xBDF7, 0xBDF7}, {0xBDF8, 0xBDF8, 0xBDF8}, + {0xBDF9, 0xBDF9, 0xBDF9}, {0xBDFA, 0xBDFA, 0xBDFA}, + {0xBDFB, 0xBDFB, 0xBDFB}, {0xBDFC, 0xBDFC, 0xBDFC}, + {0xBDFD, 0xBDFD, 0xBDFD}, {0xBDFE, 0xBDFE, 0xBDFE}, + {0xBDFF, 0xBDFF, 0xBDFF}, {0xBE00, 0xBE00, 0xBE00}, + {0xBE01, 0xBE01, 0xBE01}, {0xBE02, 0xBE02, 0xBE02}, + {0xBE03, 0xBE03, 0xBE03}, {0xBE04, 0xBE04, 0xBE04}, + {0xBE05, 0xBE05, 0xBE05}, {0xBE06, 0xBE06, 0xBE06}, + {0xBE07, 0xBE07, 0xBE07}, {0xBE08, 0xBE08, 0xBE08}, + {0xBE09, 0xBE09, 0xBE09}, {0xBE0A, 0xBE0A, 0xBE0A}, + {0xBE0B, 0xBE0B, 0xBE0B}, {0xBE0C, 0xBE0C, 0xBE0C}, + {0xBE0D, 0xBE0D, 0xBE0D}, {0xBE0E, 0xBE0E, 0xBE0E}, + {0xBE0F, 0xBE0F, 0xBE0F}, {0xBE10, 0xBE10, 0xBE10}, + {0xBE11, 0xBE11, 0xBE11}, {0xBE12, 0xBE12, 0xBE12}, + {0xBE13, 0xBE13, 0xBE13}, {0xBE14, 0xBE14, 0xBE14}, + {0xBE15, 0xBE15, 0xBE15}, {0xBE16, 0xBE16, 0xBE16}, + {0xBE17, 0xBE17, 0xBE17}, {0xBE18, 0xBE18, 0xBE18}, + {0xBE19, 0xBE19, 0xBE19}, {0xBE1A, 0xBE1A, 0xBE1A}, + {0xBE1B, 0xBE1B, 0xBE1B}, {0xBE1C, 0xBE1C, 0xBE1C}, + {0xBE1D, 0xBE1D, 0xBE1D}, {0xBE1E, 0xBE1E, 0xBE1E}, + {0xBE1F, 0xBE1F, 0xBE1F}, {0xBE20, 0xBE20, 0xBE20}, + {0xBE21, 0xBE21, 0xBE21}, {0xBE22, 0xBE22, 0xBE22}, + {0xBE23, 0xBE23, 0xBE23}, {0xBE24, 0xBE24, 0xBE24}, + {0xBE25, 0xBE25, 0xBE25}, {0xBE26, 0xBE26, 0xBE26}, + {0xBE27, 0xBE27, 0xBE27}, {0xBE28, 0xBE28, 0xBE28}, + {0xBE29, 0xBE29, 0xBE29}, {0xBE2A, 0xBE2A, 0xBE2A}, + {0xBE2B, 0xBE2B, 0xBE2B}, {0xBE2C, 0xBE2C, 0xBE2C}, + {0xBE2D, 0xBE2D, 0xBE2D}, {0xBE2E, 0xBE2E, 0xBE2E}, + {0xBE2F, 0xBE2F, 0xBE2F}, {0xBE30, 0xBE30, 0xBE30}, + {0xBE31, 0xBE31, 0xBE31}, {0xBE32, 0xBE32, 0xBE32}, + {0xBE33, 0xBE33, 0xBE33}, {0xBE34, 0xBE34, 0xBE34}, + {0xBE35, 0xBE35, 0xBE35}, {0xBE36, 0xBE36, 0xBE36}, + {0xBE37, 0xBE37, 0xBE37}, {0xBE38, 0xBE38, 0xBE38}, + {0xBE39, 0xBE39, 0xBE39}, {0xBE3A, 0xBE3A, 0xBE3A}, + {0xBE3B, 0xBE3B, 0xBE3B}, {0xBE3C, 0xBE3C, 0xBE3C}, + {0xBE3D, 0xBE3D, 0xBE3D}, {0xBE3E, 0xBE3E, 0xBE3E}, + {0xBE3F, 0xBE3F, 0xBE3F}, {0xBE40, 0xBE40, 0xBE40}, + {0xBE41, 0xBE41, 0xBE41}, {0xBE42, 0xBE42, 0xBE42}, + {0xBE43, 0xBE43, 0xBE43}, {0xBE44, 0xBE44, 0xBE44}, + {0xBE45, 0xBE45, 0xBE45}, {0xBE46, 0xBE46, 0xBE46}, + {0xBE47, 0xBE47, 0xBE47}, {0xBE48, 0xBE48, 0xBE48}, + {0xBE49, 0xBE49, 0xBE49}, {0xBE4A, 0xBE4A, 0xBE4A}, + {0xBE4B, 0xBE4B, 0xBE4B}, {0xBE4C, 0xBE4C, 0xBE4C}, + {0xBE4D, 0xBE4D, 0xBE4D}, {0xBE4E, 0xBE4E, 0xBE4E}, + {0xBE4F, 0xBE4F, 0xBE4F}, {0xBE50, 0xBE50, 0xBE50}, + {0xBE51, 0xBE51, 0xBE51}, {0xBE52, 0xBE52, 0xBE52}, + {0xBE53, 0xBE53, 0xBE53}, {0xBE54, 0xBE54, 0xBE54}, + {0xBE55, 0xBE55, 0xBE55}, {0xBE56, 0xBE56, 0xBE56}, + {0xBE57, 0xBE57, 0xBE57}, {0xBE58, 0xBE58, 0xBE58}, + {0xBE59, 0xBE59, 0xBE59}, {0xBE5A, 0xBE5A, 0xBE5A}, + {0xBE5B, 0xBE5B, 0xBE5B}, {0xBE5C, 0xBE5C, 0xBE5C}, + {0xBE5D, 0xBE5D, 0xBE5D}, {0xBE5E, 0xBE5E, 0xBE5E}, + {0xBE5F, 0xBE5F, 0xBE5F}, {0xBE60, 0xBE60, 0xBE60}, + {0xBE61, 0xBE61, 0xBE61}, {0xBE62, 0xBE62, 0xBE62}, + {0xBE63, 0xBE63, 0xBE63}, {0xBE64, 0xBE64, 0xBE64}, + {0xBE65, 0xBE65, 0xBE65}, {0xBE66, 0xBE66, 0xBE66}, + {0xBE67, 0xBE67, 0xBE67}, {0xBE68, 0xBE68, 0xBE68}, + {0xBE69, 0xBE69, 0xBE69}, {0xBE6A, 0xBE6A, 0xBE6A}, + {0xBE6B, 0xBE6B, 0xBE6B}, {0xBE6C, 0xBE6C, 0xBE6C}, + {0xBE6D, 0xBE6D, 0xBE6D}, {0xBE6E, 0xBE6E, 0xBE6E}, + {0xBE6F, 0xBE6F, 0xBE6F}, {0xBE70, 0xBE70, 0xBE70}, + {0xBE71, 0xBE71, 0xBE71}, {0xBE72, 0xBE72, 0xBE72}, + {0xBE73, 0xBE73, 0xBE73}, {0xBE74, 0xBE74, 0xBE74}, + {0xBE75, 0xBE75, 0xBE75}, {0xBE76, 0xBE76, 0xBE76}, + {0xBE77, 0xBE77, 0xBE77}, {0xBE78, 0xBE78, 0xBE78}, + {0xBE79, 0xBE79, 0xBE79}, {0xBE7A, 0xBE7A, 0xBE7A}, + {0xBE7B, 0xBE7B, 0xBE7B}, {0xBE7C, 0xBE7C, 0xBE7C}, + {0xBE7D, 0xBE7D, 0xBE7D}, {0xBE7E, 0xBE7E, 0xBE7E}, + {0xBE7F, 0xBE7F, 0xBE7F}, {0xBE80, 0xBE80, 0xBE80}, + {0xBE81, 0xBE81, 0xBE81}, {0xBE82, 0xBE82, 0xBE82}, + {0xBE83, 0xBE83, 0xBE83}, {0xBE84, 0xBE84, 0xBE84}, + {0xBE85, 0xBE85, 0xBE85}, {0xBE86, 0xBE86, 0xBE86}, + {0xBE87, 0xBE87, 0xBE87}, {0xBE88, 0xBE88, 0xBE88}, + {0xBE89, 0xBE89, 0xBE89}, {0xBE8A, 0xBE8A, 0xBE8A}, + {0xBE8B, 0xBE8B, 0xBE8B}, {0xBE8C, 0xBE8C, 0xBE8C}, + {0xBE8D, 0xBE8D, 0xBE8D}, {0xBE8E, 0xBE8E, 0xBE8E}, + {0xBE8F, 0xBE8F, 0xBE8F}, {0xBE90, 0xBE90, 0xBE90}, + {0xBE91, 0xBE91, 0xBE91}, {0xBE92, 0xBE92, 0xBE92}, + {0xBE93, 0xBE93, 0xBE93}, {0xBE94, 0xBE94, 0xBE94}, + {0xBE95, 0xBE95, 0xBE95}, {0xBE96, 0xBE96, 0xBE96}, + {0xBE97, 0xBE97, 0xBE97}, {0xBE98, 0xBE98, 0xBE98}, + {0xBE99, 0xBE99, 0xBE99}, {0xBE9A, 0xBE9A, 0xBE9A}, + {0xBE9B, 0xBE9B, 0xBE9B}, {0xBE9C, 0xBE9C, 0xBE9C}, + {0xBE9D, 0xBE9D, 0xBE9D}, {0xBE9E, 0xBE9E, 0xBE9E}, + {0xBE9F, 0xBE9F, 0xBE9F}, {0xBEA0, 0xBEA0, 0xBEA0}, + {0xBEA1, 0xBEA1, 0xBEA1}, {0xBEA2, 0xBEA2, 0xBEA2}, + {0xBEA3, 0xBEA3, 0xBEA3}, {0xBEA4, 0xBEA4, 0xBEA4}, + {0xBEA5, 0xBEA5, 0xBEA5}, {0xBEA6, 0xBEA6, 0xBEA6}, + {0xBEA7, 0xBEA7, 0xBEA7}, {0xBEA8, 0xBEA8, 0xBEA8}, + {0xBEA9, 0xBEA9, 0xBEA9}, {0xBEAA, 0xBEAA, 0xBEAA}, + {0xBEAB, 0xBEAB, 0xBEAB}, {0xBEAC, 0xBEAC, 0xBEAC}, + {0xBEAD, 0xBEAD, 0xBEAD}, {0xBEAE, 0xBEAE, 0xBEAE}, + {0xBEAF, 0xBEAF, 0xBEAF}, {0xBEB0, 0xBEB0, 0xBEB0}, + {0xBEB1, 0xBEB1, 0xBEB1}, {0xBEB2, 0xBEB2, 0xBEB2}, + {0xBEB3, 0xBEB3, 0xBEB3}, {0xBEB4, 0xBEB4, 0xBEB4}, + {0xBEB5, 0xBEB5, 0xBEB5}, {0xBEB6, 0xBEB6, 0xBEB6}, + {0xBEB7, 0xBEB7, 0xBEB7}, {0xBEB8, 0xBEB8, 0xBEB8}, + {0xBEB9, 0xBEB9, 0xBEB9}, {0xBEBA, 0xBEBA, 0xBEBA}, + {0xBEBB, 0xBEBB, 0xBEBB}, {0xBEBC, 0xBEBC, 0xBEBC}, + {0xBEBD, 0xBEBD, 0xBEBD}, {0xBEBE, 0xBEBE, 0xBEBE}, + {0xBEBF, 0xBEBF, 0xBEBF}, {0xBEC0, 0xBEC0, 0xBEC0}, + {0xBEC1, 0xBEC1, 0xBEC1}, {0xBEC2, 0xBEC2, 0xBEC2}, + {0xBEC3, 0xBEC3, 0xBEC3}, {0xBEC4, 0xBEC4, 0xBEC4}, + {0xBEC5, 0xBEC5, 0xBEC5}, {0xBEC6, 0xBEC6, 0xBEC6}, + {0xBEC7, 0xBEC7, 0xBEC7}, {0xBEC8, 0xBEC8, 0xBEC8}, + {0xBEC9, 0xBEC9, 0xBEC9}, {0xBECA, 0xBECA, 0xBECA}, + {0xBECB, 0xBECB, 0xBECB}, {0xBECC, 0xBECC, 0xBECC}, + {0xBECD, 0xBECD, 0xBECD}, {0xBECE, 0xBECE, 0xBECE}, + {0xBECF, 0xBECF, 0xBECF}, {0xBED0, 0xBED0, 0xBED0}, + {0xBED1, 0xBED1, 0xBED1}, {0xBED2, 0xBED2, 0xBED2}, + {0xBED3, 0xBED3, 0xBED3}, {0xBED4, 0xBED4, 0xBED4}, + {0xBED5, 0xBED5, 0xBED5}, {0xBED6, 0xBED6, 0xBED6}, + {0xBED7, 0xBED7, 0xBED7}, {0xBED8, 0xBED8, 0xBED8}, + {0xBED9, 0xBED9, 0xBED9}, {0xBEDA, 0xBEDA, 0xBEDA}, + {0xBEDB, 0xBEDB, 0xBEDB}, {0xBEDC, 0xBEDC, 0xBEDC}, + {0xBEDD, 0xBEDD, 0xBEDD}, {0xBEDE, 0xBEDE, 0xBEDE}, + {0xBEDF, 0xBEDF, 0xBEDF}, {0xBEE0, 0xBEE0, 0xBEE0}, + {0xBEE1, 0xBEE1, 0xBEE1}, {0xBEE2, 0xBEE2, 0xBEE2}, + {0xBEE3, 0xBEE3, 0xBEE3}, {0xBEE4, 0xBEE4, 0xBEE4}, + {0xBEE5, 0xBEE5, 0xBEE5}, {0xBEE6, 0xBEE6, 0xBEE6}, + {0xBEE7, 0xBEE7, 0xBEE7}, {0xBEE8, 0xBEE8, 0xBEE8}, + {0xBEE9, 0xBEE9, 0xBEE9}, {0xBEEA, 0xBEEA, 0xBEEA}, + {0xBEEB, 0xBEEB, 0xBEEB}, {0xBEEC, 0xBEEC, 0xBEEC}, + {0xBEED, 0xBEED, 0xBEED}, {0xBEEE, 0xBEEE, 0xBEEE}, + {0xBEEF, 0xBEEF, 0xBEEF}, {0xBEF0, 0xBEF0, 0xBEF0}, + {0xBEF1, 0xBEF1, 0xBEF1}, {0xBEF2, 0xBEF2, 0xBEF2}, + {0xBEF3, 0xBEF3, 0xBEF3}, {0xBEF4, 0xBEF4, 0xBEF4}, + {0xBEF5, 0xBEF5, 0xBEF5}, {0xBEF6, 0xBEF6, 0xBEF6}, + {0xBEF7, 0xBEF7, 0xBEF7}, {0xBEF8, 0xBEF8, 0xBEF8}, + {0xBEF9, 0xBEF9, 0xBEF9}, {0xBEFA, 0xBEFA, 0xBEFA}, + {0xBEFB, 0xBEFB, 0xBEFB}, {0xBEFC, 0xBEFC, 0xBEFC}, + {0xBEFD, 0xBEFD, 0xBEFD}, {0xBEFE, 0xBEFE, 0xBEFE}, + {0xBEFF, 0xBEFF, 0xBEFF}, {0xBF00, 0xBF00, 0xBF00}, + {0xBF01, 0xBF01, 0xBF01}, {0xBF02, 0xBF02, 0xBF02}, + {0xBF03, 0xBF03, 0xBF03}, {0xBF04, 0xBF04, 0xBF04}, + {0xBF05, 0xBF05, 0xBF05}, {0xBF06, 0xBF06, 0xBF06}, + {0xBF07, 0xBF07, 0xBF07}, {0xBF08, 0xBF08, 0xBF08}, + {0xBF09, 0xBF09, 0xBF09}, {0xBF0A, 0xBF0A, 0xBF0A}, + {0xBF0B, 0xBF0B, 0xBF0B}, {0xBF0C, 0xBF0C, 0xBF0C}, + {0xBF0D, 0xBF0D, 0xBF0D}, {0xBF0E, 0xBF0E, 0xBF0E}, + {0xBF0F, 0xBF0F, 0xBF0F}, {0xBF10, 0xBF10, 0xBF10}, + {0xBF11, 0xBF11, 0xBF11}, {0xBF12, 0xBF12, 0xBF12}, + {0xBF13, 0xBF13, 0xBF13}, {0xBF14, 0xBF14, 0xBF14}, + {0xBF15, 0xBF15, 0xBF15}, {0xBF16, 0xBF16, 0xBF16}, + {0xBF17, 0xBF17, 0xBF17}, {0xBF18, 0xBF18, 0xBF18}, + {0xBF19, 0xBF19, 0xBF19}, {0xBF1A, 0xBF1A, 0xBF1A}, + {0xBF1B, 0xBF1B, 0xBF1B}, {0xBF1C, 0xBF1C, 0xBF1C}, + {0xBF1D, 0xBF1D, 0xBF1D}, {0xBF1E, 0xBF1E, 0xBF1E}, + {0xBF1F, 0xBF1F, 0xBF1F}, {0xBF20, 0xBF20, 0xBF20}, + {0xBF21, 0xBF21, 0xBF21}, {0xBF22, 0xBF22, 0xBF22}, + {0xBF23, 0xBF23, 0xBF23}, {0xBF24, 0xBF24, 0xBF24}, + {0xBF25, 0xBF25, 0xBF25}, {0xBF26, 0xBF26, 0xBF26}, + {0xBF27, 0xBF27, 0xBF27}, {0xBF28, 0xBF28, 0xBF28}, + {0xBF29, 0xBF29, 0xBF29}, {0xBF2A, 0xBF2A, 0xBF2A}, + {0xBF2B, 0xBF2B, 0xBF2B}, {0xBF2C, 0xBF2C, 0xBF2C}, + {0xBF2D, 0xBF2D, 0xBF2D}, {0xBF2E, 0xBF2E, 0xBF2E}, + {0xBF2F, 0xBF2F, 0xBF2F}, {0xBF30, 0xBF30, 0xBF30}, + {0xBF31, 0xBF31, 0xBF31}, {0xBF32, 0xBF32, 0xBF32}, + {0xBF33, 0xBF33, 0xBF33}, {0xBF34, 0xBF34, 0xBF34}, + {0xBF35, 0xBF35, 0xBF35}, {0xBF36, 0xBF36, 0xBF36}, + {0xBF37, 0xBF37, 0xBF37}, {0xBF38, 0xBF38, 0xBF38}, + {0xBF39, 0xBF39, 0xBF39}, {0xBF3A, 0xBF3A, 0xBF3A}, + {0xBF3B, 0xBF3B, 0xBF3B}, {0xBF3C, 0xBF3C, 0xBF3C}, + {0xBF3D, 0xBF3D, 0xBF3D}, {0xBF3E, 0xBF3E, 0xBF3E}, + {0xBF3F, 0xBF3F, 0xBF3F}, {0xBF40, 0xBF40, 0xBF40}, + {0xBF41, 0xBF41, 0xBF41}, {0xBF42, 0xBF42, 0xBF42}, + {0xBF43, 0xBF43, 0xBF43}, {0xBF44, 0xBF44, 0xBF44}, + {0xBF45, 0xBF45, 0xBF45}, {0xBF46, 0xBF46, 0xBF46}, + {0xBF47, 0xBF47, 0xBF47}, {0xBF48, 0xBF48, 0xBF48}, + {0xBF49, 0xBF49, 0xBF49}, {0xBF4A, 0xBF4A, 0xBF4A}, + {0xBF4B, 0xBF4B, 0xBF4B}, {0xBF4C, 0xBF4C, 0xBF4C}, + {0xBF4D, 0xBF4D, 0xBF4D}, {0xBF4E, 0xBF4E, 0xBF4E}, + {0xBF4F, 0xBF4F, 0xBF4F}, {0xBF50, 0xBF50, 0xBF50}, + {0xBF51, 0xBF51, 0xBF51}, {0xBF52, 0xBF52, 0xBF52}, + {0xBF53, 0xBF53, 0xBF53}, {0xBF54, 0xBF54, 0xBF54}, + {0xBF55, 0xBF55, 0xBF55}, {0xBF56, 0xBF56, 0xBF56}, + {0xBF57, 0xBF57, 0xBF57}, {0xBF58, 0xBF58, 0xBF58}, + {0xBF59, 0xBF59, 0xBF59}, {0xBF5A, 0xBF5A, 0xBF5A}, + {0xBF5B, 0xBF5B, 0xBF5B}, {0xBF5C, 0xBF5C, 0xBF5C}, + {0xBF5D, 0xBF5D, 0xBF5D}, {0xBF5E, 0xBF5E, 0xBF5E}, + {0xBF5F, 0xBF5F, 0xBF5F}, {0xBF60, 0xBF60, 0xBF60}, + {0xBF61, 0xBF61, 0xBF61}, {0xBF62, 0xBF62, 0xBF62}, + {0xBF63, 0xBF63, 0xBF63}, {0xBF64, 0xBF64, 0xBF64}, + {0xBF65, 0xBF65, 0xBF65}, {0xBF66, 0xBF66, 0xBF66}, + {0xBF67, 0xBF67, 0xBF67}, {0xBF68, 0xBF68, 0xBF68}, + {0xBF69, 0xBF69, 0xBF69}, {0xBF6A, 0xBF6A, 0xBF6A}, + {0xBF6B, 0xBF6B, 0xBF6B}, {0xBF6C, 0xBF6C, 0xBF6C}, + {0xBF6D, 0xBF6D, 0xBF6D}, {0xBF6E, 0xBF6E, 0xBF6E}, + {0xBF6F, 0xBF6F, 0xBF6F}, {0xBF70, 0xBF70, 0xBF70}, + {0xBF71, 0xBF71, 0xBF71}, {0xBF72, 0xBF72, 0xBF72}, + {0xBF73, 0xBF73, 0xBF73}, {0xBF74, 0xBF74, 0xBF74}, + {0xBF75, 0xBF75, 0xBF75}, {0xBF76, 0xBF76, 0xBF76}, + {0xBF77, 0xBF77, 0xBF77}, {0xBF78, 0xBF78, 0xBF78}, + {0xBF79, 0xBF79, 0xBF79}, {0xBF7A, 0xBF7A, 0xBF7A}, + {0xBF7B, 0xBF7B, 0xBF7B}, {0xBF7C, 0xBF7C, 0xBF7C}, + {0xBF7D, 0xBF7D, 0xBF7D}, {0xBF7E, 0xBF7E, 0xBF7E}, + {0xBF7F, 0xBF7F, 0xBF7F}, {0xBF80, 0xBF80, 0xBF80}, + {0xBF81, 0xBF81, 0xBF81}, {0xBF82, 0xBF82, 0xBF82}, + {0xBF83, 0xBF83, 0xBF83}, {0xBF84, 0xBF84, 0xBF84}, + {0xBF85, 0xBF85, 0xBF85}, {0xBF86, 0xBF86, 0xBF86}, + {0xBF87, 0xBF87, 0xBF87}, {0xBF88, 0xBF88, 0xBF88}, + {0xBF89, 0xBF89, 0xBF89}, {0xBF8A, 0xBF8A, 0xBF8A}, + {0xBF8B, 0xBF8B, 0xBF8B}, {0xBF8C, 0xBF8C, 0xBF8C}, + {0xBF8D, 0xBF8D, 0xBF8D}, {0xBF8E, 0xBF8E, 0xBF8E}, + {0xBF8F, 0xBF8F, 0xBF8F}, {0xBF90, 0xBF90, 0xBF90}, + {0xBF91, 0xBF91, 0xBF91}, {0xBF92, 0xBF92, 0xBF92}, + {0xBF93, 0xBF93, 0xBF93}, {0xBF94, 0xBF94, 0xBF94}, + {0xBF95, 0xBF95, 0xBF95}, {0xBF96, 0xBF96, 0xBF96}, + {0xBF97, 0xBF97, 0xBF97}, {0xBF98, 0xBF98, 0xBF98}, + {0xBF99, 0xBF99, 0xBF99}, {0xBF9A, 0xBF9A, 0xBF9A}, + {0xBF9B, 0xBF9B, 0xBF9B}, {0xBF9C, 0xBF9C, 0xBF9C}, + {0xBF9D, 0xBF9D, 0xBF9D}, {0xBF9E, 0xBF9E, 0xBF9E}, + {0xBF9F, 0xBF9F, 0xBF9F}, {0xBFA0, 0xBFA0, 0xBFA0}, + {0xBFA1, 0xBFA1, 0xBFA1}, {0xBFA2, 0xBFA2, 0xBFA2}, + {0xBFA3, 0xBFA3, 0xBFA3}, {0xBFA4, 0xBFA4, 0xBFA4}, + {0xBFA5, 0xBFA5, 0xBFA5}, {0xBFA6, 0xBFA6, 0xBFA6}, + {0xBFA7, 0xBFA7, 0xBFA7}, {0xBFA8, 0xBFA8, 0xBFA8}, + {0xBFA9, 0xBFA9, 0xBFA9}, {0xBFAA, 0xBFAA, 0xBFAA}, + {0xBFAB, 0xBFAB, 0xBFAB}, {0xBFAC, 0xBFAC, 0xBFAC}, + {0xBFAD, 0xBFAD, 0xBFAD}, {0xBFAE, 0xBFAE, 0xBFAE}, + {0xBFAF, 0xBFAF, 0xBFAF}, {0xBFB0, 0xBFB0, 0xBFB0}, + {0xBFB1, 0xBFB1, 0xBFB1}, {0xBFB2, 0xBFB2, 0xBFB2}, + {0xBFB3, 0xBFB3, 0xBFB3}, {0xBFB4, 0xBFB4, 0xBFB4}, + {0xBFB5, 0xBFB5, 0xBFB5}, {0xBFB6, 0xBFB6, 0xBFB6}, + {0xBFB7, 0xBFB7, 0xBFB7}, {0xBFB8, 0xBFB8, 0xBFB8}, + {0xBFB9, 0xBFB9, 0xBFB9}, {0xBFBA, 0xBFBA, 0xBFBA}, + {0xBFBB, 0xBFBB, 0xBFBB}, {0xBFBC, 0xBFBC, 0xBFBC}, + {0xBFBD, 0xBFBD, 0xBFBD}, {0xBFBE, 0xBFBE, 0xBFBE}, + {0xBFBF, 0xBFBF, 0xBFBF}, {0xBFC0, 0xBFC0, 0xBFC0}, + {0xBFC1, 0xBFC1, 0xBFC1}, {0xBFC2, 0xBFC2, 0xBFC2}, + {0xBFC3, 0xBFC3, 0xBFC3}, {0xBFC4, 0xBFC4, 0xBFC4}, + {0xBFC5, 0xBFC5, 0xBFC5}, {0xBFC6, 0xBFC6, 0xBFC6}, + {0xBFC7, 0xBFC7, 0xBFC7}, {0xBFC8, 0xBFC8, 0xBFC8}, + {0xBFC9, 0xBFC9, 0xBFC9}, {0xBFCA, 0xBFCA, 0xBFCA}, + {0xBFCB, 0xBFCB, 0xBFCB}, {0xBFCC, 0xBFCC, 0xBFCC}, + {0xBFCD, 0xBFCD, 0xBFCD}, {0xBFCE, 0xBFCE, 0xBFCE}, + {0xBFCF, 0xBFCF, 0xBFCF}, {0xBFD0, 0xBFD0, 0xBFD0}, + {0xBFD1, 0xBFD1, 0xBFD1}, {0xBFD2, 0xBFD2, 0xBFD2}, + {0xBFD3, 0xBFD3, 0xBFD3}, {0xBFD4, 0xBFD4, 0xBFD4}, + {0xBFD5, 0xBFD5, 0xBFD5}, {0xBFD6, 0xBFD6, 0xBFD6}, + {0xBFD7, 0xBFD7, 0xBFD7}, {0xBFD8, 0xBFD8, 0xBFD8}, + {0xBFD9, 0xBFD9, 0xBFD9}, {0xBFDA, 0xBFDA, 0xBFDA}, + {0xBFDB, 0xBFDB, 0xBFDB}, {0xBFDC, 0xBFDC, 0xBFDC}, + {0xBFDD, 0xBFDD, 0xBFDD}, {0xBFDE, 0xBFDE, 0xBFDE}, + {0xBFDF, 0xBFDF, 0xBFDF}, {0xBFE0, 0xBFE0, 0xBFE0}, + {0xBFE1, 0xBFE1, 0xBFE1}, {0xBFE2, 0xBFE2, 0xBFE2}, + {0xBFE3, 0xBFE3, 0xBFE3}, {0xBFE4, 0xBFE4, 0xBFE4}, + {0xBFE5, 0xBFE5, 0xBFE5}, {0xBFE6, 0xBFE6, 0xBFE6}, + {0xBFE7, 0xBFE7, 0xBFE7}, {0xBFE8, 0xBFE8, 0xBFE8}, + {0xBFE9, 0xBFE9, 0xBFE9}, {0xBFEA, 0xBFEA, 0xBFEA}, + {0xBFEB, 0xBFEB, 0xBFEB}, {0xBFEC, 0xBFEC, 0xBFEC}, + {0xBFED, 0xBFED, 0xBFED}, {0xBFEE, 0xBFEE, 0xBFEE}, + {0xBFEF, 0xBFEF, 0xBFEF}, {0xBFF0, 0xBFF0, 0xBFF0}, + {0xBFF1, 0xBFF1, 0xBFF1}, {0xBFF2, 0xBFF2, 0xBFF2}, + {0xBFF3, 0xBFF3, 0xBFF3}, {0xBFF4, 0xBFF4, 0xBFF4}, + {0xBFF5, 0xBFF5, 0xBFF5}, {0xBFF6, 0xBFF6, 0xBFF6}, + {0xBFF7, 0xBFF7, 0xBFF7}, {0xBFF8, 0xBFF8, 0xBFF8}, + {0xBFF9, 0xBFF9, 0xBFF9}, {0xBFFA, 0xBFFA, 0xBFFA}, + {0xBFFB, 0xBFFB, 0xBFFB}, {0xBFFC, 0xBFFC, 0xBFFC}, + {0xBFFD, 0xBFFD, 0xBFFD}, {0xBFFE, 0xBFFE, 0xBFFE}, + {0xBFFF, 0xBFFF, 0xBFFF}, {0xC000, 0xC000, 0xC000}, + {0xC001, 0xC001, 0xC001}, {0xC002, 0xC002, 0xC002}, + {0xC003, 0xC003, 0xC003}, {0xC004, 0xC004, 0xC004}, + {0xC005, 0xC005, 0xC005}, {0xC006, 0xC006, 0xC006}, + {0xC007, 0xC007, 0xC007}, {0xC008, 0xC008, 0xC008}, + {0xC009, 0xC009, 0xC009}, {0xC00A, 0xC00A, 0xC00A}, + {0xC00B, 0xC00B, 0xC00B}, {0xC00C, 0xC00C, 0xC00C}, + {0xC00D, 0xC00D, 0xC00D}, {0xC00E, 0xC00E, 0xC00E}, + {0xC00F, 0xC00F, 0xC00F}, {0xC010, 0xC010, 0xC010}, + {0xC011, 0xC011, 0xC011}, {0xC012, 0xC012, 0xC012}, + {0xC013, 0xC013, 0xC013}, {0xC014, 0xC014, 0xC014}, + {0xC015, 0xC015, 0xC015}, {0xC016, 0xC016, 0xC016}, + {0xC017, 0xC017, 0xC017}, {0xC018, 0xC018, 0xC018}, + {0xC019, 0xC019, 0xC019}, {0xC01A, 0xC01A, 0xC01A}, + {0xC01B, 0xC01B, 0xC01B}, {0xC01C, 0xC01C, 0xC01C}, + {0xC01D, 0xC01D, 0xC01D}, {0xC01E, 0xC01E, 0xC01E}, + {0xC01F, 0xC01F, 0xC01F}, {0xC020, 0xC020, 0xC020}, + {0xC021, 0xC021, 0xC021}, {0xC022, 0xC022, 0xC022}, + {0xC023, 0xC023, 0xC023}, {0xC024, 0xC024, 0xC024}, + {0xC025, 0xC025, 0xC025}, {0xC026, 0xC026, 0xC026}, + {0xC027, 0xC027, 0xC027}, {0xC028, 0xC028, 0xC028}, + {0xC029, 0xC029, 0xC029}, {0xC02A, 0xC02A, 0xC02A}, + {0xC02B, 0xC02B, 0xC02B}, {0xC02C, 0xC02C, 0xC02C}, + {0xC02D, 0xC02D, 0xC02D}, {0xC02E, 0xC02E, 0xC02E}, + {0xC02F, 0xC02F, 0xC02F}, {0xC030, 0xC030, 0xC030}, + {0xC031, 0xC031, 0xC031}, {0xC032, 0xC032, 0xC032}, + {0xC033, 0xC033, 0xC033}, {0xC034, 0xC034, 0xC034}, + {0xC035, 0xC035, 0xC035}, {0xC036, 0xC036, 0xC036}, + {0xC037, 0xC037, 0xC037}, {0xC038, 0xC038, 0xC038}, + {0xC039, 0xC039, 0xC039}, {0xC03A, 0xC03A, 0xC03A}, + {0xC03B, 0xC03B, 0xC03B}, {0xC03C, 0xC03C, 0xC03C}, + {0xC03D, 0xC03D, 0xC03D}, {0xC03E, 0xC03E, 0xC03E}, + {0xC03F, 0xC03F, 0xC03F}, {0xC040, 0xC040, 0xC040}, + {0xC041, 0xC041, 0xC041}, {0xC042, 0xC042, 0xC042}, + {0xC043, 0xC043, 0xC043}, {0xC044, 0xC044, 0xC044}, + {0xC045, 0xC045, 0xC045}, {0xC046, 0xC046, 0xC046}, + {0xC047, 0xC047, 0xC047}, {0xC048, 0xC048, 0xC048}, + {0xC049, 0xC049, 0xC049}, {0xC04A, 0xC04A, 0xC04A}, + {0xC04B, 0xC04B, 0xC04B}, {0xC04C, 0xC04C, 0xC04C}, + {0xC04D, 0xC04D, 0xC04D}, {0xC04E, 0xC04E, 0xC04E}, + {0xC04F, 0xC04F, 0xC04F}, {0xC050, 0xC050, 0xC050}, + {0xC051, 0xC051, 0xC051}, {0xC052, 0xC052, 0xC052}, + {0xC053, 0xC053, 0xC053}, {0xC054, 0xC054, 0xC054}, + {0xC055, 0xC055, 0xC055}, {0xC056, 0xC056, 0xC056}, + {0xC057, 0xC057, 0xC057}, {0xC058, 0xC058, 0xC058}, + {0xC059, 0xC059, 0xC059}, {0xC05A, 0xC05A, 0xC05A}, + {0xC05B, 0xC05B, 0xC05B}, {0xC05C, 0xC05C, 0xC05C}, + {0xC05D, 0xC05D, 0xC05D}, {0xC05E, 0xC05E, 0xC05E}, + {0xC05F, 0xC05F, 0xC05F}, {0xC060, 0xC060, 0xC060}, + {0xC061, 0xC061, 0xC061}, {0xC062, 0xC062, 0xC062}, + {0xC063, 0xC063, 0xC063}, {0xC064, 0xC064, 0xC064}, + {0xC065, 0xC065, 0xC065}, {0xC066, 0xC066, 0xC066}, + {0xC067, 0xC067, 0xC067}, {0xC068, 0xC068, 0xC068}, + {0xC069, 0xC069, 0xC069}, {0xC06A, 0xC06A, 0xC06A}, + {0xC06B, 0xC06B, 0xC06B}, {0xC06C, 0xC06C, 0xC06C}, + {0xC06D, 0xC06D, 0xC06D}, {0xC06E, 0xC06E, 0xC06E}, + {0xC06F, 0xC06F, 0xC06F}, {0xC070, 0xC070, 0xC070}, + {0xC071, 0xC071, 0xC071}, {0xC072, 0xC072, 0xC072}, + {0xC073, 0xC073, 0xC073}, {0xC074, 0xC074, 0xC074}, + {0xC075, 0xC075, 0xC075}, {0xC076, 0xC076, 0xC076}, + {0xC077, 0xC077, 0xC077}, {0xC078, 0xC078, 0xC078}, + {0xC079, 0xC079, 0xC079}, {0xC07A, 0xC07A, 0xC07A}, + {0xC07B, 0xC07B, 0xC07B}, {0xC07C, 0xC07C, 0xC07C}, + {0xC07D, 0xC07D, 0xC07D}, {0xC07E, 0xC07E, 0xC07E}, + {0xC07F, 0xC07F, 0xC07F}, {0xC080, 0xC080, 0xC080}, + {0xC081, 0xC081, 0xC081}, {0xC082, 0xC082, 0xC082}, + {0xC083, 0xC083, 0xC083}, {0xC084, 0xC084, 0xC084}, + {0xC085, 0xC085, 0xC085}, {0xC086, 0xC086, 0xC086}, + {0xC087, 0xC087, 0xC087}, {0xC088, 0xC088, 0xC088}, + {0xC089, 0xC089, 0xC089}, {0xC08A, 0xC08A, 0xC08A}, + {0xC08B, 0xC08B, 0xC08B}, {0xC08C, 0xC08C, 0xC08C}, + {0xC08D, 0xC08D, 0xC08D}, {0xC08E, 0xC08E, 0xC08E}, + {0xC08F, 0xC08F, 0xC08F}, {0xC090, 0xC090, 0xC090}, + {0xC091, 0xC091, 0xC091}, {0xC092, 0xC092, 0xC092}, + {0xC093, 0xC093, 0xC093}, {0xC094, 0xC094, 0xC094}, + {0xC095, 0xC095, 0xC095}, {0xC096, 0xC096, 0xC096}, + {0xC097, 0xC097, 0xC097}, {0xC098, 0xC098, 0xC098}, + {0xC099, 0xC099, 0xC099}, {0xC09A, 0xC09A, 0xC09A}, + {0xC09B, 0xC09B, 0xC09B}, {0xC09C, 0xC09C, 0xC09C}, + {0xC09D, 0xC09D, 0xC09D}, {0xC09E, 0xC09E, 0xC09E}, + {0xC09F, 0xC09F, 0xC09F}, {0xC0A0, 0xC0A0, 0xC0A0}, + {0xC0A1, 0xC0A1, 0xC0A1}, {0xC0A2, 0xC0A2, 0xC0A2}, + {0xC0A3, 0xC0A3, 0xC0A3}, {0xC0A4, 0xC0A4, 0xC0A4}, + {0xC0A5, 0xC0A5, 0xC0A5}, {0xC0A6, 0xC0A6, 0xC0A6}, + {0xC0A7, 0xC0A7, 0xC0A7}, {0xC0A8, 0xC0A8, 0xC0A8}, + {0xC0A9, 0xC0A9, 0xC0A9}, {0xC0AA, 0xC0AA, 0xC0AA}, + {0xC0AB, 0xC0AB, 0xC0AB}, {0xC0AC, 0xC0AC, 0xC0AC}, + {0xC0AD, 0xC0AD, 0xC0AD}, {0xC0AE, 0xC0AE, 0xC0AE}, + {0xC0AF, 0xC0AF, 0xC0AF}, {0xC0B0, 0xC0B0, 0xC0B0}, + {0xC0B1, 0xC0B1, 0xC0B1}, {0xC0B2, 0xC0B2, 0xC0B2}, + {0xC0B3, 0xC0B3, 0xC0B3}, {0xC0B4, 0xC0B4, 0xC0B4}, + {0xC0B5, 0xC0B5, 0xC0B5}, {0xC0B6, 0xC0B6, 0xC0B6}, + {0xC0B7, 0xC0B7, 0xC0B7}, {0xC0B8, 0xC0B8, 0xC0B8}, + {0xC0B9, 0xC0B9, 0xC0B9}, {0xC0BA, 0xC0BA, 0xC0BA}, + {0xC0BB, 0xC0BB, 0xC0BB}, {0xC0BC, 0xC0BC, 0xC0BC}, + {0xC0BD, 0xC0BD, 0xC0BD}, {0xC0BE, 0xC0BE, 0xC0BE}, + {0xC0BF, 0xC0BF, 0xC0BF}, {0xC0C0, 0xC0C0, 0xC0C0}, + {0xC0C1, 0xC0C1, 0xC0C1}, {0xC0C2, 0xC0C2, 0xC0C2}, + {0xC0C3, 0xC0C3, 0xC0C3}, {0xC0C4, 0xC0C4, 0xC0C4}, + {0xC0C5, 0xC0C5, 0xC0C5}, {0xC0C6, 0xC0C6, 0xC0C6}, + {0xC0C7, 0xC0C7, 0xC0C7}, {0xC0C8, 0xC0C8, 0xC0C8}, + {0xC0C9, 0xC0C9, 0xC0C9}, {0xC0CA, 0xC0CA, 0xC0CA}, + {0xC0CB, 0xC0CB, 0xC0CB}, {0xC0CC, 0xC0CC, 0xC0CC}, + {0xC0CD, 0xC0CD, 0xC0CD}, {0xC0CE, 0xC0CE, 0xC0CE}, + {0xC0CF, 0xC0CF, 0xC0CF}, {0xC0D0, 0xC0D0, 0xC0D0}, + {0xC0D1, 0xC0D1, 0xC0D1}, {0xC0D2, 0xC0D2, 0xC0D2}, + {0xC0D3, 0xC0D3, 0xC0D3}, {0xC0D4, 0xC0D4, 0xC0D4}, + {0xC0D5, 0xC0D5, 0xC0D5}, {0xC0D6, 0xC0D6, 0xC0D6}, + {0xC0D7, 0xC0D7, 0xC0D7}, {0xC0D8, 0xC0D8, 0xC0D8}, + {0xC0D9, 0xC0D9, 0xC0D9}, {0xC0DA, 0xC0DA, 0xC0DA}, + {0xC0DB, 0xC0DB, 0xC0DB}, {0xC0DC, 0xC0DC, 0xC0DC}, + {0xC0DD, 0xC0DD, 0xC0DD}, {0xC0DE, 0xC0DE, 0xC0DE}, + {0xC0DF, 0xC0DF, 0xC0DF}, {0xC0E0, 0xC0E0, 0xC0E0}, + {0xC0E1, 0xC0E1, 0xC0E1}, {0xC0E2, 0xC0E2, 0xC0E2}, + {0xC0E3, 0xC0E3, 0xC0E3}, {0xC0E4, 0xC0E4, 0xC0E4}, + {0xC0E5, 0xC0E5, 0xC0E5}, {0xC0E6, 0xC0E6, 0xC0E6}, + {0xC0E7, 0xC0E7, 0xC0E7}, {0xC0E8, 0xC0E8, 0xC0E8}, + {0xC0E9, 0xC0E9, 0xC0E9}, {0xC0EA, 0xC0EA, 0xC0EA}, + {0xC0EB, 0xC0EB, 0xC0EB}, {0xC0EC, 0xC0EC, 0xC0EC}, + {0xC0ED, 0xC0ED, 0xC0ED}, {0xC0EE, 0xC0EE, 0xC0EE}, + {0xC0EF, 0xC0EF, 0xC0EF}, {0xC0F0, 0xC0F0, 0xC0F0}, + {0xC0F1, 0xC0F1, 0xC0F1}, {0xC0F2, 0xC0F2, 0xC0F2}, + {0xC0F3, 0xC0F3, 0xC0F3}, {0xC0F4, 0xC0F4, 0xC0F4}, + {0xC0F5, 0xC0F5, 0xC0F5}, {0xC0F6, 0xC0F6, 0xC0F6}, + {0xC0F7, 0xC0F7, 0xC0F7}, {0xC0F8, 0xC0F8, 0xC0F8}, + {0xC0F9, 0xC0F9, 0xC0F9}, {0xC0FA, 0xC0FA, 0xC0FA}, + {0xC0FB, 0xC0FB, 0xC0FB}, {0xC0FC, 0xC0FC, 0xC0FC}, + {0xC0FD, 0xC0FD, 0xC0FD}, {0xC0FE, 0xC0FE, 0xC0FE}, + {0xC0FF, 0xC0FF, 0xC0FF}, {0xC100, 0xC100, 0xC100}, + {0xC101, 0xC101, 0xC101}, {0xC102, 0xC102, 0xC102}, + {0xC103, 0xC103, 0xC103}, {0xC104, 0xC104, 0xC104}, + {0xC105, 0xC105, 0xC105}, {0xC106, 0xC106, 0xC106}, + {0xC107, 0xC107, 0xC107}, {0xC108, 0xC108, 0xC108}, + {0xC109, 0xC109, 0xC109}, {0xC10A, 0xC10A, 0xC10A}, + {0xC10B, 0xC10B, 0xC10B}, {0xC10C, 0xC10C, 0xC10C}, + {0xC10D, 0xC10D, 0xC10D}, {0xC10E, 0xC10E, 0xC10E}, + {0xC10F, 0xC10F, 0xC10F}, {0xC110, 0xC110, 0xC110}, + {0xC111, 0xC111, 0xC111}, {0xC112, 0xC112, 0xC112}, + {0xC113, 0xC113, 0xC113}, {0xC114, 0xC114, 0xC114}, + {0xC115, 0xC115, 0xC115}, {0xC116, 0xC116, 0xC116}, + {0xC117, 0xC117, 0xC117}, {0xC118, 0xC118, 0xC118}, + {0xC119, 0xC119, 0xC119}, {0xC11A, 0xC11A, 0xC11A}, + {0xC11B, 0xC11B, 0xC11B}, {0xC11C, 0xC11C, 0xC11C}, + {0xC11D, 0xC11D, 0xC11D}, {0xC11E, 0xC11E, 0xC11E}, + {0xC11F, 0xC11F, 0xC11F}, {0xC120, 0xC120, 0xC120}, + {0xC121, 0xC121, 0xC121}, {0xC122, 0xC122, 0xC122}, + {0xC123, 0xC123, 0xC123}, {0xC124, 0xC124, 0xC124}, + {0xC125, 0xC125, 0xC125}, {0xC126, 0xC126, 0xC126}, + {0xC127, 0xC127, 0xC127}, {0xC128, 0xC128, 0xC128}, + {0xC129, 0xC129, 0xC129}, {0xC12A, 0xC12A, 0xC12A}, + {0xC12B, 0xC12B, 0xC12B}, {0xC12C, 0xC12C, 0xC12C}, + {0xC12D, 0xC12D, 0xC12D}, {0xC12E, 0xC12E, 0xC12E}, + {0xC12F, 0xC12F, 0xC12F}, {0xC130, 0xC130, 0xC130}, + {0xC131, 0xC131, 0xC131}, {0xC132, 0xC132, 0xC132}, + {0xC133, 0xC133, 0xC133}, {0xC134, 0xC134, 0xC134}, + {0xC135, 0xC135, 0xC135}, {0xC136, 0xC136, 0xC136}, + {0xC137, 0xC137, 0xC137}, {0xC138, 0xC138, 0xC138}, + {0xC139, 0xC139, 0xC139}, {0xC13A, 0xC13A, 0xC13A}, + {0xC13B, 0xC13B, 0xC13B}, {0xC13C, 0xC13C, 0xC13C}, + {0xC13D, 0xC13D, 0xC13D}, {0xC13E, 0xC13E, 0xC13E}, + {0xC13F, 0xC13F, 0xC13F}, {0xC140, 0xC140, 0xC140}, + {0xC141, 0xC141, 0xC141}, {0xC142, 0xC142, 0xC142}, + {0xC143, 0xC143, 0xC143}, {0xC144, 0xC144, 0xC144}, + {0xC145, 0xC145, 0xC145}, {0xC146, 0xC146, 0xC146}, + {0xC147, 0xC147, 0xC147}, {0xC148, 0xC148, 0xC148}, + {0xC149, 0xC149, 0xC149}, {0xC14A, 0xC14A, 0xC14A}, + {0xC14B, 0xC14B, 0xC14B}, {0xC14C, 0xC14C, 0xC14C}, + {0xC14D, 0xC14D, 0xC14D}, {0xC14E, 0xC14E, 0xC14E}, + {0xC14F, 0xC14F, 0xC14F}, {0xC150, 0xC150, 0xC150}, + {0xC151, 0xC151, 0xC151}, {0xC152, 0xC152, 0xC152}, + {0xC153, 0xC153, 0xC153}, {0xC154, 0xC154, 0xC154}, + {0xC155, 0xC155, 0xC155}, {0xC156, 0xC156, 0xC156}, + {0xC157, 0xC157, 0xC157}, {0xC158, 0xC158, 0xC158}, + {0xC159, 0xC159, 0xC159}, {0xC15A, 0xC15A, 0xC15A}, + {0xC15B, 0xC15B, 0xC15B}, {0xC15C, 0xC15C, 0xC15C}, + {0xC15D, 0xC15D, 0xC15D}, {0xC15E, 0xC15E, 0xC15E}, + {0xC15F, 0xC15F, 0xC15F}, {0xC160, 0xC160, 0xC160}, + {0xC161, 0xC161, 0xC161}, {0xC162, 0xC162, 0xC162}, + {0xC163, 0xC163, 0xC163}, {0xC164, 0xC164, 0xC164}, + {0xC165, 0xC165, 0xC165}, {0xC166, 0xC166, 0xC166}, + {0xC167, 0xC167, 0xC167}, {0xC168, 0xC168, 0xC168}, + {0xC169, 0xC169, 0xC169}, {0xC16A, 0xC16A, 0xC16A}, + {0xC16B, 0xC16B, 0xC16B}, {0xC16C, 0xC16C, 0xC16C}, + {0xC16D, 0xC16D, 0xC16D}, {0xC16E, 0xC16E, 0xC16E}, + {0xC16F, 0xC16F, 0xC16F}, {0xC170, 0xC170, 0xC170}, + {0xC171, 0xC171, 0xC171}, {0xC172, 0xC172, 0xC172}, + {0xC173, 0xC173, 0xC173}, {0xC174, 0xC174, 0xC174}, + {0xC175, 0xC175, 0xC175}, {0xC176, 0xC176, 0xC176}, + {0xC177, 0xC177, 0xC177}, {0xC178, 0xC178, 0xC178}, + {0xC179, 0xC179, 0xC179}, {0xC17A, 0xC17A, 0xC17A}, + {0xC17B, 0xC17B, 0xC17B}, {0xC17C, 0xC17C, 0xC17C}, + {0xC17D, 0xC17D, 0xC17D}, {0xC17E, 0xC17E, 0xC17E}, + {0xC17F, 0xC17F, 0xC17F}, {0xC180, 0xC180, 0xC180}, + {0xC181, 0xC181, 0xC181}, {0xC182, 0xC182, 0xC182}, + {0xC183, 0xC183, 0xC183}, {0xC184, 0xC184, 0xC184}, + {0xC185, 0xC185, 0xC185}, {0xC186, 0xC186, 0xC186}, + {0xC187, 0xC187, 0xC187}, {0xC188, 0xC188, 0xC188}, + {0xC189, 0xC189, 0xC189}, {0xC18A, 0xC18A, 0xC18A}, + {0xC18B, 0xC18B, 0xC18B}, {0xC18C, 0xC18C, 0xC18C}, + {0xC18D, 0xC18D, 0xC18D}, {0xC18E, 0xC18E, 0xC18E}, + {0xC18F, 0xC18F, 0xC18F}, {0xC190, 0xC190, 0xC190}, + {0xC191, 0xC191, 0xC191}, {0xC192, 0xC192, 0xC192}, + {0xC193, 0xC193, 0xC193}, {0xC194, 0xC194, 0xC194}, + {0xC195, 0xC195, 0xC195}, {0xC196, 0xC196, 0xC196}, + {0xC197, 0xC197, 0xC197}, {0xC198, 0xC198, 0xC198}, + {0xC199, 0xC199, 0xC199}, {0xC19A, 0xC19A, 0xC19A}, + {0xC19B, 0xC19B, 0xC19B}, {0xC19C, 0xC19C, 0xC19C}, + {0xC19D, 0xC19D, 0xC19D}, {0xC19E, 0xC19E, 0xC19E}, + {0xC19F, 0xC19F, 0xC19F}, {0xC1A0, 0xC1A0, 0xC1A0}, + {0xC1A1, 0xC1A1, 0xC1A1}, {0xC1A2, 0xC1A2, 0xC1A2}, + {0xC1A3, 0xC1A3, 0xC1A3}, {0xC1A4, 0xC1A4, 0xC1A4}, + {0xC1A5, 0xC1A5, 0xC1A5}, {0xC1A6, 0xC1A6, 0xC1A6}, + {0xC1A7, 0xC1A7, 0xC1A7}, {0xC1A8, 0xC1A8, 0xC1A8}, + {0xC1A9, 0xC1A9, 0xC1A9}, {0xC1AA, 0xC1AA, 0xC1AA}, + {0xC1AB, 0xC1AB, 0xC1AB}, {0xC1AC, 0xC1AC, 0xC1AC}, + {0xC1AD, 0xC1AD, 0xC1AD}, {0xC1AE, 0xC1AE, 0xC1AE}, + {0xC1AF, 0xC1AF, 0xC1AF}, {0xC1B0, 0xC1B0, 0xC1B0}, + {0xC1B1, 0xC1B1, 0xC1B1}, {0xC1B2, 0xC1B2, 0xC1B2}, + {0xC1B3, 0xC1B3, 0xC1B3}, {0xC1B4, 0xC1B4, 0xC1B4}, + {0xC1B5, 0xC1B5, 0xC1B5}, {0xC1B6, 0xC1B6, 0xC1B6}, + {0xC1B7, 0xC1B7, 0xC1B7}, {0xC1B8, 0xC1B8, 0xC1B8}, + {0xC1B9, 0xC1B9, 0xC1B9}, {0xC1BA, 0xC1BA, 0xC1BA}, + {0xC1BB, 0xC1BB, 0xC1BB}, {0xC1BC, 0xC1BC, 0xC1BC}, + {0xC1BD, 0xC1BD, 0xC1BD}, {0xC1BE, 0xC1BE, 0xC1BE}, + {0xC1BF, 0xC1BF, 0xC1BF}, {0xC1C0, 0xC1C0, 0xC1C0}, + {0xC1C1, 0xC1C1, 0xC1C1}, {0xC1C2, 0xC1C2, 0xC1C2}, + {0xC1C3, 0xC1C3, 0xC1C3}, {0xC1C4, 0xC1C4, 0xC1C4}, + {0xC1C5, 0xC1C5, 0xC1C5}, {0xC1C6, 0xC1C6, 0xC1C6}, + {0xC1C7, 0xC1C7, 0xC1C7}, {0xC1C8, 0xC1C8, 0xC1C8}, + {0xC1C9, 0xC1C9, 0xC1C9}, {0xC1CA, 0xC1CA, 0xC1CA}, + {0xC1CB, 0xC1CB, 0xC1CB}, {0xC1CC, 0xC1CC, 0xC1CC}, + {0xC1CD, 0xC1CD, 0xC1CD}, {0xC1CE, 0xC1CE, 0xC1CE}, + {0xC1CF, 0xC1CF, 0xC1CF}, {0xC1D0, 0xC1D0, 0xC1D0}, + {0xC1D1, 0xC1D1, 0xC1D1}, {0xC1D2, 0xC1D2, 0xC1D2}, + {0xC1D3, 0xC1D3, 0xC1D3}, {0xC1D4, 0xC1D4, 0xC1D4}, + {0xC1D5, 0xC1D5, 0xC1D5}, {0xC1D6, 0xC1D6, 0xC1D6}, + {0xC1D7, 0xC1D7, 0xC1D7}, {0xC1D8, 0xC1D8, 0xC1D8}, + {0xC1D9, 0xC1D9, 0xC1D9}, {0xC1DA, 0xC1DA, 0xC1DA}, + {0xC1DB, 0xC1DB, 0xC1DB}, {0xC1DC, 0xC1DC, 0xC1DC}, + {0xC1DD, 0xC1DD, 0xC1DD}, {0xC1DE, 0xC1DE, 0xC1DE}, + {0xC1DF, 0xC1DF, 0xC1DF}, {0xC1E0, 0xC1E0, 0xC1E0}, + {0xC1E1, 0xC1E1, 0xC1E1}, {0xC1E2, 0xC1E2, 0xC1E2}, + {0xC1E3, 0xC1E3, 0xC1E3}, {0xC1E4, 0xC1E4, 0xC1E4}, + {0xC1E5, 0xC1E5, 0xC1E5}, {0xC1E6, 0xC1E6, 0xC1E6}, + {0xC1E7, 0xC1E7, 0xC1E7}, {0xC1E8, 0xC1E8, 0xC1E8}, + {0xC1E9, 0xC1E9, 0xC1E9}, {0xC1EA, 0xC1EA, 0xC1EA}, + {0xC1EB, 0xC1EB, 0xC1EB}, {0xC1EC, 0xC1EC, 0xC1EC}, + {0xC1ED, 0xC1ED, 0xC1ED}, {0xC1EE, 0xC1EE, 0xC1EE}, + {0xC1EF, 0xC1EF, 0xC1EF}, {0xC1F0, 0xC1F0, 0xC1F0}, + {0xC1F1, 0xC1F1, 0xC1F1}, {0xC1F2, 0xC1F2, 0xC1F2}, + {0xC1F3, 0xC1F3, 0xC1F3}, {0xC1F4, 0xC1F4, 0xC1F4}, + {0xC1F5, 0xC1F5, 0xC1F5}, {0xC1F6, 0xC1F6, 0xC1F6}, + {0xC1F7, 0xC1F7, 0xC1F7}, {0xC1F8, 0xC1F8, 0xC1F8}, + {0xC1F9, 0xC1F9, 0xC1F9}, {0xC1FA, 0xC1FA, 0xC1FA}, + {0xC1FB, 0xC1FB, 0xC1FB}, {0xC1FC, 0xC1FC, 0xC1FC}, + {0xC1FD, 0xC1FD, 0xC1FD}, {0xC1FE, 0xC1FE, 0xC1FE}, + {0xC1FF, 0xC1FF, 0xC1FF}, {0xC200, 0xC200, 0xC200}, + {0xC201, 0xC201, 0xC201}, {0xC202, 0xC202, 0xC202}, + {0xC203, 0xC203, 0xC203}, {0xC204, 0xC204, 0xC204}, + {0xC205, 0xC205, 0xC205}, {0xC206, 0xC206, 0xC206}, + {0xC207, 0xC207, 0xC207}, {0xC208, 0xC208, 0xC208}, + {0xC209, 0xC209, 0xC209}, {0xC20A, 0xC20A, 0xC20A}, + {0xC20B, 0xC20B, 0xC20B}, {0xC20C, 0xC20C, 0xC20C}, + {0xC20D, 0xC20D, 0xC20D}, {0xC20E, 0xC20E, 0xC20E}, + {0xC20F, 0xC20F, 0xC20F}, {0xC210, 0xC210, 0xC210}, + {0xC211, 0xC211, 0xC211}, {0xC212, 0xC212, 0xC212}, + {0xC213, 0xC213, 0xC213}, {0xC214, 0xC214, 0xC214}, + {0xC215, 0xC215, 0xC215}, {0xC216, 0xC216, 0xC216}, + {0xC217, 0xC217, 0xC217}, {0xC218, 0xC218, 0xC218}, + {0xC219, 0xC219, 0xC219}, {0xC21A, 0xC21A, 0xC21A}, + {0xC21B, 0xC21B, 0xC21B}, {0xC21C, 0xC21C, 0xC21C}, + {0xC21D, 0xC21D, 0xC21D}, {0xC21E, 0xC21E, 0xC21E}, + {0xC21F, 0xC21F, 0xC21F}, {0xC220, 0xC220, 0xC220}, + {0xC221, 0xC221, 0xC221}, {0xC222, 0xC222, 0xC222}, + {0xC223, 0xC223, 0xC223}, {0xC224, 0xC224, 0xC224}, + {0xC225, 0xC225, 0xC225}, {0xC226, 0xC226, 0xC226}, + {0xC227, 0xC227, 0xC227}, {0xC228, 0xC228, 0xC228}, + {0xC229, 0xC229, 0xC229}, {0xC22A, 0xC22A, 0xC22A}, + {0xC22B, 0xC22B, 0xC22B}, {0xC22C, 0xC22C, 0xC22C}, + {0xC22D, 0xC22D, 0xC22D}, {0xC22E, 0xC22E, 0xC22E}, + {0xC22F, 0xC22F, 0xC22F}, {0xC230, 0xC230, 0xC230}, + {0xC231, 0xC231, 0xC231}, {0xC232, 0xC232, 0xC232}, + {0xC233, 0xC233, 0xC233}, {0xC234, 0xC234, 0xC234}, + {0xC235, 0xC235, 0xC235}, {0xC236, 0xC236, 0xC236}, + {0xC237, 0xC237, 0xC237}, {0xC238, 0xC238, 0xC238}, + {0xC239, 0xC239, 0xC239}, {0xC23A, 0xC23A, 0xC23A}, + {0xC23B, 0xC23B, 0xC23B}, {0xC23C, 0xC23C, 0xC23C}, + {0xC23D, 0xC23D, 0xC23D}, {0xC23E, 0xC23E, 0xC23E}, + {0xC23F, 0xC23F, 0xC23F}, {0xC240, 0xC240, 0xC240}, + {0xC241, 0xC241, 0xC241}, {0xC242, 0xC242, 0xC242}, + {0xC243, 0xC243, 0xC243}, {0xC244, 0xC244, 0xC244}, + {0xC245, 0xC245, 0xC245}, {0xC246, 0xC246, 0xC246}, + {0xC247, 0xC247, 0xC247}, {0xC248, 0xC248, 0xC248}, + {0xC249, 0xC249, 0xC249}, {0xC24A, 0xC24A, 0xC24A}, + {0xC24B, 0xC24B, 0xC24B}, {0xC24C, 0xC24C, 0xC24C}, + {0xC24D, 0xC24D, 0xC24D}, {0xC24E, 0xC24E, 0xC24E}, + {0xC24F, 0xC24F, 0xC24F}, {0xC250, 0xC250, 0xC250}, + {0xC251, 0xC251, 0xC251}, {0xC252, 0xC252, 0xC252}, + {0xC253, 0xC253, 0xC253}, {0xC254, 0xC254, 0xC254}, + {0xC255, 0xC255, 0xC255}, {0xC256, 0xC256, 0xC256}, + {0xC257, 0xC257, 0xC257}, {0xC258, 0xC258, 0xC258}, + {0xC259, 0xC259, 0xC259}, {0xC25A, 0xC25A, 0xC25A}, + {0xC25B, 0xC25B, 0xC25B}, {0xC25C, 0xC25C, 0xC25C}, + {0xC25D, 0xC25D, 0xC25D}, {0xC25E, 0xC25E, 0xC25E}, + {0xC25F, 0xC25F, 0xC25F}, {0xC260, 0xC260, 0xC260}, + {0xC261, 0xC261, 0xC261}, {0xC262, 0xC262, 0xC262}, + {0xC263, 0xC263, 0xC263}, {0xC264, 0xC264, 0xC264}, + {0xC265, 0xC265, 0xC265}, {0xC266, 0xC266, 0xC266}, + {0xC267, 0xC267, 0xC267}, {0xC268, 0xC268, 0xC268}, + {0xC269, 0xC269, 0xC269}, {0xC26A, 0xC26A, 0xC26A}, + {0xC26B, 0xC26B, 0xC26B}, {0xC26C, 0xC26C, 0xC26C}, + {0xC26D, 0xC26D, 0xC26D}, {0xC26E, 0xC26E, 0xC26E}, + {0xC26F, 0xC26F, 0xC26F}, {0xC270, 0xC270, 0xC270}, + {0xC271, 0xC271, 0xC271}, {0xC272, 0xC272, 0xC272}, + {0xC273, 0xC273, 0xC273}, {0xC274, 0xC274, 0xC274}, + {0xC275, 0xC275, 0xC275}, {0xC276, 0xC276, 0xC276}, + {0xC277, 0xC277, 0xC277}, {0xC278, 0xC278, 0xC278}, + {0xC279, 0xC279, 0xC279}, {0xC27A, 0xC27A, 0xC27A}, + {0xC27B, 0xC27B, 0xC27B}, {0xC27C, 0xC27C, 0xC27C}, + {0xC27D, 0xC27D, 0xC27D}, {0xC27E, 0xC27E, 0xC27E}, + {0xC27F, 0xC27F, 0xC27F}, {0xC280, 0xC280, 0xC280}, + {0xC281, 0xC281, 0xC281}, {0xC282, 0xC282, 0xC282}, + {0xC283, 0xC283, 0xC283}, {0xC284, 0xC284, 0xC284}, + {0xC285, 0xC285, 0xC285}, {0xC286, 0xC286, 0xC286}, + {0xC287, 0xC287, 0xC287}, {0xC288, 0xC288, 0xC288}, + {0xC289, 0xC289, 0xC289}, {0xC28A, 0xC28A, 0xC28A}, + {0xC28B, 0xC28B, 0xC28B}, {0xC28C, 0xC28C, 0xC28C}, + {0xC28D, 0xC28D, 0xC28D}, {0xC28E, 0xC28E, 0xC28E}, + {0xC28F, 0xC28F, 0xC28F}, {0xC290, 0xC290, 0xC290}, + {0xC291, 0xC291, 0xC291}, {0xC292, 0xC292, 0xC292}, + {0xC293, 0xC293, 0xC293}, {0xC294, 0xC294, 0xC294}, + {0xC295, 0xC295, 0xC295}, {0xC296, 0xC296, 0xC296}, + {0xC297, 0xC297, 0xC297}, {0xC298, 0xC298, 0xC298}, + {0xC299, 0xC299, 0xC299}, {0xC29A, 0xC29A, 0xC29A}, + {0xC29B, 0xC29B, 0xC29B}, {0xC29C, 0xC29C, 0xC29C}, + {0xC29D, 0xC29D, 0xC29D}, {0xC29E, 0xC29E, 0xC29E}, + {0xC29F, 0xC29F, 0xC29F}, {0xC2A0, 0xC2A0, 0xC2A0}, + {0xC2A1, 0xC2A1, 0xC2A1}, {0xC2A2, 0xC2A2, 0xC2A2}, + {0xC2A3, 0xC2A3, 0xC2A3}, {0xC2A4, 0xC2A4, 0xC2A4}, + {0xC2A5, 0xC2A5, 0xC2A5}, {0xC2A6, 0xC2A6, 0xC2A6}, + {0xC2A7, 0xC2A7, 0xC2A7}, {0xC2A8, 0xC2A8, 0xC2A8}, + {0xC2A9, 0xC2A9, 0xC2A9}, {0xC2AA, 0xC2AA, 0xC2AA}, + {0xC2AB, 0xC2AB, 0xC2AB}, {0xC2AC, 0xC2AC, 0xC2AC}, + {0xC2AD, 0xC2AD, 0xC2AD}, {0xC2AE, 0xC2AE, 0xC2AE}, + {0xC2AF, 0xC2AF, 0xC2AF}, {0xC2B0, 0xC2B0, 0xC2B0}, + {0xC2B1, 0xC2B1, 0xC2B1}, {0xC2B2, 0xC2B2, 0xC2B2}, + {0xC2B3, 0xC2B3, 0xC2B3}, {0xC2B4, 0xC2B4, 0xC2B4}, + {0xC2B5, 0xC2B5, 0xC2B5}, {0xC2B6, 0xC2B6, 0xC2B6}, + {0xC2B7, 0xC2B7, 0xC2B7}, {0xC2B8, 0xC2B8, 0xC2B8}, + {0xC2B9, 0xC2B9, 0xC2B9}, {0xC2BA, 0xC2BA, 0xC2BA}, + {0xC2BB, 0xC2BB, 0xC2BB}, {0xC2BC, 0xC2BC, 0xC2BC}, + {0xC2BD, 0xC2BD, 0xC2BD}, {0xC2BE, 0xC2BE, 0xC2BE}, + {0xC2BF, 0xC2BF, 0xC2BF}, {0xC2C0, 0xC2C0, 0xC2C0}, + {0xC2C1, 0xC2C1, 0xC2C1}, {0xC2C2, 0xC2C2, 0xC2C2}, + {0xC2C3, 0xC2C3, 0xC2C3}, {0xC2C4, 0xC2C4, 0xC2C4}, + {0xC2C5, 0xC2C5, 0xC2C5}, {0xC2C6, 0xC2C6, 0xC2C6}, + {0xC2C7, 0xC2C7, 0xC2C7}, {0xC2C8, 0xC2C8, 0xC2C8}, + {0xC2C9, 0xC2C9, 0xC2C9}, {0xC2CA, 0xC2CA, 0xC2CA}, + {0xC2CB, 0xC2CB, 0xC2CB}, {0xC2CC, 0xC2CC, 0xC2CC}, + {0xC2CD, 0xC2CD, 0xC2CD}, {0xC2CE, 0xC2CE, 0xC2CE}, + {0xC2CF, 0xC2CF, 0xC2CF}, {0xC2D0, 0xC2D0, 0xC2D0}, + {0xC2D1, 0xC2D1, 0xC2D1}, {0xC2D2, 0xC2D2, 0xC2D2}, + {0xC2D3, 0xC2D3, 0xC2D3}, {0xC2D4, 0xC2D4, 0xC2D4}, + {0xC2D5, 0xC2D5, 0xC2D5}, {0xC2D6, 0xC2D6, 0xC2D6}, + {0xC2D7, 0xC2D7, 0xC2D7}, {0xC2D8, 0xC2D8, 0xC2D8}, + {0xC2D9, 0xC2D9, 0xC2D9}, {0xC2DA, 0xC2DA, 0xC2DA}, + {0xC2DB, 0xC2DB, 0xC2DB}, {0xC2DC, 0xC2DC, 0xC2DC}, + {0xC2DD, 0xC2DD, 0xC2DD}, {0xC2DE, 0xC2DE, 0xC2DE}, + {0xC2DF, 0xC2DF, 0xC2DF}, {0xC2E0, 0xC2E0, 0xC2E0}, + {0xC2E1, 0xC2E1, 0xC2E1}, {0xC2E2, 0xC2E2, 0xC2E2}, + {0xC2E3, 0xC2E3, 0xC2E3}, {0xC2E4, 0xC2E4, 0xC2E4}, + {0xC2E5, 0xC2E5, 0xC2E5}, {0xC2E6, 0xC2E6, 0xC2E6}, + {0xC2E7, 0xC2E7, 0xC2E7}, {0xC2E8, 0xC2E8, 0xC2E8}, + {0xC2E9, 0xC2E9, 0xC2E9}, {0xC2EA, 0xC2EA, 0xC2EA}, + {0xC2EB, 0xC2EB, 0xC2EB}, {0xC2EC, 0xC2EC, 0xC2EC}, + {0xC2ED, 0xC2ED, 0xC2ED}, {0xC2EE, 0xC2EE, 0xC2EE}, + {0xC2EF, 0xC2EF, 0xC2EF}, {0xC2F0, 0xC2F0, 0xC2F0}, + {0xC2F1, 0xC2F1, 0xC2F1}, {0xC2F2, 0xC2F2, 0xC2F2}, + {0xC2F3, 0xC2F3, 0xC2F3}, {0xC2F4, 0xC2F4, 0xC2F4}, + {0xC2F5, 0xC2F5, 0xC2F5}, {0xC2F6, 0xC2F6, 0xC2F6}, + {0xC2F7, 0xC2F7, 0xC2F7}, {0xC2F8, 0xC2F8, 0xC2F8}, + {0xC2F9, 0xC2F9, 0xC2F9}, {0xC2FA, 0xC2FA, 0xC2FA}, + {0xC2FB, 0xC2FB, 0xC2FB}, {0xC2FC, 0xC2FC, 0xC2FC}, + {0xC2FD, 0xC2FD, 0xC2FD}, {0xC2FE, 0xC2FE, 0xC2FE}, + {0xC2FF, 0xC2FF, 0xC2FF}, {0xC300, 0xC300, 0xC300}, + {0xC301, 0xC301, 0xC301}, {0xC302, 0xC302, 0xC302}, + {0xC303, 0xC303, 0xC303}, {0xC304, 0xC304, 0xC304}, + {0xC305, 0xC305, 0xC305}, {0xC306, 0xC306, 0xC306}, + {0xC307, 0xC307, 0xC307}, {0xC308, 0xC308, 0xC308}, + {0xC309, 0xC309, 0xC309}, {0xC30A, 0xC30A, 0xC30A}, + {0xC30B, 0xC30B, 0xC30B}, {0xC30C, 0xC30C, 0xC30C}, + {0xC30D, 0xC30D, 0xC30D}, {0xC30E, 0xC30E, 0xC30E}, + {0xC30F, 0xC30F, 0xC30F}, {0xC310, 0xC310, 0xC310}, + {0xC311, 0xC311, 0xC311}, {0xC312, 0xC312, 0xC312}, + {0xC313, 0xC313, 0xC313}, {0xC314, 0xC314, 0xC314}, + {0xC315, 0xC315, 0xC315}, {0xC316, 0xC316, 0xC316}, + {0xC317, 0xC317, 0xC317}, {0xC318, 0xC318, 0xC318}, + {0xC319, 0xC319, 0xC319}, {0xC31A, 0xC31A, 0xC31A}, + {0xC31B, 0xC31B, 0xC31B}, {0xC31C, 0xC31C, 0xC31C}, + {0xC31D, 0xC31D, 0xC31D}, {0xC31E, 0xC31E, 0xC31E}, + {0xC31F, 0xC31F, 0xC31F}, {0xC320, 0xC320, 0xC320}, + {0xC321, 0xC321, 0xC321}, {0xC322, 0xC322, 0xC322}, + {0xC323, 0xC323, 0xC323}, {0xC324, 0xC324, 0xC324}, + {0xC325, 0xC325, 0xC325}, {0xC326, 0xC326, 0xC326}, + {0xC327, 0xC327, 0xC327}, {0xC328, 0xC328, 0xC328}, + {0xC329, 0xC329, 0xC329}, {0xC32A, 0xC32A, 0xC32A}, + {0xC32B, 0xC32B, 0xC32B}, {0xC32C, 0xC32C, 0xC32C}, + {0xC32D, 0xC32D, 0xC32D}, {0xC32E, 0xC32E, 0xC32E}, + {0xC32F, 0xC32F, 0xC32F}, {0xC330, 0xC330, 0xC330}, + {0xC331, 0xC331, 0xC331}, {0xC332, 0xC332, 0xC332}, + {0xC333, 0xC333, 0xC333}, {0xC334, 0xC334, 0xC334}, + {0xC335, 0xC335, 0xC335}, {0xC336, 0xC336, 0xC336}, + {0xC337, 0xC337, 0xC337}, {0xC338, 0xC338, 0xC338}, + {0xC339, 0xC339, 0xC339}, {0xC33A, 0xC33A, 0xC33A}, + {0xC33B, 0xC33B, 0xC33B}, {0xC33C, 0xC33C, 0xC33C}, + {0xC33D, 0xC33D, 0xC33D}, {0xC33E, 0xC33E, 0xC33E}, + {0xC33F, 0xC33F, 0xC33F}, {0xC340, 0xC340, 0xC340}, + {0xC341, 0xC341, 0xC341}, {0xC342, 0xC342, 0xC342}, + {0xC343, 0xC343, 0xC343}, {0xC344, 0xC344, 0xC344}, + {0xC345, 0xC345, 0xC345}, {0xC346, 0xC346, 0xC346}, + {0xC347, 0xC347, 0xC347}, {0xC348, 0xC348, 0xC348}, + {0xC349, 0xC349, 0xC349}, {0xC34A, 0xC34A, 0xC34A}, + {0xC34B, 0xC34B, 0xC34B}, {0xC34C, 0xC34C, 0xC34C}, + {0xC34D, 0xC34D, 0xC34D}, {0xC34E, 0xC34E, 0xC34E}, + {0xC34F, 0xC34F, 0xC34F}, {0xC350, 0xC350, 0xC350}, + {0xC351, 0xC351, 0xC351}, {0xC352, 0xC352, 0xC352}, + {0xC353, 0xC353, 0xC353}, {0xC354, 0xC354, 0xC354}, + {0xC355, 0xC355, 0xC355}, {0xC356, 0xC356, 0xC356}, + {0xC357, 0xC357, 0xC357}, {0xC358, 0xC358, 0xC358}, + {0xC359, 0xC359, 0xC359}, {0xC35A, 0xC35A, 0xC35A}, + {0xC35B, 0xC35B, 0xC35B}, {0xC35C, 0xC35C, 0xC35C}, + {0xC35D, 0xC35D, 0xC35D}, {0xC35E, 0xC35E, 0xC35E}, + {0xC35F, 0xC35F, 0xC35F}, {0xC360, 0xC360, 0xC360}, + {0xC361, 0xC361, 0xC361}, {0xC362, 0xC362, 0xC362}, + {0xC363, 0xC363, 0xC363}, {0xC364, 0xC364, 0xC364}, + {0xC365, 0xC365, 0xC365}, {0xC366, 0xC366, 0xC366}, + {0xC367, 0xC367, 0xC367}, {0xC368, 0xC368, 0xC368}, + {0xC369, 0xC369, 0xC369}, {0xC36A, 0xC36A, 0xC36A}, + {0xC36B, 0xC36B, 0xC36B}, {0xC36C, 0xC36C, 0xC36C}, + {0xC36D, 0xC36D, 0xC36D}, {0xC36E, 0xC36E, 0xC36E}, + {0xC36F, 0xC36F, 0xC36F}, {0xC370, 0xC370, 0xC370}, + {0xC371, 0xC371, 0xC371}, {0xC372, 0xC372, 0xC372}, + {0xC373, 0xC373, 0xC373}, {0xC374, 0xC374, 0xC374}, + {0xC375, 0xC375, 0xC375}, {0xC376, 0xC376, 0xC376}, + {0xC377, 0xC377, 0xC377}, {0xC378, 0xC378, 0xC378}, + {0xC379, 0xC379, 0xC379}, {0xC37A, 0xC37A, 0xC37A}, + {0xC37B, 0xC37B, 0xC37B}, {0xC37C, 0xC37C, 0xC37C}, + {0xC37D, 0xC37D, 0xC37D}, {0xC37E, 0xC37E, 0xC37E}, + {0xC37F, 0xC37F, 0xC37F}, {0xC380, 0xC380, 0xC380}, + {0xC381, 0xC381, 0xC381}, {0xC382, 0xC382, 0xC382}, + {0xC383, 0xC383, 0xC383}, {0xC384, 0xC384, 0xC384}, + {0xC385, 0xC385, 0xC385}, {0xC386, 0xC386, 0xC386}, + {0xC387, 0xC387, 0xC387}, {0xC388, 0xC388, 0xC388}, + {0xC389, 0xC389, 0xC389}, {0xC38A, 0xC38A, 0xC38A}, + {0xC38B, 0xC38B, 0xC38B}, {0xC38C, 0xC38C, 0xC38C}, + {0xC38D, 0xC38D, 0xC38D}, {0xC38E, 0xC38E, 0xC38E}, + {0xC38F, 0xC38F, 0xC38F}, {0xC390, 0xC390, 0xC390}, + {0xC391, 0xC391, 0xC391}, {0xC392, 0xC392, 0xC392}, + {0xC393, 0xC393, 0xC393}, {0xC394, 0xC394, 0xC394}, + {0xC395, 0xC395, 0xC395}, {0xC396, 0xC396, 0xC396}, + {0xC397, 0xC397, 0xC397}, {0xC398, 0xC398, 0xC398}, + {0xC399, 0xC399, 0xC399}, {0xC39A, 0xC39A, 0xC39A}, + {0xC39B, 0xC39B, 0xC39B}, {0xC39C, 0xC39C, 0xC39C}, + {0xC39D, 0xC39D, 0xC39D}, {0xC39E, 0xC39E, 0xC39E}, + {0xC39F, 0xC39F, 0xC39F}, {0xC3A0, 0xC3A0, 0xC3A0}, + {0xC3A1, 0xC3A1, 0xC3A1}, {0xC3A2, 0xC3A2, 0xC3A2}, + {0xC3A3, 0xC3A3, 0xC3A3}, {0xC3A4, 0xC3A4, 0xC3A4}, + {0xC3A5, 0xC3A5, 0xC3A5}, {0xC3A6, 0xC3A6, 0xC3A6}, + {0xC3A7, 0xC3A7, 0xC3A7}, {0xC3A8, 0xC3A8, 0xC3A8}, + {0xC3A9, 0xC3A9, 0xC3A9}, {0xC3AA, 0xC3AA, 0xC3AA}, + {0xC3AB, 0xC3AB, 0xC3AB}, {0xC3AC, 0xC3AC, 0xC3AC}, + {0xC3AD, 0xC3AD, 0xC3AD}, {0xC3AE, 0xC3AE, 0xC3AE}, + {0xC3AF, 0xC3AF, 0xC3AF}, {0xC3B0, 0xC3B0, 0xC3B0}, + {0xC3B1, 0xC3B1, 0xC3B1}, {0xC3B2, 0xC3B2, 0xC3B2}, + {0xC3B3, 0xC3B3, 0xC3B3}, {0xC3B4, 0xC3B4, 0xC3B4}, + {0xC3B5, 0xC3B5, 0xC3B5}, {0xC3B6, 0xC3B6, 0xC3B6}, + {0xC3B7, 0xC3B7, 0xC3B7}, {0xC3B8, 0xC3B8, 0xC3B8}, + {0xC3B9, 0xC3B9, 0xC3B9}, {0xC3BA, 0xC3BA, 0xC3BA}, + {0xC3BB, 0xC3BB, 0xC3BB}, {0xC3BC, 0xC3BC, 0xC3BC}, + {0xC3BD, 0xC3BD, 0xC3BD}, {0xC3BE, 0xC3BE, 0xC3BE}, + {0xC3BF, 0xC3BF, 0xC3BF}, {0xC3C0, 0xC3C0, 0xC3C0}, + {0xC3C1, 0xC3C1, 0xC3C1}, {0xC3C2, 0xC3C2, 0xC3C2}, + {0xC3C3, 0xC3C3, 0xC3C3}, {0xC3C4, 0xC3C4, 0xC3C4}, + {0xC3C5, 0xC3C5, 0xC3C5}, {0xC3C6, 0xC3C6, 0xC3C6}, + {0xC3C7, 0xC3C7, 0xC3C7}, {0xC3C8, 0xC3C8, 0xC3C8}, + {0xC3C9, 0xC3C9, 0xC3C9}, {0xC3CA, 0xC3CA, 0xC3CA}, + {0xC3CB, 0xC3CB, 0xC3CB}, {0xC3CC, 0xC3CC, 0xC3CC}, + {0xC3CD, 0xC3CD, 0xC3CD}, {0xC3CE, 0xC3CE, 0xC3CE}, + {0xC3CF, 0xC3CF, 0xC3CF}, {0xC3D0, 0xC3D0, 0xC3D0}, + {0xC3D1, 0xC3D1, 0xC3D1}, {0xC3D2, 0xC3D2, 0xC3D2}, + {0xC3D3, 0xC3D3, 0xC3D3}, {0xC3D4, 0xC3D4, 0xC3D4}, + {0xC3D5, 0xC3D5, 0xC3D5}, {0xC3D6, 0xC3D6, 0xC3D6}, + {0xC3D7, 0xC3D7, 0xC3D7}, {0xC3D8, 0xC3D8, 0xC3D8}, + {0xC3D9, 0xC3D9, 0xC3D9}, {0xC3DA, 0xC3DA, 0xC3DA}, + {0xC3DB, 0xC3DB, 0xC3DB}, {0xC3DC, 0xC3DC, 0xC3DC}, + {0xC3DD, 0xC3DD, 0xC3DD}, {0xC3DE, 0xC3DE, 0xC3DE}, + {0xC3DF, 0xC3DF, 0xC3DF}, {0xC3E0, 0xC3E0, 0xC3E0}, + {0xC3E1, 0xC3E1, 0xC3E1}, {0xC3E2, 0xC3E2, 0xC3E2}, + {0xC3E3, 0xC3E3, 0xC3E3}, {0xC3E4, 0xC3E4, 0xC3E4}, + {0xC3E5, 0xC3E5, 0xC3E5}, {0xC3E6, 0xC3E6, 0xC3E6}, + {0xC3E7, 0xC3E7, 0xC3E7}, {0xC3E8, 0xC3E8, 0xC3E8}, + {0xC3E9, 0xC3E9, 0xC3E9}, {0xC3EA, 0xC3EA, 0xC3EA}, + {0xC3EB, 0xC3EB, 0xC3EB}, {0xC3EC, 0xC3EC, 0xC3EC}, + {0xC3ED, 0xC3ED, 0xC3ED}, {0xC3EE, 0xC3EE, 0xC3EE}, + {0xC3EF, 0xC3EF, 0xC3EF}, {0xC3F0, 0xC3F0, 0xC3F0}, + {0xC3F1, 0xC3F1, 0xC3F1}, {0xC3F2, 0xC3F2, 0xC3F2}, + {0xC3F3, 0xC3F3, 0xC3F3}, {0xC3F4, 0xC3F4, 0xC3F4}, + {0xC3F5, 0xC3F5, 0xC3F5}, {0xC3F6, 0xC3F6, 0xC3F6}, + {0xC3F7, 0xC3F7, 0xC3F7}, {0xC3F8, 0xC3F8, 0xC3F8}, + {0xC3F9, 0xC3F9, 0xC3F9}, {0xC3FA, 0xC3FA, 0xC3FA}, + {0xC3FB, 0xC3FB, 0xC3FB}, {0xC3FC, 0xC3FC, 0xC3FC}, + {0xC3FD, 0xC3FD, 0xC3FD}, {0xC3FE, 0xC3FE, 0xC3FE}, + {0xC3FF, 0xC3FF, 0xC3FF}, {0xC400, 0xC400, 0xC400}, + {0xC401, 0xC401, 0xC401}, {0xC402, 0xC402, 0xC402}, + {0xC403, 0xC403, 0xC403}, {0xC404, 0xC404, 0xC404}, + {0xC405, 0xC405, 0xC405}, {0xC406, 0xC406, 0xC406}, + {0xC407, 0xC407, 0xC407}, {0xC408, 0xC408, 0xC408}, + {0xC409, 0xC409, 0xC409}, {0xC40A, 0xC40A, 0xC40A}, + {0xC40B, 0xC40B, 0xC40B}, {0xC40C, 0xC40C, 0xC40C}, + {0xC40D, 0xC40D, 0xC40D}, {0xC40E, 0xC40E, 0xC40E}, + {0xC40F, 0xC40F, 0xC40F}, {0xC410, 0xC410, 0xC410}, + {0xC411, 0xC411, 0xC411}, {0xC412, 0xC412, 0xC412}, + {0xC413, 0xC413, 0xC413}, {0xC414, 0xC414, 0xC414}, + {0xC415, 0xC415, 0xC415}, {0xC416, 0xC416, 0xC416}, + {0xC417, 0xC417, 0xC417}, {0xC418, 0xC418, 0xC418}, + {0xC419, 0xC419, 0xC419}, {0xC41A, 0xC41A, 0xC41A}, + {0xC41B, 0xC41B, 0xC41B}, {0xC41C, 0xC41C, 0xC41C}, + {0xC41D, 0xC41D, 0xC41D}, {0xC41E, 0xC41E, 0xC41E}, + {0xC41F, 0xC41F, 0xC41F}, {0xC420, 0xC420, 0xC420}, + {0xC421, 0xC421, 0xC421}, {0xC422, 0xC422, 0xC422}, + {0xC423, 0xC423, 0xC423}, {0xC424, 0xC424, 0xC424}, + {0xC425, 0xC425, 0xC425}, {0xC426, 0xC426, 0xC426}, + {0xC427, 0xC427, 0xC427}, {0xC428, 0xC428, 0xC428}, + {0xC429, 0xC429, 0xC429}, {0xC42A, 0xC42A, 0xC42A}, + {0xC42B, 0xC42B, 0xC42B}, {0xC42C, 0xC42C, 0xC42C}, + {0xC42D, 0xC42D, 0xC42D}, {0xC42E, 0xC42E, 0xC42E}, + {0xC42F, 0xC42F, 0xC42F}, {0xC430, 0xC430, 0xC430}, + {0xC431, 0xC431, 0xC431}, {0xC432, 0xC432, 0xC432}, + {0xC433, 0xC433, 0xC433}, {0xC434, 0xC434, 0xC434}, + {0xC435, 0xC435, 0xC435}, {0xC436, 0xC436, 0xC436}, + {0xC437, 0xC437, 0xC437}, {0xC438, 0xC438, 0xC438}, + {0xC439, 0xC439, 0xC439}, {0xC43A, 0xC43A, 0xC43A}, + {0xC43B, 0xC43B, 0xC43B}, {0xC43C, 0xC43C, 0xC43C}, + {0xC43D, 0xC43D, 0xC43D}, {0xC43E, 0xC43E, 0xC43E}, + {0xC43F, 0xC43F, 0xC43F}, {0xC440, 0xC440, 0xC440}, + {0xC441, 0xC441, 0xC441}, {0xC442, 0xC442, 0xC442}, + {0xC443, 0xC443, 0xC443}, {0xC444, 0xC444, 0xC444}, + {0xC445, 0xC445, 0xC445}, {0xC446, 0xC446, 0xC446}, + {0xC447, 0xC447, 0xC447}, {0xC448, 0xC448, 0xC448}, + {0xC449, 0xC449, 0xC449}, {0xC44A, 0xC44A, 0xC44A}, + {0xC44B, 0xC44B, 0xC44B}, {0xC44C, 0xC44C, 0xC44C}, + {0xC44D, 0xC44D, 0xC44D}, {0xC44E, 0xC44E, 0xC44E}, + {0xC44F, 0xC44F, 0xC44F}, {0xC450, 0xC450, 0xC450}, + {0xC451, 0xC451, 0xC451}, {0xC452, 0xC452, 0xC452}, + {0xC453, 0xC453, 0xC453}, {0xC454, 0xC454, 0xC454}, + {0xC455, 0xC455, 0xC455}, {0xC456, 0xC456, 0xC456}, + {0xC457, 0xC457, 0xC457}, {0xC458, 0xC458, 0xC458}, + {0xC459, 0xC459, 0xC459}, {0xC45A, 0xC45A, 0xC45A}, + {0xC45B, 0xC45B, 0xC45B}, {0xC45C, 0xC45C, 0xC45C}, + {0xC45D, 0xC45D, 0xC45D}, {0xC45E, 0xC45E, 0xC45E}, + {0xC45F, 0xC45F, 0xC45F}, {0xC460, 0xC460, 0xC460}, + {0xC461, 0xC461, 0xC461}, {0xC462, 0xC462, 0xC462}, + {0xC463, 0xC463, 0xC463}, {0xC464, 0xC464, 0xC464}, + {0xC465, 0xC465, 0xC465}, {0xC466, 0xC466, 0xC466}, + {0xC467, 0xC467, 0xC467}, {0xC468, 0xC468, 0xC468}, + {0xC469, 0xC469, 0xC469}, {0xC46A, 0xC46A, 0xC46A}, + {0xC46B, 0xC46B, 0xC46B}, {0xC46C, 0xC46C, 0xC46C}, + {0xC46D, 0xC46D, 0xC46D}, {0xC46E, 0xC46E, 0xC46E}, + {0xC46F, 0xC46F, 0xC46F}, {0xC470, 0xC470, 0xC470}, + {0xC471, 0xC471, 0xC471}, {0xC472, 0xC472, 0xC472}, + {0xC473, 0xC473, 0xC473}, {0xC474, 0xC474, 0xC474}, + {0xC475, 0xC475, 0xC475}, {0xC476, 0xC476, 0xC476}, + {0xC477, 0xC477, 0xC477}, {0xC478, 0xC478, 0xC478}, + {0xC479, 0xC479, 0xC479}, {0xC47A, 0xC47A, 0xC47A}, + {0xC47B, 0xC47B, 0xC47B}, {0xC47C, 0xC47C, 0xC47C}, + {0xC47D, 0xC47D, 0xC47D}, {0xC47E, 0xC47E, 0xC47E}, + {0xC47F, 0xC47F, 0xC47F}, {0xC480, 0xC480, 0xC480}, + {0xC481, 0xC481, 0xC481}, {0xC482, 0xC482, 0xC482}, + {0xC483, 0xC483, 0xC483}, {0xC484, 0xC484, 0xC484}, + {0xC485, 0xC485, 0xC485}, {0xC486, 0xC486, 0xC486}, + {0xC487, 0xC487, 0xC487}, {0xC488, 0xC488, 0xC488}, + {0xC489, 0xC489, 0xC489}, {0xC48A, 0xC48A, 0xC48A}, + {0xC48B, 0xC48B, 0xC48B}, {0xC48C, 0xC48C, 0xC48C}, + {0xC48D, 0xC48D, 0xC48D}, {0xC48E, 0xC48E, 0xC48E}, + {0xC48F, 0xC48F, 0xC48F}, {0xC490, 0xC490, 0xC490}, + {0xC491, 0xC491, 0xC491}, {0xC492, 0xC492, 0xC492}, + {0xC493, 0xC493, 0xC493}, {0xC494, 0xC494, 0xC494}, + {0xC495, 0xC495, 0xC495}, {0xC496, 0xC496, 0xC496}, + {0xC497, 0xC497, 0xC497}, {0xC498, 0xC498, 0xC498}, + {0xC499, 0xC499, 0xC499}, {0xC49A, 0xC49A, 0xC49A}, + {0xC49B, 0xC49B, 0xC49B}, {0xC49C, 0xC49C, 0xC49C}, + {0xC49D, 0xC49D, 0xC49D}, {0xC49E, 0xC49E, 0xC49E}, + {0xC49F, 0xC49F, 0xC49F}, {0xC4A0, 0xC4A0, 0xC4A0}, + {0xC4A1, 0xC4A1, 0xC4A1}, {0xC4A2, 0xC4A2, 0xC4A2}, + {0xC4A3, 0xC4A3, 0xC4A3}, {0xC4A4, 0xC4A4, 0xC4A4}, + {0xC4A5, 0xC4A5, 0xC4A5}, {0xC4A6, 0xC4A6, 0xC4A6}, + {0xC4A7, 0xC4A7, 0xC4A7}, {0xC4A8, 0xC4A8, 0xC4A8}, + {0xC4A9, 0xC4A9, 0xC4A9}, {0xC4AA, 0xC4AA, 0xC4AA}, + {0xC4AB, 0xC4AB, 0xC4AB}, {0xC4AC, 0xC4AC, 0xC4AC}, + {0xC4AD, 0xC4AD, 0xC4AD}, {0xC4AE, 0xC4AE, 0xC4AE}, + {0xC4AF, 0xC4AF, 0xC4AF}, {0xC4B0, 0xC4B0, 0xC4B0}, + {0xC4B1, 0xC4B1, 0xC4B1}, {0xC4B2, 0xC4B2, 0xC4B2}, + {0xC4B3, 0xC4B3, 0xC4B3}, {0xC4B4, 0xC4B4, 0xC4B4}, + {0xC4B5, 0xC4B5, 0xC4B5}, {0xC4B6, 0xC4B6, 0xC4B6}, + {0xC4B7, 0xC4B7, 0xC4B7}, {0xC4B8, 0xC4B8, 0xC4B8}, + {0xC4B9, 0xC4B9, 0xC4B9}, {0xC4BA, 0xC4BA, 0xC4BA}, + {0xC4BB, 0xC4BB, 0xC4BB}, {0xC4BC, 0xC4BC, 0xC4BC}, + {0xC4BD, 0xC4BD, 0xC4BD}, {0xC4BE, 0xC4BE, 0xC4BE}, + {0xC4BF, 0xC4BF, 0xC4BF}, {0xC4C0, 0xC4C0, 0xC4C0}, + {0xC4C1, 0xC4C1, 0xC4C1}, {0xC4C2, 0xC4C2, 0xC4C2}, + {0xC4C3, 0xC4C3, 0xC4C3}, {0xC4C4, 0xC4C4, 0xC4C4}, + {0xC4C5, 0xC4C5, 0xC4C5}, {0xC4C6, 0xC4C6, 0xC4C6}, + {0xC4C7, 0xC4C7, 0xC4C7}, {0xC4C8, 0xC4C8, 0xC4C8}, + {0xC4C9, 0xC4C9, 0xC4C9}, {0xC4CA, 0xC4CA, 0xC4CA}, + {0xC4CB, 0xC4CB, 0xC4CB}, {0xC4CC, 0xC4CC, 0xC4CC}, + {0xC4CD, 0xC4CD, 0xC4CD}, {0xC4CE, 0xC4CE, 0xC4CE}, + {0xC4CF, 0xC4CF, 0xC4CF}, {0xC4D0, 0xC4D0, 0xC4D0}, + {0xC4D1, 0xC4D1, 0xC4D1}, {0xC4D2, 0xC4D2, 0xC4D2}, + {0xC4D3, 0xC4D3, 0xC4D3}, {0xC4D4, 0xC4D4, 0xC4D4}, + {0xC4D5, 0xC4D5, 0xC4D5}, {0xC4D6, 0xC4D6, 0xC4D6}, + {0xC4D7, 0xC4D7, 0xC4D7}, {0xC4D8, 0xC4D8, 0xC4D8}, + {0xC4D9, 0xC4D9, 0xC4D9}, {0xC4DA, 0xC4DA, 0xC4DA}, + {0xC4DB, 0xC4DB, 0xC4DB}, {0xC4DC, 0xC4DC, 0xC4DC}, + {0xC4DD, 0xC4DD, 0xC4DD}, {0xC4DE, 0xC4DE, 0xC4DE}, + {0xC4DF, 0xC4DF, 0xC4DF}, {0xC4E0, 0xC4E0, 0xC4E0}, + {0xC4E1, 0xC4E1, 0xC4E1}, {0xC4E2, 0xC4E2, 0xC4E2}, + {0xC4E3, 0xC4E3, 0xC4E3}, {0xC4E4, 0xC4E4, 0xC4E4}, + {0xC4E5, 0xC4E5, 0xC4E5}, {0xC4E6, 0xC4E6, 0xC4E6}, + {0xC4E7, 0xC4E7, 0xC4E7}, {0xC4E8, 0xC4E8, 0xC4E8}, + {0xC4E9, 0xC4E9, 0xC4E9}, {0xC4EA, 0xC4EA, 0xC4EA}, + {0xC4EB, 0xC4EB, 0xC4EB}, {0xC4EC, 0xC4EC, 0xC4EC}, + {0xC4ED, 0xC4ED, 0xC4ED}, {0xC4EE, 0xC4EE, 0xC4EE}, + {0xC4EF, 0xC4EF, 0xC4EF}, {0xC4F0, 0xC4F0, 0xC4F0}, + {0xC4F1, 0xC4F1, 0xC4F1}, {0xC4F2, 0xC4F2, 0xC4F2}, + {0xC4F3, 0xC4F3, 0xC4F3}, {0xC4F4, 0xC4F4, 0xC4F4}, + {0xC4F5, 0xC4F5, 0xC4F5}, {0xC4F6, 0xC4F6, 0xC4F6}, + {0xC4F7, 0xC4F7, 0xC4F7}, {0xC4F8, 0xC4F8, 0xC4F8}, + {0xC4F9, 0xC4F9, 0xC4F9}, {0xC4FA, 0xC4FA, 0xC4FA}, + {0xC4FB, 0xC4FB, 0xC4FB}, {0xC4FC, 0xC4FC, 0xC4FC}, + {0xC4FD, 0xC4FD, 0xC4FD}, {0xC4FE, 0xC4FE, 0xC4FE}, + {0xC4FF, 0xC4FF, 0xC4FF}, {0xC500, 0xC500, 0xC500}, + {0xC501, 0xC501, 0xC501}, {0xC502, 0xC502, 0xC502}, + {0xC503, 0xC503, 0xC503}, {0xC504, 0xC504, 0xC504}, + {0xC505, 0xC505, 0xC505}, {0xC506, 0xC506, 0xC506}, + {0xC507, 0xC507, 0xC507}, {0xC508, 0xC508, 0xC508}, + {0xC509, 0xC509, 0xC509}, {0xC50A, 0xC50A, 0xC50A}, + {0xC50B, 0xC50B, 0xC50B}, {0xC50C, 0xC50C, 0xC50C}, + {0xC50D, 0xC50D, 0xC50D}, {0xC50E, 0xC50E, 0xC50E}, + {0xC50F, 0xC50F, 0xC50F}, {0xC510, 0xC510, 0xC510}, + {0xC511, 0xC511, 0xC511}, {0xC512, 0xC512, 0xC512}, + {0xC513, 0xC513, 0xC513}, {0xC514, 0xC514, 0xC514}, + {0xC515, 0xC515, 0xC515}, {0xC516, 0xC516, 0xC516}, + {0xC517, 0xC517, 0xC517}, {0xC518, 0xC518, 0xC518}, + {0xC519, 0xC519, 0xC519}, {0xC51A, 0xC51A, 0xC51A}, + {0xC51B, 0xC51B, 0xC51B}, {0xC51C, 0xC51C, 0xC51C}, + {0xC51D, 0xC51D, 0xC51D}, {0xC51E, 0xC51E, 0xC51E}, + {0xC51F, 0xC51F, 0xC51F}, {0xC520, 0xC520, 0xC520}, + {0xC521, 0xC521, 0xC521}, {0xC522, 0xC522, 0xC522}, + {0xC523, 0xC523, 0xC523}, {0xC524, 0xC524, 0xC524}, + {0xC525, 0xC525, 0xC525}, {0xC526, 0xC526, 0xC526}, + {0xC527, 0xC527, 0xC527}, {0xC528, 0xC528, 0xC528}, + {0xC529, 0xC529, 0xC529}, {0xC52A, 0xC52A, 0xC52A}, + {0xC52B, 0xC52B, 0xC52B}, {0xC52C, 0xC52C, 0xC52C}, + {0xC52D, 0xC52D, 0xC52D}, {0xC52E, 0xC52E, 0xC52E}, + {0xC52F, 0xC52F, 0xC52F}, {0xC530, 0xC530, 0xC530}, + {0xC531, 0xC531, 0xC531}, {0xC532, 0xC532, 0xC532}, + {0xC533, 0xC533, 0xC533}, {0xC534, 0xC534, 0xC534}, + {0xC535, 0xC535, 0xC535}, {0xC536, 0xC536, 0xC536}, + {0xC537, 0xC537, 0xC537}, {0xC538, 0xC538, 0xC538}, + {0xC539, 0xC539, 0xC539}, {0xC53A, 0xC53A, 0xC53A}, + {0xC53B, 0xC53B, 0xC53B}, {0xC53C, 0xC53C, 0xC53C}, + {0xC53D, 0xC53D, 0xC53D}, {0xC53E, 0xC53E, 0xC53E}, + {0xC53F, 0xC53F, 0xC53F}, {0xC540, 0xC540, 0xC540}, + {0xC541, 0xC541, 0xC541}, {0xC542, 0xC542, 0xC542}, + {0xC543, 0xC543, 0xC543}, {0xC544, 0xC544, 0xC544}, + {0xC545, 0xC545, 0xC545}, {0xC546, 0xC546, 0xC546}, + {0xC547, 0xC547, 0xC547}, {0xC548, 0xC548, 0xC548}, + {0xC549, 0xC549, 0xC549}, {0xC54A, 0xC54A, 0xC54A}, + {0xC54B, 0xC54B, 0xC54B}, {0xC54C, 0xC54C, 0xC54C}, + {0xC54D, 0xC54D, 0xC54D}, {0xC54E, 0xC54E, 0xC54E}, + {0xC54F, 0xC54F, 0xC54F}, {0xC550, 0xC550, 0xC550}, + {0xC551, 0xC551, 0xC551}, {0xC552, 0xC552, 0xC552}, + {0xC553, 0xC553, 0xC553}, {0xC554, 0xC554, 0xC554}, + {0xC555, 0xC555, 0xC555}, {0xC556, 0xC556, 0xC556}, + {0xC557, 0xC557, 0xC557}, {0xC558, 0xC558, 0xC558}, + {0xC559, 0xC559, 0xC559}, {0xC55A, 0xC55A, 0xC55A}, + {0xC55B, 0xC55B, 0xC55B}, {0xC55C, 0xC55C, 0xC55C}, + {0xC55D, 0xC55D, 0xC55D}, {0xC55E, 0xC55E, 0xC55E}, + {0xC55F, 0xC55F, 0xC55F}, {0xC560, 0xC560, 0xC560}, + {0xC561, 0xC561, 0xC561}, {0xC562, 0xC562, 0xC562}, + {0xC563, 0xC563, 0xC563}, {0xC564, 0xC564, 0xC564}, + {0xC565, 0xC565, 0xC565}, {0xC566, 0xC566, 0xC566}, + {0xC567, 0xC567, 0xC567}, {0xC568, 0xC568, 0xC568}, + {0xC569, 0xC569, 0xC569}, {0xC56A, 0xC56A, 0xC56A}, + {0xC56B, 0xC56B, 0xC56B}, {0xC56C, 0xC56C, 0xC56C}, + {0xC56D, 0xC56D, 0xC56D}, {0xC56E, 0xC56E, 0xC56E}, + {0xC56F, 0xC56F, 0xC56F}, {0xC570, 0xC570, 0xC570}, + {0xC571, 0xC571, 0xC571}, {0xC572, 0xC572, 0xC572}, + {0xC573, 0xC573, 0xC573}, {0xC574, 0xC574, 0xC574}, + {0xC575, 0xC575, 0xC575}, {0xC576, 0xC576, 0xC576}, + {0xC577, 0xC577, 0xC577}, {0xC578, 0xC578, 0xC578}, + {0xC579, 0xC579, 0xC579}, {0xC57A, 0xC57A, 0xC57A}, + {0xC57B, 0xC57B, 0xC57B}, {0xC57C, 0xC57C, 0xC57C}, + {0xC57D, 0xC57D, 0xC57D}, {0xC57E, 0xC57E, 0xC57E}, + {0xC57F, 0xC57F, 0xC57F}, {0xC580, 0xC580, 0xC580}, + {0xC581, 0xC581, 0xC581}, {0xC582, 0xC582, 0xC582}, + {0xC583, 0xC583, 0xC583}, {0xC584, 0xC584, 0xC584}, + {0xC585, 0xC585, 0xC585}, {0xC586, 0xC586, 0xC586}, + {0xC587, 0xC587, 0xC587}, {0xC588, 0xC588, 0xC588}, + {0xC589, 0xC589, 0xC589}, {0xC58A, 0xC58A, 0xC58A}, + {0xC58B, 0xC58B, 0xC58B}, {0xC58C, 0xC58C, 0xC58C}, + {0xC58D, 0xC58D, 0xC58D}, {0xC58E, 0xC58E, 0xC58E}, + {0xC58F, 0xC58F, 0xC58F}, {0xC590, 0xC590, 0xC590}, + {0xC591, 0xC591, 0xC591}, {0xC592, 0xC592, 0xC592}, + {0xC593, 0xC593, 0xC593}, {0xC594, 0xC594, 0xC594}, + {0xC595, 0xC595, 0xC595}, {0xC596, 0xC596, 0xC596}, + {0xC597, 0xC597, 0xC597}, {0xC598, 0xC598, 0xC598}, + {0xC599, 0xC599, 0xC599}, {0xC59A, 0xC59A, 0xC59A}, + {0xC59B, 0xC59B, 0xC59B}, {0xC59C, 0xC59C, 0xC59C}, + {0xC59D, 0xC59D, 0xC59D}, {0xC59E, 0xC59E, 0xC59E}, + {0xC59F, 0xC59F, 0xC59F}, {0xC5A0, 0xC5A0, 0xC5A0}, + {0xC5A1, 0xC5A1, 0xC5A1}, {0xC5A2, 0xC5A2, 0xC5A2}, + {0xC5A3, 0xC5A3, 0xC5A3}, {0xC5A4, 0xC5A4, 0xC5A4}, + {0xC5A5, 0xC5A5, 0xC5A5}, {0xC5A6, 0xC5A6, 0xC5A6}, + {0xC5A7, 0xC5A7, 0xC5A7}, {0xC5A8, 0xC5A8, 0xC5A8}, + {0xC5A9, 0xC5A9, 0xC5A9}, {0xC5AA, 0xC5AA, 0xC5AA}, + {0xC5AB, 0xC5AB, 0xC5AB}, {0xC5AC, 0xC5AC, 0xC5AC}, + {0xC5AD, 0xC5AD, 0xC5AD}, {0xC5AE, 0xC5AE, 0xC5AE}, + {0xC5AF, 0xC5AF, 0xC5AF}, {0xC5B0, 0xC5B0, 0xC5B0}, + {0xC5B1, 0xC5B1, 0xC5B1}, {0xC5B2, 0xC5B2, 0xC5B2}, + {0xC5B3, 0xC5B3, 0xC5B3}, {0xC5B4, 0xC5B4, 0xC5B4}, + {0xC5B5, 0xC5B5, 0xC5B5}, {0xC5B6, 0xC5B6, 0xC5B6}, + {0xC5B7, 0xC5B7, 0xC5B7}, {0xC5B8, 0xC5B8, 0xC5B8}, + {0xC5B9, 0xC5B9, 0xC5B9}, {0xC5BA, 0xC5BA, 0xC5BA}, + {0xC5BB, 0xC5BB, 0xC5BB}, {0xC5BC, 0xC5BC, 0xC5BC}, + {0xC5BD, 0xC5BD, 0xC5BD}, {0xC5BE, 0xC5BE, 0xC5BE}, + {0xC5BF, 0xC5BF, 0xC5BF}, {0xC5C0, 0xC5C0, 0xC5C0}, + {0xC5C1, 0xC5C1, 0xC5C1}, {0xC5C2, 0xC5C2, 0xC5C2}, + {0xC5C3, 0xC5C3, 0xC5C3}, {0xC5C4, 0xC5C4, 0xC5C4}, + {0xC5C5, 0xC5C5, 0xC5C5}, {0xC5C6, 0xC5C6, 0xC5C6}, + {0xC5C7, 0xC5C7, 0xC5C7}, {0xC5C8, 0xC5C8, 0xC5C8}, + {0xC5C9, 0xC5C9, 0xC5C9}, {0xC5CA, 0xC5CA, 0xC5CA}, + {0xC5CB, 0xC5CB, 0xC5CB}, {0xC5CC, 0xC5CC, 0xC5CC}, + {0xC5CD, 0xC5CD, 0xC5CD}, {0xC5CE, 0xC5CE, 0xC5CE}, + {0xC5CF, 0xC5CF, 0xC5CF}, {0xC5D0, 0xC5D0, 0xC5D0}, + {0xC5D1, 0xC5D1, 0xC5D1}, {0xC5D2, 0xC5D2, 0xC5D2}, + {0xC5D3, 0xC5D3, 0xC5D3}, {0xC5D4, 0xC5D4, 0xC5D4}, + {0xC5D5, 0xC5D5, 0xC5D5}, {0xC5D6, 0xC5D6, 0xC5D6}, + {0xC5D7, 0xC5D7, 0xC5D7}, {0xC5D8, 0xC5D8, 0xC5D8}, + {0xC5D9, 0xC5D9, 0xC5D9}, {0xC5DA, 0xC5DA, 0xC5DA}, + {0xC5DB, 0xC5DB, 0xC5DB}, {0xC5DC, 0xC5DC, 0xC5DC}, + {0xC5DD, 0xC5DD, 0xC5DD}, {0xC5DE, 0xC5DE, 0xC5DE}, + {0xC5DF, 0xC5DF, 0xC5DF}, {0xC5E0, 0xC5E0, 0xC5E0}, + {0xC5E1, 0xC5E1, 0xC5E1}, {0xC5E2, 0xC5E2, 0xC5E2}, + {0xC5E3, 0xC5E3, 0xC5E3}, {0xC5E4, 0xC5E4, 0xC5E4}, + {0xC5E5, 0xC5E5, 0xC5E5}, {0xC5E6, 0xC5E6, 0xC5E6}, + {0xC5E7, 0xC5E7, 0xC5E7}, {0xC5E8, 0xC5E8, 0xC5E8}, + {0xC5E9, 0xC5E9, 0xC5E9}, {0xC5EA, 0xC5EA, 0xC5EA}, + {0xC5EB, 0xC5EB, 0xC5EB}, {0xC5EC, 0xC5EC, 0xC5EC}, + {0xC5ED, 0xC5ED, 0xC5ED}, {0xC5EE, 0xC5EE, 0xC5EE}, + {0xC5EF, 0xC5EF, 0xC5EF}, {0xC5F0, 0xC5F0, 0xC5F0}, + {0xC5F1, 0xC5F1, 0xC5F1}, {0xC5F2, 0xC5F2, 0xC5F2}, + {0xC5F3, 0xC5F3, 0xC5F3}, {0xC5F4, 0xC5F4, 0xC5F4}, + {0xC5F5, 0xC5F5, 0xC5F5}, {0xC5F6, 0xC5F6, 0xC5F6}, + {0xC5F7, 0xC5F7, 0xC5F7}, {0xC5F8, 0xC5F8, 0xC5F8}, + {0xC5F9, 0xC5F9, 0xC5F9}, {0xC5FA, 0xC5FA, 0xC5FA}, + {0xC5FB, 0xC5FB, 0xC5FB}, {0xC5FC, 0xC5FC, 0xC5FC}, + {0xC5FD, 0xC5FD, 0xC5FD}, {0xC5FE, 0xC5FE, 0xC5FE}, + {0xC5FF, 0xC5FF, 0xC5FF}, {0xC600, 0xC600, 0xC600}, + {0xC601, 0xC601, 0xC601}, {0xC602, 0xC602, 0xC602}, + {0xC603, 0xC603, 0xC603}, {0xC604, 0xC604, 0xC604}, + {0xC605, 0xC605, 0xC605}, {0xC606, 0xC606, 0xC606}, + {0xC607, 0xC607, 0xC607}, {0xC608, 0xC608, 0xC608}, + {0xC609, 0xC609, 0xC609}, {0xC60A, 0xC60A, 0xC60A}, + {0xC60B, 0xC60B, 0xC60B}, {0xC60C, 0xC60C, 0xC60C}, + {0xC60D, 0xC60D, 0xC60D}, {0xC60E, 0xC60E, 0xC60E}, + {0xC60F, 0xC60F, 0xC60F}, {0xC610, 0xC610, 0xC610}, + {0xC611, 0xC611, 0xC611}, {0xC612, 0xC612, 0xC612}, + {0xC613, 0xC613, 0xC613}, {0xC614, 0xC614, 0xC614}, + {0xC615, 0xC615, 0xC615}, {0xC616, 0xC616, 0xC616}, + {0xC617, 0xC617, 0xC617}, {0xC618, 0xC618, 0xC618}, + {0xC619, 0xC619, 0xC619}, {0xC61A, 0xC61A, 0xC61A}, + {0xC61B, 0xC61B, 0xC61B}, {0xC61C, 0xC61C, 0xC61C}, + {0xC61D, 0xC61D, 0xC61D}, {0xC61E, 0xC61E, 0xC61E}, + {0xC61F, 0xC61F, 0xC61F}, {0xC620, 0xC620, 0xC620}, + {0xC621, 0xC621, 0xC621}, {0xC622, 0xC622, 0xC622}, + {0xC623, 0xC623, 0xC623}, {0xC624, 0xC624, 0xC624}, + {0xC625, 0xC625, 0xC625}, {0xC626, 0xC626, 0xC626}, + {0xC627, 0xC627, 0xC627}, {0xC628, 0xC628, 0xC628}, + {0xC629, 0xC629, 0xC629}, {0xC62A, 0xC62A, 0xC62A}, + {0xC62B, 0xC62B, 0xC62B}, {0xC62C, 0xC62C, 0xC62C}, + {0xC62D, 0xC62D, 0xC62D}, {0xC62E, 0xC62E, 0xC62E}, + {0xC62F, 0xC62F, 0xC62F}, {0xC630, 0xC630, 0xC630}, + {0xC631, 0xC631, 0xC631}, {0xC632, 0xC632, 0xC632}, + {0xC633, 0xC633, 0xC633}, {0xC634, 0xC634, 0xC634}, + {0xC635, 0xC635, 0xC635}, {0xC636, 0xC636, 0xC636}, + {0xC637, 0xC637, 0xC637}, {0xC638, 0xC638, 0xC638}, + {0xC639, 0xC639, 0xC639}, {0xC63A, 0xC63A, 0xC63A}, + {0xC63B, 0xC63B, 0xC63B}, {0xC63C, 0xC63C, 0xC63C}, + {0xC63D, 0xC63D, 0xC63D}, {0xC63E, 0xC63E, 0xC63E}, + {0xC63F, 0xC63F, 0xC63F}, {0xC640, 0xC640, 0xC640}, + {0xC641, 0xC641, 0xC641}, {0xC642, 0xC642, 0xC642}, + {0xC643, 0xC643, 0xC643}, {0xC644, 0xC644, 0xC644}, + {0xC645, 0xC645, 0xC645}, {0xC646, 0xC646, 0xC646}, + {0xC647, 0xC647, 0xC647}, {0xC648, 0xC648, 0xC648}, + {0xC649, 0xC649, 0xC649}, {0xC64A, 0xC64A, 0xC64A}, + {0xC64B, 0xC64B, 0xC64B}, {0xC64C, 0xC64C, 0xC64C}, + {0xC64D, 0xC64D, 0xC64D}, {0xC64E, 0xC64E, 0xC64E}, + {0xC64F, 0xC64F, 0xC64F}, {0xC650, 0xC650, 0xC650}, + {0xC651, 0xC651, 0xC651}, {0xC652, 0xC652, 0xC652}, + {0xC653, 0xC653, 0xC653}, {0xC654, 0xC654, 0xC654}, + {0xC655, 0xC655, 0xC655}, {0xC656, 0xC656, 0xC656}, + {0xC657, 0xC657, 0xC657}, {0xC658, 0xC658, 0xC658}, + {0xC659, 0xC659, 0xC659}, {0xC65A, 0xC65A, 0xC65A}, + {0xC65B, 0xC65B, 0xC65B}, {0xC65C, 0xC65C, 0xC65C}, + {0xC65D, 0xC65D, 0xC65D}, {0xC65E, 0xC65E, 0xC65E}, + {0xC65F, 0xC65F, 0xC65F}, {0xC660, 0xC660, 0xC660}, + {0xC661, 0xC661, 0xC661}, {0xC662, 0xC662, 0xC662}, + {0xC663, 0xC663, 0xC663}, {0xC664, 0xC664, 0xC664}, + {0xC665, 0xC665, 0xC665}, {0xC666, 0xC666, 0xC666}, + {0xC667, 0xC667, 0xC667}, {0xC668, 0xC668, 0xC668}, + {0xC669, 0xC669, 0xC669}, {0xC66A, 0xC66A, 0xC66A}, + {0xC66B, 0xC66B, 0xC66B}, {0xC66C, 0xC66C, 0xC66C}, + {0xC66D, 0xC66D, 0xC66D}, {0xC66E, 0xC66E, 0xC66E}, + {0xC66F, 0xC66F, 0xC66F}, {0xC670, 0xC670, 0xC670}, + {0xC671, 0xC671, 0xC671}, {0xC672, 0xC672, 0xC672}, + {0xC673, 0xC673, 0xC673}, {0xC674, 0xC674, 0xC674}, + {0xC675, 0xC675, 0xC675}, {0xC676, 0xC676, 0xC676}, + {0xC677, 0xC677, 0xC677}, {0xC678, 0xC678, 0xC678}, + {0xC679, 0xC679, 0xC679}, {0xC67A, 0xC67A, 0xC67A}, + {0xC67B, 0xC67B, 0xC67B}, {0xC67C, 0xC67C, 0xC67C}, + {0xC67D, 0xC67D, 0xC67D}, {0xC67E, 0xC67E, 0xC67E}, + {0xC67F, 0xC67F, 0xC67F}, {0xC680, 0xC680, 0xC680}, + {0xC681, 0xC681, 0xC681}, {0xC682, 0xC682, 0xC682}, + {0xC683, 0xC683, 0xC683}, {0xC684, 0xC684, 0xC684}, + {0xC685, 0xC685, 0xC685}, {0xC686, 0xC686, 0xC686}, + {0xC687, 0xC687, 0xC687}, {0xC688, 0xC688, 0xC688}, + {0xC689, 0xC689, 0xC689}, {0xC68A, 0xC68A, 0xC68A}, + {0xC68B, 0xC68B, 0xC68B}, {0xC68C, 0xC68C, 0xC68C}, + {0xC68D, 0xC68D, 0xC68D}, {0xC68E, 0xC68E, 0xC68E}, + {0xC68F, 0xC68F, 0xC68F}, {0xC690, 0xC690, 0xC690}, + {0xC691, 0xC691, 0xC691}, {0xC692, 0xC692, 0xC692}, + {0xC693, 0xC693, 0xC693}, {0xC694, 0xC694, 0xC694}, + {0xC695, 0xC695, 0xC695}, {0xC696, 0xC696, 0xC696}, + {0xC697, 0xC697, 0xC697}, {0xC698, 0xC698, 0xC698}, + {0xC699, 0xC699, 0xC699}, {0xC69A, 0xC69A, 0xC69A}, + {0xC69B, 0xC69B, 0xC69B}, {0xC69C, 0xC69C, 0xC69C}, + {0xC69D, 0xC69D, 0xC69D}, {0xC69E, 0xC69E, 0xC69E}, + {0xC69F, 0xC69F, 0xC69F}, {0xC6A0, 0xC6A0, 0xC6A0}, + {0xC6A1, 0xC6A1, 0xC6A1}, {0xC6A2, 0xC6A2, 0xC6A2}, + {0xC6A3, 0xC6A3, 0xC6A3}, {0xC6A4, 0xC6A4, 0xC6A4}, + {0xC6A5, 0xC6A5, 0xC6A5}, {0xC6A6, 0xC6A6, 0xC6A6}, + {0xC6A7, 0xC6A7, 0xC6A7}, {0xC6A8, 0xC6A8, 0xC6A8}, + {0xC6A9, 0xC6A9, 0xC6A9}, {0xC6AA, 0xC6AA, 0xC6AA}, + {0xC6AB, 0xC6AB, 0xC6AB}, {0xC6AC, 0xC6AC, 0xC6AC}, + {0xC6AD, 0xC6AD, 0xC6AD}, {0xC6AE, 0xC6AE, 0xC6AE}, + {0xC6AF, 0xC6AF, 0xC6AF}, {0xC6B0, 0xC6B0, 0xC6B0}, + {0xC6B1, 0xC6B1, 0xC6B1}, {0xC6B2, 0xC6B2, 0xC6B2}, + {0xC6B3, 0xC6B3, 0xC6B3}, {0xC6B4, 0xC6B4, 0xC6B4}, + {0xC6B5, 0xC6B5, 0xC6B5}, {0xC6B6, 0xC6B6, 0xC6B6}, + {0xC6B7, 0xC6B7, 0xC6B7}, {0xC6B8, 0xC6B8, 0xC6B8}, + {0xC6B9, 0xC6B9, 0xC6B9}, {0xC6BA, 0xC6BA, 0xC6BA}, + {0xC6BB, 0xC6BB, 0xC6BB}, {0xC6BC, 0xC6BC, 0xC6BC}, + {0xC6BD, 0xC6BD, 0xC6BD}, {0xC6BE, 0xC6BE, 0xC6BE}, + {0xC6BF, 0xC6BF, 0xC6BF}, {0xC6C0, 0xC6C0, 0xC6C0}, + {0xC6C1, 0xC6C1, 0xC6C1}, {0xC6C2, 0xC6C2, 0xC6C2}, + {0xC6C3, 0xC6C3, 0xC6C3}, {0xC6C4, 0xC6C4, 0xC6C4}, + {0xC6C5, 0xC6C5, 0xC6C5}, {0xC6C6, 0xC6C6, 0xC6C6}, + {0xC6C7, 0xC6C7, 0xC6C7}, {0xC6C8, 0xC6C8, 0xC6C8}, + {0xC6C9, 0xC6C9, 0xC6C9}, {0xC6CA, 0xC6CA, 0xC6CA}, + {0xC6CB, 0xC6CB, 0xC6CB}, {0xC6CC, 0xC6CC, 0xC6CC}, + {0xC6CD, 0xC6CD, 0xC6CD}, {0xC6CE, 0xC6CE, 0xC6CE}, + {0xC6CF, 0xC6CF, 0xC6CF}, {0xC6D0, 0xC6D0, 0xC6D0}, + {0xC6D1, 0xC6D1, 0xC6D1}, {0xC6D2, 0xC6D2, 0xC6D2}, + {0xC6D3, 0xC6D3, 0xC6D3}, {0xC6D4, 0xC6D4, 0xC6D4}, + {0xC6D5, 0xC6D5, 0xC6D5}, {0xC6D6, 0xC6D6, 0xC6D6}, + {0xC6D7, 0xC6D7, 0xC6D7}, {0xC6D8, 0xC6D8, 0xC6D8}, + {0xC6D9, 0xC6D9, 0xC6D9}, {0xC6DA, 0xC6DA, 0xC6DA}, + {0xC6DB, 0xC6DB, 0xC6DB}, {0xC6DC, 0xC6DC, 0xC6DC}, + {0xC6DD, 0xC6DD, 0xC6DD}, {0xC6DE, 0xC6DE, 0xC6DE}, + {0xC6DF, 0xC6DF, 0xC6DF}, {0xC6E0, 0xC6E0, 0xC6E0}, + {0xC6E1, 0xC6E1, 0xC6E1}, {0xC6E2, 0xC6E2, 0xC6E2}, + {0xC6E3, 0xC6E3, 0xC6E3}, {0xC6E4, 0xC6E4, 0xC6E4}, + {0xC6E5, 0xC6E5, 0xC6E5}, {0xC6E6, 0xC6E6, 0xC6E6}, + {0xC6E7, 0xC6E7, 0xC6E7}, {0xC6E8, 0xC6E8, 0xC6E8}, + {0xC6E9, 0xC6E9, 0xC6E9}, {0xC6EA, 0xC6EA, 0xC6EA}, + {0xC6EB, 0xC6EB, 0xC6EB}, {0xC6EC, 0xC6EC, 0xC6EC}, + {0xC6ED, 0xC6ED, 0xC6ED}, {0xC6EE, 0xC6EE, 0xC6EE}, + {0xC6EF, 0xC6EF, 0xC6EF}, {0xC6F0, 0xC6F0, 0xC6F0}, + {0xC6F1, 0xC6F1, 0xC6F1}, {0xC6F2, 0xC6F2, 0xC6F2}, + {0xC6F3, 0xC6F3, 0xC6F3}, {0xC6F4, 0xC6F4, 0xC6F4}, + {0xC6F5, 0xC6F5, 0xC6F5}, {0xC6F6, 0xC6F6, 0xC6F6}, + {0xC6F7, 0xC6F7, 0xC6F7}, {0xC6F8, 0xC6F8, 0xC6F8}, + {0xC6F9, 0xC6F9, 0xC6F9}, {0xC6FA, 0xC6FA, 0xC6FA}, + {0xC6FB, 0xC6FB, 0xC6FB}, {0xC6FC, 0xC6FC, 0xC6FC}, + {0xC6FD, 0xC6FD, 0xC6FD}, {0xC6FE, 0xC6FE, 0xC6FE}, + {0xC6FF, 0xC6FF, 0xC6FF}, {0xC700, 0xC700, 0xC700}, + {0xC701, 0xC701, 0xC701}, {0xC702, 0xC702, 0xC702}, + {0xC703, 0xC703, 0xC703}, {0xC704, 0xC704, 0xC704}, + {0xC705, 0xC705, 0xC705}, {0xC706, 0xC706, 0xC706}, + {0xC707, 0xC707, 0xC707}, {0xC708, 0xC708, 0xC708}, + {0xC709, 0xC709, 0xC709}, {0xC70A, 0xC70A, 0xC70A}, + {0xC70B, 0xC70B, 0xC70B}, {0xC70C, 0xC70C, 0xC70C}, + {0xC70D, 0xC70D, 0xC70D}, {0xC70E, 0xC70E, 0xC70E}, + {0xC70F, 0xC70F, 0xC70F}, {0xC710, 0xC710, 0xC710}, + {0xC711, 0xC711, 0xC711}, {0xC712, 0xC712, 0xC712}, + {0xC713, 0xC713, 0xC713}, {0xC714, 0xC714, 0xC714}, + {0xC715, 0xC715, 0xC715}, {0xC716, 0xC716, 0xC716}, + {0xC717, 0xC717, 0xC717}, {0xC718, 0xC718, 0xC718}, + {0xC719, 0xC719, 0xC719}, {0xC71A, 0xC71A, 0xC71A}, + {0xC71B, 0xC71B, 0xC71B}, {0xC71C, 0xC71C, 0xC71C}, + {0xC71D, 0xC71D, 0xC71D}, {0xC71E, 0xC71E, 0xC71E}, + {0xC71F, 0xC71F, 0xC71F}, {0xC720, 0xC720, 0xC720}, + {0xC721, 0xC721, 0xC721}, {0xC722, 0xC722, 0xC722}, + {0xC723, 0xC723, 0xC723}, {0xC724, 0xC724, 0xC724}, + {0xC725, 0xC725, 0xC725}, {0xC726, 0xC726, 0xC726}, + {0xC727, 0xC727, 0xC727}, {0xC728, 0xC728, 0xC728}, + {0xC729, 0xC729, 0xC729}, {0xC72A, 0xC72A, 0xC72A}, + {0xC72B, 0xC72B, 0xC72B}, {0xC72C, 0xC72C, 0xC72C}, + {0xC72D, 0xC72D, 0xC72D}, {0xC72E, 0xC72E, 0xC72E}, + {0xC72F, 0xC72F, 0xC72F}, {0xC730, 0xC730, 0xC730}, + {0xC731, 0xC731, 0xC731}, {0xC732, 0xC732, 0xC732}, + {0xC733, 0xC733, 0xC733}, {0xC734, 0xC734, 0xC734}, + {0xC735, 0xC735, 0xC735}, {0xC736, 0xC736, 0xC736}, + {0xC737, 0xC737, 0xC737}, {0xC738, 0xC738, 0xC738}, + {0xC739, 0xC739, 0xC739}, {0xC73A, 0xC73A, 0xC73A}, + {0xC73B, 0xC73B, 0xC73B}, {0xC73C, 0xC73C, 0xC73C}, + {0xC73D, 0xC73D, 0xC73D}, {0xC73E, 0xC73E, 0xC73E}, + {0xC73F, 0xC73F, 0xC73F}, {0xC740, 0xC740, 0xC740}, + {0xC741, 0xC741, 0xC741}, {0xC742, 0xC742, 0xC742}, + {0xC743, 0xC743, 0xC743}, {0xC744, 0xC744, 0xC744}, + {0xC745, 0xC745, 0xC745}, {0xC746, 0xC746, 0xC746}, + {0xC747, 0xC747, 0xC747}, {0xC748, 0xC748, 0xC748}, + {0xC749, 0xC749, 0xC749}, {0xC74A, 0xC74A, 0xC74A}, + {0xC74B, 0xC74B, 0xC74B}, {0xC74C, 0xC74C, 0xC74C}, + {0xC74D, 0xC74D, 0xC74D}, {0xC74E, 0xC74E, 0xC74E}, + {0xC74F, 0xC74F, 0xC74F}, {0xC750, 0xC750, 0xC750}, + {0xC751, 0xC751, 0xC751}, {0xC752, 0xC752, 0xC752}, + {0xC753, 0xC753, 0xC753}, {0xC754, 0xC754, 0xC754}, + {0xC755, 0xC755, 0xC755}, {0xC756, 0xC756, 0xC756}, + {0xC757, 0xC757, 0xC757}, {0xC758, 0xC758, 0xC758}, + {0xC759, 0xC759, 0xC759}, {0xC75A, 0xC75A, 0xC75A}, + {0xC75B, 0xC75B, 0xC75B}, {0xC75C, 0xC75C, 0xC75C}, + {0xC75D, 0xC75D, 0xC75D}, {0xC75E, 0xC75E, 0xC75E}, + {0xC75F, 0xC75F, 0xC75F}, {0xC760, 0xC760, 0xC760}, + {0xC761, 0xC761, 0xC761}, {0xC762, 0xC762, 0xC762}, + {0xC763, 0xC763, 0xC763}, {0xC764, 0xC764, 0xC764}, + {0xC765, 0xC765, 0xC765}, {0xC766, 0xC766, 0xC766}, + {0xC767, 0xC767, 0xC767}, {0xC768, 0xC768, 0xC768}, + {0xC769, 0xC769, 0xC769}, {0xC76A, 0xC76A, 0xC76A}, + {0xC76B, 0xC76B, 0xC76B}, {0xC76C, 0xC76C, 0xC76C}, + {0xC76D, 0xC76D, 0xC76D}, {0xC76E, 0xC76E, 0xC76E}, + {0xC76F, 0xC76F, 0xC76F}, {0xC770, 0xC770, 0xC770}, + {0xC771, 0xC771, 0xC771}, {0xC772, 0xC772, 0xC772}, + {0xC773, 0xC773, 0xC773}, {0xC774, 0xC774, 0xC774}, + {0xC775, 0xC775, 0xC775}, {0xC776, 0xC776, 0xC776}, + {0xC777, 0xC777, 0xC777}, {0xC778, 0xC778, 0xC778}, + {0xC779, 0xC779, 0xC779}, {0xC77A, 0xC77A, 0xC77A}, + {0xC77B, 0xC77B, 0xC77B}, {0xC77C, 0xC77C, 0xC77C}, + {0xC77D, 0xC77D, 0xC77D}, {0xC77E, 0xC77E, 0xC77E}, + {0xC77F, 0xC77F, 0xC77F}, {0xC780, 0xC780, 0xC780}, + {0xC781, 0xC781, 0xC781}, {0xC782, 0xC782, 0xC782}, + {0xC783, 0xC783, 0xC783}, {0xC784, 0xC784, 0xC784}, + {0xC785, 0xC785, 0xC785}, {0xC786, 0xC786, 0xC786}, + {0xC787, 0xC787, 0xC787}, {0xC788, 0xC788, 0xC788}, + {0xC789, 0xC789, 0xC789}, {0xC78A, 0xC78A, 0xC78A}, + {0xC78B, 0xC78B, 0xC78B}, {0xC78C, 0xC78C, 0xC78C}, + {0xC78D, 0xC78D, 0xC78D}, {0xC78E, 0xC78E, 0xC78E}, + {0xC78F, 0xC78F, 0xC78F}, {0xC790, 0xC790, 0xC790}, + {0xC791, 0xC791, 0xC791}, {0xC792, 0xC792, 0xC792}, + {0xC793, 0xC793, 0xC793}, {0xC794, 0xC794, 0xC794}, + {0xC795, 0xC795, 0xC795}, {0xC796, 0xC796, 0xC796}, + {0xC797, 0xC797, 0xC797}, {0xC798, 0xC798, 0xC798}, + {0xC799, 0xC799, 0xC799}, {0xC79A, 0xC79A, 0xC79A}, + {0xC79B, 0xC79B, 0xC79B}, {0xC79C, 0xC79C, 0xC79C}, + {0xC79D, 0xC79D, 0xC79D}, {0xC79E, 0xC79E, 0xC79E}, + {0xC79F, 0xC79F, 0xC79F}, {0xC7A0, 0xC7A0, 0xC7A0}, + {0xC7A1, 0xC7A1, 0xC7A1}, {0xC7A2, 0xC7A2, 0xC7A2}, + {0xC7A3, 0xC7A3, 0xC7A3}, {0xC7A4, 0xC7A4, 0xC7A4}, + {0xC7A5, 0xC7A5, 0xC7A5}, {0xC7A6, 0xC7A6, 0xC7A6}, + {0xC7A7, 0xC7A7, 0xC7A7}, {0xC7A8, 0xC7A8, 0xC7A8}, + {0xC7A9, 0xC7A9, 0xC7A9}, {0xC7AA, 0xC7AA, 0xC7AA}, + {0xC7AB, 0xC7AB, 0xC7AB}, {0xC7AC, 0xC7AC, 0xC7AC}, + {0xC7AD, 0xC7AD, 0xC7AD}, {0xC7AE, 0xC7AE, 0xC7AE}, + {0xC7AF, 0xC7AF, 0xC7AF}, {0xC7B0, 0xC7B0, 0xC7B0}, + {0xC7B1, 0xC7B1, 0xC7B1}, {0xC7B2, 0xC7B2, 0xC7B2}, + {0xC7B3, 0xC7B3, 0xC7B3}, {0xC7B4, 0xC7B4, 0xC7B4}, + {0xC7B5, 0xC7B5, 0xC7B5}, {0xC7B6, 0xC7B6, 0xC7B6}, + {0xC7B7, 0xC7B7, 0xC7B7}, {0xC7B8, 0xC7B8, 0xC7B8}, + {0xC7B9, 0xC7B9, 0xC7B9}, {0xC7BA, 0xC7BA, 0xC7BA}, + {0xC7BB, 0xC7BB, 0xC7BB}, {0xC7BC, 0xC7BC, 0xC7BC}, + {0xC7BD, 0xC7BD, 0xC7BD}, {0xC7BE, 0xC7BE, 0xC7BE}, + {0xC7BF, 0xC7BF, 0xC7BF}, {0xC7C0, 0xC7C0, 0xC7C0}, + {0xC7C1, 0xC7C1, 0xC7C1}, {0xC7C2, 0xC7C2, 0xC7C2}, + {0xC7C3, 0xC7C3, 0xC7C3}, {0xC7C4, 0xC7C4, 0xC7C4}, + {0xC7C5, 0xC7C5, 0xC7C5}, {0xC7C6, 0xC7C6, 0xC7C6}, + {0xC7C7, 0xC7C7, 0xC7C7}, {0xC7C8, 0xC7C8, 0xC7C8}, + {0xC7C9, 0xC7C9, 0xC7C9}, {0xC7CA, 0xC7CA, 0xC7CA}, + {0xC7CB, 0xC7CB, 0xC7CB}, {0xC7CC, 0xC7CC, 0xC7CC}, + {0xC7CD, 0xC7CD, 0xC7CD}, {0xC7CE, 0xC7CE, 0xC7CE}, + {0xC7CF, 0xC7CF, 0xC7CF}, {0xC7D0, 0xC7D0, 0xC7D0}, + {0xC7D1, 0xC7D1, 0xC7D1}, {0xC7D2, 0xC7D2, 0xC7D2}, + {0xC7D3, 0xC7D3, 0xC7D3}, {0xC7D4, 0xC7D4, 0xC7D4}, + {0xC7D5, 0xC7D5, 0xC7D5}, {0xC7D6, 0xC7D6, 0xC7D6}, + {0xC7D7, 0xC7D7, 0xC7D7}, {0xC7D8, 0xC7D8, 0xC7D8}, + {0xC7D9, 0xC7D9, 0xC7D9}, {0xC7DA, 0xC7DA, 0xC7DA}, + {0xC7DB, 0xC7DB, 0xC7DB}, {0xC7DC, 0xC7DC, 0xC7DC}, + {0xC7DD, 0xC7DD, 0xC7DD}, {0xC7DE, 0xC7DE, 0xC7DE}, + {0xC7DF, 0xC7DF, 0xC7DF}, {0xC7E0, 0xC7E0, 0xC7E0}, + {0xC7E1, 0xC7E1, 0xC7E1}, {0xC7E2, 0xC7E2, 0xC7E2}, + {0xC7E3, 0xC7E3, 0xC7E3}, {0xC7E4, 0xC7E4, 0xC7E4}, + {0xC7E5, 0xC7E5, 0xC7E5}, {0xC7E6, 0xC7E6, 0xC7E6}, + {0xC7E7, 0xC7E7, 0xC7E7}, {0xC7E8, 0xC7E8, 0xC7E8}, + {0xC7E9, 0xC7E9, 0xC7E9}, {0xC7EA, 0xC7EA, 0xC7EA}, + {0xC7EB, 0xC7EB, 0xC7EB}, {0xC7EC, 0xC7EC, 0xC7EC}, + {0xC7ED, 0xC7ED, 0xC7ED}, {0xC7EE, 0xC7EE, 0xC7EE}, + {0xC7EF, 0xC7EF, 0xC7EF}, {0xC7F0, 0xC7F0, 0xC7F0}, + {0xC7F1, 0xC7F1, 0xC7F1}, {0xC7F2, 0xC7F2, 0xC7F2}, + {0xC7F3, 0xC7F3, 0xC7F3}, {0xC7F4, 0xC7F4, 0xC7F4}, + {0xC7F5, 0xC7F5, 0xC7F5}, {0xC7F6, 0xC7F6, 0xC7F6}, + {0xC7F7, 0xC7F7, 0xC7F7}, {0xC7F8, 0xC7F8, 0xC7F8}, + {0xC7F9, 0xC7F9, 0xC7F9}, {0xC7FA, 0xC7FA, 0xC7FA}, + {0xC7FB, 0xC7FB, 0xC7FB}, {0xC7FC, 0xC7FC, 0xC7FC}, + {0xC7FD, 0xC7FD, 0xC7FD}, {0xC7FE, 0xC7FE, 0xC7FE}, + {0xC7FF, 0xC7FF, 0xC7FF}, {0xC800, 0xC800, 0xC800}, + {0xC801, 0xC801, 0xC801}, {0xC802, 0xC802, 0xC802}, + {0xC803, 0xC803, 0xC803}, {0xC804, 0xC804, 0xC804}, + {0xC805, 0xC805, 0xC805}, {0xC806, 0xC806, 0xC806}, + {0xC807, 0xC807, 0xC807}, {0xC808, 0xC808, 0xC808}, + {0xC809, 0xC809, 0xC809}, {0xC80A, 0xC80A, 0xC80A}, + {0xC80B, 0xC80B, 0xC80B}, {0xC80C, 0xC80C, 0xC80C}, + {0xC80D, 0xC80D, 0xC80D}, {0xC80E, 0xC80E, 0xC80E}, + {0xC80F, 0xC80F, 0xC80F}, {0xC810, 0xC810, 0xC810}, + {0xC811, 0xC811, 0xC811}, {0xC812, 0xC812, 0xC812}, + {0xC813, 0xC813, 0xC813}, {0xC814, 0xC814, 0xC814}, + {0xC815, 0xC815, 0xC815}, {0xC816, 0xC816, 0xC816}, + {0xC817, 0xC817, 0xC817}, {0xC818, 0xC818, 0xC818}, + {0xC819, 0xC819, 0xC819}, {0xC81A, 0xC81A, 0xC81A}, + {0xC81B, 0xC81B, 0xC81B}, {0xC81C, 0xC81C, 0xC81C}, + {0xC81D, 0xC81D, 0xC81D}, {0xC81E, 0xC81E, 0xC81E}, + {0xC81F, 0xC81F, 0xC81F}, {0xC820, 0xC820, 0xC820}, + {0xC821, 0xC821, 0xC821}, {0xC822, 0xC822, 0xC822}, + {0xC823, 0xC823, 0xC823}, {0xC824, 0xC824, 0xC824}, + {0xC825, 0xC825, 0xC825}, {0xC826, 0xC826, 0xC826}, + {0xC827, 0xC827, 0xC827}, {0xC828, 0xC828, 0xC828}, + {0xC829, 0xC829, 0xC829}, {0xC82A, 0xC82A, 0xC82A}, + {0xC82B, 0xC82B, 0xC82B}, {0xC82C, 0xC82C, 0xC82C}, + {0xC82D, 0xC82D, 0xC82D}, {0xC82E, 0xC82E, 0xC82E}, + {0xC82F, 0xC82F, 0xC82F}, {0xC830, 0xC830, 0xC830}, + {0xC831, 0xC831, 0xC831}, {0xC832, 0xC832, 0xC832}, + {0xC833, 0xC833, 0xC833}, {0xC834, 0xC834, 0xC834}, + {0xC835, 0xC835, 0xC835}, {0xC836, 0xC836, 0xC836}, + {0xC837, 0xC837, 0xC837}, {0xC838, 0xC838, 0xC838}, + {0xC839, 0xC839, 0xC839}, {0xC83A, 0xC83A, 0xC83A}, + {0xC83B, 0xC83B, 0xC83B}, {0xC83C, 0xC83C, 0xC83C}, + {0xC83D, 0xC83D, 0xC83D}, {0xC83E, 0xC83E, 0xC83E}, + {0xC83F, 0xC83F, 0xC83F}, {0xC840, 0xC840, 0xC840}, + {0xC841, 0xC841, 0xC841}, {0xC842, 0xC842, 0xC842}, + {0xC843, 0xC843, 0xC843}, {0xC844, 0xC844, 0xC844}, + {0xC845, 0xC845, 0xC845}, {0xC846, 0xC846, 0xC846}, + {0xC847, 0xC847, 0xC847}, {0xC848, 0xC848, 0xC848}, + {0xC849, 0xC849, 0xC849}, {0xC84A, 0xC84A, 0xC84A}, + {0xC84B, 0xC84B, 0xC84B}, {0xC84C, 0xC84C, 0xC84C}, + {0xC84D, 0xC84D, 0xC84D}, {0xC84E, 0xC84E, 0xC84E}, + {0xC84F, 0xC84F, 0xC84F}, {0xC850, 0xC850, 0xC850}, + {0xC851, 0xC851, 0xC851}, {0xC852, 0xC852, 0xC852}, + {0xC853, 0xC853, 0xC853}, {0xC854, 0xC854, 0xC854}, + {0xC855, 0xC855, 0xC855}, {0xC856, 0xC856, 0xC856}, + {0xC857, 0xC857, 0xC857}, {0xC858, 0xC858, 0xC858}, + {0xC859, 0xC859, 0xC859}, {0xC85A, 0xC85A, 0xC85A}, + {0xC85B, 0xC85B, 0xC85B}, {0xC85C, 0xC85C, 0xC85C}, + {0xC85D, 0xC85D, 0xC85D}, {0xC85E, 0xC85E, 0xC85E}, + {0xC85F, 0xC85F, 0xC85F}, {0xC860, 0xC860, 0xC860}, + {0xC861, 0xC861, 0xC861}, {0xC862, 0xC862, 0xC862}, + {0xC863, 0xC863, 0xC863}, {0xC864, 0xC864, 0xC864}, + {0xC865, 0xC865, 0xC865}, {0xC866, 0xC866, 0xC866}, + {0xC867, 0xC867, 0xC867}, {0xC868, 0xC868, 0xC868}, + {0xC869, 0xC869, 0xC869}, {0xC86A, 0xC86A, 0xC86A}, + {0xC86B, 0xC86B, 0xC86B}, {0xC86C, 0xC86C, 0xC86C}, + {0xC86D, 0xC86D, 0xC86D}, {0xC86E, 0xC86E, 0xC86E}, + {0xC86F, 0xC86F, 0xC86F}, {0xC870, 0xC870, 0xC870}, + {0xC871, 0xC871, 0xC871}, {0xC872, 0xC872, 0xC872}, + {0xC873, 0xC873, 0xC873}, {0xC874, 0xC874, 0xC874}, + {0xC875, 0xC875, 0xC875}, {0xC876, 0xC876, 0xC876}, + {0xC877, 0xC877, 0xC877}, {0xC878, 0xC878, 0xC878}, + {0xC879, 0xC879, 0xC879}, {0xC87A, 0xC87A, 0xC87A}, + {0xC87B, 0xC87B, 0xC87B}, {0xC87C, 0xC87C, 0xC87C}, + {0xC87D, 0xC87D, 0xC87D}, {0xC87E, 0xC87E, 0xC87E}, + {0xC87F, 0xC87F, 0xC87F}, {0xC880, 0xC880, 0xC880}, + {0xC881, 0xC881, 0xC881}, {0xC882, 0xC882, 0xC882}, + {0xC883, 0xC883, 0xC883}, {0xC884, 0xC884, 0xC884}, + {0xC885, 0xC885, 0xC885}, {0xC886, 0xC886, 0xC886}, + {0xC887, 0xC887, 0xC887}, {0xC888, 0xC888, 0xC888}, + {0xC889, 0xC889, 0xC889}, {0xC88A, 0xC88A, 0xC88A}, + {0xC88B, 0xC88B, 0xC88B}, {0xC88C, 0xC88C, 0xC88C}, + {0xC88D, 0xC88D, 0xC88D}, {0xC88E, 0xC88E, 0xC88E}, + {0xC88F, 0xC88F, 0xC88F}, {0xC890, 0xC890, 0xC890}, + {0xC891, 0xC891, 0xC891}, {0xC892, 0xC892, 0xC892}, + {0xC893, 0xC893, 0xC893}, {0xC894, 0xC894, 0xC894}, + {0xC895, 0xC895, 0xC895}, {0xC896, 0xC896, 0xC896}, + {0xC897, 0xC897, 0xC897}, {0xC898, 0xC898, 0xC898}, + {0xC899, 0xC899, 0xC899}, {0xC89A, 0xC89A, 0xC89A}, + {0xC89B, 0xC89B, 0xC89B}, {0xC89C, 0xC89C, 0xC89C}, + {0xC89D, 0xC89D, 0xC89D}, {0xC89E, 0xC89E, 0xC89E}, + {0xC89F, 0xC89F, 0xC89F}, {0xC8A0, 0xC8A0, 0xC8A0}, + {0xC8A1, 0xC8A1, 0xC8A1}, {0xC8A2, 0xC8A2, 0xC8A2}, + {0xC8A3, 0xC8A3, 0xC8A3}, {0xC8A4, 0xC8A4, 0xC8A4}, + {0xC8A5, 0xC8A5, 0xC8A5}, {0xC8A6, 0xC8A6, 0xC8A6}, + {0xC8A7, 0xC8A7, 0xC8A7}, {0xC8A8, 0xC8A8, 0xC8A8}, + {0xC8A9, 0xC8A9, 0xC8A9}, {0xC8AA, 0xC8AA, 0xC8AA}, + {0xC8AB, 0xC8AB, 0xC8AB}, {0xC8AC, 0xC8AC, 0xC8AC}, + {0xC8AD, 0xC8AD, 0xC8AD}, {0xC8AE, 0xC8AE, 0xC8AE}, + {0xC8AF, 0xC8AF, 0xC8AF}, {0xC8B0, 0xC8B0, 0xC8B0}, + {0xC8B1, 0xC8B1, 0xC8B1}, {0xC8B2, 0xC8B2, 0xC8B2}, + {0xC8B3, 0xC8B3, 0xC8B3}, {0xC8B4, 0xC8B4, 0xC8B4}, + {0xC8B5, 0xC8B5, 0xC8B5}, {0xC8B6, 0xC8B6, 0xC8B6}, + {0xC8B7, 0xC8B7, 0xC8B7}, {0xC8B8, 0xC8B8, 0xC8B8}, + {0xC8B9, 0xC8B9, 0xC8B9}, {0xC8BA, 0xC8BA, 0xC8BA}, + {0xC8BB, 0xC8BB, 0xC8BB}, {0xC8BC, 0xC8BC, 0xC8BC}, + {0xC8BD, 0xC8BD, 0xC8BD}, {0xC8BE, 0xC8BE, 0xC8BE}, + {0xC8BF, 0xC8BF, 0xC8BF}, {0xC8C0, 0xC8C0, 0xC8C0}, + {0xC8C1, 0xC8C1, 0xC8C1}, {0xC8C2, 0xC8C2, 0xC8C2}, + {0xC8C3, 0xC8C3, 0xC8C3}, {0xC8C4, 0xC8C4, 0xC8C4}, + {0xC8C5, 0xC8C5, 0xC8C5}, {0xC8C6, 0xC8C6, 0xC8C6}, + {0xC8C7, 0xC8C7, 0xC8C7}, {0xC8C8, 0xC8C8, 0xC8C8}, + {0xC8C9, 0xC8C9, 0xC8C9}, {0xC8CA, 0xC8CA, 0xC8CA}, + {0xC8CB, 0xC8CB, 0xC8CB}, {0xC8CC, 0xC8CC, 0xC8CC}, + {0xC8CD, 0xC8CD, 0xC8CD}, {0xC8CE, 0xC8CE, 0xC8CE}, + {0xC8CF, 0xC8CF, 0xC8CF}, {0xC8D0, 0xC8D0, 0xC8D0}, + {0xC8D1, 0xC8D1, 0xC8D1}, {0xC8D2, 0xC8D2, 0xC8D2}, + {0xC8D3, 0xC8D3, 0xC8D3}, {0xC8D4, 0xC8D4, 0xC8D4}, + {0xC8D5, 0xC8D5, 0xC8D5}, {0xC8D6, 0xC8D6, 0xC8D6}, + {0xC8D7, 0xC8D7, 0xC8D7}, {0xC8D8, 0xC8D8, 0xC8D8}, + {0xC8D9, 0xC8D9, 0xC8D9}, {0xC8DA, 0xC8DA, 0xC8DA}, + {0xC8DB, 0xC8DB, 0xC8DB}, {0xC8DC, 0xC8DC, 0xC8DC}, + {0xC8DD, 0xC8DD, 0xC8DD}, {0xC8DE, 0xC8DE, 0xC8DE}, + {0xC8DF, 0xC8DF, 0xC8DF}, {0xC8E0, 0xC8E0, 0xC8E0}, + {0xC8E1, 0xC8E1, 0xC8E1}, {0xC8E2, 0xC8E2, 0xC8E2}, + {0xC8E3, 0xC8E3, 0xC8E3}, {0xC8E4, 0xC8E4, 0xC8E4}, + {0xC8E5, 0xC8E5, 0xC8E5}, {0xC8E6, 0xC8E6, 0xC8E6}, + {0xC8E7, 0xC8E7, 0xC8E7}, {0xC8E8, 0xC8E8, 0xC8E8}, + {0xC8E9, 0xC8E9, 0xC8E9}, {0xC8EA, 0xC8EA, 0xC8EA}, + {0xC8EB, 0xC8EB, 0xC8EB}, {0xC8EC, 0xC8EC, 0xC8EC}, + {0xC8ED, 0xC8ED, 0xC8ED}, {0xC8EE, 0xC8EE, 0xC8EE}, + {0xC8EF, 0xC8EF, 0xC8EF}, {0xC8F0, 0xC8F0, 0xC8F0}, + {0xC8F1, 0xC8F1, 0xC8F1}, {0xC8F2, 0xC8F2, 0xC8F2}, + {0xC8F3, 0xC8F3, 0xC8F3}, {0xC8F4, 0xC8F4, 0xC8F4}, + {0xC8F5, 0xC8F5, 0xC8F5}, {0xC8F6, 0xC8F6, 0xC8F6}, + {0xC8F7, 0xC8F7, 0xC8F7}, {0xC8F8, 0xC8F8, 0xC8F8}, + {0xC8F9, 0xC8F9, 0xC8F9}, {0xC8FA, 0xC8FA, 0xC8FA}, + {0xC8FB, 0xC8FB, 0xC8FB}, {0xC8FC, 0xC8FC, 0xC8FC}, + {0xC8FD, 0xC8FD, 0xC8FD}, {0xC8FE, 0xC8FE, 0xC8FE}, + {0xC8FF, 0xC8FF, 0xC8FF}, {0xC900, 0xC900, 0xC900}, + {0xC901, 0xC901, 0xC901}, {0xC902, 0xC902, 0xC902}, + {0xC903, 0xC903, 0xC903}, {0xC904, 0xC904, 0xC904}, + {0xC905, 0xC905, 0xC905}, {0xC906, 0xC906, 0xC906}, + {0xC907, 0xC907, 0xC907}, {0xC908, 0xC908, 0xC908}, + {0xC909, 0xC909, 0xC909}, {0xC90A, 0xC90A, 0xC90A}, + {0xC90B, 0xC90B, 0xC90B}, {0xC90C, 0xC90C, 0xC90C}, + {0xC90D, 0xC90D, 0xC90D}, {0xC90E, 0xC90E, 0xC90E}, + {0xC90F, 0xC90F, 0xC90F}, {0xC910, 0xC910, 0xC910}, + {0xC911, 0xC911, 0xC911}, {0xC912, 0xC912, 0xC912}, + {0xC913, 0xC913, 0xC913}, {0xC914, 0xC914, 0xC914}, + {0xC915, 0xC915, 0xC915}, {0xC916, 0xC916, 0xC916}, + {0xC917, 0xC917, 0xC917}, {0xC918, 0xC918, 0xC918}, + {0xC919, 0xC919, 0xC919}, {0xC91A, 0xC91A, 0xC91A}, + {0xC91B, 0xC91B, 0xC91B}, {0xC91C, 0xC91C, 0xC91C}, + {0xC91D, 0xC91D, 0xC91D}, {0xC91E, 0xC91E, 0xC91E}, + {0xC91F, 0xC91F, 0xC91F}, {0xC920, 0xC920, 0xC920}, + {0xC921, 0xC921, 0xC921}, {0xC922, 0xC922, 0xC922}, + {0xC923, 0xC923, 0xC923}, {0xC924, 0xC924, 0xC924}, + {0xC925, 0xC925, 0xC925}, {0xC926, 0xC926, 0xC926}, + {0xC927, 0xC927, 0xC927}, {0xC928, 0xC928, 0xC928}, + {0xC929, 0xC929, 0xC929}, {0xC92A, 0xC92A, 0xC92A}, + {0xC92B, 0xC92B, 0xC92B}, {0xC92C, 0xC92C, 0xC92C}, + {0xC92D, 0xC92D, 0xC92D}, {0xC92E, 0xC92E, 0xC92E}, + {0xC92F, 0xC92F, 0xC92F}, {0xC930, 0xC930, 0xC930}, + {0xC931, 0xC931, 0xC931}, {0xC932, 0xC932, 0xC932}, + {0xC933, 0xC933, 0xC933}, {0xC934, 0xC934, 0xC934}, + {0xC935, 0xC935, 0xC935}, {0xC936, 0xC936, 0xC936}, + {0xC937, 0xC937, 0xC937}, {0xC938, 0xC938, 0xC938}, + {0xC939, 0xC939, 0xC939}, {0xC93A, 0xC93A, 0xC93A}, + {0xC93B, 0xC93B, 0xC93B}, {0xC93C, 0xC93C, 0xC93C}, + {0xC93D, 0xC93D, 0xC93D}, {0xC93E, 0xC93E, 0xC93E}, + {0xC93F, 0xC93F, 0xC93F}, {0xC940, 0xC940, 0xC940}, + {0xC941, 0xC941, 0xC941}, {0xC942, 0xC942, 0xC942}, + {0xC943, 0xC943, 0xC943}, {0xC944, 0xC944, 0xC944}, + {0xC945, 0xC945, 0xC945}, {0xC946, 0xC946, 0xC946}, + {0xC947, 0xC947, 0xC947}, {0xC948, 0xC948, 0xC948}, + {0xC949, 0xC949, 0xC949}, {0xC94A, 0xC94A, 0xC94A}, + {0xC94B, 0xC94B, 0xC94B}, {0xC94C, 0xC94C, 0xC94C}, + {0xC94D, 0xC94D, 0xC94D}, {0xC94E, 0xC94E, 0xC94E}, + {0xC94F, 0xC94F, 0xC94F}, {0xC950, 0xC950, 0xC950}, + {0xC951, 0xC951, 0xC951}, {0xC952, 0xC952, 0xC952}, + {0xC953, 0xC953, 0xC953}, {0xC954, 0xC954, 0xC954}, + {0xC955, 0xC955, 0xC955}, {0xC956, 0xC956, 0xC956}, + {0xC957, 0xC957, 0xC957}, {0xC958, 0xC958, 0xC958}, + {0xC959, 0xC959, 0xC959}, {0xC95A, 0xC95A, 0xC95A}, + {0xC95B, 0xC95B, 0xC95B}, {0xC95C, 0xC95C, 0xC95C}, + {0xC95D, 0xC95D, 0xC95D}, {0xC95E, 0xC95E, 0xC95E}, + {0xC95F, 0xC95F, 0xC95F}, {0xC960, 0xC960, 0xC960}, + {0xC961, 0xC961, 0xC961}, {0xC962, 0xC962, 0xC962}, + {0xC963, 0xC963, 0xC963}, {0xC964, 0xC964, 0xC964}, + {0xC965, 0xC965, 0xC965}, {0xC966, 0xC966, 0xC966}, + {0xC967, 0xC967, 0xC967}, {0xC968, 0xC968, 0xC968}, + {0xC969, 0xC969, 0xC969}, {0xC96A, 0xC96A, 0xC96A}, + {0xC96B, 0xC96B, 0xC96B}, {0xC96C, 0xC96C, 0xC96C}, + {0xC96D, 0xC96D, 0xC96D}, {0xC96E, 0xC96E, 0xC96E}, + {0xC96F, 0xC96F, 0xC96F}, {0xC970, 0xC970, 0xC970}, + {0xC971, 0xC971, 0xC971}, {0xC972, 0xC972, 0xC972}, + {0xC973, 0xC973, 0xC973}, {0xC974, 0xC974, 0xC974}, + {0xC975, 0xC975, 0xC975}, {0xC976, 0xC976, 0xC976}, + {0xC977, 0xC977, 0xC977}, {0xC978, 0xC978, 0xC978}, + {0xC979, 0xC979, 0xC979}, {0xC97A, 0xC97A, 0xC97A}, + {0xC97B, 0xC97B, 0xC97B}, {0xC97C, 0xC97C, 0xC97C}, + {0xC97D, 0xC97D, 0xC97D}, {0xC97E, 0xC97E, 0xC97E}, + {0xC97F, 0xC97F, 0xC97F}, {0xC980, 0xC980, 0xC980}, + {0xC981, 0xC981, 0xC981}, {0xC982, 0xC982, 0xC982}, + {0xC983, 0xC983, 0xC983}, {0xC984, 0xC984, 0xC984}, + {0xC985, 0xC985, 0xC985}, {0xC986, 0xC986, 0xC986}, + {0xC987, 0xC987, 0xC987}, {0xC988, 0xC988, 0xC988}, + {0xC989, 0xC989, 0xC989}, {0xC98A, 0xC98A, 0xC98A}, + {0xC98B, 0xC98B, 0xC98B}, {0xC98C, 0xC98C, 0xC98C}, + {0xC98D, 0xC98D, 0xC98D}, {0xC98E, 0xC98E, 0xC98E}, + {0xC98F, 0xC98F, 0xC98F}, {0xC990, 0xC990, 0xC990}, + {0xC991, 0xC991, 0xC991}, {0xC992, 0xC992, 0xC992}, + {0xC993, 0xC993, 0xC993}, {0xC994, 0xC994, 0xC994}, + {0xC995, 0xC995, 0xC995}, {0xC996, 0xC996, 0xC996}, + {0xC997, 0xC997, 0xC997}, {0xC998, 0xC998, 0xC998}, + {0xC999, 0xC999, 0xC999}, {0xC99A, 0xC99A, 0xC99A}, + {0xC99B, 0xC99B, 0xC99B}, {0xC99C, 0xC99C, 0xC99C}, + {0xC99D, 0xC99D, 0xC99D}, {0xC99E, 0xC99E, 0xC99E}, + {0xC99F, 0xC99F, 0xC99F}, {0xC9A0, 0xC9A0, 0xC9A0}, + {0xC9A1, 0xC9A1, 0xC9A1}, {0xC9A2, 0xC9A2, 0xC9A2}, + {0xC9A3, 0xC9A3, 0xC9A3}, {0xC9A4, 0xC9A4, 0xC9A4}, + {0xC9A5, 0xC9A5, 0xC9A5}, {0xC9A6, 0xC9A6, 0xC9A6}, + {0xC9A7, 0xC9A7, 0xC9A7}, {0xC9A8, 0xC9A8, 0xC9A8}, + {0xC9A9, 0xC9A9, 0xC9A9}, {0xC9AA, 0xC9AA, 0xC9AA}, + {0xC9AB, 0xC9AB, 0xC9AB}, {0xC9AC, 0xC9AC, 0xC9AC}, + {0xC9AD, 0xC9AD, 0xC9AD}, {0xC9AE, 0xC9AE, 0xC9AE}, + {0xC9AF, 0xC9AF, 0xC9AF}, {0xC9B0, 0xC9B0, 0xC9B0}, + {0xC9B1, 0xC9B1, 0xC9B1}, {0xC9B2, 0xC9B2, 0xC9B2}, + {0xC9B3, 0xC9B3, 0xC9B3}, {0xC9B4, 0xC9B4, 0xC9B4}, + {0xC9B5, 0xC9B5, 0xC9B5}, {0xC9B6, 0xC9B6, 0xC9B6}, + {0xC9B7, 0xC9B7, 0xC9B7}, {0xC9B8, 0xC9B8, 0xC9B8}, + {0xC9B9, 0xC9B9, 0xC9B9}, {0xC9BA, 0xC9BA, 0xC9BA}, + {0xC9BB, 0xC9BB, 0xC9BB}, {0xC9BC, 0xC9BC, 0xC9BC}, + {0xC9BD, 0xC9BD, 0xC9BD}, {0xC9BE, 0xC9BE, 0xC9BE}, + {0xC9BF, 0xC9BF, 0xC9BF}, {0xC9C0, 0xC9C0, 0xC9C0}, + {0xC9C1, 0xC9C1, 0xC9C1}, {0xC9C2, 0xC9C2, 0xC9C2}, + {0xC9C3, 0xC9C3, 0xC9C3}, {0xC9C4, 0xC9C4, 0xC9C4}, + {0xC9C5, 0xC9C5, 0xC9C5}, {0xC9C6, 0xC9C6, 0xC9C6}, + {0xC9C7, 0xC9C7, 0xC9C7}, {0xC9C8, 0xC9C8, 0xC9C8}, + {0xC9C9, 0xC9C9, 0xC9C9}, {0xC9CA, 0xC9CA, 0xC9CA}, + {0xC9CB, 0xC9CB, 0xC9CB}, {0xC9CC, 0xC9CC, 0xC9CC}, + {0xC9CD, 0xC9CD, 0xC9CD}, {0xC9CE, 0xC9CE, 0xC9CE}, + {0xC9CF, 0xC9CF, 0xC9CF}, {0xC9D0, 0xC9D0, 0xC9D0}, + {0xC9D1, 0xC9D1, 0xC9D1}, {0xC9D2, 0xC9D2, 0xC9D2}, + {0xC9D3, 0xC9D3, 0xC9D3}, {0xC9D4, 0xC9D4, 0xC9D4}, + {0xC9D5, 0xC9D5, 0xC9D5}, {0xC9D6, 0xC9D6, 0xC9D6}, + {0xC9D7, 0xC9D7, 0xC9D7}, {0xC9D8, 0xC9D8, 0xC9D8}, + {0xC9D9, 0xC9D9, 0xC9D9}, {0xC9DA, 0xC9DA, 0xC9DA}, + {0xC9DB, 0xC9DB, 0xC9DB}, {0xC9DC, 0xC9DC, 0xC9DC}, + {0xC9DD, 0xC9DD, 0xC9DD}, {0xC9DE, 0xC9DE, 0xC9DE}, + {0xC9DF, 0xC9DF, 0xC9DF}, {0xC9E0, 0xC9E0, 0xC9E0}, + {0xC9E1, 0xC9E1, 0xC9E1}, {0xC9E2, 0xC9E2, 0xC9E2}, + {0xC9E3, 0xC9E3, 0xC9E3}, {0xC9E4, 0xC9E4, 0xC9E4}, + {0xC9E5, 0xC9E5, 0xC9E5}, {0xC9E6, 0xC9E6, 0xC9E6}, + {0xC9E7, 0xC9E7, 0xC9E7}, {0xC9E8, 0xC9E8, 0xC9E8}, + {0xC9E9, 0xC9E9, 0xC9E9}, {0xC9EA, 0xC9EA, 0xC9EA}, + {0xC9EB, 0xC9EB, 0xC9EB}, {0xC9EC, 0xC9EC, 0xC9EC}, + {0xC9ED, 0xC9ED, 0xC9ED}, {0xC9EE, 0xC9EE, 0xC9EE}, + {0xC9EF, 0xC9EF, 0xC9EF}, {0xC9F0, 0xC9F0, 0xC9F0}, + {0xC9F1, 0xC9F1, 0xC9F1}, {0xC9F2, 0xC9F2, 0xC9F2}, + {0xC9F3, 0xC9F3, 0xC9F3}, {0xC9F4, 0xC9F4, 0xC9F4}, + {0xC9F5, 0xC9F5, 0xC9F5}, {0xC9F6, 0xC9F6, 0xC9F6}, + {0xC9F7, 0xC9F7, 0xC9F7}, {0xC9F8, 0xC9F8, 0xC9F8}, + {0xC9F9, 0xC9F9, 0xC9F9}, {0xC9FA, 0xC9FA, 0xC9FA}, + {0xC9FB, 0xC9FB, 0xC9FB}, {0xC9FC, 0xC9FC, 0xC9FC}, + {0xC9FD, 0xC9FD, 0xC9FD}, {0xC9FE, 0xC9FE, 0xC9FE}, + {0xC9FF, 0xC9FF, 0xC9FF}, {0xCA00, 0xCA00, 0xCA00}, + {0xCA01, 0xCA01, 0xCA01}, {0xCA02, 0xCA02, 0xCA02}, + {0xCA03, 0xCA03, 0xCA03}, {0xCA04, 0xCA04, 0xCA04}, + {0xCA05, 0xCA05, 0xCA05}, {0xCA06, 0xCA06, 0xCA06}, + {0xCA07, 0xCA07, 0xCA07}, {0xCA08, 0xCA08, 0xCA08}, + {0xCA09, 0xCA09, 0xCA09}, {0xCA0A, 0xCA0A, 0xCA0A}, + {0xCA0B, 0xCA0B, 0xCA0B}, {0xCA0C, 0xCA0C, 0xCA0C}, + {0xCA0D, 0xCA0D, 0xCA0D}, {0xCA0E, 0xCA0E, 0xCA0E}, + {0xCA0F, 0xCA0F, 0xCA0F}, {0xCA10, 0xCA10, 0xCA10}, + {0xCA11, 0xCA11, 0xCA11}, {0xCA12, 0xCA12, 0xCA12}, + {0xCA13, 0xCA13, 0xCA13}, {0xCA14, 0xCA14, 0xCA14}, + {0xCA15, 0xCA15, 0xCA15}, {0xCA16, 0xCA16, 0xCA16}, + {0xCA17, 0xCA17, 0xCA17}, {0xCA18, 0xCA18, 0xCA18}, + {0xCA19, 0xCA19, 0xCA19}, {0xCA1A, 0xCA1A, 0xCA1A}, + {0xCA1B, 0xCA1B, 0xCA1B}, {0xCA1C, 0xCA1C, 0xCA1C}, + {0xCA1D, 0xCA1D, 0xCA1D}, {0xCA1E, 0xCA1E, 0xCA1E}, + {0xCA1F, 0xCA1F, 0xCA1F}, {0xCA20, 0xCA20, 0xCA20}, + {0xCA21, 0xCA21, 0xCA21}, {0xCA22, 0xCA22, 0xCA22}, + {0xCA23, 0xCA23, 0xCA23}, {0xCA24, 0xCA24, 0xCA24}, + {0xCA25, 0xCA25, 0xCA25}, {0xCA26, 0xCA26, 0xCA26}, + {0xCA27, 0xCA27, 0xCA27}, {0xCA28, 0xCA28, 0xCA28}, + {0xCA29, 0xCA29, 0xCA29}, {0xCA2A, 0xCA2A, 0xCA2A}, + {0xCA2B, 0xCA2B, 0xCA2B}, {0xCA2C, 0xCA2C, 0xCA2C}, + {0xCA2D, 0xCA2D, 0xCA2D}, {0xCA2E, 0xCA2E, 0xCA2E}, + {0xCA2F, 0xCA2F, 0xCA2F}, {0xCA30, 0xCA30, 0xCA30}, + {0xCA31, 0xCA31, 0xCA31}, {0xCA32, 0xCA32, 0xCA32}, + {0xCA33, 0xCA33, 0xCA33}, {0xCA34, 0xCA34, 0xCA34}, + {0xCA35, 0xCA35, 0xCA35}, {0xCA36, 0xCA36, 0xCA36}, + {0xCA37, 0xCA37, 0xCA37}, {0xCA38, 0xCA38, 0xCA38}, + {0xCA39, 0xCA39, 0xCA39}, {0xCA3A, 0xCA3A, 0xCA3A}, + {0xCA3B, 0xCA3B, 0xCA3B}, {0xCA3C, 0xCA3C, 0xCA3C}, + {0xCA3D, 0xCA3D, 0xCA3D}, {0xCA3E, 0xCA3E, 0xCA3E}, + {0xCA3F, 0xCA3F, 0xCA3F}, {0xCA40, 0xCA40, 0xCA40}, + {0xCA41, 0xCA41, 0xCA41}, {0xCA42, 0xCA42, 0xCA42}, + {0xCA43, 0xCA43, 0xCA43}, {0xCA44, 0xCA44, 0xCA44}, + {0xCA45, 0xCA45, 0xCA45}, {0xCA46, 0xCA46, 0xCA46}, + {0xCA47, 0xCA47, 0xCA47}, {0xCA48, 0xCA48, 0xCA48}, + {0xCA49, 0xCA49, 0xCA49}, {0xCA4A, 0xCA4A, 0xCA4A}, + {0xCA4B, 0xCA4B, 0xCA4B}, {0xCA4C, 0xCA4C, 0xCA4C}, + {0xCA4D, 0xCA4D, 0xCA4D}, {0xCA4E, 0xCA4E, 0xCA4E}, + {0xCA4F, 0xCA4F, 0xCA4F}, {0xCA50, 0xCA50, 0xCA50}, + {0xCA51, 0xCA51, 0xCA51}, {0xCA52, 0xCA52, 0xCA52}, + {0xCA53, 0xCA53, 0xCA53}, {0xCA54, 0xCA54, 0xCA54}, + {0xCA55, 0xCA55, 0xCA55}, {0xCA56, 0xCA56, 0xCA56}, + {0xCA57, 0xCA57, 0xCA57}, {0xCA58, 0xCA58, 0xCA58}, + {0xCA59, 0xCA59, 0xCA59}, {0xCA5A, 0xCA5A, 0xCA5A}, + {0xCA5B, 0xCA5B, 0xCA5B}, {0xCA5C, 0xCA5C, 0xCA5C}, + {0xCA5D, 0xCA5D, 0xCA5D}, {0xCA5E, 0xCA5E, 0xCA5E}, + {0xCA5F, 0xCA5F, 0xCA5F}, {0xCA60, 0xCA60, 0xCA60}, + {0xCA61, 0xCA61, 0xCA61}, {0xCA62, 0xCA62, 0xCA62}, + {0xCA63, 0xCA63, 0xCA63}, {0xCA64, 0xCA64, 0xCA64}, + {0xCA65, 0xCA65, 0xCA65}, {0xCA66, 0xCA66, 0xCA66}, + {0xCA67, 0xCA67, 0xCA67}, {0xCA68, 0xCA68, 0xCA68}, + {0xCA69, 0xCA69, 0xCA69}, {0xCA6A, 0xCA6A, 0xCA6A}, + {0xCA6B, 0xCA6B, 0xCA6B}, {0xCA6C, 0xCA6C, 0xCA6C}, + {0xCA6D, 0xCA6D, 0xCA6D}, {0xCA6E, 0xCA6E, 0xCA6E}, + {0xCA6F, 0xCA6F, 0xCA6F}, {0xCA70, 0xCA70, 0xCA70}, + {0xCA71, 0xCA71, 0xCA71}, {0xCA72, 0xCA72, 0xCA72}, + {0xCA73, 0xCA73, 0xCA73}, {0xCA74, 0xCA74, 0xCA74}, + {0xCA75, 0xCA75, 0xCA75}, {0xCA76, 0xCA76, 0xCA76}, + {0xCA77, 0xCA77, 0xCA77}, {0xCA78, 0xCA78, 0xCA78}, + {0xCA79, 0xCA79, 0xCA79}, {0xCA7A, 0xCA7A, 0xCA7A}, + {0xCA7B, 0xCA7B, 0xCA7B}, {0xCA7C, 0xCA7C, 0xCA7C}, + {0xCA7D, 0xCA7D, 0xCA7D}, {0xCA7E, 0xCA7E, 0xCA7E}, + {0xCA7F, 0xCA7F, 0xCA7F}, {0xCA80, 0xCA80, 0xCA80}, + {0xCA81, 0xCA81, 0xCA81}, {0xCA82, 0xCA82, 0xCA82}, + {0xCA83, 0xCA83, 0xCA83}, {0xCA84, 0xCA84, 0xCA84}, + {0xCA85, 0xCA85, 0xCA85}, {0xCA86, 0xCA86, 0xCA86}, + {0xCA87, 0xCA87, 0xCA87}, {0xCA88, 0xCA88, 0xCA88}, + {0xCA89, 0xCA89, 0xCA89}, {0xCA8A, 0xCA8A, 0xCA8A}, + {0xCA8B, 0xCA8B, 0xCA8B}, {0xCA8C, 0xCA8C, 0xCA8C}, + {0xCA8D, 0xCA8D, 0xCA8D}, {0xCA8E, 0xCA8E, 0xCA8E}, + {0xCA8F, 0xCA8F, 0xCA8F}, {0xCA90, 0xCA90, 0xCA90}, + {0xCA91, 0xCA91, 0xCA91}, {0xCA92, 0xCA92, 0xCA92}, + {0xCA93, 0xCA93, 0xCA93}, {0xCA94, 0xCA94, 0xCA94}, + {0xCA95, 0xCA95, 0xCA95}, {0xCA96, 0xCA96, 0xCA96}, + {0xCA97, 0xCA97, 0xCA97}, {0xCA98, 0xCA98, 0xCA98}, + {0xCA99, 0xCA99, 0xCA99}, {0xCA9A, 0xCA9A, 0xCA9A}, + {0xCA9B, 0xCA9B, 0xCA9B}, {0xCA9C, 0xCA9C, 0xCA9C}, + {0xCA9D, 0xCA9D, 0xCA9D}, {0xCA9E, 0xCA9E, 0xCA9E}, + {0xCA9F, 0xCA9F, 0xCA9F}, {0xCAA0, 0xCAA0, 0xCAA0}, + {0xCAA1, 0xCAA1, 0xCAA1}, {0xCAA2, 0xCAA2, 0xCAA2}, + {0xCAA3, 0xCAA3, 0xCAA3}, {0xCAA4, 0xCAA4, 0xCAA4}, + {0xCAA5, 0xCAA5, 0xCAA5}, {0xCAA6, 0xCAA6, 0xCAA6}, + {0xCAA7, 0xCAA7, 0xCAA7}, {0xCAA8, 0xCAA8, 0xCAA8}, + {0xCAA9, 0xCAA9, 0xCAA9}, {0xCAAA, 0xCAAA, 0xCAAA}, + {0xCAAB, 0xCAAB, 0xCAAB}, {0xCAAC, 0xCAAC, 0xCAAC}, + {0xCAAD, 0xCAAD, 0xCAAD}, {0xCAAE, 0xCAAE, 0xCAAE}, + {0xCAAF, 0xCAAF, 0xCAAF}, {0xCAB0, 0xCAB0, 0xCAB0}, + {0xCAB1, 0xCAB1, 0xCAB1}, {0xCAB2, 0xCAB2, 0xCAB2}, + {0xCAB3, 0xCAB3, 0xCAB3}, {0xCAB4, 0xCAB4, 0xCAB4}, + {0xCAB5, 0xCAB5, 0xCAB5}, {0xCAB6, 0xCAB6, 0xCAB6}, + {0xCAB7, 0xCAB7, 0xCAB7}, {0xCAB8, 0xCAB8, 0xCAB8}, + {0xCAB9, 0xCAB9, 0xCAB9}, {0xCABA, 0xCABA, 0xCABA}, + {0xCABB, 0xCABB, 0xCABB}, {0xCABC, 0xCABC, 0xCABC}, + {0xCABD, 0xCABD, 0xCABD}, {0xCABE, 0xCABE, 0xCABE}, + {0xCABF, 0xCABF, 0xCABF}, {0xCAC0, 0xCAC0, 0xCAC0}, + {0xCAC1, 0xCAC1, 0xCAC1}, {0xCAC2, 0xCAC2, 0xCAC2}, + {0xCAC3, 0xCAC3, 0xCAC3}, {0xCAC4, 0xCAC4, 0xCAC4}, + {0xCAC5, 0xCAC5, 0xCAC5}, {0xCAC6, 0xCAC6, 0xCAC6}, + {0xCAC7, 0xCAC7, 0xCAC7}, {0xCAC8, 0xCAC8, 0xCAC8}, + {0xCAC9, 0xCAC9, 0xCAC9}, {0xCACA, 0xCACA, 0xCACA}, + {0xCACB, 0xCACB, 0xCACB}, {0xCACC, 0xCACC, 0xCACC}, + {0xCACD, 0xCACD, 0xCACD}, {0xCACE, 0xCACE, 0xCACE}, + {0xCACF, 0xCACF, 0xCACF}, {0xCAD0, 0xCAD0, 0xCAD0}, + {0xCAD1, 0xCAD1, 0xCAD1}, {0xCAD2, 0xCAD2, 0xCAD2}, + {0xCAD3, 0xCAD3, 0xCAD3}, {0xCAD4, 0xCAD4, 0xCAD4}, + {0xCAD5, 0xCAD5, 0xCAD5}, {0xCAD6, 0xCAD6, 0xCAD6}, + {0xCAD7, 0xCAD7, 0xCAD7}, {0xCAD8, 0xCAD8, 0xCAD8}, + {0xCAD9, 0xCAD9, 0xCAD9}, {0xCADA, 0xCADA, 0xCADA}, + {0xCADB, 0xCADB, 0xCADB}, {0xCADC, 0xCADC, 0xCADC}, + {0xCADD, 0xCADD, 0xCADD}, {0xCADE, 0xCADE, 0xCADE}, + {0xCADF, 0xCADF, 0xCADF}, {0xCAE0, 0xCAE0, 0xCAE0}, + {0xCAE1, 0xCAE1, 0xCAE1}, {0xCAE2, 0xCAE2, 0xCAE2}, + {0xCAE3, 0xCAE3, 0xCAE3}, {0xCAE4, 0xCAE4, 0xCAE4}, + {0xCAE5, 0xCAE5, 0xCAE5}, {0xCAE6, 0xCAE6, 0xCAE6}, + {0xCAE7, 0xCAE7, 0xCAE7}, {0xCAE8, 0xCAE8, 0xCAE8}, + {0xCAE9, 0xCAE9, 0xCAE9}, {0xCAEA, 0xCAEA, 0xCAEA}, + {0xCAEB, 0xCAEB, 0xCAEB}, {0xCAEC, 0xCAEC, 0xCAEC}, + {0xCAED, 0xCAED, 0xCAED}, {0xCAEE, 0xCAEE, 0xCAEE}, + {0xCAEF, 0xCAEF, 0xCAEF}, {0xCAF0, 0xCAF0, 0xCAF0}, + {0xCAF1, 0xCAF1, 0xCAF1}, {0xCAF2, 0xCAF2, 0xCAF2}, + {0xCAF3, 0xCAF3, 0xCAF3}, {0xCAF4, 0xCAF4, 0xCAF4}, + {0xCAF5, 0xCAF5, 0xCAF5}, {0xCAF6, 0xCAF6, 0xCAF6}, + {0xCAF7, 0xCAF7, 0xCAF7}, {0xCAF8, 0xCAF8, 0xCAF8}, + {0xCAF9, 0xCAF9, 0xCAF9}, {0xCAFA, 0xCAFA, 0xCAFA}, + {0xCAFB, 0xCAFB, 0xCAFB}, {0xCAFC, 0xCAFC, 0xCAFC}, + {0xCAFD, 0xCAFD, 0xCAFD}, {0xCAFE, 0xCAFE, 0xCAFE}, + {0xCAFF, 0xCAFF, 0xCAFF}, {0xCB00, 0xCB00, 0xCB00}, + {0xCB01, 0xCB01, 0xCB01}, {0xCB02, 0xCB02, 0xCB02}, + {0xCB03, 0xCB03, 0xCB03}, {0xCB04, 0xCB04, 0xCB04}, + {0xCB05, 0xCB05, 0xCB05}, {0xCB06, 0xCB06, 0xCB06}, + {0xCB07, 0xCB07, 0xCB07}, {0xCB08, 0xCB08, 0xCB08}, + {0xCB09, 0xCB09, 0xCB09}, {0xCB0A, 0xCB0A, 0xCB0A}, + {0xCB0B, 0xCB0B, 0xCB0B}, {0xCB0C, 0xCB0C, 0xCB0C}, + {0xCB0D, 0xCB0D, 0xCB0D}, {0xCB0E, 0xCB0E, 0xCB0E}, + {0xCB0F, 0xCB0F, 0xCB0F}, {0xCB10, 0xCB10, 0xCB10}, + {0xCB11, 0xCB11, 0xCB11}, {0xCB12, 0xCB12, 0xCB12}, + {0xCB13, 0xCB13, 0xCB13}, {0xCB14, 0xCB14, 0xCB14}, + {0xCB15, 0xCB15, 0xCB15}, {0xCB16, 0xCB16, 0xCB16}, + {0xCB17, 0xCB17, 0xCB17}, {0xCB18, 0xCB18, 0xCB18}, + {0xCB19, 0xCB19, 0xCB19}, {0xCB1A, 0xCB1A, 0xCB1A}, + {0xCB1B, 0xCB1B, 0xCB1B}, {0xCB1C, 0xCB1C, 0xCB1C}, + {0xCB1D, 0xCB1D, 0xCB1D}, {0xCB1E, 0xCB1E, 0xCB1E}, + {0xCB1F, 0xCB1F, 0xCB1F}, {0xCB20, 0xCB20, 0xCB20}, + {0xCB21, 0xCB21, 0xCB21}, {0xCB22, 0xCB22, 0xCB22}, + {0xCB23, 0xCB23, 0xCB23}, {0xCB24, 0xCB24, 0xCB24}, + {0xCB25, 0xCB25, 0xCB25}, {0xCB26, 0xCB26, 0xCB26}, + {0xCB27, 0xCB27, 0xCB27}, {0xCB28, 0xCB28, 0xCB28}, + {0xCB29, 0xCB29, 0xCB29}, {0xCB2A, 0xCB2A, 0xCB2A}, + {0xCB2B, 0xCB2B, 0xCB2B}, {0xCB2C, 0xCB2C, 0xCB2C}, + {0xCB2D, 0xCB2D, 0xCB2D}, {0xCB2E, 0xCB2E, 0xCB2E}, + {0xCB2F, 0xCB2F, 0xCB2F}, {0xCB30, 0xCB30, 0xCB30}, + {0xCB31, 0xCB31, 0xCB31}, {0xCB32, 0xCB32, 0xCB32}, + {0xCB33, 0xCB33, 0xCB33}, {0xCB34, 0xCB34, 0xCB34}, + {0xCB35, 0xCB35, 0xCB35}, {0xCB36, 0xCB36, 0xCB36}, + {0xCB37, 0xCB37, 0xCB37}, {0xCB38, 0xCB38, 0xCB38}, + {0xCB39, 0xCB39, 0xCB39}, {0xCB3A, 0xCB3A, 0xCB3A}, + {0xCB3B, 0xCB3B, 0xCB3B}, {0xCB3C, 0xCB3C, 0xCB3C}, + {0xCB3D, 0xCB3D, 0xCB3D}, {0xCB3E, 0xCB3E, 0xCB3E}, + {0xCB3F, 0xCB3F, 0xCB3F}, {0xCB40, 0xCB40, 0xCB40}, + {0xCB41, 0xCB41, 0xCB41}, {0xCB42, 0xCB42, 0xCB42}, + {0xCB43, 0xCB43, 0xCB43}, {0xCB44, 0xCB44, 0xCB44}, + {0xCB45, 0xCB45, 0xCB45}, {0xCB46, 0xCB46, 0xCB46}, + {0xCB47, 0xCB47, 0xCB47}, {0xCB48, 0xCB48, 0xCB48}, + {0xCB49, 0xCB49, 0xCB49}, {0xCB4A, 0xCB4A, 0xCB4A}, + {0xCB4B, 0xCB4B, 0xCB4B}, {0xCB4C, 0xCB4C, 0xCB4C}, + {0xCB4D, 0xCB4D, 0xCB4D}, {0xCB4E, 0xCB4E, 0xCB4E}, + {0xCB4F, 0xCB4F, 0xCB4F}, {0xCB50, 0xCB50, 0xCB50}, + {0xCB51, 0xCB51, 0xCB51}, {0xCB52, 0xCB52, 0xCB52}, + {0xCB53, 0xCB53, 0xCB53}, {0xCB54, 0xCB54, 0xCB54}, + {0xCB55, 0xCB55, 0xCB55}, {0xCB56, 0xCB56, 0xCB56}, + {0xCB57, 0xCB57, 0xCB57}, {0xCB58, 0xCB58, 0xCB58}, + {0xCB59, 0xCB59, 0xCB59}, {0xCB5A, 0xCB5A, 0xCB5A}, + {0xCB5B, 0xCB5B, 0xCB5B}, {0xCB5C, 0xCB5C, 0xCB5C}, + {0xCB5D, 0xCB5D, 0xCB5D}, {0xCB5E, 0xCB5E, 0xCB5E}, + {0xCB5F, 0xCB5F, 0xCB5F}, {0xCB60, 0xCB60, 0xCB60}, + {0xCB61, 0xCB61, 0xCB61}, {0xCB62, 0xCB62, 0xCB62}, + {0xCB63, 0xCB63, 0xCB63}, {0xCB64, 0xCB64, 0xCB64}, + {0xCB65, 0xCB65, 0xCB65}, {0xCB66, 0xCB66, 0xCB66}, + {0xCB67, 0xCB67, 0xCB67}, {0xCB68, 0xCB68, 0xCB68}, + {0xCB69, 0xCB69, 0xCB69}, {0xCB6A, 0xCB6A, 0xCB6A}, + {0xCB6B, 0xCB6B, 0xCB6B}, {0xCB6C, 0xCB6C, 0xCB6C}, + {0xCB6D, 0xCB6D, 0xCB6D}, {0xCB6E, 0xCB6E, 0xCB6E}, + {0xCB6F, 0xCB6F, 0xCB6F}, {0xCB70, 0xCB70, 0xCB70}, + {0xCB71, 0xCB71, 0xCB71}, {0xCB72, 0xCB72, 0xCB72}, + {0xCB73, 0xCB73, 0xCB73}, {0xCB74, 0xCB74, 0xCB74}, + {0xCB75, 0xCB75, 0xCB75}, {0xCB76, 0xCB76, 0xCB76}, + {0xCB77, 0xCB77, 0xCB77}, {0xCB78, 0xCB78, 0xCB78}, + {0xCB79, 0xCB79, 0xCB79}, {0xCB7A, 0xCB7A, 0xCB7A}, + {0xCB7B, 0xCB7B, 0xCB7B}, {0xCB7C, 0xCB7C, 0xCB7C}, + {0xCB7D, 0xCB7D, 0xCB7D}, {0xCB7E, 0xCB7E, 0xCB7E}, + {0xCB7F, 0xCB7F, 0xCB7F}, {0xCB80, 0xCB80, 0xCB80}, + {0xCB81, 0xCB81, 0xCB81}, {0xCB82, 0xCB82, 0xCB82}, + {0xCB83, 0xCB83, 0xCB83}, {0xCB84, 0xCB84, 0xCB84}, + {0xCB85, 0xCB85, 0xCB85}, {0xCB86, 0xCB86, 0xCB86}, + {0xCB87, 0xCB87, 0xCB87}, {0xCB88, 0xCB88, 0xCB88}, + {0xCB89, 0xCB89, 0xCB89}, {0xCB8A, 0xCB8A, 0xCB8A}, + {0xCB8B, 0xCB8B, 0xCB8B}, {0xCB8C, 0xCB8C, 0xCB8C}, + {0xCB8D, 0xCB8D, 0xCB8D}, {0xCB8E, 0xCB8E, 0xCB8E}, + {0xCB8F, 0xCB8F, 0xCB8F}, {0xCB90, 0xCB90, 0xCB90}, + {0xCB91, 0xCB91, 0xCB91}, {0xCB92, 0xCB92, 0xCB92}, + {0xCB93, 0xCB93, 0xCB93}, {0xCB94, 0xCB94, 0xCB94}, + {0xCB95, 0xCB95, 0xCB95}, {0xCB96, 0xCB96, 0xCB96}, + {0xCB97, 0xCB97, 0xCB97}, {0xCB98, 0xCB98, 0xCB98}, + {0xCB99, 0xCB99, 0xCB99}, {0xCB9A, 0xCB9A, 0xCB9A}, + {0xCB9B, 0xCB9B, 0xCB9B}, {0xCB9C, 0xCB9C, 0xCB9C}, + {0xCB9D, 0xCB9D, 0xCB9D}, {0xCB9E, 0xCB9E, 0xCB9E}, + {0xCB9F, 0xCB9F, 0xCB9F}, {0xCBA0, 0xCBA0, 0xCBA0}, + {0xCBA1, 0xCBA1, 0xCBA1}, {0xCBA2, 0xCBA2, 0xCBA2}, + {0xCBA3, 0xCBA3, 0xCBA3}, {0xCBA4, 0xCBA4, 0xCBA4}, + {0xCBA5, 0xCBA5, 0xCBA5}, {0xCBA6, 0xCBA6, 0xCBA6}, + {0xCBA7, 0xCBA7, 0xCBA7}, {0xCBA8, 0xCBA8, 0xCBA8}, + {0xCBA9, 0xCBA9, 0xCBA9}, {0xCBAA, 0xCBAA, 0xCBAA}, + {0xCBAB, 0xCBAB, 0xCBAB}, {0xCBAC, 0xCBAC, 0xCBAC}, + {0xCBAD, 0xCBAD, 0xCBAD}, {0xCBAE, 0xCBAE, 0xCBAE}, + {0xCBAF, 0xCBAF, 0xCBAF}, {0xCBB0, 0xCBB0, 0xCBB0}, + {0xCBB1, 0xCBB1, 0xCBB1}, {0xCBB2, 0xCBB2, 0xCBB2}, + {0xCBB3, 0xCBB3, 0xCBB3}, {0xCBB4, 0xCBB4, 0xCBB4}, + {0xCBB5, 0xCBB5, 0xCBB5}, {0xCBB6, 0xCBB6, 0xCBB6}, + {0xCBB7, 0xCBB7, 0xCBB7}, {0xCBB8, 0xCBB8, 0xCBB8}, + {0xCBB9, 0xCBB9, 0xCBB9}, {0xCBBA, 0xCBBA, 0xCBBA}, + {0xCBBB, 0xCBBB, 0xCBBB}, {0xCBBC, 0xCBBC, 0xCBBC}, + {0xCBBD, 0xCBBD, 0xCBBD}, {0xCBBE, 0xCBBE, 0xCBBE}, + {0xCBBF, 0xCBBF, 0xCBBF}, {0xCBC0, 0xCBC0, 0xCBC0}, + {0xCBC1, 0xCBC1, 0xCBC1}, {0xCBC2, 0xCBC2, 0xCBC2}, + {0xCBC3, 0xCBC3, 0xCBC3}, {0xCBC4, 0xCBC4, 0xCBC4}, + {0xCBC5, 0xCBC5, 0xCBC5}, {0xCBC6, 0xCBC6, 0xCBC6}, + {0xCBC7, 0xCBC7, 0xCBC7}, {0xCBC8, 0xCBC8, 0xCBC8}, + {0xCBC9, 0xCBC9, 0xCBC9}, {0xCBCA, 0xCBCA, 0xCBCA}, + {0xCBCB, 0xCBCB, 0xCBCB}, {0xCBCC, 0xCBCC, 0xCBCC}, + {0xCBCD, 0xCBCD, 0xCBCD}, {0xCBCE, 0xCBCE, 0xCBCE}, + {0xCBCF, 0xCBCF, 0xCBCF}, {0xCBD0, 0xCBD0, 0xCBD0}, + {0xCBD1, 0xCBD1, 0xCBD1}, {0xCBD2, 0xCBD2, 0xCBD2}, + {0xCBD3, 0xCBD3, 0xCBD3}, {0xCBD4, 0xCBD4, 0xCBD4}, + {0xCBD5, 0xCBD5, 0xCBD5}, {0xCBD6, 0xCBD6, 0xCBD6}, + {0xCBD7, 0xCBD7, 0xCBD7}, {0xCBD8, 0xCBD8, 0xCBD8}, + {0xCBD9, 0xCBD9, 0xCBD9}, {0xCBDA, 0xCBDA, 0xCBDA}, + {0xCBDB, 0xCBDB, 0xCBDB}, {0xCBDC, 0xCBDC, 0xCBDC}, + {0xCBDD, 0xCBDD, 0xCBDD}, {0xCBDE, 0xCBDE, 0xCBDE}, + {0xCBDF, 0xCBDF, 0xCBDF}, {0xCBE0, 0xCBE0, 0xCBE0}, + {0xCBE1, 0xCBE1, 0xCBE1}, {0xCBE2, 0xCBE2, 0xCBE2}, + {0xCBE3, 0xCBE3, 0xCBE3}, {0xCBE4, 0xCBE4, 0xCBE4}, + {0xCBE5, 0xCBE5, 0xCBE5}, {0xCBE6, 0xCBE6, 0xCBE6}, + {0xCBE7, 0xCBE7, 0xCBE7}, {0xCBE8, 0xCBE8, 0xCBE8}, + {0xCBE9, 0xCBE9, 0xCBE9}, {0xCBEA, 0xCBEA, 0xCBEA}, + {0xCBEB, 0xCBEB, 0xCBEB}, {0xCBEC, 0xCBEC, 0xCBEC}, + {0xCBED, 0xCBED, 0xCBED}, {0xCBEE, 0xCBEE, 0xCBEE}, + {0xCBEF, 0xCBEF, 0xCBEF}, {0xCBF0, 0xCBF0, 0xCBF0}, + {0xCBF1, 0xCBF1, 0xCBF1}, {0xCBF2, 0xCBF2, 0xCBF2}, + {0xCBF3, 0xCBF3, 0xCBF3}, {0xCBF4, 0xCBF4, 0xCBF4}, + {0xCBF5, 0xCBF5, 0xCBF5}, {0xCBF6, 0xCBF6, 0xCBF6}, + {0xCBF7, 0xCBF7, 0xCBF7}, {0xCBF8, 0xCBF8, 0xCBF8}, + {0xCBF9, 0xCBF9, 0xCBF9}, {0xCBFA, 0xCBFA, 0xCBFA}, + {0xCBFB, 0xCBFB, 0xCBFB}, {0xCBFC, 0xCBFC, 0xCBFC}, + {0xCBFD, 0xCBFD, 0xCBFD}, {0xCBFE, 0xCBFE, 0xCBFE}, + {0xCBFF, 0xCBFF, 0xCBFF}, {0xCC00, 0xCC00, 0xCC00}, + {0xCC01, 0xCC01, 0xCC01}, {0xCC02, 0xCC02, 0xCC02}, + {0xCC03, 0xCC03, 0xCC03}, {0xCC04, 0xCC04, 0xCC04}, + {0xCC05, 0xCC05, 0xCC05}, {0xCC06, 0xCC06, 0xCC06}, + {0xCC07, 0xCC07, 0xCC07}, {0xCC08, 0xCC08, 0xCC08}, + {0xCC09, 0xCC09, 0xCC09}, {0xCC0A, 0xCC0A, 0xCC0A}, + {0xCC0B, 0xCC0B, 0xCC0B}, {0xCC0C, 0xCC0C, 0xCC0C}, + {0xCC0D, 0xCC0D, 0xCC0D}, {0xCC0E, 0xCC0E, 0xCC0E}, + {0xCC0F, 0xCC0F, 0xCC0F}, {0xCC10, 0xCC10, 0xCC10}, + {0xCC11, 0xCC11, 0xCC11}, {0xCC12, 0xCC12, 0xCC12}, + {0xCC13, 0xCC13, 0xCC13}, {0xCC14, 0xCC14, 0xCC14}, + {0xCC15, 0xCC15, 0xCC15}, {0xCC16, 0xCC16, 0xCC16}, + {0xCC17, 0xCC17, 0xCC17}, {0xCC18, 0xCC18, 0xCC18}, + {0xCC19, 0xCC19, 0xCC19}, {0xCC1A, 0xCC1A, 0xCC1A}, + {0xCC1B, 0xCC1B, 0xCC1B}, {0xCC1C, 0xCC1C, 0xCC1C}, + {0xCC1D, 0xCC1D, 0xCC1D}, {0xCC1E, 0xCC1E, 0xCC1E}, + {0xCC1F, 0xCC1F, 0xCC1F}, {0xCC20, 0xCC20, 0xCC20}, + {0xCC21, 0xCC21, 0xCC21}, {0xCC22, 0xCC22, 0xCC22}, + {0xCC23, 0xCC23, 0xCC23}, {0xCC24, 0xCC24, 0xCC24}, + {0xCC25, 0xCC25, 0xCC25}, {0xCC26, 0xCC26, 0xCC26}, + {0xCC27, 0xCC27, 0xCC27}, {0xCC28, 0xCC28, 0xCC28}, + {0xCC29, 0xCC29, 0xCC29}, {0xCC2A, 0xCC2A, 0xCC2A}, + {0xCC2B, 0xCC2B, 0xCC2B}, {0xCC2C, 0xCC2C, 0xCC2C}, + {0xCC2D, 0xCC2D, 0xCC2D}, {0xCC2E, 0xCC2E, 0xCC2E}, + {0xCC2F, 0xCC2F, 0xCC2F}, {0xCC30, 0xCC30, 0xCC30}, + {0xCC31, 0xCC31, 0xCC31}, {0xCC32, 0xCC32, 0xCC32}, + {0xCC33, 0xCC33, 0xCC33}, {0xCC34, 0xCC34, 0xCC34}, + {0xCC35, 0xCC35, 0xCC35}, {0xCC36, 0xCC36, 0xCC36}, + {0xCC37, 0xCC37, 0xCC37}, {0xCC38, 0xCC38, 0xCC38}, + {0xCC39, 0xCC39, 0xCC39}, {0xCC3A, 0xCC3A, 0xCC3A}, + {0xCC3B, 0xCC3B, 0xCC3B}, {0xCC3C, 0xCC3C, 0xCC3C}, + {0xCC3D, 0xCC3D, 0xCC3D}, {0xCC3E, 0xCC3E, 0xCC3E}, + {0xCC3F, 0xCC3F, 0xCC3F}, {0xCC40, 0xCC40, 0xCC40}, + {0xCC41, 0xCC41, 0xCC41}, {0xCC42, 0xCC42, 0xCC42}, + {0xCC43, 0xCC43, 0xCC43}, {0xCC44, 0xCC44, 0xCC44}, + {0xCC45, 0xCC45, 0xCC45}, {0xCC46, 0xCC46, 0xCC46}, + {0xCC47, 0xCC47, 0xCC47}, {0xCC48, 0xCC48, 0xCC48}, + {0xCC49, 0xCC49, 0xCC49}, {0xCC4A, 0xCC4A, 0xCC4A}, + {0xCC4B, 0xCC4B, 0xCC4B}, {0xCC4C, 0xCC4C, 0xCC4C}, + {0xCC4D, 0xCC4D, 0xCC4D}, {0xCC4E, 0xCC4E, 0xCC4E}, + {0xCC4F, 0xCC4F, 0xCC4F}, {0xCC50, 0xCC50, 0xCC50}, + {0xCC51, 0xCC51, 0xCC51}, {0xCC52, 0xCC52, 0xCC52}, + {0xCC53, 0xCC53, 0xCC53}, {0xCC54, 0xCC54, 0xCC54}, + {0xCC55, 0xCC55, 0xCC55}, {0xCC56, 0xCC56, 0xCC56}, + {0xCC57, 0xCC57, 0xCC57}, {0xCC58, 0xCC58, 0xCC58}, + {0xCC59, 0xCC59, 0xCC59}, {0xCC5A, 0xCC5A, 0xCC5A}, + {0xCC5B, 0xCC5B, 0xCC5B}, {0xCC5C, 0xCC5C, 0xCC5C}, + {0xCC5D, 0xCC5D, 0xCC5D}, {0xCC5E, 0xCC5E, 0xCC5E}, + {0xCC5F, 0xCC5F, 0xCC5F}, {0xCC60, 0xCC60, 0xCC60}, + {0xCC61, 0xCC61, 0xCC61}, {0xCC62, 0xCC62, 0xCC62}, + {0xCC63, 0xCC63, 0xCC63}, {0xCC64, 0xCC64, 0xCC64}, + {0xCC65, 0xCC65, 0xCC65}, {0xCC66, 0xCC66, 0xCC66}, + {0xCC67, 0xCC67, 0xCC67}, {0xCC68, 0xCC68, 0xCC68}, + {0xCC69, 0xCC69, 0xCC69}, {0xCC6A, 0xCC6A, 0xCC6A}, + {0xCC6B, 0xCC6B, 0xCC6B}, {0xCC6C, 0xCC6C, 0xCC6C}, + {0xCC6D, 0xCC6D, 0xCC6D}, {0xCC6E, 0xCC6E, 0xCC6E}, + {0xCC6F, 0xCC6F, 0xCC6F}, {0xCC70, 0xCC70, 0xCC70}, + {0xCC71, 0xCC71, 0xCC71}, {0xCC72, 0xCC72, 0xCC72}, + {0xCC73, 0xCC73, 0xCC73}, {0xCC74, 0xCC74, 0xCC74}, + {0xCC75, 0xCC75, 0xCC75}, {0xCC76, 0xCC76, 0xCC76}, + {0xCC77, 0xCC77, 0xCC77}, {0xCC78, 0xCC78, 0xCC78}, + {0xCC79, 0xCC79, 0xCC79}, {0xCC7A, 0xCC7A, 0xCC7A}, + {0xCC7B, 0xCC7B, 0xCC7B}, {0xCC7C, 0xCC7C, 0xCC7C}, + {0xCC7D, 0xCC7D, 0xCC7D}, {0xCC7E, 0xCC7E, 0xCC7E}, + {0xCC7F, 0xCC7F, 0xCC7F}, {0xCC80, 0xCC80, 0xCC80}, + {0xCC81, 0xCC81, 0xCC81}, {0xCC82, 0xCC82, 0xCC82}, + {0xCC83, 0xCC83, 0xCC83}, {0xCC84, 0xCC84, 0xCC84}, + {0xCC85, 0xCC85, 0xCC85}, {0xCC86, 0xCC86, 0xCC86}, + {0xCC87, 0xCC87, 0xCC87}, {0xCC88, 0xCC88, 0xCC88}, + {0xCC89, 0xCC89, 0xCC89}, {0xCC8A, 0xCC8A, 0xCC8A}, + {0xCC8B, 0xCC8B, 0xCC8B}, {0xCC8C, 0xCC8C, 0xCC8C}, + {0xCC8D, 0xCC8D, 0xCC8D}, {0xCC8E, 0xCC8E, 0xCC8E}, + {0xCC8F, 0xCC8F, 0xCC8F}, {0xCC90, 0xCC90, 0xCC90}, + {0xCC91, 0xCC91, 0xCC91}, {0xCC92, 0xCC92, 0xCC92}, + {0xCC93, 0xCC93, 0xCC93}, {0xCC94, 0xCC94, 0xCC94}, + {0xCC95, 0xCC95, 0xCC95}, {0xCC96, 0xCC96, 0xCC96}, + {0xCC97, 0xCC97, 0xCC97}, {0xCC98, 0xCC98, 0xCC98}, + {0xCC99, 0xCC99, 0xCC99}, {0xCC9A, 0xCC9A, 0xCC9A}, + {0xCC9B, 0xCC9B, 0xCC9B}, {0xCC9C, 0xCC9C, 0xCC9C}, + {0xCC9D, 0xCC9D, 0xCC9D}, {0xCC9E, 0xCC9E, 0xCC9E}, + {0xCC9F, 0xCC9F, 0xCC9F}, {0xCCA0, 0xCCA0, 0xCCA0}, + {0xCCA1, 0xCCA1, 0xCCA1}, {0xCCA2, 0xCCA2, 0xCCA2}, + {0xCCA3, 0xCCA3, 0xCCA3}, {0xCCA4, 0xCCA4, 0xCCA4}, + {0xCCA5, 0xCCA5, 0xCCA5}, {0xCCA6, 0xCCA6, 0xCCA6}, + {0xCCA7, 0xCCA7, 0xCCA7}, {0xCCA8, 0xCCA8, 0xCCA8}, + {0xCCA9, 0xCCA9, 0xCCA9}, {0xCCAA, 0xCCAA, 0xCCAA}, + {0xCCAB, 0xCCAB, 0xCCAB}, {0xCCAC, 0xCCAC, 0xCCAC}, + {0xCCAD, 0xCCAD, 0xCCAD}, {0xCCAE, 0xCCAE, 0xCCAE}, + {0xCCAF, 0xCCAF, 0xCCAF}, {0xCCB0, 0xCCB0, 0xCCB0}, + {0xCCB1, 0xCCB1, 0xCCB1}, {0xCCB2, 0xCCB2, 0xCCB2}, + {0xCCB3, 0xCCB3, 0xCCB3}, {0xCCB4, 0xCCB4, 0xCCB4}, + {0xCCB5, 0xCCB5, 0xCCB5}, {0xCCB6, 0xCCB6, 0xCCB6}, + {0xCCB7, 0xCCB7, 0xCCB7}, {0xCCB8, 0xCCB8, 0xCCB8}, + {0xCCB9, 0xCCB9, 0xCCB9}, {0xCCBA, 0xCCBA, 0xCCBA}, + {0xCCBB, 0xCCBB, 0xCCBB}, {0xCCBC, 0xCCBC, 0xCCBC}, + {0xCCBD, 0xCCBD, 0xCCBD}, {0xCCBE, 0xCCBE, 0xCCBE}, + {0xCCBF, 0xCCBF, 0xCCBF}, {0xCCC0, 0xCCC0, 0xCCC0}, + {0xCCC1, 0xCCC1, 0xCCC1}, {0xCCC2, 0xCCC2, 0xCCC2}, + {0xCCC3, 0xCCC3, 0xCCC3}, {0xCCC4, 0xCCC4, 0xCCC4}, + {0xCCC5, 0xCCC5, 0xCCC5}, {0xCCC6, 0xCCC6, 0xCCC6}, + {0xCCC7, 0xCCC7, 0xCCC7}, {0xCCC8, 0xCCC8, 0xCCC8}, + {0xCCC9, 0xCCC9, 0xCCC9}, {0xCCCA, 0xCCCA, 0xCCCA}, + {0xCCCB, 0xCCCB, 0xCCCB}, {0xCCCC, 0xCCCC, 0xCCCC}, + {0xCCCD, 0xCCCD, 0xCCCD}, {0xCCCE, 0xCCCE, 0xCCCE}, + {0xCCCF, 0xCCCF, 0xCCCF}, {0xCCD0, 0xCCD0, 0xCCD0}, + {0xCCD1, 0xCCD1, 0xCCD1}, {0xCCD2, 0xCCD2, 0xCCD2}, + {0xCCD3, 0xCCD3, 0xCCD3}, {0xCCD4, 0xCCD4, 0xCCD4}, + {0xCCD5, 0xCCD5, 0xCCD5}, {0xCCD6, 0xCCD6, 0xCCD6}, + {0xCCD7, 0xCCD7, 0xCCD7}, {0xCCD8, 0xCCD8, 0xCCD8}, + {0xCCD9, 0xCCD9, 0xCCD9}, {0xCCDA, 0xCCDA, 0xCCDA}, + {0xCCDB, 0xCCDB, 0xCCDB}, {0xCCDC, 0xCCDC, 0xCCDC}, + {0xCCDD, 0xCCDD, 0xCCDD}, {0xCCDE, 0xCCDE, 0xCCDE}, + {0xCCDF, 0xCCDF, 0xCCDF}, {0xCCE0, 0xCCE0, 0xCCE0}, + {0xCCE1, 0xCCE1, 0xCCE1}, {0xCCE2, 0xCCE2, 0xCCE2}, + {0xCCE3, 0xCCE3, 0xCCE3}, {0xCCE4, 0xCCE4, 0xCCE4}, + {0xCCE5, 0xCCE5, 0xCCE5}, {0xCCE6, 0xCCE6, 0xCCE6}, + {0xCCE7, 0xCCE7, 0xCCE7}, {0xCCE8, 0xCCE8, 0xCCE8}, + {0xCCE9, 0xCCE9, 0xCCE9}, {0xCCEA, 0xCCEA, 0xCCEA}, + {0xCCEB, 0xCCEB, 0xCCEB}, {0xCCEC, 0xCCEC, 0xCCEC}, + {0xCCED, 0xCCED, 0xCCED}, {0xCCEE, 0xCCEE, 0xCCEE}, + {0xCCEF, 0xCCEF, 0xCCEF}, {0xCCF0, 0xCCF0, 0xCCF0}, + {0xCCF1, 0xCCF1, 0xCCF1}, {0xCCF2, 0xCCF2, 0xCCF2}, + {0xCCF3, 0xCCF3, 0xCCF3}, {0xCCF4, 0xCCF4, 0xCCF4}, + {0xCCF5, 0xCCF5, 0xCCF5}, {0xCCF6, 0xCCF6, 0xCCF6}, + {0xCCF7, 0xCCF7, 0xCCF7}, {0xCCF8, 0xCCF8, 0xCCF8}, + {0xCCF9, 0xCCF9, 0xCCF9}, {0xCCFA, 0xCCFA, 0xCCFA}, + {0xCCFB, 0xCCFB, 0xCCFB}, {0xCCFC, 0xCCFC, 0xCCFC}, + {0xCCFD, 0xCCFD, 0xCCFD}, {0xCCFE, 0xCCFE, 0xCCFE}, + {0xCCFF, 0xCCFF, 0xCCFF}, {0xCD00, 0xCD00, 0xCD00}, + {0xCD01, 0xCD01, 0xCD01}, {0xCD02, 0xCD02, 0xCD02}, + {0xCD03, 0xCD03, 0xCD03}, {0xCD04, 0xCD04, 0xCD04}, + {0xCD05, 0xCD05, 0xCD05}, {0xCD06, 0xCD06, 0xCD06}, + {0xCD07, 0xCD07, 0xCD07}, {0xCD08, 0xCD08, 0xCD08}, + {0xCD09, 0xCD09, 0xCD09}, {0xCD0A, 0xCD0A, 0xCD0A}, + {0xCD0B, 0xCD0B, 0xCD0B}, {0xCD0C, 0xCD0C, 0xCD0C}, + {0xCD0D, 0xCD0D, 0xCD0D}, {0xCD0E, 0xCD0E, 0xCD0E}, + {0xCD0F, 0xCD0F, 0xCD0F}, {0xCD10, 0xCD10, 0xCD10}, + {0xCD11, 0xCD11, 0xCD11}, {0xCD12, 0xCD12, 0xCD12}, + {0xCD13, 0xCD13, 0xCD13}, {0xCD14, 0xCD14, 0xCD14}, + {0xCD15, 0xCD15, 0xCD15}, {0xCD16, 0xCD16, 0xCD16}, + {0xCD17, 0xCD17, 0xCD17}, {0xCD18, 0xCD18, 0xCD18}, + {0xCD19, 0xCD19, 0xCD19}, {0xCD1A, 0xCD1A, 0xCD1A}, + {0xCD1B, 0xCD1B, 0xCD1B}, {0xCD1C, 0xCD1C, 0xCD1C}, + {0xCD1D, 0xCD1D, 0xCD1D}, {0xCD1E, 0xCD1E, 0xCD1E}, + {0xCD1F, 0xCD1F, 0xCD1F}, {0xCD20, 0xCD20, 0xCD20}, + {0xCD21, 0xCD21, 0xCD21}, {0xCD22, 0xCD22, 0xCD22}, + {0xCD23, 0xCD23, 0xCD23}, {0xCD24, 0xCD24, 0xCD24}, + {0xCD25, 0xCD25, 0xCD25}, {0xCD26, 0xCD26, 0xCD26}, + {0xCD27, 0xCD27, 0xCD27}, {0xCD28, 0xCD28, 0xCD28}, + {0xCD29, 0xCD29, 0xCD29}, {0xCD2A, 0xCD2A, 0xCD2A}, + {0xCD2B, 0xCD2B, 0xCD2B}, {0xCD2C, 0xCD2C, 0xCD2C}, + {0xCD2D, 0xCD2D, 0xCD2D}, {0xCD2E, 0xCD2E, 0xCD2E}, + {0xCD2F, 0xCD2F, 0xCD2F}, {0xCD30, 0xCD30, 0xCD30}, + {0xCD31, 0xCD31, 0xCD31}, {0xCD32, 0xCD32, 0xCD32}, + {0xCD33, 0xCD33, 0xCD33}, {0xCD34, 0xCD34, 0xCD34}, + {0xCD35, 0xCD35, 0xCD35}, {0xCD36, 0xCD36, 0xCD36}, + {0xCD37, 0xCD37, 0xCD37}, {0xCD38, 0xCD38, 0xCD38}, + {0xCD39, 0xCD39, 0xCD39}, {0xCD3A, 0xCD3A, 0xCD3A}, + {0xCD3B, 0xCD3B, 0xCD3B}, {0xCD3C, 0xCD3C, 0xCD3C}, + {0xCD3D, 0xCD3D, 0xCD3D}, {0xCD3E, 0xCD3E, 0xCD3E}, + {0xCD3F, 0xCD3F, 0xCD3F}, {0xCD40, 0xCD40, 0xCD40}, + {0xCD41, 0xCD41, 0xCD41}, {0xCD42, 0xCD42, 0xCD42}, + {0xCD43, 0xCD43, 0xCD43}, {0xCD44, 0xCD44, 0xCD44}, + {0xCD45, 0xCD45, 0xCD45}, {0xCD46, 0xCD46, 0xCD46}, + {0xCD47, 0xCD47, 0xCD47}, {0xCD48, 0xCD48, 0xCD48}, + {0xCD49, 0xCD49, 0xCD49}, {0xCD4A, 0xCD4A, 0xCD4A}, + {0xCD4B, 0xCD4B, 0xCD4B}, {0xCD4C, 0xCD4C, 0xCD4C}, + {0xCD4D, 0xCD4D, 0xCD4D}, {0xCD4E, 0xCD4E, 0xCD4E}, + {0xCD4F, 0xCD4F, 0xCD4F}, {0xCD50, 0xCD50, 0xCD50}, + {0xCD51, 0xCD51, 0xCD51}, {0xCD52, 0xCD52, 0xCD52}, + {0xCD53, 0xCD53, 0xCD53}, {0xCD54, 0xCD54, 0xCD54}, + {0xCD55, 0xCD55, 0xCD55}, {0xCD56, 0xCD56, 0xCD56}, + {0xCD57, 0xCD57, 0xCD57}, {0xCD58, 0xCD58, 0xCD58}, + {0xCD59, 0xCD59, 0xCD59}, {0xCD5A, 0xCD5A, 0xCD5A}, + {0xCD5B, 0xCD5B, 0xCD5B}, {0xCD5C, 0xCD5C, 0xCD5C}, + {0xCD5D, 0xCD5D, 0xCD5D}, {0xCD5E, 0xCD5E, 0xCD5E}, + {0xCD5F, 0xCD5F, 0xCD5F}, {0xCD60, 0xCD60, 0xCD60}, + {0xCD61, 0xCD61, 0xCD61}, {0xCD62, 0xCD62, 0xCD62}, + {0xCD63, 0xCD63, 0xCD63}, {0xCD64, 0xCD64, 0xCD64}, + {0xCD65, 0xCD65, 0xCD65}, {0xCD66, 0xCD66, 0xCD66}, + {0xCD67, 0xCD67, 0xCD67}, {0xCD68, 0xCD68, 0xCD68}, + {0xCD69, 0xCD69, 0xCD69}, {0xCD6A, 0xCD6A, 0xCD6A}, + {0xCD6B, 0xCD6B, 0xCD6B}, {0xCD6C, 0xCD6C, 0xCD6C}, + {0xCD6D, 0xCD6D, 0xCD6D}, {0xCD6E, 0xCD6E, 0xCD6E}, + {0xCD6F, 0xCD6F, 0xCD6F}, {0xCD70, 0xCD70, 0xCD70}, + {0xCD71, 0xCD71, 0xCD71}, {0xCD72, 0xCD72, 0xCD72}, + {0xCD73, 0xCD73, 0xCD73}, {0xCD74, 0xCD74, 0xCD74}, + {0xCD75, 0xCD75, 0xCD75}, {0xCD76, 0xCD76, 0xCD76}, + {0xCD77, 0xCD77, 0xCD77}, {0xCD78, 0xCD78, 0xCD78}, + {0xCD79, 0xCD79, 0xCD79}, {0xCD7A, 0xCD7A, 0xCD7A}, + {0xCD7B, 0xCD7B, 0xCD7B}, {0xCD7C, 0xCD7C, 0xCD7C}, + {0xCD7D, 0xCD7D, 0xCD7D}, {0xCD7E, 0xCD7E, 0xCD7E}, + {0xCD7F, 0xCD7F, 0xCD7F}, {0xCD80, 0xCD80, 0xCD80}, + {0xCD81, 0xCD81, 0xCD81}, {0xCD82, 0xCD82, 0xCD82}, + {0xCD83, 0xCD83, 0xCD83}, {0xCD84, 0xCD84, 0xCD84}, + {0xCD85, 0xCD85, 0xCD85}, {0xCD86, 0xCD86, 0xCD86}, + {0xCD87, 0xCD87, 0xCD87}, {0xCD88, 0xCD88, 0xCD88}, + {0xCD89, 0xCD89, 0xCD89}, {0xCD8A, 0xCD8A, 0xCD8A}, + {0xCD8B, 0xCD8B, 0xCD8B}, {0xCD8C, 0xCD8C, 0xCD8C}, + {0xCD8D, 0xCD8D, 0xCD8D}, {0xCD8E, 0xCD8E, 0xCD8E}, + {0xCD8F, 0xCD8F, 0xCD8F}, {0xCD90, 0xCD90, 0xCD90}, + {0xCD91, 0xCD91, 0xCD91}, {0xCD92, 0xCD92, 0xCD92}, + {0xCD93, 0xCD93, 0xCD93}, {0xCD94, 0xCD94, 0xCD94}, + {0xCD95, 0xCD95, 0xCD95}, {0xCD96, 0xCD96, 0xCD96}, + {0xCD97, 0xCD97, 0xCD97}, {0xCD98, 0xCD98, 0xCD98}, + {0xCD99, 0xCD99, 0xCD99}, {0xCD9A, 0xCD9A, 0xCD9A}, + {0xCD9B, 0xCD9B, 0xCD9B}, {0xCD9C, 0xCD9C, 0xCD9C}, + {0xCD9D, 0xCD9D, 0xCD9D}, {0xCD9E, 0xCD9E, 0xCD9E}, + {0xCD9F, 0xCD9F, 0xCD9F}, {0xCDA0, 0xCDA0, 0xCDA0}, + {0xCDA1, 0xCDA1, 0xCDA1}, {0xCDA2, 0xCDA2, 0xCDA2}, + {0xCDA3, 0xCDA3, 0xCDA3}, {0xCDA4, 0xCDA4, 0xCDA4}, + {0xCDA5, 0xCDA5, 0xCDA5}, {0xCDA6, 0xCDA6, 0xCDA6}, + {0xCDA7, 0xCDA7, 0xCDA7}, {0xCDA8, 0xCDA8, 0xCDA8}, + {0xCDA9, 0xCDA9, 0xCDA9}, {0xCDAA, 0xCDAA, 0xCDAA}, + {0xCDAB, 0xCDAB, 0xCDAB}, {0xCDAC, 0xCDAC, 0xCDAC}, + {0xCDAD, 0xCDAD, 0xCDAD}, {0xCDAE, 0xCDAE, 0xCDAE}, + {0xCDAF, 0xCDAF, 0xCDAF}, {0xCDB0, 0xCDB0, 0xCDB0}, + {0xCDB1, 0xCDB1, 0xCDB1}, {0xCDB2, 0xCDB2, 0xCDB2}, + {0xCDB3, 0xCDB3, 0xCDB3}, {0xCDB4, 0xCDB4, 0xCDB4}, + {0xCDB5, 0xCDB5, 0xCDB5}, {0xCDB6, 0xCDB6, 0xCDB6}, + {0xCDB7, 0xCDB7, 0xCDB7}, {0xCDB8, 0xCDB8, 0xCDB8}, + {0xCDB9, 0xCDB9, 0xCDB9}, {0xCDBA, 0xCDBA, 0xCDBA}, + {0xCDBB, 0xCDBB, 0xCDBB}, {0xCDBC, 0xCDBC, 0xCDBC}, + {0xCDBD, 0xCDBD, 0xCDBD}, {0xCDBE, 0xCDBE, 0xCDBE}, + {0xCDBF, 0xCDBF, 0xCDBF}, {0xCDC0, 0xCDC0, 0xCDC0}, + {0xCDC1, 0xCDC1, 0xCDC1}, {0xCDC2, 0xCDC2, 0xCDC2}, + {0xCDC3, 0xCDC3, 0xCDC3}, {0xCDC4, 0xCDC4, 0xCDC4}, + {0xCDC5, 0xCDC5, 0xCDC5}, {0xCDC6, 0xCDC6, 0xCDC6}, + {0xCDC7, 0xCDC7, 0xCDC7}, {0xCDC8, 0xCDC8, 0xCDC8}, + {0xCDC9, 0xCDC9, 0xCDC9}, {0xCDCA, 0xCDCA, 0xCDCA}, + {0xCDCB, 0xCDCB, 0xCDCB}, {0xCDCC, 0xCDCC, 0xCDCC}, + {0xCDCD, 0xCDCD, 0xCDCD}, {0xCDCE, 0xCDCE, 0xCDCE}, + {0xCDCF, 0xCDCF, 0xCDCF}, {0xCDD0, 0xCDD0, 0xCDD0}, + {0xCDD1, 0xCDD1, 0xCDD1}, {0xCDD2, 0xCDD2, 0xCDD2}, + {0xCDD3, 0xCDD3, 0xCDD3}, {0xCDD4, 0xCDD4, 0xCDD4}, + {0xCDD5, 0xCDD5, 0xCDD5}, {0xCDD6, 0xCDD6, 0xCDD6}, + {0xCDD7, 0xCDD7, 0xCDD7}, {0xCDD8, 0xCDD8, 0xCDD8}, + {0xCDD9, 0xCDD9, 0xCDD9}, {0xCDDA, 0xCDDA, 0xCDDA}, + {0xCDDB, 0xCDDB, 0xCDDB}, {0xCDDC, 0xCDDC, 0xCDDC}, + {0xCDDD, 0xCDDD, 0xCDDD}, {0xCDDE, 0xCDDE, 0xCDDE}, + {0xCDDF, 0xCDDF, 0xCDDF}, {0xCDE0, 0xCDE0, 0xCDE0}, + {0xCDE1, 0xCDE1, 0xCDE1}, {0xCDE2, 0xCDE2, 0xCDE2}, + {0xCDE3, 0xCDE3, 0xCDE3}, {0xCDE4, 0xCDE4, 0xCDE4}, + {0xCDE5, 0xCDE5, 0xCDE5}, {0xCDE6, 0xCDE6, 0xCDE6}, + {0xCDE7, 0xCDE7, 0xCDE7}, {0xCDE8, 0xCDE8, 0xCDE8}, + {0xCDE9, 0xCDE9, 0xCDE9}, {0xCDEA, 0xCDEA, 0xCDEA}, + {0xCDEB, 0xCDEB, 0xCDEB}, {0xCDEC, 0xCDEC, 0xCDEC}, + {0xCDED, 0xCDED, 0xCDED}, {0xCDEE, 0xCDEE, 0xCDEE}, + {0xCDEF, 0xCDEF, 0xCDEF}, {0xCDF0, 0xCDF0, 0xCDF0}, + {0xCDF1, 0xCDF1, 0xCDF1}, {0xCDF2, 0xCDF2, 0xCDF2}, + {0xCDF3, 0xCDF3, 0xCDF3}, {0xCDF4, 0xCDF4, 0xCDF4}, + {0xCDF5, 0xCDF5, 0xCDF5}, {0xCDF6, 0xCDF6, 0xCDF6}, + {0xCDF7, 0xCDF7, 0xCDF7}, {0xCDF8, 0xCDF8, 0xCDF8}, + {0xCDF9, 0xCDF9, 0xCDF9}, {0xCDFA, 0xCDFA, 0xCDFA}, + {0xCDFB, 0xCDFB, 0xCDFB}, {0xCDFC, 0xCDFC, 0xCDFC}, + {0xCDFD, 0xCDFD, 0xCDFD}, {0xCDFE, 0xCDFE, 0xCDFE}, + {0xCDFF, 0xCDFF, 0xCDFF}, {0xCE00, 0xCE00, 0xCE00}, + {0xCE01, 0xCE01, 0xCE01}, {0xCE02, 0xCE02, 0xCE02}, + {0xCE03, 0xCE03, 0xCE03}, {0xCE04, 0xCE04, 0xCE04}, + {0xCE05, 0xCE05, 0xCE05}, {0xCE06, 0xCE06, 0xCE06}, + {0xCE07, 0xCE07, 0xCE07}, {0xCE08, 0xCE08, 0xCE08}, + {0xCE09, 0xCE09, 0xCE09}, {0xCE0A, 0xCE0A, 0xCE0A}, + {0xCE0B, 0xCE0B, 0xCE0B}, {0xCE0C, 0xCE0C, 0xCE0C}, + {0xCE0D, 0xCE0D, 0xCE0D}, {0xCE0E, 0xCE0E, 0xCE0E}, + {0xCE0F, 0xCE0F, 0xCE0F}, {0xCE10, 0xCE10, 0xCE10}, + {0xCE11, 0xCE11, 0xCE11}, {0xCE12, 0xCE12, 0xCE12}, + {0xCE13, 0xCE13, 0xCE13}, {0xCE14, 0xCE14, 0xCE14}, + {0xCE15, 0xCE15, 0xCE15}, {0xCE16, 0xCE16, 0xCE16}, + {0xCE17, 0xCE17, 0xCE17}, {0xCE18, 0xCE18, 0xCE18}, + {0xCE19, 0xCE19, 0xCE19}, {0xCE1A, 0xCE1A, 0xCE1A}, + {0xCE1B, 0xCE1B, 0xCE1B}, {0xCE1C, 0xCE1C, 0xCE1C}, + {0xCE1D, 0xCE1D, 0xCE1D}, {0xCE1E, 0xCE1E, 0xCE1E}, + {0xCE1F, 0xCE1F, 0xCE1F}, {0xCE20, 0xCE20, 0xCE20}, + {0xCE21, 0xCE21, 0xCE21}, {0xCE22, 0xCE22, 0xCE22}, + {0xCE23, 0xCE23, 0xCE23}, {0xCE24, 0xCE24, 0xCE24}, + {0xCE25, 0xCE25, 0xCE25}, {0xCE26, 0xCE26, 0xCE26}, + {0xCE27, 0xCE27, 0xCE27}, {0xCE28, 0xCE28, 0xCE28}, + {0xCE29, 0xCE29, 0xCE29}, {0xCE2A, 0xCE2A, 0xCE2A}, + {0xCE2B, 0xCE2B, 0xCE2B}, {0xCE2C, 0xCE2C, 0xCE2C}, + {0xCE2D, 0xCE2D, 0xCE2D}, {0xCE2E, 0xCE2E, 0xCE2E}, + {0xCE2F, 0xCE2F, 0xCE2F}, {0xCE30, 0xCE30, 0xCE30}, + {0xCE31, 0xCE31, 0xCE31}, {0xCE32, 0xCE32, 0xCE32}, + {0xCE33, 0xCE33, 0xCE33}, {0xCE34, 0xCE34, 0xCE34}, + {0xCE35, 0xCE35, 0xCE35}, {0xCE36, 0xCE36, 0xCE36}, + {0xCE37, 0xCE37, 0xCE37}, {0xCE38, 0xCE38, 0xCE38}, + {0xCE39, 0xCE39, 0xCE39}, {0xCE3A, 0xCE3A, 0xCE3A}, + {0xCE3B, 0xCE3B, 0xCE3B}, {0xCE3C, 0xCE3C, 0xCE3C}, + {0xCE3D, 0xCE3D, 0xCE3D}, {0xCE3E, 0xCE3E, 0xCE3E}, + {0xCE3F, 0xCE3F, 0xCE3F}, {0xCE40, 0xCE40, 0xCE40}, + {0xCE41, 0xCE41, 0xCE41}, {0xCE42, 0xCE42, 0xCE42}, + {0xCE43, 0xCE43, 0xCE43}, {0xCE44, 0xCE44, 0xCE44}, + {0xCE45, 0xCE45, 0xCE45}, {0xCE46, 0xCE46, 0xCE46}, + {0xCE47, 0xCE47, 0xCE47}, {0xCE48, 0xCE48, 0xCE48}, + {0xCE49, 0xCE49, 0xCE49}, {0xCE4A, 0xCE4A, 0xCE4A}, + {0xCE4B, 0xCE4B, 0xCE4B}, {0xCE4C, 0xCE4C, 0xCE4C}, + {0xCE4D, 0xCE4D, 0xCE4D}, {0xCE4E, 0xCE4E, 0xCE4E}, + {0xCE4F, 0xCE4F, 0xCE4F}, {0xCE50, 0xCE50, 0xCE50}, + {0xCE51, 0xCE51, 0xCE51}, {0xCE52, 0xCE52, 0xCE52}, + {0xCE53, 0xCE53, 0xCE53}, {0xCE54, 0xCE54, 0xCE54}, + {0xCE55, 0xCE55, 0xCE55}, {0xCE56, 0xCE56, 0xCE56}, + {0xCE57, 0xCE57, 0xCE57}, {0xCE58, 0xCE58, 0xCE58}, + {0xCE59, 0xCE59, 0xCE59}, {0xCE5A, 0xCE5A, 0xCE5A}, + {0xCE5B, 0xCE5B, 0xCE5B}, {0xCE5C, 0xCE5C, 0xCE5C}, + {0xCE5D, 0xCE5D, 0xCE5D}, {0xCE5E, 0xCE5E, 0xCE5E}, + {0xCE5F, 0xCE5F, 0xCE5F}, {0xCE60, 0xCE60, 0xCE60}, + {0xCE61, 0xCE61, 0xCE61}, {0xCE62, 0xCE62, 0xCE62}, + {0xCE63, 0xCE63, 0xCE63}, {0xCE64, 0xCE64, 0xCE64}, + {0xCE65, 0xCE65, 0xCE65}, {0xCE66, 0xCE66, 0xCE66}, + {0xCE67, 0xCE67, 0xCE67}, {0xCE68, 0xCE68, 0xCE68}, + {0xCE69, 0xCE69, 0xCE69}, {0xCE6A, 0xCE6A, 0xCE6A}, + {0xCE6B, 0xCE6B, 0xCE6B}, {0xCE6C, 0xCE6C, 0xCE6C}, + {0xCE6D, 0xCE6D, 0xCE6D}, {0xCE6E, 0xCE6E, 0xCE6E}, + {0xCE6F, 0xCE6F, 0xCE6F}, {0xCE70, 0xCE70, 0xCE70}, + {0xCE71, 0xCE71, 0xCE71}, {0xCE72, 0xCE72, 0xCE72}, + {0xCE73, 0xCE73, 0xCE73}, {0xCE74, 0xCE74, 0xCE74}, + {0xCE75, 0xCE75, 0xCE75}, {0xCE76, 0xCE76, 0xCE76}, + {0xCE77, 0xCE77, 0xCE77}, {0xCE78, 0xCE78, 0xCE78}, + {0xCE79, 0xCE79, 0xCE79}, {0xCE7A, 0xCE7A, 0xCE7A}, + {0xCE7B, 0xCE7B, 0xCE7B}, {0xCE7C, 0xCE7C, 0xCE7C}, + {0xCE7D, 0xCE7D, 0xCE7D}, {0xCE7E, 0xCE7E, 0xCE7E}, + {0xCE7F, 0xCE7F, 0xCE7F}, {0xCE80, 0xCE80, 0xCE80}, + {0xCE81, 0xCE81, 0xCE81}, {0xCE82, 0xCE82, 0xCE82}, + {0xCE83, 0xCE83, 0xCE83}, {0xCE84, 0xCE84, 0xCE84}, + {0xCE85, 0xCE85, 0xCE85}, {0xCE86, 0xCE86, 0xCE86}, + {0xCE87, 0xCE87, 0xCE87}, {0xCE88, 0xCE88, 0xCE88}, + {0xCE89, 0xCE89, 0xCE89}, {0xCE8A, 0xCE8A, 0xCE8A}, + {0xCE8B, 0xCE8B, 0xCE8B}, {0xCE8C, 0xCE8C, 0xCE8C}, + {0xCE8D, 0xCE8D, 0xCE8D}, {0xCE8E, 0xCE8E, 0xCE8E}, + {0xCE8F, 0xCE8F, 0xCE8F}, {0xCE90, 0xCE90, 0xCE90}, + {0xCE91, 0xCE91, 0xCE91}, {0xCE92, 0xCE92, 0xCE92}, + {0xCE93, 0xCE93, 0xCE93}, {0xCE94, 0xCE94, 0xCE94}, + {0xCE95, 0xCE95, 0xCE95}, {0xCE96, 0xCE96, 0xCE96}, + {0xCE97, 0xCE97, 0xCE97}, {0xCE98, 0xCE98, 0xCE98}, + {0xCE99, 0xCE99, 0xCE99}, {0xCE9A, 0xCE9A, 0xCE9A}, + {0xCE9B, 0xCE9B, 0xCE9B}, {0xCE9C, 0xCE9C, 0xCE9C}, + {0xCE9D, 0xCE9D, 0xCE9D}, {0xCE9E, 0xCE9E, 0xCE9E}, + {0xCE9F, 0xCE9F, 0xCE9F}, {0xCEA0, 0xCEA0, 0xCEA0}, + {0xCEA1, 0xCEA1, 0xCEA1}, {0xCEA2, 0xCEA2, 0xCEA2}, + {0xCEA3, 0xCEA3, 0xCEA3}, {0xCEA4, 0xCEA4, 0xCEA4}, + {0xCEA5, 0xCEA5, 0xCEA5}, {0xCEA6, 0xCEA6, 0xCEA6}, + {0xCEA7, 0xCEA7, 0xCEA7}, {0xCEA8, 0xCEA8, 0xCEA8}, + {0xCEA9, 0xCEA9, 0xCEA9}, {0xCEAA, 0xCEAA, 0xCEAA}, + {0xCEAB, 0xCEAB, 0xCEAB}, {0xCEAC, 0xCEAC, 0xCEAC}, + {0xCEAD, 0xCEAD, 0xCEAD}, {0xCEAE, 0xCEAE, 0xCEAE}, + {0xCEAF, 0xCEAF, 0xCEAF}, {0xCEB0, 0xCEB0, 0xCEB0}, + {0xCEB1, 0xCEB1, 0xCEB1}, {0xCEB2, 0xCEB2, 0xCEB2}, + {0xCEB3, 0xCEB3, 0xCEB3}, {0xCEB4, 0xCEB4, 0xCEB4}, + {0xCEB5, 0xCEB5, 0xCEB5}, {0xCEB6, 0xCEB6, 0xCEB6}, + {0xCEB7, 0xCEB7, 0xCEB7}, {0xCEB8, 0xCEB8, 0xCEB8}, + {0xCEB9, 0xCEB9, 0xCEB9}, {0xCEBA, 0xCEBA, 0xCEBA}, + {0xCEBB, 0xCEBB, 0xCEBB}, {0xCEBC, 0xCEBC, 0xCEBC}, + {0xCEBD, 0xCEBD, 0xCEBD}, {0xCEBE, 0xCEBE, 0xCEBE}, + {0xCEBF, 0xCEBF, 0xCEBF}, {0xCEC0, 0xCEC0, 0xCEC0}, + {0xCEC1, 0xCEC1, 0xCEC1}, {0xCEC2, 0xCEC2, 0xCEC2}, + {0xCEC3, 0xCEC3, 0xCEC3}, {0xCEC4, 0xCEC4, 0xCEC4}, + {0xCEC5, 0xCEC5, 0xCEC5}, {0xCEC6, 0xCEC6, 0xCEC6}, + {0xCEC7, 0xCEC7, 0xCEC7}, {0xCEC8, 0xCEC8, 0xCEC8}, + {0xCEC9, 0xCEC9, 0xCEC9}, {0xCECA, 0xCECA, 0xCECA}, + {0xCECB, 0xCECB, 0xCECB}, {0xCECC, 0xCECC, 0xCECC}, + {0xCECD, 0xCECD, 0xCECD}, {0xCECE, 0xCECE, 0xCECE}, + {0xCECF, 0xCECF, 0xCECF}, {0xCED0, 0xCED0, 0xCED0}, + {0xCED1, 0xCED1, 0xCED1}, {0xCED2, 0xCED2, 0xCED2}, + {0xCED3, 0xCED3, 0xCED3}, {0xCED4, 0xCED4, 0xCED4}, + {0xCED5, 0xCED5, 0xCED5}, {0xCED6, 0xCED6, 0xCED6}, + {0xCED7, 0xCED7, 0xCED7}, {0xCED8, 0xCED8, 0xCED8}, + {0xCED9, 0xCED9, 0xCED9}, {0xCEDA, 0xCEDA, 0xCEDA}, + {0xCEDB, 0xCEDB, 0xCEDB}, {0xCEDC, 0xCEDC, 0xCEDC}, + {0xCEDD, 0xCEDD, 0xCEDD}, {0xCEDE, 0xCEDE, 0xCEDE}, + {0xCEDF, 0xCEDF, 0xCEDF}, {0xCEE0, 0xCEE0, 0xCEE0}, + {0xCEE1, 0xCEE1, 0xCEE1}, {0xCEE2, 0xCEE2, 0xCEE2}, + {0xCEE3, 0xCEE3, 0xCEE3}, {0xCEE4, 0xCEE4, 0xCEE4}, + {0xCEE5, 0xCEE5, 0xCEE5}, {0xCEE6, 0xCEE6, 0xCEE6}, + {0xCEE7, 0xCEE7, 0xCEE7}, {0xCEE8, 0xCEE8, 0xCEE8}, + {0xCEE9, 0xCEE9, 0xCEE9}, {0xCEEA, 0xCEEA, 0xCEEA}, + {0xCEEB, 0xCEEB, 0xCEEB}, {0xCEEC, 0xCEEC, 0xCEEC}, + {0xCEED, 0xCEED, 0xCEED}, {0xCEEE, 0xCEEE, 0xCEEE}, + {0xCEEF, 0xCEEF, 0xCEEF}, {0xCEF0, 0xCEF0, 0xCEF0}, + {0xCEF1, 0xCEF1, 0xCEF1}, {0xCEF2, 0xCEF2, 0xCEF2}, + {0xCEF3, 0xCEF3, 0xCEF3}, {0xCEF4, 0xCEF4, 0xCEF4}, + {0xCEF5, 0xCEF5, 0xCEF5}, {0xCEF6, 0xCEF6, 0xCEF6}, + {0xCEF7, 0xCEF7, 0xCEF7}, {0xCEF8, 0xCEF8, 0xCEF8}, + {0xCEF9, 0xCEF9, 0xCEF9}, {0xCEFA, 0xCEFA, 0xCEFA}, + {0xCEFB, 0xCEFB, 0xCEFB}, {0xCEFC, 0xCEFC, 0xCEFC}, + {0xCEFD, 0xCEFD, 0xCEFD}, {0xCEFE, 0xCEFE, 0xCEFE}, + {0xCEFF, 0xCEFF, 0xCEFF}, {0xCF00, 0xCF00, 0xCF00}, + {0xCF01, 0xCF01, 0xCF01}, {0xCF02, 0xCF02, 0xCF02}, + {0xCF03, 0xCF03, 0xCF03}, {0xCF04, 0xCF04, 0xCF04}, + {0xCF05, 0xCF05, 0xCF05}, {0xCF06, 0xCF06, 0xCF06}, + {0xCF07, 0xCF07, 0xCF07}, {0xCF08, 0xCF08, 0xCF08}, + {0xCF09, 0xCF09, 0xCF09}, {0xCF0A, 0xCF0A, 0xCF0A}, + {0xCF0B, 0xCF0B, 0xCF0B}, {0xCF0C, 0xCF0C, 0xCF0C}, + {0xCF0D, 0xCF0D, 0xCF0D}, {0xCF0E, 0xCF0E, 0xCF0E}, + {0xCF0F, 0xCF0F, 0xCF0F}, {0xCF10, 0xCF10, 0xCF10}, + {0xCF11, 0xCF11, 0xCF11}, {0xCF12, 0xCF12, 0xCF12}, + {0xCF13, 0xCF13, 0xCF13}, {0xCF14, 0xCF14, 0xCF14}, + {0xCF15, 0xCF15, 0xCF15}, {0xCF16, 0xCF16, 0xCF16}, + {0xCF17, 0xCF17, 0xCF17}, {0xCF18, 0xCF18, 0xCF18}, + {0xCF19, 0xCF19, 0xCF19}, {0xCF1A, 0xCF1A, 0xCF1A}, + {0xCF1B, 0xCF1B, 0xCF1B}, {0xCF1C, 0xCF1C, 0xCF1C}, + {0xCF1D, 0xCF1D, 0xCF1D}, {0xCF1E, 0xCF1E, 0xCF1E}, + {0xCF1F, 0xCF1F, 0xCF1F}, {0xCF20, 0xCF20, 0xCF20}, + {0xCF21, 0xCF21, 0xCF21}, {0xCF22, 0xCF22, 0xCF22}, + {0xCF23, 0xCF23, 0xCF23}, {0xCF24, 0xCF24, 0xCF24}, + {0xCF25, 0xCF25, 0xCF25}, {0xCF26, 0xCF26, 0xCF26}, + {0xCF27, 0xCF27, 0xCF27}, {0xCF28, 0xCF28, 0xCF28}, + {0xCF29, 0xCF29, 0xCF29}, {0xCF2A, 0xCF2A, 0xCF2A}, + {0xCF2B, 0xCF2B, 0xCF2B}, {0xCF2C, 0xCF2C, 0xCF2C}, + {0xCF2D, 0xCF2D, 0xCF2D}, {0xCF2E, 0xCF2E, 0xCF2E}, + {0xCF2F, 0xCF2F, 0xCF2F}, {0xCF30, 0xCF30, 0xCF30}, + {0xCF31, 0xCF31, 0xCF31}, {0xCF32, 0xCF32, 0xCF32}, + {0xCF33, 0xCF33, 0xCF33}, {0xCF34, 0xCF34, 0xCF34}, + {0xCF35, 0xCF35, 0xCF35}, {0xCF36, 0xCF36, 0xCF36}, + {0xCF37, 0xCF37, 0xCF37}, {0xCF38, 0xCF38, 0xCF38}, + {0xCF39, 0xCF39, 0xCF39}, {0xCF3A, 0xCF3A, 0xCF3A}, + {0xCF3B, 0xCF3B, 0xCF3B}, {0xCF3C, 0xCF3C, 0xCF3C}, + {0xCF3D, 0xCF3D, 0xCF3D}, {0xCF3E, 0xCF3E, 0xCF3E}, + {0xCF3F, 0xCF3F, 0xCF3F}, {0xCF40, 0xCF40, 0xCF40}, + {0xCF41, 0xCF41, 0xCF41}, {0xCF42, 0xCF42, 0xCF42}, + {0xCF43, 0xCF43, 0xCF43}, {0xCF44, 0xCF44, 0xCF44}, + {0xCF45, 0xCF45, 0xCF45}, {0xCF46, 0xCF46, 0xCF46}, + {0xCF47, 0xCF47, 0xCF47}, {0xCF48, 0xCF48, 0xCF48}, + {0xCF49, 0xCF49, 0xCF49}, {0xCF4A, 0xCF4A, 0xCF4A}, + {0xCF4B, 0xCF4B, 0xCF4B}, {0xCF4C, 0xCF4C, 0xCF4C}, + {0xCF4D, 0xCF4D, 0xCF4D}, {0xCF4E, 0xCF4E, 0xCF4E}, + {0xCF4F, 0xCF4F, 0xCF4F}, {0xCF50, 0xCF50, 0xCF50}, + {0xCF51, 0xCF51, 0xCF51}, {0xCF52, 0xCF52, 0xCF52}, + {0xCF53, 0xCF53, 0xCF53}, {0xCF54, 0xCF54, 0xCF54}, + {0xCF55, 0xCF55, 0xCF55}, {0xCF56, 0xCF56, 0xCF56}, + {0xCF57, 0xCF57, 0xCF57}, {0xCF58, 0xCF58, 0xCF58}, + {0xCF59, 0xCF59, 0xCF59}, {0xCF5A, 0xCF5A, 0xCF5A}, + {0xCF5B, 0xCF5B, 0xCF5B}, {0xCF5C, 0xCF5C, 0xCF5C}, + {0xCF5D, 0xCF5D, 0xCF5D}, {0xCF5E, 0xCF5E, 0xCF5E}, + {0xCF5F, 0xCF5F, 0xCF5F}, {0xCF60, 0xCF60, 0xCF60}, + {0xCF61, 0xCF61, 0xCF61}, {0xCF62, 0xCF62, 0xCF62}, + {0xCF63, 0xCF63, 0xCF63}, {0xCF64, 0xCF64, 0xCF64}, + {0xCF65, 0xCF65, 0xCF65}, {0xCF66, 0xCF66, 0xCF66}, + {0xCF67, 0xCF67, 0xCF67}, {0xCF68, 0xCF68, 0xCF68}, + {0xCF69, 0xCF69, 0xCF69}, {0xCF6A, 0xCF6A, 0xCF6A}, + {0xCF6B, 0xCF6B, 0xCF6B}, {0xCF6C, 0xCF6C, 0xCF6C}, + {0xCF6D, 0xCF6D, 0xCF6D}, {0xCF6E, 0xCF6E, 0xCF6E}, + {0xCF6F, 0xCF6F, 0xCF6F}, {0xCF70, 0xCF70, 0xCF70}, + {0xCF71, 0xCF71, 0xCF71}, {0xCF72, 0xCF72, 0xCF72}, + {0xCF73, 0xCF73, 0xCF73}, {0xCF74, 0xCF74, 0xCF74}, + {0xCF75, 0xCF75, 0xCF75}, {0xCF76, 0xCF76, 0xCF76}, + {0xCF77, 0xCF77, 0xCF77}, {0xCF78, 0xCF78, 0xCF78}, + {0xCF79, 0xCF79, 0xCF79}, {0xCF7A, 0xCF7A, 0xCF7A}, + {0xCF7B, 0xCF7B, 0xCF7B}, {0xCF7C, 0xCF7C, 0xCF7C}, + {0xCF7D, 0xCF7D, 0xCF7D}, {0xCF7E, 0xCF7E, 0xCF7E}, + {0xCF7F, 0xCF7F, 0xCF7F}, {0xCF80, 0xCF80, 0xCF80}, + {0xCF81, 0xCF81, 0xCF81}, {0xCF82, 0xCF82, 0xCF82}, + {0xCF83, 0xCF83, 0xCF83}, {0xCF84, 0xCF84, 0xCF84}, + {0xCF85, 0xCF85, 0xCF85}, {0xCF86, 0xCF86, 0xCF86}, + {0xCF87, 0xCF87, 0xCF87}, {0xCF88, 0xCF88, 0xCF88}, + {0xCF89, 0xCF89, 0xCF89}, {0xCF8A, 0xCF8A, 0xCF8A}, + {0xCF8B, 0xCF8B, 0xCF8B}, {0xCF8C, 0xCF8C, 0xCF8C}, + {0xCF8D, 0xCF8D, 0xCF8D}, {0xCF8E, 0xCF8E, 0xCF8E}, + {0xCF8F, 0xCF8F, 0xCF8F}, {0xCF90, 0xCF90, 0xCF90}, + {0xCF91, 0xCF91, 0xCF91}, {0xCF92, 0xCF92, 0xCF92}, + {0xCF93, 0xCF93, 0xCF93}, {0xCF94, 0xCF94, 0xCF94}, + {0xCF95, 0xCF95, 0xCF95}, {0xCF96, 0xCF96, 0xCF96}, + {0xCF97, 0xCF97, 0xCF97}, {0xCF98, 0xCF98, 0xCF98}, + {0xCF99, 0xCF99, 0xCF99}, {0xCF9A, 0xCF9A, 0xCF9A}, + {0xCF9B, 0xCF9B, 0xCF9B}, {0xCF9C, 0xCF9C, 0xCF9C}, + {0xCF9D, 0xCF9D, 0xCF9D}, {0xCF9E, 0xCF9E, 0xCF9E}, + {0xCF9F, 0xCF9F, 0xCF9F}, {0xCFA0, 0xCFA0, 0xCFA0}, + {0xCFA1, 0xCFA1, 0xCFA1}, {0xCFA2, 0xCFA2, 0xCFA2}, + {0xCFA3, 0xCFA3, 0xCFA3}, {0xCFA4, 0xCFA4, 0xCFA4}, + {0xCFA5, 0xCFA5, 0xCFA5}, {0xCFA6, 0xCFA6, 0xCFA6}, + {0xCFA7, 0xCFA7, 0xCFA7}, {0xCFA8, 0xCFA8, 0xCFA8}, + {0xCFA9, 0xCFA9, 0xCFA9}, {0xCFAA, 0xCFAA, 0xCFAA}, + {0xCFAB, 0xCFAB, 0xCFAB}, {0xCFAC, 0xCFAC, 0xCFAC}, + {0xCFAD, 0xCFAD, 0xCFAD}, {0xCFAE, 0xCFAE, 0xCFAE}, + {0xCFAF, 0xCFAF, 0xCFAF}, {0xCFB0, 0xCFB0, 0xCFB0}, + {0xCFB1, 0xCFB1, 0xCFB1}, {0xCFB2, 0xCFB2, 0xCFB2}, + {0xCFB3, 0xCFB3, 0xCFB3}, {0xCFB4, 0xCFB4, 0xCFB4}, + {0xCFB5, 0xCFB5, 0xCFB5}, {0xCFB6, 0xCFB6, 0xCFB6}, + {0xCFB7, 0xCFB7, 0xCFB7}, {0xCFB8, 0xCFB8, 0xCFB8}, + {0xCFB9, 0xCFB9, 0xCFB9}, {0xCFBA, 0xCFBA, 0xCFBA}, + {0xCFBB, 0xCFBB, 0xCFBB}, {0xCFBC, 0xCFBC, 0xCFBC}, + {0xCFBD, 0xCFBD, 0xCFBD}, {0xCFBE, 0xCFBE, 0xCFBE}, + {0xCFBF, 0xCFBF, 0xCFBF}, {0xCFC0, 0xCFC0, 0xCFC0}, + {0xCFC1, 0xCFC1, 0xCFC1}, {0xCFC2, 0xCFC2, 0xCFC2}, + {0xCFC3, 0xCFC3, 0xCFC3}, {0xCFC4, 0xCFC4, 0xCFC4}, + {0xCFC5, 0xCFC5, 0xCFC5}, {0xCFC6, 0xCFC6, 0xCFC6}, + {0xCFC7, 0xCFC7, 0xCFC7}, {0xCFC8, 0xCFC8, 0xCFC8}, + {0xCFC9, 0xCFC9, 0xCFC9}, {0xCFCA, 0xCFCA, 0xCFCA}, + {0xCFCB, 0xCFCB, 0xCFCB}, {0xCFCC, 0xCFCC, 0xCFCC}, + {0xCFCD, 0xCFCD, 0xCFCD}, {0xCFCE, 0xCFCE, 0xCFCE}, + {0xCFCF, 0xCFCF, 0xCFCF}, {0xCFD0, 0xCFD0, 0xCFD0}, + {0xCFD1, 0xCFD1, 0xCFD1}, {0xCFD2, 0xCFD2, 0xCFD2}, + {0xCFD3, 0xCFD3, 0xCFD3}, {0xCFD4, 0xCFD4, 0xCFD4}, + {0xCFD5, 0xCFD5, 0xCFD5}, {0xCFD6, 0xCFD6, 0xCFD6}, + {0xCFD7, 0xCFD7, 0xCFD7}, {0xCFD8, 0xCFD8, 0xCFD8}, + {0xCFD9, 0xCFD9, 0xCFD9}, {0xCFDA, 0xCFDA, 0xCFDA}, + {0xCFDB, 0xCFDB, 0xCFDB}, {0xCFDC, 0xCFDC, 0xCFDC}, + {0xCFDD, 0xCFDD, 0xCFDD}, {0xCFDE, 0xCFDE, 0xCFDE}, + {0xCFDF, 0xCFDF, 0xCFDF}, {0xCFE0, 0xCFE0, 0xCFE0}, + {0xCFE1, 0xCFE1, 0xCFE1}, {0xCFE2, 0xCFE2, 0xCFE2}, + {0xCFE3, 0xCFE3, 0xCFE3}, {0xCFE4, 0xCFE4, 0xCFE4}, + {0xCFE5, 0xCFE5, 0xCFE5}, {0xCFE6, 0xCFE6, 0xCFE6}, + {0xCFE7, 0xCFE7, 0xCFE7}, {0xCFE8, 0xCFE8, 0xCFE8}, + {0xCFE9, 0xCFE9, 0xCFE9}, {0xCFEA, 0xCFEA, 0xCFEA}, + {0xCFEB, 0xCFEB, 0xCFEB}, {0xCFEC, 0xCFEC, 0xCFEC}, + {0xCFED, 0xCFED, 0xCFED}, {0xCFEE, 0xCFEE, 0xCFEE}, + {0xCFEF, 0xCFEF, 0xCFEF}, {0xCFF0, 0xCFF0, 0xCFF0}, + {0xCFF1, 0xCFF1, 0xCFF1}, {0xCFF2, 0xCFF2, 0xCFF2}, + {0xCFF3, 0xCFF3, 0xCFF3}, {0xCFF4, 0xCFF4, 0xCFF4}, + {0xCFF5, 0xCFF5, 0xCFF5}, {0xCFF6, 0xCFF6, 0xCFF6}, + {0xCFF7, 0xCFF7, 0xCFF7}, {0xCFF8, 0xCFF8, 0xCFF8}, + {0xCFF9, 0xCFF9, 0xCFF9}, {0xCFFA, 0xCFFA, 0xCFFA}, + {0xCFFB, 0xCFFB, 0xCFFB}, {0xCFFC, 0xCFFC, 0xCFFC}, + {0xCFFD, 0xCFFD, 0xCFFD}, {0xCFFE, 0xCFFE, 0xCFFE}, + {0xCFFF, 0xCFFF, 0xCFFF}, {0xD000, 0xD000, 0xD000}, + {0xD001, 0xD001, 0xD001}, {0xD002, 0xD002, 0xD002}, + {0xD003, 0xD003, 0xD003}, {0xD004, 0xD004, 0xD004}, + {0xD005, 0xD005, 0xD005}, {0xD006, 0xD006, 0xD006}, + {0xD007, 0xD007, 0xD007}, {0xD008, 0xD008, 0xD008}, + {0xD009, 0xD009, 0xD009}, {0xD00A, 0xD00A, 0xD00A}, + {0xD00B, 0xD00B, 0xD00B}, {0xD00C, 0xD00C, 0xD00C}, + {0xD00D, 0xD00D, 0xD00D}, {0xD00E, 0xD00E, 0xD00E}, + {0xD00F, 0xD00F, 0xD00F}, {0xD010, 0xD010, 0xD010}, + {0xD011, 0xD011, 0xD011}, {0xD012, 0xD012, 0xD012}, + {0xD013, 0xD013, 0xD013}, {0xD014, 0xD014, 0xD014}, + {0xD015, 0xD015, 0xD015}, {0xD016, 0xD016, 0xD016}, + {0xD017, 0xD017, 0xD017}, {0xD018, 0xD018, 0xD018}, + {0xD019, 0xD019, 0xD019}, {0xD01A, 0xD01A, 0xD01A}, + {0xD01B, 0xD01B, 0xD01B}, {0xD01C, 0xD01C, 0xD01C}, + {0xD01D, 0xD01D, 0xD01D}, {0xD01E, 0xD01E, 0xD01E}, + {0xD01F, 0xD01F, 0xD01F}, {0xD020, 0xD020, 0xD020}, + {0xD021, 0xD021, 0xD021}, {0xD022, 0xD022, 0xD022}, + {0xD023, 0xD023, 0xD023}, {0xD024, 0xD024, 0xD024}, + {0xD025, 0xD025, 0xD025}, {0xD026, 0xD026, 0xD026}, + {0xD027, 0xD027, 0xD027}, {0xD028, 0xD028, 0xD028}, + {0xD029, 0xD029, 0xD029}, {0xD02A, 0xD02A, 0xD02A}, + {0xD02B, 0xD02B, 0xD02B}, {0xD02C, 0xD02C, 0xD02C}, + {0xD02D, 0xD02D, 0xD02D}, {0xD02E, 0xD02E, 0xD02E}, + {0xD02F, 0xD02F, 0xD02F}, {0xD030, 0xD030, 0xD030}, + {0xD031, 0xD031, 0xD031}, {0xD032, 0xD032, 0xD032}, + {0xD033, 0xD033, 0xD033}, {0xD034, 0xD034, 0xD034}, + {0xD035, 0xD035, 0xD035}, {0xD036, 0xD036, 0xD036}, + {0xD037, 0xD037, 0xD037}, {0xD038, 0xD038, 0xD038}, + {0xD039, 0xD039, 0xD039}, {0xD03A, 0xD03A, 0xD03A}, + {0xD03B, 0xD03B, 0xD03B}, {0xD03C, 0xD03C, 0xD03C}, + {0xD03D, 0xD03D, 0xD03D}, {0xD03E, 0xD03E, 0xD03E}, + {0xD03F, 0xD03F, 0xD03F}, {0xD040, 0xD040, 0xD040}, + {0xD041, 0xD041, 0xD041}, {0xD042, 0xD042, 0xD042}, + {0xD043, 0xD043, 0xD043}, {0xD044, 0xD044, 0xD044}, + {0xD045, 0xD045, 0xD045}, {0xD046, 0xD046, 0xD046}, + {0xD047, 0xD047, 0xD047}, {0xD048, 0xD048, 0xD048}, + {0xD049, 0xD049, 0xD049}, {0xD04A, 0xD04A, 0xD04A}, + {0xD04B, 0xD04B, 0xD04B}, {0xD04C, 0xD04C, 0xD04C}, + {0xD04D, 0xD04D, 0xD04D}, {0xD04E, 0xD04E, 0xD04E}, + {0xD04F, 0xD04F, 0xD04F}, {0xD050, 0xD050, 0xD050}, + {0xD051, 0xD051, 0xD051}, {0xD052, 0xD052, 0xD052}, + {0xD053, 0xD053, 0xD053}, {0xD054, 0xD054, 0xD054}, + {0xD055, 0xD055, 0xD055}, {0xD056, 0xD056, 0xD056}, + {0xD057, 0xD057, 0xD057}, {0xD058, 0xD058, 0xD058}, + {0xD059, 0xD059, 0xD059}, {0xD05A, 0xD05A, 0xD05A}, + {0xD05B, 0xD05B, 0xD05B}, {0xD05C, 0xD05C, 0xD05C}, + {0xD05D, 0xD05D, 0xD05D}, {0xD05E, 0xD05E, 0xD05E}, + {0xD05F, 0xD05F, 0xD05F}, {0xD060, 0xD060, 0xD060}, + {0xD061, 0xD061, 0xD061}, {0xD062, 0xD062, 0xD062}, + {0xD063, 0xD063, 0xD063}, {0xD064, 0xD064, 0xD064}, + {0xD065, 0xD065, 0xD065}, {0xD066, 0xD066, 0xD066}, + {0xD067, 0xD067, 0xD067}, {0xD068, 0xD068, 0xD068}, + {0xD069, 0xD069, 0xD069}, {0xD06A, 0xD06A, 0xD06A}, + {0xD06B, 0xD06B, 0xD06B}, {0xD06C, 0xD06C, 0xD06C}, + {0xD06D, 0xD06D, 0xD06D}, {0xD06E, 0xD06E, 0xD06E}, + {0xD06F, 0xD06F, 0xD06F}, {0xD070, 0xD070, 0xD070}, + {0xD071, 0xD071, 0xD071}, {0xD072, 0xD072, 0xD072}, + {0xD073, 0xD073, 0xD073}, {0xD074, 0xD074, 0xD074}, + {0xD075, 0xD075, 0xD075}, {0xD076, 0xD076, 0xD076}, + {0xD077, 0xD077, 0xD077}, {0xD078, 0xD078, 0xD078}, + {0xD079, 0xD079, 0xD079}, {0xD07A, 0xD07A, 0xD07A}, + {0xD07B, 0xD07B, 0xD07B}, {0xD07C, 0xD07C, 0xD07C}, + {0xD07D, 0xD07D, 0xD07D}, {0xD07E, 0xD07E, 0xD07E}, + {0xD07F, 0xD07F, 0xD07F}, {0xD080, 0xD080, 0xD080}, + {0xD081, 0xD081, 0xD081}, {0xD082, 0xD082, 0xD082}, + {0xD083, 0xD083, 0xD083}, {0xD084, 0xD084, 0xD084}, + {0xD085, 0xD085, 0xD085}, {0xD086, 0xD086, 0xD086}, + {0xD087, 0xD087, 0xD087}, {0xD088, 0xD088, 0xD088}, + {0xD089, 0xD089, 0xD089}, {0xD08A, 0xD08A, 0xD08A}, + {0xD08B, 0xD08B, 0xD08B}, {0xD08C, 0xD08C, 0xD08C}, + {0xD08D, 0xD08D, 0xD08D}, {0xD08E, 0xD08E, 0xD08E}, + {0xD08F, 0xD08F, 0xD08F}, {0xD090, 0xD090, 0xD090}, + {0xD091, 0xD091, 0xD091}, {0xD092, 0xD092, 0xD092}, + {0xD093, 0xD093, 0xD093}, {0xD094, 0xD094, 0xD094}, + {0xD095, 0xD095, 0xD095}, {0xD096, 0xD096, 0xD096}, + {0xD097, 0xD097, 0xD097}, {0xD098, 0xD098, 0xD098}, + {0xD099, 0xD099, 0xD099}, {0xD09A, 0xD09A, 0xD09A}, + {0xD09B, 0xD09B, 0xD09B}, {0xD09C, 0xD09C, 0xD09C}, + {0xD09D, 0xD09D, 0xD09D}, {0xD09E, 0xD09E, 0xD09E}, + {0xD09F, 0xD09F, 0xD09F}, {0xD0A0, 0xD0A0, 0xD0A0}, + {0xD0A1, 0xD0A1, 0xD0A1}, {0xD0A2, 0xD0A2, 0xD0A2}, + {0xD0A3, 0xD0A3, 0xD0A3}, {0xD0A4, 0xD0A4, 0xD0A4}, + {0xD0A5, 0xD0A5, 0xD0A5}, {0xD0A6, 0xD0A6, 0xD0A6}, + {0xD0A7, 0xD0A7, 0xD0A7}, {0xD0A8, 0xD0A8, 0xD0A8}, + {0xD0A9, 0xD0A9, 0xD0A9}, {0xD0AA, 0xD0AA, 0xD0AA}, + {0xD0AB, 0xD0AB, 0xD0AB}, {0xD0AC, 0xD0AC, 0xD0AC}, + {0xD0AD, 0xD0AD, 0xD0AD}, {0xD0AE, 0xD0AE, 0xD0AE}, + {0xD0AF, 0xD0AF, 0xD0AF}, {0xD0B0, 0xD0B0, 0xD0B0}, + {0xD0B1, 0xD0B1, 0xD0B1}, {0xD0B2, 0xD0B2, 0xD0B2}, + {0xD0B3, 0xD0B3, 0xD0B3}, {0xD0B4, 0xD0B4, 0xD0B4}, + {0xD0B5, 0xD0B5, 0xD0B5}, {0xD0B6, 0xD0B6, 0xD0B6}, + {0xD0B7, 0xD0B7, 0xD0B7}, {0xD0B8, 0xD0B8, 0xD0B8}, + {0xD0B9, 0xD0B9, 0xD0B9}, {0xD0BA, 0xD0BA, 0xD0BA}, + {0xD0BB, 0xD0BB, 0xD0BB}, {0xD0BC, 0xD0BC, 0xD0BC}, + {0xD0BD, 0xD0BD, 0xD0BD}, {0xD0BE, 0xD0BE, 0xD0BE}, + {0xD0BF, 0xD0BF, 0xD0BF}, {0xD0C0, 0xD0C0, 0xD0C0}, + {0xD0C1, 0xD0C1, 0xD0C1}, {0xD0C2, 0xD0C2, 0xD0C2}, + {0xD0C3, 0xD0C3, 0xD0C3}, {0xD0C4, 0xD0C4, 0xD0C4}, + {0xD0C5, 0xD0C5, 0xD0C5}, {0xD0C6, 0xD0C6, 0xD0C6}, + {0xD0C7, 0xD0C7, 0xD0C7}, {0xD0C8, 0xD0C8, 0xD0C8}, + {0xD0C9, 0xD0C9, 0xD0C9}, {0xD0CA, 0xD0CA, 0xD0CA}, + {0xD0CB, 0xD0CB, 0xD0CB}, {0xD0CC, 0xD0CC, 0xD0CC}, + {0xD0CD, 0xD0CD, 0xD0CD}, {0xD0CE, 0xD0CE, 0xD0CE}, + {0xD0CF, 0xD0CF, 0xD0CF}, {0xD0D0, 0xD0D0, 0xD0D0}, + {0xD0D1, 0xD0D1, 0xD0D1}, {0xD0D2, 0xD0D2, 0xD0D2}, + {0xD0D3, 0xD0D3, 0xD0D3}, {0xD0D4, 0xD0D4, 0xD0D4}, + {0xD0D5, 0xD0D5, 0xD0D5}, {0xD0D6, 0xD0D6, 0xD0D6}, + {0xD0D7, 0xD0D7, 0xD0D7}, {0xD0D8, 0xD0D8, 0xD0D8}, + {0xD0D9, 0xD0D9, 0xD0D9}, {0xD0DA, 0xD0DA, 0xD0DA}, + {0xD0DB, 0xD0DB, 0xD0DB}, {0xD0DC, 0xD0DC, 0xD0DC}, + {0xD0DD, 0xD0DD, 0xD0DD}, {0xD0DE, 0xD0DE, 0xD0DE}, + {0xD0DF, 0xD0DF, 0xD0DF}, {0xD0E0, 0xD0E0, 0xD0E0}, + {0xD0E1, 0xD0E1, 0xD0E1}, {0xD0E2, 0xD0E2, 0xD0E2}, + {0xD0E3, 0xD0E3, 0xD0E3}, {0xD0E4, 0xD0E4, 0xD0E4}, + {0xD0E5, 0xD0E5, 0xD0E5}, {0xD0E6, 0xD0E6, 0xD0E6}, + {0xD0E7, 0xD0E7, 0xD0E7}, {0xD0E8, 0xD0E8, 0xD0E8}, + {0xD0E9, 0xD0E9, 0xD0E9}, {0xD0EA, 0xD0EA, 0xD0EA}, + {0xD0EB, 0xD0EB, 0xD0EB}, {0xD0EC, 0xD0EC, 0xD0EC}, + {0xD0ED, 0xD0ED, 0xD0ED}, {0xD0EE, 0xD0EE, 0xD0EE}, + {0xD0EF, 0xD0EF, 0xD0EF}, {0xD0F0, 0xD0F0, 0xD0F0}, + {0xD0F1, 0xD0F1, 0xD0F1}, {0xD0F2, 0xD0F2, 0xD0F2}, + {0xD0F3, 0xD0F3, 0xD0F3}, {0xD0F4, 0xD0F4, 0xD0F4}, + {0xD0F5, 0xD0F5, 0xD0F5}, {0xD0F6, 0xD0F6, 0xD0F6}, + {0xD0F7, 0xD0F7, 0xD0F7}, {0xD0F8, 0xD0F8, 0xD0F8}, + {0xD0F9, 0xD0F9, 0xD0F9}, {0xD0FA, 0xD0FA, 0xD0FA}, + {0xD0FB, 0xD0FB, 0xD0FB}, {0xD0FC, 0xD0FC, 0xD0FC}, + {0xD0FD, 0xD0FD, 0xD0FD}, {0xD0FE, 0xD0FE, 0xD0FE}, + {0xD0FF, 0xD0FF, 0xD0FF}, {0xD100, 0xD100, 0xD100}, + {0xD101, 0xD101, 0xD101}, {0xD102, 0xD102, 0xD102}, + {0xD103, 0xD103, 0xD103}, {0xD104, 0xD104, 0xD104}, + {0xD105, 0xD105, 0xD105}, {0xD106, 0xD106, 0xD106}, + {0xD107, 0xD107, 0xD107}, {0xD108, 0xD108, 0xD108}, + {0xD109, 0xD109, 0xD109}, {0xD10A, 0xD10A, 0xD10A}, + {0xD10B, 0xD10B, 0xD10B}, {0xD10C, 0xD10C, 0xD10C}, + {0xD10D, 0xD10D, 0xD10D}, {0xD10E, 0xD10E, 0xD10E}, + {0xD10F, 0xD10F, 0xD10F}, {0xD110, 0xD110, 0xD110}, + {0xD111, 0xD111, 0xD111}, {0xD112, 0xD112, 0xD112}, + {0xD113, 0xD113, 0xD113}, {0xD114, 0xD114, 0xD114}, + {0xD115, 0xD115, 0xD115}, {0xD116, 0xD116, 0xD116}, + {0xD117, 0xD117, 0xD117}, {0xD118, 0xD118, 0xD118}, + {0xD119, 0xD119, 0xD119}, {0xD11A, 0xD11A, 0xD11A}, + {0xD11B, 0xD11B, 0xD11B}, {0xD11C, 0xD11C, 0xD11C}, + {0xD11D, 0xD11D, 0xD11D}, {0xD11E, 0xD11E, 0xD11E}, + {0xD11F, 0xD11F, 0xD11F}, {0xD120, 0xD120, 0xD120}, + {0xD121, 0xD121, 0xD121}, {0xD122, 0xD122, 0xD122}, + {0xD123, 0xD123, 0xD123}, {0xD124, 0xD124, 0xD124}, + {0xD125, 0xD125, 0xD125}, {0xD126, 0xD126, 0xD126}, + {0xD127, 0xD127, 0xD127}, {0xD128, 0xD128, 0xD128}, + {0xD129, 0xD129, 0xD129}, {0xD12A, 0xD12A, 0xD12A}, + {0xD12B, 0xD12B, 0xD12B}, {0xD12C, 0xD12C, 0xD12C}, + {0xD12D, 0xD12D, 0xD12D}, {0xD12E, 0xD12E, 0xD12E}, + {0xD12F, 0xD12F, 0xD12F}, {0xD130, 0xD130, 0xD130}, + {0xD131, 0xD131, 0xD131}, {0xD132, 0xD132, 0xD132}, + {0xD133, 0xD133, 0xD133}, {0xD134, 0xD134, 0xD134}, + {0xD135, 0xD135, 0xD135}, {0xD136, 0xD136, 0xD136}, + {0xD137, 0xD137, 0xD137}, {0xD138, 0xD138, 0xD138}, + {0xD139, 0xD139, 0xD139}, {0xD13A, 0xD13A, 0xD13A}, + {0xD13B, 0xD13B, 0xD13B}, {0xD13C, 0xD13C, 0xD13C}, + {0xD13D, 0xD13D, 0xD13D}, {0xD13E, 0xD13E, 0xD13E}, + {0xD13F, 0xD13F, 0xD13F}, {0xD140, 0xD140, 0xD140}, + {0xD141, 0xD141, 0xD141}, {0xD142, 0xD142, 0xD142}, + {0xD143, 0xD143, 0xD143}, {0xD144, 0xD144, 0xD144}, + {0xD145, 0xD145, 0xD145}, {0xD146, 0xD146, 0xD146}, + {0xD147, 0xD147, 0xD147}, {0xD148, 0xD148, 0xD148}, + {0xD149, 0xD149, 0xD149}, {0xD14A, 0xD14A, 0xD14A}, + {0xD14B, 0xD14B, 0xD14B}, {0xD14C, 0xD14C, 0xD14C}, + {0xD14D, 0xD14D, 0xD14D}, {0xD14E, 0xD14E, 0xD14E}, + {0xD14F, 0xD14F, 0xD14F}, {0xD150, 0xD150, 0xD150}, + {0xD151, 0xD151, 0xD151}, {0xD152, 0xD152, 0xD152}, + {0xD153, 0xD153, 0xD153}, {0xD154, 0xD154, 0xD154}, + {0xD155, 0xD155, 0xD155}, {0xD156, 0xD156, 0xD156}, + {0xD157, 0xD157, 0xD157}, {0xD158, 0xD158, 0xD158}, + {0xD159, 0xD159, 0xD159}, {0xD15A, 0xD15A, 0xD15A}, + {0xD15B, 0xD15B, 0xD15B}, {0xD15C, 0xD15C, 0xD15C}, + {0xD15D, 0xD15D, 0xD15D}, {0xD15E, 0xD15E, 0xD15E}, + {0xD15F, 0xD15F, 0xD15F}, {0xD160, 0xD160, 0xD160}, + {0xD161, 0xD161, 0xD161}, {0xD162, 0xD162, 0xD162}, + {0xD163, 0xD163, 0xD163}, {0xD164, 0xD164, 0xD164}, + {0xD165, 0xD165, 0xD165}, {0xD166, 0xD166, 0xD166}, + {0xD167, 0xD167, 0xD167}, {0xD168, 0xD168, 0xD168}, + {0xD169, 0xD169, 0xD169}, {0xD16A, 0xD16A, 0xD16A}, + {0xD16B, 0xD16B, 0xD16B}, {0xD16C, 0xD16C, 0xD16C}, + {0xD16D, 0xD16D, 0xD16D}, {0xD16E, 0xD16E, 0xD16E}, + {0xD16F, 0xD16F, 0xD16F}, {0xD170, 0xD170, 0xD170}, + {0xD171, 0xD171, 0xD171}, {0xD172, 0xD172, 0xD172}, + {0xD173, 0xD173, 0xD173}, {0xD174, 0xD174, 0xD174}, + {0xD175, 0xD175, 0xD175}, {0xD176, 0xD176, 0xD176}, + {0xD177, 0xD177, 0xD177}, {0xD178, 0xD178, 0xD178}, + {0xD179, 0xD179, 0xD179}, {0xD17A, 0xD17A, 0xD17A}, + {0xD17B, 0xD17B, 0xD17B}, {0xD17C, 0xD17C, 0xD17C}, + {0xD17D, 0xD17D, 0xD17D}, {0xD17E, 0xD17E, 0xD17E}, + {0xD17F, 0xD17F, 0xD17F}, {0xD180, 0xD180, 0xD180}, + {0xD181, 0xD181, 0xD181}, {0xD182, 0xD182, 0xD182}, + {0xD183, 0xD183, 0xD183}, {0xD184, 0xD184, 0xD184}, + {0xD185, 0xD185, 0xD185}, {0xD186, 0xD186, 0xD186}, + {0xD187, 0xD187, 0xD187}, {0xD188, 0xD188, 0xD188}, + {0xD189, 0xD189, 0xD189}, {0xD18A, 0xD18A, 0xD18A}, + {0xD18B, 0xD18B, 0xD18B}, {0xD18C, 0xD18C, 0xD18C}, + {0xD18D, 0xD18D, 0xD18D}, {0xD18E, 0xD18E, 0xD18E}, + {0xD18F, 0xD18F, 0xD18F}, {0xD190, 0xD190, 0xD190}, + {0xD191, 0xD191, 0xD191}, {0xD192, 0xD192, 0xD192}, + {0xD193, 0xD193, 0xD193}, {0xD194, 0xD194, 0xD194}, + {0xD195, 0xD195, 0xD195}, {0xD196, 0xD196, 0xD196}, + {0xD197, 0xD197, 0xD197}, {0xD198, 0xD198, 0xD198}, + {0xD199, 0xD199, 0xD199}, {0xD19A, 0xD19A, 0xD19A}, + {0xD19B, 0xD19B, 0xD19B}, {0xD19C, 0xD19C, 0xD19C}, + {0xD19D, 0xD19D, 0xD19D}, {0xD19E, 0xD19E, 0xD19E}, + {0xD19F, 0xD19F, 0xD19F}, {0xD1A0, 0xD1A0, 0xD1A0}, + {0xD1A1, 0xD1A1, 0xD1A1}, {0xD1A2, 0xD1A2, 0xD1A2}, + {0xD1A3, 0xD1A3, 0xD1A3}, {0xD1A4, 0xD1A4, 0xD1A4}, + {0xD1A5, 0xD1A5, 0xD1A5}, {0xD1A6, 0xD1A6, 0xD1A6}, + {0xD1A7, 0xD1A7, 0xD1A7}, {0xD1A8, 0xD1A8, 0xD1A8}, + {0xD1A9, 0xD1A9, 0xD1A9}, {0xD1AA, 0xD1AA, 0xD1AA}, + {0xD1AB, 0xD1AB, 0xD1AB}, {0xD1AC, 0xD1AC, 0xD1AC}, + {0xD1AD, 0xD1AD, 0xD1AD}, {0xD1AE, 0xD1AE, 0xD1AE}, + {0xD1AF, 0xD1AF, 0xD1AF}, {0xD1B0, 0xD1B0, 0xD1B0}, + {0xD1B1, 0xD1B1, 0xD1B1}, {0xD1B2, 0xD1B2, 0xD1B2}, + {0xD1B3, 0xD1B3, 0xD1B3}, {0xD1B4, 0xD1B4, 0xD1B4}, + {0xD1B5, 0xD1B5, 0xD1B5}, {0xD1B6, 0xD1B6, 0xD1B6}, + {0xD1B7, 0xD1B7, 0xD1B7}, {0xD1B8, 0xD1B8, 0xD1B8}, + {0xD1B9, 0xD1B9, 0xD1B9}, {0xD1BA, 0xD1BA, 0xD1BA}, + {0xD1BB, 0xD1BB, 0xD1BB}, {0xD1BC, 0xD1BC, 0xD1BC}, + {0xD1BD, 0xD1BD, 0xD1BD}, {0xD1BE, 0xD1BE, 0xD1BE}, + {0xD1BF, 0xD1BF, 0xD1BF}, {0xD1C0, 0xD1C0, 0xD1C0}, + {0xD1C1, 0xD1C1, 0xD1C1}, {0xD1C2, 0xD1C2, 0xD1C2}, + {0xD1C3, 0xD1C3, 0xD1C3}, {0xD1C4, 0xD1C4, 0xD1C4}, + {0xD1C5, 0xD1C5, 0xD1C5}, {0xD1C6, 0xD1C6, 0xD1C6}, + {0xD1C7, 0xD1C7, 0xD1C7}, {0xD1C8, 0xD1C8, 0xD1C8}, + {0xD1C9, 0xD1C9, 0xD1C9}, {0xD1CA, 0xD1CA, 0xD1CA}, + {0xD1CB, 0xD1CB, 0xD1CB}, {0xD1CC, 0xD1CC, 0xD1CC}, + {0xD1CD, 0xD1CD, 0xD1CD}, {0xD1CE, 0xD1CE, 0xD1CE}, + {0xD1CF, 0xD1CF, 0xD1CF}, {0xD1D0, 0xD1D0, 0xD1D0}, + {0xD1D1, 0xD1D1, 0xD1D1}, {0xD1D2, 0xD1D2, 0xD1D2}, + {0xD1D3, 0xD1D3, 0xD1D3}, {0xD1D4, 0xD1D4, 0xD1D4}, + {0xD1D5, 0xD1D5, 0xD1D5}, {0xD1D6, 0xD1D6, 0xD1D6}, + {0xD1D7, 0xD1D7, 0xD1D7}, {0xD1D8, 0xD1D8, 0xD1D8}, + {0xD1D9, 0xD1D9, 0xD1D9}, {0xD1DA, 0xD1DA, 0xD1DA}, + {0xD1DB, 0xD1DB, 0xD1DB}, {0xD1DC, 0xD1DC, 0xD1DC}, + {0xD1DD, 0xD1DD, 0xD1DD}, {0xD1DE, 0xD1DE, 0xD1DE}, + {0xD1DF, 0xD1DF, 0xD1DF}, {0xD1E0, 0xD1E0, 0xD1E0}, + {0xD1E1, 0xD1E1, 0xD1E1}, {0xD1E2, 0xD1E2, 0xD1E2}, + {0xD1E3, 0xD1E3, 0xD1E3}, {0xD1E4, 0xD1E4, 0xD1E4}, + {0xD1E5, 0xD1E5, 0xD1E5}, {0xD1E6, 0xD1E6, 0xD1E6}, + {0xD1E7, 0xD1E7, 0xD1E7}, {0xD1E8, 0xD1E8, 0xD1E8}, + {0xD1E9, 0xD1E9, 0xD1E9}, {0xD1EA, 0xD1EA, 0xD1EA}, + {0xD1EB, 0xD1EB, 0xD1EB}, {0xD1EC, 0xD1EC, 0xD1EC}, + {0xD1ED, 0xD1ED, 0xD1ED}, {0xD1EE, 0xD1EE, 0xD1EE}, + {0xD1EF, 0xD1EF, 0xD1EF}, {0xD1F0, 0xD1F0, 0xD1F0}, + {0xD1F1, 0xD1F1, 0xD1F1}, {0xD1F2, 0xD1F2, 0xD1F2}, + {0xD1F3, 0xD1F3, 0xD1F3}, {0xD1F4, 0xD1F4, 0xD1F4}, + {0xD1F5, 0xD1F5, 0xD1F5}, {0xD1F6, 0xD1F6, 0xD1F6}, + {0xD1F7, 0xD1F7, 0xD1F7}, {0xD1F8, 0xD1F8, 0xD1F8}, + {0xD1F9, 0xD1F9, 0xD1F9}, {0xD1FA, 0xD1FA, 0xD1FA}, + {0xD1FB, 0xD1FB, 0xD1FB}, {0xD1FC, 0xD1FC, 0xD1FC}, + {0xD1FD, 0xD1FD, 0xD1FD}, {0xD1FE, 0xD1FE, 0xD1FE}, + {0xD1FF, 0xD1FF, 0xD1FF}, {0xD200, 0xD200, 0xD200}, + {0xD201, 0xD201, 0xD201}, {0xD202, 0xD202, 0xD202}, + {0xD203, 0xD203, 0xD203}, {0xD204, 0xD204, 0xD204}, + {0xD205, 0xD205, 0xD205}, {0xD206, 0xD206, 0xD206}, + {0xD207, 0xD207, 0xD207}, {0xD208, 0xD208, 0xD208}, + {0xD209, 0xD209, 0xD209}, {0xD20A, 0xD20A, 0xD20A}, + {0xD20B, 0xD20B, 0xD20B}, {0xD20C, 0xD20C, 0xD20C}, + {0xD20D, 0xD20D, 0xD20D}, {0xD20E, 0xD20E, 0xD20E}, + {0xD20F, 0xD20F, 0xD20F}, {0xD210, 0xD210, 0xD210}, + {0xD211, 0xD211, 0xD211}, {0xD212, 0xD212, 0xD212}, + {0xD213, 0xD213, 0xD213}, {0xD214, 0xD214, 0xD214}, + {0xD215, 0xD215, 0xD215}, {0xD216, 0xD216, 0xD216}, + {0xD217, 0xD217, 0xD217}, {0xD218, 0xD218, 0xD218}, + {0xD219, 0xD219, 0xD219}, {0xD21A, 0xD21A, 0xD21A}, + {0xD21B, 0xD21B, 0xD21B}, {0xD21C, 0xD21C, 0xD21C}, + {0xD21D, 0xD21D, 0xD21D}, {0xD21E, 0xD21E, 0xD21E}, + {0xD21F, 0xD21F, 0xD21F}, {0xD220, 0xD220, 0xD220}, + {0xD221, 0xD221, 0xD221}, {0xD222, 0xD222, 0xD222}, + {0xD223, 0xD223, 0xD223}, {0xD224, 0xD224, 0xD224}, + {0xD225, 0xD225, 0xD225}, {0xD226, 0xD226, 0xD226}, + {0xD227, 0xD227, 0xD227}, {0xD228, 0xD228, 0xD228}, + {0xD229, 0xD229, 0xD229}, {0xD22A, 0xD22A, 0xD22A}, + {0xD22B, 0xD22B, 0xD22B}, {0xD22C, 0xD22C, 0xD22C}, + {0xD22D, 0xD22D, 0xD22D}, {0xD22E, 0xD22E, 0xD22E}, + {0xD22F, 0xD22F, 0xD22F}, {0xD230, 0xD230, 0xD230}, + {0xD231, 0xD231, 0xD231}, {0xD232, 0xD232, 0xD232}, + {0xD233, 0xD233, 0xD233}, {0xD234, 0xD234, 0xD234}, + {0xD235, 0xD235, 0xD235}, {0xD236, 0xD236, 0xD236}, + {0xD237, 0xD237, 0xD237}, {0xD238, 0xD238, 0xD238}, + {0xD239, 0xD239, 0xD239}, {0xD23A, 0xD23A, 0xD23A}, + {0xD23B, 0xD23B, 0xD23B}, {0xD23C, 0xD23C, 0xD23C}, + {0xD23D, 0xD23D, 0xD23D}, {0xD23E, 0xD23E, 0xD23E}, + {0xD23F, 0xD23F, 0xD23F}, {0xD240, 0xD240, 0xD240}, + {0xD241, 0xD241, 0xD241}, {0xD242, 0xD242, 0xD242}, + {0xD243, 0xD243, 0xD243}, {0xD244, 0xD244, 0xD244}, + {0xD245, 0xD245, 0xD245}, {0xD246, 0xD246, 0xD246}, + {0xD247, 0xD247, 0xD247}, {0xD248, 0xD248, 0xD248}, + {0xD249, 0xD249, 0xD249}, {0xD24A, 0xD24A, 0xD24A}, + {0xD24B, 0xD24B, 0xD24B}, {0xD24C, 0xD24C, 0xD24C}, + {0xD24D, 0xD24D, 0xD24D}, {0xD24E, 0xD24E, 0xD24E}, + {0xD24F, 0xD24F, 0xD24F}, {0xD250, 0xD250, 0xD250}, + {0xD251, 0xD251, 0xD251}, {0xD252, 0xD252, 0xD252}, + {0xD253, 0xD253, 0xD253}, {0xD254, 0xD254, 0xD254}, + {0xD255, 0xD255, 0xD255}, {0xD256, 0xD256, 0xD256}, + {0xD257, 0xD257, 0xD257}, {0xD258, 0xD258, 0xD258}, + {0xD259, 0xD259, 0xD259}, {0xD25A, 0xD25A, 0xD25A}, + {0xD25B, 0xD25B, 0xD25B}, {0xD25C, 0xD25C, 0xD25C}, + {0xD25D, 0xD25D, 0xD25D}, {0xD25E, 0xD25E, 0xD25E}, + {0xD25F, 0xD25F, 0xD25F}, {0xD260, 0xD260, 0xD260}, + {0xD261, 0xD261, 0xD261}, {0xD262, 0xD262, 0xD262}, + {0xD263, 0xD263, 0xD263}, {0xD264, 0xD264, 0xD264}, + {0xD265, 0xD265, 0xD265}, {0xD266, 0xD266, 0xD266}, + {0xD267, 0xD267, 0xD267}, {0xD268, 0xD268, 0xD268}, + {0xD269, 0xD269, 0xD269}, {0xD26A, 0xD26A, 0xD26A}, + {0xD26B, 0xD26B, 0xD26B}, {0xD26C, 0xD26C, 0xD26C}, + {0xD26D, 0xD26D, 0xD26D}, {0xD26E, 0xD26E, 0xD26E}, + {0xD26F, 0xD26F, 0xD26F}, {0xD270, 0xD270, 0xD270}, + {0xD271, 0xD271, 0xD271}, {0xD272, 0xD272, 0xD272}, + {0xD273, 0xD273, 0xD273}, {0xD274, 0xD274, 0xD274}, + {0xD275, 0xD275, 0xD275}, {0xD276, 0xD276, 0xD276}, + {0xD277, 0xD277, 0xD277}, {0xD278, 0xD278, 0xD278}, + {0xD279, 0xD279, 0xD279}, {0xD27A, 0xD27A, 0xD27A}, + {0xD27B, 0xD27B, 0xD27B}, {0xD27C, 0xD27C, 0xD27C}, + {0xD27D, 0xD27D, 0xD27D}, {0xD27E, 0xD27E, 0xD27E}, + {0xD27F, 0xD27F, 0xD27F}, {0xD280, 0xD280, 0xD280}, + {0xD281, 0xD281, 0xD281}, {0xD282, 0xD282, 0xD282}, + {0xD283, 0xD283, 0xD283}, {0xD284, 0xD284, 0xD284}, + {0xD285, 0xD285, 0xD285}, {0xD286, 0xD286, 0xD286}, + {0xD287, 0xD287, 0xD287}, {0xD288, 0xD288, 0xD288}, + {0xD289, 0xD289, 0xD289}, {0xD28A, 0xD28A, 0xD28A}, + {0xD28B, 0xD28B, 0xD28B}, {0xD28C, 0xD28C, 0xD28C}, + {0xD28D, 0xD28D, 0xD28D}, {0xD28E, 0xD28E, 0xD28E}, + {0xD28F, 0xD28F, 0xD28F}, {0xD290, 0xD290, 0xD290}, + {0xD291, 0xD291, 0xD291}, {0xD292, 0xD292, 0xD292}, + {0xD293, 0xD293, 0xD293}, {0xD294, 0xD294, 0xD294}, + {0xD295, 0xD295, 0xD295}, {0xD296, 0xD296, 0xD296}, + {0xD297, 0xD297, 0xD297}, {0xD298, 0xD298, 0xD298}, + {0xD299, 0xD299, 0xD299}, {0xD29A, 0xD29A, 0xD29A}, + {0xD29B, 0xD29B, 0xD29B}, {0xD29C, 0xD29C, 0xD29C}, + {0xD29D, 0xD29D, 0xD29D}, {0xD29E, 0xD29E, 0xD29E}, + {0xD29F, 0xD29F, 0xD29F}, {0xD2A0, 0xD2A0, 0xD2A0}, + {0xD2A1, 0xD2A1, 0xD2A1}, {0xD2A2, 0xD2A2, 0xD2A2}, + {0xD2A3, 0xD2A3, 0xD2A3}, {0xD2A4, 0xD2A4, 0xD2A4}, + {0xD2A5, 0xD2A5, 0xD2A5}, {0xD2A6, 0xD2A6, 0xD2A6}, + {0xD2A7, 0xD2A7, 0xD2A7}, {0xD2A8, 0xD2A8, 0xD2A8}, + {0xD2A9, 0xD2A9, 0xD2A9}, {0xD2AA, 0xD2AA, 0xD2AA}, + {0xD2AB, 0xD2AB, 0xD2AB}, {0xD2AC, 0xD2AC, 0xD2AC}, + {0xD2AD, 0xD2AD, 0xD2AD}, {0xD2AE, 0xD2AE, 0xD2AE}, + {0xD2AF, 0xD2AF, 0xD2AF}, {0xD2B0, 0xD2B0, 0xD2B0}, + {0xD2B1, 0xD2B1, 0xD2B1}, {0xD2B2, 0xD2B2, 0xD2B2}, + {0xD2B3, 0xD2B3, 0xD2B3}, {0xD2B4, 0xD2B4, 0xD2B4}, + {0xD2B5, 0xD2B5, 0xD2B5}, {0xD2B6, 0xD2B6, 0xD2B6}, + {0xD2B7, 0xD2B7, 0xD2B7}, {0xD2B8, 0xD2B8, 0xD2B8}, + {0xD2B9, 0xD2B9, 0xD2B9}, {0xD2BA, 0xD2BA, 0xD2BA}, + {0xD2BB, 0xD2BB, 0xD2BB}, {0xD2BC, 0xD2BC, 0xD2BC}, + {0xD2BD, 0xD2BD, 0xD2BD}, {0xD2BE, 0xD2BE, 0xD2BE}, + {0xD2BF, 0xD2BF, 0xD2BF}, {0xD2C0, 0xD2C0, 0xD2C0}, + {0xD2C1, 0xD2C1, 0xD2C1}, {0xD2C2, 0xD2C2, 0xD2C2}, + {0xD2C3, 0xD2C3, 0xD2C3}, {0xD2C4, 0xD2C4, 0xD2C4}, + {0xD2C5, 0xD2C5, 0xD2C5}, {0xD2C6, 0xD2C6, 0xD2C6}, + {0xD2C7, 0xD2C7, 0xD2C7}, {0xD2C8, 0xD2C8, 0xD2C8}, + {0xD2C9, 0xD2C9, 0xD2C9}, {0xD2CA, 0xD2CA, 0xD2CA}, + {0xD2CB, 0xD2CB, 0xD2CB}, {0xD2CC, 0xD2CC, 0xD2CC}, + {0xD2CD, 0xD2CD, 0xD2CD}, {0xD2CE, 0xD2CE, 0xD2CE}, + {0xD2CF, 0xD2CF, 0xD2CF}, {0xD2D0, 0xD2D0, 0xD2D0}, + {0xD2D1, 0xD2D1, 0xD2D1}, {0xD2D2, 0xD2D2, 0xD2D2}, + {0xD2D3, 0xD2D3, 0xD2D3}, {0xD2D4, 0xD2D4, 0xD2D4}, + {0xD2D5, 0xD2D5, 0xD2D5}, {0xD2D6, 0xD2D6, 0xD2D6}, + {0xD2D7, 0xD2D7, 0xD2D7}, {0xD2D8, 0xD2D8, 0xD2D8}, + {0xD2D9, 0xD2D9, 0xD2D9}, {0xD2DA, 0xD2DA, 0xD2DA}, + {0xD2DB, 0xD2DB, 0xD2DB}, {0xD2DC, 0xD2DC, 0xD2DC}, + {0xD2DD, 0xD2DD, 0xD2DD}, {0xD2DE, 0xD2DE, 0xD2DE}, + {0xD2DF, 0xD2DF, 0xD2DF}, {0xD2E0, 0xD2E0, 0xD2E0}, + {0xD2E1, 0xD2E1, 0xD2E1}, {0xD2E2, 0xD2E2, 0xD2E2}, + {0xD2E3, 0xD2E3, 0xD2E3}, {0xD2E4, 0xD2E4, 0xD2E4}, + {0xD2E5, 0xD2E5, 0xD2E5}, {0xD2E6, 0xD2E6, 0xD2E6}, + {0xD2E7, 0xD2E7, 0xD2E7}, {0xD2E8, 0xD2E8, 0xD2E8}, + {0xD2E9, 0xD2E9, 0xD2E9}, {0xD2EA, 0xD2EA, 0xD2EA}, + {0xD2EB, 0xD2EB, 0xD2EB}, {0xD2EC, 0xD2EC, 0xD2EC}, + {0xD2ED, 0xD2ED, 0xD2ED}, {0xD2EE, 0xD2EE, 0xD2EE}, + {0xD2EF, 0xD2EF, 0xD2EF}, {0xD2F0, 0xD2F0, 0xD2F0}, + {0xD2F1, 0xD2F1, 0xD2F1}, {0xD2F2, 0xD2F2, 0xD2F2}, + {0xD2F3, 0xD2F3, 0xD2F3}, {0xD2F4, 0xD2F4, 0xD2F4}, + {0xD2F5, 0xD2F5, 0xD2F5}, {0xD2F6, 0xD2F6, 0xD2F6}, + {0xD2F7, 0xD2F7, 0xD2F7}, {0xD2F8, 0xD2F8, 0xD2F8}, + {0xD2F9, 0xD2F9, 0xD2F9}, {0xD2FA, 0xD2FA, 0xD2FA}, + {0xD2FB, 0xD2FB, 0xD2FB}, {0xD2FC, 0xD2FC, 0xD2FC}, + {0xD2FD, 0xD2FD, 0xD2FD}, {0xD2FE, 0xD2FE, 0xD2FE}, + {0xD2FF, 0xD2FF, 0xD2FF}, {0xD300, 0xD300, 0xD300}, + {0xD301, 0xD301, 0xD301}, {0xD302, 0xD302, 0xD302}, + {0xD303, 0xD303, 0xD303}, {0xD304, 0xD304, 0xD304}, + {0xD305, 0xD305, 0xD305}, {0xD306, 0xD306, 0xD306}, + {0xD307, 0xD307, 0xD307}, {0xD308, 0xD308, 0xD308}, + {0xD309, 0xD309, 0xD309}, {0xD30A, 0xD30A, 0xD30A}, + {0xD30B, 0xD30B, 0xD30B}, {0xD30C, 0xD30C, 0xD30C}, + {0xD30D, 0xD30D, 0xD30D}, {0xD30E, 0xD30E, 0xD30E}, + {0xD30F, 0xD30F, 0xD30F}, {0xD310, 0xD310, 0xD310}, + {0xD311, 0xD311, 0xD311}, {0xD312, 0xD312, 0xD312}, + {0xD313, 0xD313, 0xD313}, {0xD314, 0xD314, 0xD314}, + {0xD315, 0xD315, 0xD315}, {0xD316, 0xD316, 0xD316}, + {0xD317, 0xD317, 0xD317}, {0xD318, 0xD318, 0xD318}, + {0xD319, 0xD319, 0xD319}, {0xD31A, 0xD31A, 0xD31A}, + {0xD31B, 0xD31B, 0xD31B}, {0xD31C, 0xD31C, 0xD31C}, + {0xD31D, 0xD31D, 0xD31D}, {0xD31E, 0xD31E, 0xD31E}, + {0xD31F, 0xD31F, 0xD31F}, {0xD320, 0xD320, 0xD320}, + {0xD321, 0xD321, 0xD321}, {0xD322, 0xD322, 0xD322}, + {0xD323, 0xD323, 0xD323}, {0xD324, 0xD324, 0xD324}, + {0xD325, 0xD325, 0xD325}, {0xD326, 0xD326, 0xD326}, + {0xD327, 0xD327, 0xD327}, {0xD328, 0xD328, 0xD328}, + {0xD329, 0xD329, 0xD329}, {0xD32A, 0xD32A, 0xD32A}, + {0xD32B, 0xD32B, 0xD32B}, {0xD32C, 0xD32C, 0xD32C}, + {0xD32D, 0xD32D, 0xD32D}, {0xD32E, 0xD32E, 0xD32E}, + {0xD32F, 0xD32F, 0xD32F}, {0xD330, 0xD330, 0xD330}, + {0xD331, 0xD331, 0xD331}, {0xD332, 0xD332, 0xD332}, + {0xD333, 0xD333, 0xD333}, {0xD334, 0xD334, 0xD334}, + {0xD335, 0xD335, 0xD335}, {0xD336, 0xD336, 0xD336}, + {0xD337, 0xD337, 0xD337}, {0xD338, 0xD338, 0xD338}, + {0xD339, 0xD339, 0xD339}, {0xD33A, 0xD33A, 0xD33A}, + {0xD33B, 0xD33B, 0xD33B}, {0xD33C, 0xD33C, 0xD33C}, + {0xD33D, 0xD33D, 0xD33D}, {0xD33E, 0xD33E, 0xD33E}, + {0xD33F, 0xD33F, 0xD33F}, {0xD340, 0xD340, 0xD340}, + {0xD341, 0xD341, 0xD341}, {0xD342, 0xD342, 0xD342}, + {0xD343, 0xD343, 0xD343}, {0xD344, 0xD344, 0xD344}, + {0xD345, 0xD345, 0xD345}, {0xD346, 0xD346, 0xD346}, + {0xD347, 0xD347, 0xD347}, {0xD348, 0xD348, 0xD348}, + {0xD349, 0xD349, 0xD349}, {0xD34A, 0xD34A, 0xD34A}, + {0xD34B, 0xD34B, 0xD34B}, {0xD34C, 0xD34C, 0xD34C}, + {0xD34D, 0xD34D, 0xD34D}, {0xD34E, 0xD34E, 0xD34E}, + {0xD34F, 0xD34F, 0xD34F}, {0xD350, 0xD350, 0xD350}, + {0xD351, 0xD351, 0xD351}, {0xD352, 0xD352, 0xD352}, + {0xD353, 0xD353, 0xD353}, {0xD354, 0xD354, 0xD354}, + {0xD355, 0xD355, 0xD355}, {0xD356, 0xD356, 0xD356}, + {0xD357, 0xD357, 0xD357}, {0xD358, 0xD358, 0xD358}, + {0xD359, 0xD359, 0xD359}, {0xD35A, 0xD35A, 0xD35A}, + {0xD35B, 0xD35B, 0xD35B}, {0xD35C, 0xD35C, 0xD35C}, + {0xD35D, 0xD35D, 0xD35D}, {0xD35E, 0xD35E, 0xD35E}, + {0xD35F, 0xD35F, 0xD35F}, {0xD360, 0xD360, 0xD360}, + {0xD361, 0xD361, 0xD361}, {0xD362, 0xD362, 0xD362}, + {0xD363, 0xD363, 0xD363}, {0xD364, 0xD364, 0xD364}, + {0xD365, 0xD365, 0xD365}, {0xD366, 0xD366, 0xD366}, + {0xD367, 0xD367, 0xD367}, {0xD368, 0xD368, 0xD368}, + {0xD369, 0xD369, 0xD369}, {0xD36A, 0xD36A, 0xD36A}, + {0xD36B, 0xD36B, 0xD36B}, {0xD36C, 0xD36C, 0xD36C}, + {0xD36D, 0xD36D, 0xD36D}, {0xD36E, 0xD36E, 0xD36E}, + {0xD36F, 0xD36F, 0xD36F}, {0xD370, 0xD370, 0xD370}, + {0xD371, 0xD371, 0xD371}, {0xD372, 0xD372, 0xD372}, + {0xD373, 0xD373, 0xD373}, {0xD374, 0xD374, 0xD374}, + {0xD375, 0xD375, 0xD375}, {0xD376, 0xD376, 0xD376}, + {0xD377, 0xD377, 0xD377}, {0xD378, 0xD378, 0xD378}, + {0xD379, 0xD379, 0xD379}, {0xD37A, 0xD37A, 0xD37A}, + {0xD37B, 0xD37B, 0xD37B}, {0xD37C, 0xD37C, 0xD37C}, + {0xD37D, 0xD37D, 0xD37D}, {0xD37E, 0xD37E, 0xD37E}, + {0xD37F, 0xD37F, 0xD37F}, {0xD380, 0xD380, 0xD380}, + {0xD381, 0xD381, 0xD381}, {0xD382, 0xD382, 0xD382}, + {0xD383, 0xD383, 0xD383}, {0xD384, 0xD384, 0xD384}, + {0xD385, 0xD385, 0xD385}, {0xD386, 0xD386, 0xD386}, + {0xD387, 0xD387, 0xD387}, {0xD388, 0xD388, 0xD388}, + {0xD389, 0xD389, 0xD389}, {0xD38A, 0xD38A, 0xD38A}, + {0xD38B, 0xD38B, 0xD38B}, {0xD38C, 0xD38C, 0xD38C}, + {0xD38D, 0xD38D, 0xD38D}, {0xD38E, 0xD38E, 0xD38E}, + {0xD38F, 0xD38F, 0xD38F}, {0xD390, 0xD390, 0xD390}, + {0xD391, 0xD391, 0xD391}, {0xD392, 0xD392, 0xD392}, + {0xD393, 0xD393, 0xD393}, {0xD394, 0xD394, 0xD394}, + {0xD395, 0xD395, 0xD395}, {0xD396, 0xD396, 0xD396}, + {0xD397, 0xD397, 0xD397}, {0xD398, 0xD398, 0xD398}, + {0xD399, 0xD399, 0xD399}, {0xD39A, 0xD39A, 0xD39A}, + {0xD39B, 0xD39B, 0xD39B}, {0xD39C, 0xD39C, 0xD39C}, + {0xD39D, 0xD39D, 0xD39D}, {0xD39E, 0xD39E, 0xD39E}, + {0xD39F, 0xD39F, 0xD39F}, {0xD3A0, 0xD3A0, 0xD3A0}, + {0xD3A1, 0xD3A1, 0xD3A1}, {0xD3A2, 0xD3A2, 0xD3A2}, + {0xD3A3, 0xD3A3, 0xD3A3}, {0xD3A4, 0xD3A4, 0xD3A4}, + {0xD3A5, 0xD3A5, 0xD3A5}, {0xD3A6, 0xD3A6, 0xD3A6}, + {0xD3A7, 0xD3A7, 0xD3A7}, {0xD3A8, 0xD3A8, 0xD3A8}, + {0xD3A9, 0xD3A9, 0xD3A9}, {0xD3AA, 0xD3AA, 0xD3AA}, + {0xD3AB, 0xD3AB, 0xD3AB}, {0xD3AC, 0xD3AC, 0xD3AC}, + {0xD3AD, 0xD3AD, 0xD3AD}, {0xD3AE, 0xD3AE, 0xD3AE}, + {0xD3AF, 0xD3AF, 0xD3AF}, {0xD3B0, 0xD3B0, 0xD3B0}, + {0xD3B1, 0xD3B1, 0xD3B1}, {0xD3B2, 0xD3B2, 0xD3B2}, + {0xD3B3, 0xD3B3, 0xD3B3}, {0xD3B4, 0xD3B4, 0xD3B4}, + {0xD3B5, 0xD3B5, 0xD3B5}, {0xD3B6, 0xD3B6, 0xD3B6}, + {0xD3B7, 0xD3B7, 0xD3B7}, {0xD3B8, 0xD3B8, 0xD3B8}, + {0xD3B9, 0xD3B9, 0xD3B9}, {0xD3BA, 0xD3BA, 0xD3BA}, + {0xD3BB, 0xD3BB, 0xD3BB}, {0xD3BC, 0xD3BC, 0xD3BC}, + {0xD3BD, 0xD3BD, 0xD3BD}, {0xD3BE, 0xD3BE, 0xD3BE}, + {0xD3BF, 0xD3BF, 0xD3BF}, {0xD3C0, 0xD3C0, 0xD3C0}, + {0xD3C1, 0xD3C1, 0xD3C1}, {0xD3C2, 0xD3C2, 0xD3C2}, + {0xD3C3, 0xD3C3, 0xD3C3}, {0xD3C4, 0xD3C4, 0xD3C4}, + {0xD3C5, 0xD3C5, 0xD3C5}, {0xD3C6, 0xD3C6, 0xD3C6}, + {0xD3C7, 0xD3C7, 0xD3C7}, {0xD3C8, 0xD3C8, 0xD3C8}, + {0xD3C9, 0xD3C9, 0xD3C9}, {0xD3CA, 0xD3CA, 0xD3CA}, + {0xD3CB, 0xD3CB, 0xD3CB}, {0xD3CC, 0xD3CC, 0xD3CC}, + {0xD3CD, 0xD3CD, 0xD3CD}, {0xD3CE, 0xD3CE, 0xD3CE}, + {0xD3CF, 0xD3CF, 0xD3CF}, {0xD3D0, 0xD3D0, 0xD3D0}, + {0xD3D1, 0xD3D1, 0xD3D1}, {0xD3D2, 0xD3D2, 0xD3D2}, + {0xD3D3, 0xD3D3, 0xD3D3}, {0xD3D4, 0xD3D4, 0xD3D4}, + {0xD3D5, 0xD3D5, 0xD3D5}, {0xD3D6, 0xD3D6, 0xD3D6}, + {0xD3D7, 0xD3D7, 0xD3D7}, {0xD3D8, 0xD3D8, 0xD3D8}, + {0xD3D9, 0xD3D9, 0xD3D9}, {0xD3DA, 0xD3DA, 0xD3DA}, + {0xD3DB, 0xD3DB, 0xD3DB}, {0xD3DC, 0xD3DC, 0xD3DC}, + {0xD3DD, 0xD3DD, 0xD3DD}, {0xD3DE, 0xD3DE, 0xD3DE}, + {0xD3DF, 0xD3DF, 0xD3DF}, {0xD3E0, 0xD3E0, 0xD3E0}, + {0xD3E1, 0xD3E1, 0xD3E1}, {0xD3E2, 0xD3E2, 0xD3E2}, + {0xD3E3, 0xD3E3, 0xD3E3}, {0xD3E4, 0xD3E4, 0xD3E4}, + {0xD3E5, 0xD3E5, 0xD3E5}, {0xD3E6, 0xD3E6, 0xD3E6}, + {0xD3E7, 0xD3E7, 0xD3E7}, {0xD3E8, 0xD3E8, 0xD3E8}, + {0xD3E9, 0xD3E9, 0xD3E9}, {0xD3EA, 0xD3EA, 0xD3EA}, + {0xD3EB, 0xD3EB, 0xD3EB}, {0xD3EC, 0xD3EC, 0xD3EC}, + {0xD3ED, 0xD3ED, 0xD3ED}, {0xD3EE, 0xD3EE, 0xD3EE}, + {0xD3EF, 0xD3EF, 0xD3EF}, {0xD3F0, 0xD3F0, 0xD3F0}, + {0xD3F1, 0xD3F1, 0xD3F1}, {0xD3F2, 0xD3F2, 0xD3F2}, + {0xD3F3, 0xD3F3, 0xD3F3}, {0xD3F4, 0xD3F4, 0xD3F4}, + {0xD3F5, 0xD3F5, 0xD3F5}, {0xD3F6, 0xD3F6, 0xD3F6}, + {0xD3F7, 0xD3F7, 0xD3F7}, {0xD3F8, 0xD3F8, 0xD3F8}, + {0xD3F9, 0xD3F9, 0xD3F9}, {0xD3FA, 0xD3FA, 0xD3FA}, + {0xD3FB, 0xD3FB, 0xD3FB}, {0xD3FC, 0xD3FC, 0xD3FC}, + {0xD3FD, 0xD3FD, 0xD3FD}, {0xD3FE, 0xD3FE, 0xD3FE}, + {0xD3FF, 0xD3FF, 0xD3FF}, {0xD400, 0xD400, 0xD400}, + {0xD401, 0xD401, 0xD401}, {0xD402, 0xD402, 0xD402}, + {0xD403, 0xD403, 0xD403}, {0xD404, 0xD404, 0xD404}, + {0xD405, 0xD405, 0xD405}, {0xD406, 0xD406, 0xD406}, + {0xD407, 0xD407, 0xD407}, {0xD408, 0xD408, 0xD408}, + {0xD409, 0xD409, 0xD409}, {0xD40A, 0xD40A, 0xD40A}, + {0xD40B, 0xD40B, 0xD40B}, {0xD40C, 0xD40C, 0xD40C}, + {0xD40D, 0xD40D, 0xD40D}, {0xD40E, 0xD40E, 0xD40E}, + {0xD40F, 0xD40F, 0xD40F}, {0xD410, 0xD410, 0xD410}, + {0xD411, 0xD411, 0xD411}, {0xD412, 0xD412, 0xD412}, + {0xD413, 0xD413, 0xD413}, {0xD414, 0xD414, 0xD414}, + {0xD415, 0xD415, 0xD415}, {0xD416, 0xD416, 0xD416}, + {0xD417, 0xD417, 0xD417}, {0xD418, 0xD418, 0xD418}, + {0xD419, 0xD419, 0xD419}, {0xD41A, 0xD41A, 0xD41A}, + {0xD41B, 0xD41B, 0xD41B}, {0xD41C, 0xD41C, 0xD41C}, + {0xD41D, 0xD41D, 0xD41D}, {0xD41E, 0xD41E, 0xD41E}, + {0xD41F, 0xD41F, 0xD41F}, {0xD420, 0xD420, 0xD420}, + {0xD421, 0xD421, 0xD421}, {0xD422, 0xD422, 0xD422}, + {0xD423, 0xD423, 0xD423}, {0xD424, 0xD424, 0xD424}, + {0xD425, 0xD425, 0xD425}, {0xD426, 0xD426, 0xD426}, + {0xD427, 0xD427, 0xD427}, {0xD428, 0xD428, 0xD428}, + {0xD429, 0xD429, 0xD429}, {0xD42A, 0xD42A, 0xD42A}, + {0xD42B, 0xD42B, 0xD42B}, {0xD42C, 0xD42C, 0xD42C}, + {0xD42D, 0xD42D, 0xD42D}, {0xD42E, 0xD42E, 0xD42E}, + {0xD42F, 0xD42F, 0xD42F}, {0xD430, 0xD430, 0xD430}, + {0xD431, 0xD431, 0xD431}, {0xD432, 0xD432, 0xD432}, + {0xD433, 0xD433, 0xD433}, {0xD434, 0xD434, 0xD434}, + {0xD435, 0xD435, 0xD435}, {0xD436, 0xD436, 0xD436}, + {0xD437, 0xD437, 0xD437}, {0xD438, 0xD438, 0xD438}, + {0xD439, 0xD439, 0xD439}, {0xD43A, 0xD43A, 0xD43A}, + {0xD43B, 0xD43B, 0xD43B}, {0xD43C, 0xD43C, 0xD43C}, + {0xD43D, 0xD43D, 0xD43D}, {0xD43E, 0xD43E, 0xD43E}, + {0xD43F, 0xD43F, 0xD43F}, {0xD440, 0xD440, 0xD440}, + {0xD441, 0xD441, 0xD441}, {0xD442, 0xD442, 0xD442}, + {0xD443, 0xD443, 0xD443}, {0xD444, 0xD444, 0xD444}, + {0xD445, 0xD445, 0xD445}, {0xD446, 0xD446, 0xD446}, + {0xD447, 0xD447, 0xD447}, {0xD448, 0xD448, 0xD448}, + {0xD449, 0xD449, 0xD449}, {0xD44A, 0xD44A, 0xD44A}, + {0xD44B, 0xD44B, 0xD44B}, {0xD44C, 0xD44C, 0xD44C}, + {0xD44D, 0xD44D, 0xD44D}, {0xD44E, 0xD44E, 0xD44E}, + {0xD44F, 0xD44F, 0xD44F}, {0xD450, 0xD450, 0xD450}, + {0xD451, 0xD451, 0xD451}, {0xD452, 0xD452, 0xD452}, + {0xD453, 0xD453, 0xD453}, {0xD454, 0xD454, 0xD454}, + {0xD455, 0xD455, 0xD455}, {0xD456, 0xD456, 0xD456}, + {0xD457, 0xD457, 0xD457}, {0xD458, 0xD458, 0xD458}, + {0xD459, 0xD459, 0xD459}, {0xD45A, 0xD45A, 0xD45A}, + {0xD45B, 0xD45B, 0xD45B}, {0xD45C, 0xD45C, 0xD45C}, + {0xD45D, 0xD45D, 0xD45D}, {0xD45E, 0xD45E, 0xD45E}, + {0xD45F, 0xD45F, 0xD45F}, {0xD460, 0xD460, 0xD460}, + {0xD461, 0xD461, 0xD461}, {0xD462, 0xD462, 0xD462}, + {0xD463, 0xD463, 0xD463}, {0xD464, 0xD464, 0xD464}, + {0xD465, 0xD465, 0xD465}, {0xD466, 0xD466, 0xD466}, + {0xD467, 0xD467, 0xD467}, {0xD468, 0xD468, 0xD468}, + {0xD469, 0xD469, 0xD469}, {0xD46A, 0xD46A, 0xD46A}, + {0xD46B, 0xD46B, 0xD46B}, {0xD46C, 0xD46C, 0xD46C}, + {0xD46D, 0xD46D, 0xD46D}, {0xD46E, 0xD46E, 0xD46E}, + {0xD46F, 0xD46F, 0xD46F}, {0xD470, 0xD470, 0xD470}, + {0xD471, 0xD471, 0xD471}, {0xD472, 0xD472, 0xD472}, + {0xD473, 0xD473, 0xD473}, {0xD474, 0xD474, 0xD474}, + {0xD475, 0xD475, 0xD475}, {0xD476, 0xD476, 0xD476}, + {0xD477, 0xD477, 0xD477}, {0xD478, 0xD478, 0xD478}, + {0xD479, 0xD479, 0xD479}, {0xD47A, 0xD47A, 0xD47A}, + {0xD47B, 0xD47B, 0xD47B}, {0xD47C, 0xD47C, 0xD47C}, + {0xD47D, 0xD47D, 0xD47D}, {0xD47E, 0xD47E, 0xD47E}, + {0xD47F, 0xD47F, 0xD47F}, {0xD480, 0xD480, 0xD480}, + {0xD481, 0xD481, 0xD481}, {0xD482, 0xD482, 0xD482}, + {0xD483, 0xD483, 0xD483}, {0xD484, 0xD484, 0xD484}, + {0xD485, 0xD485, 0xD485}, {0xD486, 0xD486, 0xD486}, + {0xD487, 0xD487, 0xD487}, {0xD488, 0xD488, 0xD488}, + {0xD489, 0xD489, 0xD489}, {0xD48A, 0xD48A, 0xD48A}, + {0xD48B, 0xD48B, 0xD48B}, {0xD48C, 0xD48C, 0xD48C}, + {0xD48D, 0xD48D, 0xD48D}, {0xD48E, 0xD48E, 0xD48E}, + {0xD48F, 0xD48F, 0xD48F}, {0xD490, 0xD490, 0xD490}, + {0xD491, 0xD491, 0xD491}, {0xD492, 0xD492, 0xD492}, + {0xD493, 0xD493, 0xD493}, {0xD494, 0xD494, 0xD494}, + {0xD495, 0xD495, 0xD495}, {0xD496, 0xD496, 0xD496}, + {0xD497, 0xD497, 0xD497}, {0xD498, 0xD498, 0xD498}, + {0xD499, 0xD499, 0xD499}, {0xD49A, 0xD49A, 0xD49A}, + {0xD49B, 0xD49B, 0xD49B}, {0xD49C, 0xD49C, 0xD49C}, + {0xD49D, 0xD49D, 0xD49D}, {0xD49E, 0xD49E, 0xD49E}, + {0xD49F, 0xD49F, 0xD49F}, {0xD4A0, 0xD4A0, 0xD4A0}, + {0xD4A1, 0xD4A1, 0xD4A1}, {0xD4A2, 0xD4A2, 0xD4A2}, + {0xD4A3, 0xD4A3, 0xD4A3}, {0xD4A4, 0xD4A4, 0xD4A4}, + {0xD4A5, 0xD4A5, 0xD4A5}, {0xD4A6, 0xD4A6, 0xD4A6}, + {0xD4A7, 0xD4A7, 0xD4A7}, {0xD4A8, 0xD4A8, 0xD4A8}, + {0xD4A9, 0xD4A9, 0xD4A9}, {0xD4AA, 0xD4AA, 0xD4AA}, + {0xD4AB, 0xD4AB, 0xD4AB}, {0xD4AC, 0xD4AC, 0xD4AC}, + {0xD4AD, 0xD4AD, 0xD4AD}, {0xD4AE, 0xD4AE, 0xD4AE}, + {0xD4AF, 0xD4AF, 0xD4AF}, {0xD4B0, 0xD4B0, 0xD4B0}, + {0xD4B1, 0xD4B1, 0xD4B1}, {0xD4B2, 0xD4B2, 0xD4B2}, + {0xD4B3, 0xD4B3, 0xD4B3}, {0xD4B4, 0xD4B4, 0xD4B4}, + {0xD4B5, 0xD4B5, 0xD4B5}, {0xD4B6, 0xD4B6, 0xD4B6}, + {0xD4B7, 0xD4B7, 0xD4B7}, {0xD4B8, 0xD4B8, 0xD4B8}, + {0xD4B9, 0xD4B9, 0xD4B9}, {0xD4BA, 0xD4BA, 0xD4BA}, + {0xD4BB, 0xD4BB, 0xD4BB}, {0xD4BC, 0xD4BC, 0xD4BC}, + {0xD4BD, 0xD4BD, 0xD4BD}, {0xD4BE, 0xD4BE, 0xD4BE}, + {0xD4BF, 0xD4BF, 0xD4BF}, {0xD4C0, 0xD4C0, 0xD4C0}, + {0xD4C1, 0xD4C1, 0xD4C1}, {0xD4C2, 0xD4C2, 0xD4C2}, + {0xD4C3, 0xD4C3, 0xD4C3}, {0xD4C4, 0xD4C4, 0xD4C4}, + {0xD4C5, 0xD4C5, 0xD4C5}, {0xD4C6, 0xD4C6, 0xD4C6}, + {0xD4C7, 0xD4C7, 0xD4C7}, {0xD4C8, 0xD4C8, 0xD4C8}, + {0xD4C9, 0xD4C9, 0xD4C9}, {0xD4CA, 0xD4CA, 0xD4CA}, + {0xD4CB, 0xD4CB, 0xD4CB}, {0xD4CC, 0xD4CC, 0xD4CC}, + {0xD4CD, 0xD4CD, 0xD4CD}, {0xD4CE, 0xD4CE, 0xD4CE}, + {0xD4CF, 0xD4CF, 0xD4CF}, {0xD4D0, 0xD4D0, 0xD4D0}, + {0xD4D1, 0xD4D1, 0xD4D1}, {0xD4D2, 0xD4D2, 0xD4D2}, + {0xD4D3, 0xD4D3, 0xD4D3}, {0xD4D4, 0xD4D4, 0xD4D4}, + {0xD4D5, 0xD4D5, 0xD4D5}, {0xD4D6, 0xD4D6, 0xD4D6}, + {0xD4D7, 0xD4D7, 0xD4D7}, {0xD4D8, 0xD4D8, 0xD4D8}, + {0xD4D9, 0xD4D9, 0xD4D9}, {0xD4DA, 0xD4DA, 0xD4DA}, + {0xD4DB, 0xD4DB, 0xD4DB}, {0xD4DC, 0xD4DC, 0xD4DC}, + {0xD4DD, 0xD4DD, 0xD4DD}, {0xD4DE, 0xD4DE, 0xD4DE}, + {0xD4DF, 0xD4DF, 0xD4DF}, {0xD4E0, 0xD4E0, 0xD4E0}, + {0xD4E1, 0xD4E1, 0xD4E1}, {0xD4E2, 0xD4E2, 0xD4E2}, + {0xD4E3, 0xD4E3, 0xD4E3}, {0xD4E4, 0xD4E4, 0xD4E4}, + {0xD4E5, 0xD4E5, 0xD4E5}, {0xD4E6, 0xD4E6, 0xD4E6}, + {0xD4E7, 0xD4E7, 0xD4E7}, {0xD4E8, 0xD4E8, 0xD4E8}, + {0xD4E9, 0xD4E9, 0xD4E9}, {0xD4EA, 0xD4EA, 0xD4EA}, + {0xD4EB, 0xD4EB, 0xD4EB}, {0xD4EC, 0xD4EC, 0xD4EC}, + {0xD4ED, 0xD4ED, 0xD4ED}, {0xD4EE, 0xD4EE, 0xD4EE}, + {0xD4EF, 0xD4EF, 0xD4EF}, {0xD4F0, 0xD4F0, 0xD4F0}, + {0xD4F1, 0xD4F1, 0xD4F1}, {0xD4F2, 0xD4F2, 0xD4F2}, + {0xD4F3, 0xD4F3, 0xD4F3}, {0xD4F4, 0xD4F4, 0xD4F4}, + {0xD4F5, 0xD4F5, 0xD4F5}, {0xD4F6, 0xD4F6, 0xD4F6}, + {0xD4F7, 0xD4F7, 0xD4F7}, {0xD4F8, 0xD4F8, 0xD4F8}, + {0xD4F9, 0xD4F9, 0xD4F9}, {0xD4FA, 0xD4FA, 0xD4FA}, + {0xD4FB, 0xD4FB, 0xD4FB}, {0xD4FC, 0xD4FC, 0xD4FC}, + {0xD4FD, 0xD4FD, 0xD4FD}, {0xD4FE, 0xD4FE, 0xD4FE}, + {0xD4FF, 0xD4FF, 0xD4FF}, {0xD500, 0xD500, 0xD500}, + {0xD501, 0xD501, 0xD501}, {0xD502, 0xD502, 0xD502}, + {0xD503, 0xD503, 0xD503}, {0xD504, 0xD504, 0xD504}, + {0xD505, 0xD505, 0xD505}, {0xD506, 0xD506, 0xD506}, + {0xD507, 0xD507, 0xD507}, {0xD508, 0xD508, 0xD508}, + {0xD509, 0xD509, 0xD509}, {0xD50A, 0xD50A, 0xD50A}, + {0xD50B, 0xD50B, 0xD50B}, {0xD50C, 0xD50C, 0xD50C}, + {0xD50D, 0xD50D, 0xD50D}, {0xD50E, 0xD50E, 0xD50E}, + {0xD50F, 0xD50F, 0xD50F}, {0xD510, 0xD510, 0xD510}, + {0xD511, 0xD511, 0xD511}, {0xD512, 0xD512, 0xD512}, + {0xD513, 0xD513, 0xD513}, {0xD514, 0xD514, 0xD514}, + {0xD515, 0xD515, 0xD515}, {0xD516, 0xD516, 0xD516}, + {0xD517, 0xD517, 0xD517}, {0xD518, 0xD518, 0xD518}, + {0xD519, 0xD519, 0xD519}, {0xD51A, 0xD51A, 0xD51A}, + {0xD51B, 0xD51B, 0xD51B}, {0xD51C, 0xD51C, 0xD51C}, + {0xD51D, 0xD51D, 0xD51D}, {0xD51E, 0xD51E, 0xD51E}, + {0xD51F, 0xD51F, 0xD51F}, {0xD520, 0xD520, 0xD520}, + {0xD521, 0xD521, 0xD521}, {0xD522, 0xD522, 0xD522}, + {0xD523, 0xD523, 0xD523}, {0xD524, 0xD524, 0xD524}, + {0xD525, 0xD525, 0xD525}, {0xD526, 0xD526, 0xD526}, + {0xD527, 0xD527, 0xD527}, {0xD528, 0xD528, 0xD528}, + {0xD529, 0xD529, 0xD529}, {0xD52A, 0xD52A, 0xD52A}, + {0xD52B, 0xD52B, 0xD52B}, {0xD52C, 0xD52C, 0xD52C}, + {0xD52D, 0xD52D, 0xD52D}, {0xD52E, 0xD52E, 0xD52E}, + {0xD52F, 0xD52F, 0xD52F}, {0xD530, 0xD530, 0xD530}, + {0xD531, 0xD531, 0xD531}, {0xD532, 0xD532, 0xD532}, + {0xD533, 0xD533, 0xD533}, {0xD534, 0xD534, 0xD534}, + {0xD535, 0xD535, 0xD535}, {0xD536, 0xD536, 0xD536}, + {0xD537, 0xD537, 0xD537}, {0xD538, 0xD538, 0xD538}, + {0xD539, 0xD539, 0xD539}, {0xD53A, 0xD53A, 0xD53A}, + {0xD53B, 0xD53B, 0xD53B}, {0xD53C, 0xD53C, 0xD53C}, + {0xD53D, 0xD53D, 0xD53D}, {0xD53E, 0xD53E, 0xD53E}, + {0xD53F, 0xD53F, 0xD53F}, {0xD540, 0xD540, 0xD540}, + {0xD541, 0xD541, 0xD541}, {0xD542, 0xD542, 0xD542}, + {0xD543, 0xD543, 0xD543}, {0xD544, 0xD544, 0xD544}, + {0xD545, 0xD545, 0xD545}, {0xD546, 0xD546, 0xD546}, + {0xD547, 0xD547, 0xD547}, {0xD548, 0xD548, 0xD548}, + {0xD549, 0xD549, 0xD549}, {0xD54A, 0xD54A, 0xD54A}, + {0xD54B, 0xD54B, 0xD54B}, {0xD54C, 0xD54C, 0xD54C}, + {0xD54D, 0xD54D, 0xD54D}, {0xD54E, 0xD54E, 0xD54E}, + {0xD54F, 0xD54F, 0xD54F}, {0xD550, 0xD550, 0xD550}, + {0xD551, 0xD551, 0xD551}, {0xD552, 0xD552, 0xD552}, + {0xD553, 0xD553, 0xD553}, {0xD554, 0xD554, 0xD554}, + {0xD555, 0xD555, 0xD555}, {0xD556, 0xD556, 0xD556}, + {0xD557, 0xD557, 0xD557}, {0xD558, 0xD558, 0xD558}, + {0xD559, 0xD559, 0xD559}, {0xD55A, 0xD55A, 0xD55A}, + {0xD55B, 0xD55B, 0xD55B}, {0xD55C, 0xD55C, 0xD55C}, + {0xD55D, 0xD55D, 0xD55D}, {0xD55E, 0xD55E, 0xD55E}, + {0xD55F, 0xD55F, 0xD55F}, {0xD560, 0xD560, 0xD560}, + {0xD561, 0xD561, 0xD561}, {0xD562, 0xD562, 0xD562}, + {0xD563, 0xD563, 0xD563}, {0xD564, 0xD564, 0xD564}, + {0xD565, 0xD565, 0xD565}, {0xD566, 0xD566, 0xD566}, + {0xD567, 0xD567, 0xD567}, {0xD568, 0xD568, 0xD568}, + {0xD569, 0xD569, 0xD569}, {0xD56A, 0xD56A, 0xD56A}, + {0xD56B, 0xD56B, 0xD56B}, {0xD56C, 0xD56C, 0xD56C}, + {0xD56D, 0xD56D, 0xD56D}, {0xD56E, 0xD56E, 0xD56E}, + {0xD56F, 0xD56F, 0xD56F}, {0xD570, 0xD570, 0xD570}, + {0xD571, 0xD571, 0xD571}, {0xD572, 0xD572, 0xD572}, + {0xD573, 0xD573, 0xD573}, {0xD574, 0xD574, 0xD574}, + {0xD575, 0xD575, 0xD575}, {0xD576, 0xD576, 0xD576}, + {0xD577, 0xD577, 0xD577}, {0xD578, 0xD578, 0xD578}, + {0xD579, 0xD579, 0xD579}, {0xD57A, 0xD57A, 0xD57A}, + {0xD57B, 0xD57B, 0xD57B}, {0xD57C, 0xD57C, 0xD57C}, + {0xD57D, 0xD57D, 0xD57D}, {0xD57E, 0xD57E, 0xD57E}, + {0xD57F, 0xD57F, 0xD57F}, {0xD580, 0xD580, 0xD580}, + {0xD581, 0xD581, 0xD581}, {0xD582, 0xD582, 0xD582}, + {0xD583, 0xD583, 0xD583}, {0xD584, 0xD584, 0xD584}, + {0xD585, 0xD585, 0xD585}, {0xD586, 0xD586, 0xD586}, + {0xD587, 0xD587, 0xD587}, {0xD588, 0xD588, 0xD588}, + {0xD589, 0xD589, 0xD589}, {0xD58A, 0xD58A, 0xD58A}, + {0xD58B, 0xD58B, 0xD58B}, {0xD58C, 0xD58C, 0xD58C}, + {0xD58D, 0xD58D, 0xD58D}, {0xD58E, 0xD58E, 0xD58E}, + {0xD58F, 0xD58F, 0xD58F}, {0xD590, 0xD590, 0xD590}, + {0xD591, 0xD591, 0xD591}, {0xD592, 0xD592, 0xD592}, + {0xD593, 0xD593, 0xD593}, {0xD594, 0xD594, 0xD594}, + {0xD595, 0xD595, 0xD595}, {0xD596, 0xD596, 0xD596}, + {0xD597, 0xD597, 0xD597}, {0xD598, 0xD598, 0xD598}, + {0xD599, 0xD599, 0xD599}, {0xD59A, 0xD59A, 0xD59A}, + {0xD59B, 0xD59B, 0xD59B}, {0xD59C, 0xD59C, 0xD59C}, + {0xD59D, 0xD59D, 0xD59D}, {0xD59E, 0xD59E, 0xD59E}, + {0xD59F, 0xD59F, 0xD59F}, {0xD5A0, 0xD5A0, 0xD5A0}, + {0xD5A1, 0xD5A1, 0xD5A1}, {0xD5A2, 0xD5A2, 0xD5A2}, + {0xD5A3, 0xD5A3, 0xD5A3}, {0xD5A4, 0xD5A4, 0xD5A4}, + {0xD5A5, 0xD5A5, 0xD5A5}, {0xD5A6, 0xD5A6, 0xD5A6}, + {0xD5A7, 0xD5A7, 0xD5A7}, {0xD5A8, 0xD5A8, 0xD5A8}, + {0xD5A9, 0xD5A9, 0xD5A9}, {0xD5AA, 0xD5AA, 0xD5AA}, + {0xD5AB, 0xD5AB, 0xD5AB}, {0xD5AC, 0xD5AC, 0xD5AC}, + {0xD5AD, 0xD5AD, 0xD5AD}, {0xD5AE, 0xD5AE, 0xD5AE}, + {0xD5AF, 0xD5AF, 0xD5AF}, {0xD5B0, 0xD5B0, 0xD5B0}, + {0xD5B1, 0xD5B1, 0xD5B1}, {0xD5B2, 0xD5B2, 0xD5B2}, + {0xD5B3, 0xD5B3, 0xD5B3}, {0xD5B4, 0xD5B4, 0xD5B4}, + {0xD5B5, 0xD5B5, 0xD5B5}, {0xD5B6, 0xD5B6, 0xD5B6}, + {0xD5B7, 0xD5B7, 0xD5B7}, {0xD5B8, 0xD5B8, 0xD5B8}, + {0xD5B9, 0xD5B9, 0xD5B9}, {0xD5BA, 0xD5BA, 0xD5BA}, + {0xD5BB, 0xD5BB, 0xD5BB}, {0xD5BC, 0xD5BC, 0xD5BC}, + {0xD5BD, 0xD5BD, 0xD5BD}, {0xD5BE, 0xD5BE, 0xD5BE}, + {0xD5BF, 0xD5BF, 0xD5BF}, {0xD5C0, 0xD5C0, 0xD5C0}, + {0xD5C1, 0xD5C1, 0xD5C1}, {0xD5C2, 0xD5C2, 0xD5C2}, + {0xD5C3, 0xD5C3, 0xD5C3}, {0xD5C4, 0xD5C4, 0xD5C4}, + {0xD5C5, 0xD5C5, 0xD5C5}, {0xD5C6, 0xD5C6, 0xD5C6}, + {0xD5C7, 0xD5C7, 0xD5C7}, {0xD5C8, 0xD5C8, 0xD5C8}, + {0xD5C9, 0xD5C9, 0xD5C9}, {0xD5CA, 0xD5CA, 0xD5CA}, + {0xD5CB, 0xD5CB, 0xD5CB}, {0xD5CC, 0xD5CC, 0xD5CC}, + {0xD5CD, 0xD5CD, 0xD5CD}, {0xD5CE, 0xD5CE, 0xD5CE}, + {0xD5CF, 0xD5CF, 0xD5CF}, {0xD5D0, 0xD5D0, 0xD5D0}, + {0xD5D1, 0xD5D1, 0xD5D1}, {0xD5D2, 0xD5D2, 0xD5D2}, + {0xD5D3, 0xD5D3, 0xD5D3}, {0xD5D4, 0xD5D4, 0xD5D4}, + {0xD5D5, 0xD5D5, 0xD5D5}, {0xD5D6, 0xD5D6, 0xD5D6}, + {0xD5D7, 0xD5D7, 0xD5D7}, {0xD5D8, 0xD5D8, 0xD5D8}, + {0xD5D9, 0xD5D9, 0xD5D9}, {0xD5DA, 0xD5DA, 0xD5DA}, + {0xD5DB, 0xD5DB, 0xD5DB}, {0xD5DC, 0xD5DC, 0xD5DC}, + {0xD5DD, 0xD5DD, 0xD5DD}, {0xD5DE, 0xD5DE, 0xD5DE}, + {0xD5DF, 0xD5DF, 0xD5DF}, {0xD5E0, 0xD5E0, 0xD5E0}, + {0xD5E1, 0xD5E1, 0xD5E1}, {0xD5E2, 0xD5E2, 0xD5E2}, + {0xD5E3, 0xD5E3, 0xD5E3}, {0xD5E4, 0xD5E4, 0xD5E4}, + {0xD5E5, 0xD5E5, 0xD5E5}, {0xD5E6, 0xD5E6, 0xD5E6}, + {0xD5E7, 0xD5E7, 0xD5E7}, {0xD5E8, 0xD5E8, 0xD5E8}, + {0xD5E9, 0xD5E9, 0xD5E9}, {0xD5EA, 0xD5EA, 0xD5EA}, + {0xD5EB, 0xD5EB, 0xD5EB}, {0xD5EC, 0xD5EC, 0xD5EC}, + {0xD5ED, 0xD5ED, 0xD5ED}, {0xD5EE, 0xD5EE, 0xD5EE}, + {0xD5EF, 0xD5EF, 0xD5EF}, {0xD5F0, 0xD5F0, 0xD5F0}, + {0xD5F1, 0xD5F1, 0xD5F1}, {0xD5F2, 0xD5F2, 0xD5F2}, + {0xD5F3, 0xD5F3, 0xD5F3}, {0xD5F4, 0xD5F4, 0xD5F4}, + {0xD5F5, 0xD5F5, 0xD5F5}, {0xD5F6, 0xD5F6, 0xD5F6}, + {0xD5F7, 0xD5F7, 0xD5F7}, {0xD5F8, 0xD5F8, 0xD5F8}, + {0xD5F9, 0xD5F9, 0xD5F9}, {0xD5FA, 0xD5FA, 0xD5FA}, + {0xD5FB, 0xD5FB, 0xD5FB}, {0xD5FC, 0xD5FC, 0xD5FC}, + {0xD5FD, 0xD5FD, 0xD5FD}, {0xD5FE, 0xD5FE, 0xD5FE}, + {0xD5FF, 0xD5FF, 0xD5FF}, {0xD600, 0xD600, 0xD600}, + {0xD601, 0xD601, 0xD601}, {0xD602, 0xD602, 0xD602}, + {0xD603, 0xD603, 0xD603}, {0xD604, 0xD604, 0xD604}, + {0xD605, 0xD605, 0xD605}, {0xD606, 0xD606, 0xD606}, + {0xD607, 0xD607, 0xD607}, {0xD608, 0xD608, 0xD608}, + {0xD609, 0xD609, 0xD609}, {0xD60A, 0xD60A, 0xD60A}, + {0xD60B, 0xD60B, 0xD60B}, {0xD60C, 0xD60C, 0xD60C}, + {0xD60D, 0xD60D, 0xD60D}, {0xD60E, 0xD60E, 0xD60E}, + {0xD60F, 0xD60F, 0xD60F}, {0xD610, 0xD610, 0xD610}, + {0xD611, 0xD611, 0xD611}, {0xD612, 0xD612, 0xD612}, + {0xD613, 0xD613, 0xD613}, {0xD614, 0xD614, 0xD614}, + {0xD615, 0xD615, 0xD615}, {0xD616, 0xD616, 0xD616}, + {0xD617, 0xD617, 0xD617}, {0xD618, 0xD618, 0xD618}, + {0xD619, 0xD619, 0xD619}, {0xD61A, 0xD61A, 0xD61A}, + {0xD61B, 0xD61B, 0xD61B}, {0xD61C, 0xD61C, 0xD61C}, + {0xD61D, 0xD61D, 0xD61D}, {0xD61E, 0xD61E, 0xD61E}, + {0xD61F, 0xD61F, 0xD61F}, {0xD620, 0xD620, 0xD620}, + {0xD621, 0xD621, 0xD621}, {0xD622, 0xD622, 0xD622}, + {0xD623, 0xD623, 0xD623}, {0xD624, 0xD624, 0xD624}, + {0xD625, 0xD625, 0xD625}, {0xD626, 0xD626, 0xD626}, + {0xD627, 0xD627, 0xD627}, {0xD628, 0xD628, 0xD628}, + {0xD629, 0xD629, 0xD629}, {0xD62A, 0xD62A, 0xD62A}, + {0xD62B, 0xD62B, 0xD62B}, {0xD62C, 0xD62C, 0xD62C}, + {0xD62D, 0xD62D, 0xD62D}, {0xD62E, 0xD62E, 0xD62E}, + {0xD62F, 0xD62F, 0xD62F}, {0xD630, 0xD630, 0xD630}, + {0xD631, 0xD631, 0xD631}, {0xD632, 0xD632, 0xD632}, + {0xD633, 0xD633, 0xD633}, {0xD634, 0xD634, 0xD634}, + {0xD635, 0xD635, 0xD635}, {0xD636, 0xD636, 0xD636}, + {0xD637, 0xD637, 0xD637}, {0xD638, 0xD638, 0xD638}, + {0xD639, 0xD639, 0xD639}, {0xD63A, 0xD63A, 0xD63A}, + {0xD63B, 0xD63B, 0xD63B}, {0xD63C, 0xD63C, 0xD63C}, + {0xD63D, 0xD63D, 0xD63D}, {0xD63E, 0xD63E, 0xD63E}, + {0xD63F, 0xD63F, 0xD63F}, {0xD640, 0xD640, 0xD640}, + {0xD641, 0xD641, 0xD641}, {0xD642, 0xD642, 0xD642}, + {0xD643, 0xD643, 0xD643}, {0xD644, 0xD644, 0xD644}, + {0xD645, 0xD645, 0xD645}, {0xD646, 0xD646, 0xD646}, + {0xD647, 0xD647, 0xD647}, {0xD648, 0xD648, 0xD648}, + {0xD649, 0xD649, 0xD649}, {0xD64A, 0xD64A, 0xD64A}, + {0xD64B, 0xD64B, 0xD64B}, {0xD64C, 0xD64C, 0xD64C}, + {0xD64D, 0xD64D, 0xD64D}, {0xD64E, 0xD64E, 0xD64E}, + {0xD64F, 0xD64F, 0xD64F}, {0xD650, 0xD650, 0xD650}, + {0xD651, 0xD651, 0xD651}, {0xD652, 0xD652, 0xD652}, + {0xD653, 0xD653, 0xD653}, {0xD654, 0xD654, 0xD654}, + {0xD655, 0xD655, 0xD655}, {0xD656, 0xD656, 0xD656}, + {0xD657, 0xD657, 0xD657}, {0xD658, 0xD658, 0xD658}, + {0xD659, 0xD659, 0xD659}, {0xD65A, 0xD65A, 0xD65A}, + {0xD65B, 0xD65B, 0xD65B}, {0xD65C, 0xD65C, 0xD65C}, + {0xD65D, 0xD65D, 0xD65D}, {0xD65E, 0xD65E, 0xD65E}, + {0xD65F, 0xD65F, 0xD65F}, {0xD660, 0xD660, 0xD660}, + {0xD661, 0xD661, 0xD661}, {0xD662, 0xD662, 0xD662}, + {0xD663, 0xD663, 0xD663}, {0xD664, 0xD664, 0xD664}, + {0xD665, 0xD665, 0xD665}, {0xD666, 0xD666, 0xD666}, + {0xD667, 0xD667, 0xD667}, {0xD668, 0xD668, 0xD668}, + {0xD669, 0xD669, 0xD669}, {0xD66A, 0xD66A, 0xD66A}, + {0xD66B, 0xD66B, 0xD66B}, {0xD66C, 0xD66C, 0xD66C}, + {0xD66D, 0xD66D, 0xD66D}, {0xD66E, 0xD66E, 0xD66E}, + {0xD66F, 0xD66F, 0xD66F}, {0xD670, 0xD670, 0xD670}, + {0xD671, 0xD671, 0xD671}, {0xD672, 0xD672, 0xD672}, + {0xD673, 0xD673, 0xD673}, {0xD674, 0xD674, 0xD674}, + {0xD675, 0xD675, 0xD675}, {0xD676, 0xD676, 0xD676}, + {0xD677, 0xD677, 0xD677}, {0xD678, 0xD678, 0xD678}, + {0xD679, 0xD679, 0xD679}, {0xD67A, 0xD67A, 0xD67A}, + {0xD67B, 0xD67B, 0xD67B}, {0xD67C, 0xD67C, 0xD67C}, + {0xD67D, 0xD67D, 0xD67D}, {0xD67E, 0xD67E, 0xD67E}, + {0xD67F, 0xD67F, 0xD67F}, {0xD680, 0xD680, 0xD680}, + {0xD681, 0xD681, 0xD681}, {0xD682, 0xD682, 0xD682}, + {0xD683, 0xD683, 0xD683}, {0xD684, 0xD684, 0xD684}, + {0xD685, 0xD685, 0xD685}, {0xD686, 0xD686, 0xD686}, + {0xD687, 0xD687, 0xD687}, {0xD688, 0xD688, 0xD688}, + {0xD689, 0xD689, 0xD689}, {0xD68A, 0xD68A, 0xD68A}, + {0xD68B, 0xD68B, 0xD68B}, {0xD68C, 0xD68C, 0xD68C}, + {0xD68D, 0xD68D, 0xD68D}, {0xD68E, 0xD68E, 0xD68E}, + {0xD68F, 0xD68F, 0xD68F}, {0xD690, 0xD690, 0xD690}, + {0xD691, 0xD691, 0xD691}, {0xD692, 0xD692, 0xD692}, + {0xD693, 0xD693, 0xD693}, {0xD694, 0xD694, 0xD694}, + {0xD695, 0xD695, 0xD695}, {0xD696, 0xD696, 0xD696}, + {0xD697, 0xD697, 0xD697}, {0xD698, 0xD698, 0xD698}, + {0xD699, 0xD699, 0xD699}, {0xD69A, 0xD69A, 0xD69A}, + {0xD69B, 0xD69B, 0xD69B}, {0xD69C, 0xD69C, 0xD69C}, + {0xD69D, 0xD69D, 0xD69D}, {0xD69E, 0xD69E, 0xD69E}, + {0xD69F, 0xD69F, 0xD69F}, {0xD6A0, 0xD6A0, 0xD6A0}, + {0xD6A1, 0xD6A1, 0xD6A1}, {0xD6A2, 0xD6A2, 0xD6A2}, + {0xD6A3, 0xD6A3, 0xD6A3}, {0xD6A4, 0xD6A4, 0xD6A4}, + {0xD6A5, 0xD6A5, 0xD6A5}, {0xD6A6, 0xD6A6, 0xD6A6}, + {0xD6A7, 0xD6A7, 0xD6A7}, {0xD6A8, 0xD6A8, 0xD6A8}, + {0xD6A9, 0xD6A9, 0xD6A9}, {0xD6AA, 0xD6AA, 0xD6AA}, + {0xD6AB, 0xD6AB, 0xD6AB}, {0xD6AC, 0xD6AC, 0xD6AC}, + {0xD6AD, 0xD6AD, 0xD6AD}, {0xD6AE, 0xD6AE, 0xD6AE}, + {0xD6AF, 0xD6AF, 0xD6AF}, {0xD6B0, 0xD6B0, 0xD6B0}, + {0xD6B1, 0xD6B1, 0xD6B1}, {0xD6B2, 0xD6B2, 0xD6B2}, + {0xD6B3, 0xD6B3, 0xD6B3}, {0xD6B4, 0xD6B4, 0xD6B4}, + {0xD6B5, 0xD6B5, 0xD6B5}, {0xD6B6, 0xD6B6, 0xD6B6}, + {0xD6B7, 0xD6B7, 0xD6B7}, {0xD6B8, 0xD6B8, 0xD6B8}, + {0xD6B9, 0xD6B9, 0xD6B9}, {0xD6BA, 0xD6BA, 0xD6BA}, + {0xD6BB, 0xD6BB, 0xD6BB}, {0xD6BC, 0xD6BC, 0xD6BC}, + {0xD6BD, 0xD6BD, 0xD6BD}, {0xD6BE, 0xD6BE, 0xD6BE}, + {0xD6BF, 0xD6BF, 0xD6BF}, {0xD6C0, 0xD6C0, 0xD6C0}, + {0xD6C1, 0xD6C1, 0xD6C1}, {0xD6C2, 0xD6C2, 0xD6C2}, + {0xD6C3, 0xD6C3, 0xD6C3}, {0xD6C4, 0xD6C4, 0xD6C4}, + {0xD6C5, 0xD6C5, 0xD6C5}, {0xD6C6, 0xD6C6, 0xD6C6}, + {0xD6C7, 0xD6C7, 0xD6C7}, {0xD6C8, 0xD6C8, 0xD6C8}, + {0xD6C9, 0xD6C9, 0xD6C9}, {0xD6CA, 0xD6CA, 0xD6CA}, + {0xD6CB, 0xD6CB, 0xD6CB}, {0xD6CC, 0xD6CC, 0xD6CC}, + {0xD6CD, 0xD6CD, 0xD6CD}, {0xD6CE, 0xD6CE, 0xD6CE}, + {0xD6CF, 0xD6CF, 0xD6CF}, {0xD6D0, 0xD6D0, 0xD6D0}, + {0xD6D1, 0xD6D1, 0xD6D1}, {0xD6D2, 0xD6D2, 0xD6D2}, + {0xD6D3, 0xD6D3, 0xD6D3}, {0xD6D4, 0xD6D4, 0xD6D4}, + {0xD6D5, 0xD6D5, 0xD6D5}, {0xD6D6, 0xD6D6, 0xD6D6}, + {0xD6D7, 0xD6D7, 0xD6D7}, {0xD6D8, 0xD6D8, 0xD6D8}, + {0xD6D9, 0xD6D9, 0xD6D9}, {0xD6DA, 0xD6DA, 0xD6DA}, + {0xD6DB, 0xD6DB, 0xD6DB}, {0xD6DC, 0xD6DC, 0xD6DC}, + {0xD6DD, 0xD6DD, 0xD6DD}, {0xD6DE, 0xD6DE, 0xD6DE}, + {0xD6DF, 0xD6DF, 0xD6DF}, {0xD6E0, 0xD6E0, 0xD6E0}, + {0xD6E1, 0xD6E1, 0xD6E1}, {0xD6E2, 0xD6E2, 0xD6E2}, + {0xD6E3, 0xD6E3, 0xD6E3}, {0xD6E4, 0xD6E4, 0xD6E4}, + {0xD6E5, 0xD6E5, 0xD6E5}, {0xD6E6, 0xD6E6, 0xD6E6}, + {0xD6E7, 0xD6E7, 0xD6E7}, {0xD6E8, 0xD6E8, 0xD6E8}, + {0xD6E9, 0xD6E9, 0xD6E9}, {0xD6EA, 0xD6EA, 0xD6EA}, + {0xD6EB, 0xD6EB, 0xD6EB}, {0xD6EC, 0xD6EC, 0xD6EC}, + {0xD6ED, 0xD6ED, 0xD6ED}, {0xD6EE, 0xD6EE, 0xD6EE}, + {0xD6EF, 0xD6EF, 0xD6EF}, {0xD6F0, 0xD6F0, 0xD6F0}, + {0xD6F1, 0xD6F1, 0xD6F1}, {0xD6F2, 0xD6F2, 0xD6F2}, + {0xD6F3, 0xD6F3, 0xD6F3}, {0xD6F4, 0xD6F4, 0xD6F4}, + {0xD6F5, 0xD6F5, 0xD6F5}, {0xD6F6, 0xD6F6, 0xD6F6}, + {0xD6F7, 0xD6F7, 0xD6F7}, {0xD6F8, 0xD6F8, 0xD6F8}, + {0xD6F9, 0xD6F9, 0xD6F9}, {0xD6FA, 0xD6FA, 0xD6FA}, + {0xD6FB, 0xD6FB, 0xD6FB}, {0xD6FC, 0xD6FC, 0xD6FC}, + {0xD6FD, 0xD6FD, 0xD6FD}, {0xD6FE, 0xD6FE, 0xD6FE}, + {0xD6FF, 0xD6FF, 0xD6FF}, {0xD700, 0xD700, 0xD700}, + {0xD701, 0xD701, 0xD701}, {0xD702, 0xD702, 0xD702}, + {0xD703, 0xD703, 0xD703}, {0xD704, 0xD704, 0xD704}, + {0xD705, 0xD705, 0xD705}, {0xD706, 0xD706, 0xD706}, + {0xD707, 0xD707, 0xD707}, {0xD708, 0xD708, 0xD708}, + {0xD709, 0xD709, 0xD709}, {0xD70A, 0xD70A, 0xD70A}, + {0xD70B, 0xD70B, 0xD70B}, {0xD70C, 0xD70C, 0xD70C}, + {0xD70D, 0xD70D, 0xD70D}, {0xD70E, 0xD70E, 0xD70E}, + {0xD70F, 0xD70F, 0xD70F}, {0xD710, 0xD710, 0xD710}, + {0xD711, 0xD711, 0xD711}, {0xD712, 0xD712, 0xD712}, + {0xD713, 0xD713, 0xD713}, {0xD714, 0xD714, 0xD714}, + {0xD715, 0xD715, 0xD715}, {0xD716, 0xD716, 0xD716}, + {0xD717, 0xD717, 0xD717}, {0xD718, 0xD718, 0xD718}, + {0xD719, 0xD719, 0xD719}, {0xD71A, 0xD71A, 0xD71A}, + {0xD71B, 0xD71B, 0xD71B}, {0xD71C, 0xD71C, 0xD71C}, + {0xD71D, 0xD71D, 0xD71D}, {0xD71E, 0xD71E, 0xD71E}, + {0xD71F, 0xD71F, 0xD71F}, {0xD720, 0xD720, 0xD720}, + {0xD721, 0xD721, 0xD721}, {0xD722, 0xD722, 0xD722}, + {0xD723, 0xD723, 0xD723}, {0xD724, 0xD724, 0xD724}, + {0xD725, 0xD725, 0xD725}, {0xD726, 0xD726, 0xD726}, + {0xD727, 0xD727, 0xD727}, {0xD728, 0xD728, 0xD728}, + {0xD729, 0xD729, 0xD729}, {0xD72A, 0xD72A, 0xD72A}, + {0xD72B, 0xD72B, 0xD72B}, {0xD72C, 0xD72C, 0xD72C}, + {0xD72D, 0xD72D, 0xD72D}, {0xD72E, 0xD72E, 0xD72E}, + {0xD72F, 0xD72F, 0xD72F}, {0xD730, 0xD730, 0xD730}, + {0xD731, 0xD731, 0xD731}, {0xD732, 0xD732, 0xD732}, + {0xD733, 0xD733, 0xD733}, {0xD734, 0xD734, 0xD734}, + {0xD735, 0xD735, 0xD735}, {0xD736, 0xD736, 0xD736}, + {0xD737, 0xD737, 0xD737}, {0xD738, 0xD738, 0xD738}, + {0xD739, 0xD739, 0xD739}, {0xD73A, 0xD73A, 0xD73A}, + {0xD73B, 0xD73B, 0xD73B}, {0xD73C, 0xD73C, 0xD73C}, + {0xD73D, 0xD73D, 0xD73D}, {0xD73E, 0xD73E, 0xD73E}, + {0xD73F, 0xD73F, 0xD73F}, {0xD740, 0xD740, 0xD740}, + {0xD741, 0xD741, 0xD741}, {0xD742, 0xD742, 0xD742}, + {0xD743, 0xD743, 0xD743}, {0xD744, 0xD744, 0xD744}, + {0xD745, 0xD745, 0xD745}, {0xD746, 0xD746, 0xD746}, + {0xD747, 0xD747, 0xD747}, {0xD748, 0xD748, 0xD748}, + {0xD749, 0xD749, 0xD749}, {0xD74A, 0xD74A, 0xD74A}, + {0xD74B, 0xD74B, 0xD74B}, {0xD74C, 0xD74C, 0xD74C}, + {0xD74D, 0xD74D, 0xD74D}, {0xD74E, 0xD74E, 0xD74E}, + {0xD74F, 0xD74F, 0xD74F}, {0xD750, 0xD750, 0xD750}, + {0xD751, 0xD751, 0xD751}, {0xD752, 0xD752, 0xD752}, + {0xD753, 0xD753, 0xD753}, {0xD754, 0xD754, 0xD754}, + {0xD755, 0xD755, 0xD755}, {0xD756, 0xD756, 0xD756}, + {0xD757, 0xD757, 0xD757}, {0xD758, 0xD758, 0xD758}, + {0xD759, 0xD759, 0xD759}, {0xD75A, 0xD75A, 0xD75A}, + {0xD75B, 0xD75B, 0xD75B}, {0xD75C, 0xD75C, 0xD75C}, + {0xD75D, 0xD75D, 0xD75D}, {0xD75E, 0xD75E, 0xD75E}, + {0xD75F, 0xD75F, 0xD75F}, {0xD760, 0xD760, 0xD760}, + {0xD761, 0xD761, 0xD761}, {0xD762, 0xD762, 0xD762}, + {0xD763, 0xD763, 0xD763}, {0xD764, 0xD764, 0xD764}, + {0xD765, 0xD765, 0xD765}, {0xD766, 0xD766, 0xD766}, + {0xD767, 0xD767, 0xD767}, {0xD768, 0xD768, 0xD768}, + {0xD769, 0xD769, 0xD769}, {0xD76A, 0xD76A, 0xD76A}, + {0xD76B, 0xD76B, 0xD76B}, {0xD76C, 0xD76C, 0xD76C}, + {0xD76D, 0xD76D, 0xD76D}, {0xD76E, 0xD76E, 0xD76E}, + {0xD76F, 0xD76F, 0xD76F}, {0xD770, 0xD770, 0xD770}, + {0xD771, 0xD771, 0xD771}, {0xD772, 0xD772, 0xD772}, + {0xD773, 0xD773, 0xD773}, {0xD774, 0xD774, 0xD774}, + {0xD775, 0xD775, 0xD775}, {0xD776, 0xD776, 0xD776}, + {0xD777, 0xD777, 0xD777}, {0xD778, 0xD778, 0xD778}, + {0xD779, 0xD779, 0xD779}, {0xD77A, 0xD77A, 0xD77A}, + {0xD77B, 0xD77B, 0xD77B}, {0xD77C, 0xD77C, 0xD77C}, + {0xD77D, 0xD77D, 0xD77D}, {0xD77E, 0xD77E, 0xD77E}, + {0xD77F, 0xD77F, 0xD77F}, {0xD780, 0xD780, 0xD780}, + {0xD781, 0xD781, 0xD781}, {0xD782, 0xD782, 0xD782}, + {0xD783, 0xD783, 0xD783}, {0xD784, 0xD784, 0xD784}, + {0xD785, 0xD785, 0xD785}, {0xD786, 0xD786, 0xD786}, + {0xD787, 0xD787, 0xD787}, {0xD788, 0xD788, 0xD788}, + {0xD789, 0xD789, 0xD789}, {0xD78A, 0xD78A, 0xD78A}, + {0xD78B, 0xD78B, 0xD78B}, {0xD78C, 0xD78C, 0xD78C}, + {0xD78D, 0xD78D, 0xD78D}, {0xD78E, 0xD78E, 0xD78E}, + {0xD78F, 0xD78F, 0xD78F}, {0xD790, 0xD790, 0xD790}, + {0xD791, 0xD791, 0xD791}, {0xD792, 0xD792, 0xD792}, + {0xD793, 0xD793, 0xD793}, {0xD794, 0xD794, 0xD794}, + {0xD795, 0xD795, 0xD795}, {0xD796, 0xD796, 0xD796}, + {0xD797, 0xD797, 0xD797}, {0xD798, 0xD798, 0xD798}, + {0xD799, 0xD799, 0xD799}, {0xD79A, 0xD79A, 0xD79A}, + {0xD79B, 0xD79B, 0xD79B}, {0xD79C, 0xD79C, 0xD79C}, + {0xD79D, 0xD79D, 0xD79D}, {0xD79E, 0xD79E, 0xD79E}, + {0xD79F, 0xD79F, 0xD79F}, {0xD7A0, 0xD7A0, 0xD7A0}, + {0xD7A1, 0xD7A1, 0xD7A1}, {0xD7A2, 0xD7A2, 0xD7A2}, + {0xD7A3, 0xD7A3, 0xD7A3}, {0xF900, 0xF900, 0xF900}, + {0xF901, 0xF901, 0xF901}, {0xF902, 0xF902, 0xF902}, + {0xF903, 0xF903, 0xF903}, {0xF904, 0xF904, 0xF904}, + {0xF905, 0xF905, 0xF905}, {0xF906, 0xF906, 0xF906}, + {0xF907, 0xF907, 0xF907}, {0xF908, 0xF908, 0xF908}, + {0xF909, 0xF909, 0xF909}, {0xF90A, 0xF90A, 0xF90A}, + {0xF90B, 0xF90B, 0xF90B}, {0xF90C, 0xF90C, 0xF90C}, + {0xF90D, 0xF90D, 0xF90D}, {0xF90E, 0xF90E, 0xF90E}, + {0xF90F, 0xF90F, 0xF90F}, {0xF910, 0xF910, 0xF910}, + {0xF911, 0xF911, 0xF911}, {0xF912, 0xF912, 0xF912}, + {0xF913, 0xF913, 0xF913}, {0xF914, 0xF914, 0xF914}, + {0xF915, 0xF915, 0xF915}, {0xF916, 0xF916, 0xF916}, + {0xF917, 0xF917, 0xF917}, {0xF918, 0xF918, 0xF918}, + {0xF919, 0xF919, 0xF919}, {0xF91A, 0xF91A, 0xF91A}, + {0xF91B, 0xF91B, 0xF91B}, {0xF91C, 0xF91C, 0xF91C}, + {0xF91D, 0xF91D, 0xF91D}, {0xF91E, 0xF91E, 0xF91E}, + {0xF91F, 0xF91F, 0xF91F}, {0xF920, 0xF920, 0xF920}, + {0xF921, 0xF921, 0xF921}, {0xF922, 0xF922, 0xF922}, + {0xF923, 0xF923, 0xF923}, {0xF924, 0xF924, 0xF924}, + {0xF925, 0xF925, 0xF925}, {0xF926, 0xF926, 0xF926}, + {0xF927, 0xF927, 0xF927}, {0xF928, 0xF928, 0xF928}, + {0xF929, 0xF929, 0xF929}, {0xF92A, 0xF92A, 0xF92A}, + {0xF92B, 0xF92B, 0xF92B}, {0xF92C, 0xF92C, 0xF92C}, + {0xF92D, 0xF92D, 0xF92D}, {0xF92E, 0xF92E, 0xF92E}, + {0xF92F, 0xF92F, 0xF92F}, {0xF930, 0xF930, 0xF930}, + {0xF931, 0xF931, 0xF931}, {0xF932, 0xF932, 0xF932}, + {0xF933, 0xF933, 0xF933}, {0xF934, 0xF934, 0xF934}, + {0xF935, 0xF935, 0xF935}, {0xF936, 0xF936, 0xF936}, + {0xF937, 0xF937, 0xF937}, {0xF938, 0xF938, 0xF938}, + {0xF939, 0xF939, 0xF939}, {0xF93A, 0xF93A, 0xF93A}, + {0xF93B, 0xF93B, 0xF93B}, {0xF93C, 0xF93C, 0xF93C}, + {0xF93D, 0xF93D, 0xF93D}, {0xF93E, 0xF93E, 0xF93E}, + {0xF93F, 0xF93F, 0xF93F}, {0xF940, 0xF940, 0xF940}, + {0xF941, 0xF941, 0xF941}, {0xF942, 0xF942, 0xF942}, + {0xF943, 0xF943, 0xF943}, {0xF944, 0xF944, 0xF944}, + {0xF945, 0xF945, 0xF945}, {0xF946, 0xF946, 0xF946}, + {0xF947, 0xF947, 0xF947}, {0xF948, 0xF948, 0xF948}, + {0xF949, 0xF949, 0xF949}, {0xF94A, 0xF94A, 0xF94A}, + {0xF94B, 0xF94B, 0xF94B}, {0xF94C, 0xF94C, 0xF94C}, + {0xF94D, 0xF94D, 0xF94D}, {0xF94E, 0xF94E, 0xF94E}, + {0xF94F, 0xF94F, 0xF94F}, {0xF950, 0xF950, 0xF950}, + {0xF951, 0xF951, 0xF951}, {0xF952, 0xF952, 0xF952}, + {0xF953, 0xF953, 0xF953}, {0xF954, 0xF954, 0xF954}, + {0xF955, 0xF955, 0xF955}, {0xF956, 0xF956, 0xF956}, + {0xF957, 0xF957, 0xF957}, {0xF958, 0xF958, 0xF958}, + {0xF959, 0xF959, 0xF959}, {0xF95A, 0xF95A, 0xF95A}, + {0xF95B, 0xF95B, 0xF95B}, {0xF95C, 0xF95C, 0xF95C}, + {0xF95D, 0xF95D, 0xF95D}, {0xF95E, 0xF95E, 0xF95E}, + {0xF95F, 0xF95F, 0xF95F}, {0xF960, 0xF960, 0xF960}, + {0xF961, 0xF961, 0xF961}, {0xF962, 0xF962, 0xF962}, + {0xF963, 0xF963, 0xF963}, {0xF964, 0xF964, 0xF964}, + {0xF965, 0xF965, 0xF965}, {0xF966, 0xF966, 0xF966}, + {0xF967, 0xF967, 0xF967}, {0xF968, 0xF968, 0xF968}, + {0xF969, 0xF969, 0xF969}, {0xF96A, 0xF96A, 0xF96A}, + {0xF96B, 0xF96B, 0xF96B}, {0xF96C, 0xF96C, 0xF96C}, + {0xF96D, 0xF96D, 0xF96D}, {0xF96E, 0xF96E, 0xF96E}, + {0xF96F, 0xF96F, 0xF96F}, {0xF970, 0xF970, 0xF970}, + {0xF971, 0xF971, 0xF971}, {0xF972, 0xF972, 0xF972}, + {0xF973, 0xF973, 0xF973}, {0xF974, 0xF974, 0xF974}, + {0xF975, 0xF975, 0xF975}, {0xF976, 0xF976, 0xF976}, + {0xF977, 0xF977, 0xF977}, {0xF978, 0xF978, 0xF978}, + {0xF979, 0xF979, 0xF979}, {0xF97A, 0xF97A, 0xF97A}, + {0xF97B, 0xF97B, 0xF97B}, {0xF97C, 0xF97C, 0xF97C}, + {0xF97D, 0xF97D, 0xF97D}, {0xF97E, 0xF97E, 0xF97E}, + {0xF97F, 0xF97F, 0xF97F}, {0xF980, 0xF980, 0xF980}, + {0xF981, 0xF981, 0xF981}, {0xF982, 0xF982, 0xF982}, + {0xF983, 0xF983, 0xF983}, {0xF984, 0xF984, 0xF984}, + {0xF985, 0xF985, 0xF985}, {0xF986, 0xF986, 0xF986}, + {0xF987, 0xF987, 0xF987}, {0xF988, 0xF988, 0xF988}, + {0xF989, 0xF989, 0xF989}, {0xF98A, 0xF98A, 0xF98A}, + {0xF98B, 0xF98B, 0xF98B}, {0xF98C, 0xF98C, 0xF98C}, + {0xF98D, 0xF98D, 0xF98D}, {0xF98E, 0xF98E, 0xF98E}, + {0xF98F, 0xF98F, 0xF98F}, {0xF990, 0xF990, 0xF990}, + {0xF991, 0xF991, 0xF991}, {0xF992, 0xF992, 0xF992}, + {0xF993, 0xF993, 0xF993}, {0xF994, 0xF994, 0xF994}, + {0xF995, 0xF995, 0xF995}, {0xF996, 0xF996, 0xF996}, + {0xF997, 0xF997, 0xF997}, {0xF998, 0xF998, 0xF998}, + {0xF999, 0xF999, 0xF999}, {0xF99A, 0xF99A, 0xF99A}, + {0xF99B, 0xF99B, 0xF99B}, {0xF99C, 0xF99C, 0xF99C}, + {0xF99D, 0xF99D, 0xF99D}, {0xF99E, 0xF99E, 0xF99E}, + {0xF99F, 0xF99F, 0xF99F}, {0xF9A0, 0xF9A0, 0xF9A0}, + {0xF9A1, 0xF9A1, 0xF9A1}, {0xF9A2, 0xF9A2, 0xF9A2}, + {0xF9A3, 0xF9A3, 0xF9A3}, {0xF9A4, 0xF9A4, 0xF9A4}, + {0xF9A5, 0xF9A5, 0xF9A5}, {0xF9A6, 0xF9A6, 0xF9A6}, + {0xF9A7, 0xF9A7, 0xF9A7}, {0xF9A8, 0xF9A8, 0xF9A8}, + {0xF9A9, 0xF9A9, 0xF9A9}, {0xF9AA, 0xF9AA, 0xF9AA}, + {0xF9AB, 0xF9AB, 0xF9AB}, {0xF9AC, 0xF9AC, 0xF9AC}, + {0xF9AD, 0xF9AD, 0xF9AD}, {0xF9AE, 0xF9AE, 0xF9AE}, + {0xF9AF, 0xF9AF, 0xF9AF}, {0xF9B0, 0xF9B0, 0xF9B0}, + {0xF9B1, 0xF9B1, 0xF9B1}, {0xF9B2, 0xF9B2, 0xF9B2}, + {0xF9B3, 0xF9B3, 0xF9B3}, {0xF9B4, 0xF9B4, 0xF9B4}, + {0xF9B5, 0xF9B5, 0xF9B5}, {0xF9B6, 0xF9B6, 0xF9B6}, + {0xF9B7, 0xF9B7, 0xF9B7}, {0xF9B8, 0xF9B8, 0xF9B8}, + {0xF9B9, 0xF9B9, 0xF9B9}, {0xF9BA, 0xF9BA, 0xF9BA}, + {0xF9BB, 0xF9BB, 0xF9BB}, {0xF9BC, 0xF9BC, 0xF9BC}, + {0xF9BD, 0xF9BD, 0xF9BD}, {0xF9BE, 0xF9BE, 0xF9BE}, + {0xF9BF, 0xF9BF, 0xF9BF}, {0xF9C0, 0xF9C0, 0xF9C0}, + {0xF9C1, 0xF9C1, 0xF9C1}, {0xF9C2, 0xF9C2, 0xF9C2}, + {0xF9C3, 0xF9C3, 0xF9C3}, {0xF9C4, 0xF9C4, 0xF9C4}, + {0xF9C5, 0xF9C5, 0xF9C5}, {0xF9C6, 0xF9C6, 0xF9C6}, + {0xF9C7, 0xF9C7, 0xF9C7}, {0xF9C8, 0xF9C8, 0xF9C8}, + {0xF9C9, 0xF9C9, 0xF9C9}, {0xF9CA, 0xF9CA, 0xF9CA}, + {0xF9CB, 0xF9CB, 0xF9CB}, {0xF9CC, 0xF9CC, 0xF9CC}, + {0xF9CD, 0xF9CD, 0xF9CD}, {0xF9CE, 0xF9CE, 0xF9CE}, + {0xF9CF, 0xF9CF, 0xF9CF}, {0xF9D0, 0xF9D0, 0xF9D0}, + {0xF9D1, 0xF9D1, 0xF9D1}, {0xF9D2, 0xF9D2, 0xF9D2}, + {0xF9D3, 0xF9D3, 0xF9D3}, {0xF9D4, 0xF9D4, 0xF9D4}, + {0xF9D5, 0xF9D5, 0xF9D5}, {0xF9D6, 0xF9D6, 0xF9D6}, + {0xF9D7, 0xF9D7, 0xF9D7}, {0xF9D8, 0xF9D8, 0xF9D8}, + {0xF9D9, 0xF9D9, 0xF9D9}, {0xF9DA, 0xF9DA, 0xF9DA}, + {0xF9DB, 0xF9DB, 0xF9DB}, {0xF9DC, 0xF9DC, 0xF9DC}, + {0xF9DD, 0xF9DD, 0xF9DD}, {0xF9DE, 0xF9DE, 0xF9DE}, + {0xF9DF, 0xF9DF, 0xF9DF}, {0xF9E0, 0xF9E0, 0xF9E0}, + {0xF9E1, 0xF9E1, 0xF9E1}, {0xF9E2, 0xF9E2, 0xF9E2}, + {0xF9E3, 0xF9E3, 0xF9E3}, {0xF9E4, 0xF9E4, 0xF9E4}, + {0xF9E5, 0xF9E5, 0xF9E5}, {0xF9E6, 0xF9E6, 0xF9E6}, + {0xF9E7, 0xF9E7, 0xF9E7}, {0xF9E8, 0xF9E8, 0xF9E8}, + {0xF9E9, 0xF9E9, 0xF9E9}, {0xF9EA, 0xF9EA, 0xF9EA}, + {0xF9EB, 0xF9EB, 0xF9EB}, {0xF9EC, 0xF9EC, 0xF9EC}, + {0xF9ED, 0xF9ED, 0xF9ED}, {0xF9EE, 0xF9EE, 0xF9EE}, + {0xF9EF, 0xF9EF, 0xF9EF}, {0xF9F0, 0xF9F0, 0xF9F0}, + {0xF9F1, 0xF9F1, 0xF9F1}, {0xF9F2, 0xF9F2, 0xF9F2}, + {0xF9F3, 0xF9F3, 0xF9F3}, {0xF9F4, 0xF9F4, 0xF9F4}, + {0xF9F5, 0xF9F5, 0xF9F5}, {0xF9F6, 0xF9F6, 0xF9F6}, + {0xF9F7, 0xF9F7, 0xF9F7}, {0xF9F8, 0xF9F8, 0xF9F8}, + {0xF9F9, 0xF9F9, 0xF9F9}, {0xF9FA, 0xF9FA, 0xF9FA}, + {0xF9FB, 0xF9FB, 0xF9FB}, {0xF9FC, 0xF9FC, 0xF9FC}, + {0xF9FD, 0xF9FD, 0xF9FD}, {0xF9FE, 0xF9FE, 0xF9FE}, + {0xF9FF, 0xF9FF, 0xF9FF}, {0xFA00, 0xFA00, 0xFA00}, + {0xFA01, 0xFA01, 0xFA01}, {0xFA02, 0xFA02, 0xFA02}, + {0xFA03, 0xFA03, 0xFA03}, {0xFA04, 0xFA04, 0xFA04}, + {0xFA05, 0xFA05, 0xFA05}, {0xFA06, 0xFA06, 0xFA06}, + {0xFA07, 0xFA07, 0xFA07}, {0xFA08, 0xFA08, 0xFA08}, + {0xFA09, 0xFA09, 0xFA09}, {0xFA0A, 0xFA0A, 0xFA0A}, + {0xFA0B, 0xFA0B, 0xFA0B}, {0xFA0C, 0xFA0C, 0xFA0C}, + {0xFA0D, 0xFA0D, 0xFA0D}, {0xFA0E, 0xFA0E, 0xFA0E}, + {0xFA0F, 0xFA0F, 0xFA0F}, {0xFA10, 0xFA10, 0xFA10}, + {0xFA11, 0xFA11, 0xFA11}, {0xFA12, 0xFA12, 0xFA12}, + {0xFA13, 0xFA13, 0xFA13}, {0xFA14, 0xFA14, 0xFA14}, + {0xFA15, 0xFA15, 0xFA15}, {0xFA16, 0xFA16, 0xFA16}, + {0xFA17, 0xFA17, 0xFA17}, {0xFA18, 0xFA18, 0xFA18}, + {0xFA19, 0xFA19, 0xFA19}, {0xFA1A, 0xFA1A, 0xFA1A}, + {0xFA1B, 0xFA1B, 0xFA1B}, {0xFA1C, 0xFA1C, 0xFA1C}, + {0xFA1D, 0xFA1D, 0xFA1D}, {0xFA1E, 0xFA1E, 0xFA1E}, + {0xFA1F, 0xFA1F, 0xFA1F}, {0xFA20, 0xFA20, 0xFA20}, + {0xFA21, 0xFA21, 0xFA21}, {0xFA22, 0xFA22, 0xFA22}, + {0xFA23, 0xFA23, 0xFA23}, {0xFA24, 0xFA24, 0xFA24}, + {0xFA25, 0xFA25, 0xFA25}, {0xFA26, 0xFA26, 0xFA26}, + {0xFA27, 0xFA27, 0xFA27}, {0xFA28, 0xFA28, 0xFA28}, + {0xFA29, 0xFA29, 0xFA29}, {0xFA2A, 0xFA2A, 0xFA2A}, + {0xFA2B, 0xFA2B, 0xFA2B}, {0xFA2C, 0xFA2C, 0xFA2C}, + {0xFA2D, 0xFA2D, 0xFA2D}, {0xFA30, 0xFA30, 0xFA30}, + {0xFA31, 0xFA31, 0xFA31}, {0xFA32, 0xFA32, 0xFA32}, + {0xFA33, 0xFA33, 0xFA33}, {0xFA34, 0xFA34, 0xFA34}, + {0xFA35, 0xFA35, 0xFA35}, {0xFA36, 0xFA36, 0xFA36}, + {0xFA37, 0xFA37, 0xFA37}, {0xFA38, 0xFA38, 0xFA38}, + {0xFA39, 0xFA39, 0xFA39}, {0xFA3A, 0xFA3A, 0xFA3A}, + {0xFA3B, 0xFA3B, 0xFA3B}, {0xFA3C, 0xFA3C, 0xFA3C}, + {0xFA3D, 0xFA3D, 0xFA3D}, {0xFA3E, 0xFA3E, 0xFA3E}, + {0xFA3F, 0xFA3F, 0xFA3F}, {0xFA40, 0xFA40, 0xFA40}, + {0xFA41, 0xFA41, 0xFA41}, {0xFA42, 0xFA42, 0xFA42}, + {0xFA43, 0xFA43, 0xFA43}, {0xFA44, 0xFA44, 0xFA44}, + {0xFA45, 0xFA45, 0xFA45}, {0xFA46, 0xFA46, 0xFA46}, + {0xFA47, 0xFA47, 0xFA47}, {0xFA48, 0xFA48, 0xFA48}, + {0xFA49, 0xFA49, 0xFA49}, {0xFA4A, 0xFA4A, 0xFA4A}, + {0xFA4B, 0xFA4B, 0xFA4B}, {0xFA4C, 0xFA4C, 0xFA4C}, + {0xFA4D, 0xFA4D, 0xFA4D}, {0xFA4E, 0xFA4E, 0xFA4E}, + {0xFA4F, 0xFA4F, 0xFA4F}, {0xFA50, 0xFA50, 0xFA50}, + {0xFA51, 0xFA51, 0xFA51}, {0xFA52, 0xFA52, 0xFA52}, + {0xFA53, 0xFA53, 0xFA53}, {0xFA54, 0xFA54, 0xFA54}, + {0xFA55, 0xFA55, 0xFA55}, {0xFA56, 0xFA56, 0xFA56}, + {0xFA57, 0xFA57, 0xFA57}, {0xFA58, 0xFA58, 0xFA58}, + {0xFA59, 0xFA59, 0xFA59}, {0xFA5A, 0xFA5A, 0xFA5A}, + {0xFA5B, 0xFA5B, 0xFA5B}, {0xFA5C, 0xFA5C, 0xFA5C}, + {0xFA5D, 0xFA5D, 0xFA5D}, {0xFA5E, 0xFA5E, 0xFA5E}, + {0xFA5F, 0xFA5F, 0xFA5F}, {0xFA60, 0xFA60, 0xFA60}, + {0xFA61, 0xFA61, 0xFA61}, {0xFA62, 0xFA62, 0xFA62}, + {0xFA63, 0xFA63, 0xFA63}, {0xFA64, 0xFA64, 0xFA64}, + {0xFA65, 0xFA65, 0xFA65}, {0xFA66, 0xFA66, 0xFA66}, + {0xFA67, 0xFA67, 0xFA67}, {0xFA68, 0xFA68, 0xFA68}, + {0xFA69, 0xFA69, 0xFA69}, {0xFA6A, 0xFA6A, 0xFA6A}, + {0xFA70, 0xFA70, 0xFA70}, {0xFA71, 0xFA71, 0xFA71}, + {0xFA72, 0xFA72, 0xFA72}, {0xFA73, 0xFA73, 0xFA73}, + {0xFA74, 0xFA74, 0xFA74}, {0xFA75, 0xFA75, 0xFA75}, + {0xFA76, 0xFA76, 0xFA76}, {0xFA77, 0xFA77, 0xFA77}, + {0xFA78, 0xFA78, 0xFA78}, {0xFA79, 0xFA79, 0xFA79}, + {0xFA7A, 0xFA7A, 0xFA7A}, {0xFA7B, 0xFA7B, 0xFA7B}, + {0xFA7C, 0xFA7C, 0xFA7C}, {0xFA7D, 0xFA7D, 0xFA7D}, + {0xFA7E, 0xFA7E, 0xFA7E}, {0xFA7F, 0xFA7F, 0xFA7F}, + {0xFA80, 0xFA80, 0xFA80}, {0xFA81, 0xFA81, 0xFA81}, + {0xFA82, 0xFA82, 0xFA82}, {0xFA83, 0xFA83, 0xFA83}, + {0xFA84, 0xFA84, 0xFA84}, {0xFA85, 0xFA85, 0xFA85}, + {0xFA86, 0xFA86, 0xFA86}, {0xFA87, 0xFA87, 0xFA87}, + {0xFA88, 0xFA88, 0xFA88}, {0xFA89, 0xFA89, 0xFA89}, + {0xFA8A, 0xFA8A, 0xFA8A}, {0xFA8B, 0xFA8B, 0xFA8B}, + {0xFA8C, 0xFA8C, 0xFA8C}, {0xFA8D, 0xFA8D, 0xFA8D}, + {0xFA8E, 0xFA8E, 0xFA8E}, {0xFA8F, 0xFA8F, 0xFA8F}, + {0xFA90, 0xFA90, 0xFA90}, {0xFA91, 0xFA91, 0xFA91}, + {0xFA92, 0xFA92, 0xFA92}, {0xFA93, 0xFA93, 0xFA93}, + {0xFA94, 0xFA94, 0xFA94}, {0xFA95, 0xFA95, 0xFA95}, + {0xFA96, 0xFA96, 0xFA96}, {0xFA97, 0xFA97, 0xFA97}, + {0xFA98, 0xFA98, 0xFA98}, {0xFA99, 0xFA99, 0xFA99}, + {0xFA9A, 0xFA9A, 0xFA9A}, {0xFA9B, 0xFA9B, 0xFA9B}, + {0xFA9C, 0xFA9C, 0xFA9C}, {0xFA9D, 0xFA9D, 0xFA9D}, + {0xFA9E, 0xFA9E, 0xFA9E}, {0xFA9F, 0xFA9F, 0xFA9F}, + {0xFAA0, 0xFAA0, 0xFAA0}, {0xFAA1, 0xFAA1, 0xFAA1}, + {0xFAA2, 0xFAA2, 0xFAA2}, {0xFAA3, 0xFAA3, 0xFAA3}, + {0xFAA4, 0xFAA4, 0xFAA4}, {0xFAA5, 0xFAA5, 0xFAA5}, + {0xFAA6, 0xFAA6, 0xFAA6}, {0xFAA7, 0xFAA7, 0xFAA7}, + {0xFAA8, 0xFAA8, 0xFAA8}, {0xFAA9, 0xFAA9, 0xFAA9}, + {0xFAAA, 0xFAAA, 0xFAAA}, {0xFAAB, 0xFAAB, 0xFAAB}, + {0xFAAC, 0xFAAC, 0xFAAC}, {0xFAAD, 0xFAAD, 0xFAAD}, + {0xFAAE, 0xFAAE, 0xFAAE}, {0xFAAF, 0xFAAF, 0xFAAF}, + {0xFAB0, 0xFAB0, 0xFAB0}, {0xFAB1, 0xFAB1, 0xFAB1}, + {0xFAB2, 0xFAB2, 0xFAB2}, {0xFAB3, 0xFAB3, 0xFAB3}, + {0xFAB4, 0xFAB4, 0xFAB4}, {0xFAB5, 0xFAB5, 0xFAB5}, + {0xFAB6, 0xFAB6, 0xFAB6}, {0xFAB7, 0xFAB7, 0xFAB7}, + {0xFAB8, 0xFAB8, 0xFAB8}, {0xFAB9, 0xFAB9, 0xFAB9}, + {0xFABA, 0xFABA, 0xFABA}, {0xFABB, 0xFABB, 0xFABB}, + {0xFABC, 0xFABC, 0xFABC}, {0xFABD, 0xFABD, 0xFABD}, + {0xFABE, 0xFABE, 0xFABE}, {0xFABF, 0xFABF, 0xFABF}, + {0xFAC0, 0xFAC0, 0xFAC0}, {0xFAC1, 0xFAC1, 0xFAC1}, + {0xFAC2, 0xFAC2, 0xFAC2}, {0xFAC3, 0xFAC3, 0xFAC3}, + {0xFAC4, 0xFAC4, 0xFAC4}, {0xFAC5, 0xFAC5, 0xFAC5}, + {0xFAC6, 0xFAC6, 0xFAC6}, {0xFAC7, 0xFAC7, 0xFAC7}, + {0xFAC8, 0xFAC8, 0xFAC8}, {0xFAC9, 0xFAC9, 0xFAC9}, + {0xFACA, 0xFACA, 0xFACA}, {0xFACB, 0xFACB, 0xFACB}, + {0xFACC, 0xFACC, 0xFACC}, {0xFACD, 0xFACD, 0xFACD}, + {0xFACE, 0xFACE, 0xFACE}, {0xFACF, 0xFACF, 0xFACF}, + {0xFAD0, 0xFAD0, 0xFAD0}, {0xFAD1, 0xFAD1, 0xFAD1}, + {0xFAD2, 0xFAD2, 0xFAD2}, {0xFAD3, 0xFAD3, 0xFAD3}, + {0xFAD4, 0xFAD4, 0xFAD4}, {0xFAD5, 0xFAD5, 0xFAD5}, + {0xFAD6, 0xFAD6, 0xFAD6}, {0xFAD7, 0xFAD7, 0xFAD7}, + {0xFAD8, 0xFAD8, 0xFAD8}, {0xFAD9, 0xFAD9, 0xFAD9}, + {0xFB00, 0xFB00, 0xFB00}, {0xFB01, 0xFB01, 0xFB01}, + {0xFB02, 0xFB02, 0xFB02}, {0xFB03, 0xFB03, 0xFB03}, + {0xFB04, 0xFB04, 0xFB04}, {0xFB05, 0xFB05, 0xFB05}, + {0xFB06, 0xFB06, 0xFB06}, {0xFB13, 0xFB13, 0xFB13}, + {0xFB14, 0xFB14, 0xFB14}, {0xFB15, 0xFB15, 0xFB15}, + {0xFB16, 0xFB16, 0xFB16}, {0xFB17, 0xFB17, 0xFB17}, + {0xFB1D, 0xFB1D, 0xFB1D}, {0xFB1E, 0xFB1E, 0xFB1E}, + {0xFB1F, 0xFB1F, 0xFB1F}, {0xFB20, 0xFB20, 0xFB20}, + {0xFB21, 0xFB21, 0xFB21}, {0xFB22, 0xFB22, 0xFB22}, + {0xFB23, 0xFB23, 0xFB23}, {0xFB24, 0xFB24, 0xFB24}, + {0xFB25, 0xFB25, 0xFB25}, {0xFB26, 0xFB26, 0xFB26}, + {0xFB27, 0xFB27, 0xFB27}, {0xFB28, 0xFB28, 0xFB28}, + {0xFB2A, 0xFB2A, 0xFB2A}, {0xFB2B, 0xFB2B, 0xFB2B}, + {0xFB2C, 0xFB2C, 0xFB2C}, {0xFB2D, 0xFB2D, 0xFB2D}, + {0xFB2E, 0xFB2E, 0xFB2E}, {0xFB2F, 0xFB2F, 0xFB2F}, + {0xFB30, 0xFB30, 0xFB30}, {0xFB31, 0xFB31, 0xFB31}, + {0xFB32, 0xFB32, 0xFB32}, {0xFB33, 0xFB33, 0xFB33}, + {0xFB34, 0xFB34, 0xFB34}, {0xFB35, 0xFB35, 0xFB35}, + {0xFB36, 0xFB36, 0xFB36}, {0xFB38, 0xFB38, 0xFB38}, + {0xFB39, 0xFB39, 0xFB39}, {0xFB3A, 0xFB3A, 0xFB3A}, + {0xFB3B, 0xFB3B, 0xFB3B}, {0xFB3C, 0xFB3C, 0xFB3C}, + {0xFB3E, 0xFB3E, 0xFB3E}, {0xFB40, 0xFB40, 0xFB40}, + {0xFB41, 0xFB41, 0xFB41}, {0xFB43, 0xFB43, 0xFB43}, + {0xFB44, 0xFB44, 0xFB44}, {0xFB46, 0xFB46, 0xFB46}, + {0xFB47, 0xFB47, 0xFB47}, {0xFB48, 0xFB48, 0xFB48}, + {0xFB49, 0xFB49, 0xFB49}, {0xFB4A, 0xFB4A, 0xFB4A}, + {0xFB4B, 0xFB4B, 0xFB4B}, {0xFB4C, 0xFB4C, 0xFB4C}, + {0xFB4D, 0xFB4D, 0xFB4D}, {0xFB4E, 0xFB4E, 0xFB4E}, + {0xFB4F, 0xFB4F, 0xFB4F}, {0xFB50, 0xFB50, 0xFB50}, + {0xFB51, 0xFB51, 0xFB51}, {0xFB52, 0xFB52, 0xFB52}, + {0xFB53, 0xFB53, 0xFB53}, {0xFB54, 0xFB54, 0xFB54}, + {0xFB55, 0xFB55, 0xFB55}, {0xFB56, 0xFB56, 0xFB56}, + {0xFB57, 0xFB57, 0xFB57}, {0xFB58, 0xFB58, 0xFB58}, + {0xFB59, 0xFB59, 0xFB59}, {0xFB5A, 0xFB5A, 0xFB5A}, + {0xFB5B, 0xFB5B, 0xFB5B}, {0xFB5C, 0xFB5C, 0xFB5C}, + {0xFB5D, 0xFB5D, 0xFB5D}, {0xFB5E, 0xFB5E, 0xFB5E}, + {0xFB5F, 0xFB5F, 0xFB5F}, {0xFB60, 0xFB60, 0xFB60}, + {0xFB61, 0xFB61, 0xFB61}, {0xFB62, 0xFB62, 0xFB62}, + {0xFB63, 0xFB63, 0xFB63}, {0xFB64, 0xFB64, 0xFB64}, + {0xFB65, 0xFB65, 0xFB65}, {0xFB66, 0xFB66, 0xFB66}, + {0xFB67, 0xFB67, 0xFB67}, {0xFB68, 0xFB68, 0xFB68}, + {0xFB69, 0xFB69, 0xFB69}, {0xFB6A, 0xFB6A, 0xFB6A}, + {0xFB6B, 0xFB6B, 0xFB6B}, {0xFB6C, 0xFB6C, 0xFB6C}, + {0xFB6D, 0xFB6D, 0xFB6D}, {0xFB6E, 0xFB6E, 0xFB6E}, + {0xFB6F, 0xFB6F, 0xFB6F}, {0xFB70, 0xFB70, 0xFB70}, + {0xFB71, 0xFB71, 0xFB71}, {0xFB72, 0xFB72, 0xFB72}, + {0xFB73, 0xFB73, 0xFB73}, {0xFB74, 0xFB74, 0xFB74}, + {0xFB75, 0xFB75, 0xFB75}, {0xFB76, 0xFB76, 0xFB76}, + {0xFB77, 0xFB77, 0xFB77}, {0xFB78, 0xFB78, 0xFB78}, + {0xFB79, 0xFB79, 0xFB79}, {0xFB7A, 0xFB7A, 0xFB7A}, + {0xFB7B, 0xFB7B, 0xFB7B}, {0xFB7C, 0xFB7C, 0xFB7C}, + {0xFB7D, 0xFB7D, 0xFB7D}, {0xFB7E, 0xFB7E, 0xFB7E}, + {0xFB7F, 0xFB7F, 0xFB7F}, {0xFB80, 0xFB80, 0xFB80}, + {0xFB81, 0xFB81, 0xFB81}, {0xFB82, 0xFB82, 0xFB82}, + {0xFB83, 0xFB83, 0xFB83}, {0xFB84, 0xFB84, 0xFB84}, + {0xFB85, 0xFB85, 0xFB85}, {0xFB86, 0xFB86, 0xFB86}, + {0xFB87, 0xFB87, 0xFB87}, {0xFB88, 0xFB88, 0xFB88}, + {0xFB89, 0xFB89, 0xFB89}, {0xFB8A, 0xFB8A, 0xFB8A}, + {0xFB8B, 0xFB8B, 0xFB8B}, {0xFB8C, 0xFB8C, 0xFB8C}, + {0xFB8D, 0xFB8D, 0xFB8D}, {0xFB8E, 0xFB8E, 0xFB8E}, + {0xFB8F, 0xFB8F, 0xFB8F}, {0xFB90, 0xFB90, 0xFB90}, + {0xFB91, 0xFB91, 0xFB91}, {0xFB92, 0xFB92, 0xFB92}, + {0xFB93, 0xFB93, 0xFB93}, {0xFB94, 0xFB94, 0xFB94}, + {0xFB95, 0xFB95, 0xFB95}, {0xFB96, 0xFB96, 0xFB96}, + {0xFB97, 0xFB97, 0xFB97}, {0xFB98, 0xFB98, 0xFB98}, + {0xFB99, 0xFB99, 0xFB99}, {0xFB9A, 0xFB9A, 0xFB9A}, + {0xFB9B, 0xFB9B, 0xFB9B}, {0xFB9C, 0xFB9C, 0xFB9C}, + {0xFB9D, 0xFB9D, 0xFB9D}, {0xFB9E, 0xFB9E, 0xFB9E}, + {0xFB9F, 0xFB9F, 0xFB9F}, {0xFBA0, 0xFBA0, 0xFBA0}, + {0xFBA1, 0xFBA1, 0xFBA1}, {0xFBA2, 0xFBA2, 0xFBA2}, + {0xFBA3, 0xFBA3, 0xFBA3}, {0xFBA4, 0xFBA4, 0xFBA4}, + {0xFBA5, 0xFBA5, 0xFBA5}, {0xFBA6, 0xFBA6, 0xFBA6}, + {0xFBA7, 0xFBA7, 0xFBA7}, {0xFBA8, 0xFBA8, 0xFBA8}, + {0xFBA9, 0xFBA9, 0xFBA9}, {0xFBAA, 0xFBAA, 0xFBAA}, + {0xFBAB, 0xFBAB, 0xFBAB}, {0xFBAC, 0xFBAC, 0xFBAC}, + {0xFBAD, 0xFBAD, 0xFBAD}, {0xFBAE, 0xFBAE, 0xFBAE}, + {0xFBAF, 0xFBAF, 0xFBAF}, {0xFBB0, 0xFBB0, 0xFBB0}, + {0xFBB1, 0xFBB1, 0xFBB1}, {0xFBD3, 0xFBD3, 0xFBD3}, + {0xFBD4, 0xFBD4, 0xFBD4}, {0xFBD5, 0xFBD5, 0xFBD5}, + {0xFBD6, 0xFBD6, 0xFBD6}, {0xFBD7, 0xFBD7, 0xFBD7}, + {0xFBD8, 0xFBD8, 0xFBD8}, {0xFBD9, 0xFBD9, 0xFBD9}, + {0xFBDA, 0xFBDA, 0xFBDA}, {0xFBDB, 0xFBDB, 0xFBDB}, + {0xFBDC, 0xFBDC, 0xFBDC}, {0xFBDD, 0xFBDD, 0xFBDD}, + {0xFBDE, 0xFBDE, 0xFBDE}, {0xFBDF, 0xFBDF, 0xFBDF}, + {0xFBE0, 0xFBE0, 0xFBE0}, {0xFBE1, 0xFBE1, 0xFBE1}, + {0xFBE2, 0xFBE2, 0xFBE2}, {0xFBE3, 0xFBE3, 0xFBE3}, + {0xFBE4, 0xFBE4, 0xFBE4}, {0xFBE5, 0xFBE5, 0xFBE5}, + {0xFBE6, 0xFBE6, 0xFBE6}, {0xFBE7, 0xFBE7, 0xFBE7}, + {0xFBE8, 0xFBE8, 0xFBE8}, {0xFBE9, 0xFBE9, 0xFBE9}, + {0xFBEA, 0xFBEA, 0xFBEA}, {0xFBEB, 0xFBEB, 0xFBEB}, + {0xFBEC, 0xFBEC, 0xFBEC}, {0xFBED, 0xFBED, 0xFBED}, + {0xFBEE, 0xFBEE, 0xFBEE}, {0xFBEF, 0xFBEF, 0xFBEF}, + {0xFBF0, 0xFBF0, 0xFBF0}, {0xFBF1, 0xFBF1, 0xFBF1}, + {0xFBF2, 0xFBF2, 0xFBF2}, {0xFBF3, 0xFBF3, 0xFBF3}, + {0xFBF4, 0xFBF4, 0xFBF4}, {0xFBF5, 0xFBF5, 0xFBF5}, + {0xFBF6, 0xFBF6, 0xFBF6}, {0xFBF7, 0xFBF7, 0xFBF7}, + {0xFBF8, 0xFBF8, 0xFBF8}, {0xFBF9, 0xFBF9, 0xFBF9}, + {0xFBFA, 0xFBFA, 0xFBFA}, {0xFBFB, 0xFBFB, 0xFBFB}, + {0xFBFC, 0xFBFC, 0xFBFC}, {0xFBFD, 0xFBFD, 0xFBFD}, + {0xFBFE, 0xFBFE, 0xFBFE}, {0xFBFF, 0xFBFF, 0xFBFF}, + {0xFC00, 0xFC00, 0xFC00}, {0xFC01, 0xFC01, 0xFC01}, + {0xFC02, 0xFC02, 0xFC02}, {0xFC03, 0xFC03, 0xFC03}, + {0xFC04, 0xFC04, 0xFC04}, {0xFC05, 0xFC05, 0xFC05}, + {0xFC06, 0xFC06, 0xFC06}, {0xFC07, 0xFC07, 0xFC07}, + {0xFC08, 0xFC08, 0xFC08}, {0xFC09, 0xFC09, 0xFC09}, + {0xFC0A, 0xFC0A, 0xFC0A}, {0xFC0B, 0xFC0B, 0xFC0B}, + {0xFC0C, 0xFC0C, 0xFC0C}, {0xFC0D, 0xFC0D, 0xFC0D}, + {0xFC0E, 0xFC0E, 0xFC0E}, {0xFC0F, 0xFC0F, 0xFC0F}, + {0xFC10, 0xFC10, 0xFC10}, {0xFC11, 0xFC11, 0xFC11}, + {0xFC12, 0xFC12, 0xFC12}, {0xFC13, 0xFC13, 0xFC13}, + {0xFC14, 0xFC14, 0xFC14}, {0xFC15, 0xFC15, 0xFC15}, + {0xFC16, 0xFC16, 0xFC16}, {0xFC17, 0xFC17, 0xFC17}, + {0xFC18, 0xFC18, 0xFC18}, {0xFC19, 0xFC19, 0xFC19}, + {0xFC1A, 0xFC1A, 0xFC1A}, {0xFC1B, 0xFC1B, 0xFC1B}, + {0xFC1C, 0xFC1C, 0xFC1C}, {0xFC1D, 0xFC1D, 0xFC1D}, + {0xFC1E, 0xFC1E, 0xFC1E}, {0xFC1F, 0xFC1F, 0xFC1F}, + {0xFC20, 0xFC20, 0xFC20}, {0xFC21, 0xFC21, 0xFC21}, + {0xFC22, 0xFC22, 0xFC22}, {0xFC23, 0xFC23, 0xFC23}, + {0xFC24, 0xFC24, 0xFC24}, {0xFC25, 0xFC25, 0xFC25}, + {0xFC26, 0xFC26, 0xFC26}, {0xFC27, 0xFC27, 0xFC27}, + {0xFC28, 0xFC28, 0xFC28}, {0xFC29, 0xFC29, 0xFC29}, + {0xFC2A, 0xFC2A, 0xFC2A}, {0xFC2B, 0xFC2B, 0xFC2B}, + {0xFC2C, 0xFC2C, 0xFC2C}, {0xFC2D, 0xFC2D, 0xFC2D}, + {0xFC2E, 0xFC2E, 0xFC2E}, {0xFC2F, 0xFC2F, 0xFC2F}, + {0xFC30, 0xFC30, 0xFC30}, {0xFC31, 0xFC31, 0xFC31}, + {0xFC32, 0xFC32, 0xFC32}, {0xFC33, 0xFC33, 0xFC33}, + {0xFC34, 0xFC34, 0xFC34}, {0xFC35, 0xFC35, 0xFC35}, + {0xFC36, 0xFC36, 0xFC36}, {0xFC37, 0xFC37, 0xFC37}, + {0xFC38, 0xFC38, 0xFC38}, {0xFC39, 0xFC39, 0xFC39}, + {0xFC3A, 0xFC3A, 0xFC3A}, {0xFC3B, 0xFC3B, 0xFC3B}, + {0xFC3C, 0xFC3C, 0xFC3C}, {0xFC3D, 0xFC3D, 0xFC3D}, + {0xFC3E, 0xFC3E, 0xFC3E}, {0xFC3F, 0xFC3F, 0xFC3F}, + {0xFC40, 0xFC40, 0xFC40}, {0xFC41, 0xFC41, 0xFC41}, + {0xFC42, 0xFC42, 0xFC42}, {0xFC43, 0xFC43, 0xFC43}, + {0xFC44, 0xFC44, 0xFC44}, {0xFC45, 0xFC45, 0xFC45}, + {0xFC46, 0xFC46, 0xFC46}, {0xFC47, 0xFC47, 0xFC47}, + {0xFC48, 0xFC48, 0xFC48}, {0xFC49, 0xFC49, 0xFC49}, + {0xFC4A, 0xFC4A, 0xFC4A}, {0xFC4B, 0xFC4B, 0xFC4B}, + {0xFC4C, 0xFC4C, 0xFC4C}, {0xFC4D, 0xFC4D, 0xFC4D}, + {0xFC4E, 0xFC4E, 0xFC4E}, {0xFC4F, 0xFC4F, 0xFC4F}, + {0xFC50, 0xFC50, 0xFC50}, {0xFC51, 0xFC51, 0xFC51}, + {0xFC52, 0xFC52, 0xFC52}, {0xFC53, 0xFC53, 0xFC53}, + {0xFC54, 0xFC54, 0xFC54}, {0xFC55, 0xFC55, 0xFC55}, + {0xFC56, 0xFC56, 0xFC56}, {0xFC57, 0xFC57, 0xFC57}, + {0xFC58, 0xFC58, 0xFC58}, {0xFC59, 0xFC59, 0xFC59}, + {0xFC5A, 0xFC5A, 0xFC5A}, {0xFC5B, 0xFC5B, 0xFC5B}, + {0xFC5C, 0xFC5C, 0xFC5C}, {0xFC5D, 0xFC5D, 0xFC5D}, + {0xFC5E, 0xFC5E, 0xFC5E}, {0xFC5F, 0xFC5F, 0xFC5F}, + {0xFC60, 0xFC60, 0xFC60}, {0xFC61, 0xFC61, 0xFC61}, + {0xFC62, 0xFC62, 0xFC62}, {0xFC63, 0xFC63, 0xFC63}, + {0xFC64, 0xFC64, 0xFC64}, {0xFC65, 0xFC65, 0xFC65}, + {0xFC66, 0xFC66, 0xFC66}, {0xFC67, 0xFC67, 0xFC67}, + {0xFC68, 0xFC68, 0xFC68}, {0xFC69, 0xFC69, 0xFC69}, + {0xFC6A, 0xFC6A, 0xFC6A}, {0xFC6B, 0xFC6B, 0xFC6B}, + {0xFC6C, 0xFC6C, 0xFC6C}, {0xFC6D, 0xFC6D, 0xFC6D}, + {0xFC6E, 0xFC6E, 0xFC6E}, {0xFC6F, 0xFC6F, 0xFC6F}, + {0xFC70, 0xFC70, 0xFC70}, {0xFC71, 0xFC71, 0xFC71}, + {0xFC72, 0xFC72, 0xFC72}, {0xFC73, 0xFC73, 0xFC73}, + {0xFC74, 0xFC74, 0xFC74}, {0xFC75, 0xFC75, 0xFC75}, + {0xFC76, 0xFC76, 0xFC76}, {0xFC77, 0xFC77, 0xFC77}, + {0xFC78, 0xFC78, 0xFC78}, {0xFC79, 0xFC79, 0xFC79}, + {0xFC7A, 0xFC7A, 0xFC7A}, {0xFC7B, 0xFC7B, 0xFC7B}, + {0xFC7C, 0xFC7C, 0xFC7C}, {0xFC7D, 0xFC7D, 0xFC7D}, + {0xFC7E, 0xFC7E, 0xFC7E}, {0xFC7F, 0xFC7F, 0xFC7F}, + {0xFC80, 0xFC80, 0xFC80}, {0xFC81, 0xFC81, 0xFC81}, + {0xFC82, 0xFC82, 0xFC82}, {0xFC83, 0xFC83, 0xFC83}, + {0xFC84, 0xFC84, 0xFC84}, {0xFC85, 0xFC85, 0xFC85}, + {0xFC86, 0xFC86, 0xFC86}, {0xFC87, 0xFC87, 0xFC87}, + {0xFC88, 0xFC88, 0xFC88}, {0xFC89, 0xFC89, 0xFC89}, + {0xFC8A, 0xFC8A, 0xFC8A}, {0xFC8B, 0xFC8B, 0xFC8B}, + {0xFC8C, 0xFC8C, 0xFC8C}, {0xFC8D, 0xFC8D, 0xFC8D}, + {0xFC8E, 0xFC8E, 0xFC8E}, {0xFC8F, 0xFC8F, 0xFC8F}, + {0xFC90, 0xFC90, 0xFC90}, {0xFC91, 0xFC91, 0xFC91}, + {0xFC92, 0xFC92, 0xFC92}, {0xFC93, 0xFC93, 0xFC93}, + {0xFC94, 0xFC94, 0xFC94}, {0xFC95, 0xFC95, 0xFC95}, + {0xFC96, 0xFC96, 0xFC96}, {0xFC97, 0xFC97, 0xFC97}, + {0xFC98, 0xFC98, 0xFC98}, {0xFC99, 0xFC99, 0xFC99}, + {0xFC9A, 0xFC9A, 0xFC9A}, {0xFC9B, 0xFC9B, 0xFC9B}, + {0xFC9C, 0xFC9C, 0xFC9C}, {0xFC9D, 0xFC9D, 0xFC9D}, + {0xFC9E, 0xFC9E, 0xFC9E}, {0xFC9F, 0xFC9F, 0xFC9F}, + {0xFCA0, 0xFCA0, 0xFCA0}, {0xFCA1, 0xFCA1, 0xFCA1}, + {0xFCA2, 0xFCA2, 0xFCA2}, {0xFCA3, 0xFCA3, 0xFCA3}, + {0xFCA4, 0xFCA4, 0xFCA4}, {0xFCA5, 0xFCA5, 0xFCA5}, + {0xFCA6, 0xFCA6, 0xFCA6}, {0xFCA7, 0xFCA7, 0xFCA7}, + {0xFCA8, 0xFCA8, 0xFCA8}, {0xFCA9, 0xFCA9, 0xFCA9}, + {0xFCAA, 0xFCAA, 0xFCAA}, {0xFCAB, 0xFCAB, 0xFCAB}, + {0xFCAC, 0xFCAC, 0xFCAC}, {0xFCAD, 0xFCAD, 0xFCAD}, + {0xFCAE, 0xFCAE, 0xFCAE}, {0xFCAF, 0xFCAF, 0xFCAF}, + {0xFCB0, 0xFCB0, 0xFCB0}, {0xFCB1, 0xFCB1, 0xFCB1}, + {0xFCB2, 0xFCB2, 0xFCB2}, {0xFCB3, 0xFCB3, 0xFCB3}, + {0xFCB4, 0xFCB4, 0xFCB4}, {0xFCB5, 0xFCB5, 0xFCB5}, + {0xFCB6, 0xFCB6, 0xFCB6}, {0xFCB7, 0xFCB7, 0xFCB7}, + {0xFCB8, 0xFCB8, 0xFCB8}, {0xFCB9, 0xFCB9, 0xFCB9}, + {0xFCBA, 0xFCBA, 0xFCBA}, {0xFCBB, 0xFCBB, 0xFCBB}, + {0xFCBC, 0xFCBC, 0xFCBC}, {0xFCBD, 0xFCBD, 0xFCBD}, + {0xFCBE, 0xFCBE, 0xFCBE}, {0xFCBF, 0xFCBF, 0xFCBF}, + {0xFCC0, 0xFCC0, 0xFCC0}, {0xFCC1, 0xFCC1, 0xFCC1}, + {0xFCC2, 0xFCC2, 0xFCC2}, {0xFCC3, 0xFCC3, 0xFCC3}, + {0xFCC4, 0xFCC4, 0xFCC4}, {0xFCC5, 0xFCC5, 0xFCC5}, + {0xFCC6, 0xFCC6, 0xFCC6}, {0xFCC7, 0xFCC7, 0xFCC7}, + {0xFCC8, 0xFCC8, 0xFCC8}, {0xFCC9, 0xFCC9, 0xFCC9}, + {0xFCCA, 0xFCCA, 0xFCCA}, {0xFCCB, 0xFCCB, 0xFCCB}, + {0xFCCC, 0xFCCC, 0xFCCC}, {0xFCCD, 0xFCCD, 0xFCCD}, + {0xFCCE, 0xFCCE, 0xFCCE}, {0xFCCF, 0xFCCF, 0xFCCF}, + {0xFCD0, 0xFCD0, 0xFCD0}, {0xFCD1, 0xFCD1, 0xFCD1}, + {0xFCD2, 0xFCD2, 0xFCD2}, {0xFCD3, 0xFCD3, 0xFCD3}, + {0xFCD4, 0xFCD4, 0xFCD4}, {0xFCD5, 0xFCD5, 0xFCD5}, + {0xFCD6, 0xFCD6, 0xFCD6}, {0xFCD7, 0xFCD7, 0xFCD7}, + {0xFCD8, 0xFCD8, 0xFCD8}, {0xFCD9, 0xFCD9, 0xFCD9}, + {0xFCDA, 0xFCDA, 0xFCDA}, {0xFCDB, 0xFCDB, 0xFCDB}, + {0xFCDC, 0xFCDC, 0xFCDC}, {0xFCDD, 0xFCDD, 0xFCDD}, + {0xFCDE, 0xFCDE, 0xFCDE}, {0xFCDF, 0xFCDF, 0xFCDF}, + {0xFCE0, 0xFCE0, 0xFCE0}, {0xFCE1, 0xFCE1, 0xFCE1}, + {0xFCE2, 0xFCE2, 0xFCE2}, {0xFCE3, 0xFCE3, 0xFCE3}, + {0xFCE4, 0xFCE4, 0xFCE4}, {0xFCE5, 0xFCE5, 0xFCE5}, + {0xFCE6, 0xFCE6, 0xFCE6}, {0xFCE7, 0xFCE7, 0xFCE7}, + {0xFCE8, 0xFCE8, 0xFCE8}, {0xFCE9, 0xFCE9, 0xFCE9}, + {0xFCEA, 0xFCEA, 0xFCEA}, {0xFCEB, 0xFCEB, 0xFCEB}, + {0xFCEC, 0xFCEC, 0xFCEC}, {0xFCED, 0xFCED, 0xFCED}, + {0xFCEE, 0xFCEE, 0xFCEE}, {0xFCEF, 0xFCEF, 0xFCEF}, + {0xFCF0, 0xFCF0, 0xFCF0}, {0xFCF1, 0xFCF1, 0xFCF1}, + {0xFCF2, 0xFCF2, 0xFCF2}, {0xFCF3, 0xFCF3, 0xFCF3}, + {0xFCF4, 0xFCF4, 0xFCF4}, {0xFCF5, 0xFCF5, 0xFCF5}, + {0xFCF6, 0xFCF6, 0xFCF6}, {0xFCF7, 0xFCF7, 0xFCF7}, + {0xFCF8, 0xFCF8, 0xFCF8}, {0xFCF9, 0xFCF9, 0xFCF9}, + {0xFCFA, 0xFCFA, 0xFCFA}, {0xFCFB, 0xFCFB, 0xFCFB}, + {0xFCFC, 0xFCFC, 0xFCFC}, {0xFCFD, 0xFCFD, 0xFCFD}, + {0xFCFE, 0xFCFE, 0xFCFE}, {0xFCFF, 0xFCFF, 0xFCFF}, + {0xFD00, 0xFD00, 0xFD00}, {0xFD01, 0xFD01, 0xFD01}, + {0xFD02, 0xFD02, 0xFD02}, {0xFD03, 0xFD03, 0xFD03}, + {0xFD04, 0xFD04, 0xFD04}, {0xFD05, 0xFD05, 0xFD05}, + {0xFD06, 0xFD06, 0xFD06}, {0xFD07, 0xFD07, 0xFD07}, + {0xFD08, 0xFD08, 0xFD08}, {0xFD09, 0xFD09, 0xFD09}, + {0xFD0A, 0xFD0A, 0xFD0A}, {0xFD0B, 0xFD0B, 0xFD0B}, + {0xFD0C, 0xFD0C, 0xFD0C}, {0xFD0D, 0xFD0D, 0xFD0D}, + {0xFD0E, 0xFD0E, 0xFD0E}, {0xFD0F, 0xFD0F, 0xFD0F}, + {0xFD10, 0xFD10, 0xFD10}, {0xFD11, 0xFD11, 0xFD11}, + {0xFD12, 0xFD12, 0xFD12}, {0xFD13, 0xFD13, 0xFD13}, + {0xFD14, 0xFD14, 0xFD14}, {0xFD15, 0xFD15, 0xFD15}, + {0xFD16, 0xFD16, 0xFD16}, {0xFD17, 0xFD17, 0xFD17}, + {0xFD18, 0xFD18, 0xFD18}, {0xFD19, 0xFD19, 0xFD19}, + {0xFD1A, 0xFD1A, 0xFD1A}, {0xFD1B, 0xFD1B, 0xFD1B}, + {0xFD1C, 0xFD1C, 0xFD1C}, {0xFD1D, 0xFD1D, 0xFD1D}, + {0xFD1E, 0xFD1E, 0xFD1E}, {0xFD1F, 0xFD1F, 0xFD1F}, + {0xFD20, 0xFD20, 0xFD20}, {0xFD21, 0xFD21, 0xFD21}, + {0xFD22, 0xFD22, 0xFD22}, {0xFD23, 0xFD23, 0xFD23}, + {0xFD24, 0xFD24, 0xFD24}, {0xFD25, 0xFD25, 0xFD25}, + {0xFD26, 0xFD26, 0xFD26}, {0xFD27, 0xFD27, 0xFD27}, + {0xFD28, 0xFD28, 0xFD28}, {0xFD29, 0xFD29, 0xFD29}, + {0xFD2A, 0xFD2A, 0xFD2A}, {0xFD2B, 0xFD2B, 0xFD2B}, + {0xFD2C, 0xFD2C, 0xFD2C}, {0xFD2D, 0xFD2D, 0xFD2D}, + {0xFD2E, 0xFD2E, 0xFD2E}, {0xFD2F, 0xFD2F, 0xFD2F}, + {0xFD30, 0xFD30, 0xFD30}, {0xFD31, 0xFD31, 0xFD31}, + {0xFD32, 0xFD32, 0xFD32}, {0xFD33, 0xFD33, 0xFD33}, + {0xFD34, 0xFD34, 0xFD34}, {0xFD35, 0xFD35, 0xFD35}, + {0xFD36, 0xFD36, 0xFD36}, {0xFD37, 0xFD37, 0xFD37}, + {0xFD38, 0xFD38, 0xFD38}, {0xFD39, 0xFD39, 0xFD39}, + {0xFD3A, 0xFD3A, 0xFD3A}, {0xFD3B, 0xFD3B, 0xFD3B}, + {0xFD3C, 0xFD3C, 0xFD3C}, {0xFD3D, 0xFD3D, 0xFD3D}, + {0xFD50, 0xFD50, 0xFD50}, {0xFD51, 0xFD51, 0xFD51}, + {0xFD52, 0xFD52, 0xFD52}, {0xFD53, 0xFD53, 0xFD53}, + {0xFD54, 0xFD54, 0xFD54}, {0xFD55, 0xFD55, 0xFD55}, + {0xFD56, 0xFD56, 0xFD56}, {0xFD57, 0xFD57, 0xFD57}, + {0xFD58, 0xFD58, 0xFD58}, {0xFD59, 0xFD59, 0xFD59}, + {0xFD5A, 0xFD5A, 0xFD5A}, {0xFD5B, 0xFD5B, 0xFD5B}, + {0xFD5C, 0xFD5C, 0xFD5C}, {0xFD5D, 0xFD5D, 0xFD5D}, + {0xFD5E, 0xFD5E, 0xFD5E}, {0xFD5F, 0xFD5F, 0xFD5F}, + {0xFD60, 0xFD60, 0xFD60}, {0xFD61, 0xFD61, 0xFD61}, + {0xFD62, 0xFD62, 0xFD62}, {0xFD63, 0xFD63, 0xFD63}, + {0xFD64, 0xFD64, 0xFD64}, {0xFD65, 0xFD65, 0xFD65}, + {0xFD66, 0xFD66, 0xFD66}, {0xFD67, 0xFD67, 0xFD67}, + {0xFD68, 0xFD68, 0xFD68}, {0xFD69, 0xFD69, 0xFD69}, + {0xFD6A, 0xFD6A, 0xFD6A}, {0xFD6B, 0xFD6B, 0xFD6B}, + {0xFD6C, 0xFD6C, 0xFD6C}, {0xFD6D, 0xFD6D, 0xFD6D}, + {0xFD6E, 0xFD6E, 0xFD6E}, {0xFD6F, 0xFD6F, 0xFD6F}, + {0xFD70, 0xFD70, 0xFD70}, {0xFD71, 0xFD71, 0xFD71}, + {0xFD72, 0xFD72, 0xFD72}, {0xFD73, 0xFD73, 0xFD73}, + {0xFD74, 0xFD74, 0xFD74}, {0xFD75, 0xFD75, 0xFD75}, + {0xFD76, 0xFD76, 0xFD76}, {0xFD77, 0xFD77, 0xFD77}, + {0xFD78, 0xFD78, 0xFD78}, {0xFD79, 0xFD79, 0xFD79}, + {0xFD7A, 0xFD7A, 0xFD7A}, {0xFD7B, 0xFD7B, 0xFD7B}, + {0xFD7C, 0xFD7C, 0xFD7C}, {0xFD7D, 0xFD7D, 0xFD7D}, + {0xFD7E, 0xFD7E, 0xFD7E}, {0xFD7F, 0xFD7F, 0xFD7F}, + {0xFD80, 0xFD80, 0xFD80}, {0xFD81, 0xFD81, 0xFD81}, + {0xFD82, 0xFD82, 0xFD82}, {0xFD83, 0xFD83, 0xFD83}, + {0xFD84, 0xFD84, 0xFD84}, {0xFD85, 0xFD85, 0xFD85}, + {0xFD86, 0xFD86, 0xFD86}, {0xFD87, 0xFD87, 0xFD87}, + {0xFD88, 0xFD88, 0xFD88}, {0xFD89, 0xFD89, 0xFD89}, + {0xFD8A, 0xFD8A, 0xFD8A}, {0xFD8B, 0xFD8B, 0xFD8B}, + {0xFD8C, 0xFD8C, 0xFD8C}, {0xFD8D, 0xFD8D, 0xFD8D}, + {0xFD8E, 0xFD8E, 0xFD8E}, {0xFD8F, 0xFD8F, 0xFD8F}, + {0xFD92, 0xFD92, 0xFD92}, {0xFD93, 0xFD93, 0xFD93}, + {0xFD94, 0xFD94, 0xFD94}, {0xFD95, 0xFD95, 0xFD95}, + {0xFD96, 0xFD96, 0xFD96}, {0xFD97, 0xFD97, 0xFD97}, + {0xFD98, 0xFD98, 0xFD98}, {0xFD99, 0xFD99, 0xFD99}, + {0xFD9A, 0xFD9A, 0xFD9A}, {0xFD9B, 0xFD9B, 0xFD9B}, + {0xFD9C, 0xFD9C, 0xFD9C}, {0xFD9D, 0xFD9D, 0xFD9D}, + {0xFD9E, 0xFD9E, 0xFD9E}, {0xFD9F, 0xFD9F, 0xFD9F}, + {0xFDA0, 0xFDA0, 0xFDA0}, {0xFDA1, 0xFDA1, 0xFDA1}, + {0xFDA2, 0xFDA2, 0xFDA2}, {0xFDA3, 0xFDA3, 0xFDA3}, + {0xFDA4, 0xFDA4, 0xFDA4}, {0xFDA5, 0xFDA5, 0xFDA5}, + {0xFDA6, 0xFDA6, 0xFDA6}, {0xFDA7, 0xFDA7, 0xFDA7}, + {0xFDA8, 0xFDA8, 0xFDA8}, {0xFDA9, 0xFDA9, 0xFDA9}, + {0xFDAA, 0xFDAA, 0xFDAA}, {0xFDAB, 0xFDAB, 0xFDAB}, + {0xFDAC, 0xFDAC, 0xFDAC}, {0xFDAD, 0xFDAD, 0xFDAD}, + {0xFDAE, 0xFDAE, 0xFDAE}, {0xFDAF, 0xFDAF, 0xFDAF}, + {0xFDB0, 0xFDB0, 0xFDB0}, {0xFDB1, 0xFDB1, 0xFDB1}, + {0xFDB2, 0xFDB2, 0xFDB2}, {0xFDB3, 0xFDB3, 0xFDB3}, + {0xFDB4, 0xFDB4, 0xFDB4}, {0xFDB5, 0xFDB5, 0xFDB5}, + {0xFDB6, 0xFDB6, 0xFDB6}, {0xFDB7, 0xFDB7, 0xFDB7}, + {0xFDB8, 0xFDB8, 0xFDB8}, {0xFDB9, 0xFDB9, 0xFDB9}, + {0xFDBA, 0xFDBA, 0xFDBA}, {0xFDBB, 0xFDBB, 0xFDBB}, + {0xFDBC, 0xFDBC, 0xFDBC}, {0xFDBD, 0xFDBD, 0xFDBD}, + {0xFDBE, 0xFDBE, 0xFDBE}, {0xFDBF, 0xFDBF, 0xFDBF}, + {0xFDC0, 0xFDC0, 0xFDC0}, {0xFDC1, 0xFDC1, 0xFDC1}, + {0xFDC2, 0xFDC2, 0xFDC2}, {0xFDC3, 0xFDC3, 0xFDC3}, + {0xFDC4, 0xFDC4, 0xFDC4}, {0xFDC5, 0xFDC5, 0xFDC5}, + {0xFDC6, 0xFDC6, 0xFDC6}, {0xFDC7, 0xFDC7, 0xFDC7}, + {0xFDF0, 0xFDF0, 0xFDF0}, {0xFDF1, 0xFDF1, 0xFDF1}, + {0xFDF2, 0xFDF2, 0xFDF2}, {0xFDF3, 0xFDF3, 0xFDF3}, + {0xFDF4, 0xFDF4, 0xFDF4}, {0xFDF5, 0xFDF5, 0xFDF5}, + {0xFDF6, 0xFDF6, 0xFDF6}, {0xFDF7, 0xFDF7, 0xFDF7}, + {0xFDF8, 0xFDF8, 0xFDF8}, {0xFDF9, 0xFDF9, 0xFDF9}, + {0xFDFA, 0xFDFA, 0xFDFA}, {0xFDFB, 0xFDFB, 0xFDFB}, + {0xFE00, 0xFE00, 0xFE00}, {0xFE01, 0xFE01, 0xFE01}, + {0xFE02, 0xFE02, 0xFE02}, {0xFE03, 0xFE03, 0xFE03}, + {0xFE04, 0xFE04, 0xFE04}, {0xFE05, 0xFE05, 0xFE05}, + {0xFE06, 0xFE06, 0xFE06}, {0xFE07, 0xFE07, 0xFE07}, + {0xFE08, 0xFE08, 0xFE08}, {0xFE09, 0xFE09, 0xFE09}, + {0xFE0A, 0xFE0A, 0xFE0A}, {0xFE0B, 0xFE0B, 0xFE0B}, + {0xFE0C, 0xFE0C, 0xFE0C}, {0xFE0D, 0xFE0D, 0xFE0D}, + {0xFE0E, 0xFE0E, 0xFE0E}, {0xFE0F, 0xFE0F, 0xFE0F}, + {0xFE20, 0xFE20, 0xFE20}, {0xFE21, 0xFE21, 0xFE21}, + {0xFE22, 0xFE22, 0xFE22}, {0xFE23, 0xFE23, 0xFE23}, + {0xFE70, 0xFE70, 0xFE70}, {0xFE71, 0xFE71, 0xFE71}, + {0xFE72, 0xFE72, 0xFE72}, {0xFE73, 0xFE73, 0xFE73}, + {0xFE74, 0xFE74, 0xFE74}, {0xFE76, 0xFE76, 0xFE76}, + {0xFE77, 0xFE77, 0xFE77}, {0xFE78, 0xFE78, 0xFE78}, + {0xFE79, 0xFE79, 0xFE79}, {0xFE7A, 0xFE7A, 0xFE7A}, + {0xFE7B, 0xFE7B, 0xFE7B}, {0xFE7C, 0xFE7C, 0xFE7C}, + {0xFE7D, 0xFE7D, 0xFE7D}, {0xFE7E, 0xFE7E, 0xFE7E}, + {0xFE7F, 0xFE7F, 0xFE7F}, {0xFE80, 0xFE80, 0xFE80}, + {0xFE81, 0xFE81, 0xFE81}, {0xFE82, 0xFE82, 0xFE82}, + {0xFE83, 0xFE83, 0xFE83}, {0xFE84, 0xFE84, 0xFE84}, + {0xFE85, 0xFE85, 0xFE85}, {0xFE86, 0xFE86, 0xFE86}, + {0xFE87, 0xFE87, 0xFE87}, {0xFE88, 0xFE88, 0xFE88}, + {0xFE89, 0xFE89, 0xFE89}, {0xFE8A, 0xFE8A, 0xFE8A}, + {0xFE8B, 0xFE8B, 0xFE8B}, {0xFE8C, 0xFE8C, 0xFE8C}, + {0xFE8D, 0xFE8D, 0xFE8D}, {0xFE8E, 0xFE8E, 0xFE8E}, + {0xFE8F, 0xFE8F, 0xFE8F}, {0xFE90, 0xFE90, 0xFE90}, + {0xFE91, 0xFE91, 0xFE91}, {0xFE92, 0xFE92, 0xFE92}, + {0xFE93, 0xFE93, 0xFE93}, {0xFE94, 0xFE94, 0xFE94}, + {0xFE95, 0xFE95, 0xFE95}, {0xFE96, 0xFE96, 0xFE96}, + {0xFE97, 0xFE97, 0xFE97}, {0xFE98, 0xFE98, 0xFE98}, + {0xFE99, 0xFE99, 0xFE99}, {0xFE9A, 0xFE9A, 0xFE9A}, + {0xFE9B, 0xFE9B, 0xFE9B}, {0xFE9C, 0xFE9C, 0xFE9C}, + {0xFE9D, 0xFE9D, 0xFE9D}, {0xFE9E, 0xFE9E, 0xFE9E}, + {0xFE9F, 0xFE9F, 0xFE9F}, {0xFEA0, 0xFEA0, 0xFEA0}, + {0xFEA1, 0xFEA1, 0xFEA1}, {0xFEA2, 0xFEA2, 0xFEA2}, + {0xFEA3, 0xFEA3, 0xFEA3}, {0xFEA4, 0xFEA4, 0xFEA4}, + {0xFEA5, 0xFEA5, 0xFEA5}, {0xFEA6, 0xFEA6, 0xFEA6}, + {0xFEA7, 0xFEA7, 0xFEA7}, {0xFEA8, 0xFEA8, 0xFEA8}, + {0xFEA9, 0xFEA9, 0xFEA9}, {0xFEAA, 0xFEAA, 0xFEAA}, + {0xFEAB, 0xFEAB, 0xFEAB}, {0xFEAC, 0xFEAC, 0xFEAC}, + {0xFEAD, 0xFEAD, 0xFEAD}, {0xFEAE, 0xFEAE, 0xFEAE}, + {0xFEAF, 0xFEAF, 0xFEAF}, {0xFEB0, 0xFEB0, 0xFEB0}, + {0xFEB1, 0xFEB1, 0xFEB1}, {0xFEB2, 0xFEB2, 0xFEB2}, + {0xFEB3, 0xFEB3, 0xFEB3}, {0xFEB4, 0xFEB4, 0xFEB4}, + {0xFEB5, 0xFEB5, 0xFEB5}, {0xFEB6, 0xFEB6, 0xFEB6}, + {0xFEB7, 0xFEB7, 0xFEB7}, {0xFEB8, 0xFEB8, 0xFEB8}, + {0xFEB9, 0xFEB9, 0xFEB9}, {0xFEBA, 0xFEBA, 0xFEBA}, + {0xFEBB, 0xFEBB, 0xFEBB}, {0xFEBC, 0xFEBC, 0xFEBC}, + {0xFEBD, 0xFEBD, 0xFEBD}, {0xFEBE, 0xFEBE, 0xFEBE}, + {0xFEBF, 0xFEBF, 0xFEBF}, {0xFEC0, 0xFEC0, 0xFEC0}, + {0xFEC1, 0xFEC1, 0xFEC1}, {0xFEC2, 0xFEC2, 0xFEC2}, + {0xFEC3, 0xFEC3, 0xFEC3}, {0xFEC4, 0xFEC4, 0xFEC4}, + {0xFEC5, 0xFEC5, 0xFEC5}, {0xFEC6, 0xFEC6, 0xFEC6}, + {0xFEC7, 0xFEC7, 0xFEC7}, {0xFEC8, 0xFEC8, 0xFEC8}, + {0xFEC9, 0xFEC9, 0xFEC9}, {0xFECA, 0xFECA, 0xFECA}, + {0xFECB, 0xFECB, 0xFECB}, {0xFECC, 0xFECC, 0xFECC}, + {0xFECD, 0xFECD, 0xFECD}, {0xFECE, 0xFECE, 0xFECE}, + {0xFECF, 0xFECF, 0xFECF}, {0xFED0, 0xFED0, 0xFED0}, + {0xFED1, 0xFED1, 0xFED1}, {0xFED2, 0xFED2, 0xFED2}, + {0xFED3, 0xFED3, 0xFED3}, {0xFED4, 0xFED4, 0xFED4}, + {0xFED5, 0xFED5, 0xFED5}, {0xFED6, 0xFED6, 0xFED6}, + {0xFED7, 0xFED7, 0xFED7}, {0xFED8, 0xFED8, 0xFED8}, + {0xFED9, 0xFED9, 0xFED9}, {0xFEDA, 0xFEDA, 0xFEDA}, + {0xFEDB, 0xFEDB, 0xFEDB}, {0xFEDC, 0xFEDC, 0xFEDC}, + {0xFEDD, 0xFEDD, 0xFEDD}, {0xFEDE, 0xFEDE, 0xFEDE}, + {0xFEDF, 0xFEDF, 0xFEDF}, {0xFEE0, 0xFEE0, 0xFEE0}, + {0xFEE1, 0xFEE1, 0xFEE1}, {0xFEE2, 0xFEE2, 0xFEE2}, + {0xFEE3, 0xFEE3, 0xFEE3}, {0xFEE4, 0xFEE4, 0xFEE4}, + {0xFEE5, 0xFEE5, 0xFEE5}, {0xFEE6, 0xFEE6, 0xFEE6}, + {0xFEE7, 0xFEE7, 0xFEE7}, {0xFEE8, 0xFEE8, 0xFEE8}, + {0xFEE9, 0xFEE9, 0xFEE9}, {0xFEEA, 0xFEEA, 0xFEEA}, + {0xFEEB, 0xFEEB, 0xFEEB}, {0xFEEC, 0xFEEC, 0xFEEC}, + {0xFEED, 0xFEED, 0xFEED}, {0xFEEE, 0xFEEE, 0xFEEE}, + {0xFEEF, 0xFEEF, 0xFEEF}, {0xFEF0, 0xFEF0, 0xFEF0}, + {0xFEF1, 0xFEF1, 0xFEF1}, {0xFEF2, 0xFEF2, 0xFEF2}, + {0xFEF3, 0xFEF3, 0xFEF3}, {0xFEF4, 0xFEF4, 0xFEF4}, + {0xFEF5, 0xFEF5, 0xFEF5}, {0xFEF6, 0xFEF6, 0xFEF6}, + {0xFEF7, 0xFEF7, 0xFEF7}, {0xFEF8, 0xFEF8, 0xFEF8}, + {0xFEF9, 0xFEF9, 0xFEF9}, {0xFEFA, 0xFEFA, 0xFEFA}, + {0xFEFB, 0xFEFB, 0xFEFB}, {0xFEFC, 0xFEFC, 0xFEFC}, + {0xFF21, 0xFF21, 0xFF41}, {0xFF22, 0xFF22, 0xFF42}, + {0xFF23, 0xFF23, 0xFF43}, {0xFF24, 0xFF24, 0xFF44}, + {0xFF25, 0xFF25, 0xFF45}, {0xFF26, 0xFF26, 0xFF46}, + {0xFF27, 0xFF27, 0xFF47}, {0xFF28, 0xFF28, 0xFF48}, + {0xFF29, 0xFF29, 0xFF49}, {0xFF2A, 0xFF2A, 0xFF4A}, + {0xFF2B, 0xFF2B, 0xFF4B}, {0xFF2C, 0xFF2C, 0xFF4C}, + {0xFF2D, 0xFF2D, 0xFF4D}, {0xFF2E, 0xFF2E, 0xFF4E}, + {0xFF2F, 0xFF2F, 0xFF4F}, {0xFF30, 0xFF30, 0xFF50}, + {0xFF31, 0xFF31, 0xFF51}, {0xFF32, 0xFF32, 0xFF52}, + {0xFF33, 0xFF33, 0xFF53}, {0xFF34, 0xFF34, 0xFF54}, + {0xFF35, 0xFF35, 0xFF55}, {0xFF36, 0xFF36, 0xFF56}, + {0xFF37, 0xFF37, 0xFF57}, {0xFF38, 0xFF38, 0xFF58}, + {0xFF39, 0xFF39, 0xFF59}, {0xFF3A, 0xFF3A, 0xFF5A}, + {0xFF41, 0xFF21, 0xFF41}, {0xFF42, 0xFF22, 0xFF42}, + {0xFF43, 0xFF23, 0xFF43}, {0xFF44, 0xFF24, 0xFF44}, + {0xFF45, 0xFF25, 0xFF45}, {0xFF46, 0xFF26, 0xFF46}, + {0xFF47, 0xFF27, 0xFF47}, {0xFF48, 0xFF28, 0xFF48}, + {0xFF49, 0xFF29, 0xFF49}, {0xFF4A, 0xFF2A, 0xFF4A}, + {0xFF4B, 0xFF2B, 0xFF4B}, {0xFF4C, 0xFF2C, 0xFF4C}, + {0xFF4D, 0xFF2D, 0xFF4D}, {0xFF4E, 0xFF2E, 0xFF4E}, + {0xFF4F, 0xFF2F, 0xFF4F}, {0xFF50, 0xFF30, 0xFF50}, + {0xFF51, 0xFF31, 0xFF51}, {0xFF52, 0xFF32, 0xFF52}, + {0xFF53, 0xFF33, 0xFF53}, {0xFF54, 0xFF34, 0xFF54}, + {0xFF55, 0xFF35, 0xFF55}, {0xFF56, 0xFF36, 0xFF56}, + {0xFF57, 0xFF37, 0xFF57}, {0xFF58, 0xFF38, 0xFF58}, + {0xFF59, 0xFF39, 0xFF59}, {0xFF5A, 0xFF3A, 0xFF5A}, + {0xFF66, 0xFF66, 0xFF66}, {0xFF67, 0xFF67, 0xFF67}, + {0xFF68, 0xFF68, 0xFF68}, {0xFF69, 0xFF69, 0xFF69}, + {0xFF6A, 0xFF6A, 0xFF6A}, {0xFF6B, 0xFF6B, 0xFF6B}, + {0xFF6C, 0xFF6C, 0xFF6C}, {0xFF6D, 0xFF6D, 0xFF6D}, + {0xFF6E, 0xFF6E, 0xFF6E}, {0xFF6F, 0xFF6F, 0xFF6F}, + {0xFF70, 0xFF70, 0xFF70}, {0xFF71, 0xFF71, 0xFF71}, + {0xFF72, 0xFF72, 0xFF72}, {0xFF73, 0xFF73, 0xFF73}, + {0xFF74, 0xFF74, 0xFF74}, {0xFF75, 0xFF75, 0xFF75}, + {0xFF76, 0xFF76, 0xFF76}, {0xFF77, 0xFF77, 0xFF77}, + {0xFF78, 0xFF78, 0xFF78}, {0xFF79, 0xFF79, 0xFF79}, + {0xFF7A, 0xFF7A, 0xFF7A}, {0xFF7B, 0xFF7B, 0xFF7B}, + {0xFF7C, 0xFF7C, 0xFF7C}, {0xFF7D, 0xFF7D, 0xFF7D}, + {0xFF7E, 0xFF7E, 0xFF7E}, {0xFF7F, 0xFF7F, 0xFF7F}, + {0xFF80, 0xFF80, 0xFF80}, {0xFF81, 0xFF81, 0xFF81}, + {0xFF82, 0xFF82, 0xFF82}, {0xFF83, 0xFF83, 0xFF83}, + {0xFF84, 0xFF84, 0xFF84}, {0xFF85, 0xFF85, 0xFF85}, + {0xFF86, 0xFF86, 0xFF86}, {0xFF87, 0xFF87, 0xFF87}, + {0xFF88, 0xFF88, 0xFF88}, {0xFF89, 0xFF89, 0xFF89}, + {0xFF8A, 0xFF8A, 0xFF8A}, {0xFF8B, 0xFF8B, 0xFF8B}, + {0xFF8C, 0xFF8C, 0xFF8C}, {0xFF8D, 0xFF8D, 0xFF8D}, + {0xFF8E, 0xFF8E, 0xFF8E}, {0xFF8F, 0xFF8F, 0xFF8F}, + {0xFF90, 0xFF90, 0xFF90}, {0xFF91, 0xFF91, 0xFF91}, + {0xFF92, 0xFF92, 0xFF92}, {0xFF93, 0xFF93, 0xFF93}, + {0xFF94, 0xFF94, 0xFF94}, {0xFF95, 0xFF95, 0xFF95}, + {0xFF96, 0xFF96, 0xFF96}, {0xFF97, 0xFF97, 0xFF97}, + {0xFF98, 0xFF98, 0xFF98}, {0xFF99, 0xFF99, 0xFF99}, + {0xFF9A, 0xFF9A, 0xFF9A}, {0xFF9B, 0xFF9B, 0xFF9B}, + {0xFF9C, 0xFF9C, 0xFF9C}, {0xFF9D, 0xFF9D, 0xFF9D}, + {0xFF9E, 0xFF9E, 0xFF9E}, {0xFF9F, 0xFF9F, 0xFF9F}, + {0xFFA0, 0xFFA0, 0xFFA0}, {0xFFA1, 0xFFA1, 0xFFA1}, + {0xFFA2, 0xFFA2, 0xFFA2}, {0xFFA3, 0xFFA3, 0xFFA3}, + {0xFFA4, 0xFFA4, 0xFFA4}, {0xFFA5, 0xFFA5, 0xFFA5}, + {0xFFA6, 0xFFA6, 0xFFA6}, {0xFFA7, 0xFFA7, 0xFFA7}, + {0xFFA8, 0xFFA8, 0xFFA8}, {0xFFA9, 0xFFA9, 0xFFA9}, + {0xFFAA, 0xFFAA, 0xFFAA}, {0xFFAB, 0xFFAB, 0xFFAB}, + {0xFFAC, 0xFFAC, 0xFFAC}, {0xFFAD, 0xFFAD, 0xFFAD}, + {0xFFAE, 0xFFAE, 0xFFAE}, {0xFFAF, 0xFFAF, 0xFFAF}, + {0xFFB0, 0xFFB0, 0xFFB0}, {0xFFB1, 0xFFB1, 0xFFB1}, + {0xFFB2, 0xFFB2, 0xFFB2}, {0xFFB3, 0xFFB3, 0xFFB3}, + {0xFFB4, 0xFFB4, 0xFFB4}, {0xFFB5, 0xFFB5, 0xFFB5}, + {0xFFB6, 0xFFB6, 0xFFB6}, {0xFFB7, 0xFFB7, 0xFFB7}, + {0xFFB8, 0xFFB8, 0xFFB8}, {0xFFB9, 0xFFB9, 0xFFB9}, + {0xFFBA, 0xFFBA, 0xFFBA}, {0xFFBB, 0xFFBB, 0xFFBB}, + {0xFFBC, 0xFFBC, 0xFFBC}, {0xFFBD, 0xFFBD, 0xFFBD}, + {0xFFBE, 0xFFBE, 0xFFBE}, {0xFFC2, 0xFFC2, 0xFFC2}, + {0xFFC3, 0xFFC3, 0xFFC3}, {0xFFC4, 0xFFC4, 0xFFC4}, + {0xFFC5, 0xFFC5, 0xFFC5}, {0xFFC6, 0xFFC6, 0xFFC6}, + {0xFFC7, 0xFFC7, 0xFFC7}, {0xFFCA, 0xFFCA, 0xFFCA}, + {0xFFCB, 0xFFCB, 0xFFCB}, {0xFFCC, 0xFFCC, 0xFFCC}, + {0xFFCD, 0xFFCD, 0xFFCD}, {0xFFCE, 0xFFCE, 0xFFCE}, + {0xFFCF, 0xFFCF, 0xFFCF}, {0xFFD2, 0xFFD2, 0xFFD2}, + {0xFFD3, 0xFFD3, 0xFFD3}, {0xFFD4, 0xFFD4, 0xFFD4}, + {0xFFD5, 0xFFD5, 0xFFD5}, {0xFFD6, 0xFFD6, 0xFFD6}, + {0xFFD7, 0xFFD7, 0xFFD7}, {0xFFDA, 0xFFDA, 0xFFDA}, + {0xFFDB, 0xFFDB, 0xFFDB}, {0xFFDC, 0xFFDC, 0xFFDC}}; diff --git a/src/spelling/hunspell/w_char.hxx b/src/spelling/hunspell/w_char.hxx index 3719dd3b..336c454f 100644 --- a/src/spelling/hunspell/w_char.hxx +++ b/src/spelling/hunspell/w_char.hxx @@ -1,19 +1,73 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Hunspell, based on MySpell. + * + * The Initial Developers of the Original Code are + * Kevin Hendricks (MySpell) and Németh László (Hunspell). + * Portions created by the Initial Developers are Copyright (C) 2002-2005 + * the Initial Developers. All Rights Reserved. + * + * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, + * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, + * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, + * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, + * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef __WCHARHXX__ #define __WCHARHXX__ #ifndef GCC -typedef struct { +struct w_char { #else -typedef struct __attribute__ ((packed)) { +struct __attribute__((packed)) w_char { #endif - unsigned char l; - unsigned char h; -} w_char; + unsigned char l; + unsigned char h; + + friend bool operator<(const w_char a, const w_char b) { + unsigned short a_idx = (a.h << 8) + a.l; + unsigned short b_idx = (b.h << 8) + b.l; + return a_idx < b_idx; + } + + friend bool operator==(const w_char a, const w_char b) { + return (((a).l == (b).l) && ((a).h == (b).h)); + } + + friend bool operator!=(const w_char a, const w_char b) { + return !(a == b);; + } +}; // two character arrays struct replentry { - char * pattern; - char * pattern2; + char* pattern; + char* pattern2; bool start; bool end; }; From 7b45147708d9081cefe2ccaec00afa5d2ba7e35b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 22 Jun 2016 16:20:30 -0400 Subject: [PATCH 275/630] Update translations. --- resources/unix/focuswriter.appdata.xml | 11 + resources/unix/focuswriter.desktop | 5 +- resources/unix/po/af_ZA.po | 72 +++++ resources/unix/po/da.po | 15 +- resources/unix/po/he.po | 16 +- resources/unix/po/lt.po | 8 +- translations/focuswriter_af_ZA.qm | Bin 0 -> 10228 bytes ...uswriter_zh_TW.ts => focuswriter_af_ZA.ts} | 258 ++++++++-------- translations/focuswriter_ar.ts | 18 +- translations/focuswriter_ca.ts | 18 +- translations/focuswriter_cs.ts | 18 +- translations/focuswriter_da.qm | Bin 27558 -> 34180 bytes translations/focuswriter_da.ts | 198 ++++++------ translations/focuswriter_de.ts | 18 +- translations/focuswriter_el.ts | 18 +- translations/focuswriter_en.ts | 18 +- translations/focuswriter_en_GB.ts | 18 +- translations/focuswriter_eo.qm | Bin 34718 -> 34870 bytes translations/focuswriter_eo.ts | 146 ++++----- translations/focuswriter_es.qm | Bin 29442 -> 30396 bytes translations/focuswriter_es.ts | 58 ++-- translations/focuswriter_es_MX.ts | 18 +- translations/focuswriter_fi.ts | 18 +- translations/focuswriter_fr.ts | 18 +- translations/focuswriter_he.qm | Bin 30083 -> 31198 bytes translations/focuswriter_he.ts | 66 ++-- translations/focuswriter_hu.ts | 18 +- translations/focuswriter_hy.ts | 18 +- translations/focuswriter_id.ts | 18 +- translations/focuswriter_it.ts | 18 +- translations/focuswriter_ja.ts | 18 +- translations/focuswriter_ko.ts | 18 +- translations/focuswriter_lt.qm | Bin 36338 -> 36254 bytes translations/focuswriter_lt.ts | 288 +++++++++--------- translations/focuswriter_nl.ts | 18 +- translations/focuswriter_pl.ts | 18 +- translations/focuswriter_pt.ts | 18 +- translations/focuswriter_pt_BR.ts | 18 +- translations/focuswriter_ro.ts | 18 +- translations/focuswriter_ru.ts | 18 +- translations/focuswriter_sk.ts | 18 +- translations/focuswriter_sr.ts | 18 +- translations/focuswriter_sv.ts | 18 +- translations/focuswriter_tr.ts | 18 +- translations/focuswriter_uk.ts | 18 +- translations/focuswriter_vi.ts | 18 +- translations/focuswriter_zh_CN.ts | 18 +- translations/focuswriter_zh_TW.qm | 1 - 48 files changed, 888 insertions(+), 776 deletions(-) create mode 100644 resources/unix/po/af_ZA.po create mode 100644 translations/focuswriter_af_ZA.qm rename translations/{focuswriter_zh_TW.ts => focuswriter_af_ZA.ts} (92%) delete mode 100644 translations/focuswriter_zh_TW.qm diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index fe9dfc86..ff365400 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -4,6 +4,7 @@ CC0-1.0 GPL-3.0+ FocusWriter + FocusWriter FocusWriter FocusWriter FocusWriter @@ -35,6 +36,7 @@ FocusWriter FocusWriter Fullscreen word processor + Volskerm woordverwerker Textový procesor v režimu na celou obrazovku Tekstbehandling i fuldskærm Vollbild-Textverarbeitungsprogramm @@ -64,13 +66,16 @@ 全螢幕文字處理器

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

+

FocusWriter is 'n eenvoudige woordverwerker sonder enige afleidings. Dit maak gebruik van 'n wegsteek-koppelvlak wat jy kan gebruik deur jou muis na die kante van die skerm te beweeg en verskaf sodoende 'n bekende en gebruiklike voorkoms en gevoel, terwyl die program uit jou pad bly dat jy jou in jou werk kan verdiep.

FocusWriter je jednoduchý, nerozptylující zpracovatel textu. Používá schovávající se rozhraní, ke kterému se dostanete pohybem ukazovátka vaší myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce.

+

FocusWriter er en enkel tekstbehandler fri for distraherende elementer. Den anvender en brugerflade, der gemmes under arbejde med kan fremkaldes ved at føre musen til skærmens kanter, så programmet kan opsættes med kendte redskaber, men på en måde, hvor du kan fordybe dig i dit arbejde.

FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

Το FocusWriter είναι ένα απλό, χωρίς περισπασμούς πρόγραμμα επεξεργασίας κειμένου. Χρησιμοποιεί μια κρυφή διεπαφή που μπορείτε να αποκτήσετε πρόσβαση μετακινώντας το ποντίκι σας προς τα άκρα της οθόνης, επιτρέποντας στο πρόγραμμα να έχει μια οικεία εμφάνιση και αίσθηση σε αυτόενώ εξακολουθεί να πάρει έξω από το δρόμο, έτσι ώστε να μπορείτε να αφεθείτε στην εργασία σας.

FocusWriter estas simpla senmalatentiga tekstoprilaborilo. Ĝi uzas kaŝatan interfacon, kion vi atingas per movi vian muson al la randoj de la ekrano. Tiel la programaro eblas havi kutiman fasadon, dum ankoraŭ estas malobstrukciĝante por ke vi povas ĉirkaŭi vin en via laboro.

FocusWriter es un procesador de palabras simple y sin distractores. Éste utiliza una interfaz aislada que puede ser accedida moviendo el ratón a las esquinas de la pantalla, permitiendo que el programa tener una apariencia similar a cuando uno se aparta de todo y se puede concentrar sólo en su trabajo.

FocusWriter on yksinkertainen ja häiriötekijätön tekstinkäsittelyohjelma. Siinä on automaattisesti piiloutuva käyttöliittymä, johon pääsee siirtämällä hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä.

FocusWriter est un traitement de texte simple et non intrusif. Il utilise une interface masquée, accessible en déplaçant votre souris vers les coins de l'écran, ce qui confère au programme un aspect convivial tout en restant discret afin que vous puissiez vous plonger dans votre travail.

+

‏FocusWriter הינו מעבד תמלילים פשוט, נטול הפרעה. זה מנצל ממשק מחבוא (hide-away) אשר אליו ניגשים בעזרת הזזת עכבר על קצות המסך, מה שמתיר לתוכנית לקבל מראה ותחושה מוכרים בעוד שזה עדיין נותר באין מפריע כך שהתהא באפשרותך להשקיע את עצמך לתוך עבודתך.

FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

FocusWriter merupakan pengolah kata yang bebas pengalihan dan sederhana. Menggunakan antarmuka yang Anda akses dengan cara menggerakkan mouse ke tepi layar, membuat program ini memilik tampilan yang familiar dan memudahkan Anda untuk menyelam ke dalam pekerjaan Anda.

FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

@@ -88,13 +93,16 @@

FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。

FocusWriter 是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫作。

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

+

FocusWriter laat jou toe om jou omgewing te verpersoonlik. Jy kan tema's gebruik wat die lettertipe, kleure, en agtergrondfoto verander om 'n eie atmosfeer te skep. Die program ondersteun statistiek wat deurlopend opdateer, daaglikse doelwitte, veelvoudige oop dokumente, speltoetsing, en vele meer.

FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

+

FocusWriter kan tilpasse arbejdsmiljøet ved at arbejde med temaer, der kontrollerer skrifttype, farver og et baggrundsbillede for stemning. Programmet har også statistik, der opdateres mens du arbejder, daglige mål, mulighed for flere åbne dokumenter, stavekontrol og meget andet.

FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

Το FocusWriter σας επιτρέπει να προσαρμόσετε το περιβάλλον σας, δημιουργώντας θέματα που ελέγχουν την γραμματοσειρά, τα χρώματα και το φόντο της εικόνας για να προσθέσετε ατμόσφαιρα. Διαθέτει επίσης on-the-fly στατιστικές ενημέρωσης, καθημερινούς στόχους, πολλά ανοικτά έγγραφα, ορθογραφικό έλεγχο, και πολλά άλλα.

FocusWriter ebligas vin agordi vian verkejon per kreado de etosoj, kiuj agordas la tiparon, kolorojn, kaj fonan bildon por ŝanĝi etoson. Ĝi ankaŭ havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da malfermataj dokumentoj, literumada kontrolo, kaj multe pli.

FocusWriter permite personalizar su ambiente creado temas que controlan la fuente, los colores y la imagen de fondo para crear un ambiente. Otras características son que actualiza en tiempo real estadísticas, metas diarias, abre múltiples documentos, verifica ortografía y mucho más.

FocusWriterin ympäristöä voi muokata luomaan tunnelmaa tekemällä teemoja, jotka vaihtavat fontit, värit ja taustakuvan. FocusWriterissa on myös automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta.

FocusWriter vous permet de personnaliser votre environnement en créant des thèmes composés de polices, de couleurs et d'images d'arrière-plan afin d'agrémenter votre interface. Il inclut également des statistiques mises à jour à la volée, des objectifs quotidiens, l'ouverture de documents multiples, une vérification orthographique, et bien plus encore.

+

‏FocusWriter מאפשר לך להתאים את סביבתך על ידי יצירת ערכות נושא אשר שולטות על הגופן, הצבעים ועל תמונת הרקע כדי להוסיף אווירה. זה גם טומן בחובו עדכון סטטיסטיקה, יעדים יומיים, פתיחה מרובה של מסמכים, בדיקת-איות, ועוד הרבה יותר.

FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

FocusWriter membuat Anda untuk menciptakan lingkungan Anda sendiri dengan cara membuat tema yang mengatur jenis huruf, warna, dan gambar latar untuk menambah suasana. Program ini juga dilengkapi oleh statistika yang selalu diperbarui setiap saat, tujuan sehari-hari, membuka banyak dokumen sekaligus, pengecekan ejaan, dan masih banyak lagi.

FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

@@ -112,13 +120,16 @@

FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功能,如动态更新统计,每日计划,多标签页,拼写检查等。

FocusWriter 可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統計;每日目標、多重開啟文件、拼寫檢查等等的多種功能。

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

+

Voorts laai die program die dokument waarmee jy besig was, asook presies waar in die dokument jy besig was, wanneer jy die program oopmaak. So kan jy dadelik aan die werk spring.

Navíc, když otevřete program, vaše rozdělaná práce se automaticky nahraje a otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase budete moci okamžitě dát.

+

Desuden gemmes og genåbnes dit arbejde automatisk, så programmet ved opstart vil indlæse det seneste dokument og placere markøren hvor den var, så du med det samme kan komme tilbage i teksten.

Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

Επιπλέον, όταν ανοίγετε στο πρόγραμμα την τρέχουσα εργασία σας θα φορτώσει αυτόματα και την θέση όπου σταματήσατε, έτσι ώστε να μπορείτε να μεταβείτε αμέσως πίσω.

Plue, kiam vi lanĉas la programaron, via lasta malpreta verko aŭtomate ŝarĝas kaj allokas vin, kie vi laste ĉesis, por ke vi povas daŭri verki tuj.

Además, cuando se abre el programa, su trabajo actual se cargará y la posición en la que dejó la última vez para que pueda continuar inmediatamente.

Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa.

De plus, lorsque vous lancez le programme, votre travail en cours sera automatiquement chargé et vous vous retrouverez là où vous vous étiez arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage.

+

נוסף על כך, כאשר תפתח את התוכנית העבודה שלך אשר מצויה בתהליך תיטען מחדש וימקם אותך היכן שנותרת בפעם אחרונה בה עזבת כך שתהא באפשרותך לקפוץ בחזרה מיידית.

Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

Ditambah lagi, ketika Anda membuka program, pekerjaan Anda yang sedang dikerjaan akan otomatis dimuat dan memulai di mana Anda terakhir meninggalkannya sehingga Anda bisa memulainya lagi lebih cepat.

更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 7d84d2ec..bee94371 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -1,6 +1,7 @@ [Desktop Entry] Type=Application Name=FocusWriter +Name[af_ZA]=FocusWriter Name[cs]=FocusWriter Name[da]=FocusWriter Name[de]=FocusWriter @@ -32,6 +33,7 @@ Name[vi]=FocusWriter Name[zh_CN]=FocusWriter Name[zh_TW]=FocusWriter GenericName=Fullscreen Word Processor +GenericName[af_ZA]=Volskerm woordverwerker GenericName[cs]=Celoobrazovkový editor textu GenericName[da]=Tekstbehandlingsprogram i fuld skærm GenericName[de]=Vollbild-Textverarbeitung @@ -48,7 +50,7 @@ GenericName[hy]=Լիէկրան տեքստային խմբագրիչ GenericName[id]=Layar Penuh GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 -GenericName[lt]=Viso Ekrano Žodžių Doroklė +GenericName[lt]=Viso ekrano žodžių doroklė GenericName[nl]=Volscherm tekstverwerker GenericName[pl]=Pełnoekranowy edytor tekstów GenericName[pt]=Processador de texto em ecrã completo @@ -63,6 +65,7 @@ GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình GenericName[zh_CN]=全屏文本编辑器 GenericName[zh_TW]=全螢幕文字處理器 Comment=Write without distractions +Comment[af_ZA]=Skryf sonder afleidings Comment[cs]=Pište bez rozptylování Comment[da]=Skriv uden at blive distraheret Comment[de]=Schreibe ohne Ablenkung diff --git a/resources/unix/po/af_ZA.po b/resources/unix/po/af_ZA.po new file mode 100644 index 00000000..987333e8 --- /dev/null +++ b/resources/unix/po/af_ZA.po @@ -0,0 +1,72 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Hardus , 2015 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-06-13 17:41+0000\n" +"PO-Revision-Date: 2015-10-04 19:02+0000\n" +"Last-Translator: Hardus \n" +"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/gottcode/" +"focuswriter/language/af_ZA/)\n" +"Language: af_ZA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in.h:2 +msgid "Fullscreen word processor" +msgstr "Volskerm woordverwerker" + +#: ../focuswriter.appdata.xml.in.h:3 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" +"FocusWriter is 'n eenvoudige woordverwerker sonder enige afleidings. Dit " +"maak gebruik van 'n wegsteek-koppelvlak wat jy kan gebruik deur jou muis na " +"die kante van die skerm te beweeg en verskaf sodoende 'n bekende en " +"gebruiklike voorkoms en gevoel, terwyl die program uit jou pad bly dat jy " +"jou in jou werk kan verdiep. " + +#: ../focuswriter.appdata.xml.in.h:4 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" +"FocusWriter laat jou toe om jou omgewing te verpersoonlik. Jy kan tema's " +"gebruik wat die lettertipe, kleure, en agtergrondfoto verander om 'n eie " +"atmosfeer te skep. Die program ondersteun statistiek wat deurlopend " +"opdateer, daaglikse doelwitte, veelvoudige oop dokumente, speltoetsing, en " +"vele meer." + +#: ../focuswriter.appdata.xml.in.h:5 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" +"Voorts laai die program die dokument waarmee jy besig was, asook presies " +"waar in die dokument jy besig was, wanneer jy die program oopmaak. So kan jy " +"dadelik aan die werk spring." + +#: ../focuswriter.desktop.in.h:2 +msgid "Fullscreen Word Processor" +msgstr "Volskerm woordverwerker" + +#: ../focuswriter.desktop.in.h:3 +msgid "Write without distractions" +msgstr "Skryf sonder afleidings" diff --git a/resources/unix/po/da.po b/resources/unix/po/da.po index 7bb91706..9ba29b78 100644 --- a/resources/unix/po/da.po +++ b/resources/unix/po/da.po @@ -9,10 +9,10 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-13 17:41+0000\n" -"PO-Revision-Date: 2015-02-20 17:29+0000\n" +"PO-Revision-Date: 2015-11-09 20:33+0000\n" "Last-Translator: Morten Juhl-Johansen Zölde-Fejér \n" -"Language-Team: Danish (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Danish (http://www.transifex.com/gottcode/focuswriter/" "language/da/)\n" "Language: da\n" "MIME-Version: 1.0\n" @@ -35,6 +35,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter er en enkel tekstbehandler fri for distraherende elementer. Den " +"anvender en brugerflade, der gemmes under arbejde med kan fremkaldes ved at " +"føre musen til skærmens kanter, så programmet kan opsættes med kendte " +"redskaber, men på en måde, hvor du kan fordybe dig i dit arbejde." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -43,6 +47,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter kan tilpasse arbejdsmiljøet ved at arbejde med temaer, der " +"kontrollerer skrifttype, farver og et baggrundsbillede for stemning. " +"Programmet har også statistik, der opdateres mens du arbejder, daglige mål, " +"mulighed for flere åbne dokumenter, stavekontrol og meget andet." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -50,6 +58,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Desuden gemmes og genåbnes dit arbejde automatisk, så programmet ved opstart " +"vil indlæse det seneste dokument og placere markøren hvor den var, så du med " +"det samme kan komme tilbage i teksten." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" diff --git a/resources/unix/po/he.po b/resources/unix/po/he.po index 3c304220..52cd8ae2 100644 --- a/resources/unix/po/he.po +++ b/resources/unix/po/he.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# GenghisKhan , 2014 +# GenghisKhan , 2014-2015 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-13 17:41+0000\n" -"PO-Revision-Date: 2014-03-26 13:49+0000\n" +"PO-Revision-Date: 2015-09-14 14:06+0000\n" "Last-Translator: GenghisKhan \n" -"Language-Team: Hebrew (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Hebrew (http://www.transifex.com/gottcode/focuswriter/" "language/he/)\n" "Language: he\n" "MIME-Version: 1.0\n" @@ -34,6 +34,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"‏FocusWriter הינו מעבד תמלילים פשוט, נטול הפרעה. זה מנצל ממשק מחבוא (hide-" +"away) אשר אליו ניגשים בעזרת הזזת עכבר על קצות המסך, מה שמתיר לתוכנית לקבל " +"מראה ותחושה מוכרים בעוד שזה עדיין נותר באין מפריע כך שהתהא באפשרותך להשקיע " +"את עצמך לתוך עבודתך." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -42,6 +46,9 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"‏FocusWriter מאפשר לך להתאים את סביבתך על ידי יצירת ערכות נושא אשר שולטות על " +"הגופן, הצבעים ועל תמונת הרקע כדי להוסיף אווירה. זה גם טומן בחובו עדכון " +"סטטיסטיקה, יעדים יומיים, פתיחה מרובה של מסמכים, בדיקת-איות, ועוד הרבה יותר." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -49,6 +56,9 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"נוסף על כך, כאשר תפתח את התוכנית העבודה שלך אשר מצויה בתהליך תיטען מחדש " +"וימקם אותך היכן שנותרת בפעם אחרונה בה עזבת כך שתהא באפשרותך לקפוץ בחזרה " +"מיידית." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" diff --git a/resources/unix/po/lt.po b/resources/unix/po/lt.po index e58e8c79..69886b06 100644 --- a/resources/unix/po/lt.po +++ b/resources/unix/po/lt.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Moo, 2014 +# Moo, 2014,2016 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-13 17:41+0000\n" -"PO-Revision-Date: 2014-11-26 21:57+0000\n" +"PO-Revision-Date: 2016-04-15 20:54+0000\n" "Last-Translator: Moo\n" -"Language-Team: Lithuanian (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Lithuanian (http://www.transifex.com/gottcode/focuswriter/" "language/lt/)\n" "Language: lt\n" "MIME-Version: 1.0\n" @@ -64,7 +64,7 @@ msgstr "" #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "Viso Ekrano Žodžių Doroklė" +msgstr "Viso ekrano žodžių doroklė" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" diff --git a/translations/focuswriter_af_ZA.qm b/translations/focuswriter_af_ZA.qm new file mode 100644 index 0000000000000000000000000000000000000000..0571ca69cba0de75cb2047cb762d6142218521ac GIT binary patch literal 10228 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 - + Alert @@ -11,12 +11,12 @@ Collapse - + Vou op Expand - + Brei uit @@ -24,48 +24,52 @@ Dismiss Alert - + Wys waarskuwing van die hand Ctrl+D - + Ctrl+D DailyProgress - + %1% of %Ln minute(s) + - + %1% of %Ln word(s) + - + %Ln word(s) + - + %Ln minute(s) + - + 0% - + 0% @@ -73,12 +77,12 @@ Daily Progress - + Daaglikse vordering Longest streak - + Langste @@ -88,13 +92,14 @@ N/A - + N/B %n day(s) + @@ -109,7 +114,7 @@ %1% of daily goal - + %1% van daaglikse doelwit @@ -117,7 +122,7 @@ Set Language - + Wysig taal @@ -125,12 +130,12 @@ (Untitled %1) - + (Ongetiteld %1) %1 (Read-Only) - + %1 (Lees slegs) @@ -138,28 +143,28 @@ Sorry - + Jammer Unable to save '%1'. - + Kan nie '%1' stoor nie. Save File As - + Stoor dokument as Unable to overwrite '%1'. - + Kan nie oor '%1' skryf nie Rename File - + Herbenoem dokument @@ -169,7 +174,7 @@ Reload File? - + Herbenoem dokument? @@ -179,12 +184,12 @@ All unsaved changes will be lost. - + Alle ongestoorde veranderinge sal verloor word. Reload - + Herlaai @@ -194,7 +199,7 @@ Question - + Vraag @@ -207,7 +212,7 @@ File Changed - + Dokument verander @@ -217,32 +222,32 @@ Do you want to reload the file? - + Wil jy werklik die dokument herlaai? Reload - + Herlaai Ignore - + Ignoreer File Deleted - + Dokument uitgewis The file %1 was deleted by another program. - + Die dokument %1 is deur 'n ander program uitgewis. Do you want to save or close the file? - + Wil jy die dokument stoor of toe maak? @@ -250,7 +255,7 @@ Unable to open archive. - + Kan nie die argief oopmaak nie. @@ -258,12 +263,12 @@ Search for: - + Soek vir: Replace with: - + Vervang met: @@ -273,71 +278,72 @@ Whole words only - + Slegs volle woorde Regular expressions - + Gereelde uitdrukkings Search up - + Soek boontoe Search down - + Soek ondertoe &Find - + &Vind &Replace - + &Vervang Replace &All - + Vervang &alle Find - + Vind Replace - + Vervang Replace %n instance(s)? + Question - + Vraag - + Sorry - + Jammer - + Phrase not found. - + Frase nie gevind nie @@ -345,27 +351,27 @@ OpenDocument Text - + OpenDocument Teks Office Open XML - + Office Open XML Rich Text Format - + Rich Text Format Plain Text - + Suiwer teks All Files - + Alle dokument @@ -378,17 +384,17 @@ Add - + Voeg by Check Spelling... - + Kyk na spelling... (No suggestions found) - + (Geen aanbevelings gevind) @@ -396,12 +402,12 @@ Open Image - + Maak foto oop Images(%1) - + Foto's(%1) @@ -409,22 +415,22 @@ Select application language: - + Wysig toepassingtaal <System Language> - + <Sisteemtaal> Note - + Nota Please restart this application for the change in language to take effect. - + Herlaai asseblief hierdie toepassing vir die taalwysiging om pos te vat. @@ -432,7 +438,7 @@ Unable to open archive. - + Kan nie die argief oopmaak nie. @@ -440,17 +446,17 @@ Preferences - + Voorkeure General - + Algemeen Statistics - + Statistiek @@ -460,81 +466,81 @@ Spell Checking - + Speltoetsing Select Dictionary - + Kies woordeboek Sorry - + Jammer Unable to open archive. - + Kan nie die argief oopmaak nie. The archive does not contain a usable dictionary. - + Die argief bevat nie 'n bruikbare woordeboek nie. Question - + Vraag Shortcuts - + Kortpaaie One or more shortcuts conflict. Do you wish to proceed? - + Een of meer kortpaaie veroorsaak konflik. Wil jy voortgaan? The dictionary "%1" already exists. Do you want to replace it? - + Die woordeboek "%1" bestaan reeds. Wil jy dit vervang? Daily Goal - + Daaglikse doelwit None - + Geen Minutes: - + Minute: Words: - + Woorde: Editing - + Redigering Always vertically center - + Altyd vertikaalgesentreerd @@ -549,22 +555,22 @@ Typewriter sounds - + Tikmasjienklanke Smart quotes: - + Slim aanhalings: Double - + Dubbel Single - + Enkel @@ -579,12 +585,12 @@ Saving - + Stoor tans Automatically save changes - + Stoor vanself veranderinge @@ -594,22 +600,22 @@ Word count - + Woordtelling Page count - + Bladsytelling Paragraph count - + Paragraaftelling Character count - + Karaktertelling @@ -629,7 +635,7 @@ Reset daily progress for today to zero? - + Herstel daaglike vordering vir vandag na nul? @@ -639,22 +645,22 @@ Default format: - + Verstek formaat: Reset Today - + Herstel vandag History - + Geskiedenis Remember history - + Onthou geskiedenis @@ -775,7 +781,7 @@ Add - + Voeg by @@ -926,7 +932,7 @@ Question - + Vraag @@ -941,7 +947,7 @@ Sorry - + Jammer @@ -993,12 +999,12 @@ Replacing quotation marks... - + Vervang tans aanhalingstekens Please Wait - + Wag asseblief @@ -1011,12 +1017,12 @@ &Add - + &Voeg by &Ignore - + &Ignoreer @@ -1026,7 +1032,7 @@ &Change - + &Wysig @@ -1036,37 +1042,37 @@ Not in dictionary: - + Nie in woordeboek: Change to: - + Verander na: Checking spelling... - + Gaan tans spelling na Cancel - + Kanselleer Please wait - + Wag asseblief Continue checking at beginning of file? - + Gaan voort om die begin van dokument na te gaan? Spell check complete. - + Klaar spelling nagegaan @@ -1089,12 +1095,12 @@ Details - + Besonderhede Name: - + Naam: @@ -1128,7 +1134,7 @@ Name: - + Naam: @@ -1320,7 +1326,7 @@ Single - + Enkel @@ -1330,7 +1336,7 @@ Double - + Dubbel @@ -1430,7 +1436,7 @@ Question - + Vraag @@ -1439,7 +1445,7 @@ - + Themes (%1) @@ -1449,7 +1455,7 @@ - + Export Theme @@ -1464,7 +1470,7 @@ Question - + Vraag @@ -1575,7 +1581,7 @@ Question - + Vraag @@ -1624,7 +1630,7 @@ FocusWriter - + FocusWriter @@ -1684,7 +1690,7 @@ (Untitled %1) - + (Ongetiteld %1) diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index a8cd6b87..8f83bddc 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -47,7 +47,7 @@ - + %1% of %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln word(s) @@ -71,7 +71,7 @@ - + %Ln minute(s) @@ -83,7 +83,7 @@ - + 0% @@ -359,13 +359,13 @@ - + Sorry معذرة! - + Phrase not found. كلمة غير موجودة. @@ -1469,7 +1469,7 @@ - + Themes (%1) @@ -1479,7 +1479,7 @@ تحميل سمة - + Export Theme تصدير السمة diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 83ca8263..e2dcfe3b 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) @@ -51,7 +51,7 @@ - + %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln minute(s) @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Disculpeu - + Phrase not found. No s'ha trobat la frase @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ Importa Tema - + Export Theme Exporta Tema diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index be21a835..34212df7 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% z %Ln minut @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% z %Ln slov @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln slovo @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln minuta @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry Promiňte - + Phrase not found. Slovní spojení nebylo nenalezeno. @@ -1451,7 +1451,7 @@
- + Themes (%1) Vzhledy (%1) @@ -1461,7 +1461,7 @@ Zavést vzhled
- + Export Theme Vyvést podobu diff --git a/translations/focuswriter_da.qm b/translations/focuswriter_da.qm index 35a3ac03db68f8bc1db061658e9abdcbd67f1b5e..78db8a3188c639be059d867305b9ae9ee07dda9b 100644 GIT binary patch delta 8666 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 diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 8c1d7567..c5b46dec 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -35,41 +35,41 @@ DailyProgress - + %1% of %Ln minute(s) - - - + + %1% af %Ln minut + %1% af %Ln minutter - + %1% of %Ln word(s) - - - + + %1% af %Ln ord + %1% af %Ln ord - + %Ln word(s) - - - + + %Ln ord + %Ln ord - + %Ln minute(s) - - - + + %Ln minut + %Ln minutter - + 0% - + 0% @@ -77,35 +77,35 @@ Daily Progress - + Dagligt fremskridt Longest streak - + Længste stræk Current streak - + Nuværende stræk N/A - + N/A %n day(s) - - - + + %n dag + %n dage %1 &ndash; %2 - + %1 &ndash; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% af dagligt mål
@@ -122,7 +122,7 @@ Set Language - + Vælg sprog @@ -130,12 +130,12 @@ (Untitled %1) - (Uden titel%1) + (Unavngivet %1) %1 (Read-Only) - + %1 (skrivebeskyttet) @@ -174,12 +174,12 @@ Reload File? - + Genindlæs fil? Reload the file '%1' from disk? - + Genindlæs filen '%1' fra disken? @@ -194,7 +194,7 @@ Untitled %1 - Uden titel %1 + Unavngivet %1 @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - + Filen '%1' blev ændret af et andet program. @@ -255,7 +255,7 @@ Unable to open archive. - Det er ikke muligt at åbne arkivet. + Kunne ikke åbne arkivet. @@ -335,13 +335,13 @@
- + Sorry Beklager - + Phrase not found. Frasen kunne ikke findes. @@ -351,32 +351,32 @@ OpenDocument Text - + OpenDocument Text Office Open XML - + Office Open XML Rich Text Format - + Rich Text Format Plain Text - + Ren tekst All Files - + Alle filer All Supported Files - + Alle understøttede filer
@@ -438,7 +438,7 @@ Unable to open archive. - Det er ikke muligt at åbne arkivet. + Kunne ikke åbne arkivet. @@ -635,42 +635,42 @@ Reset daily progress for today to zero? - + Nulstil dagligt fremskridt for i dag? Write byte order mark in plain text files - + Indlæg Byte Order Mark i de rene tekstfiler Default format: - + Standardformat: Reset Today - + Nulstil i dag History - + Historik Remember history - + Husk historik Show streaks - + Vis stræk Minimum progress for streaks: - + Minimumsfremskridt for stræk: @@ -685,12 +685,12 @@ Count each letter as a word - + Tæl hvert bogstav som et ord Page Count Algorithm - + Algoritme for sideoptælling @@ -800,7 +800,7 @@ Not a supported RTF file. - + Ikke en understøttet RTF-fil. @@ -808,7 +808,7 @@ Unexpectedly reached end of file. - + Uventet slutning på filen. @@ -897,7 +897,7 @@ Duplicate - + Duplik @@ -922,7 +922,7 @@ Duplicate Session - + Duplik af session @@ -1067,7 +1067,7 @@ Continue checking at beginning of file? - + Begynd check ved start på filen? @@ -1171,74 +1171,74 @@ Opacity: - + Gennemsigtighed: Position: - + Position: Width: - + Bredde: Round Text Background Corners - + Runde hjørner på tekstbaggrund Radius: - + Radius: Blur Text Background - + Slør tekstbaggrund Text Background Drop Shadow - + Skygge på tekstbaggrund Vertical Offset: - + Lodret afsæt: Margins - + Margener Window: - + Vindue: Page: - + ide: Indent first line - + Indryk første linie Above: - + Over: Below: - + Under: @@ -1248,12 +1248,12 @@ Edit Theme - + Rediger tema Window Background - + Vinduesbaggrund @@ -1296,7 +1296,7 @@ Text Background - + Tekstbaggrund @@ -1346,7 +1346,7 @@ Height: - + Højde: @@ -1356,12 +1356,12 @@ Tab Width: - + Fanebredde: New Theme - + Nyt tema @@ -1374,54 +1374,54 @@ Default - Standard + Standard Gentle Blues - + Gentle Blues Old School - + Old School Space Dreams - + Space Dreams Writing Desk - + Writing Desk New - Ny + Nyt Duplicate - + Dupliker Custom - + Tilpasset Edit - Rediger + Rediger Delete - Slet + Slet @@ -1441,13 +1441,13 @@ Delete theme '%1'? - + Slet temaet '%1' - + Themes (%1) - + Temaer (%1) @@ -1455,7 +1455,7 @@ Importer tema - + Export Theme Eksporter tema @@ -1695,7 +1695,7 @@ List all documents - + Liste over alle dokumenter @@ -1771,17 +1771,17 @@ Save Changes? - + Gem ændringer? Save changes to the file '%1' before closing? - + Gem ændringerne til filen '%1', inden den lukkes? Your changes will be lost if you don't save them. - + Dine ændringer vil gå tabt, hvis du ikke gemmer dem. @@ -2096,7 +2096,7 @@ Set &Language... - + Sæt &sprog @@ -2111,7 +2111,7 @@ &Daily Progress - + &Dagligt fremskridt diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 9b2e3003..da683cf0 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% von %Ln Minute @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% von %Ln Wort @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln Wort @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln Minute @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Entschuldigung - + Phrase not found. Ausdruck nicht gefunden. @@ -1445,7 +1445,7 @@ - + Themes (%1) Themen (%1) @@ -1455,7 +1455,7 @@ Thema importieren - + Export Theme Thema exportieren diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 9d9a00d2..6a7a5169 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% απο %Ln λεπτο @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% απο %Ln λέξη @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln λέξη @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln λεπτο @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Λυπούμαστε - + Phrase not found. Δεν βρέθηκε η φράση. @@ -1445,7 +1445,7 @@ - + Themes (%1) Θέματα (%1) @@ -1455,7 +1455,7 @@ Εισαγωγή Θέματος
- + Export Theme Εξαγωγή Θέματος diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 6176420e..059a61e1 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% of %Ln minute @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% of %Ln word @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln word @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minute @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry - + Phrase not found. @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ - + Export Theme diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index b5b758de..44c7d6dc 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) @@ -51,7 +51,7 @@ - + %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln minute(s) @@ -67,7 +67,7 @@ - + 0% @@ -335,13 +335,13 @@ - + Sorry Sorry - + Phrase not found. Phrase not found. @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ Import Theme - + Export Theme Export Theme diff --git a/translations/focuswriter_eo.qm b/translations/focuswriter_eo.qm index 4f1d1c9229660e5903c08dde498e42db52b562c5..d63591a9a45b84246c310a7e753b61229bb09f68 100644 GIT binary patch delta 4428 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 delta 4267 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 DailyProgress - + %1% of %Ln minute(s) %1% de %Ln minuto @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% de %Ln vorto @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln vorto @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minuto @@ -67,7 +67,7 @@ - + 0% 0% @@ -153,7 +153,7 @@ Save File As - Konservi Dosieron Kiel + Konservi dosieron kiel... @@ -204,7 +204,7 @@ Saving as plain text will discard all formatting. Discard formatting? - Savi kiel plata teksto ne konservos ĉiun tekstaranĝon. Ne konservi tekstaranĝon? + Konservi kiel plata teksto ne konservos ĉiun tekstaranĝon. Ne konservu tekstaranĝon? @@ -298,17 +298,17 @@ &Find - Trovi + &Trovi &Replace - Anstataŭigi + &Anstataŭigi Replace &All - Anstataŭigi Ĉiujn + Anstataŭigi ĉiu&jn @@ -335,13 +335,13 @@ - + Sorry Pardonu - + Phrase not found. Frazero ne troviĝis. @@ -685,7 +685,7 @@ Count each letter as a word - Kompti ĉiun literon kiel vorto + Nombri ĉiun literon kiel vorton @@ -887,7 +887,7 @@ S&essions - Seancojn + S&eancoj @@ -917,7 +917,7 @@ New Session - Nova Seanco + Nova seanco @@ -957,7 +957,7 @@ &New... - Nova... + &Nova... @@ -967,7 +967,7 @@ &Manage... - Administri + &Administri... @@ -1017,27 +1017,27 @@ &Add - Aldoni + &Aldoni &Ignore - Malatenti + &Malatenti I&gnore All - Malatenti Ĉiujn + Malatenti ĉ&iujn &Change - Ŝanĝi + Ŝa&nĝi C&hange All - Ŝanĝi Ĉiujn + Ŝanĝi ĉiu&jn @@ -1361,7 +1361,7 @@ New Theme - Nova Etoso + Nova etoso @@ -1384,7 +1384,7 @@ Old School - Malnova Lernejo + Malnoveca stilo @@ -1445,7 +1445,7 @@ - + Themes (%1) Etosoj (%1) @@ -1455,7 +1455,7 @@ Elporti Etoson - + Export Theme Elporti Etoson @@ -1796,42 +1796,42 @@ &File - Dosiero + &Dosiero &New - Nova + &Nova &Open... - Malfermi... + &Malfermi... Reloa&d - Reŝargi + Reŝar&gi &Save - Konservi + &Konservi Save &As... - Konservi Kiel + Konservi kie&l... &Rename... - Renomi... + &Renomi... Save A&ll - Konservi Ĉiujn + Konservi ĉiu&jn @@ -1841,22 +1841,22 @@ New Session - Nova Seanco + Nova seanco &Print... - Presi.. + &Presi... &Close - Fermi... + &Fermi... &Quit - Ĉesi + Ĉ&esi @@ -1866,37 +1866,37 @@ &Edit - Redakti + &Redakti &Undo - Malfari + &Malfari &Redo - Refari + &Refari Cu&t - Etondi + E&tondi &Copy - Kopii + &Kopii &Paste - Enmeti + E&nmeti Paste &Unformatted - Enmeti Senaranĝe + Enmeti sen&aranĝe @@ -1906,12 +1906,12 @@ Select &All - Elekti Ĉion + Elekti ĉi&on Select &Scene - Elekti Scenon + Elekti &scenon @@ -1921,27 +1921,27 @@ Fo&rmat - Aranĝo + &Aranĝo &Bold - Grasa + &Grasa &Italic - Kursiva + K&ursiva &Underline - Substreki + &Substreki Stri&kethrough - Trastreki + Trast&reki @@ -1951,7 +1951,7 @@ Sup&erscript - Supra indico + Su&pra indico @@ -1961,7 +1961,7 @@ &Subscript - Suba indico + Su&ba indico @@ -1971,7 +1971,7 @@ Align &Left - Ĝisrandigi Maldekstren + Ĝisrandigi &maldekstren @@ -1981,7 +1981,7 @@ Align &Center - Centrigi + &Centrigi @@ -1991,7 +1991,7 @@ Align &Right - Ĝisrandigi Dekstren + Ĝisrandigi &dekstren @@ -2001,7 +2001,7 @@ Align &Justify - Ĝisrandigi + &Ĝisrandigi @@ -2011,7 +2011,7 @@ &Decrease Indent - Malgrandigi Krommarĝenon + Ma&lgrandigi krommarĝenon @@ -2021,7 +2021,7 @@ I&ncrease Indent - Grandigi Krommarĝenon + Grand&igi krommarĝenon @@ -2031,37 +2031,37 @@ Le&ft to Right Block - Demaldekstra Bloko + Demaldekstra bl&oko Ri&ght to Left Block - Dedekstra Bloko + Dedekstra blo&ko &Tools - Iloj + &Iloj &Find... - Trovi... + &Trovi... Find &Next - Trovi Sekve + Trovi &sekve Find Pre&vious - Trovi Antaŭe + Tro&vi antaŭe &Replace... - Antaŭigi... + &Anstataŭigi... @@ -2071,12 +2071,12 @@ Smart &Quotes - Inteligentaj Citiloj + Inteligentaj citiloj Update &Document - Ĝisdatigi Dokumenton + Ĝisdatigi la &dokumenton @@ -2096,7 +2096,7 @@ Set &Language... - Agordi Lingvon... + Agordi &lingvon... @@ -2166,7 +2166,7 @@ &Preferences... - Agordoj... + A&gordoj... @@ -2201,12 +2201,12 @@ &Help - Helpo + &Helpo Application &Language... - Lingvo de la Aplikaĵo... + &Lingvo de la aplikaĵo... diff --git a/translations/focuswriter_es.qm b/translations/focuswriter_es.qm index 5cb7b119a5c60246432ce91ac5dbfe8f64c7608e..cecfbf1678299bd5523660d84bb0bffc4b8ae381 100644 GIT binary patch delta 3716 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 PQ&5)>e5A$puk`-|QN9-v diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 80d5920f..3a7d84b9 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -35,41 +35,41 @@ DailyProgress - + %1% of %Ln minute(s) - - - + + %1% de %Ln minuto + %1% de %Ln minutos - + %1% of %Ln word(s) - - - + + %1% de %Ln palabra + %1% de %Ln palabras - + %Ln word(s) - - - + + %Ln palabra + %Ln palabras - + %Ln minute(s) - - - + + %Ln minuto + %Ln minutos - + 0% - + 0% @@ -77,7 +77,7 @@ Daily Progress - + Progreso diario @@ -92,20 +92,20 @@ N/A - + N/A %n day(s) - - - + + %n día + %n días %1 &ndash; %2 - + %1 &ndash; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% de meta diaria @@ -335,13 +335,13 @@ - + Sorry Aviso - + Phrase not found. No se encontró la frase. @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ Importar tema - + Export Theme Exportar tema diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index f0f1668e..e5a43baf 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) @@ -51,7 +51,7 @@ - + %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln minute(s) @@ -67,7 +67,7 @@ - + 0% @@ -335,13 +335,13 @@ - + Sorry Lo siento - + Phrase not found. No se encontró la frase. @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ Importar tema - + Export Theme Exportar tema diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 4aca7403..aba38b8e 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1 % %Ln minuutista @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1 % %Ln sanasta @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln sana @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minuutti @@ -67,7 +67,7 @@ - + 0% 0 % @@ -335,13 +335,13 @@ - + Sorry Virhe - + Phrase not found. Fraasia ei löydy. @@ -1445,7 +1445,7 @@ - + Themes (%1) Teemat (%1) @@ -1455,7 +1455,7 @@ Tuo teema - + Export Theme Vie teema diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index f4f184f3..0e841bec 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% sur %Ln minute @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% sur %Ln mot @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln mot @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minute @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Désolé - + Phrase not found. Phrase non trouvée. @@ -1445,7 +1445,7 @@ - + Themes (%1) Thèmes (%1) @@ -1455,7 +1455,7 @@ Importer un thème - + Export Theme Exporter le thème diff --git a/translations/focuswriter_he.qm b/translations/focuswriter_he.qm index 75cdecc2ad4b74f5f42f87a5f170a4f64b6d8e7f..a11428f444c70457ed8dbca1b4fa27e42644d6ec 100644 GIT binary patch delta 4239 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 diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 69502142..fb2ec25b 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -29,13 +29,13 @@ Ctrl+D - + Ctrl+D DailyProgress - + %1% of %Ln minute(s) %1% מתוך דקה %Ln @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% מתוך %Ln מילים @@ -51,7 +51,7 @@ - + %Ln word(s) מילה %Ln @@ -59,7 +59,7 @@ - + %Ln minute(s) דקה %Ln @@ -67,9 +67,9 @@ - + 0% - + 0% @@ -335,13 +335,13 @@ - + Sorry צר לי - + Phrase not found. צירוף מילים לא נמצא. @@ -700,7 +700,7 @@ Icons Only - צלמיות בלבד + סמלים בלבד @@ -710,12 +710,12 @@ Text Alongside Icons - תמליל לצד צלמיות + טקסט לצד סמלים Text Under Icons - תמליל תחת צלמיות + טקסט תחת סמלים @@ -962,7 +962,7 @@ Ctrl+Shift+N - + Ctrl+Shift+N @@ -972,7 +972,7 @@ Ctrl+Shift+M - + Ctrl+Shift+M @@ -1198,7 +1198,7 @@ Blur Text Background - + טשטש רקע טקסט @@ -1445,7 +1445,7 @@ - + Themes (%1) מוטיבים (%1) @@ -1455,7 +1455,7 @@ ייבוא מוטיב - + Export Theme ייצוא מוטיב @@ -1650,7 +1650,7 @@ Uses icons from the <a href=%1>Oxygen</a> icon theme - הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> + משתמש בסמלים מתוך פרויקט <a href=%1>Oxygen</a> @@ -1861,7 +1861,7 @@ Ctrl+Q - + Ctrl+Q @@ -1901,7 +1901,7 @@ Ctrl+Shift+V - + Ctrl+Shift+V @@ -1916,7 +1916,7 @@ Ctrl+Shift+A - + Ctrl+Shift+A @@ -1946,7 +1946,7 @@ Ctrl+K - + Ctrl+K @@ -1956,7 +1956,7 @@ Ctrl+^ - + Ctrl+^ @@ -1966,7 +1966,7 @@ Ctrl+_ - + Ctrl+_ @@ -1976,7 +1976,7 @@ Ctrl+{ - + Ctrl+{ @@ -1986,7 +1986,7 @@ Ctrl+| - + Ctrl+| @@ -1996,7 +1996,7 @@ Ctrl+} - + Ctrl+} @@ -2006,7 +2006,7 @@ Ctrl+J - + Ctrl+J @@ -2016,7 +2016,7 @@ Ctrl+< - + Ctrl+< @@ -2026,7 +2026,7 @@ Ctrl+> - + Ctrl+> @@ -2066,7 +2066,7 @@ Ctrl+R - + Ctrl+R @@ -2126,7 +2126,7 @@ Show &Menu Icons - הצג &צלמיות תפריט + הצג &סמלים תפריט @@ -2156,7 +2156,7 @@ Ctrl+M - + Ctrl+M diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index e04cc09b..215c77ce 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) - + %1% of %Ln word(s) - + %Ln word(s) - + %Ln minute(s) - + 0% @@ -329,13 +329,13 @@ - + Sorry Elnézést - + Phrase not found. A keresett kifejezés nem található. @@ -1439,7 +1439,7 @@ - + Themes (%1) @@ -1449,7 +1449,7 @@ Téma importálása - + Export Theme Téma exportálása diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index 464f69d8..808fe3ef 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) %Ln րոպեի %1%-ը - + %1% of %Ln word(s) %Ln բառի %1%-ը - + %Ln word(s) %Ln բառ - + %Ln minute(s) %Ln րոպե - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry Ներողություն։ - + Phrase not found. Փնտրվածը չի գտնվել։ @@ -1439,7 +1439,7 @@ - + Themes (%1) Թեմաներ (%1) @@ -1449,7 +1449,7 @@ Ներմուծել թեմա - + Export Theme Թեման արտահանել diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index f9055efd..8373413a 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) %1% dari %Ln menit - + %1% of %Ln word(s) %1% dari %Ln kata - + %Ln word(s) %Ln kata - + %Ln minute(s) %Ln menit - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry Maaf - + Phrase not found. Frase tidak ditemukan. @@ -1439,7 +1439,7 @@ - + Themes (%1) Tema (%1) @@ -1449,7 +1449,7 @@ Impor Tema - + Export Theme Ekspor Tema diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 662713d3..a69070d6 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) @@ -51,7 +51,7 @@ - + %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln minute(s) @@ -67,7 +67,7 @@ - + 0% @@ -335,13 +335,13 @@ - + Sorry Spiacente - + Phrase not found. Frase non trovata. @@ -1445,7 +1445,7 @@ - + Themes (%1) Temi @@ -1455,7 +1455,7 @@ Importa Tema - + Export Theme Esporta Tema diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index dcfa23d9..7d23e94f 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) 全 %Ln 分中 %1% - + %1% of %Ln word(s) 全 %Ln 単語中 %1% - + %Ln word(s) 全 %Ln 単語 - + %Ln minute(s) 全 %Ln 分 - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry エラー - + Phrase not found. 見つかりませんでした。 @@ -1439,7 +1439,7 @@ - + Themes (%1) テーマ (%1) @@ -1449,7 +1449,7 @@ テーマのインポート - + Export Theme テーマのエクスポート diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index d627944a..19096559 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) %Ln 분 중 %1% - + %1% of %Ln word(s) 단어 %Ln 중 %1% - + %Ln word(s) 단어 %Ln개 - + %Ln minute(s) %Ln 분 - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry 죄송합니다 - + Phrase not found. 문장이 없습니다. @@ -1439,7 +1439,7 @@ - + Themes (%1) 테마 (%1) @@ -1449,7 +1449,7 @@ 테마 가져오기 - + Export Theme 테마 내보내기 diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm index e547e5601c4b199e72ac6677aa96c174e5ead58b..556cf96e796188b9dff93fcd2c224e6c47868d20 100644 GIT binary patch delta 5413 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 delta 5477 zcma)8c|cXw_FntkbM8Ed%!q=Zf?$B6D5xlKK^bLGL_iQ36huHK6~&t(rif-9<)Inn zD=nT>)OE&{9d`xC^y3Ok|8iQA2RGb4%Ha{^dS{Hqs<<~}0+AWxL|jTKF)dx<}1BCA)4+)Q|lUtB7Chl`Fl#O#X9;nr9Fbf zu{o4pxP?d^VnsW_io+&ZaqR1qeq^wT=qV4%;C2%w@RT8gfi#XX<-ml|R!sA!%vK*F z&m79ug%ZuOpQC=f0IWHr!38z*$M>Ua0cQh=QaqX8#p^^aU$Mjy^@ymD z&9p_HGfZsecp$%>RUUqasK%GozWO}&cd_j+W)Uqt$9Df>CR%udT{eNKc`MmX4}oae z_w1(eA4CH#v0Fx8oWH}qX8$A_9L2sdrQo1bE+;fUOXNS3>$5VK$S;j^+6zX8IB+RC zIGCN!7a;6=5=!yC-@NsW^$h#g#)Gixhq{B zMEQ%jPOltPcqez~HXNxu%{@A9OH}fyjQ;?RjEIu;^O@WX%CaN}lf7lDuOVfVb7Y%mb;04CCfSzBFc{k;YxVjPMYvYhPJ_^H z|B|&&hvCfavi5aLL0!G<$fX`4#W~rjU-anQJ6~M20X1d%nqOSpKol9m*R*FL z=VN%&MO-{Om|uSR45%N(HwGbhk;VMRhBl%J!+0^>lgQYI-=sSTMuzgu(TDK7n%^0e zjxHI-?^^#YQ9&;7JKzT3JtBGy_yFs7fhfj;uYr$GueuXZdObk%eU>CNi?O6-+f>9^;4pGb?{^$z>kaIWw!hyW7lJ~S{Ml->OOh*p zF61aEEaNZS1S1n(=O3rm6X{;$dtxU*(NYC=4~kjVF32Pum^4}7E$40v!Zw@_zb|N` zBcK;Wg8urO5V(B7_&|^TpEzDfIy{4DV5+do$oaEY)cs3n zj5>~@O0#0@P@!@1DC}P&G@qM9G<1WoWyNmDwMN*|aSZE=!nWpdD7x*!iz`qgf!BnW z62O3Onibuwg_FJmCHoT3Ga<^MXn2xbDCV~S^?p@ zC3nb$gHy`oj$hsY(`V#PrfDb^VX54O{4i7k+W1PIhod5G*D z+UlY_`U(uoedRF^fzxZ{8TZiVL9fcQlCVFjNnULG9)`^h`TX@4iH5%;uhAn_(XY$5 z-UszQ`+-Q!_?7b4L@+MO(W?H3O^SF%2_ONp8bri|dUdm0i1CaZlm0JxX ziI)7R+?mKh;oednQ)2A0Pn5?}Ho@UiNi%!9Rp+ie^CjU%OJt4RCeJ%p#Sa8s~p}BMVB?I+#i9Ouze~I3CCYl z4bHkuWH&*Tegu(34^vfZkTcA$8uKwo?HyHJ%^8f>PgMT>a+>Pomi6fW>g%fS&O8GOMOBYq7MKWA^{hwE zZR^!)a}6k4sCGY&gB}s;5H~waxlHxgf^9_AY3dm!D4%_RI&Taj@Bh9!|7;}M_!V`_ zN;n+4SG{`y?D@T?KGcZFM{`!3(xpD`)P$Mir#|^~1^Peykowdn0h<22`qZHatSi)A zHQ7YkIqI9?U}8ys^<(KvDD>YNSyL_qyoO0%Mk%8Fj8Rt$-=V)9p3oE~k(bh+kycQ?K%(=^>- zLov?Z(R7zh!}ma(mfs4d%1X3KlTiiXd0A^`kH}JQSurhLYZr?33@@#F2QJPE*9INh zjrm`!9rLh-NPk2d`tUpC`b};6=|LDycePnBsF9+3+WcK$YWh)aVZuPPX}q?w07I+F zL0iSWhiUhsw)HI$xp&qc_`U+e?UL4XDZ&*wZqt5oRE7@;TkW++k5SdRR&@TS6$8#| zzh8qKy6({aJRAZ`Nh)KsEQ&7d^n8C)USOh4^y}8Z;f&+@b^Able1g8|W<6@=l)m)>>^SK4uLlJ~Cx+?| zUk$+&w9$WI(UDd9&i`{k4OHoGp1>5%eL?@Ih(|y{27`Jp`h1|X!Ru-Yrjyn%+;1zS zb*>@q85jzRG$ie{hoO~*>6gL4WE(@i+kX(@aYNyoaM)*#p`y7JDXFpI?5&0s&0uEa zPQ$^cYLKG)hL0j_VfP2aPaa^x;f~>_hV@X&cMT7;`^lNO#f6Z)OUORC&@{G;@+gPO zX|d?6yUzT?Uv!&=QYs*K@qoe2yhpEy}ze7 zML&6(DlJx{V6BjfnSdK&MJES8+onJ5E22VklEW=FFn|)^LKzNJ(_+F!IPyn_);T(h z^PTRp1aX$L%C5*z@4gor=$0I!LM$JJDoFFqR6>SQAqAqQn`43j;%P)C6D== z&$-mIfkFSp4QXTHZw#LqKi2%ZYaL@g;_v~sj-{Z?>S?)j3#>}MSD3R0Ok*t7yvOY_ z14YjcoM@kj_r(@Zq#g6E1c^5WN)-BgOt$=Y6rc47W>dxX5PPxHV_5Gq56@3nviP&- zs-fN#_M|ht@ky4er3B*c3M<{>_CXU^toh49pZ$+9i8fy6Q5Ria2Uxh+;_agU6Z^Mq z9nF`$brz>3$P9Rx54|FtRZ7)qorZ z%V8rNv6wM}W43)s^0-3c-@->3s}RcqqgbtZUm)n3B|bN5K1VqlgBIC3{k2}ix}Z92 zRg7N1;nu~$LAV@*#jsTIVaVbBB`{fqY?bzsBjv6H#N@!|QuC#;BN>Ykwc~gEPpO{$ zo8!@;yJUtG$_35R4M;iyl!Zt9@fn4QR|D+LMdAKT*SncX^^s!U8L^auG0&(Z{NJ*4 zsMr#fj9+)6K4K~6gOe08P`5L|&3ruuU79Mo#l6px&0od^N=0O!a2gFPUQc?(FctSp zNv=eE?i3|%PW}NTtVyY6Ec)$f4iXiPsUfhHoO%K;oTryE=Rcjn$r8)ySo8KY1!F_R z)*1aYiAbiEvI_D1jCrWM@##_hqAZ&&;i56BKw&O3QhGat;GAT#u(A%BoJ#oQ7QQ9U;TB6nc!CH&r4_=CM2cKxL<%-f2(nT_;H zYW3fBZDa8Qc*D;>14+CvUoB%1VrSV)5JuC2XmLWClXz`GAXawe&3#j0waP+uxl}~V zk<16mb-axcza%Ck>6FqCA%0f98fS7Aj$vWq)`d^oL|DqiTHjLsqeb6Ek+^BWB3qp# zy4E6cr%3U+MMmp$@o15YC|f+jy3$OQfh+I>}OO5tc&p+*s=Z!ur+vI}Z3OU9b}+&a54-`c>&l z&3~))WGumaa9JkjXoSgp@Mxvs*PCNSzvb1AgZ{{HZ{Nj=`<4efBlIWP?|nCfQpKL- zzK%Zs^=+a!e#Kb-JcxuuyL9W5qMn1gs-$6fCW-Cud4)iUhgK{_?*!LL0oT?=A|=P_ zVhr&Xx(h*$JEBMwkF2#516GFE`dQ>h(gvuQ)2RkX^+4^|4qIYlN?>1iEyh^I?rf0HsiP(#hw@gN( zxU|7p?6*3?G9oHqLn=CnX-jr3ZyQ&KYhv-N@`)3Tt2N@I)uZjhz=%~7q>_B%lzH|V hXX(PF4apG9vkeZMTOP%LjY3R#iH*NZ{f+Bd{vQt0@5lfE diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index d6eb35d9..35ef2763 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -6,7 +6,7 @@ Close (%1) - Uždaryti (%1) + Užverti (%1) @@ -24,7 +24,7 @@ Dismiss Alert - Pašalinti Įspėjimą + Pašalinti įspėjimą @@ -35,16 +35,16 @@ DailyProgress - + %1% of %Ln minute(s) %1% iš %Ln minutės %1% iš %Ln minučių - %1% of %Ln minučių + %1% iš %Ln minučių - + %1% of %Ln word(s) %1% iš %Ln žodžio @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln žodis @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln minutė @@ -71,7 +71,7 @@ - + 0% 0% @@ -81,7 +81,7 @@ Daily Progress - Kasdienė Eiga + Kasdienė eiga @@ -127,7 +127,7 @@ Set Language - Nustatyti Kalbą + Nustatyti kalbą @@ -140,7 +140,7 @@ %1 (Read-Only) - %1 (Tik-Skaitymui) + %1 (Tik-skaitymui) @@ -153,12 +153,12 @@ Unable to save '%1'. - Nepavyko išsaugoti '%1'. + Nepavyko įrašyti '%1'. Save File As - Išsaugoti Failą Kaip + Įrašyti failą kaip @@ -169,7 +169,7 @@ Rename File - Pervadinti Failą + Pervadinti failą @@ -179,17 +179,17 @@ Reload File? - Įkelti Failą iš naujo? + Įkelti failą iš naujo? Reload the file '%1' from disk? - Įkelti iš disko iš naujo failą '%1'? + Įkelti iš naujo failą '%1' iš disko? All unsaved changes will be lost. - Visi neišsaugoti pakeitimai bus prarasti. + Visi neįrašyti pakeitimai bus prarasti. @@ -209,7 +209,7 @@ Saving as plain text will discard all formatting. Discard formatting? - Išsaugojimas grynu tekstu pašalins visą formatavimą. Pašalinti formatavimą? + Įrašymas grynu tekstu pašalins visą formatavimą. Pašalinti formatavimą? @@ -217,7 +217,7 @@ File Changed - Failas Pasikeitė + Failas pasikeitė @@ -232,7 +232,7 @@ Reload - įkelti iš naujo + Įkelti iš naujo @@ -242,7 +242,7 @@ File Deleted - Failas Ištrintas + Failas ištrintas @@ -252,7 +252,7 @@ Do you want to save or close the file? - Jūs norite išsaugoti ar uždaryti failą? + Jūs norite failą įrašyti ar užverti? @@ -260,7 +260,7 @@ Unable to open archive. - Nepavyko atidaryti archyvo. + Nepavyko atverti archyvo. @@ -288,7 +288,7 @@ Regular expressions - Reguliarios išraiškos + Reguliarieji reiškiniai @@ -313,7 +313,7 @@ Replace &All - Pakeisti &Visus + Pakeisti &visus @@ -341,13 +341,13 @@ - + Sorry Atsiprašome - + Phrase not found. Frazė nerasta. @@ -357,32 +357,32 @@ OpenDocument Text - ODT Formatas + ODT formatas Office Open XML - DOCX Formatas + DOCX formatas Rich Text Format - RTF Formatas + RTF formatas Plain Text - Grynas Tekstas + Grynas tekstas All Files - Visi Failai + Visi failai All Supported Files - Visi Palaikomi Failai + Visi palaikomi failai @@ -395,7 +395,7 @@ Check Spelling... - Tikrinti Rašybą... + Tikrinti rašybą... @@ -408,7 +408,7 @@ Open Image - Atidaryti Paveikslą + Atverti paveikslą @@ -426,7 +426,7 @@ <System Language> - <Sistemos Kalba> + <Sistemos kalba> @@ -444,7 +444,7 @@ Unable to open archive. - Nepavyko atidaryti archyvo. + Nepavyko atverti archyvo. @@ -467,17 +467,17 @@ Toolbar - Įrankių Juosta + Įrankių juosta Spell Checking - Rašybos Tikrinimas + Rašybos tikrinimas Select Dictionary - Pasirinkite Žodyną + Pasirinkite žodyną @@ -488,12 +488,12 @@ Unable to open archive. - Nepavyko atidaryti archyvo. + Nepavyko atverti archyvo. The archive does not contain a usable dictionary. - Archyve nėra naudoti tinkamo žodyno. + Archyve nėra tinkamo naudoti žodyno. @@ -520,7 +520,7 @@ Daily Goal - Kasdienis Tikslas + Kasdienis tikslas @@ -591,12 +591,12 @@ Saving - Išsaugojimas + Įrašymas Automatically save changes - Automatiškai išsaugoti pakeitimus + Automatiškai įrašyti pakeitimus @@ -626,22 +626,22 @@ Characters: - Simbolių + Simbolių: Paragraphs: - Pastraipų + Pastraipų: Word Count Algorithm - Žodžių Skaičiavimo Algoritmas + Žodžių skaičiavimo algoritmas Reset daily progress for today to zero? - Atstatyti kasdienę eiga šiandienai iki nulio? + Atstatyti kasdienę eigą šiandienai iki nulio? @@ -656,7 +656,7 @@ Reset Today - Atstatyti Šiandieną + Atstatyti šiandieną @@ -696,7 +696,7 @@ Page Count Algorithm - Puslapių Skaičiavimo Algoritmas + Puslapių skaičiavimo algoritmas @@ -706,12 +706,12 @@ Icons Only - Tik Piktogramos + Tik piktogramos Text Only - Tik Tekstas + Tik tekstas @@ -726,7 +726,7 @@ Text Position: - Teksto Vieta: + Teksto vieta: @@ -736,17 +736,17 @@ Move Up - Kelti Aukštyn + Kelti aukštyn Move Down - Nuleisti Žemyn + Nuleisti žemyn Add Separator - Pridėti Skirtuką + Pridėti skirtuką @@ -797,7 +797,7 @@ Personal Dictionary - Asmeninis Žodynas + Asmeninis žodynas @@ -827,7 +827,7 @@ Move Scenes Up - Kelti Scenas Aukštyn + Kelti scenas aukštyn @@ -837,7 +837,7 @@ Toggle Scene List - Perjungti Scenų Sąrašą + Perjungti scenų sąrašą @@ -862,7 +862,7 @@ Move Scenes Down - Leisti Scenas Žemyn + Leisti scenas žemyn @@ -888,7 +888,7 @@ Manage Sessions - Tvarkyti Sesijas + Tvarkyti sesijas @@ -923,17 +923,17 @@ New Session - Nauja Sesija + Nauja sesija Duplicate Session - Dubliuoti Sesiją + Dubliuoti sesiją Rename Session - Pervadinti Sesiją + Pervadinti sesiją @@ -1010,7 +1010,7 @@ Please Wait - Prašome Palaukti + Prašome palaukti @@ -1018,7 +1018,7 @@ Check Spelling - Tikrinama Rašyba + Tikrinama rašyba @@ -1033,7 +1033,7 @@ I&gnore All - I&gnoruoti Visus + I&gnoruoti visus @@ -1043,7 +1043,7 @@ C&hange All - Pa&keisti Visus + Pa&keisti visus @@ -1145,7 +1145,7 @@ No Image - Nėra Paveikslo + Nėra paveikslo @@ -1192,7 +1192,7 @@ Round Text Background Corners - Apvalinti Teksto Fono Kampus + Apvalinti teksto fono kampus @@ -1204,17 +1204,17 @@ Blur Text Background - Sulieti Teksto Foną + Sulieti teksto foną Text Background Drop Shadow - Teksto Fonas Numeta Šešėlį + Teksto fonas numeta šešėlį Vertical Offset: - Vertikalus Poslinkis: + Vertikalus poslinkis: @@ -1254,12 +1254,12 @@ Edit Theme - Redaguoti Temą + Redaguoti temą Window Background - Lango Fonas + Lango fonas @@ -1302,7 +1302,7 @@ Text Background - Teksto Fonas + Teksto fonas @@ -1327,7 +1327,7 @@ Line Spacing - Eilučių Intervalai + Eilučių intervalai @@ -1337,7 +1337,7 @@ 1.5 Lines - 1.5 Eilutės + 1.5 eilutės @@ -1357,17 +1357,17 @@ Paragraph Spacing - Pastraipos Tarpai + Pastraipos tarpai Tab Width: - Tabuliacijos Plotis + Tabuliacijos plotis: New Theme - Nauja Tema + Nauja tema @@ -1385,22 +1385,22 @@ Gentle Blues - Švelni Mėlyna + Švelniai mėlyna Old School - Senoji Mokykla + Senoji mokykla Space Dreams - Kosminės Svajonės + Kosminės svajonės Writing Desk - Rašomasis Stalas + Rašomasis stalas @@ -1451,19 +1451,19 @@ - + Themes (%1) Temos (%1) Import Theme - Importuoti Temą + Importuoti temą - + Export Theme - Eksportuoti Temą + Eksportuoti temą @@ -1506,12 +1506,12 @@ Set Delay - Nustatyti Delsimą + Nustatyti delsimą Set Time - Nustatyti Laiką + Nustatyti laiką @@ -1531,7 +1531,7 @@ Alarm - Aliarmas + Signalas @@ -1626,7 +1626,7 @@ Open File - Atidaryti Failą + Atverti failą @@ -1646,7 +1646,7 @@ Copyright &copy; 2008-%1 Graeme Gott - Autorinės Teisės &copy; 2008-%1 Graeme Gott + Autorių Teisės &copy; 2008-%1 Graeme Gott @@ -1691,7 +1691,7 @@ Opening %1 - Atidaroma %1 + Atveriama %1 @@ -1706,27 +1706,27 @@ Switch to Next Document - Perjungti į Kitą Dokumentą + Perjungti į kitą dokumentą Switch to Previous Document - Perjungti į Ankstesnį Dokumentą + Perjungti į ankstesnį dokumentą Switch to First Document - Perjungti į Pirmą Dokumentą + Perjungti į pirmą dokumentą Switch to Last Document - Perjungti į Paskutinį Dokumentą + Perjungti į paskutinį dokumentą Switch to Document %1 - Perjungti į Dokumentą %1 + Perjungti į dokumentą %1 @@ -1757,12 +1757,12 @@ Some files could not be opened. - Kai kurie failai negalėjo būti atidaryti. + Kai kurie failai negalėjo būti atverti. Some files were opened Read-Only. - Kai kurie failai buvo atidaryti Tik Skaitymui. + Kai kurie failai buvo atverti tik skaitymui. @@ -1777,17 +1777,17 @@ Save Changes? - Išsaugoti Pakeitimus? + Įrašyti pakeitimus? Save changes to the file '%1' before closing? - Prieš uždarant, išsaugoti pakeitimus į failą '%1'? + Prieš užveriant, įrašyti pakeitimus į failą '%1'? Your changes will be lost if you don't save them. - Jeigu neišsaugosite, jūsų pakeitimai bus prarasti. + Jeigu neįrašysite, jūsų pakeitimai bus prarasti. @@ -1812,7 +1812,7 @@ &Open... - &Atidaryti + &Atverti... @@ -1822,12 +1822,12 @@ &Save - &Išsaugoti + Į&rašyti Save &As... - Išsaugoti Kai&p... + Įrašyti kai&p... @@ -1837,17 +1837,17 @@ Save A&ll - Išsaugoti &Visus + Įrašyti &visus Manage Sessions - Tvarkyti Sesijas + Tvarkyti sesijas New Session - Nauja Sesija + Nauja sesija @@ -1857,7 +1857,7 @@ &Close - &Uždaryti + &Užverti @@ -1902,7 +1902,7 @@ Paste &Unformatted - Įdėti &Neformatuotą + Įdėti &neformatuotą @@ -1912,12 +1912,12 @@ Select &All - Pažymėti &Viską + Pažymėti &viską Select &Scene - Pažymėti &Sceną + Pažymėti &sceną @@ -1977,7 +1977,7 @@ Align &Left - Lygiuoti Kairė&je + Lygiuoti kairė&je @@ -1987,7 +1987,7 @@ Align &Center - Lygiuoti &Centre + Lygiuoti &centre @@ -1997,7 +1997,7 @@ Align &Right - Lygiuoti &Dešinėje + Lygiuoti &dešinėje @@ -2017,7 +2017,7 @@ &Decrease Indent - &Mažinti Įtrauką + &Mažinti įtrauką @@ -2027,7 +2027,7 @@ I&ncrease Indent - Didi&nti Įtrauką + Didi&nti įtrauką @@ -2037,12 +2037,12 @@ Le&ft to Right Block - Blokas iš Kairė&s į Dešinę + Blokas iš kairė&s į dešinę Ri&ght to Left Block - Blokas iš D&ešinės į Kairę + Blokas iš d&ešinės į kairę @@ -2057,12 +2057,12 @@ Find &Next - Rasti &Kitą + Rasti &kitą Find Pre&vious - Rasti A&nkstesnį + Rasti a&nkstesnį @@ -2077,22 +2077,22 @@ Smart &Quotes - Protingosios Ka&butės + Protingosios ka&butės Update &Document - Atnaujinti &Dokumentą + Atnaujinti &dokumentą Update &Selection - Atnaujinti Žymėji&mą + Atnaujinti žymėji&mą &Spelling... - Raš&ybos Tikrinimas... + Raš&ybos tikrinimas... @@ -2102,7 +2102,7 @@ Set &Language... - Nustatyti Ka&lbą... + Nustatyti ka&lbą... @@ -2117,7 +2117,7 @@ &Daily Progress - Kas&dienė Eiga + Kas&dienė eiga @@ -2127,22 +2127,22 @@ Show &Toolbar - Rodyti Įrankių &Juostą + Rodyti įrankių &juostą Show &Menu Icons - Rodyti Meniu &Piktogramas + Rodyti meniu &piktogramas F&ocused Text - Teksto &Dėmesio Centras + Teksto &dėmesio centras &Fullscreen - &Visas Ekranas + &Visas ekranas @@ -2157,7 +2157,7 @@ M&inimize - Sumaž&inti langą + Suskle&isti langą @@ -2177,17 +2177,17 @@ Focus Off - Dėmesio Centras Išjungtas + Dėmesio centras išjungtas Focus One Line - Dėmesio Centras - Viena Eilutė + Dėmesio centras - viena eilutė Focus Three Lines - Dėmesio Centras - Trys Eilutės + Dėmesio centras - trys eilutės @@ -2197,7 +2197,7 @@ Focus Paragraph - Dėmesio Centras - Pastraipa + Dėmesio centras - pastraipa @@ -2212,12 +2212,12 @@ Application &Language... - Programos Ka&lba... + Programos ka&lba... Some files were unsupported and could not be opened. - Kai kurie failai buvo nepalaikomi, todėl negalėjo būti atidaryti. + Kai kurie failai buvo nepalaikomi, todėl negalėjo būti atverti. @@ -2227,12 +2227,12 @@ One &Line - Viena Ei&lutė + Viena ei&lutė &Three Lines - &Trys Eilutės + &Trys eilutės diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index c1a26a69..6d9be853 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% van %Ln minuut @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% van %Ln woord @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln woord @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minuut @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Sorry - + Phrase not found. Zoekterm niet gevonden. @@ -1445,7 +1445,7 @@ - + Themes (%1) Thema's(%1) @@ -1455,7 +1455,7 @@ Thema importeren - + Export Theme Thema exporteren diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 06d10535..9e5f62d7 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% z %Ln minuty @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% z %Ln słowa @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln słowo @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln minuta @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry Przepraszam - + Phrase not found. Nie znaleziono wyrażenia. @@ -1451,7 +1451,7 @@ - + Themes (%1) Motywy (%1) @@ -1461,7 +1461,7 @@ Importuj motyw - + Export Theme Eksportuj motyw diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 6c495bac..59e566a4 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) @@ -51,7 +51,7 @@ - + %Ln word(s) @@ -59,7 +59,7 @@ - + %Ln minute(s) @@ -67,7 +67,7 @@ - + 0% @@ -335,13 +335,13 @@ - + Sorry Desculpe - + Phrase not found. A frase não foi encontrada. @@ -1445,7 +1445,7 @@ - + Themes (%1) @@ -1455,7 +1455,7 @@ Importar um tema - + Export Theme Exportar o tema diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 9651aaf8..6a93be49 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% de %Ln minuto @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% de %Ln palavra @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln palavra @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minuto @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Desculpe - + Phrase not found. A frase não foi encontrada. @@ -1445,7 +1445,7 @@ - + Themes (%1) Temas (%1) @@ -1455,7 +1455,7 @@ Importar tema - + Export Theme Exportar tema diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index ad1e8a6d..cb75771b 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% din %Ln minut @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% of %Ln cuvînt @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln cuvînt @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln minut @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry Scuze - + Phrase not found. Fraza nu a fost găsită. @@ -1451,7 +1451,7 @@ - + Themes (%1) Teme (%1) @@ -1461,7 +1461,7 @@ Importare temă - + Export Theme Exportare temă diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index e0a9e5b5..9bd5df49 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% из %Ln минут @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% из %Ln слов @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln слов @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln минут @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry Извините - + Phrase not found. Фраза не найдена. @@ -1451,7 +1451,7 @@ - + Themes (%1) Темы (%1) @@ -1461,7 +1461,7 @@ Импортировать тему - + Export Theme Экспортировать тему diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index a5bec343..1acfe4e2 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) @@ -53,7 +53,7 @@ - + %Ln word(s) @@ -62,7 +62,7 @@ - + %Ln minute(s) @@ -71,7 +71,7 @@ - + 0% @@ -341,13 +341,13 @@ - + Sorry Prepáčte - + Phrase not found. Výraz nebol nájdený. @@ -1451,7 +1451,7 @@ - + Themes (%1) @@ -1461,7 +1461,7 @@ Importovať tému - + Export Theme Exportovať tému diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 31cae04d..efc1bfa0 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% од %Ln минута @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% од %Ln речи @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln реч @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln минут @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry Извините - + Phrase not found. Фраза није пронађена. @@ -1451,7 +1451,7 @@ - + Themes (%1) Теме (%1) @@ -1461,7 +1461,7 @@ Увези тему - + Export Theme Извези тему diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 1f602ed6..458ce14f 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% av %Ln minut @@ -43,7 +43,7 @@ - + %1% of %Ln word(s) %1% av %Ln ord @@ -51,7 +51,7 @@ - + %Ln word(s) %Ln ord @@ -59,7 +59,7 @@ - + %Ln minute(s) %Ln minut @@ -67,7 +67,7 @@ - + 0% 0% @@ -335,13 +335,13 @@ - + Sorry Tyvärr - + Phrase not found. Frasen hittades inte. @@ -1445,7 +1445,7 @@ - + Themes (%1) Teman (%1) @@ -1455,7 +1455,7 @@ Importera tema - + Export Theme Exportera tema diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 68a7d0ef..3628d9dd 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) - + %1% of %Ln word(s) - + %Ln word(s) %Ln kelime - + %Ln minute(s) %Ln dakika - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry Üzgünüm - + Phrase not found. İfade bulunamadı. @@ -1439,7 +1439,7 @@ - + Themes (%1) Temalar (%1) @@ -1449,7 +1449,7 @@ Temayı Al - + Export Theme Temayı Ver diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index a6a3073a..1530281e 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -35,7 +35,7 @@ DailyProgress - + %1% of %Ln minute(s) %1% з %Ln хвилин @@ -44,7 +44,7 @@ - + %1% of %Ln word(s) %1% з %Ln слів @@ -53,7 +53,7 @@ - + %Ln word(s) %Ln слово @@ -62,7 +62,7 @@ - + %Ln minute(s) %Ln хвилина @@ -71,7 +71,7 @@ - + 0% 0% @@ -341,13 +341,13 @@ - + Sorry На жаль - + Phrase not found. Фраза не знайдена. @@ -1451,7 +1451,7 @@ - + Themes (%1) Теми (%1) @@ -1461,7 +1461,7 @@ Імпортувати тему - + Export Theme Експортувати тему diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 74b8c1d8..418f7aff 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) - + %1% of %Ln word(s) - + %Ln word(s) - + %Ln minute(s) - + 0% @@ -329,13 +329,13 @@ - + Sorry Rất tiếc - + Phrase not found. Không tìm thấy cụm từ. @@ -1439,7 +1439,7 @@ - + Themes (%1) @@ -1449,7 +1449,7 @@ Nhập dữ liệu về giao diện - + Export Theme Xuất dữ liệu về giao diện diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 6f507549..ce672fa9 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -35,35 +35,35 @@ DailyProgress - + %1% of %Ln minute(s) %1%/%Ln 分钟 - + %1% of %Ln word(s) %1%/%Ln 字 - + %Ln word(s) %Ln 个字 - + %Ln minute(s) %Ln 分钟 - + 0% 0% @@ -329,13 +329,13 @@ - + Sorry 抱歉 - + Phrase not found. 没找到词组。 @@ -1439,7 +1439,7 @@ - + Themes (%1) 主题 (%1) @@ -1449,7 +1449,7 @@ 导入主题 - + Export Theme 导出主题 diff --git a/translations/focuswriter_zh_TW.qm b/translations/focuswriter_zh_TW.qm deleted file mode 100644 index be651eed..00000000 --- a/translations/focuswriter_zh_TW.qm +++ /dev/null @@ -1 +0,0 @@ -<�d��!�`��� \ No newline at end of file From eadf97445204d52ebf997f2991af1b0b67aededb Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 22 Jun 2016 18:15:18 -0400 Subject: [PATCH 276/630] Update copyright year. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index e36aea4a..ce043ef0 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -866,7 +866,7 @@ void Window::aboutClicked() "

%6
%7

") .arg(tr("FocusWriter"), QApplication::applicationVersion(), tr("A simple fullscreen word processor"), - tr("Copyright © 2008-%1 Graeme Gott").arg("2015"), + tr("Copyright © 2008-%1 Graeme Gott").arg("2016"), tr("Released under the
GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\""), tr("Uses icons from the Oxygen icon theme").arg("\"http://www.oxygen-icons.org/\""), tr("Used under the LGPL 3 license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) From 3013750ff7cb7fdfebcafd321d13f0bb0a021a63 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 22 Jun 2016 18:24:14 -0400 Subject: [PATCH 277/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 48388783..30bca61f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.5.6 +----- +* Updated included hunspell. +* FIXED: Did not remember some default formats. +* FIXED: Replace all did not update spellchecking. +* FIXED: Themes still did not always forget changes. +* Translation updates: Afrikaans (South Africa), Danish, Esperanto, Hebrew, Lithuanian, Spanish. + 1.5.5 ----- * Added support for pasting RTF in Windows. diff --git a/focuswriter.pro b/focuswriter.pro index 92e7ac3b..235e0cb4 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -32,7 +32,7 @@ macx { } # Set program version -VERSION = 1.5.5 +VERSION = 1.5.6 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 2d8bcae5..8932c3b9 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.5' +VERSION='1.5.6' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 9ff3d7e4..4410b17d 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 5 +!define VERSIONPATCH 6 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "http://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 9c4ce82d..ead664e4 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.5.5 +SET VERSION=1.5.6 ECHO Copying executable MKDIR %APP% From 3ea591405dacfb8d8b4118dbed5bd926737b7182 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Jul 2016 05:50:47 -0400 Subject: [PATCH 278/630] FIXED: Could not change shortcut to disable focused text. --- src/window.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index ce043ef0..237d9251 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1449,9 +1449,11 @@ void Window::initMenus() focus_mode[i]->setCheckable(true); focus_mode[i]->setData(i); m_focus_actions->addAction(focus_mode[i]); - ActionManager::instance()->addAction(QString("FocusedText%1").arg(i), focus_mode[i]); } focus_mode[0]->setShortcut(tr("Ctrl+Shift+`")); + for (int i = 0; i < 4; ++i) { + ActionManager::instance()->addAction(QString("FocusedText%1").arg(i), focus_mode[i]); + } focus_mode[qBound(0, QSettings().value("Window/FocusedText").toInt(), 3)]->setChecked(true); connect(m_focus_actions, SIGNAL(triggered(QAction*)), m_documents, SLOT(setFocusMode(QAction*))); From feaa6935f64173bb88a0df8cc765e8d8f7e6e94c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 7 Jul 2016 12:18:30 -0400 Subject: [PATCH 279/630] FIXED: Did not play sounds for key presses with Alt modifier. --- src/document.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/document.cpp b/src/document.cpp index 57e7f0d9..0a5c7883 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -267,7 +267,6 @@ namespace // Play sound effect int key = event->key(); if (!(event->modifiers().testFlag(Qt::ControlModifier)) && - !(event->modifiers().testFlag(Qt::AltModifier)) && !(event->modifiers().testFlag(Qt::MetaModifier))) { if ((key == Qt::Key_Return) || (key == Qt::Key_Enter)) { Sound::play(Qt::Key_Enter); From 4ffa79681dadf41c7ccaeb73f35418c9be97eab3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Jul 2016 09:03:44 -0400 Subject: [PATCH 280/630] Update Windows deploy script for cross compiling. --- windows_deploy.bat | 87 ------------------------------------ windows_deploy.sh | 108 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 87 deletions(-) delete mode 100644 windows_deploy.bat create mode 100755 windows_deploy.sh diff --git a/windows_deploy.bat b/windows_deploy.bat deleted file mode 100644 index ead664e4..00000000 --- a/windows_deploy.bat +++ /dev/null @@ -1,87 +0,0 @@ -@ECHO OFF - -SET APP=FocusWriter -SET VERSION=1.5.6 - -ECHO Copying executable -MKDIR %APP% -TYPE COPYING | FIND "" /V > %APP%\COPYING.txt -TYPE CREDITS | FIND "" /V > %APP%\CREDITS.txt -TYPE README | FIND "" /V > %APP%\README.txt -COPY release\%APP%.exe %APP% >nul -strip %APP%\%APP%.exe - -ECHO Copying translations -SET TRANSLATIONS=%APP%\translations -MKDIR %TRANSLATIONS% -COPY translations\*.qm %TRANSLATIONS% >nul -COPY %QTDIR%\translations\qt_*.qm %TRANSLATIONS% >nul - -ECHO Copying icons -SET ICONS=%APP%\icons\hicolor -MKDIR %ICONS% -XCOPY /Q /S /Y resources\images\icons\oxygen\hicolor %ICONS% >nul - -ECHO Copying dictionaries -SET DICTIONARIES=%APP%\dictionaries -MKDIR %DICTIONARIES% -XCOPY /Q /S /Y resources\windows\dicts %DICTIONARIES% >nul - -ECHO Copying sounds -SET SOUNDS=%APP%\sounds -MKDIR %SOUNDS% -COPY resources\sounds\* %SOUNDS% >nul - -ECHO Copying symbols -COPY resources\symbols\symbols630.dat %APP% >nul - -ECHO Copying themes -SET THEMES=%APP%\themes -MKDIR %THEMES% -XCOPY /Q /S /Y resources\themes\* %THEMES% >nul - -ECHO Copying Qt libraries -COPY %QTDIR%\bin\libgcc_s_dw2-1.dll %APP% >nul -COPY "%QTDIR%\bin\libstdc++-6.dll" %APP% >nul -COPY %QTDIR%\bin\libwinpthread-1.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Core.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Gui.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Multimedia.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Network.dll %APP% >nul -COPY %QTDIR%\bin\Qt5PrintSupport.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Widgets.dll %APP% >nul -COPY %QTDIR%\bin\Qt5WinExtras.dll %APP% >nul - -ECHO Copying Qt plugins -MKDIR %APP%\audio -COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul - -MKDIR %APP%\bearer -XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul -DEL %APP%\bearer\*d.dll >nul - -MKDIR %APP%\platforms -COPY %QTDIR%\plugins\platforms\qwindows.dll %APP%\platforms >nul - -MKDIR %APP%\imageformats -XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul -DEL %APP%\imageformats\*d.dll >nul - -MKDIR %APP%\mediaservice -XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul -DEL %APP%\mediaservice\*d.dll >nul - -MKDIR %APP%\printsupport -COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul - -ECHO Making portable -MKDIR %APP%\Data - -ECHO Creating compressed file -CD %APP% -7z a -mx=9 %APP%_%VERSION%.zip * >nul -CD .. -MOVE %APP%\%APP%_%VERSION%.zip . >nul - -ECHO Cleaning up -RMDIR /S /Q %APP% diff --git a/windows_deploy.sh b/windows_deploy.sh new file mode 100755 index 00000000..c4d2da27 --- /dev/null +++ b/windows_deploy.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +APP='FocusWriter' +VERSION='1.5.6' + +echo -n 'Preparing... ' +QTDIR=$(mingw32-qmake-qt5 -query QT_INSTALL_PREFIX) +rm -f ${APP}_${VERSION}.zip +rm -rf $APP +echo 'Done' + +echo -n 'Copying executable... ' +mkdir $APP +cp release/$APP.exe $APP +echo 'Done' + +echo -n 'Copying translations... ' +mkdir $APP/translations +cp translations/*.qm $APP/translations +cp $QTDIR/share/qt5/translations/qt_*.qm $APP/translations +cp $QTDIR/share/qt5/translations/qtbase_*.qm $APP/translations +cp $QTDIR/share/qt5/translations/qtmultimedia_*.qm $APP/translations +echo 'Done' + +echo -n 'Copying icons... ' +mkdir $APP/icons +cp -r resources/images/icons/oxygen/hicolor/ $APP/icons +echo 'Done' + +echo -n 'Copying dictionaries... ' +mkdir $APP/dictionaries +cp -r resources/windows/dicts/* $APP/dictionaries +echo 'Done' + +echo -n 'Copying sounds... ' +cp -r resources/sounds/ $APP +echo 'Done' + +echo -n 'Copying symbols... ' +cp resources/symbols/symbols630.dat $APP +echo 'Done' + +echo -n 'Copying themes... ' +cp -r resources/themes/ $APP +echo 'Done' + +echo -n 'Copying Qt libraries... ' +cp $QTDIR/bin/iconv.dll $APP +cp $QTDIR/bin/libgcc_s_sjlj-1.dll $APP +cp $QTDIR/bin/libGLESv2.dll $APP +cp $QTDIR/bin/libglib-2.0-0.dll $APP +cp $QTDIR/bin/libharfbuzz-0.dll $APP +cp $QTDIR/bin/libintl-8.dll $APP +cp $QTDIR/bin/libpcre-1.dll $APP +cp $QTDIR/bin/libpcre16-0.dll $APP +cp $QTDIR/bin/libpng16-16.dll $APP +cp $QTDIR/bin/libjpeg-62.dll $APP +cp $QTDIR/bin/libstdc++-6.dll $APP +cp $QTDIR/bin/libtiff-5.dll $APP +cp $QTDIR/bin/libwebp-6.dll $APP +cp $QTDIR/bin/libwinpthread-1.dll $APP +cp $QTDIR/bin/zlib1.dll $APP +cp $QTDIR/bin/Qt5Core.dll $APP +cp $QTDIR/bin/Qt5Gui.dll $APP +cp $QTDIR/bin/Qt5Multimedia.dll $APP +cp $QTDIR/bin/Qt5Network.dll $APP +cp $QTDIR/bin/Qt5PrintSupport.dll $APP +cp $QTDIR/bin/Qt5Svg.dll $APP +cp $QTDIR/bin/Qt5Widgets.dll $APP +cp $QTDIR/bin/Qt5WinExtras.dll $APP +echo 'Done' + +echo -n 'Copying Qt plugins... ' +cp -r $QTDIR/lib/qt5/plugins/audio/ $APP +cp -r $QTDIR/lib/qt5/plugins/bearer/ $APP +cp -r $QTDIR/lib/qt5/plugins/platforms/ $APP +cp -r $QTDIR/lib/qt5/plugins/imageformats/ $APP +cp -r $QTDIR/lib/qt5/plugins/mediaservice/ $APP +cp -r $QTDIR/lib/qt5/plugins/printsupport/ $APP +echo 'Done' + +echo -n 'Create ReadMe... ' +cp README $APP/ReadMe.txt +echo -e '\n\nCredits\n=======\n\n' >> $APP/ReadMe.txt +cat CREDITS >> $APP/ReadMe.txt +echo -e '\n\nNews\n====\n\n' >> $APP/ReadMe.txt +cat NEWS >> $APP/ReadMe.txt +unix2dos -q -o $APP/ReadMe.txt +unix2dos -q -n COPYING $APP/Copying.txt +echo 'Done' + +echo -n 'Stripping files... ' +mingw-strip --strip-unneeded -p $APP/$APP.exe $APP/*.dll $APP/*/*.dll +echo 'Done' + +echo -n 'Making portable... ' +mkdir $APP/Data +echo 'Done' + +echo -n 'Compressing... ' +cd $APP +7za a -mx=9 ../${APP}_${VERSION}.zip * +cd .. +echo 'Done' + +echo -n 'Cleaning up... ' +rm -rf $APP +echo 'Done' From e34a46a56ec3164931ad8e34a3360b5ff03e4742 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Jul 2016 13:11:41 -0400 Subject: [PATCH 281/630] Update Windows NSIS installer for cross compiling. --- resources/windows/installer.nsi | 126 ++++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 38 deletions(-) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 4410b17d..c8691e6a 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -6,7 +6,7 @@ !define VERSIONMINOR 5 !define VERSIONPATCH 6 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" -!define ABOUTURL "http://gottcode.org/focuswriter/" +!define ABOUTURL "https://gottcode.org/focuswriter/" ;-------------------------------- ;Includes @@ -138,7 +138,6 @@ Var StartMenuFolder !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Esperanto" -!insertmacro MUI_LANGUAGE "Asturian" ;-------------------------------- ;Reserve Files @@ -154,6 +153,53 @@ Function .onInit FunctionEnd +Function ConvertUnixNewLines + + Exch $R0 ;file #1 path + Push $R1 ;file #1 handle + Push $R2 ;file #2 path + Push $R3 ;file #2 handle + Push $R4 ;data + Push $R5 + + FileOpen $R1 $R0 r + GetTempFileName $R2 + FileOpen $R3 $R2 w + + loopRead: + ClearErrors + FileRead $R1 $R4 + IfErrors doneRead + + StrCpy $R5 $R4 1 -1 + StrCmp $R5 $\n 0 +4 + StrCpy $R5 $R4 1 -2 + StrCmp $R5 $\r +3 + StrCpy $R4 $R4 -1 + StrCpy $R4 "$R4$\r$\n" + + FileWrite $R3 $R4 + + Goto loopRead + doneRead: + + FileClose $R3 + FileClose $R1 + + SetDetailsPrint none + Delete $R0 + Rename $R2 $R0 + SetDetailsPrint both + + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Pop $R1 + Pop $R0 + +FunctionEnd + ;-------------------------------- ;Installer Section @@ -163,17 +209,48 @@ Section "install" SetOutPath $INSTDIR File ..\..\release\FocusWriter.exe File ..\symbols\symbols630.dat - File $%QTDIR%\bin\libgcc_s_dw2-1.dll + File $%QTDIR%\bin\iconv.dll + File $%QTDIR%\bin\libgcc_s_sjlj-1.dll + File $%QTDIR%\bin\libGLESv2.dll + File $%QTDIR%\bin\libglib-2.0-0.dll + File $%QTDIR%\bin\libharfbuzz-0.dll + File $%QTDIR%\bin\libintl-8.dll + File $%QTDIR%\bin\libpcre-1.dll + File $%QTDIR%\bin\libpcre16-0.dll + File $%QTDIR%\bin\libpng16-16.dll + File $%QTDIR%\bin\libjpeg-62.dll File $%QTDIR%\bin\libstdc++-6.dll + File $%QTDIR%\bin\libtiff-5.dll + File $%QTDIR%\bin\libwebp-6.dll File $%QTDIR%\bin\libwinpthread-1.dll + File $%QTDIR%\bin\zlib1.dll File $%QTDIR%\bin\Qt5Core.dll File $%QTDIR%\bin\Qt5Gui.dll File $%QTDIR%\bin\Qt5Multimedia.dll File $%QTDIR%\bin\Qt5Network.dll File $%QTDIR%\bin\Qt5PrintSupport.dll + File $%QTDIR%\bin\Qt5Svg.dll File $%QTDIR%\bin\Qt5Widgets.dll File $%QTDIR%\bin\Qt5WinExtras.dll + SetOutPath $INSTDIR\audio + File $%QTDIR%\lib\qt5\plugins\audio\*.dll + + SetOutPath $INSTDIR\bearer + File $%QTDIR%\lib\qt5\plugins\bearer\*.dll + + SetOutPath $INSTDIR\imageformats + File $%QTDIR%\lib\qt5\plugins\imageformats\*.dll + + SetOutPath $INSTDIR\mediaservice + File $%QTDIR%\lib\qt5\plugins\mediaservice\*.dll + + SetOutPath $INSTDIR\platforms + File $%QTDIR%\lib\qt5\plugins\platforms\*.dll + + SetOutPath $INSTDIR\printsupport + File $%QTDIR%\lib\qt5\plugins\printsupport\*.dll + SetOutPath $INSTDIR\dictionaries File dicts\*.aff File dicts\*.dic @@ -181,13 +258,6 @@ Section "install" SetOutPath $INSTDIR\dictionaries\2\mor-standard File dicts\2\mor-standard\* - SetOutPath $INSTDIR\audio - File $%QTDIR%\plugins\audio\qtaudio_windows.dll - - SetOutPath $INSTDIR\bearer - File $%QTDIR%\plugins\bearer\qgenericbearer.dll - File $%QTDIR%\plugins\bearer\qnativewifibearer.dll - SetOutPath $INSTDIR\icons\hicolor File ..\images\icons\oxygen\hicolor\index.theme SetOutPath $INSTDIR\icons\hicolor\16 @@ -195,30 +265,6 @@ Section "install" SetOutPath $INSTDIR\icons\hicolor\22 File ..\images\icons\oxygen\hicolor\22\* - SetOutPath $INSTDIR\imageformats - File $%QTDIR%\plugins\imageformats\qdds.dll - File $%QTDIR%\plugins\imageformats\qgif.dll - File $%QTDIR%\plugins\imageformats\qicns.dll - File $%QTDIR%\plugins\imageformats\qico.dll - File $%QTDIR%\plugins\imageformats\qjp2.dll - File $%QTDIR%\plugins\imageformats\qjpeg.dll - File $%QTDIR%\plugins\imageformats\qmng.dll - File $%QTDIR%\plugins\imageformats\qsvg.dll - File $%QTDIR%\plugins\imageformats\qtga.dll - File $%QTDIR%\plugins\imageformats\qtiff.dll - File $%QTDIR%\plugins\imageformats\qwbmp.dll - File $%QTDIR%\plugins\imageformats\qwebp.dll - - SetOutPath $INSTDIR\mediaservice - File $%QTDIR%\plugins\mediaservice\dsengine.dll - File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll - - SetOutPath $INSTDIR\platforms - File $%QTDIR%\plugins\platforms\qwindows.dll - - SetOutPath $INSTDIR\printsupport - File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll - SetOutPath $INSTDIR\sounds File ..\sounds\*.wav @@ -229,25 +275,29 @@ Section "install" SetOutPath $INSTDIR\translations File ..\..\translations\*.qm - File $%QTDIR%\translations\qt_*.qm + File $%QTDIR%\share\qt5\translations\qt_*.qm + File $%QTDIR%\share\qt5\translations\qtbase_*.qm + File $%QTDIR%\share\qt5\translations\qtmultimedia_*.qm ;Create ReadMe file SetOutPath $INSTDIR File /oname=ReadMe.txt ..\..\README FileOpen $4 "ReadMe.txt" a FileSeek $4 0 END - FileWrite $4 "$\r$\n$\r$\nCredits$\r$\n=======$\r$\n$\r$\n" + FileWrite $4 "$\n$\nCredits$\n=======$\n$\n" FileClose $4 File ..\..\CREDITS ${FileJoin} "ReadMe.txt" "CREDITS" "ReadMe.txt" Delete $INSTDIR\CREDITS FileOpen $4 "ReadMe.txt" a FileSeek $4 0 END - FileWrite $4 "$\r$\n$\r$\nNews$\r$\n====$\r$\n$\r$\n" + FileWrite $4 "$\n$\nNews$\n====$\n$\n" FileClose $4 File ..\..\NEWS ${FileJoin} "ReadMe.txt" "NEWS" "ReadMe.txt" Delete $INSTDIR\NEWS + Push $INSTDIR\ReadMe.txt + Call ConvertUnixNewLines ;Registry information for add/remove programs WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" @@ -309,7 +359,7 @@ Section "Uninstall" Delete $INSTDIR\icons\hicolor\*\* Delete $INSTDIR\imageformats\*.dll Delete $INSTDIR\mediaservice\*.dll - Delete $INSTDIR\platforms\qwindows.dll + Delete $INSTDIR\platforms\*.dll Delete $INSTDIR\printsupport\*.dll Delete $INSTDIR\sounds\*.wav Delete $INSTDIR\themes\*\* From e35d899a7076b40bbbc384eed174ad2f937f8679 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Jul 2016 15:19:43 -0400 Subject: [PATCH 282/630] Update install instructions for cross compiling. --- INSTALL | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/INSTALL b/INSTALL index 67451fa2..b0b72207 100644 --- a/INSTALL +++ b/INSTALL @@ -19,11 +19,13 @@ Mac OS X: 3.) Type './mac_deploy.sh' to create a disk image of the program. -Windows: - 1.) Type 'qmake' to configure the program. +Windows (cross compile from Linux): + 1.) Type 'mingw32-qt5-qmake' to configure the program. 2.) Type 'make' to compile the program. - 3.) Type 'windows_deploy' to create a compressed image of the program. Note - that you must have the 7z executable from 7-zip.org in your %PATH% for - this to work. + 3.) Type './windows_deploy.sh' to create a compressed image of the program. + Note that you must have p7zip installed for this to work. + + 4.) Browse to resources/windows/ and type 'makensis installer.nsi' to + create an installer of the program. From b3ffd3b0bb765ee703535aabc38764fbbce61984 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 16 Jul 2016 15:29:02 -0400 Subject: [PATCH 283/630] Bump version number. --- NEWS | 6 ++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.sh | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 30bca61f..b3598445 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +1.5.7 +----- +* Switched to cross-compiled builds for Windows. +* FIXED: Did not play sounds for key presses with Alt modifier. +* FIXED: Could not change shortcut to disable focused text. + 1.5.6 ----- * Updated included hunspell. diff --git a/focuswriter.pro b/focuswriter.pro index 235e0cb4..c24cf4c8 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -32,7 +32,7 @@ macx { } # Set program version -VERSION = 1.5.6 +VERSION = 1.5.7 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 8932c3b9..1b021bc0 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.5.6' +VERSION='1.5.7' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index c8691e6a..3c67abf0 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 5 -!define VERSIONPATCH 6 +!define VERSIONPATCH 7 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.sh b/windows_deploy.sh index c4d2da27..564a3acb 100755 --- a/windows_deploy.sh +++ b/windows_deploy.sh @@ -1,7 +1,7 @@ #!/bin/bash APP='FocusWriter' -VERSION='1.5.6' +VERSION='1.5.7' echo -n 'Preparing... ' QTDIR=$(mingw32-qmake-qt5 -query QT_INSTALL_PREFIX) From 73ca72360c1c3b7d316f1d927cf842a5163f9bc5 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 20 Jul 2016 13:18:47 +0200 Subject: [PATCH 284/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 364f4ced..8bfb43ac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.5.7-1) unstable; urgency=medium + + * New upstream release + + -- Barak A. Pearlmutter Wed, 20 Jul 2016 13:18:38 +0200 + focuswriter (1.5.5-2) unstable; urgency=medium * merge upstream stable branch fixes From 8cd906a15388d1466157fa7892b697f9a33f8245 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 20 Jul 2016 13:19:04 +0200 Subject: [PATCH 285/630] bump policy version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index dd1e4433..dbb77d53 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,7 @@ Build-Depends: debhelper (>= 9), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 3.9.7 +Standards-Version: 3.9.8 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From 6fa079d6f8180f126a888127c6f58d59c4950290 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 23 Jul 2016 11:00:02 +0200 Subject: [PATCH 286/630] git ignore debian build debris --- debian/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/.gitignore b/debian/.gitignore index 7f0158c2..cc6e114f 100644 --- a/debian/.gitignore +++ b/debian/.gitignore @@ -1,6 +1,7 @@ /*.debhelper /*.log /*.substvars +/debhelper-build-stamp /files /focuswriter/ /stamp-makefile-build From 5c65853f9d0c8b2226181464b3c53bed18624b8b Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sun, 4 Sep 2016 02:17:19 +0100 Subject: [PATCH 287/630] log changes --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 8bfb43ac..0743c0cc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.0-1) unstable; urgency=medium + + * New upstream release + + -- Barak A. Pearlmutter Sun, 04 Sep 2016 02:17:14 +0100 + focuswriter (1.5.7-1) unstable; urgency=medium * New upstream release From dd94b3f18e90d0f475b5128e73962dfe1b745490 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 4 Sep 2016 04:54:36 -0400 Subject: [PATCH 288/630] Tweak NEWS file. --- NEWS | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index 1ae2cb72..c10d071c 100644 --- a/NEWS +++ b/NEWS @@ -1,19 +1,19 @@ 1.6.0 ----- -Added always showing interface. -Added headings. -Added new default themes. -Added removing user-installed dictionaries. -Added shortcut for typographical apostrophe. -Added support for ODT Flat XML files. -Added support for high DPI displays. -Switched to QSoundEffect. -Updated dictionaries. -FIXED: Daily progress did not reset when run longer than a day. -FIXED: Printer margins were too big. -FIXED: Was replacing session files with command-line files. -FIXED: Did not add new default symbol shortcuts. -Translation updates: Arabic, Armenian, Catalan, Chinese (China), Dutch, English (United Kingdom), French, German, Hebrew, Hungarian, Italian, Lithuanian, Polish, Portuguese (Brazil), Romanian, Russian, Slovak, Spanish, Spanish (Mexico), Turkish, Vietnamese. +* Added always showing interface. +* Added headings. +* Added new default themes. +* Added removing user-installed dictionaries. +* Added shortcut for typographical apostrophe. +* Added support for ODT Flat XML files. +* Added support for high DPI displays. +* Switched to QSoundEffect. +* Updated dictionaries. +* FIXED: Daily progress did not reset when run longer than a day. +* FIXED: Printer margins were too big. +* FIXED: Was replacing session files with command-line files. +* FIXED: Did not add new default symbol shortcuts. +* Translation updates: Arabic, Armenian, Catalan, Chinese (China), Dutch, English (United Kingdom), French, German, Hebrew, Hungarian, Italian, Lithuanian, Polish, Portuguese (Brazil), Romanian, Russian, Slovak, Spanish, Spanish (Mexico), Turkish, Vietnamese. 1.5.7 ----- From b1e71ef46e73a4a44490115a5956f549c5dddaaa Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 4 Sep 2016 05:19:22 -0400 Subject: [PATCH 289/630] Sync translations with Transifex. --- translations/focuswriter_af_ZA.ts | 4 ++-- translations/focuswriter_ar.ts | 4 ++-- translations/focuswriter_ca.ts | 4 ++-- translations/focuswriter_cs.ts | 4 ++-- translations/focuswriter_da.ts | 4 ++-- translations/focuswriter_de.ts | 4 ++-- translations/focuswriter_el.ts | 4 ++-- translations/focuswriter_en.ts | 4 ++-- translations/focuswriter_en_GB.ts | 4 ++-- translations/focuswriter_eo.ts | 4 ++-- translations/focuswriter_es.ts | 4 ++-- translations/focuswriter_es_MX.ts | 4 ++-- translations/focuswriter_fi.ts | 4 ++-- translations/focuswriter_fr.ts | 4 ++-- translations/focuswriter_he.ts | 4 ++-- translations/focuswriter_hu.ts | 4 ++-- translations/focuswriter_hy.ts | 4 ++-- translations/focuswriter_id.ts | 4 ++-- translations/focuswriter_it.ts | 4 ++-- translations/focuswriter_ja.ts | 4 ++-- translations/focuswriter_ko.ts | 4 ++-- translations/focuswriter_lt.ts | 4 ++-- translations/focuswriter_nl.ts | 4 ++-- translations/focuswriter_pl.ts | 4 ++-- translations/focuswriter_pt.ts | 4 ++-- translations/focuswriter_pt_BR.ts | 4 ++-- translations/focuswriter_ro.qm | Bin 36953 -> 37242 bytes translations/focuswriter_ro.ts | 12 ++++++------ translations/focuswriter_ru.ts | 4 ++-- translations/focuswriter_sk.ts | 4 ++-- translations/focuswriter_sr.ts | 4 ++-- translations/focuswriter_sv.ts | 4 ++-- translations/focuswriter_tr.ts | 4 ++-- translations/focuswriter_uk.ts | 4 ++-- translations/focuswriter_vi.ts | 4 ++-- translations/focuswriter_zh_CN.ts | 4 ++-- 36 files changed, 74 insertions(+), 74 deletions(-) diff --git a/translations/focuswriter_af_ZA.ts b/translations/focuswriter_af_ZA.ts index ef2d57f0..10e4a6ba 100644 --- a/translations/focuswriter_af_ZA.ts +++ b/translations/focuswriter_af_ZA.ts @@ -428,12 +428,12 @@ <Sisteemtaal> - + Note Nota - + Please restart this application for the change in language to take effect. Herlaai asseblief hierdie toepassing vir die taalwysiging om pos te vat. diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index b6353131..12f9bdb6 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -452,12 +452,12 @@ <لغة النظام> - + Note ملاحظة - + Please restart this application for the change in language to take effect. من فضلك، أعد تشغيل البرنامج ليتم تفعيل اللغة المختارة. diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index a4ba45ba..8ed0e21f 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Call que reinicieu l'aplicació perquè tingui efecte el canvi d'idioma diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index b09fe5d3..eac00052 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -434,12 +434,12 @@ <Jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. Spusťte program znovu, aby se změna jazyka projevila. diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index bbdf911a..3d5a0348 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -428,12 +428,12 @@ <Systemsprog> - + Note Note - + Please restart this application for the change in language to take effect. Genstart programmet for at skifte til det valgte sprog. diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index d31ffa00..01f1fad4 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -428,12 +428,12 @@ <Systemsprache> - + Note Beachte - + Please restart this application for the change in language to take effect. Damit Änderungen an der Programmsprache in Kraft treten können, muss das Programm neu gestartet werden. diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index b1dd8190..1cdb157c 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -428,12 +428,12 @@ <Γλώσσα Συστήματος> - + Note Σημείωση - + Please restart this application for the change in language to take effect. Επανεκκινήστε την εφαρμογή για να ισχύσει η αλλαγή γλώσσας. diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index bf48d046..90ddaa66 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -428,12 +428,12 @@ - + Note - + Please restart this application for the change in language to take effect. diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 0d21a345..dce6d573 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -428,12 +428,12 @@ <System Language> - + Note Note - + Please restart this application for the change in language to take effect. Please restart the application for the language change to take effect. diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index 8a8c4545..d8922805 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -428,12 +428,12 @@ <Lingvo de Sistemo> - + Note Noto - + Please restart this application for the change in language to take effect. Bonvolu relanĉi ĉi tiun aplikaĵon por la lingva ŝanĝo efiki. diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 322b30b9..7b5f997f 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Reinicie la aplicación para que el cambio de idioma tenga efecto. diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 296e4380..700c0fa7 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie esta aplicación para que los cambios de idioma se realicen. diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index ce4e6cd4..f3b08796 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -428,12 +428,12 @@ <Järjestelmän kieli> - + Note Huomaa - + Please restart this application for the change in language to take effect. Ole hyvä ja käynnistä ohjelma uudelleen, jotta kielen muutos tulee voimaan. diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index f4e11527..422b07ac 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -428,12 +428,12 @@ <Langue du système> - + Note Note - + Please restart this application for the change in language to take effect. Veuillez redémarrer le programme pour que le changement de langue prenne effet. diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 01dc366c..b825b9e7 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -428,12 +428,12 @@ <שפת מערכת> - + Note הערה - + Please restart this application for the change in language to take effect. נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 9be6c145..d7e5cfee 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -422,12 +422,12 @@ <A rendszer nyelve> - + Note Megjegyzés - + Please restart this application for the change in language to take effect. Indítsd újra az alkalmazást, hogy a változtatások érvénybe lépjenek. diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index cc079036..575fa361 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -422,12 +422,12 @@ <Համակարգի լեզուն> - + Note Նշում - + Please restart this application for the change in language to take effect. Լեզվի փոփոխության կայացման համար ծրագիրը վերագործարկել diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index e6e30c8d..81c4dd48 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -422,12 +422,12 @@ <System Language> - + Note Catatan - + Please restart this application for the change in language to take effect. Silakan tutup dan buka kembali aplikasi ini untuk menerapkan perubahan bahasa. diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 55a3d5ce..3b36c3e0 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -428,12 +428,12 @@ <Lingua di sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Per modificare la lingua riavviare l'applicazione. diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index c453d873..f742114d 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -422,12 +422,12 @@ <システムの言語> - + Note 注意 - + Please restart this application for the change in language to take effect. 言語の変更を反映させるためにアプリケーションを再起動してください。 diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index dfb249a0..d7eb7636 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -422,12 +422,12 @@ < 시스템 언어 > - + Note 노트 - + Please restart this application for the change in language to take effect. 바뀐 언어로 적용하기 위해 프로그램을 다시 시작 해주세요. diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index c93ebe6b..df68c9ce 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -434,12 +434,12 @@ <Sistemos kalba> - + Note Pastaba - + Please restart this application for the change in language to take effect. Kad įsigaliotų kalbos pakeitimai, prašome paleisti programą iš naujo. diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 1d8ce308..17187bd1 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -428,12 +428,12 @@ <Systeemtaal> - + Note Let op - + Please restart this application for the change in language to take effect. Graag de applicatie herstarten om de taalverandering door te voeren. diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 629a99c6..d80e95ae 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -434,12 +434,12 @@ <Język systemowy> - + Note Informacja - + Please restart this application for the change in language to take effect. Zmiany zostaną uwzględnione przy następnym uruchomieniu programu. diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index df3f5ead..962c8f0b 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -428,12 +428,12 @@ <Língua do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie o programa para a mudança da língua do programa ser aplicada. diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index 33bcdd67..e1b0efcd 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -428,12 +428,12 @@ <Linguagem do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor, reinicie o programa para que as alterações no idioma tenham efeito. diff --git a/translations/focuswriter_ro.qm b/translations/focuswriter_ro.qm index 33bf328cf24c59da74c40604a2819342a9a438ea..42913182bef6b5963a58c2027feb25af0380fd06 100644 GIT binary patch delta 2479 zcmYk8c~n&A8OEQx%*>scJA)MzH*i-3MI(ZuhDHSujR>+R$l`#5qB0;13J8wH+PHz* zi+h4g>q0<_!F^4|rD9Iis5Pc1SQl!sYBW**aP8xnoSgo_`OUreTi*Bip7;H@wM~4r zLtNwKS_VkH`Ii958-Sd?K;)kRZ%;Qnt3cE!zL$VcHDK;0Aoe3b7Yf8*07m}8_`kTH zQ}TdjC(zyp;%=_<$v%h&I4=DO#DnL7=@F23UkB#2LOw17rpa&JKa!Hyei4|Qnh*b7 z#X#y+_<#7ERtf(r3@_~z84h?{g#V*KTy6~lR&q;QBLY@&oNXNfHl71A90)ke_cK!Q ziFY%XPsBLC3Serf)?4UfDhNT`S$`nuh?XEE`X^T*MZW@wQQS;EiIf_C?(KziOBh$X zf=qb`Fw;l7A#`^&?W72?g}A)uA<+FfZuMRc^!G$_(`#VfUbF^z07id2O05D4|0xJ7 z7Xb?k1=G{pKvApUdpQV5ND>0C-vv5H2r+|~0u$B=xv+g}8sKW_ARKtpzy*5>w_G;>N4(I|LkIlsskT%Mb7c$?ZRh53-WAcF#bJ(T zV#&R!j5AxTJpB&nH$Yrhy%UJrE>;g84-9aLyVswk(qqIgL)MWy#Dm9n09i%ip%olA z{jPXCD+tJZAs*Klk7K)d{kMTY@LKW4nM@%6nfU#^9>6RQvAM4eE=(yGpFL*6Mc(4u zbDkWqN0KivkRb(Yd%$o;y7b1%3=U~ONWN`TB-wQICkpzl>@}TnmTu83a)`_Jqr58QOPc+v{Kpk_ zz^GVROYRAbEt9J($AJaq^2VqWe7{BB6_N~$)8yL9M?iKP@(KAd`5Zts`HIi8N%|ps z1NoLbE7z_T$Y-Po%=RT2)f|QNzy!<*=8pir$RPWZtH}Z63AxU%iFxjp>-tlV;d|Yj z9OUNI+j3oPDh+u;K5#4pD7mItbbUI_JR<+C+Cf>`%9m%cVvr|ao=-oO#bn8`?=-x7~NU&~ObZ=TE(#_}$-L_|g z0lQ7Nud$I@N>Do3zW^BRsSN&U2QY1|5?b~GXk%9*L!SWV zeoFLLeD0O1WVH^Y`umlI>Tp`wLn#gW4>PD$N;!W70%t1A-?4*w{z+MRmnX2qOQ|aJ zWsM8UW{)9k0)nzDh9=65R2mhwNug0`jH?3XpV90}pTPxrO3M+JRN^G%=Z@b3KC)44 zWZGRX8FeX(*d>#UUZZ~oy!IR0|22%>zNsBl#tzT)G*(ZsQh&Rf1*eQP23FkIuZ$;` zEn(WC@zlM|z{iJ-O`9s|v|!_tzkkLweY9X>ACoKBG$QMBptwe}8;82yn$C4t&winr znidxT5kaO)Rg`>2FVm$HV}S7crh6snfEs0L8U1@;QK0Ev;!f6AXETaf)_ErKE;)u| z5P78}-II5aY$2bJ|7O4KYnIk$GRV{auCF%$J!Y93yR4;guWDtcKCT2`b5m_IZ;3l@ zrffD}ZKbU3_nKQr^#lASm|OD_cq&s=d21|zjR#Vq9{Z6RXH;tm=CQ7{M;6m};jF_ti;s4eHvWgj zFPI&r-Av1{+0QBY150?)Gq#`!BwN$)uH-v1%MzZf=ld088}gzhs)4SGd~caLawagT z#FDl%h;~|JalFiBejb*EUq|yQ2(&DZ@ur$vEr-9m46TzID$c0T64a24lEv1QMlLn< znsw#289c4&){5m^GA+_tahR!23bw9qSxV#jTWhX4DQ&uSZwUXD5IR~9?|Z;ro^CyT zn-vmOWc}fT@fU5dHb3Y@>Gjr@^JjQz_-T*T=(dF(9t9g~*dpe;Y45B}v;>Juni|S2 z3u6b4fgSnih8*OQxyTeGILHEp-3H7U>ga5z)1KcgZcetnK#R4tZ+M;N6tu1x`tF%{ z!og11IMx2^1apKVbC%8F%&|MP7@K!P?)1T8{|*@cVRaO8Xg2pNKpvS3$FI|jae2kv uB5gVDO|ic3$Onl2E6~@&#eo_SGlkDZ;9VW~!**cSIKU7J%smH8{y*pX zxz;I#KxYZiXE4P5jPv#(h|PS@{t)7kvp{+zLvKS-cGB6-zBD(c9M()+|I-A!S5MvGyFIF4ahhR|BZYvqZ{Ptnx0B%$FwM6Lm{+Ec6nxA@6ENotGfiyKBhd`X_V$unu)^U5JC(^Cq zjMjl{IT&yZ(yt4{oE-=L4GinSjgjktF&^l=@Elm&fbJkSz~qMqY1KfDbc;3B)8_w%M{v6@1w*h$nv0f#HyJrT9ne9vXyACne!T0i?=--Qd zorA>MuvlQMQ`}#3hI&SbpN4EB_lQT1?*(#~iAO*Dgx7IPY;^tdYiOJV4zn1=n@+z;Q76@ny2Xq0lNvFCzB?f`&SPNvP^q!192lA^efiH3 zE#2B$i{XeYknY%6>EQoLPm3P|DWYsX_A_<8EPH0Kg0h`@Z#hKFc%;vey_`!|%iCj4 z08>7a_k|<_({#Ch(*q#SjeJB-CVK$XlFztaK=StUYRDI4n_RzHAfJ#TuwXFBv=$mk zx?^E5=}%^oW5`Y9Sh7`a@Vx+k%-bh7jG-Q32VI=?z{Po;azlL@d#+S&KAr`vxT5zq z_zZBg$Y0kMP?q1x9eL~vES5W#(tWeL^?1XO{=*GI51Y1li9xEMzhe#?EtIFk z+>8Mfer54w`F8sam0qg)_!SkZzx2OCkIE*ojb#qGXfmX(;xtP%c}DyKcpf(O`6?V( z`mO$VH7YF2-BdfzMrm_hEIMhbGqPu*J~N%HT+1>A)2XhVz?(-+7j|r-SAtEC{_z3J z8>G)L`IuJ~nBQ=G3@ksOSC}R`kDA;2)v)6&<_qr^15<;{7pp08_HgsX6Yl_#cg$TY z(*Z5Ud^h5cK*d<|%LE#9%0LTNurUiwS-|XeS{DGyh(Fl0wS=t6|r9Us}yUae$xjQTu>N`2ve{?ZrhvjlN=T4u4mhLH| z0pIDC?#1!EnFLMVIh9u$sHu@A+CEnE?9KEN*SVO~rFn*PoqSdsdWP{b+_jJs%^a`W zwMoxw0owsB{5dU>^^TVO%?J*PG|j%tObd+IrsdXCpQIFR!OUU&4kT$Mjs|)yQ7aWs z@tYE-)g9J(IV-i}kEwU&F1^$eB;DG2o-#Tew59PmS zjZFH910|N^pa~m7z9b#i$Yh1j*OR@-udOjnbXN2$YvSbjz-xC9RI}FF@?8h?FfCNf-l&&qAz3S&whbnRnt0W=VRsI1F5OnOo*~ns zY*j5R^}PwUn!D?0-qE(Yt0j~+-F7g9pMRmht>w@?j%K^<Limbaj Sistem> - + Note Notă - + Please restart this application for the change in language to take effect. Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. @@ -1417,12 +1417,12 @@ Bitter Skies - + Cer morocănos Enchantment - + Încîntare @@ -1442,12 +1442,12 @@ Spy Games - + Jocuri spion Tranquility - + Linişte diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 1775981d..bc61fcec 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -434,12 +434,12 @@ <Язык системы> - + Note Информация - + Please restart this application for the change in language to take effect. Перезапустите программу, чтобы применить изменение языка. diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 8534a1a1..7a30aa2a 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -434,12 +434,12 @@ <Predvolený jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. K zmene jazyka dôjde po reštarte programu. diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 856bae2b..ee518f23 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -434,12 +434,12 @@ <Системски језик> - + Note Напомена - + Please restart this application for the change in language to take effect. Молимо рестартујте програм да би се видела промена језика. diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index fb43262f..064f1fc9 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -428,12 +428,12 @@ <Systemspråk> - + Note Observera - + Please restart this application for the change in language to take effect. Starta om programmet för att språkändringen ska aktiveras. diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 17eeee67..c51cbf6d 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -422,12 +422,12 @@ <Sistem Dili> - + Note Not - + Please restart this application for the change in language to take effect. Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 023b3035..06194b08 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -434,12 +434,12 @@ <System Language> - + Note Примітка - + Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набрала чинності. diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index c518cc01..9ed429dc 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -422,12 +422,12 @@ <Ngôn ngữ Hệ thống> - + Note Ghi chú - + Please restart this application for the change in language to take effect. Xin vui lòng khởi động lại ứng dụng này để áp dụng thao tác thay đổi ngôn ngữ. diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 5c222413..f4132bda 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -422,12 +422,12 @@ <系统语言> - + Note 注意 - + Please restart this application for the change in language to take effect. 要使语言的变化生效,请重新启动该应用程序。 From f7892c4b29374a3f9773de69d6aeb8986ea6b449 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 12 Sep 2016 19:00:26 -0400 Subject: [PATCH 290/630] FIXED: Switched to incorrect tab to show conflicting shortcuts. --- src/preferences_dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index 5cf9b645..04c0beb5 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -227,7 +227,7 @@ void PreferencesDialog::accept() { // Confirm close even with shortcut conflicts if (m_shortcut_conflicts) { - m_tabs->setCurrentIndex(4); + m_tabs->setCurrentIndex(5); if (QMessageBox::question(this, tr("Question"), tr("One or more shortcuts conflict. Do you wish to proceed?"), From fb72945c341126ad66578e53e6d63d03693c7cc7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 13 Sep 2016 08:51:52 -0400 Subject: [PATCH 291/630] FIXED: Reported conflicts for empty shortcuts. --- src/preferences_dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index 04c0beb5..02de4583 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -653,7 +653,7 @@ void PreferencesDialog::highlightShortcutConflicts() // Find shortcut QString name = item->text(2); QKeySequence shortcut = m_new_shortcuts.value(name, ActionManager::instance()->shortcut(name)); - if (shortcut.isEmpty()) { + if (shortcut.isEmpty() || (shortcut == Qt::Key_unknown)) { continue; } From 66b3cad892080c2db85c436f6ebc1faaaafb5856 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 13 Sep 2016 08:59:07 -0400 Subject: [PATCH 292/630] Sync translations with Transifex. --- translations/focuswriter_de.qm | Bin 37682 -> 37706 bytes translations/focuswriter_de.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm index 17f8a4bbff479604fcb15468047288a3bacc35ea..4dc52db099cfe7e05bb97eed5ac5cffa362c738f 100644 GIT binary patch delta 3229 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 One or more shortcuts conflict. Do you wish to proceed? - Eine oder mehrere Verknüpfungen Konflikte. Möchten Sie fortfahren? + Eine oder mehrere Verknüpfungen verursachen Konflikte. Möchten Sie fortfahren? From 02d12d40ce19f6b2e4df0a970aeab924ebfed386 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 15 Sep 2016 16:39:40 -0400 Subject: [PATCH 293/630] Update AppData file. --- resources/unix/focuswriter.appdata.xml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 7d1a433b..78a4670c 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -66,6 +66,7 @@ Повноекранний текстовий редактор 全屏文字编辑器 全螢幕文字處理器 +

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

FocusWriter is 'n eenvoudige woordverwerker sonder enige afleidings. Dit maak gebruik van 'n wegsteek-koppelvlak wat jy kan gebruik deur jou muis na die kante van die skerm te beweeg en verskaf sodoende 'n bekende en gebruiklike voorkoms en gevoel, terwyl die program uit jou pad bly dat jy jou in jou werk kan verdiep.

@@ -152,16 +153,29 @@

另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作

另外,打開您正在撰寫的文件會自動跳至您最後一次編輯的位置,讓您可以繼續進行工作。

+ https://gottcode.org/focuswriter/screenshots/appdata.png + https://gottcode.org/focuswriter/ + https://gottcode.org/focuswriter/bugs/ https://gottcode.org/tip/ + https://www.transifex.com/projects/p/focuswriter/ + Graeme Gott - graeme@gottcode.org + graeme@gottcode.org + + focuswriter + focuswriter + + + HiDpiIcon + ModernToolkit + From ca1a46b775e8951edcf22e790fca8eacb7082fce Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 06:07:50 -0400 Subject: [PATCH 294/630] FIXED: Did not correctly store RTL in OOXML. --- src/fileformats/docx_reader.cpp | 16 +++++++++++----- src/fileformats/docx_writer.cpp | 10 +++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/fileformats/docx_reader.cpp b/src/fileformats/docx_reader.cpp index 5b5c6f34..934734e8 100644 --- a/src/fileformats/docx_reader.cpp +++ b/src/fileformats/docx_reader.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013, 2014 Graeme Gott + * Copyright (C) 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -313,14 +313,15 @@ void DocxReader::readParagraph() void DocxReader::readParagraphProperties(Style& style, bool allowstyles) { int left_indent = 0, right_indent = 0, indent = 0; + bool textdir = false; while (m_xml.readNextStartElement()) { QStringRef value = m_xml.attributes().value("w:val"); if (m_xml.qualifiedName() == "w:jc") { // ECMA-376 1st edition, ECMA-376 2nd edition transitional, ISO/IEC 29500 transitional if (value == "left") { - style.block_format.setAlignment(Qt::AlignLeft | Qt::AlignAbsolute); + style.block_format.setAlignment(!textdir ? Qt::AlignLeading : (Qt::AlignLeft | Qt::AlignAbsolute)); } else if (value == "right") { - style.block_format.setAlignment(Qt::AlignRight | Qt::AlignAbsolute); + style.block_format.setAlignment(!textdir ? Qt::AlignTrailing : (Qt::AlignRight | Qt::AlignAbsolute)); // ECMA-376, ISO/IEC 29500 strict } else if (value == "center") { style.block_format.setAlignment(Qt::AlignCenter); @@ -328,9 +329,9 @@ void DocxReader::readParagraphProperties(Style& style, bool allowstyles) style.block_format.setAlignment(Qt::AlignJustify); // ECMA-376 2nd edition, ISO/IEC 29500 strict } else if (value == "start") { - style.block_format.setAlignment(Qt::AlignLeft); + style.block_format.setAlignment(Qt::AlignLeading); } else if (value == "end") { - style.block_format.setAlignment(Qt::AlignRight); + style.block_format.setAlignment(Qt::AlignTrailing); } } else if (m_xml.qualifiedName() == "w:ind") { // ECMA-376 1st edition, ECMA-376 2nd edition transitional, ISO/IEC 29500 transitional @@ -342,8 +343,13 @@ void DocxReader::readParagraphProperties(Style& style, bool allowstyles) style.block_format.setIndent(indent); left_indent = right_indent = 0; } + } else if (m_xml.qualifiedName() == "w:bidi") { + if (readBool(m_xml.attributes().value("w:val"))) { + style.block_format.setLayoutDirection(Qt::RightToLeft); + } } else if (m_xml.qualifiedName() == "w:textDirection") { if (value == "rl") { + textdir = true; style.block_format.setLayoutDirection(Qt::RightToLeft); } else if (value == "lr") { style.block_format.setLayoutDirection(Qt::LeftToRight); diff --git a/src/fileformats/docx_writer.cpp b/src/fileformats/docx_writer.cpp index b211ef1c..130970fd 100644 --- a/src/fileformats/docx_writer.cpp +++ b/src/fileformats/docx_writer.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013, 2014 Graeme Gott + * Copyright (C) 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -256,16 +256,16 @@ void DocxWriter::writeParagraphProperties(const QTextBlockFormat& block_format, bool rtl = block_format.layoutDirection() == Qt::RightToLeft; if (rtl) { writePropertyElement(QString::fromLatin1("w:pPr"), empty); - m_xml.writeEmptyElement(QString::fromLatin1("w:textDirection")); - m_xml.writeAttribute(QString::fromLatin1("w:val"), QString::fromLatin1("rl")); + m_xml.writeEmptyElement(QString::fromLatin1("w:bidi")); + m_xml.writeAttribute(QString::fromLatin1("w:val"), QString::fromLatin1("1")); } Qt::Alignment align = block_format.alignment(); - if (rtl && (align & Qt::AlignLeft)) { + if ((align & Qt::AlignLeft) || (rtl && (align & Qt::AlignRight))) { writePropertyElement(QString::fromLatin1("w:pPr"), empty); m_xml.writeEmptyElement(QString::fromLatin1("w:jc")); m_xml.writeAttribute(QString::fromLatin1("w:val"), m_strict ? QString::fromLatin1("start") : QString::fromLatin1("left")); - } else if (align & Qt::AlignRight) { + } else if ((align & Qt::AlignRight) || (rtl && (align & Qt::AlignLeft))) { writePropertyElement(QString::fromLatin1("w:pPr"), empty); m_xml.writeEmptyElement(QString::fromLatin1("w:jc")); m_xml.writeAttribute(QString::fromLatin1("w:val"), m_strict ? QString::fromLatin1("end") : QString::fromLatin1("right")); From 09b455a0e9aa7460eceabbc3c2ae49fe37a9b019 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 11:40:40 -0400 Subject: [PATCH 295/630] FIXED: Did not always close OOXML paragraph properties correctly. --- src/fileformats/docx_writer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/fileformats/docx_writer.cpp b/src/fileformats/docx_writer.cpp index 130970fd..75770210 100644 --- a/src/fileformats/docx_writer.cpp +++ b/src/fileformats/docx_writer.cpp @@ -292,7 +292,11 @@ void DocxWriter::writeParagraphProperties(const QTextBlockFormat& block_format, } } - empty &= writeRunProperties(char_format, QString::fromLatin1("w:pPr")); + if (!empty) { + writeRunProperties(char_format); + } else { + empty = writeRunProperties(char_format, QString::fromLatin1("w:pPr")); + } if (!empty) { m_xml.writeEndElement(); From ad6fa1130ba0917f4ae2e716296bf387b2c47041 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 12:51:06 -0400 Subject: [PATCH 296/630] Do not write default paragraph alignment. --- src/fileformats/docx_writer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileformats/docx_writer.cpp b/src/fileformats/docx_writer.cpp index 75770210..485fc950 100644 --- a/src/fileformats/docx_writer.cpp +++ b/src/fileformats/docx_writer.cpp @@ -261,7 +261,7 @@ void DocxWriter::writeParagraphProperties(const QTextBlockFormat& block_format, } Qt::Alignment align = block_format.alignment(); - if ((align & Qt::AlignLeft) || (rtl && (align & Qt::AlignRight))) { + if (rtl && (align & Qt::AlignRight)) { writePropertyElement(QString::fromLatin1("w:pPr"), empty); m_xml.writeEmptyElement(QString::fromLatin1("w:jc")); m_xml.writeAttribute(QString::fromLatin1("w:val"), m_strict ? QString::fromLatin1("start") : QString::fromLatin1("left")); From 1c598d3c7e35ed4d14d7c6f03cd42e14907dd453 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 13:37:47 -0400 Subject: [PATCH 297/630] FIXED: Misspelled words did not following heading style. --- src/spelling/highlighter.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/spelling/highlighter.cpp b/src/spelling/highlighter.cpp index df74b0d9..a5448bce 100644 --- a/src/spelling/highlighter.cpp +++ b/src/spelling/highlighter.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -148,9 +148,9 @@ bool Highlighter::eventFilter(QObject* watched, QEvent* event) void Highlighter::highlightBlock(const QString& text) { + QTextCharFormat style; int heading = currentBlock().blockFormat().property(QTextFormat::UserProperty).toInt(); if (heading) { - QTextCharFormat style; style.setProperty(QTextFormat::FontSizeAdjustment, 4 - heading); style.setFontWeight(QFont::Bold); setFormat(0, text.length(), style); @@ -164,9 +164,8 @@ void Highlighter::highlightBlock(const QString& text) stats->checkSpelling(text, m_dictionary); } - QTextCharFormat error; - error.setUnderlineColor(m_misspelled); - error.setUnderlineStyle((QTextCharFormat::UnderlineStyle)QApplication::style()->styleHint(QStyle::SH_SpellCheckUnderlineStyle)); + style.setUnderlineColor(m_misspelled); + style.setUnderlineStyle((QTextCharFormat::UnderlineStyle)QApplication::style()->styleHint(QStyle::SH_SpellCheckUnderlineStyle)); int cursor = m_text->textCursor().position() - currentBlock().position(); QVector words = stats->misspelled(); @@ -174,7 +173,7 @@ void Highlighter::highlightBlock(const QString& text) const QStringRef& word = words.at(i); int delta = cursor - word.position(); if (!m_changed || (delta < 0 || delta > word.length())) { - setFormat(word.position(), word.length(), error); + setFormat(word.position(), word.length(), style); } } From 4ec4d0de81e323ec23d72908bbce3c860e903d1b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 13:56:08 -0400 Subject: [PATCH 298/630] FIXED: Incorrectly handled non-heading text in OOXML. --- src/fileformats/docx_reader.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fileformats/docx_reader.cpp b/src/fileformats/docx_reader.cpp index 934734e8..2fee8c72 100644 --- a/src/fileformats/docx_reader.cpp +++ b/src/fileformats/docx_reader.cpp @@ -355,8 +355,10 @@ void DocxReader::readParagraphProperties(Style& style, bool allowstyles) style.block_format.setLayoutDirection(Qt::LeftToRight); } } else if (m_xml.qualifiedName() == "w:outlineLvl") { - int heading = qBound(1, m_xml.attributes().value("w:val").toString().toInt() + 1, 6); - style.block_format.setProperty(QTextFormat::UserProperty, heading); + int heading = m_xml.attributes().value("w:val").toString().toInt(); + if (heading != 9) { + style.block_format.setProperty(QTextFormat::UserProperty, qBound(1, heading + 1, 6)); + } } else if ((m_xml.qualifiedName() == "w:pStyle") && allowstyles) { Style pstyle = m_styles.value(value.toString()); pstyle.merge(style); From 7a3d6848560a063f0cd1faa3b73dd6beecb1e3c9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 15:35:36 -0400 Subject: [PATCH 299/630] Update dictionaries. --- resources/windows/dictionaries.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index aeb3fe45..8fb5a748 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='5.2.0.3' +loversion='5.2.1.2' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "http://download.documentfoundation.org/libreoffice/src/5.2.0/${lodict}.tar.xz" + curl -s -O -L "http://download.documentfoundation.org/libreoffice/src/5.2.1/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' From 2b2d43d09bd756f341e10ab65ba28a8efad5bf64 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Sep 2016 17:19:40 -0400 Subject: [PATCH 300/630] Support native Windows builds. --- INSTALL | 9 +-- resources/windows/installer.nsi | 97 +++++++--------------------- windows_deploy.bat | 90 ++++++++++++++++++++++++++ windows_deploy.sh | 108 -------------------------------- 4 files changed, 119 insertions(+), 185 deletions(-) create mode 100644 windows_deploy.bat delete mode 100755 windows_deploy.sh diff --git a/INSTALL b/INSTALL index b0b72207..600f5957 100644 --- a/INSTALL +++ b/INSTALL @@ -19,13 +19,14 @@ Mac OS X: 3.) Type './mac_deploy.sh' to create a disk image of the program. -Windows (cross compile from Linux): - 1.) Type 'mingw32-qt5-qmake' to configure the program. +Windows: + 1.) Type 'qmake' to configure the program. 2.) Type 'make' to compile the program. - 3.) Type './windows_deploy.sh' to create a compressed image of the program. - Note that you must have p7zip installed for this to work. + 3.) Type 'windows_deploy' to create a compressed image of the program. Note + that you must have the 7z executable from 7-zip.org in your %PATH% for + this to work. 4.) Browse to resources/windows/ and type 'makensis installer.nsi' to create an installer of the program. diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 75abcc08..7dd04a3e 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -138,6 +138,7 @@ Var StartMenuFolder !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Esperanto" +!insertmacro MUI_LANGUAGE "Asturian" ;-------------------------------- ;Reserve Files @@ -153,53 +154,6 @@ Function .onInit FunctionEnd -Function ConvertUnixNewLines - - Exch $R0 ;file #1 path - Push $R1 ;file #1 handle - Push $R2 ;file #2 path - Push $R3 ;file #2 handle - Push $R4 ;data - Push $R5 - - FileOpen $R1 $R0 r - GetTempFileName $R2 - FileOpen $R3 $R2 w - - loopRead: - ClearErrors - FileRead $R1 $R4 - IfErrors doneRead - - StrCpy $R5 $R4 1 -1 - StrCmp $R5 $\n 0 +4 - StrCpy $R5 $R4 1 -2 - StrCmp $R5 $\r +3 - StrCpy $R4 $R4 -1 - StrCpy $R4 "$R4$\r$\n" - - FileWrite $R3 $R4 - - Goto loopRead - doneRead: - - FileClose $R3 - FileClose $R1 - - SetDetailsPrint none - Delete $R0 - Rename $R2 $R0 - SetDetailsPrint both - - Pop $R5 - Pop $R4 - Pop $R3 - Pop $R2 - Pop $R1 - Pop $R0 - -FunctionEnd - ;-------------------------------- ;Installer Section @@ -209,21 +163,9 @@ Section "install" SetOutPath $INSTDIR File ..\..\release\FocusWriter.exe File ..\symbols\symbols900.dat - File $%QTDIR%\bin\iconv.dll - File $%QTDIR%\bin\libgcc_s_sjlj-1.dll - File $%QTDIR%\bin\libGLESv2.dll - File $%QTDIR%\bin\libglib-2.0-0.dll - File $%QTDIR%\bin\libharfbuzz-0.dll - File $%QTDIR%\bin\libintl-8.dll - File $%QTDIR%\bin\libpcre-1.dll - File $%QTDIR%\bin\libpcre16-0.dll - File $%QTDIR%\bin\libpng16-16.dll - File $%QTDIR%\bin\libjpeg-62.dll + File $%QTDIR%\bin\libgcc_s_dw2-1.dll File $%QTDIR%\bin\libstdc++-6.dll - File $%QTDIR%\bin\libtiff-5.dll - File $%QTDIR%\bin\libwebp-6.dll File $%QTDIR%\bin\libwinpthread-1.dll - File $%QTDIR%\bin\zlib1.dll File $%QTDIR%\bin\Qt5Core.dll File $%QTDIR%\bin\Qt5Gui.dll File $%QTDIR%\bin\Qt5Multimedia.dll @@ -234,22 +176,33 @@ Section "install" File $%QTDIR%\bin\Qt5WinExtras.dll SetOutPath $INSTDIR\audio - File $%QTDIR%\lib\qt5\plugins\audio\*.dll + File $%QTDIR%\plugins\audio\qtaudio_windows.dll SetOutPath $INSTDIR\bearer - File $%QTDIR%\lib\qt5\plugins\bearer\*.dll + File $%QTDIR%\plugins\bearer\qgenericbearer.dll + File $%QTDIR%\plugins\bearer\qnativewifibearer.dll SetOutPath $INSTDIR\imageformats - File $%QTDIR%\lib\qt5\plugins\imageformats\*.dll + File $%QTDIR%\plugins\imageformats\qdds.dll + File $%QTDIR%\plugins\imageformats\qgif.dll + File $%QTDIR%\plugins\imageformats\qicns.dll + File $%QTDIR%\plugins\imageformats\qico.dll + File $%QTDIR%\plugins\imageformats\qjpeg.dll + File $%QTDIR%\plugins\imageformats\qsvg.dll + File $%QTDIR%\plugins\imageformats\qtga.dll + File $%QTDIR%\plugins\imageformats\qtiff.dll + File $%QTDIR%\plugins\imageformats\qwbmp.dll + File $%QTDIR%\plugins\imageformats\qwebp.dll SetOutPath $INSTDIR\mediaservice - File $%QTDIR%\lib\qt5\plugins\mediaservice\*.dll + File $%QTDIR%\plugins\mediaservice\dsengine.dll + File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll SetOutPath $INSTDIR\platforms - File $%QTDIR%\lib\qt5\plugins\platforms\*.dll + File $%QTDIR%\plugins\platforms\qwindows.dll SetOutPath $INSTDIR\printsupport - File $%QTDIR%\lib\qt5\plugins\printsupport\*.dll + File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll SetOutPath $INSTDIR\dictionaries File dicts\*.aff @@ -281,29 +234,27 @@ Section "install" SetOutPath $INSTDIR\translations File ..\..\translations\*.qm - File $%QTDIR%\share\qt5\translations\qt_*.qm - File $%QTDIR%\share\qt5\translations\qtbase_*.qm - File $%QTDIR%\share\qt5\translations\qtmultimedia_*.qm + File $%QTDIR%\translations\qt_*.qm + File $%QTDIR%\translations\qtbase_*.qm + File $%QTDIR%\translations\qtmultimedia_*.qm ;Create ReadMe file SetOutPath $INSTDIR File /oname=ReadMe.txt ..\..\README FileOpen $4 "ReadMe.txt" a FileSeek $4 0 END - FileWrite $4 "$\n$\nCredits$\n=======$\n$\n" + FileWrite $4 "$\r$\n$\r$\nCredits$\r$\n=======$\r$\n$\r$\n" FileClose $4 File ..\..\CREDITS ${FileJoin} "ReadMe.txt" "CREDITS" "ReadMe.txt" Delete $INSTDIR\CREDITS FileOpen $4 "ReadMe.txt" a FileSeek $4 0 END - FileWrite $4 "$\n$\nNews$\n====$\n$\n" + FileWrite $4 "$\r$\n$\r$\nNews$\r$\n====$\r$\n$\r$\n" FileClose $4 File ..\..\NEWS ${FileJoin} "ReadMe.txt" "NEWS" "ReadMe.txt" Delete $INSTDIR\NEWS - Push $INSTDIR\ReadMe.txt - Call ConvertUnixNewLines ;Registry information for add/remove programs WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" diff --git a/windows_deploy.bat b/windows_deploy.bat new file mode 100644 index 00000000..d298d746 --- /dev/null +++ b/windows_deploy.bat @@ -0,0 +1,90 @@ +@ECHO OFF + +SET APP=FocusWriter +SET VERSION=1.6.0 + +ECHO Copying executable +MKDIR %APP% +TYPE COPYING | FIND "" /V > %APP%\COPYING.txt +TYPE CREDITS | FIND "" /V > %APP%\CREDITS.txt +TYPE README | FIND "" /V > %APP%\README.txt +COPY release\%APP%.exe %APP% >nul +strip %APP%\%APP%.exe + +ECHO Copying translations +SET TRANSLATIONS=%APP%\translations +MKDIR %TRANSLATIONS% +COPY translations\*.qm %TRANSLATIONS% >nul +COPY %QTDIR%\translations\qt_*.qm %TRANSLATIONS% >nul +COPY %QTDIR%\translations\qtbase_*.qm %TRANSLATIONS% >nul +COPY %QTDIR%\translations\qtmultimedia_*.qm %TRANSLATIONS% >nul + +ECHO Copying icons +SET ICONS=%APP%\icons\hicolor +MKDIR %ICONS% +XCOPY /Q /S /Y resources\images\icons\oxygen\hicolor %ICONS% >nul + +ECHO Copying dictionaries +SET DICTIONARIES=%APP%\dictionaries +MKDIR %DICTIONARIES% +XCOPY /Q /S /Y resources\windows\dicts %DICTIONARIES% >nul + +ECHO Copying sounds +SET SOUNDS=%APP%\sounds +MKDIR %SOUNDS% +COPY resources\sounds\* %SOUNDS% >nul + +ECHO Copying symbols +COPY resources\symbols\symbols900.dat %APP% >nul + +ECHO Copying themes +SET THEMES=%APP%\themes +MKDIR %THEMES% +XCOPY /Q /S /Y resources\themes\* %THEMES% >nul + +ECHO Copying Qt libraries +COPY %QTDIR%\bin\libgcc_s_dw2-1.dll %APP% >nul +COPY "%QTDIR%\bin\libstdc++-6.dll" %APP% >nul +COPY %QTDIR%\bin\libwinpthread-1.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Core.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Gui.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Multimedia.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Network.dll %APP% >nul +COPY %QTDIR%\bin\Qt5PrintSupport.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Svg.dll %APP% >nul +COPY %QTDIR%\bin\Qt5Widgets.dll %APP% >nul +COPY %QTDIR%\bin\Qt5WinExtras.dll %APP% >nul + +ECHO Copying Qt plugins +MKDIR %APP%\audio +COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul + +MKDIR %APP%\bearer +XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul +DEL %APP%\bearer\*d.dll >nul + +MKDIR %APP%\platforms +COPY %QTDIR%\plugins\platforms\qwindows.dll %APP%\platforms >nul + +MKDIR %APP%\imageformats +XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul +DEL %APP%\imageformats\*d.dll >nul + +MKDIR %APP%\mediaservice +XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul +DEL %APP%\mediaservice\*d.dll >nul + +MKDIR %APP%\printsupport +COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul + +ECHO Making portable +MKDIR %APP%\Data + +ECHO Creating compressed file +CD %APP% +7z a -mx=9 %APP%_%VERSION%.zip * >nul +CD .. +MOVE %APP%\%APP%_%VERSION%.zip . >nul + +ECHO Cleaning up +RMDIR /S /Q %APP% diff --git a/windows_deploy.sh b/windows_deploy.sh deleted file mode 100755 index ba9b1679..00000000 --- a/windows_deploy.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/bash - -APP='FocusWriter' -VERSION='1.6.0' - -echo -n 'Preparing... ' -QTDIR=$(mingw32-qmake-qt5 -query QT_INSTALL_PREFIX) -rm -f ${APP}_${VERSION}.zip -rm -rf $APP -echo 'Done' - -echo -n 'Copying executable... ' -mkdir $APP -cp release/$APP.exe $APP -echo 'Done' - -echo -n 'Copying translations... ' -mkdir $APP/translations -cp translations/*.qm $APP/translations -cp $QTDIR/share/qt5/translations/qt_*.qm $APP/translations -cp $QTDIR/share/qt5/translations/qtbase_*.qm $APP/translations -cp $QTDIR/share/qt5/translations/qtmultimedia_*.qm $APP/translations -echo 'Done' - -echo -n 'Copying icons... ' -mkdir $APP/icons -cp -r resources/images/icons/oxygen/hicolor/ $APP/icons -echo 'Done' - -echo -n 'Copying dictionaries... ' -mkdir $APP/dictionaries -cp -r resources/windows/dicts/* $APP/dictionaries -echo 'Done' - -echo -n 'Copying sounds... ' -cp -r resources/sounds/ $APP -echo 'Done' - -echo -n 'Copying symbols... ' -cp resources/symbols/symbols900.dat $APP -echo 'Done' - -echo -n 'Copying themes... ' -cp -r resources/themes/ $APP -echo 'Done' - -echo -n 'Copying Qt libraries... ' -cp $QTDIR/bin/iconv.dll $APP -cp $QTDIR/bin/libgcc_s_sjlj-1.dll $APP -cp $QTDIR/bin/libGLESv2.dll $APP -cp $QTDIR/bin/libglib-2.0-0.dll $APP -cp $QTDIR/bin/libharfbuzz-0.dll $APP -cp $QTDIR/bin/libintl-8.dll $APP -cp $QTDIR/bin/libpcre-1.dll $APP -cp $QTDIR/bin/libpcre16-0.dll $APP -cp $QTDIR/bin/libpng16-16.dll $APP -cp $QTDIR/bin/libjpeg-62.dll $APP -cp $QTDIR/bin/libstdc++-6.dll $APP -cp $QTDIR/bin/libtiff-5.dll $APP -cp $QTDIR/bin/libwebp-6.dll $APP -cp $QTDIR/bin/libwinpthread-1.dll $APP -cp $QTDIR/bin/zlib1.dll $APP -cp $QTDIR/bin/Qt5Core.dll $APP -cp $QTDIR/bin/Qt5Gui.dll $APP -cp $QTDIR/bin/Qt5Multimedia.dll $APP -cp $QTDIR/bin/Qt5Network.dll $APP -cp $QTDIR/bin/Qt5PrintSupport.dll $APP -cp $QTDIR/bin/Qt5Svg.dll $APP -cp $QTDIR/bin/Qt5Widgets.dll $APP -cp $QTDIR/bin/Qt5WinExtras.dll $APP -echo 'Done' - -echo -n 'Copying Qt plugins... ' -cp -r $QTDIR/lib/qt5/plugins/audio/ $APP -cp -r $QTDIR/lib/qt5/plugins/bearer/ $APP -cp -r $QTDIR/lib/qt5/plugins/platforms/ $APP -cp -r $QTDIR/lib/qt5/plugins/imageformats/ $APP -cp -r $QTDIR/lib/qt5/plugins/mediaservice/ $APP -cp -r $QTDIR/lib/qt5/plugins/printsupport/ $APP -echo 'Done' - -echo -n 'Create ReadMe... ' -cp README $APP/ReadMe.txt -echo -e '\n\nCredits\n=======\n\n' >> $APP/ReadMe.txt -cat CREDITS >> $APP/ReadMe.txt -echo -e '\n\nNews\n====\n\n' >> $APP/ReadMe.txt -cat NEWS >> $APP/ReadMe.txt -unix2dos -q -o $APP/ReadMe.txt -unix2dos -q -n COPYING $APP/Copying.txt -echo 'Done' - -echo -n 'Stripping files... ' -mingw-strip --strip-unneeded -p $APP/$APP.exe $APP/*.dll $APP/*/*.dll -echo 'Done' - -echo -n 'Making portable... ' -mkdir $APP/Data -echo 'Done' - -echo -n 'Compressing... ' -cd $APP -7za a -mx=9 ../${APP}_${VERSION}.zip * -cd .. -echo 'Done' - -echo -n 'Cleaning up... ' -rm -rf $APP -echo 'Done' From 0ab6a38091356f99cb0634c1d8171bed03d36bde Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 19 Sep 2016 05:56:24 -0400 Subject: [PATCH 301/630] Bump version number. --- NEWS | 10 ++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index c10d071c..96887aad 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,13 @@ +1.6.1 +----- +* FIXED: Incorrectly handled non-heading text in OOXML. +* FIXED: Misspelled words did not follow heading style. +* FIXED: Did not always close OOXML paragraph properties correctly. +* FIXED: Did not correctly store RTL in OOXML. +* FIXED: Reported conflicts for empty shortcuts. +* FIXED: Switched to incorrect tab to show conflicting shortcuts. +* Translation updates: German, Romanian. + 1.6.0 ----- * Added always showing interface. diff --git a/focuswriter.pro b/focuswriter.pro index f742c8bb..305a6246 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.6.0 +VERSION = 1.6.1 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 0d937bea..27be1ac9 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.0' +VERSION='1.6.1' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 7dd04a3e..4be6d4db 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 0 +!define VERSIONPATCH 1 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index d298d746..350ca77d 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.0 +SET VERSION=1.6.1 ECHO Copying executable MKDIR %APP% From 9ae61538e091cff44854a8723f5928d42507a5f9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 19 Sep 2016 10:47:14 -0400 Subject: [PATCH 302/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 0743c0cc..7afb47dd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.1-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Mon, 19 Sep 2016 09:58:44 +0000 + focuswriter (1.6.0-1) unstable; urgency=medium * New upstream release From 09d5d4e84d9b929a4ba11a6e323b439c17c060dc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Sep 2016 11:49:39 -0400 Subject: [PATCH 303/630] Sync translations with Transifex. --- translations/focuswriter_sv.qm | Bin 33888 -> 35477 bytes translations/focuswriter_sv.ts | 40 ++++++++++++++++----------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm index a21387ab7cd0acae6922865b0a12a93adda79f99..2051dbc0892c6352237601140aeecba75cf4fb3a 100644 GIT binary patch delta 4657 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 Yw0xf;ohDspt|+qxRylOkEdE0IPq4k@XaE2J delta 3386 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 diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 064f1fc9..d0cdb96c 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -356,7 +356,7 @@ OpenDocument Flat XML - + OpenDocument Flat XML @@ -646,7 +646,7 @@ Remove current dictionary? - + Ta bort aktuell ordlista? @@ -661,22 +661,22 @@ User Interface - + Användargränssnitt Always show scrollbar - + Visa alltid rullist Always show top bar - + Visa alltid topplist Always show bottom bar - + Visa alltid bottenlist @@ -1411,12 +1411,12 @@ Bitter Skies - + Bittra himlar Enchantment - + Förtrollning @@ -1436,12 +1436,12 @@ Spy Games - + Spionspel Tranquility - + Fridfullhet @@ -1899,7 +1899,7 @@ Pa&ge Setup... - + Si&dinställning... @@ -1979,42 +1979,42 @@ &Heading - + &Rubrik Heading &1 - + Rubrik &1 Heading &2 - + Rubrik &2 Heading &3 - + Rubrik &3 Heading &4 - + Rubrik &4 Heading &5 - + Rubrik &5 Heading &6 - + Rubrik &6 &Normal - + &Normal @@ -2289,7 +2289,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` From 2b8e4372a9bd91d383671a94eeaf59bee45aca05 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 23 Sep 2016 19:09:06 +0100 Subject: [PATCH 304/630] use lrelease to regenerate translations/*.qm --- debian/control | 1 + debian/rules | 4 ++++ translations/focuswriter_af_ZA.qm | Bin 10927 -> 0 bytes translations/focuswriter_ar.qm | Bin 14319 -> 0 bytes translations/focuswriter_ca.qm | Bin 33395 -> 0 bytes translations/focuswriter_cs.qm | Bin 35343 -> 0 bytes translations/focuswriter_da.qm | Bin 34571 -> 0 bytes translations/focuswriter_de.qm | Bin 37706 -> 0 bytes translations/focuswriter_el.qm | Bin 37505 -> 0 bytes translations/focuswriter_en.qm | Bin 776 -> 0 bytes translations/focuswriter_en_GB.qm | Bin 26906 -> 0 bytes translations/focuswriter_eo.qm | Bin 35187 -> 0 bytes translations/focuswriter_es.qm | Bin 30232 -> 0 bytes translations/focuswriter_es_MX.qm | Bin 28467 -> 0 bytes translations/focuswriter_fi.qm | Bin 36133 -> 0 bytes translations/focuswriter_fr.qm | Bin 38440 -> 0 bytes translations/focuswriter_he.qm | Bin 32661 -> 0 bytes translations/focuswriter_hu.qm | Bin 28932 -> 0 bytes translations/focuswriter_hy.qm | Bin 37252 -> 0 bytes translations/focuswriter_id.qm | Bin 34506 -> 0 bytes translations/focuswriter_it.qm | Bin 32769 -> 0 bytes translations/focuswriter_ja.qm | Bin 30280 -> 0 bytes translations/focuswriter_ko.qm | Bin 29454 -> 0 bytes translations/focuswriter_lt.qm | Bin 37733 -> 0 bytes translations/focuswriter_nl.qm | Bin 37145 -> 0 bytes translations/focuswriter_pl.qm | Bin 37114 -> 0 bytes translations/focuswriter_pt.qm | Bin 36813 -> 0 bytes translations/focuswriter_pt_BR.qm | Bin 37987 -> 0 bytes translations/focuswriter_ro.qm | Bin 37242 -> 0 bytes translations/focuswriter_ru.qm | Bin 35647 -> 0 bytes translations/focuswriter_sk.qm | Bin 36514 -> 0 bytes translations/focuswriter_sr.qm | Bin 34978 -> 0 bytes translations/focuswriter_sv.qm | Bin 35477 -> 0 bytes translations/focuswriter_tr.qm | Bin 33954 -> 0 bytes translations/focuswriter_uk.qm | Bin 36144 -> 0 bytes translations/focuswriter_vi.qm | Bin 29356 -> 0 bytes translations/focuswriter_zh_CN.qm | Bin 28189 -> 0 bytes 37 files changed, 5 insertions(+) delete mode 100644 translations/focuswriter_af_ZA.qm delete mode 100644 translations/focuswriter_ar.qm delete mode 100644 translations/focuswriter_ca.qm delete mode 100644 translations/focuswriter_cs.qm delete mode 100644 translations/focuswriter_da.qm delete mode 100644 translations/focuswriter_de.qm delete mode 100644 translations/focuswriter_el.qm delete mode 100644 translations/focuswriter_en.qm delete mode 100644 translations/focuswriter_en_GB.qm delete mode 100644 translations/focuswriter_eo.qm delete mode 100644 translations/focuswriter_es.qm delete mode 100644 translations/focuswriter_es_MX.qm delete mode 100644 translations/focuswriter_fi.qm delete mode 100644 translations/focuswriter_fr.qm delete mode 100644 translations/focuswriter_he.qm delete mode 100644 translations/focuswriter_hu.qm delete mode 100644 translations/focuswriter_hy.qm delete mode 100644 translations/focuswriter_id.qm delete mode 100644 translations/focuswriter_it.qm delete mode 100644 translations/focuswriter_ja.qm delete mode 100644 translations/focuswriter_ko.qm delete mode 100644 translations/focuswriter_lt.qm delete mode 100644 translations/focuswriter_nl.qm delete mode 100644 translations/focuswriter_pl.qm delete mode 100644 translations/focuswriter_pt.qm delete mode 100644 translations/focuswriter_pt_BR.qm delete mode 100644 translations/focuswriter_ro.qm delete mode 100644 translations/focuswriter_ru.qm delete mode 100644 translations/focuswriter_sk.qm delete mode 100644 translations/focuswriter_sr.qm delete mode 100644 translations/focuswriter_sv.qm delete mode 100644 translations/focuswriter_tr.qm delete mode 100644 translations/focuswriter_uk.qm delete mode 100644 translations/focuswriter_vi.qm delete mode 100644 translations/focuswriter_zh_CN.qm diff --git a/debian/control b/debian/control index dbb77d53..fc8eceb8 100644 --- a/debian/control +++ b/debian/control @@ -5,6 +5,7 @@ Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott Build-Depends: debhelper (>= 9), qtbase5-dev, + qttools5-dev-tools, qtmultimedia5-dev, libhunspell-dev, pkg-config, diff --git a/debian/rules b/debian/rules index 59c32f41..189fcaba 100755 --- a/debian/rules +++ b/debian/rules @@ -9,5 +9,9 @@ include /usr/share/dpkg/buildflags.mk %: dh $@ --parallel +override_dh_auto_build: + lrelease focuswriter.pro # (re)generate translations/*.qm + dh_auto_build + override_dh_installchangelogs: dh_installchangelogs NEWS diff --git a/translations/focuswriter_af_ZA.qm b/translations/focuswriter_af_ZA.qm deleted file mode 100644 index 19474885cd4d63715bdc54b2932374cb2647e872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10927 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 OGSAtS<-xPfq5lJjb`1gm diff --git a/translations/focuswriter_ca.qm b/translations/focuswriter_ca.qm deleted file mode 100644 index 92ae669b67957d2213b2bf4f4ccb1348ecd248a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33395 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 Rwk82eROfx@DXOih`5#P-9>xFw diff --git a/translations/focuswriter_cs.qm b/translations/focuswriter_cs.qm deleted file mode 100644 index b177cf3b37f00e86920e5256d0d59b8ce7c923e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35343 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 I6{-*Y7n;v7$p8QV diff --git a/translations/focuswriter_da.qm b/translations/focuswriter_da.qm deleted file mode 100644 index ef32be714c765a0de2083c298addccc65add0d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34571 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 LO0)vi*3|qT9@jLn diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm deleted file mode 100644 index 4dc52db099cfe7e05bb97eed5ac5cffa362c738f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37706 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 diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm deleted file mode 100644 index 667757a623d73768f7fa86850594c61004aa664d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37505 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 diff --git a/translations/focuswriter_en.qm b/translations/focuswriter_en.qm deleted file mode 100644 index 77fc58d7df9295d769302002e7b6c33efae88078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 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 diff --git a/translations/focuswriter_eo.qm b/translations/focuswriter_eo.qm deleted file mode 100644 index 4ba501a00d4398877e9089f0d19c9faea1823f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35187 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 Ht*QCHRvlUQ diff --git a/translations/focuswriter_es.qm b/translations/focuswriter_es.qm deleted file mode 100644 index 5e3c2ab554960ed87472ebfff0b7e806979fb4a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30232 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 AWB>pF diff --git a/translations/focuswriter_es_MX.qm b/translations/focuswriter_es_MX.qm deleted file mode 100644 index 77b01c413078841e9932cecd65abd731cc5271f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28467 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 diff --git a/translations/focuswriter_fi.qm b/translations/focuswriter_fi.qm deleted file mode 100644 index 78f0279f28b1e7413b3a1c94fca6354812fce51c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36133 zcmchA3w)eanfFODGnq^#lcY^UsG+x*Tx60-F|Ic|ZXWsXn zX>fnP{q@(r$@D$XdCqfxp7WeDYrZnt@%Zm=yYc%cbw2d2PkrNO>x5`pAVgi45VcPV z5&F0g>8ubN|4xYZE7f!EAt5&P;PcHw3|ue7#7~6Su?+A2Zy|PmM~Jh>)N{w*s^|I7 z2=RPTh&i{3+B*T~+$TiseR%I36QcIZ-^TO1B6KI-nK(s+z7`TJy@6 zlL#-u|8KlSgmJNG!VM9wGLfBNknY_x3f3MK?c&=PP2-qxd{kBi?@8^FqYx zME`;hVGVy4n-^Un#F{N)%Z@picemK`m5YQ}kQQ6bBSLJrT?~HYM?&Ndh~Y;U3bDIe z?0nzVLah6SdiGy0c3+0yH z5byqOP0cm$5#rE?YhwTYb0JD~HS?Z4Lx`cRHQmp=AjI6y)eJ8GfDrv}*1U6e0rY-% z%{$MI#fQEk#PmmMF1zy+LJT+5eCluZ332I(HTS*tCBQqo=BJl~P8Z)&^V0mV z5bs%7^HSgEgqU|@&9C|vL4J1E{9DcUh3IOj`Smcyb(~NezWKvKbpN5Y<^3Z%Q9ICg8X4o3*LO-YvwDc&#}G_y?BO9(nP6tZ#Gebq~EE#HsDIH{Skf$kRQw zx3AtT#G+{Joi{xSIk~6yb1QEI-tDzt{wid4WO?oVSL3~RUR?XNu``5t*GFr=c0JZ{ z@vmy1Ij>uY<*aZ13nMeEsg_jbZ*^>yI#gThwILIbkR^cpm)t`?`I^Z^vlemA?SL z`kU%*eAkP>_jh%-^aI|O+Pb?={UzqPyY60b3iRW(x_kEk?u9qj-TR?SLAP`39)9*s zA?i=Ad*ZbO@ZMeb&;R@TiL5&xM|T3G`U|>(Cp!KLGoAN9fHh=V6|&hHGAdot*mH za2@r3V>BG%xE*JO!?)qN?wW9XQ!k#s3nyNpbuJ@Q#Nr5aOg+;VZsy zoe-<{hOfD8C*=05@U>?ag^0YMo=v|BU%TNk$kX%cx%m^}Yx~c{`?JG0KeZ9|>5cF$ zSKJ3V`e68$M<0Q{uL<9F^BT>Ief=9tbgHG)N{*2;XD4Y9QN-|;V(Rb z_lIr>-@E2|%zH3=?*o|k(tilw_q{yi=ce$pTmMFgRkOp-odEs~tO@^Y^h6;VpAG-) zi&#hNe}sSj)vpS%tt0%aYc7U99EsFjzX|xXN9srBLZ0SDqMZfE>v56x5#YD&2a)4` zc@%O`7wOmqISD-(nJc;h|KZ5#x8eWOAC4@4AJ!#SMOOWJ8|1b%vbydS@MTV9({q3u zzAm!)FL>_$Xyn3Ipx-Ocj_lik_cxp$$;|#H^g0rmyzUv`u_|&T0X}UyD{||fK=*}n z@C0AhJQw-w^`LiMf8^VlHX-)k6#3rO(66`uUF7)(fY+M$MqWMXIq2tx$ZKE3bIFzU zbqk?qoqwvI^=d2Z<$LQ-ez}Ns4Ad_=5(dAQ)Sv#e33RVi&%xvC`>urky**Mt^wiVP ztE=iWzsCIYUZ|gJdOz%0zJBUA(D%N<`oovMDMbE_`dhyYx~HG2zdM4@=dP;%{I{Wp z=f0!c+$UN{(Ga*&w}2?yP}F?1nin7+ zm#>cAaM?T|E?XA8wRwdQm-I$IGYEY=@c!r{QTW-K+oF#Q-vE5S9{o-iQ$Y@CzRF$d?|0ea$z# z@5m3}uRqvub@v(2U(s;$=11WV?`*hzPXhDbpq{zkH{4bKBJ9*-4d1x(eW2r#hHt)j zEA-{nhR1KY4)$P6!|#6ZLD28R4R3bu!+diZ-n)N}jB*kc_x!JKS~J^sH6umihePuviOUOXCm;_JQmy)pLUk&A?g?~lE-4sEWyzk&ENub#(WrJhSKjQ{>B@VnED|G#Cx zCvsf;jUR)qvu0*3@^wAK>>M!xR4S ztU){h|E!NU_3e$o&xM*cedz|^-`{lp8u+P!*PHfz`V9E_bW`>}bD+oNO_w~p4RK4Z z>8iowz_;%=J@At!5hq;P^zhxVlgD*5J^D{;z^7}Qp1(N(x^y?ax)*d?{B$C8|DR#U zZb{5~?g#J#ixO>@XYu~W66-DkA8Id23_SiK*K9Ts)Rls-e6NwK!0J;x+F>%vNAAsGMm$>U`z?t(x z;_p|U4SO;t@xT}U6?Azz@zBp#!+!rT@iW?;BhMzD|JS*ob4}ua5OYaaL@;GOw&^N#!H!0)bV-t$w?VdD>*%@h9% z_Pe(^ea}w#!yh&mZoUit<45Y5`f~FXH-kPa63t&*as+((Kh59moejH~Zhmz>=+XY= z=2x%24tDOj=0C?D1U=@YVI=&Y5}Se4w3(ME%@bR&lr#nv{53>Pw|F(}Vfkc-|}&bC2SGX(JAb98jdaFs=V_jZ&+nEu&ORV?3A2aN=2I{2xf| zH#3s`?V<;eNxl?dgEja$qcJExY!;1yRCc_S8kdH#r7t~FOy{zx{In)Tofi5FfLh9; zUIyGgfWNL)PCzUd44J9XCEK%^X=y#8eYug+BqTs$(*Z-i4Z|lTM*k^=rrfYME!dSU zri&SK)Ua%OIfT8ir9|L>T#KSs1}ma)aE+7rOSPIoU z+hOKOJ(-MA$`(=wfyKxKh+`IvLuq`t-!$NNiru7mIbI3i1zV24lYBa`qB}|uC(zSB zWF8DSk)`i3B$A^*M=eH|@5qpu$)%(hDxY(W1V9_1fMl`4oRlDPc@#fWruYddPzGF_ z=U^CD;EfIGjCr0P%iS}b#5jR6f`5aiGbD=+f;1UPaCiC>t?7#srZEN-j8nUooobBb zbCbqsx^N%>qos}rDRnvKVx6Tn4w>21q$!u`U+Hp`pHde6WgHMl%B&^6ekfRKsnfbXP}*~n>uJnaLeg(w zZdwz{g0cg2)JjskZ@X++j|HW(<3_4rOl4B(tWh)%7nKr#EhDM?sF8v~jOFr^sbUdt zb{mLZF{M3)8t2{{$N|KnlyfGq^mSbaP_;~EPF)7RrvE#JbMz8cy(nAEU^ppU2Q)Na0 zP(3jF%#2wyE5qy*o1tVXWSIbE=y22cR~jt`R%Fw7HkX%yMIdH>g%1pbL#?2Zv*X1a z3=H$R46q`%Xbc#5*@loNkg;kIA64Swnu|p{ZP$eG<`4|xs3MKAf7(c8b6{uQm|}XA znw0wb-$2lgRVap)5ae~|MLf(1(bB;f(wz0+10r%qX2Qu0X_a)x_=6UOCh+za@X#{) z&WLDo$b^>~k#go86!lFIssw)xD3AgLXqF1{-<-6iB)JK?P>vXCDp#y%B~y6nfrCw> zl6hk!rAiH6gyxG4SOKZZJj8{afiaziA)MA&+d4Rr2N(ll247psjw&kp=rV)g(~Cwo z3M?w}&0=D@3^JY(g0jdZ`5TGB9Hi(hZ}yNmUdp8MhIx336#>MyGUD;Vj|Z}1!yypO>$P2Q4NUszO{Fk5ZIFTO)>Ia0v8v*A z`#_bXwgkHo7w~KX9xhEy?RNsAGHHt^dNp7dPji>+e7VRiHNv9a`s zX>6x?J%8%}R~~?I(gDy1dXB*1sl2x+mVgjW_ThkSB|JM)GIk>1uK;*%Svo_i`hmp; zW!g{$ih(uh$qFNzU|20fX$Uq!8Hz6z@S2D6!g^4T)_OuFz=X-PpLW)*Q?xJGmNN>a zaaMY0zLaT|^@_&+^!P*ue~XTX8jxZLQ|S<@u4hyRM!uI-3h6pg8VQCRw4t> zCj5-36^x_U~qRK@3aME7MT>>f)OwA+QCzF5W1AT~{g= zb6Ht{nFSB0JUXqHgySF(lj0;tkiNdL3&a{3^Kk*HT&3bGCbU{m4 zr@*w9fa3$XkyOUi{CXUbxQZZQ^qtY6ZMmZK=>7pWL9&%2o`5GnQ4FiOqxi(l z{P;iKV9=jUESBS~;8j9l4x*|`Zs^URfC9=ifIg9_0XfMKlfKH0$TkmVOuB9O$6_jv zv}7V(Fj7-fne<4C634t*W+*C7gX1wWRt=6ROfhx9G|aIvb3~Pz`~>Kh29qwEu@g}# zUt~E)T!Y^^jM#OgScZ!|v-AM|ss1Oz!iMdmMJ+09v7&hub)tmj$V8+^7AGl2t%G@U z%tW$0Viq)6npHM73%aO3hYbIgLAKFDG;Rx=aoh6j2e^d+Y8XZ6dsb&>`3`$@is$qR^ZgSGv8Lco>v6Sqhb)w5tg-Sa^ zx6!u4K0CmZ-r7O?ZM`JBVW!~!QI8-afO$$reO2UX0RogtTS=sjy}#ntAY*D1X`{8B zQejaYmfw-S8+P9gUt9y*+-HuZN*QKrtc+G;_F^zwsj(7eDxRW3PI_3{aOR10Y_1J! z??YJz7MyXfv7aenDxX$CYXzj2!fVq(xmhb|?+80SXC&Yj*jx{MLSOn|deme!LDvFS z6$pgSKnP-OtjZ)gK(c?vRiwNh?JJR*I$5-Pb>FzK*@ zOlmlZ;1n_(81?H%(=1?D0n#ZhkS?EmV%AP2Q*ou97}sw!vu0jx$5mKc3j!U*Z03Im zN?k1a(*^hjnZ#5W+*y_+sTk0op2s$gFrwuKT$L5|Ly#wc0F}W&Az&B&3?Vk`0r9us z|AxgT6nTS;i%NHFZFS}Hc&qB6@-YN7y9Ni>5B2s8udjl}+sn{!fC@VvBdz!;!yBpt zYhtuUlr4$8L%;IrnLr!a(&T2)t^LsXMvS3gF&|E8l zE3?vajjpaBG00Za`NL3GmGm)Mrw!qjB-NJsKP7+X4iS5Bh$fXtZ#Li?v=-czo5COU zf8BuM-@A~;S-zdpib`i~&zc58{7KZljlu*n|B+G=RoPs23@Jbndu7(1MY=G-fFI@K z5z`!%MW+gcSssT>R2W&@5lFSw*UqCeoPl8JM)Wk6Zs&)@BP9)5~-)618CGTk}4o()GAOx3RX&Y=Ee&wlMScdY}v^w3uEEYZ<{IfZXnWN!>Q)^*@nb)QYG2t z9=rf%)2%Xdalys`_K?-aRt@qgK#^$yQ`Q*-u)~Nvs|K*$;!(h1ryZRXcU;x>j53Fw zz*q|anuaG?d3tvVMYO60a=sL`0#K#{At_XdH-=B7@hBt0WDXmi2vf4fYDB2sxN2)JyCwRgr z$Mv`2;o@{vR<6XPPN5tNu?nz~wT$4{p~VFr#LtXzRSxeOv^H4*@5!J=vB0!UM*3B> zrCm!H$XSw5cLog--Z3%-iia~)qUZ4~n#?66z(LEURLgz4%b->!g|dOJhiH*A?8;*Q z_?XK-AK8p6Cu}q!k(F;`flqdDNj4};z-AWedC>3O%(Wnzx$dY~q@gGI_Mc=~&lSzZ#>7=qB7Ezc9snDA55w&i7 z=8sDm7^rP>dl8f^*GH`->Mml&{H|s5(b0t_-O*|6>_PzwZj|bD)~J2Wbg`Q2nhVxW zOHz_~B@mNOnlD#X>UZXHnfL{KWpZSCJVfF+gZ~p^LAEs+8)`! zw|^R4e83Nu0iKU#V7+sZt)qe%m!Qhg5)$`>Of)$#`!bB0E+|88woc*d-ffge3K z_f{xXD)ZsbjDcuq7`jky_>O;Pw5^{mv%t{T$Y4Fr*&)wN%YmI<6w&8VMFq}Ief5`0 zT4a4gh1X8Sk6a zs0IPcioMUdOKS{Fbpsd`SV?f--|Qg1|w z1HdjR^=WNjeR7+5sLH603aY!+S!`TW+^s}AX!1&6wgrOORtZdn{9iSlRvNTgD;kj8 zdall<21QS0xmEba?G?sSZrszMrZ5U}9~}0xpjaa#nxF-%Ha3b6{GqeRhQ5;8%$LQA zpmC~K%o+y)EJMhF)9S#%{;=$&tF-u2yh7uJ$$F0iw^<2{4ODu*AS|P{BsnANAV!sN z=&;}R&h3nD#AticN>FB0{|Z8O9yD8>9b&;p-?Ea0bq5KQk=Q|BY5wjqFlBtH3N~S# z9ytc1W*|h+fsR@SqWK z&G}6`^lTW$ehM3~a+OHB4VuYx*sho{Mbt%}RM1yq@8_tDM)mA4{bELQR10}zXLH_s zH_uSHx++&~u%pJxR}kuz3M%{wS{0N1Y4|JqfUlcThkMbdBeM{ecVv~GyMfY9a}Sv| zMfE+?+4~Idnn+lm$nW_cYt@2izfJ8DAkxW3N-flC1SZU`?Cxu=4Ua zN`s&D^s3QnKiZQ@ONSMcwV)j=1<9oab<9?(DlsEQlp4Erp=#wJ{~Mm1}Blw33iuoaVz|60h}ucYQE* zqslZCR84@|}CM#fKWeIHDl$3{JD$7r&m5i2G zo>aNV&BkXj^@Qnjt2huBhIaN*^{A{~P5H zO=RZctkq(1CaOSmg?VW}SQtZb#*w^+W!+~YJ+yY!d>}ex{}7uA)XoqW&A`Idx!x9nL%+3Ld=}?6w>KRdc6aTcc&9MYJrVv!J$hnNnVL+^KvhOECW>51a&ou;FcEaG>Y$iWeAjhu$jIR zJG8biAB;}v;aT;dy{3mG)~w~=HwW(+!$3odLg1PP9WRrgI`%7gA&t?}UA54_^69aNK_ULUcq&v2noHe&@ z!nO*UEyvP%l*e!eK}K3W0=CIrB~G9^g`_AuKtcoNn2b4n<62Nnl@nr8Zoaq^$Ei7p zJyIjqrk!u>EQ}@9*zu$kShE*fQ+c>+X@PtL*-Yr&Md0?DJb(_6MU4%OTXFXeLn?DL zn6%Zcx^M0_En9YE%pp_*Gv&$x)?$SK_8y@tno*oxaSv&Dtrd6Kxy_{t$h>fYg?3kT zqT5O4;&i1IviQkjy*nbz)}P?ly)8Ok#+EHXJsc9?P|F~HI(fp`e@uCts6TX zsKXRRuW63sUKk#|LXV4T&Gf;D0me~;-ln$b`k~Zlx}>%`d;=;JuiWMp--s3`equ%m z)9;8uc!;VWXk+@pN^Yc4PZ_tmaR7xvoor@Q!2h9AkZ>M*j!zLoI+L9+L^JL+>)2e% zqj5D@f!GwL3?&^FrAkX`hIx)B*e$SSb_RypZGZ65Y!>VcO&3ESuUlyt#&tqG$zN%5 z?y}L;Dv@G!_8|V2t3qsNYQM23J!+k`^dZ1l(V?tE!w`3%1NqgdzwhOQGrn2wU?0P& zF02Mhf@V}LPm(!+-{t{q^g-~A;fWLuga+bkpOmp>OJ{9(C-#$qiJJg!v?|=RDsz3@ zf(^D4ol=rH4>_QASNJpik!xsLc3Y=b3>US8NG)O6w>-^=WdBU0QN$2ng*xu&caI!P$-W8XaIY3jtl7V|YuTF9_pddU zSa%D;8BAK0*%degOc+~11^QPeGfe1L<8uolpbf|i3{RJk2Q=87fUO;blaq7}EHh5W zt&_{iaBZejteNb9l;NRo7H9dbfXq0xu-XRd0k_x!w*_G6xfqA3IJp|wb_v$%Sg#1% zMU}G6!&}v05>?elQvuZkcKVngk-_kn&KhyaX(}(xyhf(Dv^$L1_3$+UW13Pie%ZUO zVRnN;zKhzMhh7V-7;$wZ%?>zS6W(N-aEgnx-rD5HG{D-sJSNo-ZZpAL4Rv*C5bf_@ zJvq6$Ahk^!(dKM0sM;@!=dNoGZ$)3Zbj;e28JQC8{qma>nM6veJM6)I7)59w=)?C-bsQ@m(-tv9%EqO}<3cwy{7uVB-eM~s z)p^gFE|;VVmG+r??BF>xX+^GDq%;(ad`VW+xk^9ugfvQiV^ohDmuxGfM(MH5EHp7y z5|oBTx}^BWu9Xg#{($8#cU!@`K89=dj*Kc9(SNuy->x=x3{xE0eieWe*rgFa)#9K3ce_ip4G?bPRbv1kIOHZUWH;N};g)oEO~|Y=!K^Yz%Cr z1$1N}l0A*}g8y+q@A@_U5Lfmg;XW1?bABhPf`v0zJ7mENf1x!^5aFjOVexAB4v)pv;0H z5)cRNmSmqff^Y*DMX1u7cOZ$X?ntq!mCn#`(vDm8C9w5CF~RAU)JE`f8}AIH=Xxv+ zf}(BEMdb}#)~1|30S|bohB0+NvC}y1Ow*X$P|9QqSeBXfPL@CwL{23G2RBBICi~HL zY}Nks>3BOBYL-kBhbmoxGNq5dWjE8*?D6nS;_vRt09?^{ga@SPVa&S7;^Idg>A zOXYpB9WU;b!m4UGUMWBW7LR<(z*R?W9>%SQ%-Ai9qxhNXyR+USyec>qomR|o#LH%TLtRXx`e{XA#+rAwCH1b zz$}gNDiI49udOu(2yDO!Kv*%tZo$_V*@!{1jXq$M(qAQBs!pIU7014O>|isYj~xzq z8j=Vum=*X;(tM1owxz3IOcYPb9a(@0Kv~HHYlGAW7Exu@&p{!U94_sLIlzvdSCrV6 zlf(ckIVvNpN~r?oQx=Gs8*^pdCN4<9B|}WR9^yPV2ooSzacIE~~702tD;h^t`Ami&WqF z2wbS#uh((@Ywq{f$B$O48e0~W+t2KYQ@%&tKTF^2mcSX0ay6`0Gs~aG2<2ra)(dqdGe_o0(TO5 zIa>i=M@Mlc(ss??)&EunaRaVXFUSKAvTe+&5$7d>=w zNc8ND#A-{lyN)cA>2Nk~!EiQLbRfJ}PZI~J8l)Dvg8d`S8g%q%S9T@siy;DR1H&|L zL4;+MN`;U)S``Gf53K^CBifIaZTh@vDGuX6n&eMHSk$NdR*2>JUWuh*70Nj3TO&5& zUEcnq?Bhnf2`zBwatZ_AJa?RoBo+7^WBJmhtCk?k+L%wV?z%Bo^hvD#eJ5)iP!ZWJ zzQ!v)`pfP`aO!1w`}{`v#tskU9n~NYd0rm! zzFetWzQ-A;H{Hu`kkApUG<9mo|iAG_VOj3moKUI@}-`a zFRk|SWuBKW^S;~y1*30eorF%=wU(jYQqm{Ln~@uH*Nh3L-xDeyNnrGdv@EI{lZL^) zvk^uff80JcV?A>Gaa=-&o7U(U*_O;hpgfDn!=FAE89_2o5F^gg>ed&0ISGS!2FUKs z4h(ylGL-H1Ixw0xBQWRzugWs9%z3+R!?I;wN`~;xSK6N_%atWc`%(T`9i8$ zu(V0cO}j=OAr5n9uiubM^3p9Y?(9O-iAh(>W-yLdKk;C_{9+0RR)ci3+==u;eYMa88C3AcOaA7VW~SRNp*9tmQBfQ)r!^vX@Y4!m}0Z%j%r60 zvia@}<=O_!%nhkV$}vzc8E>*$ZCi8wO1)V;*eAcv zWYqeyBA?kg1rxYmQlWYXR0vDiRm$(0!IlAhUk^9q(8Um#es>0dqYdJguS?B@1I9Vg zu8W!x0ED>%gTL|;tOKaX&2``6W+Bf^VrEs}lx>5K7&L56@{Tf`2=&tZzkeW2U(8!S zTBeU?8N}{4^4s7B-o}*-GQak|Fa@wEDc~=hHppv{gNmoz*kLB4VghE^h`}Ao$?KFU z1YJJsvRc||_j(3*`@ufcW+(3+q_mBPIoqADu2Bg(Pk_sP2c0nNJE243>3eQUT1knE zq}nuP4&vpnYPNM85x{Vreh|%$ODe1mg0lc(Y84kTJ=I?K-d6F4upOjk$;zXFT8Fws z)A||`eO)_o?n3zwDmim+#zt#^AWvQ}Lmd<6%9LoW*a-0+z~^VkJ?a#8ub05;a1;fe z9dZmK^lx)I9p6dCvivB%1&sFzKy8dQDFbDtv2(kYt=%{{V4Sh$^we53$)fLGeanN6 zozhGt7OEhVbRr(=r`zy=uS39hdnJAQ9D~4_mQWo&lSNPbY=3PNrGo!QRi&w;5LOCn zWnDs(o0D)z4VQDF=E1Mn;>utW^a$1`LkpZrVG8WC?KS7Dl)|?SrIXAtaT1PMe6Y>t z7ksjwrkzC4Qt!s$q&meAkZtqpY%Dh+NkFDEj8w-bBrD4x@vDrIJ@)Ceaz+I~(maPF zlMSrC8a+vMp>*bjrt5RDX6nX=b4(ZRUEJu^dPlx2p9 zpZS}fIiEO;jz=j_ycn~D#xKV7_=d$C_O?v*MK}7o_QDLYDCw7RodfwMy66JGh@#>)keLUjPezfTm$H>4!dCla_*v`|JdEW_lX96`an zipcfwYmRkjou{#_s6HSPTkC;LHZdMxZbDRPHWce9EaeFV=5!2DhdbK_d3?s6(@Tfd zo(UB(sgE^OI_0qoH_>pRw5T#Qz=f&5cet1nEOi&dQ&&!v}mW=h1jx$8pxN0xso z&bJ#Ov|g8EO^1e<0g;_aDaKLHX|>*(&fu~omhb5I_~oneqI}l$5DlvP#e9|^;an>r zzZKCDji~*7h+g*arbx;dML^v{$#0YLNSOnsW!Kbb3O8Kgy9L!3>UzQPdp^D37^Klj zu@%CNuUlQ!9yn&S zz0*OKRHSzf&I7iK!&t~TCeLb_fa|$wa_!w{msl%+TER%mOVyo_SxW}CAD%|}S7rlz ziBXd3<kOE=cDgNZSgo87>FPSkWf$adHq;Ib_3uSC(qr;lB}Q}EQ&FB{#7uIO NsmhgT(yFbg`Tr}6;mZI3 diff --git a/translations/focuswriter_fr.qm b/translations/focuswriter_fr.qm deleted file mode 100644 index 96f1669de9e205f0c870f2a946076650cf03382f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38440 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 WU4pDD;|~(BObD+-V_qD`bu$@T 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 diff --git a/translations/focuswriter_id.qm b/translations/focuswriter_id.qm deleted file mode 100644 index 8f839e95f289ffb0ac5c7402e8d73b5176011928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34506 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 diff --git a/translations/focuswriter_ja.qm b/translations/focuswriter_ja.qm deleted file mode 100644 index 9056e8b1d05e747dabbfa132504b19dcddda6898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30280 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 F{l9bzzsLXp diff --git a/translations/focuswriter_ko.qm b/translations/focuswriter_ko.qm deleted file mode 100644 index b0435e97a5b8544675fde3078cf29a1bd1492239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29454 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 diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm deleted file mode 100644 index 3a4f00eb123ae352ff8338b2c29a782845e81fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37733 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 Kys;=c?f(PoYg=gm diff --git a/translations/focuswriter_nl.qm b/translations/focuswriter_nl.qm deleted file mode 100644 index cb1c2a3313e0ac0c6bb23ae0dba0d7381faa835f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37145 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 G?*9Quei8Qo diff --git a/translations/focuswriter_pl.qm b/translations/focuswriter_pl.qm deleted file mode 100644 index a9cf4515b069848ab5a75bb2e1a33dfe9672bd9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37114 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 diff --git a/translations/focuswriter_pt.qm b/translations/focuswriter_pt.qm deleted file mode 100644 index 71b5586964f62e06b8062ee7fb5098bcab1b902d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36813 zcmchA3wT^rx%NsjGf5_sN!o@|YAKu24y7%<10|F~n)FKArb%xUC`^)_WMD2~F0?5i z3iupu;)TlrM8tDc;DE|62m&7AKv6*y6uf|f){2S;`-@`kHF)pr%f#H9o)qGo5ixfkKJVWxPCfJ$AsXKhYiEB{ zh;8%5`ni`1aq=IPTrv9>~XYohC1NYUOHK_o4f2-!Klku#3 ztETwq*MzvpsJZx#PhsyD)O_|cyM*}QKiAy<_xpqx`+m)fmw-;`lWSg`5f0EuY{j^Iaik{-owV`!H_GDYfC7J|@J1=GxZF2ZT8G_1Y;9fF85H zP}|oG{LV?#CZ9YX^L?_`90L6GGqrmU>=5FJOKY!v^c^9N?ykMzw$Fo~{-gG`_Vq%{ z1^eB&5BN6K{@d|4;CXKCS0DZtAqMx=K5!M@+x0^2BSTBD|KZw4uERRgm)E{<%6uV~ zY^nX>ajkPZwm?6Z_n%Y;6P71MgcI_YD03H|IUHgwGCkZk7YF+4Cz+-WuZsP1~ zg~)8Hn->GzhG}(6?|KdU(pq=IJ5K?xeRU^(=N0V7Wp%rVU+)!lSNsC|wf5z@8_qd^ z-(z(*uLZo*epGkY(U8HdFV@{FW9q>h^!)HX&A?U-zpx);H~>x<41*6yo#;L(zx+h_aFKZLxxc>^JOCJY6eJ(VXzDkHyp9}51cNg}1dFYZCFz*RhhCck__aHC( zL)RRSeOvXj&?m3DM~G8;Lf7p)N{Fs&Lf1DxB1Gxep_|ry9iQJA`oi%$g;;%W=nVY7O!ekJr!%?2SBO$j~p!C}bjuF&J3o{oL{ZRp##WdZ-q(6b}ZBO)7m z_5#Ss=Bq-_wLcE}-4c5KRnX&KegyX;bGWdQ%xa)1K^VCdu^P{H=apbb_rC+*Mh?Ay-ufBDQ z5Ib)UUvpehh{$i%vw1Xp&FUwiho-6LX_@dfYmbBeeLj5Cb88^qbHX=YdOvjZ+2Nb_ zJ%Qhc!nfYE9CBO}{>-J|k0q~%Z{LXZ&-tc$cHa=b{SS+U7`QI{r6=%y-#5bdF24@* zelL9QgP8Y{b>aJ;$%B8s7XI;u&w##9gaJS{Ja|bxD|gtZ%JhFWmuPJk1Tt8BlOaPk@mW`urHsEta}M?!U>u>og=ziWs^>;_``P9++d%g)dT(P|Vk)b;1 znUB{WIP!Op>pwO$+zEQ`UeGY@-Q9p6Ygqh8$ouK58cw_z__Z!=Saag%+!V_8enH@Zf|&^?|R@nrQut%z(+0n8oqV(li2^UhNt(1 zz;{nIyzncm^TcP=^ZcJS{OPbC2=RfA#@Z)9ufyMJ44?Ty=#w>#Z7csIMB9~(lmBA{ z^l7Hi_y_2+a#rIEK2QE*<4x=LfxixGyls0NY_ml@^T#&cReu0_>e0r3zv42`aY5rZ4%`Cy`fB6T zH(x8no+lcA|Gj^Lo&9;^yYqJmG4Zv=cdx~MPdX+Vy>Bn{!J|>*NsK%4-Dvv}ZLn*{ zL{A#J72_5~Prn5EuI;bU!DU$Y;SWX4XIJ69%cHkl4t!VqB6|P%fH%K4`t@tD?h|&Z zXU`eYC#T$qeg0eY=?@j42UbMCbA1^02hXo}V*PJM59~c#h*)d%)s>*bMZb@}L%-*g zDNSMwb|G^B&tF0v8F*q{*|YHc6`r@?`6`}2#`D*(?`=(WHx6LkTbmlL03OG+H$^Xf z9(Lr;rk3zg*!Q8PCF`NL>+Wpo{_K3<_wA-_*PRKzsB0RUjs05id{gRK*x3(%qG|Vu zABLRwsb|-pn)b9ozB?Xkx^PAbbQo*8_uhKw(<_^vnDzf8dqeoZ|82J!w?{E`m9 z8H>fQZiHWP+%55|ZyyBzZH|BRO5l6ur1(c41l>1W9>4L`kHF8&#_xI_a1Qxd{ENq* z2z_!y{J}5%27I|H{^-x!p}#*Ce_86C)8nuFW-91h7k~Aeu(yNR_&?4KLC>Gw5`6%A z!T9f%qkrB9eZHq<(fnKBA3xmE{ZD{*{Kr~0KX3@({IzBKi=e~Wt6R(?{u}!Hw3gJD zf%lx6mcmVU!G3&4JqI?lTzV7ev-FvkM~>Z#efmtxQ=OCGH<~SfnE`rCe!k@|S6vIe zdTGnsv4=p9qf$a#dO0{iOctw!DF(!dNQ%5L#B4E3EE2~wP)T9OM6@%VE11UYS&NQ= zfQWEM+RPVgIC7%cAW|ZW|1A78eH!AVzPL7#*iPTKdh2<2mATFn9Eh>kFB>}`# zpE-bStwWw;(quMAPv*_{{k#2NfZ(lP$+v*Lt>(a z#O_>vurdm5l~z4D=nvWy&Er|13#1HFE@_GbzwA%i3{9M&I`$#4P|R{jU%PM?w>f~& zQziWj(2=Z}1P_gfljM#sc1AbPT4W@$gUQ0kNyei$LdsiVK}!Ny8uo&=}4o)0|{t+3t2H`^~i6 z+-XwF3;`n5AJt}Bydf8fO>veP>obc+cQQL%N)Ag!*xHpED5i4RWPVKJl<5}Z&4y~B zf}*M##ZOtugsvuzgZXCnn#sXqH)YdfQeQN59kSG7LpeLn}HD!%PbhXQ~0poG+=p(^SKY@__cz436Ha8 zft5?~hRr3g6)5Zl$NM`-em^^0g$9N`GN-3 zl)RA>r#PTv3be60l{QcD;s^79DL2 z<#QQhFjY7&0H39zL)&&zjIc?s3>HWF1uWNDY*Vk9O=e8FSpQn5h&3A15H_*RX!{WB z15?P+Mn}O9;Py%Y0E(Qt2mcbi0(Kz-fui*%&(e;U`v?2w2*vT_bnajd3_=w~58^kH z%je_sAm5_W`|hr}8&`5&ehjRH$vRK5M^9}eV z@^kmIfbD5@@S&VT#vIaz`*QjGn4e}Vp-h!Ta)l|ZXcSKxfHxolCZLdBC1}h7R-VHD zCCS5vxLY#VBf^#3!?tFV{otZv&d6P0=6B~)Ma5D961#C6^XeML&uVuAGiotI=r~Mv zae(b3vyrC*5LiAA1au`v1pG^GbEl)isx;Zu%39djp(afQ`}gVpUDF)Vl{3b2C1ZCI zE&;YEFLjz>%f95M7TbDkPZkG8EC+fS#0nlI*g@&Y99Vz?p~naTQm-kwglB3=s$AX} zkb%U(F_?jfq+EfPn;&Q$hm0|5QlnGa4XLpM*EBN#BAH!9F0`|Lm|bStESi;J#>G0= z5$ZxxON(RH4QF$CY3>7Yd0%!Y5YjHON$!l7R!U540r#yFV<_}W#2CQP6Xa*MN0^j~ z&lU8!TWo^?2V^&t*q|bf(LZJ+vpH;N-WX-blFUfSdr!!^hRa4+*8|GHj00VVA&zyB zmDY{uDz9SjJ)t`uMVW+}q(5#eE6U6HQeo1~bm@1ft2J_?X4XjN2S!pCn37geh~OUj zbe8l@MEIe6^8r9A=d5sIbxH-uQU0KLkdra05AS=_wnLPLM6U_UGa$LrJDA=Sx86Tt zsM35h%XuH%qrCmMVKxYcaj6^aHYtfP29hcr;6>ngcp20%TrHhO*R8Z!g1#`l13G(r zi!P>1-w8b+p2C^eU%+s95fPSQvoM;lH#2gzmsG`_$f|dG`;ja4=ZR|{ZI=b z1L0~aTPP;81I$`TL*iYUQDLTpbSTPntqnDSIDmH03u<}=P)aAXJ5+DB0qsr|N7{oR zO$MJ+MCq@|pj@((>oYa=nUqXpFtp70Nd)0CpspxHDl)MnJ15w5sM)%GBnP|7#7e=)A=(T=X{Hq>(t%`T zz<<4=kE;b58R*ekOJQhUEuGyB$t*%+mAPvl4>(Lg|5VYPzBw&~JIN$Y(pMTC&E;Xc zt4=o^)^o_hmpW$?fKtyGVh8e?-3}>QHVqA>225iURrih!-K0bS_A?v+UBHM+kRcLj zZD3t88gW2QAS~PWGPWQXr~tGL8_4bBruo4{dt@+CWxOGJF_xjIGa5gwmg+$UHx5dz zy(zFhK^baiDqz%(6vIZjuo1aL3KKVE7@sj@P{BozzIO8%lV@+t8HLg?GeA_1N@>e{ zM$_8V@JJf}7ae=pA%%4S>!AMEJ*~QqLFu0P1}zoafDTQwVn;iIBa<>GtP)@QoxjdU z$yPHbog?PJc}Cx;nNBknn=j3YZ<5KdfutcWc{SC)#!TvjG) zroigC{sTQx1uNt1NmR0&9LL@8K}d+@$QU_kC+viBml*JJFPI2QiWLsL3CsJ&3Pm&H zq@-35Y^*yskW8DJH_?C{&SAWpRtas)6{YXsfBAN>sB$KUFc}>mxhXvxeW)61~nUnb1w0(XnU#zuZk&-;*}!Ccq{alX(P1 zBdLOs934%k29o4M#@{kNQvM>0oRPM2cMPD4$@5IZ92znQR7%QEic?{#=xsAna<~;J zk9QHSF`L#04|||khMkRzv@1cAA3UaaR&Qq5g$+%#C!ywwKquuP6PgCiX>!AZuN z(33ZZOoZhFWD|e( zf`JT55sa8d@_7LHT(jDYYds-)5{sc$lPcYs!L~lcz_#sA%Aeu#kdK^^FmSEh5&sPG!ONJ!d1DPO2cQyQ7Ku^!TlnnOWW zHN7NwfXc1h>ux~~AfFrn;fw*q0MepX;D^apmbDC!aHX%w0acK~RsqbZJ}aXFLD#}0 zrG??{C*>+s-jR4qZgA)`Rau;ZWpS7%Wa_3kHY$~Fh56%HhT3!1tK5`GeP=F{u_~z* zhAx*w>6|ErwUs56Eej>eNoE*_Di1}EWVsXUHCS=Da0CIPf_)+b^@;m!; zcvtFz)S$`yhb|e+gA`JGs_YPB4TX@BY?q1+3Zx2dDl8|4(e%*ElK_#fTnX9YDznBA zX_Elu2Bm)0V2Ua6Dg&cXhg1hh964*RUt?y?yei^Vz;mKlOLAe8|AfKR%bEW}%8eWvOEoj=M0U*)EQFS!sLRkPXtFz?B4Je)%T~^Ma!kVL25(L`88CWj| zZk5S`3d3T0sOAiWGoP&{hv$O8bYn?K=4}ZBI;pQH6v9R zp)-zj^MGj%%H&gp#jk{Hq!FD_HxdcO8MY&#P_ZH|Am?iJ{TM?O;WRlUYwJNMXDD;m zksi*W)HRZ+B2+U1-Ir0Md;GAY686D-mSBfSd9H*?ZfCaC#kr*iS|2(2(UEaDL_Kmp z$^dEH-Q<9(%HXS|*{~h-{gUov4$_>~ldTeDANmtEgHe=Hl1-d#Fy#|-v zNbbFun(w(a_@mW?s=Y^6t8B$zBo0(6d(C{Vnnr2W!me_cJE98wRTdJ3`eTr&Yn4bJ zBE71f;rt321tnE(Fl;T}q3#4Le=sh&i9u1)(UrQ~0nyNBY2hl1it8ga)zfH?t>ytt zgRD>{RJ5VO=GUaofH85u)uy9EoJ@ zo4={xnZ0XTp+{4U&3zeWlFlz7JyumUE=CSGWhnur5X(a?rcjwZQ*E?V4mt@kITTsp zq-2ZLNHCrXK?VIW-xtc-dWxFNmoRmx8<$B^l;4pst?r{wfhOTz(`|S|{-hEi?lPl& zMdTll5gw?vNCpXnL!05c>*2oQSk+CQXXoHSSvwkMe4^B_`q%Hgx5<2XM;gtF1qM>m zm#-oZK_LOdNZEz7Q+Fjaba8n?6J&5wa9j185vX&#emgdg<+2* zO(jya$~m@XQKvpA83tuv0_~7n4R>q0$~ELV7)>Kq!vCt4K*8|oG`yqx2>WH~B(0_E z7qQ@PmDEwYL-!!-!0;T4?6gW6rGo5I8gyI;na-~u2>lZEU^G-G_zWO)F02ie!yceZ zW;CULtGs&?f29SYMC;}FH^i}ISFfmasFB^E&Cw68~H%0YZa=CPWvRcxy9j3Sh*_F!40h<9S)Gn(u zr<#o6zyPN6Cb}kUK}t(Disg+0QzO+x{r^`BMg>-QukizIg(qrvM80i1lR@K;A7)mF zA84d$Cb+Sh=9JJ67D1@evo>DSAQ3{SYQRR2CSVUn8a$wKR5QTdW0Lt*S&chSE6yZz zUYsW=C`!gv5zcLgrDdHVEwx?Qw6)p{O+1d-E*lE_$Iw*>?4WmGYnepWdnnn)T8)QJ z1tAYe#r7H|RS~Qg9TrKqAd9GEw!E_JRs|132@Kk#;MA6Tx2%?3v{Ick_7;bRX_`K0T^2}-@@JLnG~f$4*1(yqMV_|l z8%Yfn=h}&iM(MkDLrF=%bH)LffgzZ~0o$yBRcQ_?b|>VG#qpT7s{LztIl?!{~&WY zE10k)H;k~tkQ-=F3<8!CgAYd;mZb=1XuVa4;DGu*)gLBhh^>Drkxd0#-jfhbs7@KH z86j?s)7xiSF`RXK#xCW9>k}Kz-Bm_TsUW-?9GqjCsBR$QK?qa=voR3N#!6tS zZl!_kP+k-{`)~*Mk|hzQh?NcCZ{_8ADp*4^I#bjXMnTr!p;HTLgQT|=v}guhs@S38 z8COd+c9m3XflQJFjh*ftTaK_pwh0a-)T3oTVI>mGhWpB6F_d8IL?&RWSk@**dF8!D zv5*Z|+R`9gRZob1N~R7>RSA#D4kwmvfwQ6}jJ2n%1Y?|;xFBR1hq<+Gs%0uOwraze zI!GXe#S;US=3iJ12*4@Uv8f6Ma{$M!b1w(kEb7OE#h>My(%6?!`&@B5rb`0TH3&dN zbL^Te91N~hMutK38c*gRXdLP6wlI0*%^^o)A8JBuF3VLS^)?xGS^I+((G8-}=ZTyW za(T9UWXD}J<@@oTJtKEm4-!>e@48E}Cp>SS&$D5!OiP*=>;bZ3F1VJZf^waLR?Cu= zN-^oqNVpSSMKW$;s!G-^Sh18EeZD7qNynG!nGS>OUcm3vSY8u>6fKjZNJ(n8!VkVY z{pQxUob;RAaQ`?%dP&O1R8b4jVTIdj;BvOE$!eL}o=iyt7nS+0%}jU61yV+o+pLGW zDn3wJhyQYk1&>XdrrLFpG?Ljf)qq6@zhD_E?^JD&l@3tKO%Uk25K36RfH9eok_jox z=cQdNQwPrK>Jw=6zuWirNVu1$$_vg^9S5H=K+YdsaqxQr21>jh(3oWX_@omPu0<^h$q)3bqAbBnX4 zxCG?1O$HNn*?XVB!#Hhn8uE?ZE@Lr_pN2c6dskj^v>UPft)XrN#zY|d_o!O=uQzhj ziVB@bGokX!9t)KMHIhXfTpdnjvqaH~#-#V)$8RcP>IAGc6`zc7Fqe;0)+OX|qRO1I z*a>k}+~dYMY6Y&q?8huzm&*_n8Pr1Uxml~ zfE=RI&~guu`OA#**RxO66u5$Kodku|s-IHYOt903!*}leS?|1 zQ#RU)^feidbo8STE9KTVj^_u|I41+4k6ei}p}T`e&bM+8>?u%fm(+tiZm)Er`q$3e zxt6VMWxAAC=Ll9N2hJPLGt0}}_TknF?W}lAWx8A#4V|(9R-L`{jcbrvJ+H3=cgofyl7ueGB2-k%KLh)#x`5KywEtLtXpEEBC5nG5xDStH})%1p+SgDSNyGpcfR?y->uoUU;XjrjEt4?3~+ znNbyE4^vxY!zL25I2OFZIMj*T!sL=B%oe8LAq%xFb#vLuGvU8Pg~#BW4kl-dCOAz; zRd<+a0&bMuTH|8XSXL4B(SHgCa*vghtUNxMv3D?t;no`-Bt!3wY9#f+h$6sa4MX>- z>U)!esgf$D_y$x-Zn+ILzEN=~F$yHb5~AuL81AJ?2-HK}$emZz)}T9mMb=-b+bRFb z5#nBO8ftfS36gY_oCy!_r8@VjcNDhrXtoU&rdH@P)t13?sJb3N`wPw;1sjKPv~&2V zq%;moDpotYgLY#du0-Mu2f>rgfk{?MLMdHab5kq!gNls7R6m5vT+uDbeq(!T&^l}C zLni80+8s1Ptf2?)*0gH7<&1BUHTZ*=)wR$K+*;;ksKC`pDb;N+=`TOC+waC>(m&vt z*64y*7=0s29Fz@QO&esMyv07a0+8T_xYjqk1@)=mjUdsK@pK6tX302Mx6E^V6y_Jo zwTtJtji%ySw^=7`3>@r4nk5)^tA{6Cgd$aTore*0spAH)9e`CmaFMf<6Sm|0KKhyt zvX^nO-W{whp5&2ey0d3MS$pM(vTRByBtl(6Sp3^rU|*~yEe7D)Kr+6>b$gLc?YPBp80 zk+A?bb1vp~YxB*vaMoR5=1qJvIrvWibb7{xb{nt<q^Cd#T8r~=B&OH(&UOX92)m%=9V(gNgiWIflJiti%3=b_}B0QFBErQ!M$WJ(=sq*ioIK(lQE$Wl`KYm?hyxI)#{ z#E$yb-fhJ}vbErY4E}4!0$oXLSi818lW8wVS=2`GV2(Ut&&_a_7T$oKdTG?PSI4Pd zv=K8vw{xL7RU(*%kZuSoX{37j={npwQiPm>`W}L^w8w0q@)&F&RE_}RVBEmr6iLtM zDCi;I)K|y%ysNA3@o9@1CyirLKj88_v`LQ1{NPfMnkLO|F%9Ml6%Q*n2O*EMzzK+@ zi{y`jkuS-dK3D3Wg?GDB#duX%J#Nghb(b2Y`$rSedR2*a8t3Y~;~%>kX)tPEZW5*2 z-XaEXb}Y{X1@5KI%0yy^9c|Dxy%#BKU)!&{0;6Vo? z$qoA@f-ZV333ap@`HkT`It{!t&jGAn@RePCw|R@MwVN<3*CefpE^`2m3NF}C2|_PW zu3pQnYRj=bVtqMmhFT5OwQE$h5xhpo3xA430ClR0B2nH4)gbRrv&x0~WYZ*Sl#v6F z36&aA2TAlzZAz>zrPBp0(#(1%XLXwL*bl1l?h?;gn#5W(bz3<~ePWupgjCjgVkC^$ z)AC%W{w}#~9k^^ifR{(qs7Du*I40>uDvA-bGkVufh`nIm7r8ZjQQdgz`o3r!<6(K} z`0A)|wOv?gL83zYtn18B0)e%63ht-dEaKf4UUU<%FPx_b(1R0%(S(yB^v)K;K#Go3 zj1J#KFaQl8-j})iTn)>-Y@4!gH!erAC7~T448WD_r{W%!LTA3N96}=?q_V|;vD~OW ztW&Q8h7+4hDp2%No|36-yRzuIX6Q8sWtWXUhBumTfc0m#my%2`h$UxwMdcVq6RLA5 z07Vk14?w(q9_0X<06-p42!KHTExYm8*_Utv$LD<8G8ON053_P(cmgZHeM!IpVXWa( zVZ?V6MliE!=a#8P%khmRWPKO_0uZKDd{=5bikn*qjVAg^{ZIp_FM3&tT)qWlRpC|n zT+xII%K~O1?`#3Gzr(&(sB~a3^p0C1)Hj&dup}_t>+E`aZh(PwWh!7m(^UC{NF>1{ zB0f4(L=|7S1sazjqX~Ip$SxA;NRzr9psu&YCCni{9zNGe;TSm3uMQcorQ2J!RvwRG z)t!{*JAep4*-(`YrSzyI2jgxgi&Pq1nHsli>?nDGDEh;)=5CxmD57IWT@R(Y?FV3l zWsiZrs`q~byAI_XTVPyXc6om1bZRhmFV@!-(W~ry{qOzVVp+j*i9nj*o?68R9P$hpmyAPzosH zYw%`KW6zm%p!2Mq83~H>SZz%{$$apdT+zq5`Zv)mcX&yC6U}lj6X`Fz z7x1Z<<*j@A0`-^Idmyi`2KhA4%coU)+3n_6XvjYPN@#5MK;B#pa-ZkrUhm75P6l*1 z1N8$2^4mRh#3~Kn7C3yHcXpk;yPP442)nAie75K1v#Y&)q37ibtG#@Y=jDs4y?n9f z<%_*9tBb%?rUrh1^LnVWl<=|fE_nI}AP>rpGD}a};@gjq>}W9AXw8GUJpIW7xjxewL3D_z9qj8?6?_rRROwyWMsEm8 zKy@eS;Yai81PujR)a-Jr&Px&4nnhxfJIm@ti@fv<;hhtlH)>a(;C*4H6=}PHraI=p zW={5^(cozQA}^vg5O=BKuZ~R+pafK?1R&KNf-(n_xCDeSBymA1SMs@Htiz|8m)e1mwJMNRmHF7H=|YaOPVBvV2_0T7Xf3XI4SX? z3#$AmdhYy=1sXKff5DO=O_$;WSEv%&jPfRaN>pK_RFs!i;|mtdBrY2Bi53;8CpUrV z5}Fu9tptUU@JU0Z!Hb>EbqC9uiO%4a1}_O1yu`~Dl?J;93Ei2Oj(6~J0W%*r-oeKQ z3_jjFcpjY51UA&(KqVWLi>mpvb%|`%{Milwb-QC-C2SYt$TR$u|5B(mR}-Hond0Bn zTS4w)Teq1QlE+S@1Bn_hZte80ZYi8d`!FqI5eC?HmRaSR`5QH(y?%V^kZmH5O3E+0 z8MMB*%BRK{A*g^%$%3tzn0WN0XdJMu-T1yHmK@Q~5tt4*)$&eh*9g$XjU-ce6TI@M z)$gk9fg-7|Anr`%++UzG{Je2Y#OOw52ps$!phdPL_(;-*{7ph~k7{rz|Ek5t4GG?7 zhx54Jz53rd4yZ5hy&mk-$F|9+mh6|dR)ZdBhXjqZ4GA`MdRM`EmV3&KeC0cmp+Vs- z?Lq0`Hpy1hf{Y@_xrh{;aq_BdGSDoa{#%Ls2ERg%tfQJ5Y$I8god!VeX;4zaEwUW4 z$@!url~mwaeOY7C3B}Gtx6Kkgs1jM!uw8UjS(!1Dms->P8B-_&KM41FxI%jn9L952 z0u|FI07K;zhVZHFVR);F6J>tYKn6!$vTA*Oj=r{Y;Bt^gq$HEA{rI2mf_?iN9Vt>< zIT5sv_GRG9rRExu`!FO;3v|=L_&{XDmky;@jnTdjv$wSe`VH zMjJYL)}j?_db*7z%NHb9poJObB=yZCI;Jx`l1#_S*1Ale>REMsSqHu`F5#>AY_v*P zJR!`mUzq~xXj|zheT`xhR3>l8uxAKzu3bJl5(flvbsMra{PH%g3~EF7wtYOc1Ga;w z(x{s0;!&F_J3(h(rV-?)KI?!_%Wa3pwm3Z5)|*N&qQ$;#4eK^m+9jE~mbD%KMzBRyM(N?xAR7+wl1tWN`pHR+# zb2%9FlPaH3-%~r4H1NEuF0sMPmfSnC^cAo00jIbnpzgRoR1fyv(G#hhi*J_qTgZgG zb!U@4%VI$6kSdmKv2>+aI;nc4owEe%LOax+c%z+{&b@%kD^=OzO2}S*RHRYi&8U

7=i6a2&WOTSafr zJ1ZKBQ@+$46v~>c;}D&HdbHEwRar&Wu1E|6wP>NnAf|FIB=1_NjUnZkj0WotctT;;N&SO#lhcHO1G&zNL0!? z4>oyU7u9L{2v=+|O-bv>F9Vie#=zVqJV|wPoloN3Q(4+~FFS10V1M7IcLP;Lj4Fqw z-@UaZQH2Lvw~h`baW5LaX;Xduvll3H5d4-5FHmJ~$O+1Rm-p~Yu)!*8Yu!1lYu$~A z;p|G}dv(>jt2pcPwpMi1yASHA_gF}2_wNHqCBynDfZzyX6N;!~5Dcm)_6+MW#8RMD zFjDdgf5+9-8&w;AS>{yOZo&s z(OXnC=>`REBiMSbKG=~|X4p0+G|4O_(w*iQ{*~U1`nxip%1}~qP}o%L!na-Hxajm8 m&ivZ$r2gIAMrufYlgVH%do&W2^vOx0GSRsLZEv+THU9&JSN%5t diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm deleted file mode 100644 index 5f217e2d73340489b1227137582d737dfd53d871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37987 zcmchA3wT^rx%NsjGntu8CTR(!)>1ZwOlw<0ZR;8J-beb<_`$b&@M#%&xHv5 zUm^0lh1mFyLd-f_Ho?&?y{y>o+9zqW&=6OC1*V_kLf9fo2i-{8NAv5rGE+7;}Sq?s-!Le$p*O%flkL z5Pv@>E`qz(3(@{3JU=VM%!@?uu2+QUohKH2>{KBxnkyE3ZUWDDiv@&p@iwvGCs@bD zm*Yt|`1h|DW8Ph2;dOTlF?fwwcs<@5yhtp(`B5Q;R*Hp>;P=BBarOz%2@&~$*fjqJ zA@(c~TNYj=#96P1b9P{DCwxbo^UaHdSa`PBnm#1NmT98*L;os7`BNhK$O0kG-y{03 zzE+407prGaz1VdH{@wGuIQI?UyKRrylleH{e^fn>yH!0qO6s}xDY56f!29&`#QF7y zLEBDoegno|uv%OY!gI&v>UqJSxZsWjpobwYYF-QcKPLtQ%Z13CCocPGgAlF9#2uk} z>}8|4<1gERe@uLD)o+DZaD{m6v-o>5BA)odi$ct;7f-ieBgCTf#dD9nE=2LC;@Gkl zA;MRRUtjnUAr2<%>aKgI5bsRZMSlmLxa{7#IZt5kcm1la2LQukurKMRp~qwc?w7&r6!`ryqU6k^HY`quXh z3bFXs`k7w`edaw;pKJzxgMX+`J$fnTd#FA=4EUEGSAXc}xk8+ruD|g+Zwm3Y1N9%h z{j);sTvdPj>McT?_JjJ*f9w$<_P$#G#T6d~-hK7=-VYugy}$nJ*W$f_yXqepUM58P z)%pi+!aBwuuYc;S4k1=tTK}&PVgB;&`e%;L72=ZZ_0P>q331+n`rp3}-iGh~>@R>nui^1O$ASM>8~){AUKJvEX2X#W-!8=Z1r5)~vCb3!(C}&z z{BYqv1fuu-H}>aXpzUJdf8~1v>p#^h#F>48Jy*90vGQmjTmBIE>`Q@(?6pE{+8H=> z&t4&By*F^>Quz#E0ANW7l-X+Akroc^mPJzx?75GT=1E7l$ zxOww~_^A#b)XYhOt|GpMa@Z-L3;Q0og&j;@O zV4V=zX?WJ-xfV~XZ)`rE;McL8c!F=nuEKK>o_FJU8lL|VxNH7nkmH?!yB2}&Z@*4G zlMk!so~r|Q-FYG8VO!wv{R2W=@!7!F?`wx#oUNXlKOMNQZmST>PYm4m&JiKDo)CEG z6LYX{zYF~E_8jQHBJjj$H}D=0Jh310va>$$lhqG_ezyjmd;#=WcWvO!UGIfn4F~>m z&RLk}Pr@JU+uVichlBB7+ztNk2zI}Qb#^6! zJHB(C5T~>Uuln+h(6g@xue+@u{Cjoq`ZG#Ggnp-<&1VO%-|#5pyh}Z|C4$#)Is@-N z6ukK-8=<$31wVe(VIj761V8@B!;t&-;B7arfjsAfpS%kEab__1scl&QX*a0n_Tk{C ze!o^*tFn;mGrluRB6BcY;p>PljfR4k6a$L#N+{zvmBzmR^l@i8Y~>uWf@qc{a4V z;T7!5XG5Ex0o>qwLR((P^Za{5=f46uU-i4t-W_;<^G`$BwKYta^#p@dz7C`P!YHghU$7#@`O^v4?;$bYZ#&Jcb->%PXjz7M%P`;Ep2h8u(^-P?Hd14cibJm=FM>-j@uf(?ib*j_XWZqxnd6Z;eW!nv@93m z-Mdnx?#TmA)fe>~F$;!tx&a+QYDKXGg9+^kb~ID{^he zG9i}!G;;HnN5Fp#k=u92AunC(x&PG29gRmp_iW@_AGjKH?T>u>=q*C5eP86UkKZW7 z<*!G6^W*o!K0g}yOUGUzrr#U+%Z=Fo<08@M*A9Vh2cyQL7+xPbdi#5TZ|AMi!_%ZZp5WucK0L9m!e{V&9?z%od;#{q70+Mdxv{C?V}n??XbOJ-c&uF36us(6_)k|g zwFFOre=@CU*%s*ahR-$ie7XbpJ>0Z))z`3Ji<)-bbOGLbwrO}i_HF6qO_?WPm*4wn z(}7j*23{wr=f;0*I@kt1&^^&~+1xVdac|Q-_cTK9?r(Z{_J?8LE^B)1&gY=lzNMb6 zUscbyty0f-yk9+ceOW!vzgj)_ZfW}IG4Rcd4>uj_e47yS4>TPc-wFR>b1ZNR=)3>s zShza^JiiocJ09yhf4+KNaDA+8E&hGsNX&Qy^A0>6Tk+sw_!C#hR=$3_5b;xDYhV8j z_+w3M&p(|CJ+dse_Y+ab$*r;UouKdeuf;OkPKLbvI93{l{kyC^R<8dx?B?Fs9bdT# z{IVr>|8KEhL&LG3bNoJjJa6xA?%or^@4tvA?0oiE^X9L81p4NI=5yD;zV&{!dGBYJ!9OT9 z=l+m~-TX@PW#8QfKjzQP*Yuu%ef)UyH~#$z_!s+|AKZ2o#srY-5#I*%#XpRx5nG9%)y_li?6!~`%`~qyyvl_ zkb}kXZCR{WJQ>e)^QtP0lq75h+p@qA@Jur<2PIbyf1n^ ze#1AgAH6%{AA8}w(6e8R-|-~i%s4Clr4_57citNR#+QEuer%6_=jW?oZ`Z}2mHO$L z_;bIS1^O?JzwrHspx;O1Z(I_9o#=0gejR#a?k`*B{X7XfxU6MK$1U)??`-LLKj5vp zwq?iHj|ZGPTXsJUdYrSaC4JKWV4Z(%$=nUR7d_Z=X$o{caG<4l^Bu55KU2?=j5hGE z9zZofCN8=RXnBz*9j5YP(Vn=ieM!5KA2!;1a>iIDS1zUJ7bRtzyHlC$L~kKKQb-qz zaw*jykIN;c#C|T3C?u-jTJfTAkeIF^aUfq9s*XaN-?};F48K2UQ#4Oyfew%gObLIc z4Zq?~+6+ycp*Hpbu~@X*q_1Dx&W-jV^ejm~19Z$`w^O1hM#bCZo-egWH@7b_61kyN zarEs*`%(fru42c!GpTHTMDAM*;K(XNU=_JPas3zC5+dz6V<$al2I%b(y4tlu`{I1=OH8o6DsAt8@L|9Z!#k9K$QzLES{_h zb*>A?G2oX0#s-8h4{D5P!WZw!=SI@SDPbED+r;Uj)5fV`+v%M(5m_YnQpqhBmKOu! z5-hX?boNW~aa-I=on}hJ5QWef$)~cMWO~I8_oN2WS-HWpL9VnI1{|tC>X^-Pv-8jn zj*f{X(~qa?E?NwlPfi=73xc8^C@Y8DrZXg4a15%0pwEPpg8L+8-thvWNgS}(`R|H*iZ!= zH;9-yAPq53ZrMEiWk_xyiC4r5^1_+!By+mbXxbRYl*YXFCG(8oLVnB`$`tqcU|>iL zXe7yRoYOV4y_BZDbS^cPmP_%jWCnQF+HArgUSJS=bS#Mtm1B+0qIdXV|KR{c0XT^N zCrQS^O(}2}e;$^|9&J0(IhO1 z!7*Hp9~6h|>#?{@Zp26xjqz+MlQT-`gC)hZAp2mdFl3~_z{B~%SgKUQn;izc4*7fM zcRribYU5JI%7Lj(&R{ZMC`@?ixB*I1t&kXJfcZF{G#D>I4%2{Q;Ad(=rSb>mlYikV zEf#a6@hv-ZsR8g&DR1QWrwa!PnUZ2EA1Pcrg}FIvC9`?woZ-v~OGcI>7yC@OdI}Rd zD#(9OzqsVixchuR{86P;0$-D{zdaG@c|mM<8CGCY_Z z8@IBgm}VhpWWf}5n@!LdwWiS}ZGhCpzN?$#Qoe*oPmvnk3#~hyO_$Qup~WkM1{;^q z=8;^!AdR;#7E`t-zN2@E?brji#;1u^s)vGHu`2wVf=!<0{xL4%o{h^V{karXo{jy& ze#;=hVK@LaHKfR33``iQTppWNFvb~hq{gJ2`64;si=-vL4x(^zMO~y^rBUUm6x>Q1YRB@bnr} z2CB`tppxIgL&SMp&h6kX&8Ce-lad8vFr~tJHzF$_kz@yQAq}nL5L!lwMt~jy{aYpV zDQ)wo^^O(*+5lt1W|nh9ipDNlwIX_<&KLoW2*=^}3b)UV+4(%@Ga#gMNgKrf?*t$xVsQXQ7}C*}OR;I* zAl=}tsT_h~m8n}fIWT}H3o0I=S6<0<$8m~ed3-!yfOW4q*&LX$Vf@FSmAYv=fRafJ zaW3+hJvJFywhs?y2GhoND*JP{_K*rbxGz=1FuYgl4i%j!n`eRU27$;=W=L;OaXevL z9-FZtn<~|q=u{BN356yDJ*@(CKjM)p_|K{Un*>?LKoBMzoDGcj%BZFW6o!!`=qTu5 zp=pQ>ShpE_*=ug?%Ru@F%213@1us2wQ3UNqh!OZz>1!tiGGqR>yiqKVFpWgbtSp91 zg*0u-jErXSzmmyk)4`$)n+Nef8XrivjaNhGkn{>YgO-b3n40-8C()roEG~}vkN(yX z`>!3SAUj^ew64+g;65Wcp3Y_&_;pBI=9y#$%rIkAt}=&pdXn#(#~>|5EBW3e|GBPQ zD&=!B&odJ%V@#*q81A8hHD<3bD*0HBBgH)s7Kt_RAE*;(1 z+EAyhNlp|?=`lOIwU)qRJ^8^@Hmx}}VK`!WjCYK5U|YT<-5Br7w?ULhTPkqow)yiS z{EKE;CEB=wlwBX67r%830JRa{Qwb<-g_5YUN9N9ip(%j}SxVX~Q z40XypDVb_oZy`OLMn+&TUDP-$D#u8zU~^@o8YRt5m0?p+1yzP7yjlcILPytPJno32 zS(>3)jAVK|RY;Zcg&Ipa8}^5mRQbf@e*&dCCg)pRJOB=*Ge|zAG>|uCwqBcZMrZaw zYNBWqNAm}afjrd2m@$y5HTSwn=Qf~VoS9WAj8P{YW~wbm)f}(SUK}i-0$6+UwU~T+ z&4pJ^PJ5v8c9aW;((nSDWtZ~fldhQp=Fpe^fEAHgQJWGjl^|n8rXo5!H*d4tOmk`^ z$x2WFS=0^&k%Ujzrg>$~)L%cPuvl6dY9n8XUI*HC4K~ zObL?T)UJ}N$aw`jU8;URfW4N%h`s6=>#})RH-rydHgw)#xlpXh zNsCV@OyT#m5=-zRh7k!W}U6dlIG~Hq@;GQT$Cy&Ie}SAcX~Kg&N6MlRC}!rR{2=68X1lp!!jE^ zC#GGvnU*+I&_(l#XLKWz2)oKa2}%}uic}$^Vw@_=*n>nYD@4kEtG#gx1KErCFjKF@ z&POohZYhzapu#t^_v^&&%>K+!n&~oKVwg57W)9ZaF@~86Ii(F8s)iLv73)@6S`?$H zlwl2QR6^bPGKvQ^=8Pd3L%*xi=r^t(%CJgOV_+0LV^k8LlRaJI#&j-SQ1#j>SWXw4 zNGuTeWelb^*CcCGrU?5iqunaQXTkETU{N`gFA)F)v?5m8Jjf`7_1GHtukobaTwI17 zrfD)@89VXrGw=nw#7=nVog!(k_$_84PKD}lFn9L$uJ7yWOs=mn^~xzs&1G@&oOlgS z5*mI>Xxfpnpk!xh7{wu^0p3hPzzDpX%*W@IYc6vj}|QY}X+2v9oTa*`+& zta_!(pQPUo@Vk2l5l`Sr61|*iM;Mssbv8z>HqcD9wO95W!il zmfRM=isTPfJEHlZRFU{fb&Zl=@NaH{EXm_%B`U*G$?`3gd@3SZwo0y6X-tJO+&-0( zWl-ys!Oq;COB)ES#!!x-gIg#KmP;rP1;>KcRT^pMPJRw2SV zNL3b2EHx^7BuGVamD0am_?gJM9hP1M{Udmnc?3r|+IkVF8_H;QW=HasD_~4YI3#M-|!Y ziFJnQ+2yknNRhv&=1t-9L0S8MzPhN1KEv9tYaKGK*BW@osB1&X~v+`YS3^+?mgX!;i6mWc>P@z&QIi^|8Y;`{=)QRh8P%I63$~UCD-l1cyF=+h zzSgQ+;YrZDWLH*YXc1CfEHxGxg|4Ep(Dhv?i8!~W*So-z$5Nb5Z@?w_Hr1z@Ijbqj zat!L*wmUY6aMH95H5L@tM{0^NVvVik(abkPM5p6OnLz%3h5uor6a&};W@lzC$Z=4N zHprca4<+Fh*L0|vn<`=)b_iI|HZhiAT%$6}Dzb6>q2}ZmbC;Kvk&LaWsOQQE%(B^B zAd|!lWmwymO?=ui$MWbYfNPa2)mr9M3R_k5ScfM(w>rD@5ZzA7+o;85A|5>@NXpla zFlHh&p-!Z}c}f06Zq+$Ink*sTf~vz{twl1#A)E}YmyJg-S(>Q1kxT6|it?mXj)A#0 zWe)lO++x2Fq)k>=I@`hRtw?>bhZMHk3+qBrK?Q^%ADjxS*WZk~jvbR2dV_?9pHH zZ)&e87)PYbpVf*6OW4<9c8;I~jn-B+Ily-G*N{JZKpc}bim-7UxVtR?CWV#eI|C3Df%h%WP?3A9E) z5Q>iPZMUeYR)9>YmPwi~)=9$C1+tuOmDT2NtX!uqdX4@0{3JQ$)zG2z+bJZqnAK_BSS2<|DpV>bU@ahS^WL5o+Z- zK?SeJ9N&qot+AO&>S42`s0!>2uqsx3MD|e8k>j>l(&3Jf_y$#$Jf5PN*S6hEnN2-L znqMPE@}D6pXP7KXnht$cFKTVe9ZhK!e^g(ctAp9LBX8R+J8}mm(3T5)v7fN#Ovvkv$m|5K#ko%7?lB<9bg)+u z_CX16!0*XOl}#8cySEu%+&hEBAq{V2D?QV&pTHdRjEnM1D@a?}E&87?ifk~Im4U|gNxB$f@rPv~iG@QN05E^RC@{;TQ6)+2o7db+C+VuaFFJp0}Ds?F@ z(cNp%wuw$dk#4<_#cJ#$f3A5JRb-)bh>m8kEwznztISEMpux^_xgal?0%UitE3U)! zrK8I7P{OQOoAgm776x9V4du56wd_?)Lm&pW(WpfK%C!uJS`HI!5X(z#>s2qm< zw1QAu$;PJvj8qMS z88-J-klr5Kgt69?)nH69o9KsZtIR-YhimMKk$~ednrd^-aSyCy9UDwsfth>>NeCj% zv{`(FlG!uW@<->p zXc`*#Bs>$+2|77R1D)!DgxP-@lNluHps+ zZJcwO$vbW~W=rVvfy(SkkeL=6MpIWp&W(E$WS74ePAjY`bIkM%83j5l7V6?*gDS(A zjdIR|X%eUfXHm6ou$RdnY_8F1X60s`rdjiF;Q;=h< zW+0PQytLb6N4$)A6i2J*QnjKv>$38mR5U8%%aov1Me{~hj=`VTg|riD*X$Kh=}-d= z=mY7IOfE+x%~(m=e=ml!!6Oyi<Vzg z@H=tAW4$cou?tf#ewRK%S7a z`U4T6*uz4bWfvd?$7i~zZP}eI3~sZmx6go;(8(2x10h-YrKwS=Z?@X0sFSAF&I8y8 z9p9H`3nnrEFoHvqlEXEf4W`kgU6qB!kR34FA~hO@WMibHeasxcHIGA=(%jHfW0RLU zdZX`KV{)*N8COLU@3_C^5ONS%+c9P3;-DZ8_8r8;Sq;}lV?1*(t@gV~zOJ!J8_uA1 zh%+#ho`~v+cUUE|q~i<(foA>BGnj=rGfvkeH`FS6Qci&_b3v?Cow_mn|36`IL33!F?kI=6$*M9$Xpj z`8EvOu)R2#IJSjp<-m^M#H9#ruk zvs5Y|W>!^K4lO(LHY~I=qo~Bn%H&9vwRdFNW)y?a&N`eaAhCrLInsCX5U*8w@apsk zT}j9L5A>vmr4Q*D!-J*DRb;}_Qb(0(rAlOClpJ^*sX?<8>46zXBtmCa6>lB6YuuVD zz)Va1;u*w>BM%5rOFG-ov=x_J(M?JZ`IEJ_hW5-d-Hdj*KsRqi80l7LEgqCrX>e|r zx%u`Mg>jzCIi}>*M?Cq)@&=n|X$*As3~whfOB4Ppj3a0`0$Ng!r8Lq6*;3^{WO0p6 z<;qp2lR%kMga)#gG0kp(s=31q__p97@Z~i7@3XL5e`YBz+TmWYR32X{RlDOlG*L?U-wgBP1QXWbrTPc-({B{6pnlYJ* z9vr5N_NNAn-I*ctz_kaNs8fr#(Fm~0?z@j2f8&m{$h!R`=C>bOgnqSZowM#TQx|-Z zPGkyYUFd50w6wZzNu62f_wwh4cp32P%_M`6PzfmM=MhddC5kZ!o z{dLkJPbL{S*NoJRKkQZ)&o~H$YH-EkN%xr)*@7)$ z{Z1E_X}fU&2700<+3UDISX)%18eVNJonR04P_dw(8}ZPde15FTX3(oUCL;~%9hxVa zU)@QMt;@(`Fv)%9X^)sRQhF(Zmk2Of!-h?%l!1cklX5sL)Kx}DrECrM0+_sl;vEy0 ze4)lo3gw12M zmf#xZw*&>C))K60iNoSnwZw~Q8*0>9$RsN?yfpwfsA`@|bbA&jW(P;n0dY}fFfWALnDat$jb>}oi zBso4|Y(%c33Or?0DQ^xMAvtT60d1DYjY+*1^(v!Xw9EEhD)7z+`l~s!ABq~%bf#^d zZR#(ia+j7fS-8{wn=n)C1{6AVbf`xpJ!zNr*)U@4PGKssJ6)7lk$O>?jcW%6#9G;{ zwg&fm@@E6RXT1DosSPN;W?*gmk~OCftTj$E?_7mF9kZ_wQ82o&BrZ!kK`K@Qz6F&R z_wq)q(yFW0+-z@(br-L(6Tz%84|2{T%#)N`5J8cduAtA4Y)*CwLV!?aG}ej4neUcNvo)J z;)Wz?%rsK5l1;HtbqmdxfC)*dAkFpmL2O=)y0`XrLh4=nZEPt!u_%785HWBi|K*si zX3K1mZKTE0fK6g>v^QIEKwuNdH-`UKV{wkehBs|mJvO$wC}ma~q2g+qGKT=ctvC`P zy%z1oDJnH>#9Wy{;uQew?{*4ultPp0HXGuOp%UZ}ba(CNoGL(g5CYO<0|*lUh0ZlT zDvwN1?zHvsJ@@)*ySdu3rby$M)Bw0h6FsIAGO@}FA!$VAVYVt9!HOZXfKJ3LGlKRq zry>1NB99b}LRl6zhe$t>{|20F^;Ec37Yiq9Abmh2y9qn4C-Tm$q+1R^2m0Ykh`u2{X zeSvv=XB%|Pc--GB_KsABB$JqS)QxHkH7o{^@-|dwz627~WjP;$9)>4o)}HM}Jdvo3 zp5x{O6YKI>8QSUZ$B{r~fg%BRtneli@*;gMr}A}m5|B=W{(3Ocl^>TftG_)LV0-1l zD^JBT)pA54=%Ck8nkmr^*}>P9Du5!*lq+>m6y8(^!O`$gi- z7gZOrlOaT39PdexPPUH9bi8ln7-(5^eheg#KX6aL0nP0r#;!APhy)=2LSB_1`~bhA=z}KzdzG_pEYy( zJ=iN3R#A*&pOg<;EaH1xU)%ti06?DO@PR`!=>%LYCD5+Gi;&OC%twynL0`laY-hSkXkXJOH(T z@~oT1$o*ys1VbxXBAQTvoX>pRImTfxVvv7%HHN{^Lr#TN-}pHg?rZzJ7)W=<7Xz9o zb(s|Pzg1Dw%x8ipZ9Mzn+*9jRh4svIG$9XNS@ks??dhgwVc%B5!{Hd_;qX5DUUCDO zIevG*x^93{ZTk!Oi*wx@{hya*K(0I_ChKV~l)iTwFiw%z3!`N&mp*{Q6D6dG)SYeW z$iN^>uWZNASD@ca_}6_?L5K1#^9luO6Phym>{fRJE1D{;z(kyR6c4{+naFA+A$zNH7X-b_Ea{{Yw_lG;$|4Oo*2Wnq5guqy3B7NDdUMX{qQXHw8Awb{&0 z?S8|Ab$5%8W?2B$L`&pO#;C6+`6pqH*D^53yJ*=L9q~=lfQ;ir6*cq-{I`;%C!4JJ zTYjx)DZcizSgb^Bred^>5)-Dhxt$yFW=Uh#Q|VwASd26h6!^CrOBXL*c^cxljfE6* z+#7L$o|{wjuTibBxl4VGYE7+|ox3yD%ksiZeStdUEiTAgYC%57_3}BjUUrT)C^Y1u zhH7Z+a6#Tt3v!?9^uBo_i%l8_S!=f z4foc1`6AcL7u9QCINNXyJ7cOIPP z*<2o&_Soo<%sdX-i)~n6^n_0{rPHRYt2$*#v~)M7c|(GB2hD?4iCbsH5CZ%qVu>@y zh9yhf)C}OAGwnC(H=OBy;Z&bUmKKM4*!~)y4M1M=Z6L%`1$P}AzmS-KR7s3p9*Yy2 z+2VEj_@Y-ju|Jb9dptb)w6x65!Bb~w zrzu!9-1QlfoYftjCJDjc#ZjLJ@pY7>NGTB{srjK09-XI`CwUqFre#$9Gn8n{%h%7# zCbYTb=Rqi2#nEy}-ja_myQEXN&dwub)AeKsCQ4|+5H&L*M#3W#-eF7aJ#mJ~vWw2( z-eJpphAne*gLjy74AYry`Q*dS@R{w5$%n1*8MeYbY(8k$DS6%s!6*YYQ*fITxtb}s zeyuOrQnF4o!QZGjp@^w9KNQnCQ3c=d_buCc(urYtyhnPMC`#iVSof-yL$_H6kGUTE z5D9*^YNyKgx0q6IvzX4qrSiL3L*^IlJW6V@>1ERQWtPh7?Ip+8PBFCh;PY;*OrjIU zH`BnX2sM!#wCd<^0%Ux_&;(@P51}(HPn7$C;Z9T*d~HA__EmV6$}?#R$q@_zRX2&F zkt16Zyw?yXlHGgo_a2MX7xUL1aMZ`P$#9npMMGtVL$+u{c&A^&Pnq*HkaMv;Nl9jv zpV`w!^Ainznc_Bkw8a_-2<&n4N_;XwyGKXy^nn%Ns>s@LVHjM}jZxo_tUyVtHy*#; z{$85OE%4p}Szgh}(jlW6H?Jyvt}*~DGbg~^B$<nmjoO z9@%Q3EUVwn+Eq!Kah989=6JKRz95|20*kBt;4lU>leCzg2OpV*ak~|jm4)dthif2x zq;BvvKh>p^Y)FOZ8b^AsqaH2I}uEhE%g|ku35}G>gSoCa4!51Ru za6`1%hMPeBRjIX{Hb4GF-6F*NqS8Q)KdE2CdYZ(HJ$3v*D>jZ?L>;HTIXaMr0OMpK zJ_-m8>%m-|%&)wTK)DFa!0Ry>zO^L3USWMrN~b9IlzC11yH@KJp(ufOv?Y#hKIVF?;OKO$ZQ?^;JRo>l^*qY9j zo$Jc<^{(`Qt^tQ5QHHCJ4mJXjzC>5*XOeP2wFHni9BPir6$N4dD z4@4b{*9W@k+6!pBHHzI9Ty!PR@i*3Yg2&~aD;c1TpsnCOvQM2qsdE61jGmN4`>td* z-uqidvmgT&d>=RuMeFT#wI71P8ZOkE%S-wKdL*`f8$_z zvW6v!3l??;FF}&uYxV?G`zOWIqL}poaPM_Yq${zq-lUnN98ZO=%iS2`JIwZFPWb4+ zl!(m&WKlE1AX# zUns`3j|{r44dd^0AMkkdHV0l*V1^mK?w}uRs}RiXXA#F|Hhb+eoq0CMvuD<9ZYnJI zUB+utr_=SXJ+iP;q!ZUQ0#HvU*)m(};2NO|M=kTt?Z!;`=@ zu?xY9J5=R%Q^b_DX6Ft~Ab;Z@Ic!IHcEU7{>@?P6hvh)CXk_H~AZ$ll3m&!~oIp-n zMh|?69+c{?)al9ZTk)D*@T$G3jk{9?UeVy*OCCERYv_Hxp1@Bv_xc5Fm%yDOZz*H# z=R_*Qd{ojyHJH-lr+{z_|7ysvco3;l#{{vgO~?C)yi=6#I!1EId3hYSw%o`A8Qfa{ jI}WcAmpcs059JKybMugmq*qP?Rfy6D&_q|?Q1|}dzZK%RY3g}GT!^h5_`FVt?i+>3+$zMb)JtBWmx%dl$SaYQOefAuik~LZAPs5C>lop>KwS=zUW?&)p|NPj?B?vPy&( z;#PBR>Gh{O?IuDS0oUj@9AYo5If zbj$YFygV-~#QXof=H;$03SoS)=GR?|G5*<_-`4!25Xm=c{;dz=X5Ld9zU9M0EMHXH z@_|7imYq^N^M250!Ix|Mnt1s>=DeLf35ZxFU}KUw7K^A1t}r+US9j!?}5jW<7(f0 zd>a1#g}Traz++XRE`BZ6xAMfgsSB?cB6mgIsd2!Mez!=FmjuYUqGl zLr3r3FT|{mhc5dm<~`$6q4z)gBgoMoLf5Xr{%!to=%ZKPEkwtz(2e^}7Gl$-p_`h% zDa7H+L$_>w2%mo<^ml9a39;qI&|TO6PKb01p0DEhZaiNXLfnDppYZzuJi(9YkK_3! zo{xp@`fv@Nui;rM#DO_@Vtogrc!FOKuErC5b8rC9Q}O&To=fn2D0KJ2Cqb{zhweTV zbY1%;_3T}#p6C2BboX87LmnOq-S>?FA&x#1y8pp8A?B@6&n@2%Jy^3H`!^AK@Vz6D z<1<5#{LLK5*#n{P-H`?Tr-q&yg?Hx1SZh zcFSt$<$n#|^7LjQ7JoK;>*eVKd%fTOOR);^e1M6S1 zSv_|Qgg^D#3L(r?_?}1c{_YpT_pZAU@)8Z-`*qCwzQf`BewYXU&j|l~`zJx)Ux$Bj zBKB{`_ruQ(og_r#_rlM81?!md>+mnX@eSy&4~Bnz%>l^8X_2}cw?ZG?6{#PbCB*Sx zk3?q|z^@aL8H2!Y*T%?kzj_JsH4>S*8+;PJBr;313-PWSB1><_-^aE@R$PH~iFJ|F z|Fi@8*pJ+DK~&zKq6zYFhgt&e1;Jq-CCkBnXa zQ|#-%MUE!0PiH?Jx$Tdj`>FTiiG4Zq!N?bG1ikBi82N6d73=@^$aimeL5SHmM85YD z)_cM&ksn?SdF#A5^8D9<=b7D+H|G8V^7{M8U%rCp(&y^y7X49(Id9cZePasr=*{&f zzf#2dAFN+|Gz@$3m-?m8m{`wl_3VALzUxZJyPn zBlY9IgZyt^Tz}*;$oHZDs=w`P*oU#}>hFr+^I1Qxzx%t8%dNJ@Xx;FiLbQIl zVa7kKhkp5agYhQl)HSDJ9-n9aPea@OXYuzb4g0=>^_;!C;ZP&?6PE4hS09D`eYW9> zqd$Tjex%{*_LV}c*xYc-w#UGK(;DvBn*dvx>REWW;m-OOp~t?`@U1Ja09|Vv9)9sQ z$lv`9Pu_Yx^u_9iSAX;&(DB5Ex7+uF9*Y~^z8?EOZ7df1>QU&6kH(D0G4AAF#MYkF z3cBQC?;5^ch>1I6=UxVVIDKYp=ya_Aq>seRr#9lfRP2rq0N=BI6}#^uz*}}%?4fJ1 z?lW@gx$Di?<1;@7dlZj7`Mv`5#LCzYZVJP1nIHSXL!DUvOR*P^ULZt#YwYC>pu>CH zV{g%4>NufMOu%l8$M6Ink9XpUb&X$w=Sz5g4bPYHd=<}M!w*={Sog6(tb0Ra^h)4y z+7*ql%b$UrdAPATd@}a`iN=-Npw~mo8@oT<4*Y)8xc!W;LO*<}anFtCflsD44ll&M zE&s2^^i#0Qm;b!+@EPw1e_g4bn_g`^(h5D$`45d3&ntl*zi+(v-g@ZW(Z)w--vE8` zyPV}0lTANAb#QoMCNet*vsapN(}o0=A1^U!_pCvJ_O z{^vV{NPHo_{?D(1Kf2=kemEcY>-_lszllLkZjPIGfxi3Bi>G(Yg`Dq;7l&d0j+`4W z)jkZn*%QC>%Qu2wj>f<72kh6t9r2%c&IVunApYDVb-?cn@qc;qEy%-r)N|G%^<44A z_#dvqzRwwo|Mzm>6L~oP)<1!+Q$N}iD%=A<>vv7Df9`_*y}Rke8y|xn_@}0Yt6}%1 zk2IZr;C1Z(Z<@N!eGPWB<*PetY=2<)3)U_{y&#%T4cK*Qko3?)SCg_#7o6cD` z0)O*p)Bew`guK1CDf?eJ(5JcS;_vK$-_zc7RnKwQ$4@qW{hyzL{4_N^wBvHYCoz2YN1Dp9tOmC+PE7V(Kq`1U|hk(Rx`H{@n7! zh6}Jiwa+KIpL`K=I-1y#!Ft70iF9W_*73bW{`Xi%)7Hdg9e{K6eTi!tfbVI~B(C|? z5cu=L#C2Bz@BNz-*L@xPv2%6eV=sRY`ejk#&SwB;#s!HltvLgF=lI0e@A(b*_JYK> zf4LU=|48CF>ZkX9Jn{T*W`X{Z#LM4(1b*1U#G3~~@OM7Y9J?QSW8U-43x3%Ld+i_DE9GJ&EM~w20QzF^BeO(m*X}xzj5{T(8G^5|0(_; z=yEU(rTQc|M9dUF5?L`QMnzf-2~!wip=cA!#VJv$Gwh{^b!Kt}(^%NH{1k|g2zO-6 ze6faOr;1*TD2SrSi&p_e}^N;9`VQt8Y@Pd+!2Hwy*1W*5_(7zTbeo`a$!4#|!2U>fuq_oL{=w91PPrc*Uc z59jhjmGPYFU{*%KR{zHekH9}T^EOR}G%g4aF=jZEsy}GUuka^l;zmwfeWf9>Otd)z zYL~TM^) zDE(u=FpXyhI6_5%P=*-SSD<6uoy(4xg-KyNQ)~r1>V^W~;l?965+q~3~l_+ zM88A@nhS8o@H01L82<(d9Z#x$1DiuTMMH21|5tC*NaXQ1zD<@O-SZd^#g3oaoo$@k zk;xdPY$0_BSPYJWOlHA2oW_R(rUBDfY$x^0@tP{FD(#|)9hH=K;6-3yW}uMS9IlE+q|Q`CRj)$txSAR#kI>wWc#2AaMo6*p$wgXZq*gbWBhskkAkd zBquDuPs(MWJSjU_0Osy=Ct1@KM@?fGQyL4}mM<`d^SLo&C|x)hfPq>Jp=PlWv=fSH zu}SuFoW(Tun%UHtDHr2k%R;cd+He!kqmt1yD1gqDfX)uQcptV{LNhuFet>s407>g1 zH5mUVx6q?8z+sfEaR4sK-$)dj%Uu5Ar$voxhb13UO;I*%o^8ilWCoHUTLU!lPpL5~ zTy2cvE{*6Lv5a(f#7Gs4@k}b6HHzkuqGDJOeK3_DGE!jP;aq+!RV?Dob_33k{M`L4 zU~6JnKNbB^&1QuAa{2s(pH^$c4vhv>kG9km@cB4aNnQ!40%!T!09qGX3?w+ zCl0@21Y!^4q-+1JBiUSD8t1^-RVY?w1e|#_%MmzsPZ{QlHpE#Of=bR!g>r! zj`I#qh)(De`bp)UO{mgrt8|{mX4vr`X+VB6#Zr8h5(n^`^O=K7qvCyIFr~5yUUb^Q z8Z;-JEdnd50C~}5Z17i9a41lP-@byoENQmGSfk!;AW@s zpVG%8a>>#jI!m0^YmSsMsk~tx8E0G%?@)RmUYH6QciRBlfl*&&#}<0Fn>f+erugRY zk6|2%b0!1Cc~xJggEHCI9Ndnxa5E5Nrn7}&Dm%!8hO{Q$HO}`;Z?Pt@q}P-rrrN6E z(Mmowl5o>$7QNu+R0K!fTkD|MWCJ>!E{?7Zf;7{WFd#!+Yk*^Onuc%eGby6RQ0{Ox z2m;etmW*mM+oRxpO?qCsQLbfau;wj|2hCdDar4s4jqX%je+c_6Q$yC8RZue`(hlWX z_KxOYAej;=7&!!dK}gIgi_~;OZ&Cp`z#15B(cnt{Z`vfi)a|J(B2$&&TTvYluv9K4 zgF7lHomr+4cwcFJJeP+Ft~$*eu@hc4@Pvw@tn7q&qc?7dbHsMh?cm$Ib9gvCXc{}I zpU>Ie&9w($y~qK;*qNL+Cc)7(Z2|#^rx)~e!n9p2V^bzotTMqokj0KeY+OB4IXF)# z1Kf}BpaRx2G@x2=;{b~F$N-}XgxMN|SFz>+tRC7}`g^X2)zX`W)DVoJHoO8p%aAs( z1B)e6k_?&Ak-8o9ll(woA31%Vh^UIT2$O(=UEg3+76NY8_f^@a|k%4bJQF>X!MPnnG7Sb zc4>lqQ!v*=`v|E63(}DIlJr~0ARz@iN#7`c-B2nPb6HG^N-w-~ug}3?)rRQ`U`%qd z9M4_wL7F4hArCH7NEm$pko)i(DQ*JZdUt8-`X&lRbIeIBttYs6cWyA1F*Q#liXF|B zc`czGxuWzt{4d`j_Fy@*qjGaFp|YurF!LmhWGtG0N-bkdS~dR8sGPE_;%G{=l4q(j zIt=&={%<>FWK^|}{M5>rVLVB%A}b~pkwe4pCiY!r?A(3b){`;mTELbUQ+WhZqv?W? z8XwQ32UFxfM&B}~Qhp_DqLH!kZw$JMse`6r4iB4yD!Jq*1RBCHDLp5q3f<&@y)Qva zPHQ%2b{~B3!D1OsHU`oN`KSE<>&`ap94czwYyvVkC^wTahRdCi4w;xFD^2Oio5Lo8 z_Cd3t@l*Lo*Gko^k}{k zIiAX=in)B1Wvm5AIb8A>oecsi%D{^*L>8b8i%a>F3dqXckr^GC!>NgaQ5ek~HU@G~ z24luRs@kkuCO0c^vh!5-%$%P(j;2iaN~h~M6bAFC3RXwquUmMzKLk7PF1(lyrpFF`luS%8B$y9cRGT|zmS<1E-EZfd}EE8+RiE(M% zDqw`z+S+^Mm^JsKzB4yAW);XQ4DBf+bDD`-pyp)0@tYz%jUP>#B)(KH{G1spnm78U zR@K;Hu@gGE8HSmHmxk;Ww+E|9NteG0kI{#oOg$^6%6glvLRN+4&4Hs#D{sq%bcJe| z6{iHbfn0N!Ih-nG7}GPuU2Xf9Nw0`>kXDqeXwill3Vv?W!-|0%ip=Oj5)by1K@U_b zk_V}LTE#3C(BFbMluSdORgjsf7?Y}0F_Kc@KH;!%;Qo-&Twyt}D}5+EWHL9U%M5c= zh4hgs`_h7CGu1>EAw^x#NMkz7N*syg8%#jYDY` zA*v4DjGbT!k4nR>uhwrivu0iuKP%vxfa6Tpl&gduceby7OS%C2DMuq7Lcx>w+BMFu`t6;y@&3#E|KAy7o7hz?G*d}(vBy{5c-D0DI?(tRzOoiBR z7I*jbZ0zmq=-XIj;;u*ZH~uRK}2M*Xy{K)$*|vmzhu8p3bJnN@FUyjI5gUx>YkmRjZJ|R#4!X;nV>} z0T7)yRmaZ2Seb+cqCqL5hV3Y58C_O_sKWaFK+64_dI@B=%=T0O(SopwY?}r)T!||- z2(Pl$B=t%#pYkqQykTrajZ4!oMmU!8QfXS*RE1BZVBn2{Tr<5EwRR;o!_wSP#kS)w z6f204NAarK)#lcb$Ir&_67y(rg^-HT}l`f1j zd_pl{&@_i+cCi9^)^Os+Gbx6m4vx(|unVZFjE_#jnd*_tGA9bO%~YGN?Y=%_da{*eX?minXcBsjJ+jHfph8 z6(Ez&YBaY&g6QCA5;q9XwGf9D{nQLcw+3@s=3Vw3qL^@@eQzl1_B~ zU4fpZ<{>p?gV>P60o7zy^>#8Ov787f6WjI14mhhoUq}HBP5n7^vsGEjd7>Af%E7rM zO#Vf-%t1}aCN%t3o-xv<#@`tC@_jlfIc=#66f&w+OIA5;LsTSwR98pMe6HHM6Hbum z*)7%RQDuoL^DliThdPlyM5R?d)kT51rNA9_piZ&!Nt2Z2K3FC)2D5XL5p@Tl&(iQ! z7S;+BJrFboXs{tv^G#+$zNqR{g3#kdIO~c7)M2ZEu^O~E5K=**Ud)K}!LzOE7N06M z%et>hF{+Fn{Y}aXe@jClE9uc4k*2;eW)&|gAyHaYCC`HwKyfjtqNE_I-XVftqO7*I z)Uh0j@oMnShEfVJLEIJd8xx{`c zg?8tIUA>pYla_^1pMlvJl=w9e|H8edoX}sB{kK|qWjPx;tfmPRWzo0ET0i{8BKzV} zMyVjX%v|#$%P$pJcr?JhQASQR;LnpNnkb3T5^%R9D?-Bsd%a75w(^smdcIt;YbMtd zeHS@nUfc3{=-opz_0R-51;Ee+*Y|b$wNyDgU94tO=8Fx$Qgz>|w1ZMPtcBQxN!Poo z@6Y9qk+nS)vcp|c%0`9^GM~iilbs@F$UxW4ty@p&M>0${_vMWOlPJ~1vvN-%S3ux_ z?KFz5SbHKeSXg4ZX!- zt@1Sh>MW5eMD;^439npFHBAbu=Ss(|X}Esnd=|i?uR^Gq$E8z6^`cXYpRm`;5;jKpT!a$%j%P2H;mu$ zGyY0{#rCR#5+Kd;@K)bwdbqgQPJ=W^pR^ka?XLh|o*HS=z^ep_2Y8%Y2+U>S*O8?N zT28D|jpzMkkW(rbYB$Aav^FZ?PflZ@S#hhkCf~Y+M!rCI+sI&T&JjA#4D+;!waO>Dj6nGCY52JY}wJh;=KTBICPzY@CR(8QGx!B2jP}7 zCfX!cIm4rhPd2Rz7{+OGxP%2Aiyxd?ja1IC8DgC(-IQxd&9D~dp zfHV`*cAJ8p4XL+^793LFr#b+oEX+cHK~$0d7t7fCFs8lC=9y$eFO)ly?r*3Q8q2YDpEc=n^x%=3c=SKOI| z0(PwBQ0pZ%K6JOBp)aX+v?B3mf%wW(FW<)UB!L2AaAh*G3!+Q)Xg+AfR97=f_Js4{ z(6ONpl_9qB{KNv>NX`}gza zMLcKcN~@%U!9FZ2f`aQ;Dkv8xXq{} z^8;Gx%6!Wj6ptLF8m)%5y{WV`YcZLD+QkHvT>7b=E^Cz=AMxe3$_>|S)pL#1j?87L z);PN51#sS#gOeFJUtjTDCwJ7pG2Do&U2Dk{UbS9 z&{>@NqOsyFVW^o1^RCJ2{mAN_z!f9mUcDJQ?e(7cdCmlC4R3@T)SHERqV92`4&nOM4&oRi^LK((&dNgDm5(Wj*Q;eI8W87aMh;**c)$& zAIPJU18hWRIBe--htC>$M4&J+Hjv9m>)X_)elF`U?E;+{7SM3HIubrS@`@FQO_i=c ztpk;#Y|L_Ijck?ObQGF^31g1Ubhj|P!?x-H1K1r*^Ws?~7SDsjG(#kU;ua#KVp!Kp zo!)D*brCrM7)ZFgRmm~cKbfvgK zE=*__t3i0O3hRjOA{&;suSS??)#3t%lFL|Rv=2IK$%v`tZy8v7|hOVZ*RaE z-owFfFG5=u^@b8NX=i{eIYS+39|kPuJ@i<$bwj3(N=;>g{(tTzEP@QOKE#`9TBf`DB~)(NiAS>S$mpA z19ay(ILGMb8FGUI*BX=UiL^Q{zTr)<55a_&!3_90LpMvNR@`CrTTC8D2_D!2HNu7* z)sdn*{1JI*BY4yzseEYdh@rjDEO&EqT0fgXT}O1vR+Mni_Bou+BYB1MDbi2!k&dO$ zqN;sqkwB>19G0G<@BLYLA5ANA-AWho3p3+$)x|1X=P6V$qfpVe6SU}w+PneBK!9(T+Y^J9p z$w7RI(?(QvXInf)OBauZvO1-Y>a2FM`9db)C3|^$j^emEh-d%Md867!eK2AO;Z)DG zJ8gY$YA9V&B@N$zmhy%eO<`!wG`>*@Bzcq?TUgeDck~YmHX}%3mf`yjTG;j2%ct!=(f%kGEYq##(J>3i?ROHfU!3{WF7AH zO&Yc7>(DC1I(Fb*=;tD}y>Lc0%L@20jN?4?S<*#QRoLn#_XH0>qYI2|^o^!)(l`*q zIAnowV|n&5+>e@0F!{KAdQ>jK!Ys}POFfUn@^Gw5b=c7rH;nV?&G;>QtkWT{x-3RF6ImUjp0-y(kMvZy}BpCmg z*baqBTdIk~zFcms0l1Zo`aX_Svi`@{jl%yaD(fqR@S{p z2V7p8qvB{E877-;_oGzlP(p~l9_7kEL?xjIrN3f1QVy*fH)e4bBU|J(XThW6)}0Wt zO6-i|-IuUR!9!;2L$JBzaf@);HpdkR*Rk+p&W5)P^bPm}K-kx9x0dNGPjMWoz~0PEY(PhvRUOMJtd-NWbuTxT;zHLIT)#Hgd}}Vp_r`*Kvp9sD0?2g7U7#Lt zi!^YIy0wOWFX|4^84{>0qy?E}5v}v5B2=QPnt|-~dr;*?3o5y-2imw`IF*+M zOCyrHrkG)79wzQpkVu(o%~ycANU6X^8#gIirM*92H&WPE@*krJ=0}+GqvCW;RFiF@ z$T-qEX`qg2T(oyv#1{Ow7L$zO{{@ZVqg%GD9UEI)kkYD+U_>gfP0)Ol@OHHCOAkeR zandSG8#5nKoyu@3Ys28&M|+2RaQjRV@(AjC_Ln6p9Sj{r7!GG(lmjVro^dhhi_*ln z+bgm2uC1EWsx4=d)QwB|$6bi%pqzj|hVL;#>pbKi%d=2gov8xXv%Q#CenLjW zPIs#YUS7;job=aQfDQXRnX4}6z;LoNH!fvVe}8f}FE=OE8Eqs`M)K$@@Xk8hiGY+0 z(9fYCKq+uzqLyTrIS6M5H>0TBq8AL2FH6Kas|_b@pIk?tq(?g+=qL?>_BOAO@Vc{R>5Vo4{t=$(-~MW+-;d^}ER1cT5a;vFzs&O<&{IR)@B!c}iUx;d$x zISjy7-Pz=3*a@$kP%7jvKld1o^o%9@N&^sb z6c@b=!&UWzsB{s_X%S1RP%B`T8FCQ0f?=J~mU?+Gj-k*fZiP_aMkbJa*2+J(G+F_3 zldQX?c9zGv9kND}Jn7-1DJ!l?sm5$Hb)_Cl%A-DZeMm=>7b+>w!s`u%ImpMIJMj2UThlqaU*ez#rVWOg5| zK^R8aJfLI$*I!bvL+O>2W(PkvjC#braz`~H*w=+qBK68EPbBj9YL;hS2X6Xc>w_`u zSRi#Ji97;du&(9N(P`CP6-h`p3dAc}y@ zVWcSv&L-UXUy$c6WXGJ22m82eZc?F~eT*R~iNt^djFvsucD>ut`byPIc0%}7$f-({>=w(RsJh@&>=Q_LxE#+7JZPGZ+5IgdwM);Sv+ zkxlOFs=e&qe5hWQ*B$C4&>?U0K;Bjj^4Xr3&#v~e+nBG=kS+O@(AedHysH}IUeC+D z-j^#i`FA)2^|J!^FRAwOrJk2B^}ZaF{st|n>(hifOG%#ubW0VW3@E#+*o&=<6NOdQ46K8Y zH0?BOZf_kMY?-5Gn8f6_Yk-Z7NCb@FvPRsBN1Mw=Y#zqt=}#WQ^;zGD>`Zb)n!1ez zUpT`{h22i2q%=t?@|0yTha^p#lC(r0BwmW21de5(i-Aty9%+$|ZRoQ@&f`f)1cKvvPF~Fy*;qEK#1lcY)5^PrBDu#oLD!`-CujGqQQ824GKX# zt}OEj98bt-sS1EkYC;jS@)btXCmTTn-9n2yP!>LPb`Ki3(v=fu#+6>42pYI5VBo6B z3|t*BaP?#ct_c{p#ygOQJDK{qKyH;SPl}m+>9MWJY}NEw(&?9_l0CM2+uCg=hviWc z=|iHZi<>*W7`97K65yb%RKVf7Y0Af^dqsa-UQgmIdMb}N%C8a{vcB5Or-lrbx|G2? zC0I!=YoeS?59nLE@!eLe>!C*^Fs`oziY*|lF=+b40p;8%pflac2w@NX6r}ITpDhI&x?XpOrlZ5?@4tD}7tqjj-FbC*O87F#DNn8SlOjKz+Ae5RR zla*F~Dyn)`5aq5>m2nv}d6|Sc`7-MUocsXX``rp_gP_c_(w_FkKNJ+&5!Wej{fVhE z6KWtUqi#*LzM)7b%?^NL>YKL$(h#vReE?5#57Qb*l1dG-4u3b$cEMd87Vnm!+Ik#8 z?ZJ3Mtd!;Aly*`4QhZ4qO9Dgql09C_0Esi!r3@s$hTq+`eEsI0Ze!)TrK$DkKt}mS zeFcn;SGBJ`!gr$JOY@Sxno5sMf>MRjXJZhlc+gHEQRAuBEEZAplv1!S?6TQhoZiD7 zY{8 zOR9q%0n9ra<7uQAi7V0!0v^7bi2pgLG%{z4Z(gyF>*?D<3@AH$?%P4 z(0o4p=Kz0oKbXqQs4iuy?{b>r+hpX;{`U9b=v3u*HMlVBolQ!0P64iScBaXOB5yPB z>L&%qt_0gA1ia?cku5CoS5G)~NcmIV2Q>-XEmT^FfR*oolll&7E%FA3VPnbvxO2S}vW- zlqF+Wt*&0R&mvOclJgax+2)s?lq-!V^`YTZG8FGdEupoI0XDv*GzU{`s&BW_*ELiX z3pKwRcaVDeyta%e86sZlyiWOd!n)Ya)v!Yf-p0z{)i?5MVtoP0(RYL&cU7I0qJ<-G z(xMd&Ih<-96iR5q7``b>A0P4ZNcJ(qX&r&pYa6R1X_>Qf!(PSuSn zud^!eO#JePV1oHlI8yq87pBd|#7@Q8&Z;<@cYD<8DrbOBaMy=4kjw&AoOO@Y$3%Uh z5_aT$X{)3qWo)J#I`Wzo=;0G2kEHzzyv0qE65J!j93E{N+^r$`9S2P8!JAXpy7^># zs{iXw9VUs|Uv%o-szp%jG=8`t8cg6sT|ks2l;DkN**!j#!j)h60#Wt-)9(Z*=|vwy z-E8Ydhf{2z%1T-n`Rcm0SLSrwleX{FUGA>pFrSJ$<|;VL-N*EnFVqlozgf>~cWpmd zg~eo!V6T2Bj)_jFoUqTYUj;M^Mq1vH?>NJnW54sr1oFYsv*%0nhEyk@PRAM8a`%f^ z3byicc%^=CD$k?#-d$xep}b4g7k;VM)S$rWfbR|k+u5X2L&8mn<86Pqd*+6$|T|=|{+#C+o+RmZ=_2Nc)SblNHP%gWmXcXvilT>9QbtRg> P8ft3Zt`Tp|ubKA0Ir8_f diff --git a/translations/focuswriter_ru.qm b/translations/focuswriter_ru.qm deleted file mode 100644 index 17e973e8ac109b9991877f98ffb62bb85e6e323f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35647 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 diff --git a/translations/focuswriter_sk.qm b/translations/focuswriter_sk.qm deleted file mode 100644 index 749672b68e00fc14c027aa233be850595f2a33c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36514 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

%6
%7

") .arg(tr("FocusWriter"), QApplication::applicationVersion(), tr("A simple fullscreen word processor"), - tr("Copyright © 2008-%1 Graeme Gott").arg("2016"), + tr("Copyright © 2008-%1 Graeme Gott").arg("2017"), tr("Released under the GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\""), tr("Uses icons from the Oxygen icon theme").arg("\"http://www.oxygen-icons.org/\""), tr("Used under the LGPL 3 license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) From 71511fd0b6ce2d58eed7be79d1998a3614ea9802 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 26 Jan 2017 09:35:10 -0500 Subject: [PATCH 334/630] Replace deprecated code. --- focuswriter.pro | 3 +++ src/block_stats.cpp | 4 ++-- src/spelling/dictionary_provider_hunspell.cpp | 4 ++-- src/spelling/dictionary_provider_voikko.cpp | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index 027e1708..bc0dd576 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -18,6 +18,9 @@ macx { QMAKE_INFO_PLIST = resources/mac/Info.plist } +DEFINES += QT_DEPRECATED_WARNINGS +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050800 + # Allow in-tree builds !win32 { MOC_DIR = build diff --git a/src/block_stats.cpp b/src/block_stats.cpp index b9df86b5..121260de 100644 --- a/src/block_stats.cpp +++ b/src/block_stats.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -79,7 +79,7 @@ void BlockStats::update(const QString& text) } else if (i->isSpace()) { word = false; m_spaces++; - } else if (*i != 0x2019 && *i != 0x0027 && *i != 0x002d) { + } else if (*i != u'’' && *i != '\'' && *i != '-') { word = false; } } diff --git a/src/spelling/dictionary_provider_hunspell.cpp b/src/spelling/dictionary_provider_hunspell.cpp index 86a9366d..8dc18260 100644 --- a/src/spelling/dictionary_provider_hunspell.cpp +++ b/src/spelling/dictionary_provider_hunspell.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -150,7 +150,7 @@ QStringRef DictionaryHunspell::check(const QString& string, int start_at) const case QChar::Punctuation_FinalQuote: case QChar::Punctuation_Other: - if (c == 0x0027 || c == 0x2019) { + if (c == '\'' || c == u'’') { chars++; break; } diff --git a/src/spelling/dictionary_provider_voikko.cpp b/src/spelling/dictionary_provider_voikko.cpp index f0949e79..0d6fa723 100644 --- a/src/spelling/dictionary_provider_voikko.cpp +++ b/src/spelling/dictionary_provider_voikko.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2013, 2014 Graeme Gott + * Copyright (C) 2013, 2014, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -144,7 +144,7 @@ QStringRef DictionaryVoikko::check(const QString& string, int start_at) const } length += chars; chars = 1; - } else if (c != 0x2019 && c != 0x0027) { + } else if (c != '\'' && c != u'’') { if (index != -1) { is_word = true; } From 53cbd6690cf5724cbcf9cae74f027bf505cf8bc7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 1 Feb 2017 06:51:21 -0500 Subject: [PATCH 335/630] Update AppData installation directory. --- focuswriter.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/focuswriter.pro b/focuswriter.pro index bc0dd576..42f2733f 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -277,7 +277,7 @@ macx { desktop.path = $$DATADIR/applications/ appdata.files = resources/unix/focuswriter.appdata.xml - appdata.path = $$DATADIR/appdata/ + appdata.path = $$DATADIR/metainfo/ man.files = resources/unix/focuswriter.1 man.path = $$PREFIX/share/man/man1 From b4fde1069b4cecd46057816be992c4b704a00ab4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 24 Feb 2017 04:42:31 -0500 Subject: [PATCH 336/630] Remove unnecessary include. --- src/theme.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/theme.cpp b/src/theme.cpp index 35f088d6..8866edc8 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,6 @@ #include "theme.h" -#include "session.h" #include "utils.h" #include From e06231e674093ac3e36e113d814b226d30bb2d3f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 24 Feb 2017 04:41:25 -0500 Subject: [PATCH 337/630] FIXED: HiDPI blurred text backgrounds were offset and scaled. --- src/theme.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/theme.cpp b/src/theme.cpp index 8866edc8..c55f42b1 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -412,10 +412,11 @@ QImage Theme::render(const QSize& background, QRect& foreground, const int margi // Blur behind foreground if (blurEnabled()) { - QImage blurred = image.copy(foreground); + QImage blurred = image.copy(QRect(foreground.topLeft() * pixelratio, foreground.bottomRight() * pixelratio)); painter.save(); painter.translate(foreground.x(), foreground.y()); + painter.scale(1.0 / pixelratio, 1.0 / pixelratio); qt_blurImage(&painter, blurred, blurRadius() * 2, true, false); painter.restore(); } From 5db5ebdadeae58da5829592f31c600393530e68d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 24 Feb 2017 05:25:16 -0500 Subject: [PATCH 338/630] FIXED: HiDPI backgrounds were not centered properly. --- src/theme.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/theme.cpp b/src/theme.cpp index c55f42b1..30d39738 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -385,8 +385,7 @@ QImage Theme::render(const QSize& background, QRect& foreground, const int margi QImage back = source.read(); back.setDevicePixelRatio(pixelratio); - const qreal scale = pixelratio / 2.0; - painter.drawImage(QPointF((background.width() - scaled.width()) * scale, (background.height() - scaled.height()) * scale), back); + painter.drawImage(QPointF((background.width() - scaled.width()) / 2, (background.height() - scaled.height()) / 2), back); } else if (backgroundType() == 1) { // Tiled QImage back(backgroundImage()); From e466e2aa6fada35f49c36977f29a537727c9133d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 24 Feb 2017 05:46:40 -0500 Subject: [PATCH 339/630] FIXED: HiDPI centered backgrounds were also scaled. --- src/theme.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/theme.cpp b/src/theme.cpp index 30d39738..a121390e 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -378,6 +378,7 @@ QImage Theme::render(const QSize& background, QRect& foreground, const int margi break; default: // Centered + scaled /= pixelratio; break; } source.setScaledSize(scaled * pixelratio); From ddfec1c16bcd4ccd552112ee977721027ccde7f1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 24 Feb 2017 08:55:06 -0500 Subject: [PATCH 340/630] Remove old imageformat plugin from Windows install. --- resources/windows/installer.nsi | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 63cdac02..03cb6291 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -183,7 +183,6 @@ Section "install" File $%QTDIR%\plugins\bearer\qnativewifibearer.dll SetOutPath $INSTDIR\imageformats - File $%QTDIR%\plugins\imageformats\qdds.dll File $%QTDIR%\plugins\imageformats\qgif.dll File $%QTDIR%\plugins\imageformats\qicns.dll File $%QTDIR%\plugins\imageformats\qico.dll From 0bce9d05b2e7b9ef86d9adef77a719d83c842011 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 9 Mar 2017 13:37:12 -0500 Subject: [PATCH 341/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 8 +- resources/unix/focuswriter.desktop | 6 +- resources/unix/po/zh_TW.po | 23 +- translations/focuswriter_de.ts | 12 +- translations/focuswriter_fi.ts | 28 +- translations/focuswriter_id.ts | 12 +- translations/focuswriter_zh_TW.ts | 1855 ++++++++++++++++++++++++ 7 files changed, 1900 insertions(+), 44 deletions(-) create mode 100644 translations/focuswriter_zh_TW.ts diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 4c5f9cab..07f31ec6 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -36,7 +36,7 @@ FocusWriter FocusWriter FocusWriter - FocusWriter + 焦點作家 Fullscreen word processor Volskerm woordverwerker Textový procesor v režimu na celou obrazovku @@ -66,7 +66,7 @@ Tam ekran kelime işlemci Повноекранний текстовий редактор 全屏文字编辑器 - 全螢幕文字處理器 + 全螢幕的文字處理器

FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

@@ -97,7 +97,7 @@

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

FocusWriter це простий текстовий редактор, що дозволяє повністю зосередитися на роботі. Він використовує висувний інтерфейс, який з’являється при наведенні стрілки миші до країв екрану. Це дає можливість досягти максимально зручного для користувача зовнішнього вигляду, який не відволікає, а дозволяє повністю зануритися в роботу.

FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。

-

FocusWriter 是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫作。

+

「焦點作家」是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫作。

FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

FocusWriter laat jou toe om jou omgewing te verpersoonlik. Jy kan tema's gebruik wat die lettertipe, kleure, en agtergrondfoto verander om 'n eie atmosfeer te skep. Die program ondersteun statistiek wat deurlopend opdateer, daaglikse doelwitte, veelvoudige oop dokumente, speltoetsing, en vele meer.

FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

@@ -126,7 +126,7 @@

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

FocusWriter дозволить вам налаштувати своє робоче оточення шляхом створення тем, в яких можна управляти шрифтами, кольорами та фоновими зображеннями. Також текстовий редактор вміє вести статистику, оновлювану в реальному часі, ставити щоденні робочі цілі, відкривати декілька документів одночасно, перевіряти орфографію і багато чого ще.

FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功能,如动态更新统计,每日计划,多标签页,拼写检查等。

-

FocusWriter 可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統計;每日目標、多重開啟文件、拼寫檢查等等的多種功能。

+

「焦點作家」可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統計;每日目標、多重開啟文件、拼字校正等等的多種功能。

Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

Voorts laai die program die dokument waarmee jy besig was, asook presies waar in die dokument jy besig was, wanneer jy die program oopmaak. So kan jy dadelik aan die werk spring.

Navíc, když otevřete program, vaše rozdělaná práce se automaticky nahraje a otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase budete moci okamžitě dát.

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index f08444bc..d3372c88 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -33,7 +33,7 @@ Name[tr]=FocusWriter Name[uk]=FocusWriter Name[vi]=FocusWriter Name[zh_CN]=FocusWriter -Name[zh_TW]=FocusWriter +Name[zh_TW]=焦點作家 GenericName=Fullscreen Word Processor GenericName[af_ZA]=Volskerm woordverwerker GenericName[cs]=Celoobrazovkový editor textu @@ -67,7 +67,7 @@ GenericName[tr]=Tam Ekran Kelime İşlemci GenericName[uk]=Повноекранний текстовий редактор GenericName[vi]=Phần mềm soạn thảo văn bản dạng toàn màn hình GenericName[zh_CN]=全屏文本编辑器 -GenericName[zh_TW]=全螢幕文字處理器 +GenericName[zh_TW]=全螢幕的文字處理器 Comment=Write without distractions Comment[af_ZA]=Skryf sonder afleidings Comment[cs]=Pište bez rozptylování @@ -101,7 +101,7 @@ Comment[tr]=Dikkat dağıtıcılar olmadan yazın Comment[uk]=Писати не відволікаючись Comment[vi]=Không tạo sự xao nhãng khi viết Comment[zh_CN]=专心致志地写作 -Comment[zh_TW]=專心寫作 +Comment[zh_TW]=不受干擾的專心寫作 Icon=focuswriter TryExec=focuswriter Exec=focuswriter %F diff --git a/resources/unix/po/zh_TW.po b/resources/unix/po/zh_TW.po index f06a79f5..1b70de69 100644 --- a/resources/unix/po/zh_TW.po +++ b/resources/unix/po/zh_TW.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# BrLi , 2017 # Jeff Huang , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-10-29 14:09+0000\n" -"Last-Translator: Jeff Huang \n" -"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/" +"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"PO-Revision-Date: 2017-02-28 13:41+0000\n" +"Last-Translator: BrLi \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/gottcode/" "focuswriter/language/zh_TW/)\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" @@ -21,11 +22,11 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "FocusWriter" +msgstr "焦點作家" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "全螢幕文字處理器" +msgstr "全螢幕的文字處理器" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -34,7 +35,7 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" -"FocusWriter 是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面" +"「焦點作家」是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面" "均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫" "作。" @@ -45,8 +46,8 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" -"FocusWriter 可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統" -"計;每日目標、多重開啟文件、拼寫檢查等等的多種功能。" +"「焦點作家」可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統" +"計;每日目標、多重開啟文件、拼字校正等等的多種功能。" #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -59,8 +60,8 @@ msgstr "" #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "全螢幕文字處理器" +msgstr "全螢幕的文字處理器" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "專心寫作" +msgstr "不受干擾的專心寫作" diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 1698266f..ec38e2c6 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -1119,11 +1119,11 @@ Bitter Skies - + Bittere Himmel Enchantment - + Verzauberung Gentle Blues @@ -1139,11 +1139,11 @@ Spy Games - + Spionagespiele Tranquility - + Ruhe Writing Desk @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Typographische Anführungszeichen des Dokuments aktualisieren Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Typographische Anführungszeichen der Auswahl aktualisieren &Spelling... diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index f10989fb..253b4b02 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -289,7 +289,7 @@ OpenDocument Flat XML - + Litteä OpenDocument-XML Office Open XML @@ -520,7 +520,7 @@ Remove current dictionary? - + Poistetaanko nykyinen sanakirja? Write byte order mark in plain text files @@ -532,19 +532,19 @@ User Interface - + Käyttöliittymä Always show scrollbar - + Näytä vierityspalkki aina Always show top bar - + Näytä yläpalkki aina Always show bottom bar - + Näytä alapalkki aina Reset Today @@ -1119,11 +1119,11 @@ Bitter Skies - + Karvaat taivaat Enchantment - + Lumous Gentle Blues @@ -1139,11 +1139,11 @@ Spy Games - + Vakoojaleikit Tranquility - + Rauha Writing Desk @@ -1503,7 +1503,7 @@ Pa&ge Setup... - + Sivuasetukset... &Close @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Päivitä dokumentin älykkäät lainausmerkit Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Päivitä valinnan älykkäät lainausmerkit &Spelling... @@ -1823,7 +1823,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 2fb24e69..b11430e1 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -283,7 +283,7 @@ OpenDocument Flat XML - + Buka berkas XML Office Open XML @@ -514,7 +514,7 @@ Remove current dictionary? - + Hilangkan kamus ini? Write byte order mark in plain text files @@ -526,19 +526,19 @@ User Interface - + Tampilan pengguna Always show scrollbar - + Scrollbar selalu tampak Always show top bar - + Bilah atas selalu tampak Always show bottom bar - + Bilah bawah selalu tampak Reset Today diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts new file mode 100644 index 00000000..6f18f542 --- /dev/null +++ b/translations/focuswriter_zh_TW.ts @@ -0,0 +1,1855 @@ + + + + + Alert + + Close (%1) + 關閉 (%1) + + + Collapse + 摺疊 + + + Expand + 展開 + + + + AlertLayer + + Dismiss Alert + 忽略警告 + + + Ctrl+D + Ctrl+D + + + + DailyProgress + + %1% of %Ln minute(s) + + %1%/%Ln 分鐘 + + + + %1% of %Ln word(s) + + %1%/%Ln 字 + + + + %Ln word(s) + + %Ln 個字 + + + + %Ln minute(s) + + %Ln 分鐘 + + + + 0% + 0% + + + + DailyProgressDialog + + Daily Progress + 每日進度 + + + Longest streak + 終極目標 + + + Current streak + 當前目標 + + + N/A + 不可用 + + + %n day(s) + + %n 天 + + + + %1 &ndash; %2 + %1 &n破折號; %2 + + + + DailyProgressLabel + + %1% of daily goal + 每日目標的 %1% + + + + DictionaryDialog + + Set Language + 設定語言 + + + + Document + + (Untitled %1) + (無標題 %1) + + + %1 (Read-Only) + %1 (唯讀) + + + Sorry + 抱歉 + + + Unable to save '%1'. + 無法儲存 '%1'。 + + + Save File As + 儲存檔案為 + + + Unable to overwrite '%1'. + 無法覆蓋 '%1'。 + + + Rename File + 重新命名檔案 + + + Unable to rename '%1'. + 無法重命名 '%1'。 + + + Reload File? + 重新載入檔案? + + + Reload the file '%1' from disk? + 重新從磁碟中載入檔案 '%1' ? + + + All unsaved changes will be lost. + 將遺失所有未儲存的變更。 + + + Reload + 重新載入 + + + Untitled %1 + 無標題 %1 + + + Question + 問題 + + + Saving as plain text will discard all formatting. Discard formatting? + 儲存為純文字將丟棄全部格式。是否要丟棄格式? + + + + DocumentWatcher + + File Changed + 檔案已更改 + + + The file '%1' was changed by another program. + 檔案 '%1' 已被其他程式更改。 + + + Do you want to reload the file? + 您要重新載入檔案嗎? + + + Reload + 重新載入 + + + Ignore + 忽略 + + + File Deleted + 檔案已刪除 + + + The file %1 was deleted by another program. + 檔案 %1 已被其他程式刪除。 + + + Do you want to save or close the file? + 您是否要儲存或關閉該檔案? + + + + DocxReader + + Unable to open archive. + 無法開啟存檔。 + + + + FindDialog + + Search for: + 搜尋: + + + Replace with: + 取代為: + + + Ignore case + 忽略大小寫 + + + Whole words only + 僅限完整單字 + + + Regular expressions + 正規表示式 + + + Search up + 向上搜尋 + + + Search down + 向下搜尋 + + + &Find + 尋找 (&F) + + + &Replace + 取代 (&R) + + + Replace &All + 取代全部 (&A) + + + Find + 尋找 + + + Replace + 取代 + + + Replace %n instance(s)? + + 取代 %n 個項目? + + + + Question + 問題 + + + Sorry + 抱歉 + + + Phrase not found. + 沒找到詞彙。 + + + + FormatManager + + OpenDocument Text + odf 文字 + + + OpenDocument Flat XML + OpenDocument 普通 XML + + + Office Open XML + Office Open XML + + + Rich Text Format + RTF 文字格式 + + + Plain Text + 純文字 + + + All Files + 所有檔案 + + + All Supported Files + 所有支援的檔案 + + + + Highlighter + + Add + 新增 + + + Check Spelling... + 拼字校正中… + + + (No suggestions found) + (找不到建議的詞彙) + + + + ImageButton + + Open Image + 打開圖像 + + + Images(%1) + 圖像(%1) + + + + LocaleDialog + + Select application language: + 選擇程式語言: + + + <System Language> + <系統語言> + + + Note + 注意 + + + Please restart this application for the change in language to take effect. + 請重新啟動本程式,以使語言的設定生效。 + + + + OdtReader + + Unable to open archive. + 無法打開封存檔 + + + + PreferencesDialog + + Preferences + 偏好設定 + + + General + 一般 + + + Statistics + 統計 + + + Toolbar + 工具列 + + + Spell Checking + 拼字校正 + + + Select Dictionary + 選擇詞典 + + + Sorry + 抱歉 + + + Unable to open archive. + 無法打開封存檔。 + + + The archive does not contain a usable dictionary. + 封存檔不包含可用的詞典。 + + + Question + 問題 + + + Shortcuts + 快捷鍵 + + + One or more shortcuts conflict. Do you wish to proceed? + 一個或多個快捷鍵衝突。您要繼續嗎? + + + The dictionary "%1" already exists. Do you want to replace it? + 詞典 "%1" 已經存在。您要取代它嗎? + + + Daily Goal + 每日目標 + + + None + + + + Minutes: + 分鐘: + + + Words: + 字數: + + + Editing + 編輯 + + + Always vertically center + 始終垂直置中 + + + Block insertion cursor + 塊狀游標 + + + Smooth fonts + 平滑字體 + + + Typewriter sounds + 打字機音效 + + + Smart quotes: + 智慧引號: + + + Double + 雙倍行距 + + + Single + 單線 + + + Scenes + 場景 + + + Divider: + 分隔符: + + + Saving + 儲存 + + + Automatically save changes + 自動儲存更改 + + + Remember cursor position + 記住游標位置 + + + Word count + 字數 + + + Page count + 頁數 + + + Paragraph count + 段落數 + + + Character count + 字元數 + + + Characters: + 字元: + + + Paragraphs: + 段落: + + + Word Count Algorithm + 字數統計規則 + + + Reset daily progress for today to zero? + 將今天的計劃進度歸零? + + + Remove current dictionary? + 移除當前詞典? + + + Write byte order mark in plain text files + 對純文字檔案寫入位元組順序記號 (BOM) + + + Default format: + 預設格式: + + + User Interface + 介面 + + + Always show scrollbar + 總是顯示滾動條 + + + Always show top bar + 總是顯示置頂欄 + + + Always show bottom bar + 總是顯示底邊欄 + + + Reset Today + 重設今日 + + + History + 歷史 + + + Remember history + 記住歷史 + + + Show streaks + 顯示目標 + + + Minimum progress for streaks: + 達到目標的最小進度: + + + Detect word boundaries + 偵測單詞邊界 + + + Divide character count by six + 字元數除以6 + + + Count each letter as a word + 將每個字母都計算為一個詞 + + + Page Count Algorithm + 頁數統計演算法 + + + Style + 樣式 + + + Icons Only + 僅圖示 + + + Text Only + 僅文字 + + + Text Alongside Icons + 文字在圖示旁 + + + Text Under Icons + 文字在圖示下 + + + Text Position: + 文字位置: + + + Actions + 動作 + + + Move Up + 上移 + + + Move Down + 下移 + + + Add Separator + 新增分隔符 + + + Command + 命令 + + + Shortcut + 快捷鍵 + + + Action + 動作 + + + Check spelling as you type + 輸入時校正拼字 + + + Ignore words in UPPERCASE + 忽略大寫單詞 + + + Ignore words with numbers + 忽略帶數字的單詞 + + + Language + 語言 + + + Add + 新增 + + + Remove + 移除 + + + Personal Dictionary + 個人詞典 + + + + RtfReader + + Not a supported RTF file. + 不支援的RTF檔案。 + + + + RtfTokenizer + + Unexpectedly reached end of file. + 不可預期的終止檔案。 + + + + SceneList + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + Move Scenes Up + 向上移動場景 + + + Ctrl+Shift+Up + Ctrl+Shift+Down + + + Toggle Scene List + 打開/關閉場景列表 + + + Shift+F4 + Shift+F4 + + + Show scene list (%1) + 顯示場景列表(%1) + + + Hide scene list (%1) + 隱藏場景列表(%1) + + + Filter + 過濾器 + + + Move Scenes Down + 向下移動場景 + + + Resize scene list + 調整場景列表大小 + + + + Session + + Default + 預設 + + + + SessionManager + + Manage Sessions + 管理工作階段 + + + S&essions + 工作階段 (&E) + + + New + 建立 + + + Duplicate + 再製 + + + Rename + 重新命名 + + + Delete + 刪除 + + + Switch To + 切換到 + + + New Session + 新工作階段 + + + Duplicate Session + 再製工作階段 + + + Rename Session + 重命名工作階段 + + + Question + 問題 + + + Delete selected session? + 刪除所選工作階段? + + + Session name: + 工作階段名稱: + + + Sorry + 抱歉 + + + The requested session name is already in use. + 請求的工作階段名稱已在使用中。 + + + &New... + 建立 (&N)... + + + Ctrl+Shift+N + Ctrl+Shift+N + + + &Manage... + 管理 (&M)... + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + Clear + 清除 + + + Reset to Default + 恢復預設 + + + Shortcut: + 快捷鍵: + + + + SmartQuote + + Replacing quotation marks... + 更換引號... + + + Please Wait + 請等待 + + + + SpellChecker + + Check Spelling + 拼字校正 + + + &Add + 新增 (&A) + + + &Ignore + 忽略 (&I) + + + I&gnore All + 忽略全部 (&g) + + + &Change + 更改 (&C) + + + C&hange All + 更改全部 (&h) + + + Not in dictionary: + 不在詞典中: + + + Change to: + 更改為: + + + Checking spelling... + 拼字校正… + + + Cancel + 取消 + + + Please wait + 請稍候 + + + Continue checking at beginning of file? + 從檔案起始點繼續檢查? + + + Spell check complete. + 拼字校正完成。 + + + + SymbolsDialog + + Symbols + 符號 + + + Recently used symbols + 最近使用過的符號 + + + All symbols + 全部符號 + + + Details + 詳情 + + + Name: + 名稱: + + + Insert + 插入 + + + + SymbolsModel + + Blocks + + + + Scripts + 文字 + + + + Theme + + Untitled %1 + 無標題 %1 + + + + ThemeDialog + + Name: + 名稱: + + + No Image + 無圖像 + + + Tiled + 平鋪 + + + Centered + 置中 + + + Stretched + 拉伸 + + + Scaled + 比例 + + + Zoomed + 縮放 + + + Opacity: + 不透明度: + + + Position: + 位置: + + + Width: + 寬度: + + + Round Text Background Corners + 文字背景圓潤化 + + + Radius: + 半徑: + + + Blur Text Background + 模糊文字背景 + + + Text Background Drop Shadow + 文字背景陰影 + + + Vertical Offset: + 垂直偏移量: + + + Margins + 頁邊距 + + + Window: + 視窗: + + + Page: + 頁面: + + + Indent first line + 首行縮排 + + + Above: + 段前: + + + Below: + 段後: + + + Remove + 移除 + + + Edit Theme + 編輯主題 + + + Window Background + 視窗背景 + + + Type: + 類型: + + + Color: + 顏色: + + + Image: + 圖像: + + + pixels + 像素 + + + Left + + + + Text Background + 文字背景 + + + Right + + + + Text + 文字 + + + Font: + 字體: + + + Misspelled: + 拼字錯誤: + + + Line Spacing + 行距 + + + Single + 單線 + + + 1.5 Lines + 1.5 倍行距 + + + Double + 雙倍行距 + + + Proportional + 比例行距 + + + Height: + 高度: + + + Paragraph Spacing + 段落間距 + + + Tab Width: + Tab 寬度: + + + New Theme + 建立主題 + + + + ThemeManager + + Themes + 主題 + + + Default + 預設 + + + Bitter Skies + 天打雷劈 + + + Enchantment + 魔幻魅力 + + + Gentle Blues + 溫和藍調 + + + Old School + 古早駭客 + + + Space Dreams + 太空夢遊 + + + Spy Games + 諜報遊戲 + + + Tranquility + 寧靜雲海 + + + Writing Desk + 書桌 + + + New + 新增 + + + Duplicate + 再製 + + + Custom + 自訂 + + + Edit + 編輯 + + + Delete + 刪除 + + + Import + 匯入 + + + Export + 匯出 + + + Question + 問題 + + + Delete theme '%1'? + 確定要刪除 '%1' 這個主題嗎? + + + Themes (%1) + 主題 (%1) + + + Import Theme + 匯入主題 + + + Export Theme + 匯出主題 + + + + Timer + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + Question + 問題 + + + Delete timer? + 刪除定時器? + + + <b>Words:</b> %L1 + <b>單詞數:</b> %L1 + + + <b>Pages:</b> %L1 + <b>頁數:</b> %L1 + + + <b>Paragraphs:</b> %L1 + <b>段落數:</b> %L1 + + + <b>Characters:</b> %L1 / %L2 + <b>字元數:</b> %L1 / %L2 + + + Set Delay + 設定延遲 + + + Set Time + 設定時間 + + + Delay: + 延遲: + + + Time: + 時間: + + + HH:mm:ss + HH:mm:ss + + + Alarm + 鬧鈴 + + + Type: + 類型: + + + Memo: + 備忘錄: + + + Edit + 編輯 + + + Delete + 刪除 + + + + TimerDisplay + + HH:mm:ss + HH:mm:ss + + + No timers running + 無定時器執行 + + + + TimerManager + + Timers + 定時器 + + + New + 建立 + + + Recent + 最近的 + + + Question + 問題 + + + Cancel editing timers? + 取消編輯定時器嗎? + + + +HH:mm:ss + +HH:mm:ss + + + %1 - %2 + %1 - %2 + + + + Window + + Loading themes + 載入主題 + + + Loading sounds + 載入音效 + + + Untitled + 無標題 + + + Open File + 打開檔案 + + + About FocusWriter + 關於「焦點作家」 + + + FocusWriter + 焦點作家 + + + A simple fullscreen word processor + 一個簡潔的全螢幕文字處理軟體 + + + Copyright &copy; 2008-%1 Graeme Gott + &copy; 2008-%1 Graeme Gott 版權所有 + + + Released under the <a href=%1>GPL 3</a> license + 以 <a href=%1>GPL 3</a> 許可協議發布 + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + 使用 <a href=%1>Oxygen</a> 圖示主題 + + + Used under the <a href=%1>LGPL 3</a> license + 遵照 <a href=%1>LGPL 3</a> 許可使用 + + + Characters: %L1 / %L2 + 字元數:%L1 / %L2 + + + Pages: %L1 + 頁數:%L1 + + + Paragraphs: %L1 + 段落數:%L1 + + + Words: %L1 + 單詞數:%L1 + + + Opening %1 + 正在打開 %1 + + + (Untitled %1) + (無標題 %1) + + + List all documents + 列出所有檔案 + + + Switch to Next Document + 切換到下一檔案 + + + Switch to Previous Document + 切換到上一檔案 + + + Switch to First Document + 切換到第一個檔案 + + + Switch to Last Document + 切換到最後一個檔案 + + + Switch to Document %1 + 切換到檔案 %1 + + + Loading settings + 載入設定中 + + + Emergency cache is not writable. + 緊急快取是不可寫的。 + + + Warning + 警告 + + + FocusWriter was not shut down cleanly. + 焦點作家沒有完全關閉。 + + + Restore from the emergency cache? + 從緊急快取中還原? + + + Some files could not be opened. + 有些檔案無法打開。 + + + Some files were opened Read-Only. + 一些檔案以唯讀方式打開。 + + + '%1' is newer than the cached copy. + '%1' 比快取的副本新。 + + + Overwrite newer file? + 覆蓋較新的檔案? + + + Save Changes? + 儲存更改? + + + Save changes to the file '%1' before closing? + 在關閉之前儲存檔案 '%1' ? + + + Your changes will be lost if you don't save them. + 如果你選擇不儲存,所有更改都會丟失。 + + + Unable to load typewriter sounds. + 無法載入打字機音效。 + + + &File + 檔案 (&F) + + + &New + 新增 (&N) + + + &Open... + 開啟 (&O)... + + + Reloa&d + 重新載入 (&d) + + + &Save + 儲存 (&S) + + + Save &As... + 另存為 (&A)... + + + &Rename... + 重新命名 (&R)... + + + Save A&ll + 全部儲存 (&L) + + + Manage Sessions + 管理工作階段 + + + New Session + 新工作階段 + + + &Print... + 列印 (&P) + + + Pa&ge Setup... + 頁面設定 (&g) + + + &Close + 關閉 (&C) + + + &Quit + 退出 (&Q) + + + Ctrl+Q + Ctrl+Q + + + &Edit + 編輯 (&E) + + + &Undo + 復原 (&U) + + + &Redo + 取消復原 (&R) + + + Cu&t + 剪下 (&T) + + + &Copy + 複製 (&C) + + + &Paste + 貼上 (&P) + + + Paste &Unformatted + 無格式貼上 (&U) + + + Ctrl+Shift+V + Ctrl+Shift+V + + + Select &All + 全選 (&A) + + + Select &Scene + 選擇場景 (&S) + + + Ctrl+Shift+A + Ctrl+Shift+A + + + Fo&rmat + 格式 (&R) + + + &Heading + 標題 (&H) + + + Heading &1 + 標題 &1 + + + Heading &2 + 標題 &2 + + + Heading &3 + 標題 &3 + + + Heading &4 + 標題 &4 + + + Heading &5 + 標題 &5 + + + Heading &6 + 標題 &6 + + + &Normal + 普通 (&N) + + + &Bold + 粗體 (&B) + + + &Italic + 斜體 (&I) + + + &Underline + 底線 (&U) + + + Stri&kethrough + 刪除線 (&K) + + + Ctrl+K + Ctrl+K + + + Sup&erscript + 上標 (&E) + + + Ctrl+^ + Ctrl+^ + + + &Subscript + 下標 (&S) + + + Ctrl+_ + Ctrl+_ + + + Align &Left + 向左對齊 (&L) + + + Ctrl+{ + Ctrl+{ + + + Align &Center + 置中 (&C) + + + Ctrl+| + Ctrl+| + + + Align &Right + 向右對齊 (&R) + + + Ctrl+} + Ctrl+} + + + Align &Justify + 兩側對齊 (&J) + + + Ctrl+J + Ctrl+J + + + &Decrease Indent + 減少縮排 (&D) + + + Ctrl+< + Ctrl+< + + + I&ncrease Indent + 增加縮排 (&N) + + + Ctrl+> + Ctrl+> + + + Le&ft to Right Block + 從左到右 (&F) + + + Ri&ght to Left Block + 從右到左 (&G) + + + &Tools + 工具(&T) + + + &Find... + 尋找(&F)... + + + Find &Next + 尋找下一個(&N) + + + Find Pre&vious + 尋找上一個(&V) + + + &Replace... + 取代(&R)… + + + Ctrl+R + Ctrl+R + + + Smart &Quotes + 智慧引號(&Q) + + + Update &Document + 更新檔案(&D) + + + Update Document Smart Quotes + 將檔案中所有引號更新為智慧引號 + + + Update &Selection + 更新所選(&S) + + + Update Selection Smart Quotes + 將選取的引號更新為智慧引號 + + + &Spelling... + 拼字 (&S)… + + + F7 + F7 + + + Set &Language... + 設定語言(&L) + + + &Timers... + 定時器(&T)… + + + S&ymbols... + 符號…(&y) + + + &Daily Progress + 每日進度(&D) + + + &Settings + 設定(&S) + + + Show &Toolbar + 顯示工具列(&T) + + + Show &Menu Icons + 顯示選單圖示(&M) + + + F&ocused Text + 聚焦文字(&F) + + + &Fullscreen + 全螢幕(&F) + + + F11 + F11 + + + Esc + Esc + + + M&inimize + 最小化 (&I) + + + Ctrl+M + Ctrl+M + + + &Themes... + 主題 (&T)… + + + &Preferences... + 偏好設定 (&P)… + + + Focus Off + 關閉聚焦 + + + Focus One Line + 聚焦一行 + + + Focus Three Lines + 聚焦三行 + + + &Paragraph + 段落 (&P) + + + Focus Paragraph + 聚焦段落 + + + Ctrl+Shift+` + Ctrl+Shift+` + + + &Help + 幫助 (&H) + + + Application &Language... + 程式語言 (&L)… + + + Some files were unsupported and could not be opened. + 某些檔案不受支援,無法開啟。 + + + &Off + 關閉 (&O) + + + One &Line + 單行 (&L) + + + &Three Lines + 三行 (&T) + + + &About + 關於 (&A) + + + About &Qt + 關於 &Qt + + + From 0122138e39a6d618df6cd7738a6df8fbe8356ab9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 9 Mar 2017 13:42:50 -0500 Subject: [PATCH 342/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index ef860ad2..7251c103 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.6.4 +----- +* Updated AppData installation directory. +* FIXED: HiDPI blurred text backgrounds were offset and scaled. +* FIXED: HiDPI backgrounds were not centered properly. +* FIXED: HiDPI centered backgrounds were also scaled. +* Translation updates: Chinese (Taiwan), Finnish, German, Indonesian. + 1.6.3 ----- * Updated included hunspell. diff --git a/focuswriter.pro b/focuswriter.pro index 42f2733f..9c5c00cf 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -29,7 +29,7 @@ DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050800 } # Set program version -VERSION = 1.6.3 +VERSION = 1.6.4 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index efaf7227..a6b1b746 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.3' +VERSION='1.6.4' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 03cb6291..f719370b 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 3 +!define VERSIONPATCH 4 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index a51bfbf7..24f599d8 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.3 +SET VERSION=1.6.4 ECHO Copying executable MKDIR %APP% From 17268c2b8690a37c099f565bead73bd85d48b209 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 9 Mar 2017 14:18:39 -0500 Subject: [PATCH 343/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 85426301..5dfb40cf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.4-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Thu, 09 Mar 2017 18:52:34 +0000 + focuswriter (1.6.3-1) unstable; urgency=medium * New upstream release From fb2e4cb84ca898ac601a45c0d60567096df0b22a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 28 May 2017 17:10:30 -0400 Subject: [PATCH 344/630] Use QSaveFile to prevent data loss. --- src/document_writer.cpp | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/document_writer.cpp b/src/document_writer.cpp index 3d69910f..49af5557 100644 --- a/src/document_writer.cpp +++ b/src/document_writer.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013, 2014, 2015 Graeme Gott + * Copyright (C) 2012, 2013, 2014, 2015, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,17 +23,10 @@ #include "odt_writer.h" #include "rtf_writer.h" -#include +#include #include #include -#if defined(Q_OS_UNIX) -#include -#elif defined(Q_OS_WIN) -#include -#include -#endif - //----------------------------------------------------------------------------- DocumentWriter::DocumentWriter() : @@ -61,8 +54,8 @@ bool DocumentWriter::write() bool saved = false; - QFile file(m_filename); - if (!file.open(QFile::WriteOnly | QFile::Truncate)) { + QSaveFile file(m_filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { return false; } @@ -95,13 +88,11 @@ bool DocumentWriter::write() saved = stream.status() == QTextStream::Ok; } -#if defined(Q_OS_UNIX) - saved &= (fsync(file.handle()) == 0); -#elif defined(Q_OS_WIN) - saved &= (FlushFileBuffers(reinterpret_cast(_get_osfhandle(file.handle()))) != 0); -#endif - saved &= (file.error() == QFile::NoError); - file.close(); + if (saved) { + saved = file.commit(); + } else { + file.cancelWriting(); + } return saved; } From 2e5b3e6a00cecd75fef5c5918735bba6246b5c1e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 30 May 2017 09:24:08 -0400 Subject: [PATCH 345/630] Update hunspell to 1.6.1 --- src/spelling/hunspell/Makefile.am | 17 +- src/spelling/hunspell/Makefile.in | 793 ------------------------- src/spelling/hunspell/affentry.cxx | 9 +- src/spelling/hunspell/affentry.hxx | 9 +- src/spelling/hunspell/affixmgr.cxx | 35 +- src/spelling/hunspell/affixmgr.hxx | 9 +- src/spelling/hunspell/atypes.hxx | 9 +- src/spelling/hunspell/baseaffix.hxx | 9 +- src/spelling/hunspell/csutil.cxx | 66 +- src/spelling/hunspell/csutil.hxx | 9 +- src/spelling/hunspell/filemgr.cxx | 9 +- src/spelling/hunspell/filemgr.hxx | 9 +- src/spelling/hunspell/hashmgr.cxx | 25 +- src/spelling/hunspell/hashmgr.hxx | 10 +- src/spelling/hunspell/htypes.hxx | 9 +- src/spelling/hunspell/hunspell.cxx | 28 +- src/spelling/hunspell/hunspell.dsp | 156 ----- src/spelling/hunspell/hunspell.hxx | 16 +- src/spelling/hunspell/hunzip.cxx | 9 +- src/spelling/hunspell/hunzip.hxx | 9 +- src/spelling/hunspell/langnum.hxx | 9 +- src/spelling/hunspell/license.hunspell | 33 +- src/spelling/hunspell/phonet.cxx | 3 +- src/spelling/hunspell/replist.cxx | 39 +- src/spelling/hunspell/replist.hxx | 9 +- src/spelling/hunspell/suggestmgr.cxx | 416 ++++++++----- src/spelling/hunspell/suggestmgr.hxx | 13 +- src/spelling/hunspell/utf_info.cxx | 9 +- src/spelling/hunspell/w_char.hxx | 9 +- 29 files changed, 448 insertions(+), 1337 deletions(-) delete mode 100644 src/spelling/hunspell/Makefile.in delete mode 100644 src/spelling/hunspell/hunspell.dsp diff --git a/src/spelling/hunspell/Makefile.am b/src/spelling/hunspell/Makefile.am index 25769459..315612ee 100644 --- a/src/spelling/hunspell/Makefile.am +++ b/src/spelling/hunspell/Makefile.am @@ -1,20 +1,19 @@ -lib_LTLIBRARIES = libhunspell-1.5.la -libhunspell_1_5_includedir = $(includedir)/hunspell -libhunspell_1_5_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ - hashmgr.cxx hunspell.cxx \ - suggestmgr.cxx license.myspell license.hunspell \ +lib_LTLIBRARIES = libhunspell-1.6.la +libhunspell_1_6_includedir = $(includedir)/hunspell +libhunspell_1_6_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ + hashmgr.cxx hunspell.cxx suggestmgr.cxx \ phonet.cxx filemgr.cxx hunzip.cxx replist.cxx \ affentry.hxx htypes.hxx affixmgr.hxx \ csutil.hxx atypes.hxx suggestmgr.hxx \ baseaffix.hxx hashmgr.hxx langnum.hxx \ phonet.hxx filemgr.hxx hunzip.hxx replist.hxx -libhunspell_1_5_include_HEADERS=hunspell.hxx hunspell.h hunvisapi.h \ +libhunspell_1_6_include_HEADERS=hunspell.hxx hunspell.h hunvisapi.h \ w_char.hxx atypes.hxx csutil.hxx htypes.hxx -libhunspell_1_5_la_DEPENDENCIES=utf_info.cxx -libhunspell_1_5_la_LDFLAGS=-no-undefined +libhunspell_1_6_la_DEPENDENCIES=utf_info.cxx +libhunspell_1_6_la_LDFLAGS=-no-undefined -version-info 0:1:0 AM_CXXFLAGS=$(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL -EXTRA_DIST=hunspell.dsp README utf_info.cxx +EXTRA_DIST=utf_info.cxx diff --git a/src/spelling/hunspell/Makefile.in b/src/spelling/hunspell/Makefile.in deleted file mode 100644 index 184ca6e0..00000000 --- a/src/spelling/hunspell/Makefile.in +++ /dev/null @@ -1,793 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/hunspell -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ - $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ - $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ - $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ - $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \ - $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ - $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ - $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ - $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ - $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/wchar_t.m4 \ - $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xsize.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libhunspell_1_5_include_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = hunvisapi.h -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(libhunspell_1_5_includedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libhunspell_1_5_la_LIBADD = -am_libhunspell_1_5_la_OBJECTS = affentry.lo affixmgr.lo csutil.lo \ - hashmgr.lo hunspell.lo suggestmgr.lo phonet.lo filemgr.lo \ - hunzip.lo replist.lo -libhunspell_1_5_la_OBJECTS = $(am_libhunspell_1_5_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libhunspell_1_5_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(libhunspell_1_5_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libhunspell_1_5_la_SOURCES) -DIST_SOURCES = $(libhunspell_1_5_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(libhunspell_1_5_include_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/hunvisapi.h.in \ - $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs README -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ -CATOBJEXT = @CATOBJEXT@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CURSESLIB = @CURSESLIB@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GENCAT = @GENCAT@ -GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ -GLIBC2 = @GLIBC2@ -GLIBC21 = @GLIBC21@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_ASPRINTF = @HAVE_ASPRINTF@ -HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ -HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ -HAVE_SNPRINTF = @HAVE_SNPRINTF@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -HAVE_WPRINTF = @HAVE_WPRINTF@ -HUNSPELL_VERSION_MAJOR = @HUNSPELL_VERSION_MAJOR@ -HUNSPELL_VERSION_MINOR = @HUNSPELL_VERSION_MINOR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INSTOBJEXT = @INSTOBJEXT@ -INTLBISON = @INTLBISON@ -INTLLIBS = @INTLLIBS@ -INTLOBJS = @INTLOBJS@ -INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ -INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBMULTITHREAD = @LIBMULTITHREAD@ -LIBOBJS = @LIBOBJS@ -LIBPTH = @LIBPTH@ -LIBPTH_PREFIX = @LIBPTH_PREFIX@ -LIBS = @LIBS@ -LIBTHREAD = @LIBTHREAD@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBC = @LTLIBC@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ -LTLIBOBJS = @LTLIBOBJS@ -LTLIBPTH = @LTLIBPTH@ -LTLIBTHREAD = @LTLIBTHREAD@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSUB = @POSUB@ -PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ -RANLIB = @RANLIB@ -READLINELIB = @READLINELIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -WINDRES = @WINDRES@ -WOE32 = @WOE32@ -WOE32DLL = @WOE32DLL@ -XFAILED = @XFAILED@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -lib_LTLIBRARIES = libhunspell-1.5.la -libhunspell_1_5_includedir = $(includedir)/hunspell -libhunspell_1_5_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \ - hashmgr.cxx hunspell.cxx \ - suggestmgr.cxx license.myspell license.hunspell \ - phonet.cxx filemgr.cxx hunzip.cxx replist.cxx \ - affentry.hxx htypes.hxx affixmgr.hxx \ - csutil.hxx atypes.hxx suggestmgr.hxx \ - baseaffix.hxx hashmgr.hxx langnum.hxx \ - phonet.hxx filemgr.hxx hunzip.hxx replist.hxx - -libhunspell_1_5_include_HEADERS = hunspell.hxx hunspell.h hunvisapi.h \ - w_char.hxx atypes.hxx csutil.hxx htypes.hxx - -libhunspell_1_5_la_DEPENDENCIES = utf_info.cxx -libhunspell_1_5_la_LDFLAGS = -no-undefined -AM_CXXFLAGS = $(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL -EXTRA_DIST = hunspell.dsp README utf_info.cxx -all: all-am - -.SUFFIXES: -.SUFFIXES: .cxx .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/hunspell/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/hunspell/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -hunvisapi.h: $(top_builddir)/config.status $(srcdir)/hunvisapi.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libhunspell-1.5.la: $(libhunspell_1_5_la_OBJECTS) $(libhunspell_1_5_la_DEPENDENCIES) $(EXTRA_libhunspell_1_5_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libhunspell_1_5_la_LINK) -rpath $(libdir) $(libhunspell_1_5_la_OBJECTS) $(libhunspell_1_5_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affentry.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affixmgr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filemgr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashmgr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hunspell.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hunzip.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phonet.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/replist.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suggestmgr.Plo@am__quote@ - -.cxx.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< - -.cxx.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cxx.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libhunspell_1_5_includeHEADERS: $(libhunspell_1_5_include_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libhunspell_1_5_include_HEADERS)'; test -n "$(libhunspell_1_5_includedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libhunspell_1_5_includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libhunspell_1_5_includedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libhunspell_1_5_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libhunspell_1_5_includedir)" || exit $$?; \ - done - -uninstall-libhunspell_1_5_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libhunspell_1_5_include_HEADERS)'; test -n "$(libhunspell_1_5_includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libhunspell_1_5_includedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libhunspell_1_5_includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libhunspell_1_5_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_5_includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libhunspell_1_5_includeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_5_includeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/spelling/hunspell/affentry.cxx b/src/spelling/hunspell/affentry.cxx index 70b468c0..4ef0c00d 100644 --- a/src/spelling/hunspell/affentry.cxx +++ b/src/spelling/hunspell/affentry.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/affentry.hxx b/src/spelling/hunspell/affentry.hxx index 09240300..4bafc043 100644 --- a/src/spelling/hunspell/affentry.hxx +++ b/src/spelling/hunspell/affentry.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/affixmgr.cxx b/src/spelling/hunspell/affixmgr.cxx index f288fcb8..ffce7bb1 100644 --- a/src/spelling/hunspell/affixmgr.cxx +++ b/src/spelling/hunspell/affixmgr.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -1290,8 +1287,8 @@ int AffixMgr::cpdrep_check(const char* word, int wl) { // search every occurence of the pattern in the word while ((r = strstr(r, reptable[i].pattern.c_str())) != NULL) { std::string candidate(word); - size_t type = r == word ? 1 : 0; - if (r - word + reptable[i].pattern.size() == lenp) + size_t type = r == word && langnum != LANG_hu ? 1 : 0; + if (r - word + reptable[i].pattern.size() == lenp && langnum != LANG_hu) type += 2; candidate.replace(r - word, lenp, reptable[i].outstrings[type]); if (candidate_check(candidate.c_str(), candidate.size())) @@ -1494,9 +1491,8 @@ int AffixMgr::defcpd_check(hentry*** words, } inline int AffixMgr::candidate_check(const char* word, int len) { - struct hentry* rv = NULL; - rv = lookup(word); + struct hentry* rv = lookup(word); if (rv) return 1; @@ -1817,7 +1813,7 @@ struct hentry* AffixMgr::compound_check(const std::string& word, // LANG_hu section: spec. Hungarian rule if (langnum == LANG_hu) { // calculate syllable number of the word - numsyllable += get_syllable(st.substr(i)); + numsyllable += get_syllable(st.substr(0, i)); // + 1 word, if syllable number of the prefix > 1 (hungarian // convention) if (pfx && (get_syllable(pfx->getKey()) > 1)) @@ -1902,7 +1898,7 @@ struct hentry* AffixMgr::compound_check(const std::string& word, (compoundend && TESTAFF(rv->astr, compoundend, rv->alen))) && (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || ((cpdmaxsyllable != 0) && - (numsyllable + get_syllable(std::string(HENTRY_WORD(rv), rv->clen)) <= + (numsyllable + get_syllable(std::string(HENTRY_WORD(rv), rv->blen)) <= cpdmaxsyllable))) && ( // test CHECKCOMPOUNDPATTERN @@ -2048,7 +2044,7 @@ struct hentry* AffixMgr::compound_check(const std::string& word, wordnum = oldwordnum2; // perhaps second word is a compound word (recursive call) - if (wordnum < maxwordnum) { + if (wordnum + 2 < maxwordnum) { rv = compound_check(st.substr(i), wordnum + 1, numsyllable, maxwordnum, wnum + 1, words, rwords, 0, is_sug, info); @@ -2383,7 +2379,7 @@ int AffixMgr::compound_check_morph(const char* word, // LANG_hu section: spec. Hungarian rule if (langnum == LANG_hu) { // calculate syllable number of the word - numsyllable += get_syllable(st.substr(i)); + numsyllable += get_syllable(st.substr(0, i)); // + 1 word, if syllable number of the prefix > 1 (hungarian // convention) @@ -2621,7 +2617,7 @@ int AffixMgr::compound_check_morph(const char* word, wordnum = oldwordnum2; // perhaps second word is a compound word (recursive call) - if ((wordnum < maxwordnum) && (ok == 0)) { + if ((wordnum + 2 < maxwordnum) && (ok == 0)) { compound_check_morph((word + i), strlen(word + i), wordnum + 1, numsyllable, maxwordnum, wnum + 1, words, rwords, 0, result, &presult); @@ -3045,10 +3041,9 @@ struct hentry* AffixMgr::affix_check(const char* word, int len, const FLAG needflag, char in_compound) { - struct hentry* rv = NULL; // check all prefixes (also crossed with suffixes if allowed) - rv = prefix_check(word, len, in_compound, needflag); + struct hentry* rv = prefix_check(word, len, in_compound, needflag); if (rv) return rv; @@ -3292,7 +3287,7 @@ int AffixMgr::expand_rootword(struct guessword* wlst, wlst[nh].word = mystrdup(ts); if (!wlst[nh].word) return 0; - wlst[nh].allow = (1 == 0); + wlst[nh].allow = false; wlst[nh].orig = NULL; nh++; // add special phonetic version @@ -3300,7 +3295,7 @@ int AffixMgr::expand_rootword(struct guessword* wlst, wlst[nh].word = mystrdup(phon); if (!wlst[nh].word) return nh - 1; - wlst[nh].allow = (1 == 0); + wlst[nh].allow = false; wlst[nh].orig = mystrdup(ts); if (!wlst[nh].orig) return nh - 1; @@ -3341,7 +3336,7 @@ int AffixMgr::expand_rootword(struct guessword* wlst, wlst[nh].word = mystrdup(prefix.c_str()); if (!wlst[nh].word) return nh - 1; - wlst[nh].allow = (1 == 0); + wlst[nh].allow = false; wlst[nh].orig = mystrdup(newword.c_str()); if (!wlst[nh].orig) return nh - 1; diff --git a/src/spelling/hunspell/affixmgr.hxx b/src/spelling/hunspell/affixmgr.hxx index 83a4b42c..d41e69cf 100644 --- a/src/spelling/hunspell/affixmgr.hxx +++ b/src/spelling/hunspell/affixmgr.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/atypes.hxx b/src/spelling/hunspell/atypes.hxx index fe495f78..f8415231 100644 --- a/src/spelling/hunspell/atypes.hxx +++ b/src/spelling/hunspell/atypes.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/baseaffix.hxx b/src/spelling/hunspell/baseaffix.hxx index 579c030b..9191dba4 100644 --- a/src/spelling/hunspell/baseaffix.hxx +++ b/src/spelling/hunspell/baseaffix.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/csutil.cxx b/src/spelling/hunspell/csutil.cxx index ac5cd986..df97b577 100644 --- a/src/spelling/hunspell/csutil.cxx +++ b/src/spelling/hunspell/csutil.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -518,18 +515,20 @@ unsigned char ccase(const struct cs_info* csconv, int nIndex) { w_char upper_utf(w_char u, int langnum) { unsigned short idx = (u.h << 8) + u.l; - if (idx != unicodetoupper(idx, langnum)) { - u.h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); - u.l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); + unsigned short upridx = unicodetoupper(idx, langnum); + if (idx != upridx) { + u.h = (unsigned char)(upridx >> 8); + u.l = (unsigned char)(upridx & 0x00FF); } return u; } w_char lower_utf(w_char u, int langnum) { unsigned short idx = (u.h << 8) + u.l; - if (idx != unicodetolower(idx, langnum)) { - u.h = (unsigned char)(unicodetolower(idx, langnum) >> 8); - u.l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); + unsigned short lwridx = unicodetolower(idx, langnum); + if (idx != lwridx) { + u.h = (unsigned char)(lwridx >> 8); + u.l = (unsigned char)(lwridx & 0x00FF); } return u; } @@ -551,12 +550,13 @@ std::string& mkallsmall(std::string& s, const struct cs_info* csconv) { } std::vector& mkallsmall_utf(std::vector& u, - int langnum) { + int langnum) { for (size_t i = 0; i < u.size(); ++i) { unsigned short idx = (u[i].h << 8) + u[i].l; - if (idx != unicodetolower(idx, langnum)) { - u[i].h = (unsigned char)(unicodetolower(idx, langnum) >> 8); - u[i].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); + unsigned short lwridx = unicodetolower(idx, langnum); + if (idx != lwridx) { + u[i].h = (unsigned char)(lwridx >> 8); + u[i].l = (unsigned char)(lwridx & 0x00FF); } } return u; @@ -565,9 +565,10 @@ std::vector& mkallsmall_utf(std::vector& u, std::vector& mkallcap_utf(std::vector& u, int langnum) { for (size_t i = 0; i < u.size(); i++) { unsigned short idx = (u[i].h << 8) + u[i].l; - if (idx != unicodetoupper(idx, langnum)) { - u[i].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); - u[i].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); + unsigned short upridx = unicodetoupper(idx, langnum); + if (idx != upridx) { + u[i].h = (unsigned char)(upridx >> 8); + u[i].l = (unsigned char)(upridx & 0x00FF); } } return u; @@ -583,9 +584,10 @@ std::string& mkinitcap(std::string& s, const struct cs_info* csconv) { std::vector& mkinitcap_utf(std::vector& u, int langnum) { if (!u.empty()) { unsigned short idx = (u[0].h << 8) + u[0].l; - if (idx != unicodetoupper(idx, langnum)) { - u[0].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8); - u[0].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF); + unsigned short upridx = unicodetoupper(idx, langnum); + if (idx != upridx) { + u[0].h = (unsigned char)(upridx >> 8); + u[0].l = (unsigned char)(upridx & 0x00FF); } } return u; @@ -601,9 +603,10 @@ std::string& mkinitsmall(std::string& s, const struct cs_info* csconv) { std::vector& mkinitsmall_utf(std::vector& u, int langnum) { if (!u.empty()) { unsigned short idx = (u[0].h << 8) + u[0].l; - if (idx != unicodetolower(idx, langnum)) { - u[0].h = (unsigned char)(unicodetolower(idx, langnum) >> 8); - u[0].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF); + unsigned short lwridx = unicodetolower(idx, langnum); + if (idx != lwridx) { + u[0].h = (unsigned char)(lwridx >> 8); + u[0].l = (unsigned char)(lwridx & 0x00FF); } } return u; @@ -2531,12 +2534,17 @@ int get_captype_utf8(const std::vector& word, int langnum) { size_t ncap = 0; size_t nneutral = 0; size_t firstcap = 0; - for (size_t i = 0; i < word.size(); ++i) { - unsigned short idx = (word[i].h << 8) + word[i].l; - if (idx != unicodetolower(idx, langnum)) + + std::vector::const_iterator it = word.begin(); + std::vector::const_iterator it_end = word.end(); + while (it != it_end) { + unsigned short idx = (it->h << 8) + it->l; + unsigned short lwridx = unicodetolower(idx, langnum); + if (idx != lwridx) ncap++; - if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) + if (unicodetoupper(idx, langnum) == lwridx) nneutral++; + ++it; } if (ncap) { unsigned short idx = (word[0].h << 8) + word[0].l; diff --git a/src/spelling/hunspell/csutil.hxx b/src/spelling/hunspell/csutil.hxx index 302d7e90..5d83f809 100644 --- a/src/spelling/hunspell/csutil.hxx +++ b/src/spelling/hunspell/csutil.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/filemgr.cxx b/src/spelling/hunspell/filemgr.cxx index b7c89b2b..4a14de87 100644 --- a/src/spelling/hunspell/filemgr.cxx +++ b/src/spelling/hunspell/filemgr.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/filemgr.hxx b/src/spelling/hunspell/filemgr.hxx index 991e924a..62433aee 100644 --- a/src/spelling/hunspell/filemgr.hxx +++ b/src/spelling/hunspell/filemgr.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/hashmgr.cxx b/src/spelling/hunspell/hashmgr.cxx index 1de16901..23421b56 100644 --- a/src/spelling/hunspell/hashmgr.cxx +++ b/src/spelling/hunspell/hashmgr.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -363,12 +360,11 @@ int HashMgr::add_hidden_capitalized_word(const std::string& word, } // detect captype and modify word length for UTF-8 encoding -int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { +int HashMgr::get_clen_and_captype(const std::string& word, int* captype, std::vector &workbuf) { int len; if (utf8) { - std::vector dest_utf; - len = u8_u16(dest_utf, word); - *captype = get_captype_utf8(dest_utf, langnum); + len = u8_u16(workbuf, word); + *captype = get_captype_utf8(workbuf, langnum); } else { len = word.size(); *captype = get_captype(word, csconv); @@ -376,6 +372,11 @@ int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { return len; } +int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { + std::vector workbuf; + return get_clen_and_captype(word, captype, workbuf); +} + // remove word (personal dictionary function for standalone applications) int HashMgr::remove(const std::string& word) { struct hentry* dp = lookup(word.c_str()); @@ -527,6 +528,8 @@ int HashMgr::load_tables(const char* tpath, const char* key) { // loop through all words on much list and add to hash // table and create word and affix strings + std::vector workbuf; + while (dict->getline(ts)) { mychomp(ts); // split each line into word and morphological description @@ -599,7 +602,7 @@ int HashMgr::load_tables(const char* tpath, const char* key) { } int captype; - int wcl = get_clen_and_captype(ts, &captype); + int wcl = get_clen_and_captype(ts, &captype, workbuf); const std::string *dp_str = dp.empty() ? NULL : &dp; // add the word and its index plus its capitalized form optionally if (add_word(ts, wcl, flags, al, dp_str, false) || diff --git a/src/spelling/hunspell/hashmgr.hxx b/src/spelling/hunspell/hashmgr.hxx index 812171af..da485d7a 100644 --- a/src/spelling/hunspell/hashmgr.hxx +++ b/src/spelling/hunspell/hashmgr.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -125,6 +122,7 @@ class HashMgr { private: int get_clen_and_captype(const std::string& word, int* captype); + int get_clen_and_captype(const std::string& word, int* captype, std::vector &workbuf); int load_tables(const char* tpath, const char* key); int add_word(const std::string& word, int wcl, diff --git a/src/spelling/hunspell/htypes.hxx b/src/spelling/hunspell/htypes.hxx index 1e6c1183..8f66a008 100644 --- a/src/spelling/hunspell/htypes.hxx +++ b/src/spelling/hunspell/htypes.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/hunspell.cxx b/src/spelling/hunspell/hunspell.cxx index abcdb8f3..1ef11df3 100644 --- a/src/spelling/hunspell/hunspell.cxx +++ b/src/spelling/hunspell/hunspell.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -241,8 +238,8 @@ size_t HunspellImpl::cleanword2(std::string& dest, const char* q = src.c_str(); // first skip over any leading blanks - while ((*q != '\0') && (*q == ' ')) - q++; + while (*q == ' ') + ++q; // now strip off any trailing periods (recording their presence) *pabbrev = 0; @@ -278,8 +275,8 @@ void HunspellImpl::cleanword(std::string& dest, int firstcap = 0; // first skip over any leading blanks - while ((*q != '\0') && (*q == ' ')) - q++; + while (*q == ' ') + ++q; // now strip off any trailing periods (recording their presence) *pabbrev = 0; @@ -1664,7 +1661,7 @@ std::string HunspellImpl::get_xml_par(const char* par) { if (end == '>') end = '<'; else if (end != '\'' && end != '"') - return 0; // bad XML + return dest; // bad XML for (par++; *par != '\0' && *par != end; ++par) { dest.push_back(*par); } @@ -1707,14 +1704,17 @@ bool HunspellImpl::input_conv(const std::string& word, std::string& dest) { // return the beginning of the element (attr == NULL) or the attribute const char* HunspellImpl::get_xml_pos(const char* s, const char* attr) { const char* end = strchr(s, '>'); - const char* p = s; if (attr == NULL) return end; - do { + const char* p = s; + while (1) { p = strstr(p, attr); if (!p || p >= end) return 0; - } while (*(p - 1) != ' ' && *(p - 1) != '\n'); + if (*(p - 1) == ' ' || *(p - 1) == '\n') + break; + p += strlen(attr); + } return p + strlen(attr); } diff --git a/src/spelling/hunspell/hunspell.dsp b/src/spelling/hunspell/hunspell.dsp deleted file mode 100644 index 660d807c..00000000 --- a/src/spelling/hunspell/hunspell.dsp +++ /dev/null @@ -1,156 +0,0 @@ -# Microsoft Developer Studio Project File - Name="hunspell" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=hunspell - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "hunspell.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "hunspell.mak" CFG="hunspell - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "hunspell - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "hunspell - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "hunspell - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "W32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "W32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x40e /d "NDEBUG" -# ADD RSC /l 0x40e /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "hunspell - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "W32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "W32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x40e /d "_DEBUG" -# ADD RSC /l 0x40e /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "hunspell - Win32 Release" -# Name "hunspell - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\affentry.cxx -# End Source File -# Begin Source File - -SOURCE=.\affixmgr.cxx -# End Source File -# Begin Source File - -SOURCE=.\csutil.cxx -# End Source File -# Begin Source File - -SOURCE=.\hashmgr.cxx -# End Source File -# Begin Source File - -SOURCE=.\hunspell.cxx -# End Source File -# Begin Source File - -SOURCE=.\suggestmgr.cxx -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\affentry.hxx -# End Source File -# Begin Source File - -SOURCE=.\affixmgr.hxx -# End Source File -# Begin Source File - -SOURCE=.\atypes.hxx -# End Source File -# Begin Source File - -SOURCE=.\baseaffix.hxx -# End Source File -# Begin Source File - -SOURCE=.\csutil.hxx -# End Source File -# Begin Source File - -SOURCE=.\hashmgr.hxx -# End Source File -# Begin Source File - -SOURCE=.\htypes.hxx -# End Source File -# Begin Source File - -SOURCE=.\langnum.hxx -# End Source File -# Begin Source File - -SOURCE=.\hunspell.hxx -# End Source File -# Begin Source File - -SOURCE=.\suggestmgr.hxx -# End Source File -# End Group -# End Target -# End Project diff --git a/src/spelling/hunspell/hunspell.hxx b/src/spelling/hunspell/hunspell.hxx index 48dd278f..a06bdd43 100644 --- a/src/spelling/hunspell/hunspell.hxx +++ b/src/spelling/hunspell/hunspell.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -83,9 +80,12 @@ #define MAXSUGGESTION 15 #define MAXSHARPS 5 -#define MAXWORDLEN 176 -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +#ifndef MAXWORDLEN +#define MAXWORDLEN 100 +#endif + +#if defined __GNUC__ && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) # define H_DEPRECATED __attribute__((__deprecated__)) #elif defined(_MSC_VER) && (_MSC_VER >= 1300) # define H_DEPRECATED __declspec(deprecated) diff --git a/src/spelling/hunspell/hunzip.cxx b/src/spelling/hunspell/hunzip.cxx index b96d06aa..8962b100 100644 --- a/src/spelling/hunspell/hunzip.cxx +++ b/src/spelling/hunspell/hunzip.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/hunzip.hxx b/src/spelling/hunspell/hunzip.hxx index f4b02bff..ea2bc58d 100644 --- a/src/spelling/hunspell/hunzip.hxx +++ b/src/spelling/hunspell/hunzip.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/langnum.hxx b/src/spelling/hunspell/langnum.hxx index ef53f4ee..a64d3d78 100644 --- a/src/spelling/hunspell/langnum.hxx +++ b/src/spelling/hunspell/langnum.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/license.hunspell b/src/spelling/hunspell/license.hunspell index dc2ce9c1..18835adf 100644 --- a/src/spelling/hunspell/license.hunspell +++ b/src/spelling/hunspell/license.hunspell @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Laszlo Nemeth (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): * David Einstein @@ -24,21 +21,21 @@ * Giuseppe Modugno * Gianluca Turconi * Simon Brouwer - * Noll Janos - * Biro Arpad - * Goldman Eleonora - * Sarlos Tamas - * Bencsath Boldizsar - * Halacsy Peter - * Dvornik Laszlo - * Gefferth Andras + * Noll János + * Bíró Árpád + * Goldman Eleonóra + * Sarlós Tamás + * Bencsáth Boldizsár + * Halácsy Péter + * Dvornik László + * Gefferth András * Nagy Viktor - * Varga Daniel + * Varga Dániel * Chris Halls * Rene Engelhard * Bram Moolenaar * Dafydd Jones - * Harri Pitkanen + * Harri Pitkänen * Andras Timar * Tor Lillqvist * @@ -55,7 +52,3 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ - -#ifndef MOZILLA_CLIENT -# include "config.h" -#endif diff --git a/src/spelling/hunspell/phonet.cxx b/src/spelling/hunspell/phonet.cxx index b97bbe88..69601a28 100644 --- a/src/spelling/hunspell/phonet.cxx +++ b/src/spelling/hunspell/phonet.cxx @@ -254,8 +254,7 @@ std::string phonet(const std::string& inword, phonetable& parms) { } /** end of while (parms.rules[n][0] == c) **/ } /** end of if (n >= 0) **/ if (z0 == 0) { - if (k && !p0 && target.size() < len && c != '\0' && - (1 || target.empty() || target[target.size()-1] != c)) { + if (k && !p0 && target.size() < len && c != '\0') { /** condense only double letters **/ target.push_back(c); /// printf("\n setting \n"); diff --git a/src/spelling/hunspell/replist.cxx b/src/spelling/hunspell/replist.cxx index 89d4caa7..cabe382b 100644 --- a/src/spelling/hunspell/replist.cxx +++ b/src/spelling/hunspell/replist.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -102,23 +99,20 @@ replentry* RepList::item(int n) { int RepList::find(const char* word) { int p1 = 0; int p2 = pos - 1; + int ret = -1; while (p1 <= p2) { - int m = (p1 + p2) / 2; + int m = ((unsigned)p1 + (unsigned)p2) >> 1; int c = strncmp(word, dat[m]->pattern.c_str(), dat[m]->pattern.size()); if (c < 0) p2 = m - 1; else if (c > 0) p1 = m + 1; - else { // scan back for a longer match - for (p1 = m - 1; p1 >= 0; --p1) - if (!strncmp(word, dat[p1]->pattern.c_str(), dat[p1]->pattern.size())) - m = p1; - else if (dat[p1]->pattern.size() < dat[m]->pattern.size()) - break; - return m; + else { // scan in the right half for a longer match + ret = m; + p1 = m + 1; } } - return -1; + return ret; } std::string RepList::replace(const char* word, int ind, bool atstart) { @@ -169,20 +163,11 @@ int RepList::add(const std::string& in_pat1, const std::string& pat2) { // sort to the right place in the list int i; for (i = pos - 1; i > 0; i--) { - int c = strncmp(r->pattern.c_str(), dat[i-1]->pattern.c_str(), dat[i-1]->pattern.size()); - if (c > 0) + if (strcmp(r->pattern.c_str(), dat[i - 1]->pattern.c_str()) < 0) { + dat[i] = dat[i - 1]; + } else break; - else if (c == 0) { // subpatterns match. Patterns can't be identical since would catch earlier - for (int j = i - 2; j > 0 && !strncmp(dat[i-1]->pattern.c_str(), dat[j]->pattern.c_str(), dat[i-1]->pattern.size()); --j) - if (dat[j]->pattern.size() > r->pattern.size() || - (dat[j]->pattern.size() == r->pattern.size() && strncmp(dat[j]->pattern.c_str(), r->pattern.c_str(), r->pattern.size()) > 0)) { - i = j; - break; - } - break; - } } - memmove(dat + i + 1, dat + i, (pos - i - 1) * sizeof(replentry *)); dat[i] = r; return 0; } diff --git a/src/spelling/hunspell/replist.hxx b/src/spelling/hunspell/replist.hxx index 2f9d350c..1e3efa41 100644 --- a/src/spelling/hunspell/replist.hxx +++ b/src/spelling/hunspell/replist.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/suggestmgr.cxx b/src/spelling/hunspell/suggestmgr.cxx index 6dff02f1..73ea91e3 100644 --- a/src/spelling/hunspell/suggestmgr.cxx +++ b/src/spelling/hunspell/suggestmgr.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -1050,12 +1047,12 @@ void SuggestMgr::ngsuggest(std::vector& wlst, phonetable* ph = (pAMgr) ? pAMgr->get_phonetable() : NULL; std::string target; std::string candidate; + std::vector w_candidate; if (ph) { if (utf8) { - std::vector _w; - u8_u16(_w, word); - mkallcap_utf(_w, langnum); - u16_u8(candidate, _w); + u8_u16(w_candidate, word); + mkallcap_utf(w_candidate, langnum); + u16_u8(candidate, w_candidate); } else { candidate.assign(word); if (!nonbmp) @@ -1069,6 +1066,15 @@ void SuggestMgr::ngsuggest(std::vector& wlst, FLAG nongramsuggest = pAMgr ? pAMgr->get_nongramsuggest() : FLAG_NULL; FLAG onlyincompound = pAMgr ? pAMgr->get_onlyincompound() : FLAG_NULL; + std::vector w_word, w_target; + if (utf8) { + u8_u16(w_word, word); + u8_u16(w_target, target); + } + + std::string f; + std::vector w_f; + for (size_t i = 0; i < rHMgr.size(); ++i) { while (0 != (hp = rHMgr[i]->walk_hashtable(col, hp))) { if ((hp->astr) && (pAMgr) && @@ -1079,15 +1085,48 @@ void SuggestMgr::ngsuggest(std::vector& wlst, TESTAFF(hp->astr, onlyincompound, hp->alen))) continue; - sc = ngram(3, word, HENTRY_WORD(hp), NGRAM_LONGER_WORSE + low) + - leftcommonsubstring(word, HENTRY_WORD(hp)); + if (utf8) { + u8_u16(w_f, HENTRY_WORD(hp)); + + int leftcommon = leftcommonsubstring(w_word, w_f); + if (low) { + // lowering dictionary word + mkallsmall_utf(w_f, langnum); + } + sc = ngram(3, w_word, w_f, NGRAM_LONGER_WORSE) + leftcommon; + } else { + f.assign(HENTRY_WORD(hp)); + + int leftcommon = leftcommonsubstring(word, f.c_str()); + if (low) { + // lowering dictionary word + mkallsmall(f, csconv); + } + sc = ngram(3, word, f, NGRAM_LONGER_WORSE) + leftcommon; + } // check special pronounciation - std::string f; + f.clear(); if ((hp->var & H_OPT_PHON) && copy_field(f, HENTRY_DATA(hp), MORPH_PHON)) { - int sc2 = ngram(3, word, f, NGRAM_LONGER_WORSE + low) + - +leftcommonsubstring(word, f.c_str()); + int sc2; + if (utf8) { + u8_u16(w_f, f); + + int leftcommon = leftcommonsubstring(w_word, w_f); + if (low) { + // lowering dictionary word + mkallsmall_utf(w_f, langnum); + } + sc2 = ngram(3, w_word, w_f, NGRAM_LONGER_WORSE) + leftcommon; + } else { + int leftcommon = leftcommonsubstring(word, f.c_str()); + if (low) { + // lowering dictionary word + mkallsmall(f, csconv); + } + sc2 = ngram(3, word, f, NGRAM_LONGER_WORSE) + leftcommon; + } if (sc2 > sc) sc = sc2; } @@ -1095,16 +1134,22 @@ void SuggestMgr::ngsuggest(std::vector& wlst, int scphon = -20000; if (ph && (sc > 2) && (abs(n - (int)hp->clen) <= 3)) { if (utf8) { - std::vector _w; - u8_u16(_w, HENTRY_WORD(hp)); - mkallcap_utf(_w, langnum); - u16_u8(candidate, _w); + u8_u16(w_candidate, HENTRY_WORD(hp)); + mkallcap_utf(w_candidate, langnum); + u16_u8(candidate, w_candidate); } else { - candidate.assign(HENTRY_WORD(hp)); + candidate = HENTRY_WORD(hp); mkallcap(candidate, csconv); } - std::string target2 = phonet(candidate, *ph); - scphon = 2 * ngram(3, target, target2, NGRAM_LONGER_WORSE); + f = phonet(candidate, *ph); + if (utf8) { + u8_u16(w_f, f); + scphon = 2 * ngram(3, w_target, w_f, + NGRAM_LONGER_WORSE); + } else { + scphon = 2 * ngram(3, target, f, + NGRAM_LONGER_WORSE); + } } if (sc > scores[lp]) { @@ -1134,22 +1179,33 @@ void SuggestMgr::ngsuggest(std::vector& wlst, // find minimum threshold for a passable suggestion // mangle original word three differnt ways // and score them to generate a minimum acceptable score + std::vector w_mw; int thresh = 0; for (int sp = 1; sp < 4; sp++) { if (utf8) { - u8_u16(u8, word); + w_mw = w_word; for (int k = sp; k < n; k += 4) { - u8[k].l = '*'; - u8[k].h = 0; + w_mw[k].l = '*'; + w_mw[k].h = 0; + } + + if (low) { + // lowering dictionary word + mkallsmall_utf(w_mw, langnum); } - std::string mw; - u16_u8(mw, u8); - thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); + + thresh += ngram(n, w_word, w_mw, NGRAM_ANY_MISMATCH); } else { - std::string mw(word); + std::string mw = word; for (int k = sp; k < n; k += 4) mw[k] = '*'; - thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH + low); + + if (low) { + // lowering dictionary word + mkallsmall(mw, csconv); + } + + thresh += ngram(n, word, mw, NGRAM_ANY_MISMATCH); } } thresh = thresh / 3; @@ -1181,7 +1237,7 @@ void SuggestMgr::ngsuggest(std::vector& wlst, if (roots[i]) { struct hentry* rp = roots[i]; - std::string f; + f.clear(); const char *field = NULL; if ((rp->var & H_OPT_PHON) && copy_field(f, HENTRY_DATA(rp), MORPH_PHON)) field = f.c_str(); @@ -1190,8 +1246,27 @@ void SuggestMgr::ngsuggest(std::vector& wlst, nc, field); for (int k = 0; k < nw; k++) { - sc = ngram(n, word, glst[k].word, NGRAM_ANY_MISMATCH + low) + - leftcommonsubstring(word, glst[k].word); + if (utf8) { + u8_u16(w_f, glst[k].word); + + int leftcommon = leftcommonsubstring(w_word, w_f); + if (low) { + // lowering dictionary word + mkallsmall_utf(w_f, langnum); + } + + sc = ngram(n, w_word, w_f, NGRAM_ANY_MISMATCH) + leftcommon; + } else { + f = glst[k].word; + + int leftcommon = leftcommonsubstring(word, f.c_str()); + if (low) { + // lowering dictionary word + mkallsmall(f, csconv); + } + + sc = ngram(n, word, f, NGRAM_ANY_MISMATCH) + leftcommon; + } if (sc > thresh) { if (sc > gscore[lp]) { @@ -1245,16 +1320,16 @@ void SuggestMgr::ngsuggest(std::vector& wlst, fact = (10.0 - maxd) / 5.0; } + std::vector w_gl; for (int i = 0; i < MAX_GUESS; i++) { if (guess[i]) { // lowering guess[i] std::string gl; int len; if (utf8) { - std::vector _w; - len = u8_u16(_w, guess[i]); - mkallsmall_utf(_w, langnum); - u16_u8(gl, _w); + len = u8_u16(w_gl, guess[i]); + mkallsmall_utf(w_gl, langnum); + u16_u8(gl, w_gl); } else { gl.assign(guess[i]); if (!nonbmp) @@ -1271,14 +1346,46 @@ void SuggestMgr::ngsuggest(std::vector& wlst, } // using 2-gram instead of 3, and other weightening - re = ngram(2, word, gl, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED) + - ngram(2, gl, word, NGRAM_ANY_MISMATCH + low + NGRAM_WEIGHTED); + if (utf8) { + u8_u16(w_gl, gl); + //w_gl is lowercase already at this point + re = ngram(2, w_word, w_gl, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + if (low) { + w_f = w_word; + // lowering dictionary word + mkallsmall_utf(w_f, langnum); + re += ngram(2, w_gl, w_f, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + } else { + re += ngram(2, w_gl, w_word, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + } + } else { + //gl is lowercase already at this point + re = ngram(2, word, gl, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + if (low) { + f = word; + // lowering dictionary word + mkallsmall(f, csconv); + re += ngram(2, gl, f, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + } else { + re += ngram(2, gl, word, NGRAM_ANY_MISMATCH + NGRAM_WEIGHTED); + } + } + int ngram_score, leftcommon_score; + if (utf8) { + //w_gl is lowercase already at this point + ngram_score = ngram(4, w_word, w_gl, NGRAM_ANY_MISMATCH); + leftcommon_score = leftcommonsubstring(w_word, w_gl); + } else { + //gl is lowercase already at this point + ngram_score = ngram(4, word, gl, NGRAM_ANY_MISMATCH); + leftcommon_score = leftcommonsubstring(word, gl.c_str()); + } gscore[i] = // length of longest common subsequent minus length difference 2 * _lcs - abs((int)(n - len)) + // weight length of the left common substring - leftcommonsubstring(word, gl.c_str()) + + leftcommon_score + // weight equal character positions (!nonbmp && commoncharacterpositions(word, gl.c_str(), &is_swap) ? 1 @@ -1286,7 +1393,7 @@ void SuggestMgr::ngsuggest(std::vector& wlst, // swap character (not neighboring) ((is_swap) ? 10 : 0) + // ngram - ngram(4, word, gl, NGRAM_ANY_MISMATCH + low) + + ngram_score + // weighted ngrams re + // different limit for dictionaries with PHONE rules @@ -1305,10 +1412,9 @@ void SuggestMgr::ngsuggest(std::vector& wlst, std::string gl; int len; if (utf8) { - std::vector _w; - len = u8_u16(_w, rootsphon[i]); - mkallsmall_utf(_w, langnum); - u16_u8(gl, _w); + len = u8_u16(w_gl, rootsphon[i]); + mkallsmall_utf(w_gl, langnum); + u16_u8(gl, w_gl); } else { gl.assign(rootsphon[i]); if (!nonbmp) @@ -1316,10 +1422,15 @@ void SuggestMgr::ngsuggest(std::vector& wlst, len = strlen(rootsphon[i]); } + // weight length of the left common substring + int leftcommon_score; + if (utf8) + leftcommon_score = leftcommonsubstring(w_word, w_gl); + else + leftcommon_score = leftcommonsubstring(word, gl.c_str()); // heuristic weigthing of ngram scores scoresphon[i] += 2 * lcslen(word, gl) - abs((int)(n - len)) + - // weight length of the left common substring - leftcommonsubstring(word, gl.c_str()); + leftcommon_score; } } @@ -1611,11 +1722,10 @@ std::string SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { if (HENTRY_DATA(rv)) p = (char*)strstr(HENTRY_DATA2(rv), MORPH_ALLOMORPH); while (p) { - struct hentry* rv2 = NULL; p += MORPH_TAG_LEN; int plen = fieldlen(p); std::string allomorph(p, plen); - rv2 = pAMgr->lookup(allomorph.c_str()); + struct hentry* rv2 = pAMgr->lookup(allomorph.c_str()); while (rv2) { // if (HENTRY_DATA(rv2) && get_sfxcount(HENTRY_DATA(rv2)) <= // sfxcount) { @@ -1724,10 +1834,10 @@ std::string SuggestMgr::suggest_gen(const std::vector& desc, const return result2; } -// generate an n-gram score comparing s1 and s2 +// generate an n-gram score comparing s1 and s2, UTF16 version int SuggestMgr::ngram(int n, - const std::string& s1, - const std::string& s2, + const std::vector& su1, + const std::vector& su2, int opt) { int nscore = 0; int ns; @@ -1735,68 +1845,36 @@ int SuggestMgr::ngram(int n, int l2; int test = 0; - if (utf8) { - std::vector su1; - std::vector su2; - l1 = u8_u16(su1, s1); - l2 = u8_u16(su2, s2); - if ((l2 <= 0) || (l1 == -1)) - return 0; - // lowering dictionary word - if (opt & NGRAM_LOWERING) - mkallsmall_utf(su2, langnum); - for (int j = 1; j <= n; j++) { - ns = 0; - for (int i = 0; i <= (l1 - j); i++) { - int k = 0; - for (int l = 0; l <= (l2 - j); l++) { - for (k = 0; k < j; k++) { - w_char& c1 = su1[i + k]; - w_char& c2 = su2[l + k]; - if ((c1.l != c2.l) || (c1.h != c2.h)) - break; - } - if (k == j) { - ns++; + l1 = su1.size(); + l2 = su2.size(); + if (l2 == 0) + return 0; + for (int j = 1; j <= n; j++) { + ns = 0; + for (int i = 0; i <= (l1 - j); i++) { + int k = 0; + for (int l = 0; l <= (l2 - j); l++) { + for (k = 0; k < j; k++) { + const w_char& c1 = su1[i + k]; + const w_char& c2 = su2[l + k]; + if ((c1.l != c2.l) || (c1.h != c2.h)) break; - } - } - if (k != j && opt & NGRAM_WEIGHTED) { - ns--; - test++; - if (i == 0 || i == l1 - j) - ns--; // side weight } - } - nscore = nscore + ns; - if (ns < 2 && !(opt & NGRAM_WEIGHTED)) - break; - } - } else { - l2 = s2.size(); - if (l2 == 0) - return 0; - l1 = s1.size(); - std::string t(s2); - if (opt & NGRAM_LOWERING) - mkallsmall(t, csconv); - for (int j = 1; j <= n; j++) { - ns = 0; - for (int i = 0; i <= (l1 - j); i++) { - //t is haystack, s1[i..i+j) is needle - if (t.find(s1.c_str()+i, 0, j) != std::string::npos) { + if (k == j) { ns++; - } else if (opt & NGRAM_WEIGHTED) { - ns--; - test++; - if (i == 0 || i == l1 - j) - ns--; // side weight + break; } } - nscore = nscore + ns; - if (ns < 2 && !(opt & NGRAM_WEIGHTED)) - break; + if (k != j && opt & NGRAM_WEIGHTED) { + ns--; + test++; + if (i == 0 || i == l1 - j) + ns--; // side weight + } } + nscore = nscore + ns; + if (ns < 2 && !(opt & NGRAM_WEIGHTED)) + break; } ns = 0; @@ -1808,46 +1886,92 @@ int SuggestMgr::ngram(int n, return ns; } -// length of the left common substring of s1 and (decapitalised) s2 -int SuggestMgr::leftcommonsubstring(const char* s1, const char* s2) { - if (utf8) { - std::vector su1; - std::vector su2; - int l1 = u8_u16(su1, s1); - int l2 = u8_u16(su2, s2); - // decapitalize dictionary word - if (complexprefixes) { - if (su1[l1 - 1] == su2[l2 - 1]) - return 1; - } else { - unsigned short idx = su2.empty() ? 0 : (su2[0].h << 8) + su2[0].l; - unsigned short otheridx = su1.empty() ? 0 : (su1[0].h << 8) + su1[0].l; - if (otheridx != idx && (otheridx != unicodetolower(idx, langnum))) - return 0; - int i; - for (i = 1; (i < l1) && (i < l2) && (su1[i].l == su2[i].l) && - (su1[i].h == su2[i].h); - i++) - ; - return i; +// generate an n-gram score comparing s1 and s2, non-UTF16 version +int SuggestMgr::ngram(int n, + const std::string& s1, + const std::string& s2, + int opt) { + int nscore = 0; + int ns; + int l1; + int l2; + int test = 0; + + l2 = s2.size(); + if (l2 == 0) + return 0; + l1 = s1.size(); + for (int j = 1; j <= n; j++) { + ns = 0; + for (int i = 0; i <= (l1 - j); i++) { + //s2 is haystack, s1[i..i+j) is needle + if (s2.find(s1.c_str()+i, 0, j) != std::string::npos) { + ns++; + } else if (opt & NGRAM_WEIGHTED) { + ns--; + test++; + if (i == 0 || i == l1 - j) + ns--; // side weight + } } + nscore = nscore + ns; + if (ns < 2 && !(opt & NGRAM_WEIGHTED)) + break; + } + + ns = 0; + if (opt & NGRAM_LONGER_WORSE) + ns = (l2 - l1) - 2; + if (opt & NGRAM_ANY_MISMATCH) + ns = abs(l2 - l1) - 2; + ns = (nscore - ((ns > 0) ? ns : 0)); + return ns; +} + +// length of the left common substring of s1 and (decapitalised) s2, UTF version +int SuggestMgr::leftcommonsubstring( + const std::vector& su1, + const std::vector& su2) { + int l1 = su1.size(); + int l2 = su2.size(); + // decapitalize dictionary word + if (complexprefixes) { + if (su1[l1 - 1] == su2[l2 - 1]) + return 1; } else { - if (complexprefixes) { - int l1 = strlen(s1); - int l2 = strlen(s2); - if (l1 <= l2 && s2[l1 - 1] == s2[l2 - 1]) - return 1; - } else if (csconv) { - const char* olds = s1; - // decapitalise dictionary word - if ((*s1 != *s2) && (*s1 != csconv[((unsigned char)*s2)].clower)) - return 0; - do { - s1++; - s2++; - } while ((*s1 == *s2) && (*s1 != '\0')); - return (int)(s1 - olds); - } + unsigned short idx = su2.empty() ? 0 : (su2[0].h << 8) + su2[0].l; + unsigned short otheridx = su1.empty() ? 0 : (su1[0].h << 8) + su1[0].l; + if (otheridx != idx && (otheridx != unicodetolower(idx, langnum))) + return 0; + int i; + for (i = 1; (i < l1) && (i < l2) && (su1[i].l == su2[i].l) && + (su1[i].h == su2[i].h); + i++) + ; + return i; + } + return 0; +} + +// length of the left common substring of s1 and (decapitalised) s2, non-UTF +int SuggestMgr::leftcommonsubstring( + const char* s1, + const char* s2) { + if (complexprefixes) { + int l1 = strlen(s1); + int l2 = strlen(s2); + if (l1 <= l2 && s2[l1 - 1] == s2[l2 - 1]) + return 1; + } else if (csconv) { + const char* olds = s1; + // decapitalise dictionary word + if ((*s1 != *s2) && (*s1 != csconv[((unsigned char)*s2)].clower)) + return 0; + do { + s1++; + s2++; + } while ((*s1 == *s2) && (*s1 != '\0')); + return (int)(s1 - olds); } return 0; } diff --git a/src/spelling/hunspell/suggestmgr.hxx b/src/spelling/hunspell/suggestmgr.hxx index ea6ad79e..19ffc03a 100644 --- a/src/spelling/hunspell/suggestmgr.hxx +++ b/src/spelling/hunspell/suggestmgr.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, @@ -173,8 +170,12 @@ class SuggestMgr { const std::vector&, int*, clock_t*); + int ngram(int n, const std::vector& su1, + const std::vector& su2, int opt); int ngram(int n, const std::string& s1, const std::string& s2, int opt); int mystrlen(const char* word); + int leftcommonsubstring(const std::vector& su1, + const std::vector& su2); int leftcommonsubstring(const char* s1, const char* s2); int commoncharacterpositions(const char* s1, const char* s2, int* is_swap); void bubblesort(char** rwd, char** rwd2, int* rsc, int n); diff --git a/src/spelling/hunspell/utf_info.cxx b/src/spelling/hunspell/utf_info.cxx index d1541b01..6bb847f2 100644 --- a/src/spelling/hunspell/utf_info.cxx +++ b/src/spelling/hunspell/utf_info.cxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, diff --git a/src/spelling/hunspell/w_char.hxx b/src/spelling/hunspell/w_char.hxx index c561ffc4..5accb756 100644 --- a/src/spelling/hunspell/w_char.hxx +++ b/src/spelling/hunspell/w_char.hxx @@ -1,6 +1,8 @@ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * + * Copyright (C) 2002-2017 Németh László + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -11,12 +13,7 @@ * for the specific language governing rights and limitations under the * License. * - * The Original Code is Hunspell, based on MySpell. - * - * The Initial Developers of the Original Code are - * Kevin Hendricks (MySpell) and Németh László (Hunspell). - * Portions created by the Initial Developers are Copyright (C) 2002-2005 - * the Initial Developers. All Rights Reserved. + * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, From 74fbcf0189ffc1ffd2fbb81cbbf64e697d72beb9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 30 May 2017 09:51:30 -0400 Subject: [PATCH 346/630] Update dictionaries. --- resources/windows/dictionaries.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index 8fb5a748..2291ae72 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='5.2.1.2' +loversion='5.3.3.2' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "http://download.documentfoundation.org/libreoffice/src/5.2.1/${lodict}.tar.xz" + curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/5.3.3/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' @@ -25,7 +25,7 @@ echo -n 'Downloading Armenian dictionary...' hydict='hy_am_e_1940_dict-1.1' hyfiles='hy_am_e_1940_dict-1.1' if [ ! -e "${hydict}.oxt" ]; then - curl -s -L -o "${hydict}.oxt" 'http://extensions.openoffice.org/en/download/4838' + curl -s -L -o "${hydict}.oxt" 'https://extensions.openoffice.org/en/download/4838' echo ' DONE' else echo ' SKIPPED' @@ -35,7 +35,7 @@ echo -n 'Downloading Esperanto dictionary...' eodict='esperantilo' eofiles='esperantilo' if [ ! -e "${eodict}.oxt" ]; then - curl -s -L -o "${eodict}.oxt" 'http://extensions.openoffice.org/en/download/4561' + curl -s -L -o "${eodict}.oxt" 'https://extensions.openoffice.org/en/download/4561' echo ' DONE' else echo ' SKIPPED' @@ -50,10 +50,10 @@ else fi echo -n 'Downloading Korean dictionary...' -kodict='korean_spell-checker-0-5-6-1_libo' -kofiles='korean_spell-checker-0-5-6-1_libo/dictionaries' +kodict='Korean_spell-checker-0.6.0-1_LibO' +kofiles='Korean_spell-checker-0.6.0-1_LibO/dictionaries' if [ ! -e "${kodict}.oxt" ]; then - curl -s -O "http://extensions.libreoffice.org/extension-center/korean-spellchecker/releases/0.5.6.1/${kodict}.oxt" + curl -s -O "https://extensions.libreoffice.org/extensions/korean-spellchecker//0-6-0-1/@@download/file/${kodict}.oxt" echo ' DONE' else echo ' SKIPPED' @@ -63,7 +63,7 @@ echo -n 'Downloading Indonesian dictionary...' iddict='id_id' idfiles='id_id' if [ ! -e "${iddict}.oxt" ]; then - curl -s -O "http://extensions.libreoffice.org/extension-center/indonesian-dictionary-kamus-indonesia-by-benitius/releases/2.0/${iddict}.oxt" + curl -s -O "https://extensions.libreoffice.org/extensions/indonesian-dictionary-kamus-indonesia-by-benitius/2.0/@@download/file/${iddict}.oxt" echo ' DONE' else echo ' SKIPPED' @@ -73,7 +73,7 @@ echo -n 'Downloading Turkish dictionary...' trdict='oo-turkish-dict-v1-2' trfiles="${trdict}/dictionaries" if [ ! -e "${trdict}.oxt" ]; then - curl -s -O "http://extensions.libreoffice.org/extension-center/turkish-spellcheck-dictionary/releases/1.2/${trdict}.oxt" + curl -s -O "https://extensions.libreoffice.org/extensions/turkish-spellcheck-dictionary/1.2/@@download/file/${trdict}.oxt" echo ' DONE' else echo ' SKIPPED' From 2e4dcf88addd9716c6e55440f444fa875c52cf79 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 30 May 2017 10:03:15 -0400 Subject: [PATCH 347/630] Sync translations with Transifex. --- translations/focuswriter_el.ts | 12 +-- translations/focuswriter_en.ts | 176 ++++++++++++++++----------------- translations/focuswriter_sv.ts | 2 +- 3 files changed, 95 insertions(+), 95 deletions(-) diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 6baa24be..3d94f7e7 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -532,7 +532,7 @@ User Interface - + Διεπαφή Χρήστη Always show scrollbar @@ -1119,11 +1119,11 @@ Bitter Skies - + Πικρά Ουράνια Enchantment - + Μαγεία Gentle Blues @@ -1139,11 +1139,11 @@ Spy Games - + Παιχνίδια Κατασκοπίας Tranquility - + Ηρεμία Writing Desk @@ -1823,7 +1823,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 5cdec35b..d14bbe25 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -287,10 +287,6 @@ OpenDocument Text - - OpenDocument Flat XML - - Office Open XML @@ -311,6 +307,10 @@ All Supported Files + + OpenDocument Flat XML + + Highlighter @@ -518,10 +518,6 @@ Reset daily progress for today to zero? - - Remove current dictionary? - - Write byte order mark in plain text files @@ -530,22 +526,6 @@ Default format: - - User Interface - - - - Always show scrollbar - - - - Always show top bar - - - - Always show bottom bar - - Reset Today @@ -662,6 +642,26 @@ Personal Dictionary + + Remove current dictionary? + + + + User Interface + + + + Always show scrollbar + + + + Always show top bar + + + + Always show bottom bar + + RtfReader @@ -1117,14 +1117,6 @@ Default - - Bitter Skies - - - - Enchantment - - Gentle Blues @@ -1137,14 +1129,6 @@ Space Dreams - - Spy Games - - - - Tranquility - - Writing Desk @@ -1197,6 +1181,22 @@ Export Theme + + Bitter Skies + + + + Enchantment + + + + Spy Games + + + + Tranquility + + Timer @@ -1501,10 +1501,6 @@ &Print... - - Pa&ge Setup... - - &Close @@ -1565,38 +1561,6 @@ Fo&rmat - - &Heading - - - - Heading &1 - - - - Heading &2 - - - - Heading &3 - - - - Heading &4 - - - - Heading &5 - - - - Heading &6 - - - - &Normal - - &Bold @@ -1721,18 +1685,10 @@ Update &Document - - Update Document Smart Quotes - - Update &Selection - - Update Selection Smart Quotes - - &Spelling... @@ -1821,10 +1777,6 @@ Focus Paragraph - - Ctrl+Shift+` - - &Help @@ -1857,5 +1809,53 @@ About &Qt + + Pa&ge Setup... + + + + &Heading + + + + Heading &1 + + + + Heading &2 + + + + Heading &3 + + + + Heading &4 + + + + Heading &5 + + + + Heading &6 + + + + &Normal + + + + Update Document Smart Quotes + + + + Update Selection Smart Quotes + + + + Ctrl+Shift+` + + diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 802a1c4b..57c8dd49 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -1159,7 +1159,7 @@ Custom - Standard + Anpassade Edit From ec97259cc51ac8a36afa2e5d9ca18a4bbbad3385 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 30 May 2017 10:10:10 -0400 Subject: [PATCH 348/630] Bump version number. --- NEWS | 7 +++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 7251c103..a1574f82 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +1.6.5 +----- +* FIXED: Data loss when program crashed. +* Updated included hunspell. +* Updated dictionaries. +* Translation updates: Greek, Swedish. + 1.6.4 ----- * Updated AppData installation directory. diff --git a/focuswriter.pro b/focuswriter.pro index 9c5c00cf..9762da2d 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -29,7 +29,7 @@ DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050800 } # Set program version -VERSION = 1.6.4 +VERSION = 1.6.5 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index a6b1b746..5c8cc91d 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.4' +VERSION='1.6.5' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index f719370b..47ba59b7 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 4 +!define VERSIONPATCH 5 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 24f599d8..f2a41815 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.4 +SET VERSION=1.6.5 ECHO Copying executable MKDIR %APP% From 9a69e9e9ec6ec71cfb5e266333b67467f83c6bea Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 30 May 2017 15:51:52 -0400 Subject: [PATCH 349/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 5dfb40cf..f17577f7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.5-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Tue, 30 May 2017 14:15:10 +0000 + focuswriter (1.6.4-1) unstable; urgency=medium * New upstream release From bbddba971b5d91f53a9882d9a1913fe35308a799 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 19 Jun 2017 16:00:10 -0400 Subject: [PATCH 350/630] FIXED: Foreground incorrectly placed when load stretched themes. --- src/document.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/document.cpp b/src/document.cpp index 23ecc6b8..ea251848 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -937,6 +937,7 @@ void Document::loadTheme(const Theme& theme) // Stretched m_layout->setColumnStretch(0, 0); m_layout->setColumnStretch(2, 0); + break; case 1: default: // Centered From 6b2e3787292536e0aa85dcecb4fed3bdb1b3a505 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 20 Jun 2017 12:34:39 -0400 Subject: [PATCH 351/630] FIXED: Did not show headings when automatic spellchecking was disabled. --- src/document.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/document.cpp b/src/document.cpp index ea251848..162331ee 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -844,6 +844,8 @@ bool Document::loadFile(const QString& filename, int position) m_saved_wordcount = m_document_stats.wordCount(); if (enabled) { m_highlighter->setEnabled(true); + } else { + m_highlighter->rehighlight(); } connect(m_text->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(updateWordCount(int,int,int))); connect(m_text->document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded())); From 21fe3ba80fdd99525c0249c73d104fb5f5f1ea87 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 1 Jul 2017 04:43:00 -0400 Subject: [PATCH 352/630] FIXED: Unneccessary compiler warning about switch fallthrough. --- src/spelling/dictionary_provider_hunspell.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/spelling/dictionary_provider_hunspell.cpp b/src/spelling/dictionary_provider_hunspell.cpp index 8dc18260..7381ea82 100644 --- a/src/spelling/dictionary_provider_hunspell.cpp +++ b/src/spelling/dictionary_provider_hunspell.cpp @@ -131,7 +131,8 @@ QStringRef DictionaryHunspell::check(const QString& string, int start_at) const goto Letter; case QChar::Letter_Lowercase: is_uppercase = false; - Letter: + goto Letter; + Letter: case QChar::Letter_Uppercase: case QChar::Letter_Titlecase: case QChar::Letter_Modifier: @@ -154,7 +155,9 @@ QStringRef DictionaryHunspell::check(const QString& string, int start_at) const chars++; break; } + goto NotWord; + NotWord: default: if (index != -1) { is_word = true; From 45d46ea7e74f0a61693f9a8d636088d22fdd9530 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 1 Jul 2017 04:53:10 -0400 Subject: [PATCH 353/630] FIXED: Did not always install translations in Linux. --- focuswriter.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/focuswriter.pro b/focuswriter.pro index 9762da2d..2c3fac38 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -282,7 +282,7 @@ macx { man.files = resources/unix/focuswriter.1 man.path = $$PREFIX/share/man/man1 - qm.files = translations/*.qm + qm.files = $$replace(TRANSLATIONS, .ts, .qm) qm.path = $$DATADIR/focuswriter/translations qm.CONFIG += no_check_exist From e577bfd6cbd78d4b27b7b9618ab23d93ec6a2c4f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 5 Jul 2017 05:05:26 -0400 Subject: [PATCH 354/630] Update deprecation warning. --- focuswriter.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/focuswriter.pro b/focuswriter.pro index 2c3fac38..48ea394b 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -19,7 +19,8 @@ macx { } DEFINES += QT_DEPRECATED_WARNINGS -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050800 +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050900 +DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT # Allow in-tree builds !win32 { From 388c80d13a2bca0af60044c8ef67e75f5df427ef Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 30 Jul 2017 14:22:53 -0400 Subject: [PATCH 355/630] Sync translations with Transifex. --- translations/focuswriter_cs.ts | 32 ++++++++++++++++---------------- translations/focuswriter_hy.ts | 6 ++++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index 9f229b26..cbd32fe5 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -295,7 +295,7 @@ OpenDocument Flat XML - + Plochý XML OpenDocument Office Open XML @@ -462,7 +462,7 @@ Smart quotes: - Chytré uvozovky: + Typografické uvozovky: Double @@ -526,7 +526,7 @@ Remove current dictionary? - + Odstranit nynější slovník? Write byte order mark in plain text files @@ -538,19 +538,19 @@ User Interface - + Uživatelské rozhraní Always show scrollbar - + Vždy ukázat posuvník Always show top bar - + Vždy ukázat horní pruh Always show bottom bar - + Vždy ukázat dolní pruh Reset Today @@ -1125,11 +1125,11 @@ Bitter Skies - + Mrazivé nebe Enchantment - + Okouzlení Gentle Blues @@ -1145,11 +1145,11 @@ Spy Games - + Výzvědné hry Tranquility - + Mír a klid Writing Desk @@ -1509,7 +1509,7 @@ Pa&ge Setup... - + Nastavení &stránky... &Close @@ -1721,7 +1721,7 @@ Smart &Quotes - Chytré &uvozovky + Typografické &uvozovky Update &Document @@ -1729,7 +1729,7 @@ Update Document Smart Quotes - + Obnovit typografické uvozovky dokumentu Update &Selection @@ -1737,7 +1737,7 @@ Update Selection Smart Quotes - + Obnovit typografické uvozovky výběru &Spelling... @@ -1829,7 +1829,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index f589f006..b2d7c8d5 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -33,24 +33,28 @@ %1% of %Ln minute(s) %Ln րոպեի %1%-ը + %Ln րոպեի %1%-ը %1% of %Ln word(s) %Ln բառի %1%-ը + %Ln բառի %1%-ը %Ln word(s) %Ln բառ + %Ln բառ %Ln minute(s) %Ln րոպե + %Ln րոպե @@ -80,6 +84,7 @@ %n day(s) %n օր + %n օր @@ -260,6 +265,7 @@ Replace %n instance(s)? Փոխարինե՞լ %n համընկումը։ + Փոխարինե՞լ %n համընկումը։ From addc76426286e7e512263e907ca541088da566cf Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 30 Jul 2017 14:28:57 -0400 Subject: [PATCH 356/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index a1574f82..9fa345ee 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.6.6 +----- +* FIXED: Did not always install translations in Linux. +* FIXED: Unneccessary compiler warning about switch fallthrough. +* FIXED: Did not show headings when automatic spellchecking was disabled. +* FIXED: Foreground incorrectly placed when load stretched themes. +* Translation updates: Czech, Armenian. + 1.6.5 ----- * FIXED: Data loss when program crashed. diff --git a/focuswriter.pro b/focuswriter.pro index 48ea394b..6ec8f203 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -30,7 +30,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.5 +VERSION = 1.6.6 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 5c8cc91d..bff9da95 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.5' +VERSION='1.6.6' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 47ba59b7..c3727028 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 5 +!define VERSIONPATCH 6 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index f2a41815..b512b323 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.5 +SET VERSION=1.6.6 ECHO Copying executable MKDIR %APP% From ea87c0161c996469e1302c95a0cddd9f845b3973 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 30 Jul 2017 14:55:01 -0400 Subject: [PATCH 357/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index f17577f7..0662441b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.6-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sun, 30 Jul 2017 18:50:06 +0000 + focuswriter (1.6.5-1) unstable; urgency=medium * New upstream release From af38aca6d4e6db31f86f6bdde40a03d7480c7940 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 18 Aug 2017 10:51:54 +0100 Subject: [PATCH 358/630] bump policy and debhelper versions --- debian/compat | 2 +- debian/control | 4 ++-- debian/rules | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/compat b/debian/compat index ec635144..f599e28b 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -9 +10 diff --git a/debian/control b/debian/control index fc8eceb8..31a2797f 100644 --- a/debian/control +++ b/debian/control @@ -3,14 +3,14 @@ Section: editors Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott -Build-Depends: debhelper (>= 9), +Build-Depends: debhelper (>= 10), qtbase5-dev, qttools5-dev-tools, qtmultimedia5-dev, libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 3.9.8 +Standards-Version: 4.0.1 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git diff --git a/debian/rules b/debian/rules index 59c32f41..f4d1b5f3 100755 --- a/debian/rules +++ b/debian/rules @@ -7,7 +7,7 @@ DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk %: - dh $@ --parallel + dh $@ override_dh_installchangelogs: dh_installchangelogs NEWS From 0a060a777c330884e9071f3a1143bdb6c1602e1a Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 18 Aug 2017 10:54:22 +0100 Subject: [PATCH 359/630] secure repo url --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 31a2797f..971b0a37 100644 --- a/debian/control +++ b/debian/control @@ -12,7 +12,7 @@ Build-Depends: debhelper (>= 10), zlib1g-dev Standards-Version: 4.0.1 Homepage: https://gottcode.org/focuswriter/ -Vcs-Git: git://anonscm.debian.org/collab-maint/focuswriter.git +Vcs-Git: https://anonscm.debian.org/git/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git Package: focuswriter From 64765604ec8c066d00882f92144ad7de7159265a Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 18 Aug 2017 10:55:58 +0100 Subject: [PATCH 360/630] log changes --- debian/changelog | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 0662441b..9684ec79 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,14 @@ focuswriter (1.6.6-1) unstable; urgency=medium + [ Graeme Gott ] * New upstream release - -- Graeme Gott Sun, 30 Jul 2017 18:50:06 +0000 + [ Barak A. Pearlmutter ] + * bump policy version (no changes required) + * bump to dh10 (remove no-default debian/rules dh --parallel) + * secure development repo URL + + -- Barak A. Pearlmutter Fri, 18 Aug 2017 10:55:52 +0100 focuswriter (1.6.5-1) unstable; urgency=medium From 4a7ef2028ac0bfb1367f109fd06f50c6e556091e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 21 Aug 2017 09:34:19 -0400 Subject: [PATCH 361/630] FIXED: Always indented first line when printing. --- src/document.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 162331ee..101996de 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -728,8 +728,9 @@ void Document::print(QPrinter* printer) // Apply spacings const int tab_width = (document->indentWidth() / 96.0) * printer->resolution(); + const bool indent_first_line = !qFuzzyIsNull(document->begin().blockFormat().textIndent()); QTextBlockFormat block_format; - block_format.setTextIndent(tab_width); + block_format.setTextIndent(tab_width * indent_first_line); for (int i = 0, count = document->allFormats().count(); i < count; ++i) { QTextFormat& f = document->allFormats()[i]; if (f.isBlockFormat()) { From 6d9112198a4872be3358ebb4828bbead5d9fcd36 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 22 Aug 2017 13:51:38 -0400 Subject: [PATCH 362/630] FIXED: Window margin was always the size of the scrollbar. --- src/document.cpp | 2 +- src/stack.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 101996de..73117b6d 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -393,7 +393,7 @@ Document::Document(const QString& filename, DailyProgress* daily_progress, QWidg m_layout->setSpacing(0); m_layout->setMargin(0); m_layout->addWidget(m_text, 1, 1); - m_layout->addWidget(m_scrollbar, 1, 2, Qt::AlignRight); + m_layout->addWidget(m_scrollbar, 1, 1, 1, 2, Qt::AlignRight); // Load settings loadPreferences(); diff --git a/src/stack.cpp b/src/stack.cpp index 6823ed0a..590e02a5 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -783,7 +783,7 @@ void Stack::updateBackground(const QImage& image, const QRect& foreground) void Stack::updateMargin() { - int margin = std::max(m_theme.foregroundMargin().value(), style()->pixelMetric(QStyle::PM_ScrollBarExtent)); + int margin = std::max(m_theme.foregroundMargin().value(), 1); if (Preferences::instance().alwaysShowFooter()) { margin = std::max(m_footer_margin, margin); } From 3f16046325e6e83adb45940f2210f4259cd7a94b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 23 Aug 2017 18:54:48 -0400 Subject: [PATCH 363/630] FIXED: HiDPI blurred text backgrounds were scaled. --- src/theme.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/theme.cpp b/src/theme.cpp index a121390e..f2352611 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -416,7 +416,9 @@ QImage Theme::render(const QSize& background, QRect& foreground, const int margi painter.save(); painter.translate(foreground.x(), foreground.y()); +#if (QT_VERSION < QT_VERSION_CHECK(5,9,0)) painter.scale(1.0 / pixelratio, 1.0 / pixelratio); +#endif qt_blurImage(&painter, blurred, blurRadius() * 2, true, false); painter.restore(); } From 8675b5c455b0ea8038a431bf86d9e7133524fa29 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Aug 2017 07:07:44 -0400 Subject: [PATCH 364/630] Updated dictionaries. --- resources/windows/dictionaries.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index 2291ae72..ffd77822 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='5.3.3.2' +loversion='5.4.1.1' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/5.3.3/${lodict}.tar.xz" + curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/5.4.1/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' From df6fa47aff6368303b75cf7f8dcc5cd0734ccfee Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Aug 2017 07:20:54 -0400 Subject: [PATCH 365/630] Bump version number. --- NEWS | 7 +++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 9fa345ee..e87d44f6 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +1.6.7 +----- +* Updated dictionaries. +* FIXED: HiDPI blurred text backgrounds were scaled. +* FIXED: Window margin was always the size of the scrollbar. +* FIXED: Always indented first line when printing. + 1.6.6 ----- * FIXED: Did not always install translations in Linux. diff --git a/focuswriter.pro b/focuswriter.pro index 6ec8f203..31a401ba 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -30,7 +30,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.6 +VERSION = 1.6.7 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index bff9da95..dd65a297 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.6' +VERSION='1.6.7' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index c3727028..67125498 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 6 +!define VERSIONPATCH 7 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index b512b323..d66526a3 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.6 +SET VERSION=1.6.7 ECHO Copying executable MKDIR %APP% From 5ee8741c8e02394ae72f170e85d31d4d3179ce44 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 25 Aug 2017 07:59:55 -0400 Subject: [PATCH 366/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9684ec79..54cd26ba 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.7-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Fri, 25 Aug 2017 11:24:32 +0000 + focuswriter (1.6.6-1) unstable; urgency=medium [ Graeme Gott ] From 579dd4066b148ca2fda8e4c2ae99abb9be67be32 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 29 Aug 2017 08:58:28 +0100 Subject: [PATCH 367/630] bump standards version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 971b0a37..f9a6a379 100644 --- a/debian/control +++ b/debian/control @@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 10), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 4.0.1 +Standards-Version: 4.1.0 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: https://anonscm.debian.org/git/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From a5ae402efb611100bccada9da823eb733398c3a8 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 29 Aug 2017 08:59:30 +0100 Subject: [PATCH 368/630] log changes --- debian/changelog | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 54cd26ba..7873d8f5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,12 @@ focuswriter (1.6.7-1) unstable; urgency=medium + [ Graeme Gott ] * New upstream release - -- Graeme Gott Fri, 25 Aug 2017 11:24:32 +0000 + [ Barak A. Pearlmutter ] + * bump policy version (no changes required) + + -- Barak A. Pearlmutter Tue, 29 Aug 2017 08:59:26 +0100 focuswriter (1.6.6-1) unstable; urgency=medium From 02c4cf2e583cb7a2fb487ba2cb222e474692f339 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 1 Oct 2017 15:48:10 -0400 Subject: [PATCH 369/630] FIXED: Did not handle ODT line position with two values. --- src/fileformats/odt_reader.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/fileformats/odt_reader.cpp b/src/fileformats/odt_reader.cpp index 22e0aabb..5bd4a414 100644 --- a/src/fileformats/odt_reader.cpp +++ b/src/fileformats/odt_reader.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -311,11 +311,12 @@ void OdtReader::readStyleTextProperties(QTextCharFormat& format) } else if (position == "sub") { format.setVerticalAlignment(QTextCharFormat::AlignSubScript); } else { - QString value = position.toString(); + QString value = position.toString().split(' ', QString::SkipEmptyParts).first(); value.chop(1); - if (value.toInt() > 0) { + const int vertical = value.toInt(); + if (vertical > 0) { format.setVerticalAlignment(QTextCharFormat::AlignSuperScript); - } else { + } else if (vertical < 0) { format.setVerticalAlignment(QTextCharFormat::AlignSubScript); } } From 0732af275e9ea882fd5ff65426311f3ccefe90d9 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 31 Oct 2017 00:07:39 +0000 Subject: [PATCH 370/630] bump standards version --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index f9a6a379..3aedcf7b 100644 --- a/debian/control +++ b/debian/control @@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 10), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 4.1.0 +Standards-Version: 4.1.1 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: https://anonscm.debian.org/git/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From 97b5dc71b4a0ed8eaf676631d4c50e6185bc89d4 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Tue, 31 Oct 2017 00:09:57 +0000 Subject: [PATCH 371/630] track shifting value for QT_SELECT --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index f4d1b5f3..9a2c76dc 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,6 @@ #!/usr/bin/make -f -export QT_SELECT = 5 +export QT_SELECT = qt5 export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 From b68eca1a7e7033f821f613b2812cabcb781ede6e Mon Sep 17 00:00:00 2001 From: Jakob Miksch Date: Sun, 29 Oct 2017 15:28:40 +0100 Subject: [PATCH 372/630] typo --- translations/focuswriter_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index ec38e2c6..c72b75d9 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -166,7 +166,7 @@ Saving as plain text will discard all formatting. Discard formatting? - Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? + Durch das Speichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? From 30b52a061f3b4df9d522f273d0b0d2efbe33d924 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 22 Dec 2017 05:43:13 -0500 Subject: [PATCH 373/630] FIXED: Could not compile with Qt 5.10. --- focuswriter.pro | 9 ++++++--- src/document.cpp | 8 ++++++++ src/spelling/spell_checker.cpp | 4 ++++ src/theme.cpp | 4 ++++ src/window.cpp | 11 ++--------- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index 31a401ba..b71f4f70 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -1,7 +1,10 @@ -lessThan(QT_VERSION, 5.2) { +lessThan(QT_MAJOR_VERSION, 5) { error("FocusWriter requires Qt 5.2 or greater") } -win32:lessThan(QT_VERSION, 5.4) { +equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 2) { + error("FocusWriter requires Qt 5.2 or greater") +} +win32:equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 4) { error("FocusWriter requires Qt 5.4 or greater") } @@ -19,7 +22,7 @@ macx { } DEFINES += QT_DEPRECATED_WARNINGS -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050900 +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051000 DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT # Allow in-tree builds diff --git a/src/document.cpp b/src/document.cpp index 73117b6d..477f57c0 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -340,7 +340,11 @@ Document::Document(const QString& filename, DailyProgress* daily_progress, QWidg m_text->setFrameStyle(QFrame::NoFrame); m_text->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_text->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0)) + m_text->setTabStopDistance(48); +#else m_text->setTabStopWidth(48); +#endif m_text->document()->setIndentWidth(48); m_text->horizontalScrollBar()->setAttribute(Qt::WA_NoMousePropagation); m_text->viewport()->setMouseTracking(true); @@ -904,7 +908,11 @@ void Document::loadTheme(const Theme& theme) m_spacings_loaded = true; } +#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0)) + m_text->setTabStopDistance(tab_width); +#else m_text->setTabStopWidth(tab_width); +#endif m_text->document()->setIndentWidth(tab_width); // Update text diff --git a/src/spelling/spell_checker.cpp b/src/spelling/spell_checker.cpp index ecc01a8b..c633080d 100644 --- a/src/spelling/spell_checker.cpp +++ b/src/spelling/spell_checker.cpp @@ -138,7 +138,11 @@ SpellChecker::SpellChecker(QTextEdit* document, DictionaryRef& dictionary) : // Create widgets m_context = new QTextEdit(this); m_context->setReadOnly(true); +#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0)) + m_context->setTabStopDistance(50); +#else m_context->setTabStopWidth(50); +#endif QPushButton* add_button = new QPushButton(tr("&Add"), this); add_button->setAutoDefault(false); connect(add_button, SIGNAL(clicked()), this, SLOT(add())); diff --git a/src/theme.cpp b/src/theme.cpp index f2352611..25fa2bfa 100644 --- a/src/theme.cpp +++ b/src/theme.cpp @@ -504,7 +504,11 @@ void Theme::renderText(QImage background, const QRect& foreground, const qreal p f.merge(block_format); } } +#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0)) + preview_text.setTabStopDistance(tab_width); +#else preview_text.setTabStopWidth(tab_width); +#endif preview_text.document()->setIndentWidth(tab_width); // Set font diff --git a/src/window.cpp b/src/window.cpp index eb9f1102..c3e45b7c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -61,7 +61,6 @@ #include #include #include -#include #include #include #include @@ -229,16 +228,13 @@ Window::Window(const QStringList& command_line_files) : addAction(action); ActionManager::instance()->addAction("SwitchLastDocument", action); - QSignalMapper* mapper = new QSignalMapper(this); for (int i = 2; i < 10 ; ++i) { action = new QAction(tr("Switch to Document %1").arg(i), this); action->setShortcut(Qt::CTRL + Qt::Key_0 + i); - connect(action, SIGNAL(triggered()), mapper, SLOT(map())); - mapper->setMapping(action, i - 1); + connect(action, &QAction::triggered, [=] { m_tabs->setCurrentIndex(i - 1); }); addAction(action); ActionManager::instance()->addAction(QString("SwitchDocument%1").arg(i), action); } - connect(mapper, SIGNAL(mapped(int)), m_tabs, SLOT(setCurrentIndex(int))); // Always bring interface to front connect(m_documents, SIGNAL(headerVisible(bool)), menuBar(), SLOT(raise())); @@ -1346,20 +1342,17 @@ void Window::initMenus() headings[6] = headings_menu->addAction(tr("Heading &6")); headings[0] = headings_menu->addAction(tr("&Normal")); m_headings_actions = new QActionGroup(this); - QSignalMapper* headings_mapper = new QSignalMapper(this); for (int i = 0; i < 7; ++i) { headings[i]->setCheckable(true); headings[i]->setData(i); m_headings_actions->addAction(headings[i]); - connect(headings[i], SIGNAL(triggered()), headings_mapper, SLOT(map())); - headings_mapper->setMapping(headings[i], i); + connect(headings[i], &QAction::triggered, [=] { m_documents->setBlockHeading(i); }); } for (int i = 1; i < 7; ++i) { ActionManager::instance()->addAction(QString("FormatBlockHeading%1").arg(i), headings[i]); } ActionManager::instance()->addAction(QString("FormatBlockNormal"), headings[0]); headings[0]->setChecked(true); - connect(headings_mapper, SIGNAL(mapped(int)), m_documents, SLOT(setBlockHeading(int))); format_menu->addSeparator(); m_actions["FormatBold"] = format_menu->addAction(QIcon::fromTheme("format-text-bold"), tr("&Bold"), m_documents, SLOT(setFontBold(bool)), QKeySequence::Bold); From b7f44ff40cf4d3aec4c38b2a99118c7b6b9735b4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 24 Dec 2017 08:04:50 -0500 Subject: [PATCH 374/630] Sync translations with Transifex. --- translations/focuswriter_id.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index b11430e1..42383559 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -1725,7 +1725,7 @@ Update Selection Smart Quotes - + Perbarui Pilhan Kutipan Cerdas &Spelling... From fc47f3903e930a1c778c228def25930c3b74ee44 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 26 Dec 2017 13:09:51 -0500 Subject: [PATCH 375/630] Bump version number. --- NEWS | 6 ++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index e87d44f6..454fe530 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +1.6.8 +----- +* FIXED: Could not compile with Qt 5.10. +* FIXED: Did not handle ODT line position with two values. +* Translation updates: German, Indonesian. + 1.6.7 ----- * Updated dictionaries. diff --git a/focuswriter.pro b/focuswriter.pro index b71f4f70..030202ac 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -33,7 +33,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.7 +VERSION = 1.6.8 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index dd65a297..498f0594 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.7' +VERSION='1.6.8' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 67125498..0393f7c2 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 7 +!define VERSIONPATCH 8 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index d66526a3..ec1892a6 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.7 +SET VERSION=1.6.8 ECHO Copying executable MKDIR %APP% From 25c02bd40d1ec7b7e9b2df02fc332ddc5fe2dc34 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Dec 2017 16:35:06 -0500 Subject: [PATCH 376/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 7873d8f5..46f01b43 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.8-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Wed, 27 Dec 2017 21:34:47 +0000 + focuswriter (1.6.7-1) unstable; urgency=medium [ Graeme Gott ] From cf481361259cf0664e910ea1c7871c4f7b0c8c45 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 29 Dec 2017 15:37:27 +0000 Subject: [PATCH 377/630] bump policy --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 3aedcf7b..5f4283dc 100644 --- a/debian/control +++ b/debian/control @@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 10), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 4.1.1 +Standards-Version: 4.1.3 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: https://anonscm.debian.org/git/collab-maint/focuswriter.git Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git From 6a36adde08808022af1440783fa45c4f08a64be4 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 29 Dec 2017 15:38:11 +0000 Subject: [PATCH 378/630] changelog trim whitespace --- debian/changelog | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 46f01b43..77775d37 100644 --- a/debian/changelog +++ b/debian/changelog @@ -108,7 +108,7 @@ focuswriter (1.5.3-3) unstable; urgency=medium - 76b99d0 FIXED: Crash when importing themes. - ca223c5 Update format of appdata. - 8f6e993 Update appdata file. - + -- Barak A. Pearlmutter Fri, 20 Mar 2015 10:29:46 +0000 focuswriter (1.5.3-2) unstable; urgency=medium @@ -188,11 +188,11 @@ focuswriter (1.4.4+git.4.0c3b3c1-1) unstable; urgency=low - 77b3da5 Fix linker error with Qt 5 on Windows. - bb69d83 Update QtSingleApplication. - cb19614 Fix compilation error with Qt 5 on Windows. - + -- Barak A. Pearlmutter Tue, 11 Feb 2014 11:44:36 +0000 focuswriter (1.4.4+git.3.ec86fd40-1) unstable; urgency=low - + * Track upstream maintenance branch - c0ceb94a Sync translations with Transifex. - 9b365049 FIXED: Hyphenated lines were not focused properly. @@ -374,7 +374,7 @@ focuswriter (1.3.3-1) unstable; urgency=low * update debian/watch for uscan to github redir * New upstream version * merge post-release fixes: icon location, no-sound crash - + -- Barak A. Pearlmutter Mon, 11 Jul 2011 20:14:38 +0200 focuswriter (1.3.2.1+git.daa4c602-1) unstable; urgency=low From cbd953cbe520027d9363c71d03e9aba207320161 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 29 Dec 2017 19:58:46 +0000 Subject: [PATCH 379/630] add git buildpackage configuration to share branch and tag names with upstream --- debian/gbp.conf | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 debian/gbp.conf diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 00000000..f5c6a7bb --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,9 @@ +[import-orig] +pristine-tar = True +debian-branch = debian +upstream-tag = 'v%(version)s' + +[buildpackage] +upstream-tag = 'v%(version)s' +pristine-tar = True +debian-branch = debian From ec6cf2167e16c93832b18caf290309324a6186d3 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 29 Dec 2017 19:55:18 +0000 Subject: [PATCH 380/630] log changes --- debian/changelog | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 77775d37..3cec72fa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,14 @@ focuswriter (1.6.8-1) unstable; urgency=medium + [ Graeme Gott ] * New upstream release - -- Graeme Gott Wed, 27 Dec 2017 21:34:47 +0000 + [ Barak A. Pearlmutter ] + * bump policy version + * trim changelog whitespace + * add git buildpackage configuration to conform git names with upstream + + -- Barak A. Pearlmutter Fri, 29 Dec 2017 19:59:16 +0000 focuswriter (1.6.7-1) unstable; urgency=medium From 39f3d62ae6ea22c79b59a8cb6114852965e73891 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 1 Jan 2018 06:18:55 -0500 Subject: [PATCH 381/630] Update copyright year. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index c3e45b7c..2c8606dc 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -855,7 +855,7 @@ void Window::aboutClicked() "

%6
%7

") .arg(tr("FocusWriter"), QApplication::applicationVersion(), tr("A simple fullscreen word processor"), - tr("Copyright © 2008-%1 Graeme Gott").arg("2017"), + tr("Copyright © 2008-%1 Graeme Gott").arg("2018"), tr("Released under the GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\""), tr("Uses icons from the Oxygen icon theme").arg("\"http://www.oxygen-icons.org/\""), tr("Used under the LGPL 3 license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) From f395f7435aa395164bb6f55bfecf231b108c8ced Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 13 Jan 2018 10:39:47 -0500 Subject: [PATCH 382/630] FIXED: Could not save to network devices. --- src/document_writer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/document_writer.cpp b/src/document_writer.cpp index 49af5557..954cef90 100644 --- a/src/document_writer.cpp +++ b/src/document_writer.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013, 2014, 2015, 2017 Graeme Gott + * Copyright (C) 2012, 2013, 2014, 2015, 2017, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,6 +55,7 @@ bool DocumentWriter::write() bool saved = false; QSaveFile file(m_filename); + file.setDirectWriteFallback(true); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { return false; } From 4349761a6d9023828932263d8bbb31ff57150c59 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 27 Jan 2018 21:53:56 +0000 Subject: [PATCH 383/630] debhelper 11 --- debian/compat | 2 +- debian/control | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/compat b/debian/compat index f599e28b..b4de3947 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -10 +11 diff --git a/debian/control b/debian/control index 5f4283dc..55fd4744 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: editors Priority: optional Maintainer: Barak A. Pearlmutter Uploaders: Graeme Gott -Build-Depends: debhelper (>= 10), +Build-Depends: debhelper (>= 11), qtbase5-dev, qttools5-dev-tools, qtmultimedia5-dev, From 74c67d1bda801a01a305f183acdf331ac809fbee Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Sat, 27 Jan 2018 21:27:05 +0000 Subject: [PATCH 384/630] log changes --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 3cec72fa..7e97419e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.6.8-2) unstable; urgency=medium + + * Merge minor upstream fixes + * bump to debhelper 11 + + -- Barak A. Pearlmutter Sat, 27 Jan 2018 21:54:21 +0000 + focuswriter (1.6.8-1) unstable; urgency=medium [ Graeme Gott ] From 050f7658764434b9b51595276b5dc1aff2777a7d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 7 Feb 2018 13:38:17 -0500 Subject: [PATCH 385/630] Update dictionaries. --- resources/windows/dictionaries.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index ffd77822..14aa7daa 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='5.4.1.1' +loversion='6.0.0.3' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/5.4.1/${lodict}.tar.xz" + curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/6.0.0/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' @@ -43,7 +43,7 @@ fi echo -n 'Downloading Finnish dictionary...' if [ ! -e 'voikko.oxt' ]; then - curl -s -O 'http://www.puimula.org/htp/ooo/voikko-win/5.0.0.20151123/voikko.oxt' + curl -s -O 'https://www.puimula.org/htp/ooo/voikko-win/5.0.0.20151123/voikko.oxt' echo ' DONE' else echo ' SKIPPED' @@ -53,7 +53,7 @@ echo -n 'Downloading Korean dictionary...' kodict='Korean_spell-checker-0.6.0-1_LibO' kofiles='Korean_spell-checker-0.6.0-1_LibO/dictionaries' if [ ! -e "${kodict}.oxt" ]; then - curl -s -O "https://extensions.libreoffice.org/extensions/korean-spellchecker//0-6-0-1/@@download/file/${kodict}.oxt" + curl -s -O "https://extensions.libreoffice.org/extensions/korean-spellchecker/0-6-0-1/@@download/file/${kodict}.oxt" echo ' DONE' else echo ' SKIPPED' @@ -237,6 +237,9 @@ cp -a $lofiles/ru_RU/ru_RU.dic dicts/ru.dic echo -n ' sk' cp -a $lofiles/sk_SK/sk_SK.aff dicts/sk.aff cp -a $lofiles/sk_SK/sk_SK.dic dicts/sk.dic +echo -n ' sl' +cp -a $lofiles/sl_SI/sl_SI.aff dicts/sl.aff +cp -a $lofiles/sl_SI/sl_SI.dic dicts/sl.dic echo -n ' sr' cp -a $lofiles/sr/sr.aff dicts/sr.aff cp -a $lofiles/sr/sr.dic dicts/sr.dic From a432832c836bd4136d168cd4a878790cae74f4c0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 7 Feb 2018 13:45:38 -0500 Subject: [PATCH 386/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 6 + resources/unix/focuswriter.desktop | 4 + resources/unix/po/ig.po | 59 + resources/unix/po/sl.po | 71 + translations/focuswriter_ig.ts | 1855 +++++++++++++++++++++++ translations/focuswriter_sl.ts | 1873 ++++++++++++++++++++++++ 6 files changed, 3868 insertions(+) create mode 100644 resources/unix/po/ig.po create mode 100644 resources/unix/po/sl.po create mode 100644 translations/focuswriter_ig.ts create mode 100644 translations/focuswriter_sl.ts diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 07f31ec6..0a1536c9 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -19,6 +19,7 @@ FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter 포커스 라이터 @@ -30,6 +31,7 @@ FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter FocusWriter @@ -61,6 +63,7 @@ Procesor de text pe tot ecranul Полноэкранный текстовый редактор Celoobrazovkový textový editor + Polnozaslonski program za pisanje Обрађивач текста у пуном екрану Ordbehandlare med helskärmsläge Tam ekran kelime işlemci @@ -93,6 +96,7 @@

FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

FocusWriter - это простой текстовый редактор, позволяющий полностью сосредоточиться на работе. В нем используется выдвижной интерфейс, управляющие элементы которого становятся доступными при наведении стрелки мыши к краям экрана. Это дает возможность добиться максимально располагающего к пользователю внешнего вида и полностью погрузиться в вашу работу.

FocusWriter je jednoduchý textový editor bez rozptýlení. Využíva skryté rozhranie, ku ktorému sa pristupuje pohybom myši na okraje obrazovky, čo umožňuje programu mať prirodzený vzhľad a dojem, zatiaľ čo si stále udržujete odstup, takže sa môžete ponoriť do svojej práce.

+

FocusWriter je enostaven urejevalnik besedil. Uporablja skrit uporabniški vmesnik do katerega dostopamo tako, da miško pomaknemo ob rob zaslona, kar omogoča, da ima program domač/znan izgled, medtem, ko omogoča nemoteno delo in se lahko pisanju popolnoma posvetimo.

FocusWriter је једноставан, слободан уређивач текста. Он користи скривени интерфејс коме се приступа померањем миша на ивице екрана, омогућавајући програму да добије познати изглед и тако вам обезбеди да се посветите вашем раду.

FocusWriter är en enkel, distraktionsfri ordbehandlare. Den utnyttjar ett dolt gränssnitt som du kommer åt genom att flytta din mus till skärmkanterna, vilket tillåter programmet att ha välbekant utseende och känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt arbete.

FocusWriter це простий текстовий редактор, що дозволяє повністю зосередитися на роботі. Він використовує висувний інтерфейс, який з’являється при наведенні стрілки миші до країв екрану. Це дає можливість досягти максимально зручного для користувача зовнішнього вигляду, який не відволікає, а дозволяє повністю зануритися в роботу.

@@ -122,6 +126,7 @@

FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

FocusWriter позволит вам настроить свое рабочее окружение путем создания тем, в которых можно, для добавления нужной атмосферы, управлять шрифтами, цветами и фоновыми изображениями. Также текстовый редактор умеет вести статистику, обновляемую в реальном времени, ставить ежедневные рабочие цели, открывать сразу несколько документов одновременно, проверять орфографию и много чего еще.

FocusWriter umožňuje prispôsobiť vaše prostredie vytvorením tém, ktoré ovládajú písmo, farby a obrázok na pozadí na pridanie atmosféry. Je tiež vybavený funkciami ako priebežná aktualizácia štatistík, denné ciele, viac otvorených dokumentov, kontrolu pravopisu a oveľa viac.

+

FocusWriter omogoča prilagajanje okolja z uporabo tem, ki omogočajo nadzor pisav, barv in slike za ozadje urejevalnika. Omogoča tudi takojšnjo statistiko, dnevne cilje, več odprtih dokumentov, preverjanje pravopisa in še veliko več.

FocusWriter вам омогућава да прилагодите окружење креирањем теме са фонтом, бојама и позадинском сликом. Такође, поседује ажурирање статистике, дневне циљеве, истовремено отварање више докумената, проверу правописа и још много тога.

FocusWriter tillåter dig att anpassa din miljö genom att skapa teman som kontrollerar typsnitt, färger, och bakgrundsbilden för att lägga till atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera öppna dokument, stavningskontroll och mycket mer.

FocusWriter дозволить вам налаштувати своє робоче оточення шляхом створення тем, в яких можна управляти шрифтами, кольорами та фоновими зображеннями. Також текстовий редактор вміє вести статистику, оновлювану в реальному часі, ставити щоденні робочі цілі, відкривати декілька документів одночасно, перевіряти орфографію і багато чого ще.

@@ -151,6 +156,7 @@

În plus, atunci când deschideţi programul, lucrul dvs. în curs de execuţie va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît să puteţi trece imediat la treabă.

Кроме того, когда вы откроете программу, сразу же будет загружен прогресс вашей текущей работы и курсор перейдет на ту позицию, на которой в последний раз работа была прервана. Так вы сможете практически мгновенно вернуться к делу.

Navyše, pri otvorení programu sa vaša aktuálne rozpracovaná práca automaticky načíta na pozícii, kde ste naposledy skončili, takže môžete okamžite skočiť naspäť.

+

Dodatno, ko zaženemo program se bo vaše zadnje delo samodejno naložilo in postavilo delovno mesto na zadnjo znano pozicijo, tako, da lahko takoj nadaljujete kjer ste ostali prejšnjič.

Поред тога, када отворите програм, ваш тренутни посао ће се аутоматски учитати на месту где сте последњи пут стали, тако да га можете одмах наставити.

Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas automatiskt där du slutade senast så att du omedelbart kan fortsätta

Крім того, коли ви відкриєте програму, відразу ж буде завантажений прогрес вашої поточної роботи і курсор перейде на ту позицію, на якій в останній раз робота була перервана. Так ви зможете практично миттєво повернутися до справи.

diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index d3372c88..3259bd61 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -16,6 +16,7 @@ Name[he]=FocusWriter Name[hu]=FocusWriter Name[hy]=FocusWriter Name[id]=FocusWriter +Name[ig]=FocusWriter Name[it]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 @@ -27,6 +28,7 @@ Name[pt_BR]=FocusWriter Name[ro]=FocusWriter Name[ru]=FocusWriter Name[sk]=FocusWriter +Name[sl]=FocusWriter Name[sr]=FocusWriter Name[sv]=FocusWriter Name[tr]=FocusWriter @@ -61,6 +63,7 @@ GenericName[pt_BR]=Processador de texto em tela cheia GenericName[ro]=Procesor de text pe tot ecranul GenericName[ru]=Полноэкранный текстовый редактор GenericName[sk]=Celoobrazovkový textový editor +GenericName[sl]=Polnozaslonski urejevalnik besedila GenericName[sr]=Обрађивач текста у пуном екрану GenericName[sv]=Ordbehandlare med helskärmsläge GenericName[tr]=Tam Ekran Kelime İşlemci @@ -95,6 +98,7 @@ Comment[pt_BR]=Escreva sem distrações Comment[ro]=Scrieţi fără distrageri Comment[ru]=Писать не отвлекаясь Comment[sk]=Písať bez rozptýlenia +Comment[sl]=Pišite brez motenj Comment[sr]=Пишите без ометања Comment[sv]=Skriv utan distraktioner Comment[tr]=Dikkat dağıtıcılar olmadan yazın diff --git a/resources/unix/po/ig.po b/resources/unix/po/ig.po new file mode 100644 index 00000000..1362b927 --- /dev/null +++ b/resources/unix/po/ig.po @@ -0,0 +1,59 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# AhaNkem Obi , 2018 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"PO-Revision-Date: 2018-01-26 05:18+0000\n" +"Last-Translator: AhaNkem Obi \n" +"Language-Team: Igbo (http://www.transifex.com/gottcode/focuswriter/language/" +"ig/)\n" +"Language: ig\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../focuswriter.appdata.xml.in.h:1 +msgid "Fullscreen word processor" +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:2 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:3 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" + +#: ../focuswriter.appdata.xml.in.h:4 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" + +#: ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.desktop.in.h:2 +msgid "Fullscreen Word Processor" +msgstr "" + +#: ../focuswriter.desktop.in.h:3 +msgid "Write without distractions" +msgstr "" diff --git a/resources/unix/po/sl.po b/resources/unix/po/sl.po new file mode 100644 index 00000000..52eff5ef --- /dev/null +++ b/resources/unix/po/sl.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Roman Bobnaric , 2018 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"PO-Revision-Date: 2018-01-02 12:37+0000\n" +"Last-Translator: Roman Bobnaric \n" +"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/gottcode/" +"focuswriter/language/sl_SI/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#: ../focuswriter.appdata.xml.in.h:1 +msgid "Fullscreen word processor" +msgstr "Polnozaslonski program za pisanje" + +#: ../focuswriter.appdata.xml.in.h:2 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" +"FocusWriter je enostaven urejevalnik besedil. Uporablja skrit uporabniški " +"vmesnik do katerega dostopamo tako, da miško pomaknemo ob rob zaslona, kar " +"omogoča, da ima program domač/znan izgled, medtem, ko omogoča nemoteno delo " +"in se lahko pisanju popolnoma posvetimo." + +#: ../focuswriter.appdata.xml.in.h:3 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" +"FocusWriter omogoča prilagajanje okolja z uporabo tem, ki omogočajo nadzor " +"pisav, barv in slike za ozadje urejevalnika. Omogoča tudi takojšnjo " +"statistiko, dnevne cilje, več odprtih dokumentov, preverjanje pravopisa in " +"še veliko več." + +#: ../focuswriter.appdata.xml.in.h:4 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" +"Dodatno, ko zaženemo program se bo vaše zadnje delo samodejno naložilo in " +"postavilo delovno mesto na zadnjo znano pozicijo, tako, da lahko takoj " +"nadaljujete kjer ste ostali prejšnjič." + +#: ../focuswriter.desktop.in.h:1 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.desktop.in.h:2 +msgid "Fullscreen Word Processor" +msgstr "Polnozaslonski urejevalnik besedila" + +#: ../focuswriter.desktop.in.h:3 +msgid "Write without distractions" +msgstr "Pišite brez motenj" diff --git a/translations/focuswriter_ig.ts b/translations/focuswriter_ig.ts new file mode 100644 index 00000000..580fecdd --- /dev/null +++ b/translations/focuswriter_ig.ts @@ -0,0 +1,1855 @@ + + + + + Alert + + Close (%1) + + + + Collapse + + + + Expand + + + + + AlertLayer + + Dismiss Alert + + + + Ctrl+D + + + + + DailyProgress + + %1% of %Ln minute(s) + + + + + + %1% of %Ln word(s) + + + + + + %Ln word(s) + + + + + + %Ln minute(s) + + + + + + 0% + + + + + DailyProgressDialog + + Daily Progress + + + + Longest streak + + + + Current streak + + + + N/A + + + + %n day(s) + + + + + + %1 &ndash; %2 + + + + + DailyProgressLabel + + %1% of daily goal + + + + + DictionaryDialog + + Set Language + + + + + Document + + (Untitled %1) + + + + %1 (Read-Only) + + + + Sorry + Ndo + + + Unable to save '%1'. + + + + Save File As + + + + Unable to overwrite '%1'. + + + + Rename File + + + + Unable to rename '%1'. + + + + Reload File? + + + + Reload the file '%1' from disk? + + + + All unsaved changes will be lost. + + + + Reload + + + + Untitled %1 + + + + Question + Ajụjụ + + + Saving as plain text will discard all formatting. Discard formatting? + + + + + DocumentWatcher + + File Changed + + + + The file '%1' was changed by another program. + + + + Do you want to reload the file? + + + + Reload + + + + Ignore + Gbachị nkịtị + + + File Deleted + + + + The file %1 was deleted by another program. + + + + Do you want to save or close the file? + + + + + DocxReader + + Unable to open archive. + + + + + FindDialog + + Search for: + + + + Replace with: + + + + Ignore case + + + + Whole words only + + + + Regular expressions + + + + Search up + + + + Search down + + + + &Find + + + + &Replace + + + + Replace &All + + + + Find + Chọta + + + Replace + + + + Replace %n instance(s)? + + + + + + Question + Ajụjụ + + + Sorry + Ndo + + + Phrase not found. + + + + + FormatManager + + OpenDocument Text + + + + OpenDocument Flat XML + + + + Office Open XML + + + + Rich Text Format + + + + Plain Text + + + + All Files + + + + All Supported Files + + + + + Highlighter + + Add + + + + Check Spelling... + + + + (No suggestions found) + + + + + ImageButton + + Open Image + + + + Images(%1) + + + + + LocaleDialog + + Select application language: + + + + <System Language> + + + + Note + + + + Please restart this application for the change in language to take effect. + + + + + OdtReader + + Unable to open archive. + + + + + PreferencesDialog + + Preferences + + + + General + + + + Statistics + + + + Toolbar + + + + Spell Checking + + + + Select Dictionary + + + + Sorry + Ndo + + + Unable to open archive. + + + + The archive does not contain a usable dictionary. + + + + Question + Ajụjụ + + + Shortcuts + + + + One or more shortcuts conflict. Do you wish to proceed? + + + + The dictionary "%1" already exists. Do you want to replace it? + + + + Daily Goal + + + + None + + + + Minutes: + + + + Words: + + + + Editing + + + + Always vertically center + + + + Block insertion cursor + + + + Smooth fonts + + + + Typewriter sounds + + + + Smart quotes: + + + + Double + + + + Single + + + + Scenes + + + + Divider: + + + + Saving + + + + Automatically save changes + + + + Remember cursor position + + + + Word count + + + + Page count + + + + Paragraph count + + + + Character count + + + + Characters: + + + + Paragraphs: + + + + Word Count Algorithm + + + + Reset daily progress for today to zero? + + + + Remove current dictionary? + + + + Write byte order mark in plain text files + + + + Default format: + + + + User Interface + + + + Always show scrollbar + + + + Always show top bar + + + + Always show bottom bar + + + + Reset Today + + + + History + + + + Remember history + + + + Show streaks + + + + Minimum progress for streaks: + + + + Detect word boundaries + + + + Divide character count by six + + + + Count each letter as a word + + + + Page Count Algorithm + + + + Style + + + + Icons Only + + + + Text Only + + + + Text Alongside Icons + + + + Text Under Icons + + + + Text Position: + + + + Actions + + + + Move Up + + + + Move Down + + + + Add Separator + + + + Command + + + + Shortcut + + + + Action + + + + Check spelling as you type + + + + Ignore words in UPPERCASE + + + + Ignore words with numbers + + + + Language + Asụsụ + + + Add + + + + Remove + Wopu + + + Personal Dictionary + + + + + RtfReader + + Not a supported RTF file. + + + + + RtfTokenizer + + Unexpectedly reached end of file. + + + + + SceneList + + Ctrl+Shift+Down + + + + Move Scenes Up + + + + Ctrl+Shift+Up + + + + Toggle Scene List + + + + Shift+F4 + + + + Show scene list (%1) + + + + Hide scene list (%1) + + + + Filter + + + + Move Scenes Down + + + + Resize scene list + + + + + Session + + Default + + + + + SessionManager + + Manage Sessions + + + + S&essions + + + + New + Nke ọhụrụ + + + Duplicate + + + + Rename + Banye aha ọzọ + + + Delete + Hicha + + + Switch To + + + + New Session + + + + Duplicate Session + + + + Rename Session + + + + Question + Ajụjụ + + + Delete selected session? + + + + Session name: + + + + Sorry + Ndo + + + The requested session name is already in use. + + + + &New... + + + + Ctrl+Shift+N + + + + &Manage... + + + + Ctrl+Shift+M + + + + + ShortcutEdit + + Clear + + + + Reset to Default + + + + Shortcut: + + + + + SmartQuote + + Replacing quotation marks... + + + + Please Wait + + + + + SpellChecker + + Check Spelling + + + + &Add + + + + &Ignore + + + + I&gnore All + + + + &Change + + + + C&hange All + + + + Not in dictionary: + + + + Change to: + + + + Checking spelling... + + + + Cancel + + + + Please wait + + + + Continue checking at beginning of file? + + + + Spell check complete. + + + + + SymbolsDialog + + Symbols + + + + Recently used symbols + + + + All symbols + + + + Details + + + + Name: + + + + Insert + + + + + SymbolsModel + + Blocks + + + + Scripts + + + + + Theme + + Untitled %1 + + + + + ThemeDialog + + Name: + + + + No Image + + + + Tiled + + + + Centered + + + + Stretched + + + + Scaled + + + + Zoomed + + + + Opacity: + + + + Position: + + + + Width: + + + + Round Text Background Corners + + + + Radius: + + + + Blur Text Background + + + + Text Background Drop Shadow + + + + Vertical Offset: + + + + Margins + + + + Window: + + + + Page: + + + + Indent first line + + + + Above: + + + + Below: + + + + Remove + Wopu + + + Edit Theme + + + + Window Background + + + + Type: + + + + Color: + + + + Image: + + + + pixels + + + + Left + + + + Text Background + + + + Right + + + + Text + + + + Font: + + + + Misspelled: + + + + Line Spacing + + + + Single + + + + 1.5 Lines + + + + Double + + + + Proportional + + + + Height: + + + + Paragraph Spacing + + + + Tab Width: + + + + New Theme + + + + + ThemeManager + + Themes + + + + Default + + + + Bitter Skies + + + + Enchantment + + + + Gentle Blues + + + + Old School + + + + Space Dreams + + + + Spy Games + + + + Tranquility + + + + Writing Desk + + + + New + Nke ọhụrụ + + + Duplicate + + + + Custom + + + + Edit + + + + Delete + Hicha + + + Import + + + + Export + + + + Question + Ajụjụ + + + Delete theme '%1'? + + + + Themes (%1) + + + + Import Theme + + + + Export Theme + + + + + Timer + + <b>%1</b> - %2 + + + + Question + Ajụjụ + + + Delete timer? + + + + <b>Words:</b> %L1 + + + + <b>Pages:</b> %L1 + + + + <b>Paragraphs:</b> %L1 + + + + <b>Characters:</b> %L1 / %L2 + + + + Set Delay + + + + Set Time + + + + Delay: + + + + Time: + + + + HH:mm:ss + + + + Alarm + + + + Type: + + + + Memo: + + + + Edit + + + + Delete + Hicha + + + + TimerDisplay + + HH:mm:ss + + + + No timers running + + + + + TimerManager + + Timers + + + + New + Nke ọhụrụ + + + Recent + + + + Question + Ajụjụ + + + Cancel editing timers? + + + + +HH:mm:ss + + + + %1 - %2 + + + + + Window + + Loading themes + + + + Loading sounds + + + + Untitled + + + + Open File + + + + About FocusWriter + + + + FocusWriter + + + + A simple fullscreen word processor + + + + Copyright &copy; 2008-%1 Graeme Gott + + + + Released under the <a href=%1>GPL 3</a> license + + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + + + + Used under the <a href=%1>LGPL 3</a> license + + + + Characters: %L1 / %L2 + + + + Pages: %L1 + + + + Paragraphs: %L1 + + + + Words: %L1 + + + + Opening %1 + + + + (Untitled %1) + + + + List all documents + + + + Switch to Next Document + + + + Switch to Previous Document + + + + Switch to First Document + + + + Switch to Last Document + + + + Switch to Document %1 + + + + Loading settings + + + + Emergency cache is not writable. + + + + Warning + + + + FocusWriter was not shut down cleanly. + + + + Restore from the emergency cache? + + + + Some files could not be opened. + + + + Some files were opened Read-Only. + + + + '%1' is newer than the cached copy. + + + + Overwrite newer file? + + + + Save Changes? + + + + Save changes to the file '%1' before closing? + + + + Your changes will be lost if you don't save them. + + + + Unable to load typewriter sounds. + + + + &File + + + + &New + + + + &Open... + + + + Reloa&d + + + + &Save + + + + Save &As... + + + + &Rename... + + + + Save A&ll + + + + Manage Sessions + + + + New Session + + + + &Print... + + + + Pa&ge Setup... + + + + &Close + + + + &Quit + + + + Ctrl+Q + + + + &Edit + + + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Paste &Unformatted + + + + Ctrl+Shift+V + + + + Select &All + + + + Select &Scene + + + + Ctrl+Shift+A + + + + Fo&rmat + + + + &Heading + + + + Heading &1 + + + + Heading &2 + + + + Heading &3 + + + + Heading &4 + + + + Heading &5 + + + + Heading &6 + + + + &Normal + + + + &Bold + + + + &Italic + + + + &Underline + + + + Stri&kethrough + + + + Ctrl+K + + + + Sup&erscript + + + + Ctrl+^ + + + + &Subscript + + + + Ctrl+_ + + + + Align &Left + + + + Ctrl+{ + + + + Align &Center + + + + Ctrl+| + + + + Align &Right + + + + Ctrl+} + + + + Align &Justify + + + + Ctrl+J + + + + &Decrease Indent + + + + Ctrl+< + + + + I&ncrease Indent + + + + Ctrl+> + + + + Le&ft to Right Block + + + + Ri&ght to Left Block + + + + &Tools + + + + &Find... + + + + Find &Next + + + + Find Pre&vious + + + + &Replace... + + + + Ctrl+R + + + + Smart &Quotes + + + + Update &Document + + + + Update Document Smart Quotes + + + + Update &Selection + + + + Update Selection Smart Quotes + + + + &Spelling... + + + + F7 + + + + Set &Language... + + + + &Timers... + + + + S&ymbols... + + + + &Daily Progress + + + + &Settings + + + + Show &Toolbar + + + + Show &Menu Icons + + + + F&ocused Text + + + + &Fullscreen + + + + F11 + + + + Esc + + + + M&inimize + + + + Ctrl+M + + + + &Themes... + + + + &Preferences... + + + + Focus Off + + + + Focus One Line + + + + Focus Three Lines + + + + &Paragraph + + + + Focus Paragraph + + + + Ctrl+Shift+` + + + + &Help + + + + Application &Language... + + + + Some files were unsupported and could not be opened. + + + + &Off + + + + One &Line + + + + &Three Lines + + + + &About + + + + About &Qt + + + + diff --git a/translations/focuswriter_sl.ts b/translations/focuswriter_sl.ts new file mode 100644 index 00000000..bab20036 --- /dev/null +++ b/translations/focuswriter_sl.ts @@ -0,0 +1,1873 @@ + + + + + Alert + + Close (%1) + Zapri (%1) + + + Collapse + Pomanjšaj + + + Expand + Razširi + + + + AlertLayer + + Dismiss Alert + Odstrani opozorilo + + + Ctrl+D + Ctrl+D + + + + DailyProgress + + %1% of %Ln minute(s) + + %1% od %Ln minute + %1% od %Ln minut + %1% od %Ln minut + %1% od %Ln minut + + + + %1% of %Ln word(s) + + %1% od %Ln besed + %1% od %Ln besed + %1% od %Ln besed + %1% od %Ln besed + + + + %Ln word(s) + + %Ln besede + %Ln besed + %Ln besed + %Ln besed + + + + %Ln minute(s) + + %Ln minut + %Ln minut + %Ln minut + %Ln minute + + + + 0% + 0% + + + + DailyProgressDialog + + Daily Progress + Dnevni napredek + + + Longest streak + Najdaljši odstavek + + + Current streak + Trenutni odstavek + + + N/A + N/A + + + %n day(s) + + %n dan + %n dni + %n dni + %n dni + + + + %1 &ndash; %2 + %1 &ndash; %2 + + + + DailyProgressLabel + + %1% of daily goal + %1% dnevnega cilja + + + + DictionaryDialog + + Set Language + Nastavi jezik + + + + Document + + (Untitled %1) + (Neimenovano %1) + + + %1 (Read-Only) + %1 (Samo za branje) + + + Sorry + Oprostite + + + Unable to save '%1'. + Shranjevanje '%1' ni mogoče. + + + Save File As + Shrani datoteko kot + + + Unable to overwrite '%1'. + Prepisovanje '%1' ni bilo mogoče. + + + Rename File + Preimenuj datoteko + + + Unable to rename '%1'. + Preimenovanje '%1' ni bilo mogoče. + + + Reload File? + Ponovno naložim? + + + Reload the file '%1' from disk? + Ali datoteko '%1' ponovno naložim iz diska? + + + All unsaved changes will be lost. + Vse neshranjene spremembe bodo izgubljene. + + + Reload + Ponovno naloži + + + Untitled %1 + Neimenovano %1 + + + Question + Vprašanje + + + Saving as plain text will discard all formatting. Discard formatting? + Shranjevanje kot navadno besedilo bo odstranilo vso oblikovanje. Odstranim oblikovanje? + + + + DocumentWatcher + + File Changed + Datoteka je bila spremenjena + + + The file '%1' was changed by another program. + Datoteko '%1' je spremenil drug program. + + + Do you want to reload the file? + Ali naj ponovno naložim datoteko? + + + Reload + Ponovno naloži + + + Ignore + Ignoriraj + + + File Deleted + Datoteka je bila izbrisana + + + The file %1 was deleted by another program. + Datoteko %1 je izbrisal drug program. + + + Do you want to save or close the file? + Ali želite shraniti ali zapreti datoteko? + + + + DocxReader + + Unable to open archive. + Arhiva ni bilo mogoče odpreti. + + + + FindDialog + + Search for: + Išči: + + + Replace with: + Zamenjaj z: + + + Ignore case + Ne upoštevaj velikosti začetnic + + + Whole words only + Samo cele besede + + + Regular expressions + Regularni izrazi + + + Search up + Išči gor + + + Search down + Išči dol + + + &Find + Išči(&F) + + + &Replace + Zamenjaj(&R) + + + Replace &All + Z&amenjej vse + + + Find + Išči + + + Replace + Zamenjaj + + + Replace %n instance(s)? + + Zamenjaj %n pojavitev? + Zamenjaj %n pojavitev? + Zamenjaj %n pojavitev? + Zamenjaj %n pojavitev? + + + + Question + Vprašanje + + + Sorry + Oprostite + + + Phrase not found. + Izraz ni bil najden. + + + + FormatManager + + OpenDocument Text + OpenDocument besedilo + + + OpenDocument Flat XML + OpenDocument XML + + + Office Open XML + Office Open XML + + + Rich Text Format + Rich Text Format + + + Plain Text + Enostavno besedilo + + + All Files + Vse datoteke + + + All Supported Files + Vse podprte datoteke + + + + Highlighter + + Add + Dodaj + + + Check Spelling... + Preveri pravopis... + + + (No suggestions found) + (Ni predlogov) + + + + ImageButton + + Open Image + Odpri sliko + + + Images(%1) + Slike(%1) + + + + LocaleDialog + + Select application language: + Izberi jezik programa: + + + <System Language> + <System Language> + + + Note + Opomba + + + Please restart this application for the change in language to take effect. + Prosimo, ponovno zaženite program, da se uveljavi spremembe jezika. + + + + OdtReader + + Unable to open archive. + Arhiva ni bilo mogoče odpreti + + + + PreferencesDialog + + Preferences + Nastavitve + + + General + Splošno + + + Statistics + Statistika + + + Toolbar + Orodna vrstica + + + Spell Checking + Preverjanje pravopisa + + + Select Dictionary + Izberi slovar + + + Sorry + Oprostite + + + Unable to open archive. + Arhiv ani bilo mogoče odpreti. + + + The archive does not contain a usable dictionary. + Arhiv ne vsebuje uporabnega slovarja. + + + Question + Vprašanje + + + Shortcuts + Bližnjice + + + One or more shortcuts conflict. Do you wish to proceed? + Ena ali več bližnjic je v sporu. Ali naj nadaljujem? + + + The dictionary "%1" already exists. Do you want to replace it? + Slovar "%1" že obstaja. Ali ga naj zamenjam? + + + Daily Goal + Dnevni cilj + + + None + Brez + + + Minutes: + Minut: + + + Words: + Besed: + + + Editing + Urejanje + + + Always vertically center + Vedno centriraj navpično + + + Block insertion cursor + Kurzur z vstavljanje blokov + + + Smooth fonts + Mehčanje pisav + + + Typewriter sounds + Zvok pisalnega stroja + + + Smart quotes: + Pametni navedki: + + + Double + Dvojno + + + Single + Enojno + + + Scenes + Scene + + + Divider: + Delitelj: + + + Saving + Shranjevanje + + + Automatically save changes + Samodejno shrani spremembe + + + Remember cursor position + Zapomni si položaj utripača + + + Word count + Štetje besed + + + Page count + Štetje strani + + + Paragraph count + Štetje odstavkov + + + Character count + Štetje znakov + + + Characters: + Znaki: + + + Paragraphs: + Odstavki: + + + Word Count Algorithm + Algoritem za štetje besed + + + Reset daily progress for today to zero? + Ponastavim dnevni napredek za danes na nič? + + + Remove current dictionary? + Odstranim trenutni slovar? + + + Write byte order mark in plain text files + + + + Default format: + Privzeti format: + + + User Interface + Uporabniški vmesnik + + + Always show scrollbar + Vedno prikaži drsnik + + + Always show top bar + Vedno prikaži zgornjo vrstico + + + Always show bottom bar + Vedno prikaži vrstico na dnu + + + Reset Today + Ponastavi za danes + + + History + Zgodovina + + + Remember history + Beleži zgodovino + + + Show streaks + Pokaži trake + + + Minimum progress for streaks: + + + + Detect word boundaries + Zaznaj meje besed + + + Divide character count by six + Deli število znakov s sešt + + + Count each letter as a word + Štej vsak znak kot besedo + + + Page Count Algorithm + Algortem za štetje strani + + + Style + Slog + + + Icons Only + Samo ikone + + + Text Only + Samo besedilo + + + Text Alongside Icons + Besedilo ob ikonah + + + Text Under Icons + Besedilo pod ikonami + + + Text Position: + Položaj besedila: + + + Actions + Aktivnosti + + + Move Up + Premik gor + + + Move Down + Premik dol + + + Add Separator + Dodaj delilnik + + + Command + Ukaz + + + Shortcut + Bližnjica + + + Action + Aktivnost + + + Check spelling as you type + Preverjaj pravopis med tipkanjem + + + Ignore words in UPPERCASE + Zanemari besede v VELIKIH črkah + + + Ignore words with numbers + Zanemari besede s številkami + + + Language + Jezik + + + Add + Dodaj + + + Remove + Odstrani + + + Personal Dictionary + Osebni slovar + + + + RtfReader + + Not a supported RTF file. + Ni podprta RTF datoteka. + + + + RtfTokenizer + + Unexpectedly reached end of file. + Nepričakovano smo naleteli na konec datoteke. + + + + SceneList + + Ctrl+Shift+Down + Ctrl+Shift+Dol + + + Move Scenes Up + Premakni scene gor + + + Ctrl+Shift+Up + Ctrl+Shift+Gor + + + Toggle Scene List + Zamenjaj seznam scen + + + Shift+F4 + Shift+F4 + + + Show scene list (%1) + Pokaže seznam scen (%1) + + + Hide scene list (%1) + Skrij seznam scen (%1) + + + Filter + Filter + + + Move Scenes Down + Premakni scene dol + + + Resize scene list + Spremeni velikost seznama scen + + + + Session + + Default + Privzeto + + + + SessionManager + + Manage Sessions + Upravljaj seje + + + S&essions + S&eje + + + New + Nova + + + Duplicate + Podvoji + + + Rename + Preimenuj + + + Delete + Izbriši + + + Switch To + Preklopi na + + + New Session + Nova seja + + + Duplicate Session + Podvoji sejo + + + Rename Session + Preimenuj sejo + + + Question + Vprašanje + + + Delete selected session? + Izbrišem trenutno sejo? + + + Session name: + Ime seje: + + + Sorry + Oprostite + + + The requested session name is already in use. + Izbrano ime seje je že v uporabi. + + + &New... + &Nova... + + + Ctrl+Shift+N + Ctrl+Shift+N + + + &Manage... + (&M)Upravljaj... + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + Clear + Počisti + + + Reset to Default + Ponastavi na privzeto + + + Shortcut: + Bližnjica: + + + + SmartQuote + + Replacing quotation marks... + Zamenjava narekovajev... + + + Please Wait + Prosim počakajte + + + + SpellChecker + + Check Spelling + Preveri pravopis + + + &Add + Dod&aj + + + &Ignore + &Ignoriraj + + + I&gnore All + I&gnoriraj vse + + + &Change + (&C)Spremeni + + + C&hange All + (&H)Spremeni vse + + + Not in dictionary: + Ni v slovarju: + + + Change to: + Spremeni v: + + + Checking spelling... + Preverjanje pravopisa... + + + Cancel + Prekliči + + + Please wait + Prosim počakajte + + + Continue checking at beginning of file? + Nadaljujem s preverjanjem od začetka datoteke? + + + Spell check complete. + Preverjanje pravopisa končano. + + + + SymbolsDialog + + Symbols + Simboli + + + Recently used symbols + Nedavno uporabljeni simboli + + + All symbols + Vsi simboli + + + Details + Podrobnosti + + + Name: + Ime: + + + Insert + Vstavi + + + + SymbolsModel + + Blocks + Bloki + + + Scripts + Skripti + + + + Theme + + Untitled %1 + Neimenovan/o %1 + + + + ThemeDialog + + Name: + Ime: + + + No Image + Ni slike + + + Tiled + Razporejeno + + + Centered + Centrirano + + + Stretched + Raztegnjeno + + + Scaled + Raztegnjeno + + + Zoomed + Zumirano + + + Opacity: + Prosojnost: + + + Position: + Položaj: + + + Width: + Širina: + + + Round Text Background Corners + Zaokroži ogale ozadja besedila + + + Radius: + Polmer: + + + Blur Text Background + Razmaži ozadje besedila + + + Text Background Drop Shadow + Senca na ozadju besedila + + + Vertical Offset: + Navpični odmik: + + + Margins + Robovi + + + Window: + Okno: + + + Page: + Stran: + + + Indent first line + Zamik prve vrstice + + + Above: + Nad: + + + Below: + Pod: + + + Remove + Odstrani + + + Edit Theme + Uredi temo + + + Window Background + Ozadje okna + + + Type: + Vrsta: + + + Color: + Barva: + + + Image: + Slika: + + + pixels + pixlov + + + Left + Levo + + + Text Background + Ozadje besedila + + + Right + Desno + + + Text + Besedilo + + + Font: + Pisava: + + + Misspelled: + + + + Line Spacing + Razmik vrstic + + + Single + Enojno + + + 1.5 Lines + 1.5 vrstice + + + Double + Dvojno + + + Proportional + Proporcionalno + + + Height: + Višina: + + + Paragraph Spacing + Razmik odstavkov + + + Tab Width: + Širina tabulatorja: + + + New Theme + Nova tema + + + + ThemeManager + + Themes + Teme + + + Default + Privzeto + + + Bitter Skies + + + + Enchantment + + + + Gentle Blues + Nežna modrina + + + Old School + Stara šola + + + Space Dreams + Vesoljske sanje + + + Spy Games + Vohunske igre + + + Tranquility + Spokojnost + + + Writing Desk + Pisalna miza + + + New + Nova + + + Duplicate + Podvoji + + + Custom + Prilagojeno + + + Edit + Uredi + + + Delete + Izbriši + + + Import + Uvozi + + + Export + Izvozi + + + Question + Vprašanje + + + Delete theme '%1'? + Brisanje teme '%1'? + + + Themes (%1) + Teme (%1) + + + Import Theme + Uvozi temo + + + Export Theme + Izvozi temo + + + + Timer + + <b>%1</b> - %2 + <b>%1</b> - %2 + + + Question + Vprašanje + + + Delete timer? + Izbrišem časovnik? + + + <b>Words:</b> %L1 + <b>Besed:</b> %L1 + + + <b>Pages:</b> %L1 + <b>Strani:</b> %L1 + + + <b>Paragraphs:</b> %L1 + <b>Odstavkov:</b> %L1 + + + <b>Characters:</b> %L1 / %L2 + <b>Znakov:</b> %L1 / %L2 + + + Set Delay + Nastavi zamik + + + Set Time + Nastavi čas + + + Delay: + Zamik: + + + Time: + Čas: + + + HH:mm:ss + HH:mm:ss + + + Alarm + Alarm + + + Type: + Vrsta: + + + Memo: + Memo: + + + Edit + Uredi + + + Delete + Izbriši + + + + TimerDisplay + + HH:mm:ss + HH:mm:ss + + + No timers running + Ni dejavnih časovnikov + + + + TimerManager + + Timers + Časovniki + + + New + Novo + + + Recent + Zadnje + + + Question + Vprašanje + + + Cancel editing timers? + Prekliči urejanje časovnikov? + + + +HH:mm:ss + +HH:mm:ss + + + %1 - %2 + %1 - %2 + + + + Window + + Loading themes + Nalaganje tem + + + Loading sounds + Nalaganje zvokov + + + Untitled + Neimenovano + + + Open File + Odpri datoteko + + + About FocusWriter + O FocusWriterju + + + FocusWriter + FocusWriter + + + A simple fullscreen word processor + Enostaven celozaslonski urejevalnik besedila + + + Copyright &copy; 2008-%1 Graeme Gott + Copyright &copy; 2008-%1 Graeme Gott + + + Released under the <a href=%1>GPL 3</a> license + Objavljeno pod <a href=%1>GPL 3</a> licenco + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Uporablja ikone iz teme <a href=%1>Oxygen</a> + + + Used under the <a href=%1>LGPL 3</a> license + Uporaba pod <a href=%1>LGPL 3</a> licenco + + + Characters: %L1 / %L2 + Znaki: %L1 / %L2 + + + Pages: %L1 + Strani: %L1 + + + Paragraphs: %L1 + Odstavki: %L1 + + + Words: %L1 + Besede: %L1 + + + Opening %1 + Odpiranje %1 + + + (Untitled %1) + (Neimenovano %1) + + + List all documents + + + + Switch to Next Document + + + + Switch to Previous Document + + + + Switch to First Document + + + + Switch to Last Document + + + + Switch to Document %1 + + + + Loading settings + + + + Emergency cache is not writable. + + + + Warning + + + + FocusWriter was not shut down cleanly. + + + + Restore from the emergency cache? + + + + Some files could not be opened. + + + + Some files were opened Read-Only. + + + + '%1' is newer than the cached copy. + + + + Overwrite newer file? + + + + Save Changes? + + + + Save changes to the file '%1' before closing? + + + + Your changes will be lost if you don't save them. + + + + Unable to load typewriter sounds. + + + + &File + + + + &New + + + + &Open... + + + + Reloa&d + + + + &Save + + + + Save &As... + + + + &Rename... + + + + Save A&ll + + + + Manage Sessions + Upravljaj seje + + + New Session + Nova seja + + + &Print... + + + + Pa&ge Setup... + + + + &Close + + + + &Quit + + + + Ctrl+Q + + + + &Edit + + + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Paste &Unformatted + + + + Ctrl+Shift+V + + + + Select &All + + + + Select &Scene + + + + Ctrl+Shift+A + + + + Fo&rmat + + + + &Heading + + + + Heading &1 + + + + Heading &2 + + + + Heading &3 + + + + Heading &4 + + + + Heading &5 + + + + Heading &6 + + + + &Normal + + + + &Bold + + + + &Italic + + + + &Underline + + + + Stri&kethrough + + + + Ctrl+K + + + + Sup&erscript + + + + Ctrl+^ + + + + &Subscript + + + + Ctrl+_ + + + + Align &Left + + + + Ctrl+{ + + + + Align &Center + + + + Ctrl+| + + + + Align &Right + + + + Ctrl+} + + + + Align &Justify + + + + Ctrl+J + + + + &Decrease Indent + + + + Ctrl+< + + + + I&ncrease Indent + + + + Ctrl+> + + + + Le&ft to Right Block + + + + Ri&ght to Left Block + + + + &Tools + + + + &Find... + + + + Find &Next + + + + Find Pre&vious + + + + &Replace... + + + + Ctrl+R + + + + Smart &Quotes + + + + Update &Document + + + + Update Document Smart Quotes + + + + Update &Selection + + + + Update Selection Smart Quotes + + + + &Spelling... + + + + F7 + + + + Set &Language... + + + + &Timers... + + + + S&ymbols... + + + + &Daily Progress + + + + &Settings + + + + Show &Toolbar + + + + Show &Menu Icons + + + + F&ocused Text + + + + &Fullscreen + + + + F11 + + + + Esc + + + + M&inimize + + + + Ctrl+M + + + + &Themes... + + + + &Preferences... + + + + Focus Off + + + + Focus One Line + + + + Focus Three Lines + + + + &Paragraph + + + + Focus Paragraph + + + + Ctrl+Shift+` + + + + &Help + + + + Application &Language... + + + + Some files were unsupported and could not be opened. + + + + &Off + + + + One &Line + + + + &Three Lines + + + + &About + + + + About &Qt + + + + From ece42747136346ed3382368d80c0bbab7114fbcd Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 7 Feb 2018 13:48:53 -0500 Subject: [PATCH 387/630] Bump version number. --- NEWS | 6 ++++++ mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 454fe530..266bc117 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +1.6.9 +----- +* Updated dictionaries. +* FIXED: Could not save to network devices. +* Translation updates: Igbo, Slovenian. + 1.6.8 ----- * FIXED: Could not compile with Qt 5.10. diff --git a/mac_deploy.sh b/mac_deploy.sh index 498f0594..3502f7ce 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.8' +VERSION='1.6.9' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 0393f7c2..df68e58a 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 8 +!define VERSIONPATCH 9 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index ec1892a6..80ae56a8 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.8 +SET VERSION=1.6.9 ECHO Copying executable MKDIR %APP% From 3123f7f6fd794117f17da440ce175ca7a69a42d9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 7 Feb 2018 15:36:23 -0500 Subject: [PATCH 388/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 7e97419e..1b8fca45 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.9-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Wed, 07 Feb 2018 19:05:36 +0000 + focuswriter (1.6.8-2) unstable; urgency=medium * Merge minor upstream fixes From 1be025adc50bada2db0e253dd7651f9258c697d5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 9 Feb 2018 11:50:41 -0500 Subject: [PATCH 389/630] Reduce time between cache writes. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index 2c8606dc..b42f8ccb 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -159,7 +159,7 @@ Window::Window(const QStringList& command_line_files) : // Set up cache timer m_save_timer = new QTimer(this); - m_save_timer->setInterval(600000); + m_save_timer->setInterval(300000); connect(m_save_timer, SIGNAL(timeout()), m_daily_progress, SLOT(save())); // Set up details From 2b369e60e15993027e296b06e94552784d306434 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 9 Feb 2018 11:51:03 -0500 Subject: [PATCH 390/630] Default to Flat ODT when no type is specified. --- src/document_writer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/document_writer.cpp b/src/document_writer.cpp index 954cef90..82840b89 100644 --- a/src/document_writer.cpp +++ b/src/document_writer.cpp @@ -30,7 +30,7 @@ //----------------------------------------------------------------------------- DocumentWriter::DocumentWriter() : - m_type("odt"), + m_type("fodt"), m_document(0), m_write_bom(false) { From f67b63e4060565a68f24250249380fe239107c67 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 14 Feb 2018 10:15:34 +0000 Subject: [PATCH 391/630] secure some URLs in debian/copyright --- debian/copyright | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/copyright b/debian/copyright index 97768b30..58a54114 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,8 +1,8 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: FocusWriter Upstream-Contact: Graeme Gott Source: http://gottcode.org/focuswriter/ - git://github.com/gottcode/focuswriter.git + https://github.com/gottcode/focuswriter Files: * Copyright: 2008-2014, Graeme Gott From 53441adfc3199887737f1cf1a3be21387b6362ac Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Feb 2018 09:21:42 -0500 Subject: [PATCH 392/630] FIXED: Fade effect hid text on load screen. Workaround for QTBUG-66387. --- src/load_screen.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/load_screen.cpp b/src/load_screen.cpp index eeb5c56d..f4a5ea02 100644 --- a/src/load_screen.cpp +++ b/src/load_screen.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012, 2016 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2016, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,6 +66,7 @@ LoadScreen::LoadScreen(QWidget* parent) : m_hide_effect = new QGraphicsOpacityEffect(this); m_hide_effect->setOpacity(1.0); setGraphicsEffect(m_hide_effect); + m_hide_effect->setEnabled(false); m_hide_timer = new QTimer(this); m_hide_timer->setInterval(30); @@ -108,6 +109,7 @@ void LoadScreen::setText(const QString& step) m_hide_timer->stop(); } m_hide_effect->setOpacity(1.0); + m_hide_effect->setEnabled(false); show(); raise(); @@ -119,6 +121,7 @@ void LoadScreen::setText(const QString& step) void LoadScreen::finish() { m_hide_effect->setOpacity(1.0); + m_hide_effect->setEnabled(true); m_hide_timer->start(); } @@ -156,6 +159,7 @@ void LoadScreen::fade() if (m_hide_effect->opacity() <= 0.01) { m_hide_timer->stop(); hide(); + m_hide_effect->setEnabled(false); } } From d513e35890a68c1a9563cd1360d968fe97c10594 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 18 Feb 2018 09:29:31 -0500 Subject: [PATCH 393/630] FIXED: Fade effect broke alerts. Workaround for QTBUG-66387. --- src/alert.cpp | 12 +++++++----- src/alert.h | 4 +++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/alert.cpp b/src/alert.cpp index 2c6d209d..5955af56 100644 --- a/src/alert.cpp +++ b/src/alert.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -187,6 +187,7 @@ void Alert::expanderToggled() void Alert::fadeInFinished() { + m_fade_effect->setEnabled(false); setAttribute(Qt::WA_TransparentForMouseEvents, false); disconnect(m_fade_timer, SIGNAL(finished()), this, SLOT(fadeInFinished())); } @@ -195,6 +196,7 @@ void Alert::fadeInFinished() void Alert::fadeOut() { + m_fade_effect->setEnabled(true); setAttribute(Qt::WA_TransparentForMouseEvents); m_fade_timer->setDirection(QTimeLine::Backward); connect(m_fade_timer, SIGNAL(finished()), this, SLOT(deleteLater())); @@ -244,12 +246,12 @@ void Alert::init() layout->addWidget(m_text, 1); layout->addWidget(close, 0, Qt::AlignHCenter | Qt::AlignTop); - QGraphicsOpacityEffect* fade_effect = new QGraphicsOpacityEffect(this); - fade_effect->setOpacity(0.0); - setGraphicsEffect(fade_effect); + m_fade_effect = new QGraphicsOpacityEffect(this); + m_fade_effect->setOpacity(0.0); + setGraphicsEffect(m_fade_effect); m_fade_timer = new QTimeLine(240, this); - connect(m_fade_timer, SIGNAL(valueChanged(qreal)), fade_effect, SLOT(setOpacity(qreal))); + connect(m_fade_timer, &QTimeLine::valueChanged, m_fade_effect, &QGraphicsOpacityEffect::setOpacity); } //----------------------------------------------------------------------------- diff --git a/src/alert.h b/src/alert.h index da619042..a63fee45 100644 --- a/src/alert.h +++ b/src/alert.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #define ALERT_H #include +class QGraphicsOpacityEffect; class QLabel; class QTimeLine; class QToolButton; @@ -71,6 +72,7 @@ private slots: QString m_short_text; QString m_long_text; QTimeLine* m_fade_timer; + QGraphicsOpacityEffect* m_fade_effect; bool m_expanded; bool m_always_expanded; bool m_under_mouse; From d2eeebcb506070d04c883e61f9f2a5af5a40a3b2 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Feb 2018 07:40:39 -0500 Subject: [PATCH 394/630] Sync translations with Transifex. --- translations/focuswriter_el.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 3d94f7e7..349898d0 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -289,7 +289,7 @@
OpenDocument Flat XML - + OpenDocument Flat XML Office Open XML @@ -520,7 +520,7 @@ Remove current dictionary? - + Να αφαιρεθεί το υπάρχον λεξικό; Write byte order mark in plain text files @@ -536,15 +536,15 @@ Always show scrollbar - + Εμφάνιση πάντα της γραμμής κύλισης Always show top bar - + Εμφάνιση πάντα τού top bar Always show bottom bar - + Εμφάνιση πάντα τού bottom bar Reset Today @@ -1503,7 +1503,7 @@ Pa&ge Setup... - + Δι&αμόρφωση Σελίδας... &Close @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Ενημέρωση εισαγωγικών εγγράφου Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Ενημέρωση επιλογής εισαγωγικών εγγράφου &Spelling... From 5fd8e6b57f9dc560e653774c3afabb44ad74e64e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Feb 2018 08:04:24 -0500 Subject: [PATCH 395/630] Use version number in macOS bundle. --- resources/mac/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/mac/Info.plist b/resources/mac/Info.plist index ba343290..24b8cac3 100644 --- a/resources/mac/Info.plist +++ b/resources/mac/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString @SHORT_VERSION@ CFBundleVersion - @SHORT_VERSION@ + @VERSION@ CFBundleName FocusWriter From 1dd4e211e1ee8c1d225ff3d6342747d0ef78bd1f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Feb 2018 08:08:55 -0500 Subject: [PATCH 396/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 266bc117..084432a9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.6.10 +----- +* Default to Flat ODT for cache files. +* Reduce time between cache writes to 5 minutes. +* FIXED: Fade effect broke alerts. +* FIXED: Fade effect hid text on load screen. +* Translation updates: Greek. + 1.6.9 ----- * Updated dictionaries. diff --git a/focuswriter.pro b/focuswriter.pro index 030202ac..450b8bc0 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -33,7 +33,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.8 +VERSION = 1.6.10 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 3502f7ce..9b064056 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.9' +VERSION='1.6.10' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index df68e58a..aa81c2f1 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 9 +!define VERSIONPATCH 10 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 80ae56a8..c13ef65b 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.9 +SET VERSION=1.6.10 ECHO Copying executable MKDIR %APP% From 60eb7310a1770531105f22f39eadb9c06552778a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Feb 2018 08:27:47 -0500 Subject: [PATCH 397/630] FIXED: Windows installer mentioned old library. --- resources/windows/installer.nsi | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index aa81c2f1..cc9d68c4 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -180,7 +180,6 @@ Section "install" SetOutPath $INSTDIR\bearer File $%QTDIR%\plugins\bearer\qgenericbearer.dll - File $%QTDIR%\plugins\bearer\qnativewifibearer.dll SetOutPath $INSTDIR\imageformats File $%QTDIR%\plugins\imageformats\qgif.dll From 5d124dec3a5014655fdfb2cf33753acbf24d14c5 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 21 Feb 2018 08:47:56 -0500 Subject: [PATCH 398/630] Log changes. --- debian/changelog | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1b8fca45..9134d08e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +focuswriter (1.6.10-1) unstable; urgency=medium + + [ Graeme Gott ] + * New upstream release + + [ Barak A. Pearlmutter ] + * secure some URLs in debian/copyright + + -- Graeme Gott Wed, 21 Feb 2018 13:17:00 +0000 + focuswriter (1.6.9-1) unstable; urgency=medium * New upstream release From 56cea00343c3f8cc589e51297322543d69bef260 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Mar 2018 19:04:27 -0400 Subject: [PATCH 399/630] FIXED: File monitoring prevented saving in Windows. --- src/document_watcher.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/document_watcher.cpp b/src/document_watcher.cpp index 64888ed7..4ae595c2 100644 --- a/src/document_watcher.cpp +++ b/src/document_watcher.cpp @@ -97,7 +97,15 @@ void DocumentWatcher::addWatch(Document* document) void DocumentWatcher::pauseWatch(Document* document) { - m_documents[document].ignored = true; + // Ignore path + Details& details = m_documents[document]; + details.ignored = true; + + // Remove watch + if (!details.path.isEmpty()) { + m_watcher->removePath(details.path); + details.path.clear(); + } } //----------------------------------------------------------------------------- From 55c57b2fbfd563472f5e6a43a30049942ffa42d8 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 28 Mar 2018 17:38:29 +0100 Subject: [PATCH 400/630] swizzle packaging repo to salsa --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index 55fd4744..b7dfb001 100644 --- a/debian/control +++ b/debian/control @@ -12,8 +12,8 @@ Build-Depends: debhelper (>= 11), zlib1g-dev Standards-Version: 4.1.3 Homepage: https://gottcode.org/focuswriter/ -Vcs-Git: https://anonscm.debian.org/git/collab-maint/focuswriter.git -Vcs-Browser: https://anonscm.debian.org/gitweb/?p=collab-maint/focuswriter.git +Vcs-Git: https://salsa.debian.org/debian/focuswriter.git +Vcs-Browser: https://salsa.debian.org/debian/focuswriter Package: focuswriter Architecture: any From f7b1220a6bbf5e5be61067e2569f1a29f58d677d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 30 Mar 2018 09:29:58 -0400 Subject: [PATCH 401/630] Sync translations with Transifex. --- translations/focuswriter_da.ts | 28 +++++++------- translations/focuswriter_sl.ts | 68 +++++++++++++++++----------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index cf7ef5d5..789dbcd7 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -289,7 +289,7 @@ OpenDocument Flat XML - + OpenDocument flad XML Office Open XML @@ -520,7 +520,7 @@ Remove current dictionary? - + Fjern nuværende mappe? Write byte order mark in plain text files @@ -532,19 +532,19 @@ User Interface - + Brugerflade Always show scrollbar - + Vis altid scrollbar Always show top bar - + Vis altid øverste bjælke Always show bottom bar - + Vis altid nederste bjælke Reset Today @@ -1119,11 +1119,11 @@ Bitter Skies - + Bitter Skies Enchantment - + Enchantment Gentle Blues @@ -1139,11 +1139,11 @@ Spy Games - + Spy Games Tranquility - + Tranquility Writing Desk @@ -1503,7 +1503,7 @@ Pa&ge Setup... - + Si&deopsætning... &Close @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Opdater dokumentet med Smart Quotes Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Opdater markeringen med Smart Quotes &Spelling... @@ -1823,7 +1823,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_sl.ts b/translations/focuswriter_sl.ts index bab20036..b73c4e43 100644 --- a/translations/focuswriter_sl.ts +++ b/translations/focuswriter_sl.ts @@ -1080,7 +1080,7 @@ Misspelled: - + Narobe črkovano: Line Spacing @@ -1131,11 +1131,11 @@ Bitter Skies - + Grenko nebo Enchantment - + Začarano Gentle Blues @@ -1395,127 +1395,127 @@ List all documents - + Seznam vseh dokumentov Switch to Next Document - + Preklopi na naslednji dokument Switch to Previous Document - + Preklopi na prejšnji dokument Switch to First Document - + Preklopi na prvi dokument Switch to Last Document - + Preklopi na zadnji dokument Switch to Document %1 - + Preklopi na dokument %1 Loading settings - + Nalaganje nastavitev Emergency cache is not writable. - + Zasilni spomin ni zapisljiv. Warning - + Opozorilo FocusWriter was not shut down cleanly. - + FocusWriter ni bil pravilno izklopljen. Restore from the emergency cache? - + Obnovi iz začasne kopije? Some files could not be opened. - + Nekaterih datotek ni bilo mogoče odpreti. Some files were opened Read-Only. - + Nekatere datoteke so odprte le za branje. '%1' is newer than the cached copy. - + '%1' je novejše kot kopija v spominu. Overwrite newer file? - + Prepišem novejšo datoteko? Save Changes? - + Shranim spremembe? Save changes to the file '%1' before closing? - + Shranim spremembe v datoteko '%1' pred zapiranjem? Your changes will be lost if you don't save them. - + Vaše spremembe bodo izgubljene, če jih ne shranite. Unable to load typewriter sounds. - + Nalaganje zvokov pisalnega stroja ni bilo uspešno. &File - + &Datoteka &New - + &Novo &Open... - + &Odpri... Reloa&d - + Ponovno na&loži &Save - + &Shrani Save &As... - + Shr&ani kot... &Rename... - + P&reimenuj Save A&ll - + Shrani &vse Manage Sessions - Upravljaj seje + Upravjanje seje New Session - Nova seja + Nova seja &Print... - + Natisni...(&P) Pa&ge Setup... - + Postavitev st&rani... &Close From b34ec76cde7cff2554a9031b59a5aed85c68bcdd Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 30 Mar 2018 09:31:28 -0400 Subject: [PATCH 402/630] Bump version number. --- NEWS | 5 +++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 084432a9..80df6edd 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +1.6.11 +------ +* FIXED: File monitoring prevented saving in Windows. +* Translation updates: Danish, Slovenian. + 1.6.10 ----- * Default to Flat ODT for cache files. diff --git a/focuswriter.pro b/focuswriter.pro index 450b8bc0..f929d79d 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -33,7 +33,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.10 +VERSION = 1.6.11 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 9b064056..375768df 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.10' +VERSION='1.6.11' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index cc9d68c4..9096c6bd 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 10 +!define VERSIONPATCH 11 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index c13ef65b..1e257e60 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.10 +SET VERSION=1.6.11 ECHO Copying executable MKDIR %APP% From d8913676e8f3053e93cec48ac8838965ddd344aa Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 30 Mar 2018 09:34:38 -0400 Subject: [PATCH 403/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9134d08e..95d38533 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.11-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Fri, 30 Mar 2018 13:33:30 +0000 + focuswriter (1.6.10-1) unstable; urgency=medium [ Graeme Gott ] From 8817b600759f54393e63e9f267c911e5c4c8b04f Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Wed, 4 Apr 2018 09:03:18 +0100 Subject: [PATCH 404/630] simplify gbp.conf --- debian/gbp.conf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/debian/gbp.conf b/debian/gbp.conf index f5c6a7bb..02bab3ce 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -1,9 +1,5 @@ -[import-orig] -pristine-tar = True +[DEFAULT] debian-branch = debian upstream-tag = 'v%(version)s' - -[buildpackage] -upstream-tag = 'v%(version)s' pristine-tar = True -debian-branch = debian +sign-tags = True From dcabb1774b983518f47229e49d092ece829b5afe Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 16 Mar 2017 09:47:22 -0400 Subject: [PATCH 405/630] Remove auto save. --- src/preferences.cpp | 18 +----------------- src/preferences.h | 5 +---- src/preferences_dialog.cpp | 6 +----- src/preferences_dialog.h | 3 +-- src/stack.cpp | 15 --------------- src/stack.h | 3 +-- src/window.cpp | 14 -------------- src/window.h | 3 +-- 8 files changed, 6 insertions(+), 61 deletions(-) diff --git a/src/preferences.cpp b/src/preferences.cpp index 892ab939..157e158a 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -377,13 +377,6 @@ void Preferences::setSceneDivider(const QString& divider) //----------------------------------------------------------------------------- -bool Preferences::autoSave() const -{ - return m_auto_save; -} - -//----------------------------------------------------------------------------- - bool Preferences::savePositions() const { return m_save_positions; @@ -405,13 +398,6 @@ RangedString Preferences::saveFormat() const //----------------------------------------------------------------------------- -void Preferences::setAutoSave(bool save) -{ - setValue(m_auto_save, save); -} - -//----------------------------------------------------------------------------- - void Preferences::setSavePositions(bool save) { setValue(m_save_positions, save); @@ -602,7 +588,6 @@ void Preferences::reload() m_scene_divider = settings.value("SceneList/Divider", QLatin1String("##")).toString(); SceneModel::setSceneDivider(m_scene_divider); - m_auto_save = settings.value("Save/Auto", false).toBool(); m_save_positions = settings.value("Save/RememberPositions", true).toBool(); m_write_bom = settings.value("Save/WriteBOM", true).toBool(); m_save_format = settings.value("Save/DefaultFormat", "odt").toString(); @@ -660,7 +645,6 @@ void Preferences::write() settings.setValue("SceneList/Divider", m_scene_divider); - settings.setValue("Save/Auto", m_auto_save); settings.setValue("Save/RememberPositions", m_save_positions); settings.setValue("Save/WriteBOM", m_write_bom); settings.setValue("Save/DefaultFormat", m_save_format.value()); diff --git a/src/preferences.h b/src/preferences.h index 064b26f6..7882f5e2 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -89,11 +89,9 @@ class Preferences : public SettingsFile QString sceneDivider() const; void setSceneDivider(const QString& divider); - bool autoSave() const; bool savePositions() const; bool writeByteOrderMark() const; RangedString saveFormat() const; - void setAutoSave(bool save); void setSavePositions(bool save); void setWriteByteOrderMark(bool write_bom); void setSaveFormat(const QString& format); @@ -155,7 +153,6 @@ class Preferences : public SettingsFile QString m_scene_divider; - bool m_auto_save; bool m_save_positions; RangedString m_save_format; bool m_write_bom; diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index 02de4583..feff05e1 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -158,7 +158,6 @@ PreferencesDialog::PreferencesDialog(DailyProgress* daily_progress, QWidget* par m_scene_divider->setText(Preferences::instance().sceneDivider()); - m_auto_save->setChecked(Preferences::instance().autoSave()); m_save_positions->setChecked(Preferences::instance().savePositions()); m_save_format->setCurrentIndex(m_save_format->findData(Preferences::instance().saveFormat().value())); m_write_bom->setChecked(Preferences::instance().writeByteOrderMark()); @@ -285,7 +284,6 @@ void PreferencesDialog::accept() Preferences::instance().setSceneDivider(m_scene_divider->text()); - Preferences::instance().setAutoSave(m_auto_save->isChecked()); Preferences::instance().setSavePositions(m_save_positions->isChecked()); Preferences::instance().setWriteByteOrderMark(m_write_bom->isChecked()); Preferences::instance().setSaveFormat(m_save_format->itemData(m_save_format->currentIndex()).toString()); @@ -724,7 +722,6 @@ QWidget* PreferencesDialog::initGeneralTab() // Create save options QGroupBox* save_group = new QGroupBox(tr("Saving"), tab); - m_auto_save = new QCheckBox(tr("Automatically save changes"), save_group); m_save_positions = new QCheckBox(tr("Remember cursor position"), save_group); m_write_bom = new QCheckBox(tr("Write byte order mark in plain text files"), save_group); @@ -742,7 +739,6 @@ QWidget* PreferencesDialog::initGeneralTab() save_format_layout->addStretch(); QVBoxLayout* save_layout = new QVBoxLayout(save_group); - save_layout->addWidget(m_auto_save); save_layout->addWidget(m_save_positions); save_layout->addWidget(m_write_bom); save_layout->addLayout(save_format_layout); diff --git a/src/preferences_dialog.h b/src/preferences_dialog.h index db4be1eb..e1c48557 100644 --- a/src/preferences_dialog.h +++ b/src/preferences_dialog.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,7 +86,6 @@ private slots: QComboBox* m_single_quotes; QCheckBox* m_typewriter_sounds; QLineEdit* m_scene_divider; - QCheckBox* m_auto_save; QCheckBox* m_save_positions; QCheckBox* m_write_bom; QComboBox* m_save_format; diff --git a/src/stack.cpp b/src/stack.cpp index 590e02a5..c5e7f0e8 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -289,21 +289,6 @@ void Stack::autoCache() //----------------------------------------------------------------------------- -void Stack::autoSave() -{ - for (Document* document : m_documents) { - if (document->isModified()) { - if (!document->filename().isEmpty()) { - document->save(); - } else { - document->cache(); - } - } - } -} - -//----------------------------------------------------------------------------- - void Stack::checkSpelling() { m_current_document->checkSpelling(); diff --git a/src/stack.h b/src/stack.h index f836fbc5..57937bbc 100644 --- a/src/stack.h +++ b/src/stack.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -82,7 +82,6 @@ public slots: void alignLeft(); void alignRight(); void autoCache(); - void autoSave(); void checkSpelling(); void cut(); void copy(); diff --git a/src/window.cpp b/src/window.cpp index b42f8ccb..6a531579 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -92,7 +92,6 @@ Window::Window(const QStringList& command_line_files) : m_key_sound(0), m_enter_key_sound(0), m_fullscreen(true), - m_auto_save(true), m_save_positions(true) { setAcceptDrops(true); @@ -1105,11 +1104,6 @@ bool Window::saveDocument(int index) return true; } - // Auto-save document - if (m_auto_save && document->isModified() && !document->filename().isEmpty()) { - return document->save(); - } - // Prompt about saving changes QMessageBox mbox(window()); mbox.setWindowTitle(tr("Save Changes?")); @@ -1155,14 +1149,6 @@ void Window::loadPreferences() } Sound::setEnabled(Preferences::instance().typewriterSounds()); - m_auto_save = Preferences::instance().autoSave(); - if (m_auto_save) { - disconnect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); - connect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); - } else { - disconnect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoSave())); - connect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); - } m_save_positions = Preferences::instance().savePositions(); SmartQuotes::loadPreferences(); diff --git a/src/window.h b/src/window.h index a59f0c51..f81bd64e 100644 --- a/src/window.h +++ b/src/window.h @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2015 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -142,7 +142,6 @@ private slots: QTimer* m_save_timer; bool m_fullscreen; - bool m_auto_save; bool m_save_positions; DailyProgress* m_daily_progress; DailyProgressDialog* m_daily_progress_dialog; From 8b716e2ec4ba36d261cc460e4494d14bc5dcac47 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 9 Apr 2018 06:16:22 -0400 Subject: [PATCH 406/630] Ignore empty cache files. --- src/window.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 6a531579..0da98c10 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -313,19 +313,26 @@ Window::Window(const QStringList& command_line_files) : // Read mapping of cached files m_document_cache->parseMapping(files, datafiles); - // Ask if they want to use cached files - if (!files.isEmpty()) { - QStringList filenames; - int untitled = 1; - int count = files.count(); - for (int i = 0; i < count; ++i) { - if (!files.at(i).isEmpty()) { - filenames.append(QDir::toNativeSeparators(files.at(i))); - } else { - filenames.append(tr("(Untitled %1)").arg(untitled)); - untitled++; + // Find proper names of cache files + QStringList filenames; + int untitled = 1; + for (int i = 0, count = files.count(); i < count; ++i) { + if (!files.at(i).isEmpty()) { + // Ignore empty cache files + if (QFileInfo(datafiles.at(i)).size() == 0) { + datafiles[i] = files[i]; + continue; } + + filenames.append(QDir::toNativeSeparators(files.at(i))); + } else { + filenames.append(tr("(Untitled %1)").arg(untitled)); + untitled++; } + } + + // Ask if they want to use cached files + if (!filenames.isEmpty()) { m_load_screen->setText(""); QMessageBox mbox(window()); mbox.setWindowTitle(tr("Warning")); From e5b81798486fbc253f2b734bfc0b8253b7217033 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 10 Apr 2018 07:45:12 -0400 Subject: [PATCH 407/630] Update translations. --- translations/focuswriter_af_ZA.ts | 4 ---- translations/focuswriter_ar.ts | 4 ---- translations/focuswriter_ca.ts | 4 ---- translations/focuswriter_cs.ts | 4 ---- translations/focuswriter_da.ts | 4 ---- translations/focuswriter_de.ts | 4 ---- translations/focuswriter_el.ts | 4 ---- translations/focuswriter_en.ts | 4 ---- translations/focuswriter_en_GB.ts | 4 ---- translations/focuswriter_eo.ts | 4 ---- translations/focuswriter_es.ts | 4 ---- translations/focuswriter_es_MX.ts | 4 ---- translations/focuswriter_fi.ts | 4 ---- translations/focuswriter_fr.ts | 4 ---- translations/focuswriter_he.ts | 4 ---- translations/focuswriter_hu.ts | 4 ---- translations/focuswriter_hy.ts | 4 ---- translations/focuswriter_id.ts | 4 ---- translations/focuswriter_ig.ts | 4 ---- translations/focuswriter_it.ts | 4 ---- translations/focuswriter_ja.ts | 4 ---- translations/focuswriter_ko.ts | 4 ---- translations/focuswriter_lt.ts | 4 ---- translations/focuswriter_nl.ts | 4 ---- translations/focuswriter_pl.ts | 4 ---- translations/focuswriter_pt.ts | 4 ---- translations/focuswriter_pt_BR.ts | 4 ---- translations/focuswriter_ro.ts | 4 ---- translations/focuswriter_ru.ts | 4 ---- translations/focuswriter_sk.ts | 4 ---- translations/focuswriter_sl.ts | 4 ---- translations/focuswriter_sr.ts | 4 ---- translations/focuswriter_sv.ts | 4 ---- translations/focuswriter_tr.ts | 4 ---- translations/focuswriter_uk.ts | 4 ---- translations/focuswriter_vi.ts | 4 ---- translations/focuswriter_zh_CN.ts | 4 ---- translations/focuswriter_zh_TW.ts | 4 ---- 38 files changed, 152 deletions(-) diff --git a/translations/focuswriter_af_ZA.ts b/translations/focuswriter_af_ZA.ts index fea19994..ced21bcb 100644 --- a/translations/focuswriter_af_ZA.ts +++ b/translations/focuswriter_af_ZA.ts @@ -478,10 +478,6 @@ Saving Stoor tans - - Automatically save changes - Stoor vanself veranderinge - Remember cursor position diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 17486280..5ac3c47e 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -502,10 +502,6 @@ Saving حفـظ - - Automatically save changes - حفظ تلقائي للتغييرات - Remember cursor position diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index c7af618c..8aef96ad 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -478,10 +478,6 @@ Saving S'està desant - - Automatically save changes - Desa els canvis automàticament - Remember cursor position Recorda la posició del cursor diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index cbd32fe5..5e853ce9 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -484,10 +484,6 @@ Saving Ukládání - - Automatically save changes - Automaticky uložit změny - Remember cursor position Zapamatovat si polohu ukazatele diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 789dbcd7..16f0da2d 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -478,10 +478,6 @@ Saving Gemmer - - Automatically save changes - Gem automatisk - Remember cursor position Husk markørens placering diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index c72b75d9..5a54b020 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -478,10 +478,6 @@ Saving Speichern - - Automatically save changes - Änderungen automatisch speichern - Remember cursor position Position der Eingabemarkierung merken diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 349898d0..2fa0d1f1 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -478,10 +478,6 @@ Saving Αποθήκευση - - Automatically save changes - Αυτόματη αποθήκευση αλλαγών - Remember cursor position Μνημόνευση θέσης δρομέα diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index d14bbe25..77269615 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -478,10 +478,6 @@ Saving - - Automatically save changes - - Remember cursor position diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 658d77c1..d78e7e75 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -478,10 +478,6 @@ Saving Saving - - Automatically save changes - Automatically save changes - Remember cursor position Remember cursor position diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index f0bdc45c..ed80840a 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -478,10 +478,6 @@ Saving Konservante - - Automatically save changes - Aŭtomate konservi ŝanĝojn - Remember cursor position Memori kursoran pozicion diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index e83a5546..7fc8815b 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -478,10 +478,6 @@ Saving Guardado - - Automatically save changes - Guardar los cambios automáticamente - Remember cursor position Recordar la posición del cursor diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 5602684c..3daf92d1 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -478,10 +478,6 @@ Saving Guardar - - Automatically save changes - Guardar automáticamente los cambios - Remember cursor position Recordar la posición del cursor diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 253b4b02..332b091b 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -478,10 +478,6 @@ Saving Tallennus - - Automatically save changes - Tallenna muutokset automaattisesti - Remember cursor position Muista kohdistimen sijainti diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 7065245c..7442cad7 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -478,10 +478,6 @@ Saving Enregistrement - - Automatically save changes - Automatique - Remember cursor position Se souvenir de la position du curseur diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 6d16de16..90708497 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -478,10 +478,6 @@ Saving שמירה - - Automatically save changes - שמור שינויים אוטומטית - Remember cursor position זכור מיקום סמן diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 7945eab1..0b67ec64 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -472,10 +472,6 @@ Saving Mentés - - Automatically save changes - A változtatások automatikus mentése - Remember cursor position A kurzor pozíciójának megjegyzése diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index b2d7c8d5..b7ec99f8 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -478,10 +478,6 @@ Saving Պահպանում - - Automatically save changes - Փոփոխությունները լռելյայն պահպանել - Remember cursor position Հիշել շարժագծի դիրքը diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 42383559..559494e5 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -472,10 +472,6 @@ Saving Menyimpan - - Automatically save changes - Menyimpan perubahan secara otomatis - Remember cursor position Ingat posisi kursor diff --git a/translations/focuswriter_ig.ts b/translations/focuswriter_ig.ts index 580fecdd..c19278d2 100644 --- a/translations/focuswriter_ig.ts +++ b/translations/focuswriter_ig.ts @@ -472,10 +472,6 @@ Saving - - Automatically save changes - - Remember cursor position diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 4726bf95..22bd1e8a 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -478,10 +478,6 @@ Saving Salvataggio - - Automatically save changes - Salva automaticamente le modifiche - Remember cursor position Ricorda la posizione del cursore diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 5ee2f83a..35b0a9b5 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -472,10 +472,6 @@ Saving 保存 - - Automatically save changes - 変更を自動的に保存する - Remember cursor position カーソル位置を記憶する diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 99009b95..4e0ec730 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -472,10 +472,6 @@ Saving 저장하기 - - Automatically save changes - 자동으로 저장하기 - Remember cursor position 커서 위치 저장하기 diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index 9d5b0ea8..3cae9908 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -484,10 +484,6 @@ Saving Įrašymas - - Automatically save changes - Automatiškai įrašyti pakeitimus - Remember cursor position Įsiminti žymeklio vietą diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 5d1e14a6..b7fb272c 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -478,10 +478,6 @@ Saving Opslaan - - Automatically save changes - Automatisch veranderingen opslaan - Remember cursor position Onthou cursor positie diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 20e49967..b599ceeb 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -484,10 +484,6 @@ Saving Zapisywanie - - Automatically save changes - Automatycznie zapisuj zmiany - Remember cursor position Pamiętaj pozycję kursora diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index e5e1bbae..04cb6923 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -478,10 +478,6 @@ Saving Gravando - - Automatically save changes - Gravar automaticamente as alterações - Remember cursor position Memorizar a posição do cursor diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index b8fdfb3f..32ade864 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -478,10 +478,6 @@ Saving Salvando - - Automatically save changes - Salvar alterações automaticamente - Remember cursor position Lembrar posição do cursor diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index daba4de8..e4999e88 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -484,10 +484,6 @@ Saving Salvare - - Automatically save changes - Salvează automat modificările - Remember cursor position Amintire poziţie cursor diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 6c5f4f81..7a798f5e 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -484,10 +484,6 @@ Saving Сохранение - - Automatically save changes - Автоматически сохранять изменения - Remember cursor position Запоминать позицию курсора diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 13bc0590..0b2c01c0 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -484,10 +484,6 @@ Saving Ukladanie - - Automatically save changes - Automaticky ukladať zmeny - Remember cursor position Zapamätať si pozíciu kurzora diff --git a/translations/focuswriter_sl.ts b/translations/focuswriter_sl.ts index b73c4e43..f2caa6fb 100644 --- a/translations/focuswriter_sl.ts +++ b/translations/focuswriter_sl.ts @@ -490,10 +490,6 @@ Saving Shranjevanje - - Automatically save changes - Samodejno shrani spremembe - Remember cursor position Zapomni si položaj utripača diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 6c646649..bca76b80 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -484,10 +484,6 @@ Saving Чување - - Automatically save changes - Аутоматски чувај промене - Remember cursor position Запамти позицију курсора diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 57c8dd49..d9a58fe6 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -478,10 +478,6 @@ Saving Spara - - Automatically save changes - Spara automatiskt ändringar - Remember cursor position Kom ihåg markörposition diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 2e64ea62..8851d55c 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -472,10 +472,6 @@ Saving Kaydetme - - Automatically save changes - Değişiklikleri otomatik olarak kaydet - Remember cursor position İmleç konumu hatırla diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 3e6e8541..52c6a0a8 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -484,10 +484,6 @@ Saving Збереження - - Automatically save changes - Зміни зберігати автоматично - Remember cursor position Пам'ятати позицію курсору diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 5caa7f16..ae153a5f 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -472,10 +472,6 @@ Saving Đang lưu - - Automatically save changes - Tự động lưu các thay đổi - Remember cursor position Nhớ vị trí trỏ chuột diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 2a4c47ce..dd166a57 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -472,10 +472,6 @@ Saving 保存 - - Automatically save changes - 自动保存更改 - Remember cursor position 记住光标位置 diff --git a/translations/focuswriter_zh_TW.ts b/translations/focuswriter_zh_TW.ts index 6f18f542..6c9a799a 100644 --- a/translations/focuswriter_zh_TW.ts +++ b/translations/focuswriter_zh_TW.ts @@ -472,10 +472,6 @@ Saving 儲存 - - Automatically save changes - 自動儲存更改 - Remember cursor position 記住游標位置 From 1c6be9b38c1776eaf6870b6d1280f2dc3cdfc7b1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 10 Apr 2018 07:50:40 -0400 Subject: [PATCH 408/630] Sync translations with Transifex. --- translations/focuswriter_sl.ts | 104 ++++++++++++++++----------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/translations/focuswriter_sl.ts b/translations/focuswriter_sl.ts index f2caa6fb..2e1623d5 100644 --- a/translations/focuswriter_sl.ts +++ b/translations/focuswriter_sl.ts @@ -1515,211 +1515,211 @@ &Close - + Zapri(&C) &Quit - + Iz&hod Ctrl+Q - + Ctrl+Q &Edit - + Ur&edi &Undo - + Razveljavi(&U) &Redo - + Uveljavi(&R) Cu&t - + Izreži(&T) &Copy - + Kopiraj(&C) &Paste - + &Prilepi Paste &Unformatted - + Prilepi neoblikovano(&U) Ctrl+Shift+V - + Ctrl+Shift+V Select &All - + Izberi vse(&A) Select &Scene - + Izberi &sceno Ctrl+Shift+A - + Ctrl+Shift+A Fo&rmat - + Fo&rmat &Heading - + Naslov (&H) Heading &1 - + Naslov &1 Heading &2 - + Naslov &2 Heading &3 - + Naslov &3 Heading &4 - + Naslov &4 Heading &5 - + Naslov &5 Heading &6 - + Naslov &6 &Normal - + &Normal &Bold - + (&B)Krepko &Italic - + (&I) Poševno &Underline - + (&U) Podčrtano Stri&kethrough - + (&K)Prečrtano Ctrl+K - + Ctrl+K Sup&erscript - + (&E)Nadpisano Ctrl+^ - + Ctrl+^ &Subscript - + (&S)Podpisano Ctrl+_ - + Ctrl+_ Align &Left - + &Leva poravnava Ctrl+{ - + Ctrl+{ Align &Center - + &Centralna poravnava Ctrl+| - + Ctrl+| Align &Right - + (&R)Desna poravnava Ctrl+} - + Ctrl+} Align &Justify - + (&J) Obojestranska poravnava Ctrl+J - + Ctrl+J &Decrease Indent - + (&D)Zmanjšaj razmik Ctrl+< - + Ctrl+< I&ncrease Indent - + Povečaj razm&ik Ctrl+> - + Ctrl+> Le&ft to Right Block - + (&F)Blok od leve proti desni Ri&ght to Left Block - + (&G)Blok od desne proti levi &Tools - + &Orodja &Find... - + &Iskanje... Find &Next - + Poišči &naprej Find Pre&vious - + Poišči na&zaj &Replace... - + Zam&enjaj... Ctrl+R - + Ctrl+R Smart &Quotes From 4428f84d289b0910c27affdcd4b2bcde7e94849e Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 14 Apr 2018 06:29:48 -0400 Subject: [PATCH 409/630] Bump version number. --- NEWS | 6 ++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 80df6edd..6435c167 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +1.6.12 +------ +* Ignore empty cache files. +* Remove auto save. +* Translation updates: Slovenian. + 1.6.11 ------ * FIXED: File monitoring prevented saving in Windows. diff --git a/focuswriter.pro b/focuswriter.pro index f929d79d..0565b187 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -33,7 +33,7 @@ DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Set program version -VERSION = 1.6.11 +VERSION = 1.6.12 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 375768df..d586f89b 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.11' +VERSION='1.6.12' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 9096c6bd..03f072d5 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 11 +!define VERSIONPATCH 12 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 1e257e60..a456d094 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.11 +SET VERSION=1.6.12 ECHO Copying executable MKDIR %APP% From f9fb50dc2b8e53eb340b82dc1504cf1d8e2d4ca4 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 14 Apr 2018 07:08:45 -0400 Subject: [PATCH 410/630] Log changes. --- debian/changelog | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/debian/changelog b/debian/changelog index 95d38533..5dacfc5d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +focuswriter (1.6.12-1) unstable; urgency=medium + + [ Graeme Gott ] + * New upstream release + + [ Barak A. Pearlmutter ] + * simplify gbp.conf + * swizzle packaging repo to salsa + + -- Graeme Gott Sat, 14 Apr 2018 10:34:45 +0000 + focuswriter (1.6.11-1) unstable; urgency=medium * New upstream release From d5376542f2d5f11352137151ff5e13c94dc6332d Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Mon, 16 Apr 2018 21:31:49 +0100 Subject: [PATCH 411/630] bump policy --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index b7dfb001..9eeb5c57 100644 --- a/debian/control +++ b/debian/control @@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 11), libhunspell-dev, pkg-config, zlib1g-dev -Standards-Version: 4.1.3 +Standards-Version: 4.1.4 Homepage: https://gottcode.org/focuswriter/ Vcs-Git: https://salsa.debian.org/debian/focuswriter.git Vcs-Browser: https://salsa.debian.org/debian/focuswriter From 3677b75630b7a5a1436ff36e827d8a6fd12a2ad3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 11 May 2018 07:46:55 -0400 Subject: [PATCH 412/630] Add release to app data. --- resources/unix/focuswriter.appdata.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 0a1536c9..1dfc972d 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -188,4 +188,16 @@ HiDpiIcon ModernToolkit + + + + +
    +
  • Ignore empty cache files
  • +
  • Removed auto save
  • +
  • Translation updates: Slovenian
  • +
+
+
+
From 5af9d5a7bd82b5932239ecfc4a1ed7bc45d22030 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 18 May 2018 18:43:32 -0400 Subject: [PATCH 413/630] Update deprecation warning. --- focuswriter.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/focuswriter.pro b/focuswriter.pro index 0565b187..c14fb08f 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -22,7 +22,7 @@ macx { } DEFINES += QT_DEPRECATED_WARNINGS -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051000 +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051100 DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT # Allow in-tree builds From 9449a39c77d23ea1fd3383c30baba61b6528318b Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 19 May 2018 08:42:47 -0400 Subject: [PATCH 414/630] Update Unicode symbols database. --- focuswriter.pro | 4 ++-- resources/symbols/main.cpp | 4 ++-- resources/symbols/symbols1000.dat | Bin 0 -> 245458 bytes resources/symbols/symbols900.dat | Bin 237491 -> 0 bytes resources/windows/installer.nsi | 2 +- src/symbols_model.cpp | 4 ++-- windows_deploy.bat | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 resources/symbols/symbols1000.dat delete mode 100644 resources/symbols/symbols900.dat diff --git a/focuswriter.pro b/focuswriter.pro index c14fb08f..ebe629ed 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -243,7 +243,7 @@ macx { SOUNDS.files = resources/sounds SOUNDS.path = Contents/Resources - SYMBOLS.files = resources/symbols/symbols900.dat + SYMBOLS.files = resources/symbols/symbols1000.dat SYMBOLS.path = Contents/Resources THEMES.files = resources/themes @@ -296,7 +296,7 @@ macx { themes.files = resources/themes/* themes.path = $$DATADIR/focuswriter/themes - symbols.files = resources/symbols/symbols900.dat + symbols.files = resources/symbols/symbols1000.dat symbols.path = $$DATADIR/focuswriter INSTALLS += target icon pixmap desktop appdata man icons qm sounds symbols themes diff --git a/resources/symbols/main.cpp b/resources/symbols/main.cpp index 431776c0..e833e4e1 100644 --- a/resources/symbols/main.cpp +++ b/resources/symbols/main.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2012, 2013, 2014, 2016, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -293,5 +293,5 @@ int main(int argc, char** argv) { QCoreApplication app(argc, argv); - downloadAndParse("9.0.0", QDataStream::Qt_5_2); + downloadAndParse("10.0.0", QDataStream::Qt_5_2); } diff --git a/resources/symbols/symbols1000.dat b/resources/symbols/symbols1000.dat new file mode 100644 index 0000000000000000000000000000000000000000..b9d2139cf3066177073a3fd0cfcba51a3f31e8f7 GIT binary patch literal 245458 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%0A^>Ms1wUJ#-t4ZFrZ7W4a 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
  • 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 literal 0 HcmV?d00001 diff --git a/resources/mac/locversion.plist b/resources/mac/locversion.plist deleted file mode 100644 index 6c609af1..00000000 --- a/resources/mac/locversion.plist +++ /dev/null @@ -1,15 +0,0 @@ - - - - - LprojCompatibleVersion - 123 - LprojLocale - ???? - LprojRevisionLevel - 1 - LprojVersion - 123 - - From b871645abe96611ad10e19e6e67c92e16295b4d1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 27 May 2018 06:07:55 -0400 Subject: [PATCH 420/630] Only show warnings in debug mode. --- focuswriter.pro | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index ebe629ed..b705864b 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -12,18 +12,19 @@ TEMPLATE = app QT += network widgets printsupport multimedia concurrent macx { QT += macextras + QMAKE_INFO_PLIST = resources/mac/Info.plist } win32 { QT += winextras } -CONFIG += warn_on c++11 -macx { - QMAKE_INFO_PLIST = resources/mac/Info.plist -} +CONFIG += c++11 -DEFINES += QT_DEPRECATED_WARNINGS -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051100 -DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT +CONFIG(debug, debug|release) { + CONFIG += warn_on + DEFINES += QT_DEPRECATED_WARNINGS + DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051100 + DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT +} # Allow in-tree builds !win32 { From fd5207f0d5f6013d4ea7e169e64a0fdde9bb15ac Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 27 May 2018 07:13:35 -0400 Subject: [PATCH 421/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 10 +- resources/unix/focuswriter.desktop | 4 +- resources/unix/po/nl.po | 33 +- resources/unix/po/pt.po | 23 +- translations/focuswriter_fr.ts | 16 +- translations/focuswriter_nl.ts | 412 ++++++++++++------------- translations/focuswriter_pt.ts | 390 +++++++++++------------ 7 files changed, 445 insertions(+), 443 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 1dfc972d..c1777fd4 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -89,9 +89,9 @@

    FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

    포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니다.

    FocusWriter yra paprasta žodžių doroklė be išblaškymų. Ji naudoja besislepiančią sąsają, kurią galima pasiekti, nuvedant pelės žymeklį prie ekrano ribų. Ši sąsaja suteikia programai pažįstamą išvaizdą ir jausmą, todėl programa jums netrukdo, o jūs galite pilnai pasinerti į savo darbą.

    -

    Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersinterface totdat de muis naar de rand van het scherm geschoven wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in staan om complete focus te hebben op het werk

    +

    Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt de gebruikersomgeving totdat de cursor naar de rand van het scherm wordt geschoven. De applicatie heeft de bekende uitstraling maar stelt je tevens in staat om je volledig te focussen op je werk.

    FocusWriter to prosty, pełnoekranowy edytor tekstu. Korzysta z ukrytego interfejsu, do którego otrzymujesz dostęp przesuwając kursor myszkę do krawędzi ekranu. W ten sposób program skupia twoją uwagę na to, co naprawdę jest najważniejsze: twoja praca.

    -

    FocusWriter é um processador de texto simples e sem distrações. A interface só aparece quando o cursor se aproxima das margens do ecrã, proporcionando um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe permite focar-se no seu trabalho.

    +

    O FocusWriter é um processador de texto simples e sem distrações. A interface só aparece quando o cursor se aproxima das margens do ecrã, proporcionando um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe permite focar-se no seu trabalho.

    FocusWriter é um processador de texto simples livre de distrações. Ele utiliza uma interface oculta, acessível ao mover o mouse para os cantos da tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode mergulhar em seu trabalho.

    FocusWriter este un procesor de text simplu, fără distragerea atenţiei. Acesta folosește o interfaţă ascunsă pe care o accesaţi prin mutarea mouse-ului pe marginile ecranului, care permite programului să aibă un aspect şi un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi cufunda în munca dvs.

    FocusWriter - это простой текстовый редактор, позволяющий полностью сосредоточиться на работе. В нем используется выдвижной интерфейс, управляющие элементы которого становятся доступными при наведении стрелки мыши к краям экрана. Это дает возможность добиться максимально располагающего к пользователю внешнего вида и полностью погрузиться в вашу работу.

    @@ -119,9 +119,9 @@

    FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

    포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등과 그 외에 아주 많은 기능을 갖고 있습니다.

    FocusWriter leidžia jums tinkinti savo aplinką, kuriant temas, kurios kontroliuoja šriftą, spalvas ir fono paveikslą bei sukuria norimą atmosferą. Programoje yra statistikos atnaujinimo, kasdienio tikslo, kelių atvertų dokumentų, rašybos tikrinimo ir daugybė kitų funkcijų.

    -

    Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, meerdere open documenten, spellingscorrectie en nog veel meer.

    +

    Focuswriter stelt je in staat om de applicatie aan te passen aan de wensen van lettertype, kleuren en achtergrondafbeeldingen om de gewenste sfeer te creëren. Het beschikt ook over direct bijgewerkte statistieken, dagelijkse doelen, meerdere geopende documenten, spellingcorrectie en nog veel meer.

    FocusWriter umożliwia dostosowanie wyglądu poprzez tworzenie motywów, które ustawiają czcionkę, kolory i obraz tła, aby stworzyć własną atmosferę. Posiada również aktualizację statystyk w locie, codzienne cele, otwieranie wielu dokumentów jednocześnie, sprawdzanie pisowni i dużo więcej.

    -

    FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação de temas, controlando a fonte tipográfica, cores e imagem de fundo. Também dispõe de estatísticas atualizadas, objetivos diários, vários documentos abertos ao mesmo tempo, verificação ortográfica, e muito mais.

    +

    O FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação de temas, controlando a fonte tipográfica, cores e imagem de fundo. Também dispõe de estatísticas atualizadas, objetivos diários, vários documentos abertos ao mesmo tempo, verificação ortográfica e muito mais.

    FocusWriter permite que você personalize o seu ambiente, criando temas que possibilitam a mudança da fonte, cores e imagem de fundo, para criar a atmosfera ideal. Também permite atualização de estatísticas, metas diárias, vários documentos abertos, verificação ortográfica e muito mais.

    FocusWriter vă permite să personalizaţi mediul prin crearea de teme care controlează font-ul, culorile şi imaginea de fundal pentru a adăuga ambianţă. Acesta oferă, de asemenea, statistici de actualizare, obiective de zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai mult.

    FocusWriter позволит вам настроить свое рабочее окружение путем создания тем, в которых можно, для добавления нужной атмосферы, управлять шрифтами, цветами и фоновыми изображениями. Также текстовый редактор умеет вести статистику, обновляемую в реальном времени, ставить ежедневные рабочие цели, открывать сразу несколько документов одновременно, проверять орфографию и много чего еще.

    @@ -149,7 +149,7 @@

    更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

    그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다.

    Be to, kai atidarote programą, jūsų dabartinis darbas yra automatiškai įkeliamas toje vietoje, kurioje paskutinį kartą užbaigėte, todėl nedvejodami galite vėl kibti į darbą.

    -

    Daar bovenop laadt het programma je huidige onderhande werk en laat het zien op de locatie waar je gebleven bent zodat je direct verder kunt

    +

    Daarnaast laadt de applicatie, na het opstarten, automatisch je huidige werk op de laatst bekende locatie zodat je direct verder kunt.

    Ponadto, program automatycznie ładuje przy starcie ostatni otworzony dokument i pozycję, na której ostatnio przerwano, aby można od razu kontynuować pracę.

    Além disto, o programa abre automaticamente o trabalho em curso e posiciona o cursor na posição em que se encontrava na sessão anterior, para que possa voltar ao trabalho sem demoras.

    Além disso, quando você abrir o programa, seu trabalho em andamento será automaticamente carregado e posicionado onde você parou, de modo que você pode reiniciá-lo imediatamente.

    diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 3259bd61..cba80604 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -56,7 +56,7 @@ GenericName[it]=Elaboratore di testi a schermo intero GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 GenericName[lt]=Viso ekrano žodžių doroklė -GenericName[nl]=Volscherm tekstverwerker +GenericName[nl]=Schermvullende tekstverwerker GenericName[pl]=Pełnoekranowy edytor tekstów GenericName[pt]=Processador de texto em ecrã completo GenericName[pt_BR]=Processador de texto em tela cheia @@ -91,7 +91,7 @@ Comment[it]=Scrivi senza distrazioni Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=글쓰기에 집중할 수 있는 Comment[lt]=Rašykite be blaškymosi -Comment[nl]=Schrijf zonder afleiding +Comment[nl]=Schrijf zonder afgeleid te worden Comment[pl]=Pisz bez zakłóceń Comment[pt]=Escreva sem distrações Comment[pt_BR]=Escreva sem distrações diff --git a/resources/unix/po/nl.po b/resources/unix/po/nl.po index f92f46e9..30b1c06b 100644 --- a/resources/unix/po/nl.po +++ b/resources/unix/po/nl.po @@ -3,16 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Heimen Stoffels , 2018 # RobertBorst , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-30 14:31+0000\n" -"Last-Translator: RobertBorst \n" -"Language-Team: Dutch (http://www.transifex.com/projects/p/focuswriter/" -"language/nl/)\n" +"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"PO-Revision-Date: 2018-04-19 09:19+0000\n" +"Last-Translator: Heimen Stoffels \n" +"Language-Team: Dutch (http://www.transifex.com/gottcode/focuswriter/language/" +"nl/)\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,9 +36,9 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" "Focuswriter is een eenvoudige, afleidingsvrije tekstverwerker. Het verbergt " -"de gebruikersinterface totdat de muis naar de rand van het scherm geschoven " -"wordt. Het programma heeft de bekende uitstraling maar stelt daarnaast in " -"staan om complete focus te hebben op het werk" +"de gebruikersomgeving totdat de cursor naar de rand van het scherm wordt " +"geschoven. De applicatie heeft de bekende uitstraling maar stelt je tevens " +"in staat om je volledig te focussen op je werk." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -46,10 +47,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" -"Focuswriter stelt je in staan om de applicatie aan te passen aan de wensen " -"van lettertype, kleuren, achtergrond plaatjes om de gewenste ambiance te " -"creëren. Het heeft direct bijgewerkte statistieken, dagelijkse doelen, " -"meerdere open documenten, spellingscorrectie en nog veel meer." +"Focuswriter stelt je in staat om de applicatie aan te passen aan de wensen " +"van lettertype, kleuren en achtergrondafbeeldingen om de gewenste sfeer te " +"creëren. Het beschikt ook over direct bijgewerkte statistieken, dagelijkse " +"doelen, meerdere geopende documenten, spellingcorrectie en nog veel meer." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -57,13 +58,13 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -"Daar bovenop laadt het programma je huidige onderhande werk en laat het zien " -"op de locatie waar je gebleven bent zodat je direct verder kunt" +"Daarnaast laadt de applicatie, na het opstarten, automatisch je huidige werk " +"op de laatst bekende locatie zodat je direct verder kunt." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "Volscherm tekstverwerker" +msgstr "Schermvullende tekstverwerker" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "Schrijf zonder afleiding" +msgstr "Schrijf zonder afgeleid te worden" diff --git a/resources/unix/po/pt.po b/resources/unix/po/pt.po index 7ed38652..8eccc1cc 100644 --- a/resources/unix/po/pt.po +++ b/resources/unix/po/pt.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Rui , 2018 # tiago , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-11-09 15:45+0000\n" -"Last-Translator: tiago \n" -"Language-Team: Portuguese (http://www.transifex.com/projects/p/focuswriter/" +"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"PO-Revision-Date: 2018-04-26 01:34+0000\n" +"Last-Translator: Rui \n" +"Language-Team: Portuguese (http://www.transifex.com/gottcode/focuswriter/" "language/pt/)\n" "Language: pt\n" "MIME-Version: 1.0\n" @@ -34,10 +35,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" -"FocusWriter é um processador de texto simples e sem distrações. A interface " -"só aparece quando o cursor se aproxima das margens do ecrã, proporcionando " -"um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe permite focar-" -"se no seu trabalho." +"O FocusWriter é um processador de texto simples e sem distrações. A " +"interface só aparece quando o cursor se aproxima das margens do ecrã, " +"proporcionando um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe " +"permite focar-se no seu trabalho." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -46,10 +47,10 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" -"FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação de " -"temas, controlando a fonte tipográfica, cores e imagem de fundo. Também " +"O FocusWriter permite-lhe personalizar o ambiente de trabalho com a criação " +"de temas, controlando a fonte tipográfica, cores e imagem de fundo. Também " "dispõe de estatísticas atualizadas, objetivos diários, vários documentos " -"abertos ao mesmo tempo, verificação ortográfica, e muito mais." +"abertos ao mesmo tempo, verificação ortográfica e muito mais." #: ../focuswriter.appdata.xml.in.h:5 msgid "" diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 7442cad7..b053167c 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -103,7 +103,7 @@ DictionaryDialog Set Language - Définir le langage + Choisir la langue @@ -1115,11 +1115,11 @@ Bitter Skies - + Cieux amers Enchantment - + Enchantement Gentle Blues @@ -1135,11 +1135,11 @@ Spy Games - + Jeux d'espionnage Tranquility - + Tranquilité Writing Desk @@ -1719,7 +1719,7 @@ Update Document Smart Quotes - + Mettre à jour les apostrophes typographiques du document Update &Selection @@ -1727,7 +1727,7 @@ Update Selection Smart Quotes - + Mettre à jour les apostrophes typographiques de la sélection &Spelling... @@ -1739,7 +1739,7 @@ Set &Language... - Définir le &langage ... + Choisir la &langue ... &Timers... diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index b7fb272c..f3857fdf 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -5,7 +5,7 @@ Alert Close (%1) - Sluit (%1) + Sluiten (%1) Collapse @@ -20,7 +20,7 @@ AlertLayer Dismiss Alert - Wegklikken alarm + Waarschuwing verwerpen Ctrl+D @@ -78,7 +78,7 @@ N/A - N/A + N/B %n day(s) @@ -96,7 +96,7 @@ DailyProgressLabel %1% of daily goal - %1% van dagelijkse doel + %1% van je dagelijkse doel @@ -110,11 +110,11 @@ Document (Untitled %1) - (naamloos %1) + (Naamloos %1) %1 (Read-Only) - %1 (Alleen lezen) + %1 (alleen-lezen) Sorry @@ -122,7 +122,7 @@ Unable to save '%1'. - '%1' kan niet opgeslagen worden. + '%1' kan niet worden opgeslagen. Save File As @@ -130,27 +130,27 @@ Unable to overwrite '%1'. - '%1' kan niet overschreven worden. + '%1' kan niet worden overschreven. Rename File - Bestand hernoemen + Bestandsnaam wijzigen Unable to rename '%1'. - '%1' kan niet hernoemd worden. + De bestandsnaam'%1' kan niet worden gewijzigd. Reload File? - Herladen bestamd + Bestand herladen? Reload the file '%1' from disk? - Bestand '%1' herladen van disk + Bestand '%1' herladen van schijf? All unsaved changes will be lost. - Alle niet bewaarde wijzigingen zullen verloren gaan + Alle niet-opgeslagen wijzigingen zullen verloren gaan. Reload @@ -158,7 +158,7 @@ Untitled %1 - Geen naam %1 + Naamloos %1 Question @@ -166,7 +166,7 @@ Saving as plain text will discard all formatting. Discard formatting? - Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? + Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen? @@ -177,11 +177,11 @@ The file '%1' was changed by another program. - Bestand %1 is veranderd door een ander programma + Het bestand, '%1', is gewijzigd door een andere applicatie. Do you want to reload the file? - Moet het bestand opnieuw geladen worden ? + Wil je het bestand herladen? Reload @@ -197,18 +197,18 @@ The file %1 was deleted by another program. - Bestand %1 is verwijderd door een andere applicatie + Het bestand, %1, is verwijderd door een andere applicatie. Do you want to save or close the file? - Bestand opslaan of afsluiten ? + Wil je het bestand opslaan of sluiten? DocxReader Unable to open archive. - Kan archief niet openen + Het archief kan niet worden geopend. @@ -231,27 +231,27 @@ Regular expressions - Regulieren expressies + Reguliere expressies Search up - Naar begin zoeken + Richting begin zoeken Search down - Naar einde zoeken + Richting einde zoeken &Find - &Zoek + &Zoeken &Replace - &Vervang + &Vervangen Replace &All - Vervang &Alles + &Alles vervangen Find @@ -278,14 +278,14 @@ Phrase not found. - Zoekterm niet gevonden. + De zoekterm is niet gevonden. FormatManager OpenDocument Text - OpenDocument Tekst + OpenDocument Tekst OpenDocument Flat XML @@ -297,7 +297,7 @@ Rich Text Format - Rich text formaat + Rich text-formaat Plain Text @@ -320,22 +320,22 @@ Check Spelling... - Spelling controleren ... + Spelling controleren... (No suggestions found) - (geen suggestie gevonden) + (geen suggesties gevonden) ImageButton Open Image - Plaatje openen + Afbeelding openen Images(%1) - Plaatjes(%1) + Afbeeldingen(%1) @@ -346,7 +346,7 @@ <System Language> - <Systeemtaal> + <System Language> Note @@ -354,21 +354,21 @@ Please restart this application for the change in language to take effect. - Graag de applicatie herstarten om de taalverandering door te voeren. + Herstart de applicatie om de taalwijziging toe te passen. OdtReader Unable to open archive. - Kan archief niet openen + Het archief kan niet worden geopend. PreferencesDialog Preferences - Instellungen + Voorkeuren General @@ -384,7 +384,7 @@ Spell Checking - Spellingscontrole + Spellingcontrole Select Dictionary @@ -396,7 +396,7 @@ Unable to open archive. - Archief kan niet geopend worden. + Het archief kan niet worden geopend. The archive does not contain a usable dictionary. @@ -408,15 +408,15 @@ Shortcuts - Snelkoppelingen + Sneltoetsen One or more shortcuts conflict. Do you wish to proceed? - Een of meerdere snelkoppelingen conflicteren. Toch doorgaan ? + Eén of meerdere sneltoetsen conflicteren. Wil je toch doorgaan? The dictionary "%1" already exists. Do you want to replace it? - Het woordenboek %1 bestaat al. Deze vervangen ? + Het woordenboek "%1" bestaat al. Wil je hem vervangen? Daily Goal @@ -440,11 +440,11 @@ Always vertically center - Verticaal centreren + Altijd verticaal centreren Block insertion cursor - Blok invoeg cursor + Geblokte cursor Smooth fonts @@ -452,11 +452,11 @@ Typewriter sounds - Typemachine geluiden + Typemachinegeluiden Smart quotes: - Slimme aanhalingstekens: + Slimme aanhalingstekens: Double @@ -468,11 +468,11 @@ Scenes - Scenes + Scènes Divider: - Deelstreep + Scheiding: Saving @@ -480,7 +480,7 @@ Remember cursor position - Onthou cursor positie + Cursorpositie onthouden Word count @@ -512,39 +512,39 @@ Reset daily progress for today to zero? - Dagelijkse voortgang naar 0 toe zetten ? + Dagelijkse voortgang voor vandaag op nul zetten? Remove current dictionary? - Huidige directory verwijderen + Huidige map verwijderen? Write byte order mark in plain text files - Schrijf "byte order" markering in platte tekst bestanden + Bytevolgorde-markering toevoegen aan platte tekst-bestanden Default format: - Standaard formaat + Standaard formaat: User Interface - Gebruikers interface + Uiterlijk Always show scrollbar - Scrollbar altijd tonen + Scrollbalk altijd weergeven Always show top bar - Top bar altijd tonen + Bovenste balk altijd weergeven Always show bottom bar - Bottom bar altijd tonen + Onderbalk altijd weergeven Reset Today - Reset vandaag + Vandaag op nul zetten History @@ -552,15 +552,15 @@ Remember history - Onthou geschiedenis + Geschiedenis onthouden Show streaks - Toon serie + Series weergeven Minimum progress for streaks: - Minimale voortgang voor serie + Minimale voortgang voor series: Detect word boundaries @@ -568,15 +568,15 @@ Divide character count by six - Tekentelling door 6 delen + Tekentelling door zes delen Count each letter as a word - Tel elke letter als een woord + Elke letter als één woord tellen Page Count Algorithm - Manier van pagina tellen + Algoritme van paginatelling Style @@ -584,7 +584,7 @@ Icons Only - Alleen iconen + Alleen pictogrammen Text Only @@ -592,15 +592,15 @@ Text Alongside Icons - Tekst naast iconen + Tekst naast pictogrammen Text Under Icons - Tekst onder Iconen + Tekst onder pictogrammen Text Position: - Tekst positie: + Tekstpositie: Actions @@ -608,11 +608,11 @@ Move Up - Naar boven verschuiven + Naar boven schuiven Move Down - Naar onder verschuiven + Naar onder schuiven Add Separator @@ -620,11 +620,11 @@ Command - Commando + Opdracht Shortcut - Snelkoppeling + Sneltoets Action @@ -632,7 +632,7 @@ Check spelling as you type - Spelling controleren terwijl je typt + Spelling controleren tijdens het typen Ignore words in UPPERCASE @@ -656,14 +656,14 @@ Personal Dictionary - Persoonlijke woordenboek + Persoonlijk woordenboek RtfReader Not a supported RTF file. - Niet ondersteund RTF bestand + Niet-ondersteund RTF-bestand. @@ -677,31 +677,31 @@ SceneList Ctrl+Shift+Down - Ctrl-Shift-Down + Ctrl+Shift+Down Move Scenes Up - Verplaats de scene omhoog + Scènes omhoog verplaatsen Ctrl+Shift+Up - Ctrl-Shift-Up + Ctrl+Shift+Up Toggle Scene List - Schakel scene lijst + Scènelijst weergeven/verbergen Shift+F4 - Shift-F4 + Shift+F4 Show scene list (%1) - Laat scene lijst (%1) zien + Scènelijst (%1) weergeven Hide scene list (%1) - Verberg scene lijst (%1) + Scènelijst (%1) verbergen Filter @@ -709,11 +709,11 @@ Move Scenes Down - Verplaats Scenes naar beneden + Scènes omlaag verplaatsen Resize scene list - Vergroot of verklein scene lijst + Scènelijst vergroten/verkleinen @@ -739,11 +739,11 @@ Duplicate - Kopiëren + Dupliceren Rename - Hernoemen + Naam wijzigen Delete @@ -751,7 +751,7 @@ Switch To - Wissel naar + Overschakelen naar New Session @@ -759,11 +759,11 @@ Duplicate Session - Kopieer sessie + Sessie dupliceren Rename Session - Sessie hernoemen + Sessienaam wijzigen Question @@ -771,11 +771,11 @@ Delete selected session? - Sessie verwijderen ? + Sessie verwijderen? Session name: - Sessie naam: + Sessienaam: Sorry @@ -783,7 +783,7 @@ The requested session name is already in use. - De sessie naam is al in gebruik. + Deze sessienaam is al in gebruik. &New... @@ -806,22 +806,22 @@ ShortcutEdit Clear - Leegmaken + Wissen Reset to Default - Terugzetten naar standaard instellingen + Standaardwaarden herstellen Shortcut: - Snelkoppeling + Sneltoets: SmartQuote Replacing quotation marks... - Vervang aanhalingstekens... + Bezig met vervangen van aanhalingstekens... Please Wait @@ -844,15 +844,15 @@ I&gnore All - Negeer &Alles + Alles ne&geren &Change - &Verander + &Wijzigen C&hange All - V&erander Alles + Alles w&ijzigen Not in dictionary: @@ -860,15 +860,15 @@ Change to: - Vervang door: + Vervangen door: Checking spelling... - Spelling controleren ... + Bezig met controleren van spelling... Cancel - Afbreken + Annuleren Please wait @@ -876,11 +876,11 @@ Continue checking at beginning of file? - Ga door met controleren vanaf het begin van het bestand + Doorgaan met controleren vanaf het begin van het bestand? Spell check complete. - Spellingcontrole klaar. + Spellingcontrole voltooid. @@ -936,11 +936,11 @@ No Image - Geen plaatje + Geen afbeelding Tiled - Getegeld. + Getegeld Centered @@ -956,11 +956,11 @@ Zoomed - Zoom + Gezoomd Opacity: - Bedekking: + Doorzichtigheid: Position: @@ -972,7 +972,7 @@ Round Text Background Corners - Afronden hoeken achtergrond tekst + Hoeken van tekstachtergrond afronden Radius: @@ -980,15 +980,15 @@ Blur Text Background - Achtergrond tekst onduidelijker maken + Tekstachtergrond vervagen Text Background Drop Shadow - Schaduw achtergrond tekst + Schaduw van tekstachtergrond Vertical Offset: - Verticale verschuiving + Verticale verschuiving: Margins @@ -996,7 +996,7 @@ Window: - Window: + Venster: Page: @@ -1004,7 +1004,7 @@ Indent first line - Eerste lijn inspringen + Eerste regel inspringen Above: @@ -1016,7 +1016,7 @@ Remove - Verwijder + Verwijderen Edit Theme @@ -1024,7 +1024,7 @@ Window Background - Window Achtergrond + Vensterachtergrond Type: @@ -1036,11 +1036,11 @@ Image: - Plaatje: + Afbeelding: pixels - Pixel + pixels Left @@ -1048,7 +1048,7 @@ Text Background - Achtergrond tekst + Tekstachtergrond Right @@ -1068,7 +1068,7 @@ Line Spacing - Lijn afstand + Regelafstand Single @@ -1076,11 +1076,11 @@ 1.5 Lines - Anderhalve lijn + Anderhalve regel Double - Dubbele lijn + Dubbele regel Proportional @@ -1092,15 +1092,15 @@ Paragraph Spacing - Paragraaf uitlijning + Paragraafuitlijning Tab Width: - Tab Breedte: + Tabbreedte: New Theme - Nieuw Thema + Nieuw thema @@ -1123,11 +1123,11 @@ Gentle Blues - Rustige Blues + Rustige blues Old School - Oude school + Ouderwets Space Dreams @@ -1151,7 +1151,7 @@ Duplicate - Kopieren + Dupliceren Custom @@ -1179,7 +1179,7 @@ Delete theme '%1'? - Verwijder thema '%1'? + Thema '%1' verwijderen? Themes (%1) @@ -1226,7 +1226,7 @@ Set Delay - Tijdsduur instellen + Vertraging instellen Set Time @@ -1234,7 +1234,7 @@ Delay: - Duur: + Vertraging: Time: @@ -1273,18 +1273,18 @@ No timers running - Geen timers ingesteld + Geen lopende timers TimerManager Timers - Timer + Timers New - Neu + Nieuw Recent @@ -1296,7 +1296,7 @@ Cancel editing timers? - Timer instelling beeindigen? + Timerbewerking annuleren? +HH:mm:ss @@ -1311,15 +1311,15 @@ Window Loading themes - Thema wordt geladen + Bezig met laden van thema's Loading sounds - Geluiden worden geladen + Bezig met laden van geluiden Untitled - Unbenannt + Naamloos Open File @@ -1335,7 +1335,7 @@ A simple fullscreen word processor - Een simpele schermvullende tekstverwerker + Een eenvoudige schermvullende tekstverwerker Copyright &copy; 2008-%1 Graeme Gott @@ -1343,15 +1343,15 @@ Released under the <a href=%1>GPL 3</a> license - Uitgegeven onder de <a href=%1>GPL 3</a> licentie + Uitgegeven onder de <a href=%1>GPL 3</a>-licentie Uses icons from the <a href=%1>Oxygen</a> icon theme - Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema + Maakt gebruik van pictogrammen uit het <a href=%1>Oxygen</a>-pictogramthema Used under the <a href=%1>LGPL 3</a> license - Gebruikt onder de <a href=%1>LGPL 3</a> licentie + Gebruikt onder de <a href=%1>LGPL 3</a> -licentie Characters: %L1 / %L2 @@ -1371,7 +1371,7 @@ Opening %1 - Bestand %1 wordt geopend + Bezig met openen van %1 (Untitled %1) @@ -1379,31 +1379,31 @@ List all documents - Laat alle documenten zien + Alle documenten weergeven Switch to Next Document - Schakel naar volgend document + Overschakelen naar volgend document Switch to Previous Document - Schakel naar vorig document + Overschakelen naar vorig document Switch to First Document - Schakel naar eerste document + Overschakelen naar eerste document Switch to Last Document - Schakel naar laatste document + Overschakelen naar laatste document Switch to Document %1 - Schakel naar document %1 + Overschakelen naar document %1 Loading settings - Instellingen inladen + Bezig met laden van instellingen Emergency cache is not writable. @@ -1423,35 +1423,35 @@ Some files could not be opened. - Enkele bestanden konden niet geopend worden. + Enkele bestanden kunnen niet worden geopend. Some files were opened Read-Only. - Enkele bestanden zijn in alleen lezen mode geopend. + Enkele bestanden zijn geopend in alleen-lezen-modus. '%1' is newer than the cached copy. - '%1' is nieuwer dan de versie in de tussenopslag. + '%1' is nieuwer dan de opgeslagen kopie. Overwrite newer file? - Nieuwer bestand overschrijven ? + Nieuwer bestand overschrijven? Save Changes? - Veranderingen opslaan ? + Wijzigingen opslaan? Save changes to the file '%1' before closing? - Veranderingen in bestand '%1' opslaan voor het afsluiten + Wijzigingen in bestand '%1' opslaan alvorens af te sluiten? Your changes will be lost if you don't save them. - De veranderingen zullen verloren gaan als ze niet opgeslagen worden + Als je de wijzingen niet opslaat, dan gaan ze verloren. Unable to load typewriter sounds. - Typemachinegeluiden konden niet geladen worden. + De typemachinegeluiden kunnen niet worden geladen. &File @@ -1479,7 +1479,7 @@ &Rename... - &Hernoemen... + Naam &wijzigen... Save A&ll @@ -1487,7 +1487,7 @@ Manage Sessions - Beheer sessies + Sessies beheren New Session @@ -1499,15 +1499,15 @@ Pa&ge Setup... - Pagina instellingen + Pagina-instellingen... &Close - Afsl&uiten + Sl&uiten &Quit - S&toppen + Af&sluiten Ctrl+Q @@ -1515,7 +1515,7 @@ &Edit - &Bewerken + B&ewerken &Undo @@ -1523,7 +1523,7 @@ &Redo - &Herhalen + &Opnieuw Cu&t @@ -1531,7 +1531,7 @@ &Copy - K&opieren + K&opiëren &Paste @@ -1539,27 +1539,27 @@ Paste &Unformatted - Plak &zonder formattering + Plakken &zonder opmaak Ctrl+Shift+V - Ctrl-Shift-V + Ctrl+Shift+V Select &All - Alles &Selecteren + &Alles selecteren Select &Scene - Selecteer &scene + &Scène selecteren Ctrl+Shift+A - Ctrl-Shift-A + Ctrl+Shift+A Fo&rmat - O&pmaken + O&pmaak &Heading @@ -1595,15 +1595,15 @@ &Bold - &Dik + &Vetgedrukt &Italic - &Schuin + &Cursief &Underline - &Onderlijnen + &Onderstrepen Stri&kethrough @@ -1611,7 +1611,7 @@ Ctrl+K - Strg+G + Ctrl+K Sup&erscript @@ -1619,7 +1619,7 @@ Ctrl+^ - Strg+^ + Ctrl+^ &Subscript @@ -1655,7 +1655,7 @@ Align &Justify - Align &Justify + Uitvu&llen Ctrl+J @@ -1663,7 +1663,7 @@ &Decrease Indent - Minder inspringen + &Minder inspringing Ctrl+< @@ -1671,7 +1671,7 @@ I&ncrease Indent - &Meer inspringen + &Meer inspringing Ctrl+> @@ -1679,23 +1679,23 @@ Le&ft to Right Block - Blok &links uitlijnen + Van li&nks naar rechts Ri&ght to Left Block - Blok &rechts uitlijnen + Van &rechts naar links &Tools - &Gereedschappen + &Hulpmiddelen &Find... - &Vinden... + &Zoeken... Find &Next - Volge&nde + Vooru&it zoeken Find Pre&vious @@ -1703,7 +1703,7 @@ &Replace... - Ve&rvang... + Ve&rvangen... Ctrl+R @@ -1715,11 +1715,11 @@ Update &Document - &Dokument bijwerken + &Document bijwerken Update Document Smart Quotes - Bijwerken slimme quotes document + Slimme aanhalingstekens bijwerken Update &Selection @@ -1727,11 +1727,11 @@ Update Selection Smart Quotes - Bijwerken slimme quotes selectie + Slimme aanhalingstekens bijwerken &Spelling... - Spellings&controle... + Spelling&controle... F7 @@ -1739,15 +1739,15 @@ Set &Language... - Taal instellen + Taa&l instellen... &Timers... - &Stopwatch... + &Timers... S&ymbols... - S&ymbolen + S&ymbolen... &Daily Progress @@ -1759,15 +1759,15 @@ Show &Toolbar - &Gereedschapsbalk tonen + &Werkbalk weergeven Show &Menu Icons - &Menu Iconen tonen + Pictogrammen weergeven in &menu F&ocused Text - Tekst in focus + Gef&ocuste tekst &Fullscreen @@ -1795,19 +1795,19 @@ &Preferences... - &Instellingen... + &Voorkeuren... Focus Off - Focus uit + Focus uitgeschakeld Focus One Line - Focus op een lijn + Focussen op één regel Focus Three Lines - Focus op 3 lijnen + Focussen op drie regels &Paragraph @@ -1815,7 +1815,7 @@ Focus Paragraph - Focus op paragraaf + Focussen op paragraaf Ctrl+Shift+` @@ -1823,15 +1823,15 @@ &Help - &Help + &Hulp Application &Language... - &Taal... + Applicatietaa&l... Some files were unsupported and could not be opened. - Sommige bestanden worden niet ondersteund en kunnen niet geopend worden + Sommige bestanden worden niet ondersteund en kunnen niet worden geopend. &Off @@ -1839,11 +1839,11 @@ One &Line - Een &lijn + Eén rege&l &Three Lines - &Drie lijnen + &Drie regels &About diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 04cb6923..2972413e 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -20,7 +20,7 @@ AlertLayer Dismiss Alert - Descartar o alerta + Descartar o Alerta Ctrl+D @@ -66,19 +66,19 @@ DailyProgressDialog Daily Progress - Progresso diário + Progresso Diário Longest streak - Série mais longa + Período mais longo Current streak - Série atual + Período atual N/A - N/D + N/A %n day(s) @@ -103,7 +103,7 @@ DictionaryDialog Set Language - Definir língua + Definir Idioma @@ -114,7 +114,7 @@ %1 (Read-Only) - %1 (Ler apenas) + %1 (Apenas Leitura) Sorry @@ -122,23 +122,23 @@ Unable to save '%1'. - Não foi possível guardar «%1». + Não foi possível guardar "%1". Save File As - Guardar como + Guardar Como Unable to overwrite '%1'. - Não foi possível substituir «%1». + Não foi possível substituir "%1". Rename File - Alterar o nome do ficheiro + Alterar o Nome do Ficheiro Unable to rename '%1'. - Não foi possível alterar o nome « %1 ». + Não foi possível alterar o nome de "%1". Reload File? @@ -146,7 +146,7 @@ Reload the file '%1' from disk? - Carregar de novo o ficheiro '%1' do disco? + Carregar de novo o ficheiro "%1" do disco? All unsaved changes will be lost. @@ -173,11 +173,11 @@ DocumentWatcher File Changed - Ficheiro alterado + Ficheiro Alterado The file '%1' was changed by another program. - O ficheiro '%1' foi alterado por outro programa + O ficheiro "%1" foi alterado por outro programa. Do you want to reload the file? @@ -193,11 +193,11 @@ File Deleted - Ficheiro eliminado + Ficheiro Eliminado The file %1 was deleted by another program. - O ficheiro %1 foi eliminado por outro programa. + O ficheiro "%1" foi eliminado por outro programa. Do you want to save or close the file? @@ -208,7 +208,7 @@ DocxReader Unable to open archive. - Não foi possível abrir o arquivo. + Não foi possível abrir o ficheiro. @@ -227,7 +227,7 @@ Whole words only - Palavras inteiras apenas + Apenas palavras inteiras Regular expressions @@ -235,11 +235,11 @@ Search up - Para trás + Para cima Search down - Para diante + Para baixo &Find @@ -251,7 +251,7 @@ Replace &All - Substituir &tudo + Substituir &Tudo Find @@ -285,11 +285,11 @@ FormatManager OpenDocument Text - OpenDocument Text + Texto OpenDocument OpenDocument Flat XML - + OpenDocument Flat XML Office Open XML @@ -301,15 +301,15 @@ Plain Text - Plain Text + Texto Simples All Files - Todos os ficheiros + Todos os Ficheiros All Supported Files - Todos os ficheiros suportados + Todos os Ficheiros Suportados @@ -320,7 +320,7 @@ Check Spelling... - Verificação ortográfica... + Verificação Ortográfica... (No suggestions found) @@ -331,7 +331,7 @@ ImageButton Open Image - Abrir imagem + Abrir Imagem Images(%1) @@ -354,21 +354,21 @@ Please restart this application for the change in language to take effect. - Por favor reinicie o programa para a mudança da língua do programa ser aplicada. + Por favor reinicie o programa para que a alteração da língua surta efeito. OdtReader Unable to open archive. - Não foi possível abrir o arquivo + Não foi possível abrir o ficheiro. PreferencesDialog Preferences - Definições + Preferências General @@ -380,15 +380,15 @@ Toolbar - Barra de ferramentas + Barra de Ferramentas Spell Checking - Verificação ortográfica + Verificação Ortográfica Select Dictionary - Selecionar o dicionário + Selecionar o Dicionário Sorry @@ -396,11 +396,11 @@ Unable to open archive. - Não foi possível abrir o arquivo. + Não foi possível abrir o ficheiro. The archive does not contain a usable dictionary. - O arquivo não contem nenhum dicionário utilizável. + O ficheiro não contém nenhum dicionário utilizável. Question @@ -412,7 +412,7 @@ One or more shortcuts conflict. Do you wish to proceed? - Pelo menos um dos atalho está em conflito. Continuar? + Pelo menos um dos atalhos está em conflito. Continuar? The dictionary "%1" already exists. Do you want to replace it? @@ -420,7 +420,7 @@ Daily Goal - Objetivo diário + Objetivo Diário None @@ -444,7 +444,7 @@ Block insertion cursor - Cursor de bloco + Cursor de bloco de inserção Smooth fonts @@ -476,7 +476,7 @@ Saving - Gravando + A gravar Remember cursor position @@ -508,19 +508,19 @@ Word Count Algorithm - Algoritmo de contagem de palavras + Algoritmo de Contagem de Palavras Reset daily progress for today to zero? - Repor o progresso diário a zero? + Repor a zero o progresso diário de hoje? Remove current dictionary? - + Remover o dicionário atual? Write byte order mark in plain text files - Incluir "byte order mark" em ficheiros "plain text"? + Incluir marca de ordem de byte em ficheiros de texto simples Default format: @@ -528,23 +528,23 @@ User Interface - + Interface do Utilizador Always show scrollbar - + Mostrar sempre a barra de deslocamento Always show top bar - + Mostrar sempre a barra superior Always show bottom bar - + Mostrar sempre a barra inferior Reset Today - Repor hoje + Repor Hoje History @@ -556,11 +556,11 @@ Show streaks - Mostrar séries + Mostrar períodos Minimum progress for streaks: - Progresso mínimo para série: + Progresso mínimo para períodos: Detect word boundaries @@ -568,15 +568,15 @@ Divide character count by six - Dividir o número de caracteres por seis + Dividir contagem do número de caracteres por seis Count each letter as a word - Contar cada letra como palavra + Contar cada letra como uma palavra Page Count Algorithm - Algoritmo de contagem das páginas + Algoritmo de Contagem das Páginas Style @@ -584,23 +584,23 @@ Icons Only - Apenas o ícone + Apenas os Ícones Text Only - Apenas o texto + Apenas o Texto Text Alongside Icons - Texto ao lado do ícone + Texto ao Lado dos Ícones Text Under Icons - Texto por baixo do ícone + Texto por Baixo dos Ícones Text Position: - Posição do texto: + Posição do Texto: Actions @@ -616,7 +616,7 @@ Add Separator - Adicionar um separador + Adicionar Separador Command @@ -656,7 +656,7 @@ Personal Dictionary - Dicionário definido pelo utilizador + Dicionário Definido pelo Utilizador @@ -677,19 +677,19 @@ SceneList Ctrl+Shift+Down - Ctrl+Shift+Seta Abaixo + Ctrl+Shift+Seta para Abaixo Move Scenes Up - Deslocar cenas para cima + Deslocar Cenas para Cima Ctrl+Shift+Up - Ctrl+Shift+Seta Acima + Ctrl+Shift+Seta para Acima Toggle Scene List - Comutar a lista de cenas + Mostrar/Ocultar Lista de Cenas Shift+F4 @@ -709,7 +709,7 @@ Move Scenes Down - Deslocar cenas para baixo + Deslocar Cenas para Baixo Resize scene list @@ -727,7 +727,7 @@ SessionManager Manage Sessions - Organizar as sessões + Organizar as Sessões S&essions @@ -743,7 +743,7 @@ Rename - Alterar o nome + Alterar o Nome Delete @@ -751,11 +751,11 @@ Switch To - Abrir a sessão + Abrir a Sessão New Session - Nova sessão + Nova Sessão Duplicate Session @@ -763,7 +763,7 @@ Rename Session - Alterar o nome da sessão + Alterar Nome da Sessão Question @@ -771,7 +771,7 @@ Delete selected session? - Apagar a sessão selecionada ? + Eliminar a sessão selecionada ? Session name: @@ -783,7 +783,7 @@ The requested session name is already in use. - O nome introduzido já está a ser utilizado. + O nome da sessão introduzido já está a ser utilizado. &New... @@ -810,7 +810,7 @@ Reset to Default - Repor os valores padrão + Repor os Valores Padrão Shortcut: @@ -825,14 +825,14 @@ Please Wait - Espere por favor + Por Favor Aguarde SpellChecker Check Spelling - Verificação da ortografia + Verificação da Ortografia &Add @@ -844,7 +844,7 @@ I&gnore All - I&gnorar tudo + I&gnorar Tudo &Change @@ -852,7 +852,7 @@ C&hange All - A&lterar tudo + A&lterar Tudo Not in dictionary: @@ -860,7 +860,7 @@ Change to: - Alterar por: + Alterar para: Checking spelling... @@ -868,26 +868,26 @@ Cancel - Anular + Cancelar Please wait - Espere por favor + Por favor aguarde Continue checking at beginning of file? - Continuar verificação do início do ficheiro? + Continuar a verificação do início do ficheiro? Spell check complete. - Verificação da ortografia concluída. + A verificação da ortografia está concluída. SymbolsDialog Symbols - Símbolo + Símbolos Recently used symbols @@ -936,7 +936,7 @@ No Image - Sem imagem + Sem Imagem Tiled @@ -944,7 +944,7 @@ Centered - Centrado + Centrada Stretched @@ -972,7 +972,7 @@ Round Text Background Corners - Fundo do texto com cantos arredondados + Cantos Arredondados na Folha Radius: @@ -980,15 +980,15 @@ Blur Text Background - Desfocar fundo do texto + Desfocar Folha Text Background Drop Shadow - Sombra projetada pelo fundo do texto + Sombra da Folha Vertical Offset: - Desfasamento vertical: + Deslocamento Vertical: Margins @@ -1008,11 +1008,11 @@ Above: - Por cima: + Em cima: Below: - Por baixo: + Em baixo: Remove @@ -1020,15 +1020,15 @@ Edit Theme - Editar tema + Editar Tema Window Background - Fundo da janela + Fundo da Janela Type: - Tipo: + Posicionamento: Color: @@ -1048,7 +1048,7 @@ Text Background - Fundo do texto + Folha Right @@ -1068,7 +1068,7 @@ Line Spacing - Espaço entre linhas + Espaço Entre Linhas Single @@ -1092,15 +1092,15 @@ Paragraph Spacing - Espaçamento do parágrafo + Espaçamento do Parágrafo Tab Width: - Largura de tabulação: + Largura da Tabulação: New Theme - Novo tema + Novo Tema @@ -1115,31 +1115,31 @@ Bitter Skies - + Céus Penetrantes Enchantment - + Encantamento Gentle Blues - Gentle Blues + Azuis Suaves Old School - Old School + Velha Escola Space Dreams - Space Dreams + Sonhos do Espaço Spy Games - + Jogos de Espiões Tranquility - + Tranquilidade Writing Desk @@ -1179,7 +1179,7 @@ Delete theme '%1'? - Eliminar tema '%1'? + Eliminar o tema "%1"? Themes (%1) @@ -1187,11 +1187,11 @@ Import Theme - Importar um tema + Importar Tema Export Theme - Exportar o tema + Exportar Tema @@ -1206,35 +1206,35 @@ Delete timer? - Eliminar cronómetro ? + Eliminar o cronómetro? <b>Words:</b> %L1 - <b>Palavras :</b> %L1 + <b>Palavras:</b> %L1 <b>Pages:</b> %L1 - <b>Páginas :</b> %L1 + <b>Páginas:</b> %L1 <b>Paragraphs:</b> %L1 - <b>Parágrafos :</b> %L1 + <b>Parágrafos:</b> %L1 <b>Characters:</b> %L1 / %L2 - <b>Caracteres :</b> %L1 / %L2 + <b>Caracteres:</b> %L1 / %L2 Set Delay - Ajustar a duração + Definir o Atraso Set Time - Acertar a hora + Definir a Hora Delay: - Tempo de espera: + Atraso: Time: @@ -1262,7 +1262,7 @@ Delete - Apagar + Eliminar @@ -1296,7 +1296,7 @@ Cancel editing timers? - Cancelar a edição dos cronómetros ? + Cancelar a edição dos cronómetros? +HH:mm:ss @@ -1311,11 +1311,11 @@ Window Loading themes - Carregamento dos temas + A carregar temas Loading sounds - Carregamento dos efeitos sonoros + A carregar efeitos sonoros Untitled @@ -1323,11 +1323,11 @@ Open File - Abrir um ficheiro + Abrir Ficheiro About FocusWriter - Acerca do FocusWriter + Sobre o FocusWriter FocusWriter @@ -1339,19 +1339,19 @@ Copyright &copy; 2008-%1 Graeme Gott - Copyright &copy; 2008-%1 Graeme Gott + Direitos de Autor &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license - Disponibilizado sob licença <a href=%1>GPL 3</a> + Lançado sob a licença <a href=%1>GPL 3</a> Uses icons from the <a href=%1>Oxygen</a> icon theme - Usa ícones do tema <a href=%1>Oxygen</a> + Utiliza ícones do tema <a href=%1>Oxygen</a> Used under the <a href=%1>LGPL 3</a> license - Usado sob licença <a href=%1>LGPL 3</a> + Utilizados sob a licença <a href=%1>LGPL 3</a> Characters: %L1 / %L2 @@ -1367,7 +1367,7 @@ Words: %L1 - Palávras: %L1 + Palavras: %L1 Opening %1 @@ -1383,31 +1383,31 @@ Switch to Next Document - Passar ao documento seguinte + Mudar para o Documento Seguinte Switch to Previous Document - Passar ao documento anterior + Mudar para o Documento Anterior Switch to First Document - Passar ao primeiro documento + Mudar para o Primeiro Documento Switch to Last Document - Passar ao último documento + Mudar para o Último Documento Switch to Document %1 - Passar ao dicumento %1 + Mudar para o Documento "%1" Loading settings - A carregar definições + A carregar as configurações Emergency cache is not writable. - Não é possível escrever na cache de emergência. + Não é possível gravar nos ficheiros temporários de emergência. Warning @@ -1415,11 +1415,11 @@ FocusWriter was not shut down cleanly. - FocusWriter não encerrou corretamente. + O FocusWriter não encerrou corretamente. Restore from the emergency cache? - Recuperar dados da cache de emergência? + Recuperar dados dos ficheiros temporários de emergência? Some files could not be opened. @@ -1427,23 +1427,23 @@ Some files were opened Read-Only. - Alguns ficheiros foram abertos em modo de leitura. + Alguns ficheiros foram abertos no modo de Apenas Leitura. '%1' is newer than the cached copy. - '%1' é mais recente do que a cópia presente na cache. + "%1" é mais recente do que a cópia presente nos ficheiros temporários Overwrite newer file? - Sobrepor o ficheiro mais recente? + Gravar por cima do ficheiro mais recente? Save Changes? - Guardar alterações? + Guardar Alterações? Save changes to the file '%1' before closing? - Guardar alterações ao ficheiro '%1' antes de encerrar? + Guardar alterações no ficheiro "%1" antes de encerrar? Your changes will be lost if you don't save them. @@ -1451,7 +1451,7 @@ Unable to load typewriter sounds. - Não foi possível carregar os ruídos de máquina de escrever. + Não foi possível carregar os sons de ruídos de máquina de escrever. &File @@ -1467,7 +1467,7 @@ Reloa&d - Carrega&r de novo + Carrega&r Novamente &Save @@ -1475,23 +1475,23 @@ Save &As... - Guardar &como... + Guardar &Como... &Rename... - &Mudar o nome... + &Mudar o Nome... Save A&ll - Guardar t&udo + Guardar T&udo Manage Sessions - Organizar as sessões + Gerir as Sessões New Session - Nova sessão + Nova Sessão &Print... @@ -1499,7 +1499,7 @@ Pa&ge Setup... - + Confi&guração da Página... &Close @@ -1519,11 +1519,11 @@ &Undo - &Anular + &Desfazer &Redo - &Restaurar + &Refazer Cu&t @@ -1539,7 +1539,7 @@ Paste &Unformatted - Colar &sem formatação + Colar &Sem Formatação Ctrl+Shift+V @@ -1547,11 +1547,11 @@ Select &All - Seleccionar &tudo + Selecionar &Tudo Select &Scene - Seleccionar &cena + Selecionar &Cena Ctrl+Shift+A @@ -1603,11 +1603,11 @@ &Underline - &Sublinhar + &Sublinhado Stri&kethrough - Ra&surar + Ra&surado Ctrl+K @@ -1615,7 +1615,7 @@ Sup&erscript - Ex&poente + Sobr%escrito Ctrl+^ @@ -1623,15 +1623,15 @@ &Subscript - &Índice + &Subscrito Ctrl+_ - Ctrl+_ + Ctrl+Shift+_ Align &Left - Alinhar à &esquerda + Alinhar à &Esquerda Ctrl+{ @@ -1639,7 +1639,7 @@ Align &Center - Alinhar ao &centro + Alinhar ao &Centro Ctrl+| @@ -1647,7 +1647,7 @@ Align &Right - Alinhar à &direita + Alinhar à &Direita Ctrl+} @@ -1663,7 +1663,7 @@ &Decrease Indent - &Reduzir a indentação + &Reduzir a Indentação Ctrl+< @@ -1671,7 +1671,7 @@ I&ncrease Indent - A&umentar a indentação + A&umentar a Indentação Ctrl+> @@ -1679,11 +1679,11 @@ Le&ft to Right Block - &Bloco de escrita da esquerda para a direita + &Bloco de Escrita da Esquerda para a Direita Ri&ght to Left Block - B&loco de escrita da direita para a esquerda + B&loco de Escrita da Direita para a Esquerda &Tools @@ -1695,11 +1695,11 @@ Find &Next - Procurar se&guinte + Procurar Se&guinte Find Pre&vious - Procurar &anterior + Procurar &Anterior &Replace... @@ -1711,23 +1711,23 @@ Smart &Quotes - &Aspas curvas e angulares + &Aspas Curvas e Angulares Update &Document - Actualizar &documento + Atualizar &Documento Update Document Smart Quotes - + Atualizar Aspas Curvas e Angulares do Documento Update &Selection - Actualizar a &selecção + Atualizar &Seleção Update Selection Smart Quotes - + Atualizar Aspas Curvas e Angulares da Seleção &Spelling... @@ -1739,7 +1739,7 @@ Set &Language... - Definir &língua + Definir &Língua &Timers... @@ -1751,27 +1751,27 @@ &Daily Progress - &Progresso diário + &Progresso Diário &Settings - &Configuração + &Configurações Show &Toolbar - Mostrar a &barra de ferramentas + Mostrar a &Barra de Ferramentas Show &Menu Icons - &Mostrar os ícones no menu + &Mostrar Ícones nos Menus F&ocused Text - Texto f&ocado + Texto F&ocado &Fullscreen - &Ecrã completo + &Ecrã Inteiro F11 @@ -1795,19 +1795,19 @@ &Preferences... - &Definições... + &Preferências... Focus Off - Desligar o foco + Desligar o Foco Focus One Line - Focar uma linha + Focar 1 Linha Focus Three Lines - Focar três linhas + Focar 3 Linhas &Paragraph @@ -1815,11 +1815,11 @@ Focus Paragraph - Focar parágrafo + Focar Parágrafo Ctrl+Shift+` - + Ctrl+Shift+` &Help @@ -1827,11 +1827,11 @@ Application &Language... - &Língua do programa... + &Língua do Programa... Some files were unsupported and could not be opened. - Alguns ficheiros não são suportados e não puderam ser abertos + Alguns ficheiros não são suportados e não puderam ser abertos. &Off @@ -1839,19 +1839,19 @@ One &Line - Uma l&inha + &1 Linha &Three Lines - &Três linhas + &3 Linhas &About - &Acerca + &Sobre About &Qt - Acerca de &Qt + Sobre o &Qt From 45c27c4806d3a672fe5f1b6b0aed07c5a8beb36d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 28 May 2018 08:56:16 -0400 Subject: [PATCH 422/630] Split script for updating translations. --- resources/unix/po/af_ZA.po | 16 ++++++------ resources/unix/po/ar.po | 18 ++++++------- resources/unix/po/ca.po | 18 ++++++------- resources/unix/po/cs.po | 20 +++++++-------- resources/unix/po/da.po | 16 ++++++------ resources/unix/po/de.po | 18 ++++++------- resources/unix/po/description.pot | 18 ++++++------- resources/unix/po/el.po | 22 ++++++++-------- resources/unix/po/en_GB.po | 18 ++++++------- resources/unix/po/eo.po | 20 +++++++-------- resources/unix/po/es.po | 18 ++++++------- resources/unix/po/es_MX.po | 18 ++++++------- resources/unix/po/fi.po | 18 ++++++------- resources/unix/po/fr.po | 16 ++++++------ resources/unix/po/he.po | 16 ++++++------ resources/unix/po/hu.po | 18 ++++++------- resources/unix/po/hy.po | 18 ++++++------- resources/unix/po/id.po | 18 ++++++------- resources/unix/po/ig.po | 22 ++++++++-------- resources/unix/po/it.po | 18 ++++++------- resources/unix/po/ja.po | 18 ++++++------- resources/unix/po/ko.po | 22 ++++++++-------- resources/unix/po/lt.po | 16 ++++++------ resources/unix/po/nl.po | 16 ++++++------ resources/unix/po/pl.po | 25 +++++++++--------- resources/unix/po/pt.po | 16 ++++++------ resources/unix/po/pt_BR.po | 18 ++++++------- resources/unix/po/ro.po | 22 ++++++++-------- resources/unix/po/ru.po | 16 ++++++------ resources/unix/po/sk.po | 16 ++++++------ resources/unix/po/sl.po | 22 ++++++++-------- resources/unix/po/sr.po | 18 ++++++------- resources/unix/po/sv.po | 20 +++++++-------- resources/unix/po/tr.po | 22 ++++++++-------- resources/unix/po/uk.po | 18 ++++++------- resources/unix/po/update-po.sh | 15 +---------- resources/unix/po/update-pot.sh | 42 +++++++++++++++++++++++++++++++ resources/unix/po/vi.po | 18 ++++++------- resources/unix/po/zh_CN.po | 22 ++++++++-------- resources/unix/po/zh_TW.po | 18 ++++++------- 40 files changed, 397 insertions(+), 367 deletions(-) create mode 100755 resources/unix/po/update-pot.sh diff --git a/resources/unix/po/af_ZA.po b/resources/unix/po/af_ZA.po index 7d50cb30..12a3e96b 100644 --- a/resources/unix/po/af_ZA.po +++ b/resources/unix/po/af_ZA.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2015-10-04 19:02+0000\n" +"PO-Revision-Date: 2017-09-22 15:56+0000\n" "Last-Translator: Hardus \n" "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/gottcode/" "focuswriter/language/af_ZA/)\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Volskerm woordverwerker" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "gebruiklike voorkoms en gevoel, terwyl die program uit jou pad bly dat jy " "jou in jou werk kan verdiep. " -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -53,7 +53,7 @@ msgstr "" "opdateer, daaglikse doelwitte, veelvoudige oop dokumente, speltoetsing, en " "vele meer." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -63,10 +63,10 @@ msgstr "" "waar in die dokument jy besig was, wanneer jy die program oopmaak. So kan jy " "dadelik aan die werk spring." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Volskerm woordverwerker" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Skryf sonder afleidings" diff --git a/resources/unix/po/ar.po b/resources/unix/po/ar.po index 23989761..fe9380fa 100644 --- a/resources/unix/po/ar.po +++ b/resources/unix/po/ar.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" +"PO-Revision-Date: 2017-08-03 17:20+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Arabic (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Arabic (http://www.transifex.com/gottcode/focuswriter/" "language/ar/)\n" "Language: ar\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -43,17 +43,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "" diff --git a/resources/unix/po/ca.po b/resources/unix/po/ca.po index f1214656..8470ee99 100644 --- a/resources/unix/po/ca.po +++ b/resources/unix/po/ca.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:45+0000\n" +"PO-Revision-Date: 2017-08-03 17:20+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Catalan (http://www.transifex.com/gottcode/focuswriter/" "language/ca/)\n" "Language: ca\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -42,17 +42,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "" diff --git a/resources/unix/po/cs.po b/resources/unix/po/cs.po index e4b90426..101d3d0e 100644 --- a/resources/unix/po/cs.po +++ b/resources/unix/po/cs.po @@ -9,25 +9,25 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-05-30 20:30+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: fri\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/focuswriter/" -"language/cs/)\n" +"Language-Team: Czech (http://www.transifex.com/gottcode/focuswriter/language/" +"cs/)\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Textový procesor v režimu na celou obrazovku" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a " "dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé " "další." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase " "budete moci okamžitě dát." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Celoobrazovkový editor textu" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Pište bez rozptylování" diff --git a/resources/unix/po/da.po b/resources/unix/po/da.po index f36b2815..cba91f99 100644 --- a/resources/unix/po/da.po +++ b/resources/unix/po/da.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2015-11-09 20:33+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Morten Juhl-Johansen Zölde-Fejér \n" "Language-Team: Danish (http://www.transifex.com/gottcode/focuswriter/" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Tekstbehandling i fuldskærm" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "føre musen til skærmens kanter, så programmet kan opsættes med kendte " "redskaber, men på en måde, hvor du kan fordybe dig i dit arbejde." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "Programmet har også statistik, der opdateres mens du arbejder, daglige mål, " "mulighed for flere åbne dokumenter, stavekontrol og meget andet." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "vil indlæse det seneste dokument og placere markøren hvor den var, så du med " "det samme kan komme tilbage i teksten." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Tekstbehandlingsprogram i fuld skærm" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Skriv uden at blive distraheret" diff --git a/resources/unix/po/de.po b/resources/unix/po/de.po index 34fcaee9..62ca8540 100644 --- a/resources/unix/po/de.po +++ b/resources/unix/po/de.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:46+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: German (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: German (http://www.transifex.com/gottcode/focuswriter/" "language/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Vollbild-Textverarbeitungsprogramm" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das " "versperrt, was eigentlich zählt: Ihre Arbeit." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -53,7 +53,7 @@ msgstr "" "Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, " "Rechtschreibkorrektur und vieles mehr." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -63,10 +63,10 @@ msgstr "" "geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, " "sodass Sie ihre Arbeit direkt fortsetzen können." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Vollbild-Textverarbeitung" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Schreibe ohne Ablenkung" diff --git a/resources/unix/po/description.pot b/resources/unix/po/description.pot index 43484ae3..47793069 100644 --- a/resources/unix/po/description.pot +++ b/resources/unix/po/description.pot @@ -1,5 +1,5 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) 2016 Graeme Gott +# Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the FocusWriter package. # FIRST AUTHOR , YEAR. # @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,15 +17,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -33,7 +33,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -41,17 +41,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "" diff --git a/resources/unix/po/el.po b/resources/unix/po/el.po index e6640e03..44817551 100644 --- a/resources/unix/po/el.po +++ b/resources/unix/po/el.po @@ -4,31 +4,31 @@ # # Translators: # Wasilis Mandratzis-Walz, 2015 -# Γιάννης Ανθυμίδης , 2014 +# Γιάννης Ανθυμίδης, 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2015-04-19 03:50+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Wasilis Mandratzis-Walz\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/focuswriter/" -"language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/gottcode/focuswriter/language/" +"el/)\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Επεξεργαστής κειμένου σε πλήρης οθόνη" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -41,7 +41,7 @@ msgstr "" "πρόγραμμα να έχει μια οικεία εμφάνιση και αίσθηση σε αυτόενώ εξακολουθεί να " "πάρει έξω από το δρόμο, έτσι ώστε να μπορείτε να αφεθείτε στην εργασία σας." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -54,7 +54,7 @@ msgstr "" "στατιστικές ενημέρωσης, καθημερινούς στόχους, πολλά ανοικτά έγγραφα, " "ορθογραφικό έλεγχο, και πολλά άλλα." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -64,10 +64,10 @@ msgstr "" "αυτόματα και την θέση όπου σταματήσατε, έτσι ώστε να μπορείτε να μεταβείτε " "αμέσως πίσω." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Επεξεργαστής Κειμένου σε Πλήρης Οθόνη" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Γράψτε χωρίς ενόχληση" diff --git a/resources/unix/po/en_GB.po b/resources/unix/po/en_GB.po index 2cbabca9..91fa500f 100644 --- a/resources/unix/po/en_GB.po +++ b/resources/unix/po/en_GB.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:46+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" +"Language-Team: English (United Kingdom) (http://www.transifex.com/gottcode/" "focuswriter/language/en_GB/)\n" "Language: en_GB\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -42,17 +42,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Full-screen Word Processor" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Write without distractions" diff --git a/resources/unix/po/eo.po b/resources/unix/po/eo.po index 03380a75..a7f6f8c3 100644 --- a/resources/unix/po/eo.po +++ b/resources/unix/po/eo.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Synteq, 2015 +# Corey Mardix, 2015 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2015-07-05 02:45+0000\n" -"Last-Translator: Synteq\n" +"PO-Revision-Date: 2017-09-22 10:01+0000\n" +"Last-Translator: Corey Mardix\n" "Language-Team: Esperanto (http://www.transifex.com/gottcode/focuswriter/" "language/eo/)\n" "Language: eo\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Plenekrana tekstoprilaborilo" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "Tiel la programaro eblas havi kutiman fasadon, dum ankoraŭ estas " "malobstrukciĝante por ke vi povas ĉirkaŭi vin en via laboro." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -51,7 +51,7 @@ msgstr "" "havas funkciojn por tuje ĝisdatiganta statistiko, ĉiutagaj celoj, plure da " "malfermataj dokumentoj, literumada kontrolo, kaj multe pli." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +60,10 @@ msgstr "" "Plue, kiam vi lanĉas la programaron, via lasta malpreta verko aŭtomate " "ŝarĝas kaj allokas vin, kie vi laste ĉesis, por ke vi povas daŭri verki tuj." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Plenekrana Tekstoprilaborilo" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Skribu sen malatentigoj" diff --git a/resources/unix/po/es.po b/resources/unix/po/es.po index 34c9abb7..b37489b0 100644 --- a/resources/unix/po/es.po +++ b/resources/unix/po/es.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:46+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Spanish (http://www.transifex.com/gottcode/focuswriter/" "language/es/)\n" "Language: es\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -42,17 +42,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Procesador de textos a pantalla completa" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Escriba sin distracciones" diff --git a/resources/unix/po/es_MX.po b/resources/unix/po/es_MX.po index 1e4d481a..7d8347c2 100644 --- a/resources/unix/po/es_MX.po +++ b/resources/unix/po/es_MX.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-06-20 04:26+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: neoriddle \n" -"Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/gottcode/" "focuswriter/language/es_MX/)\n" "Language: es_MX\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Procesador de palabras en pantalla completa" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "similar a cuando uno se aparta de todo y se puede concentrar sólo en su " "trabajo." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "características son que actualiza en tiempo real estadísticas, metas " "diarias, abre múltiples documentos, verifica ortografía y mucho más." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "posición en la que dejó la última vez para que pueda continuar " "inmediatamente." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Procesador de palabras en pantalla completa" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Escriba sin distractores" diff --git a/resources/unix/po/fi.po b/resources/unix/po/fi.po index 09400a0a..8c89db81 100644 --- a/resources/unix/po/fi.po +++ b/resources/unix/po/fi.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-05-31 10:49+0000\n" +"PO-Revision-Date: 2017-09-23 19:39+0000\n" "Last-Translator: Lasse Liehu \n" -"Language-Team: Finnish (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Finnish (http://www.transifex.com/gottcode/focuswriter/" "language/fi/)\n" "Language: fi\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Koko näytön tekstinkäsittelyohjelma" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "hiiren näytön laitoihin. Sen ansiosta ohjelmassa on tuttu ulkoasu ja " "käyttötuntuma. Samalla käyttöliittymä väistyy työhön uppoutumisen tieltä." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -51,7 +51,7 @@ msgstr "" "automaattisesti päivittyvät tilastot, päivittäiset tavoitteet, tuki useille " "avoimille tiedostoille, oikeinkirjoituksen tarkistus ja paljon muuta." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +60,10 @@ msgstr "" "Lisäksi ohjelman käynnistyessä kesken jäänyt työ ladataan automaattisesti " "siltä kohtaa, mihin viimeksi jäit, jotta työn jatkaminen on helppoa." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Koko näytön tekstinkäsittelyohjelma" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Kirjoita ilman häiriötekijöitä" diff --git a/resources/unix/po/fr.po b/resources/unix/po/fr.po index c6756254..b3b50981 100644 --- a/resources/unix/po/fr.po +++ b/resources/unix/po/fr.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2016-07-27 08:14+0000\n" +"PO-Revision-Date: 2017-09-23 19:39+0000\n" "Last-Translator: jerome \n" "Language-Team: French (http://www.transifex.com/gottcode/focuswriter/" "language/fr/)\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Traitement de texte plein écran" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "de l'écran, ce qui confère au programme un aspect convivial tout en restant " "discret afin que vous puissiez vous plonger dans votre travail." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "jour à la volée, des objectifs quotidiens, l'ouverture de documents " "multiples, une vérification orthographique, et bien plus encore." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "automatiquement chargé et vous vous retrouverez là où vous vous étiez " "arrêté, de sorte que vous puissiez immédiament vous remettre à l'ouvrage." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Traitement de texte plein écran" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Écrivez sans distractions" diff --git a/resources/unix/po/he.po b/resources/unix/po/he.po index 1a03c9b1..ef52626e 100644 --- a/resources/unix/po/he.po +++ b/resources/unix/po/he.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2015-09-14 14:06+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: GenghisKhan \n" "Language-Team: Hebrew (http://www.transifex.com/gottcode/focuswriter/" "language/he/)\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "מעבד תמלילים במסך מלא" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "מראה ותחושה מוכרים בעוד שזה עדיין נותר באין מפריע כך שהתהא באפשרותך להשקיע " "את עצמך לתוך עבודתך." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -50,7 +50,7 @@ msgstr "" "הגופן, הצבעים ועל תמונת הרקע כדי להוסיף אווירה. זה גם טומן בחובו עדכון " "סטטיסטיקה, יעדים יומיים, פתיחה מרובה של מסמכים, בדיקת-איות, ועוד הרבה יותר." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +60,10 @@ msgstr "" "וימקם אותך היכן שנותרת בפעם אחרונה בה עזבת כך שתהא באפשרותך לקפוץ בחזרה " "מיידית." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "מעבד תמלילים במסך מלא" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "כתיבה ללא הסחות דעת" diff --git a/resources/unix/po/hu.po b/resources/unix/po/hu.po index b4ae804b..6d57de05 100644 --- a/resources/unix/po/hu.po +++ b/resources/unix/po/hu.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:47+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Hungarian (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Hungarian (http://www.transifex.com/gottcode/focuswriter/" "language/hu/)\n" "Language: hu\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -42,17 +42,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Teljesképernyős szövegszerkesztő" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Írjon zavartalanul" diff --git a/resources/unix/po/hy.po b/resources/unix/po/hy.po index 681e9d38..a60fced2 100644 --- a/resources/unix/po/hy.po +++ b/resources/unix/po/hy.po @@ -10,9 +10,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-05-08 14:39+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: sedas\n" -"Language-Team: Armenian (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Armenian (http://www.transifex.com/gottcode/focuswriter/" "language/hy/)\n" "Language: hy\n" "MIME-Version: 1.0\n" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Լիէկրան տեքստային խմբագրիչ" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -42,7 +42,7 @@ msgstr "" "խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով " "շեղելու։" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -56,7 +56,7 @@ msgstr "" "աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում " "միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -67,10 +67,10 @@ msgstr "" "փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն " "այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Լիէկրան տեքստային խմբագրիչ" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Գրիր առանց ուշադրության շեղման" diff --git a/resources/unix/po/id.po b/resources/unix/po/id.po index a9fa7344..7ec6a338 100644 --- a/resources/unix/po/id.po +++ b/resources/unix/po/id.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-10-17 03:28+0000\n" +"PO-Revision-Date: 2017-09-23 19:40+0000\n" "Last-Translator: M. Ridwan Hakim \n" -"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/" +"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/gottcode/" "focuswriter/language/id_ID/)\n" "Language: id\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Layar Penuh" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "layar, membuat program ini memilik tampilan yang familiar dan memudahkan " "Anda untuk menyelam ke dalam pekerjaan Anda." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "diperbarui setiap saat, tujuan sehari-hari, membuka banyak dokumen " "sekaligus, pengecekan ejaan, dan masih banyak lagi." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "dikerjaan akan otomatis dimuat dan memulai di mana Anda terakhir " "meninggalkannya sehingga Anda bisa memulainya lagi lebih cepat." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Layar Penuh" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Menulis tanpa gangguan" diff --git a/resources/unix/po/ig.po b/resources/unix/po/ig.po index 1362b927..85bb9842 100644 --- a/resources/unix/po/ig.po +++ b/resources/unix/po/ig.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2018-01-26 05:18+0000\n" "Last-Translator: AhaNkem Obi \n" "Language-Team: Igbo (http://www.transifex.com/gottcode/focuswriter/language/" @@ -19,11 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -31,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -39,21 +43,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "" diff --git a/resources/unix/po/it.po b/resources/unix/po/it.po index 81b8f8cf..690e279b 100644 --- a/resources/unix/po/it.po +++ b/resources/unix/po/it.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-19 15:40+0000\n" -"PO-Revision-Date: 2016-09-26 10:44+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Joe Potsdam\n" "Language-Team: Italian (http://www.transifex.com/gottcode/focuswriter/" "language/it/)\n" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Un semplice elaboratore di testi a schermo intero" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "dello schermo, dando al programma un aspetto familiare, rimanendo semplice e " "pulito, in modo che tu possa immergerti completamente nel tuo lavoro." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -54,7 +54,7 @@ msgstr "" "giornalieri, più documenti aperti contemporaneamente, controllo ortografico, " "e molto altro." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -64,10 +64,10 @@ msgstr "" "automaticamente nella posizione in cui l'avevi lasciato, in modo che possa " "riprendere immediatamente a lavorarci." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Elaboratore di testi a schermo intero" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Scrivi senza distrazioni" diff --git a/resources/unix/po/ja.po b/resources/unix/po/ja.po index 807d26a6..8b74d4ba 100644 --- a/resources/unix/po/ja.po +++ b/resources/unix/po/ja.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:48+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Japanese (http://www.transifex.com/gottcode/focuswriter/" "language/ja/)\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "フルスクリーン・ワードプロセッサ" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -38,7 +38,7 @@ msgstr "" "スできるようになっているので、プログラムの基本的なルック・アンド・フィールは" "維持したまま、作業に没頭することができるでしょう。" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -49,7 +49,7 @@ msgstr "" "環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表" "示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +58,10 @@ msgstr "" "更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も" "含め復元されるので、直ぐに続きを書き始めることが出来ます。" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "フルスクリーン・ワードプロセッサ" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "気を散らすことなく集中して文章を書けるワードプロセッサです" diff --git a/resources/unix/po/ko.po b/resources/unix/po/ko.po index fa0a0fb4..c1540286 100644 --- a/resources/unix/po/ko.po +++ b/resources/unix/po/ko.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# 박정규(Jung Kyu Park) , 2014 +# 박정규(Jung-Kyu Park) , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-06-26 15:33+0000\n" -"Last-Translator: 박정규(Jung Kyu Park) \n" -"Language-Team: Korean (http://www.transifex.com/projects/p/focuswriter/" +"PO-Revision-Date: 2017-09-23 19:39+0000\n" +"Last-Translator: 박정규(Jung-Kyu Park) \n" +"Language-Team: Korean (http://www.transifex.com/gottcode/focuswriter/" "language/ko/)\n" "Language: ko\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "포커스 라이터" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "풀스크린 워드 프로세서" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니" "다." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -51,7 +51,7 @@ msgstr "" "할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등" "과 그 외에 아주 많은 기능을 갖고 있습니다. " -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +60,10 @@ msgstr "" "그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으" "로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "풀스크린 워드 프로세서" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "글쓰기에 집중할 수 있는 " diff --git a/resources/unix/po/lt.po b/resources/unix/po/lt.po index 9b5bea0c..bbb8d1bd 100644 --- a/resources/unix/po/lt.po +++ b/resources/unix/po/lt.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2016-04-15 20:54+0000\n" +"PO-Revision-Date: 2017-09-21 13:21+0000\n" "Last-Translator: Moo\n" "Language-Team: Lithuanian (http://www.transifex.com/gottcode/focuswriter/" "language/lt/)\n" @@ -20,15 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Viso ekrano žodžių doroklė" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "ekrano ribų. Ši sąsaja suteikia programai pažįstamą išvaizdą ir jausmą, " "todėl programa jums netrukdo, o jūs galite pilnai pasinerti į savo darbą." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "Programoje yra statistikos atnaujinimo, kasdienio tikslo, kelių atvertų " "dokumentų, rašybos tikrinimo ir daugybė kitų funkcijų." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "įkeliamas toje vietoje, kurioje paskutinį kartą užbaigėte, todėl nedvejodami " "galite vėl kibti į darbą." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Viso ekrano žodžių doroklė" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Rašykite be blaškymosi" diff --git a/resources/unix/po/nl.po b/resources/unix/po/nl.po index 30b1c06b..b41ac7c4 100644 --- a/resources/unix/po/nl.po +++ b/resources/unix/po/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2018-04-19 09:19+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch (http://www.transifex.com/gottcode/focuswriter/language/" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Schermvullende tekstverwerker" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "geschoven. De applicatie heeft de bekende uitstraling maar stelt je tevens " "in staat om je volledig te focussen op je werk." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "creëren. Het beschikt ook over direct bijgewerkte statistieken, dagelijkse " "doelen, meerdere geopende documenten, spellingcorrectie en nog veel meer." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -61,10 +61,10 @@ msgstr "" "Daarnaast laadt de applicatie, na het opstarten, automatisch je huidige werk " "op de laatst bekende locatie zodat je direct verder kunt." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Schermvullende tekstverwerker" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Schrijf zonder afgeleid te worden" diff --git a/resources/unix/po/pl.po b/resources/unix/po/pl.po index 3d55bbd0..c7e65667 100644 --- a/resources/unix/po/pl.po +++ b/resources/unix/po/pl.po @@ -3,33 +3,34 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Łukasz Jurczak, 2014 +# dsfnksjdjflsdf, 2014 # M T , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-10-17 23:50+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: M T \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Polish (http://www.transifex.com/gottcode/focuswriter/" "language/pl/)\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Pełnoekranowy edytor tekstu" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -41,7 +42,7 @@ msgstr "" "krawędzi ekranu. W ten sposób program skupia twoją uwagę na to, co naprawdę " "jest najważniejsze: twoja praca." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -53,7 +54,7 @@ msgstr "" "Posiada również aktualizację statystyk w locie, codzienne cele, otwieranie " "wielu dokumentów jednocześnie, sprawdzanie pisowni i dużo więcej." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -63,10 +64,10 @@ msgstr "" "dokument i pozycję, na której ostatnio przerwano, aby można od razu " "kontynuować pracę." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Pełnoekranowy edytor tekstów" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Pisz bez zakłóceń" diff --git a/resources/unix/po/pt.po b/resources/unix/po/pt.po index 8eccc1cc..efdf7c2c 100644 --- a/resources/unix/po/pt.po +++ b/resources/unix/po/pt.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2018-04-26 01:34+0000\n" "Last-Translator: Rui \n" "Language-Team: Portuguese (http://www.transifex.com/gottcode/focuswriter/" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Processador de texto em ecrã completo" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "proporcionando um aspeto familiar que ao mesmo tempo não ocupa espaço e lhe " "permite focar-se no seu trabalho." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "dispõe de estatísticas atualizadas, objetivos diários, vários documentos " "abertos ao mesmo tempo, verificação ortográfica e muito mais." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "o cursor na posição em que se encontrava na sessão anterior, para que possa " "voltar ao trabalho sem demoras." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Processador de texto em ecrã completo" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Escreva sem distrações" diff --git a/resources/unix/po/pt_BR.po b/resources/unix/po/pt_BR.po index 29c9458f..428c3995 100644 --- a/resources/unix/po/pt_BR.po +++ b/resources/unix/po/pt_BR.po @@ -10,9 +10,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-07-21 16:57+0000\n" +"PO-Revision-Date: 2017-09-23 19:39+0000\n" "Last-Translator: Márcio Massula Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/gottcode/" "focuswriter/language/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Processador de texto em tela cheia" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "tela, o que dá ao programa um visual familiar, mas discreto. Assim você pode " "mergulhar em seu trabalho." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "atmosfera ideal. Também permite atualização de estatísticas, metas diárias, " "vários documentos abertos, verificação ortográfica e muito mais." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "automaticamente carregado e posicionado onde você parou, de modo que você " "pode reiniciá-lo imediatamente." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Processador de texto em tela cheia" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Escreva sem distrações" diff --git a/resources/unix/po/ro.po b/resources/unix/po/ro.po index 82647db0..2b782125 100644 --- a/resources/unix/po/ro.po +++ b/resources/unix/po/ro.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Jaff , 2014 +# Oprea Nicolae , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-26 08:16+0000\n" -"Last-Translator: Jaff \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/focuswriter/" +"PO-Revision-Date: 2017-09-23 19:39+0000\n" +"Last-Translator: Oprea Nicolae \n" +"Language-Team: Romanian (http://www.transifex.com/gottcode/focuswriter/" "language/ro/)\n" "Language: ro\n" "MIME-Version: 1.0\n" @@ -20,15 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Procesor de text pe tot ecranul" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -41,7 +41,7 @@ msgstr "" "un simţămînt familiar în timp ce se dă la o parte, astfel încît să vă puteţi " "cufunda în munca dvs." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -54,7 +54,7 @@ msgstr "" "zi cu zi, mai multe documente deschise, verificare ortografică, şi mult mai " "mult." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -64,10 +64,10 @@ msgstr "" "va fi încărcat automat şi poziția unde aţi rămas ultima dată, astfel încît " "să puteţi trece imediat la treabă." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Procesor de text pe tot ecranul" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Scrieţi fără distrageri" diff --git a/resources/unix/po/ru.po b/resources/unix/po/ru.po index 0eac957f..ab679705 100644 --- a/resources/unix/po/ru.po +++ b/resources/unix/po/ru.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2016-07-17 08:22+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Serhii Haifullin \n" "Language-Team: Russian (http://www.transifex.com/gottcode/focuswriter/" "language/ru/)\n" @@ -21,15 +21,15 @@ msgstr "" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" "%100>=11 && n%100<=14)? 2 : 3);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Полноэкранный текстовый редактор" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -43,7 +43,7 @@ msgstr "" "располагающего к пользователю внешнего вида и полностью погрузиться в вашу " "работу." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -57,7 +57,7 @@ msgstr "" "открывать сразу несколько документов одновременно, проверять орфографию и " "много чего еще." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -68,10 +68,10 @@ msgstr "" "раз работа была прервана. Так вы сможете практически мгновенно вернуться к " "делу." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Полноэкранный текстовый редактор" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Писать не отвлекаясь" diff --git a/resources/unix/po/sk.po b/resources/unix/po/sk.po index 20cc596e..7b9a2ae3 100644 --- a/resources/unix/po/sk.po +++ b/resources/unix/po/sk.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2016-08-10 10:36+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Erik Bartoš \n" "Language-Team: Slovak (http://www.transifex.com/gottcode/focuswriter/" "language/sk/)\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Celoobrazovkový textový editor" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "umožňuje programu mať prirodzený vzhľad a dojem, zatiaľ čo si stále " "udržujete odstup, takže sa môžete ponoriť do svojej práce." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -51,7 +51,7 @@ msgstr "" "vybavený funkciami ako priebežná aktualizácia štatistík, denné ciele, viac " "otvorených dokumentov, kontrolu pravopisu a oveľa viac." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -61,10 +61,10 @@ msgstr "" "automaticky načíta na pozícii, kde ste naposledy skončili, takže môžete " "okamžite skočiť naspäť." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Celoobrazovkový textový editor" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Písať bez rozptýlenia" diff --git a/resources/unix/po/sl.po b/resources/unix/po/sl.po index 52eff5ef..826fe407 100644 --- a/resources/unix/po/sl.po +++ b/resources/unix/po/sl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-04-05 11:50+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" "PO-Revision-Date: 2018-01-02 12:37+0000\n" "Last-Translator: Roman Bobnaric \n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/gottcode/" @@ -20,11 +20,15 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" -#: ../focuswriter.appdata.xml.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Polnozaslonski program za pisanje" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -36,7 +40,7 @@ msgstr "" "omogoča, da ima program domač/znan izgled, medtem, ko omogoča nemoteno delo " "in se lahko pisanju popolnoma posvetimo." -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -48,7 +52,7 @@ msgstr "" "statistiko, dnevne cilje, več odprtih dokumentov, preverjanje pravopisa in " "še veliko več." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,14 +62,10 @@ msgstr "" "postavilo delovno mesto na zadnjo znano pozicijo, tako, da lahko takoj " "nadaljujete kjer ste ostali prejšnjič." -#: ../focuswriter.desktop.in.h:1 -msgid "FocusWriter" -msgstr "FocusWriter" - -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Polnozaslonski urejevalnik besedila" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Pišite brez motenj" diff --git a/resources/unix/po/sr.po b/resources/unix/po/sr.po index a4dd6192..34e87858 100644 --- a/resources/unix/po/sr.po +++ b/resources/unix/po/sr.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-26 09:08+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: miroslav \n" -"Language-Team: Serbian (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Serbian (http://www.transifex.com/gottcode/focuswriter/" "language/sr/)\n" "Language: sr\n" "MIME-Version: 1.0\n" @@ -20,15 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Обрађивач текста у пуном екрану" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -40,7 +40,7 @@ msgstr "" "програму да добије познати изглед и тако вам обезбеди да се посветите вашем " "раду." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -52,7 +52,7 @@ msgstr "" "циљеве, истовремено отварање више докумената, проверу правописа и још много " "тога." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -62,10 +62,10 @@ msgstr "" "учитати на месту где сте последњи пут стали, тако да га можете одмах " "наставити." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Обрађивач текста у пуном екрану" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Пишите без ометања" diff --git a/resources/unix/po/sv.po b/resources/unix/po/sv.po index 85f7dd60..f04a0012 100644 --- a/resources/unix/po/sv.po +++ b/resources/unix/po/sv.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-26 21:17+0000\n" -"Last-Translator: PavelNicklasson \n" -"Language-Team: Swedish (http://www.transifex.com/projects/p/focuswriter/" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" +"Last-Translator: Påvel Nicklasson \n" +"Language-Team: Swedish (http://www.transifex.com/gottcode/focuswriter/" "language/sv/)\n" "Language: sv\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Ordbehandlare med helskärmsläge" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "känsla, medan det håller sig ur vägen så att du kan fördjupa dig i ditt " "arbete. " -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -51,7 +51,7 @@ msgstr "" "atmosfär. Den har även automatisk statistikuppdatering, dagliga mål, flera " "öppna dokument, stavningskontroll och mycket mer." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -60,10 +60,10 @@ msgstr "" "Dessutom, när du öppnar programmet kommer ditt pågående arbete att laddas " "automatiskt där du slutade senast så att du omedelbart kan fortsätta" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Ordbehandlare med helskärmsläge" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Skriv utan distraktioner" diff --git a/resources/unix/po/tr.po b/resources/unix/po/tr.po index cdd60809..68524bc4 100644 --- a/resources/unix/po/tr.po +++ b/resources/unix/po/tr.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Cüneyt Oktay , 2014 +# Cuneyt Oktay , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-06-01 12:52+0000\n" -"Last-Translator: Cüneyt Oktay \n" -"Language-Team: Turkish (http://www.transifex.com/projects/p/focuswriter/" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" +"Last-Translator: Cuneyt Oktay \n" +"Language-Team: Turkish (http://www.transifex.com/gottcode/focuswriter/" "language/tr/)\n" "Language: tr\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Tam ekran kelime işlemci" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -35,7 +35,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -43,17 +43,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Tam Ekran Kelime İşlemci" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Dikkat dağıtıcılar olmadan yazın" diff --git a/resources/unix/po/uk.po b/resources/unix/po/uk.po index 0e7d47f8..03b454ca 100644 --- a/resources/unix/po/uk.po +++ b/resources/unix/po/uk.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-12-09 14:09+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Zoriana Zaiats\n" -"Language-Team: Ukrainian (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Ukrainian (http://www.transifex.com/gottcode/focuswriter/" "language/uk/)\n" "Language: uk\n" "MIME-Version: 1.0\n" @@ -20,15 +20,15 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "Повноекранний текстовий редактор" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -41,7 +41,7 @@ msgstr "" "максимально зручного для користувача зовнішнього вигляду, який не " "відволікає, а дозволяє повністю зануритися в роботу." -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -54,7 +54,7 @@ msgstr "" "ставити щоденні робочі цілі, відкривати декілька документів одночасно, " "перевіряти орфографію і багато чого ще." -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -65,10 +65,10 @@ msgstr "" "робота була перервана. Так ви зможете практично миттєво повернутися до " "справи." -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Повноекранний текстовий редактор" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Писати не відволікаючись" diff --git a/resources/unix/po/update-po.sh b/resources/unix/po/update-po.sh index 59e3e17d..8e2b0e6b 100755 --- a/resources/unix/po/update-po.sh +++ b/resources/unix/po/update-po.sh @@ -4,7 +4,6 @@ echo -n 'Preparing files...' cd .. -rm -f focuswriter.desktop.in.h rm -f focuswriter.desktop.in cp focuswriter.desktop focuswriter.desktop.in sed -e '/^Name\[/ d' \ @@ -14,9 +13,7 @@ sed -e '/^Name\[/ d' \ -e 's/^GenericName/_GenericName/' \ -e 's/^Comment/_Comment/' \ -i focuswriter.desktop.in -intltool-extract --quiet --type=gettext/ini focuswriter.desktop.in -rm -f focuswriter.appdata.xml.in.h rm -f focuswriter.appdata.xml.in cp focuswriter.appdata.xml focuswriter.appdata.xml.in sed -e '/p xml:lang/ d' \ @@ -29,20 +26,11 @@ sed -e '/p xml:lang/ d' \ -e 's//<_name>/' \ -e 's/<\/name>/<\/_name>/' \ -i focuswriter.appdata.xml.in -intltool-extract --quiet --type=gettext/xml focuswriter.appdata.xml.in cd po echo ' DONE' -echo -n 'Extracting messages...' -xgettext --from-code=UTF-8 --c++ --keyword=_ --keyword=N_:1 \ - --package-name='FocusWriter' --copyright-holder='Graeme Gott' \ - --output=description.pot ../*.h -sed 's/CHARSET/UTF-8/' -i description.pot -echo ' DONE' - - echo -n 'Updating translations...' for POFILE in *.po; do @@ -56,11 +44,10 @@ echo -n 'Merging translations...' cd .. intltool-merge --quiet --desktop-style po focuswriter.desktop.in focuswriter.desktop -rm -f focuswriter.desktop.in.h rm -f focuswriter.desktop.in intltool-merge --quiet --xml-style po focuswriter.appdata.xml.in focuswriter.appdata.xml -rm -f focuswriter.appdata.xml.in.h +echo >> focuswriter.appdata.xml rm -f focuswriter.appdata.xml.in echo ' DONE' diff --git a/resources/unix/po/update-pot.sh b/resources/unix/po/update-pot.sh new file mode 100755 index 00000000..15da011e --- /dev/null +++ b/resources/unix/po/update-pot.sh @@ -0,0 +1,42 @@ +#!/bin/sh + + +echo -n 'Preparing files...' +cd .. + +rm -f focuswriter.desktop.in +cp focuswriter.desktop focuswriter.desktop.in +sed -e '/^Name\[/ d' \ + -e '/^GenericName\[/ d' \ + -e '/^Comment\[/ d' \ + -e '/^Icon/ d' \ + -e '/^Keywords/ d' \ + -i focuswriter.desktop.in + +rm -f focuswriter.appdata.xml.in +cp focuswriter.appdata.xml focuswriter.appdata.xml.in +sed -e '/p xml:lang/ d' \ + -e '/summary xml:lang/ d' \ + -e '/name xml:lang/ d' \ + -e '// d' \ + -i focuswriter.appdata.xml.in + +cd po +echo ' DONE' + + +echo -n 'Extracting messages...' +xgettext --from-code=UTF-8 --output=description.pot \ + --package-name='FocusWriter' --copyright-holder='Graeme Gott' \ + ../*.in +sed 's/CHARSET/UTF-8/' -i description.pot +echo ' DONE' + + +echo -n 'Cleaning up...' +cd .. + +rm -f focuswriter.desktop.in +rm -f focuswriter.appdata.xml.in + +echo ' DONE' diff --git a/resources/unix/po/vi.po b/resources/unix/po/vi.po index a15dee0b..04337e79 100644 --- a/resources/unix/po/vi.po +++ b/resources/unix/po/vi.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-25 21:49+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: Graeme Gott \n" -"Language-Team: Vietnamese (http://www.transifex.com/projects/p/focuswriter/" +"Language-Team: Vietnamese (http://www.transifex.com/gottcode/focuswriter/" "language/vi/)\n" "Language: vi\n" "MIME-Version: 1.0\n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -34,7 +34,7 @@ msgid "" "still getting out of the way so that you can immerse yourself in your work." msgstr "" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -42,17 +42,17 @@ msgid "" "documents, spell-checking, and much more." msgstr "" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "Phần mềm soạn thảo văn bản dạng toàn màn hình" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "Không tạo sự xao nhãng khi viết" diff --git a/resources/unix/po/zh_CN.po b/resources/unix/po/zh_CN.po index 7d372118..a0b5aaca 100644 --- a/resources/unix/po/zh_CN.po +++ b/resources/unix/po/zh_CN.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# min zhang , 2014 +# zhangmin , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-03-28 02:52+0000\n" -"Last-Translator: min zhang \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" +"Last-Translator: zhangmin \n" +"Language-Team: Chinese (China) (http://www.transifex.com/gottcode/" "focuswriter/language/zh_CN/)\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -19,15 +19,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "FocusWriter" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "全屏文字编辑器" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -37,7 +37,7 @@ msgstr "" "FocusWriter 是个简洁的,让您专心于写作的文字编辑器。所有菜单默认隐藏,当鼠标" "滑动到屏幕边缘时会显示。这样既提供所需功能,又能保证让您专注于写作。" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -47,17 +47,17 @@ msgstr "" "FocusWriter 支持自定义主题,可以调整字体,颜色,背景图像等。还有很多其他功" "能,如动态更新统计,每日计划,多标签页,拼写检查等。" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "另外,打开软件后会自动跳到上次编辑的位置,让您立刻继续投入工作" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "全屏文本编辑器" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "专心致志地写作" diff --git a/resources/unix/po/zh_TW.po b/resources/unix/po/zh_TW.po index 1b70de69..f1843bab 100644 --- a/resources/unix/po/zh_TW.po +++ b/resources/unix/po/zh_TW.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-19 15:40+0000\n" -"PO-Revision-Date: 2017-02-28 13:41+0000\n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"PO-Revision-Date: 2017-09-20 01:16+0000\n" "Last-Translator: BrLi \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/gottcode/" "focuswriter/language/zh_TW/)\n" @@ -20,15 +20,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 msgid "FocusWriter" msgstr "焦點作家" -#: ../focuswriter.appdata.xml.in.h:2 +#: ../focuswriter.appdata.xml.in:7 msgid "Fullscreen word processor" msgstr "全螢幕的文字處理器" -#: ../focuswriter.appdata.xml.in.h:3 +#: ../focuswriter.appdata.xml.in:10 msgid "" "FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" "away interface that you access by moving your mouse to the edges of the " @@ -39,7 +39,7 @@ msgstr "" "均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫" "作。" -#: ../focuswriter.appdata.xml.in.h:4 +#: ../focuswriter.appdata.xml.in:11 msgid "" "FocusWriter allows you to customize your environment by creating themes that " "control the font, colors, and background image to add ambiance. It also " @@ -49,7 +49,7 @@ msgstr "" "「焦點作家」可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統" "計;每日目標、多重開啟文件、拼字校正等等的多種功能。" -#: ../focuswriter.appdata.xml.in.h:5 +#: ../focuswriter.appdata.xml.in:12 msgid "" "Additionally, when you open the program your current work in progress will " "automatically load and position you where you last left off so that you can " @@ -58,10 +58,10 @@ msgstr "" "另外,打開您正在撰寫的文件會自動跳至您最後一次編輯的位置,讓您可以繼續進行工" "作。" -#: ../focuswriter.desktop.in.h:2 +#: ../focuswriter.desktop.in:5 msgid "Fullscreen Word Processor" msgstr "全螢幕的文字處理器" -#: ../focuswriter.desktop.in.h:3 +#: ../focuswriter.desktop.in:6 msgid "Write without distractions" msgstr "不受干擾的專心寫作" From 160a7992e358aed223020d18434ef44892a04fb0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 29 May 2018 06:28:55 -0400 Subject: [PATCH 423/630] Bump version number. --- NEWS | 11 +++++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/unix/focuswriter.appdata.xml | 13 +++++++++---- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 6435c167..2ef9aec1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +1.6.13 +------ +* Updated dictionaries. +* Updated Unicode symbols database. +* Replaced deprecated code. +* Extra warnings only shown in debug build. +* Improved Linux deployment. +* Improved macOS deployment. +* Improved Windows deployment. +* Translation updates: Dutch, French, Portuguese. + 1.6.12 ------ * Ignore empty cache files. diff --git a/focuswriter.pro b/focuswriter.pro index b705864b..b60901fe 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -34,7 +34,7 @@ CONFIG(debug, debug|release) { } # Set program version -VERSION = 1.6.12 +VERSION = 1.6.13 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 0d15b093..6df69350 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.12' +VERSION='1.6.13' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index c1777fd4..eba21565 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -190,12 +190,17 @@ - +
      -
    • Ignore empty cache files
    • -
    • Removed auto save
    • -
    • Translation updates: Slovenian
    • +
    • Updated dictionaries
    • +
    • Updated Unicode symbols database
    • +
    • Replaced deprecated code
    • +
    • Extra warnings only shown in debug build
    • +
    • Improved Linux deployment
    • +
    • Improved macOS deployment
    • +
    • Improved Windows deployment
    • +
    • Translation updates: Dutch, French, Portuguese
    diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 5508c95b..3670e364 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 12 +!define VERSIONPATCH 13 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index dd4ad891..f7705b5b 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -3,7 +3,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.12 +SET VERSION=1.6.13 ECHO Copying executable MKDIR %APP% From f1bafd79c71f8733c6a7ddba9e16a624ace68a1a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 3 Jun 2018 05:57:38 -0400 Subject: [PATCH 424/630] Log changes. --- debian/changelog | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/debian/changelog b/debian/changelog index 5dacfc5d..7a96af1c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +focuswriter (1.6.13-1) unstable; urgency=medium + + [ Graeme Gott ] + * New upstream release + + [ Barak A. Pearlmutter ] + * bump policy + + -- Graeme Gott Tue, 29 May 2018 10:29:27 +0000 + focuswriter (1.6.12-1) unstable; urgency=medium [ Graeme Gott ] From 2d49c1e75fb9d1e46e472cd94b62660b4b053e7f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 27 Jun 2018 08:47:53 -0400 Subject: [PATCH 425/630] Rename NEWS to ChangeLog. --- NEWS => ChangeLog | 0 mac_deploy.sh | 2 +- windows_deploy.bat | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename NEWS => ChangeLog (100%) diff --git a/NEWS b/ChangeLog similarity index 100% rename from NEWS rename to ChangeLog diff --git a/mac_deploy.sh b/mac_deploy.sh index 6df69350..7d0bad9b 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -35,7 +35,7 @@ echo >> "$APP/Read Me.txt" echo 'NEWS' >> "$APP/Read Me.txt" echo '====' >> "$APP/Read Me.txt" echo >> "$APP/Read Me.txt" -cat NEWS >> "$APP/Read Me.txt" +cat ChangeLog >> "$APP/Read Me.txt" echo 'Done' # Copy translations diff --git a/windows_deploy.bat b/windows_deploy.bat index f7705b5b..e5cdb1fd 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -55,7 +55,7 @@ ECHO. >> %APP%\ReadMe.txt ECHO NEWS >> %APP%\ReadMe.txt ECHO ==== >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt -TYPE NEWS >> %APP%\ReadMe.txt +TYPE ChangeLog >> %APP%\ReadMe.txt ECHO Creating installer CD %APP% From b8701fc9f5943dfcae1c2c66af45c0ea3b50f4a0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 6 Jul 2018 13:48:47 -0400 Subject: [PATCH 426/630] FIXED: Regression where emergency cache didn't run. --- src/window.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/window.cpp b/src/window.cpp index 0da98c10..cfd4798e 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -159,6 +159,7 @@ Window::Window(const QStringList& command_line_files) : // Set up cache timer m_save_timer = new QTimer(this); m_save_timer->setInterval(300000); + connect(m_save_timer, SIGNAL(timeout()), m_documents, SLOT(autoCache())); connect(m_save_timer, SIGNAL(timeout()), m_daily_progress, SLOT(save())); // Set up details From 218246779502fbad710026fc0d157c0ba181bb52 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 6 Jul 2018 14:58:37 -0400 Subject: [PATCH 427/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 5 + resources/unix/focuswriter.desktop | 3 + resources/unix/po/bs.po | 73 + translations/focuswriter_bs.ts | 1863 ++++++++++++++++++++++++ 4 files changed, 1944 insertions(+) create mode 100644 resources/unix/po/bs.po create mode 100644 translations/focuswriter_bs.ts diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index eba21565..e3b3dadb 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -5,6 +5,7 @@ GPL-3.0+ FocusWriter FocusWriter + FocusWriter FocusWriter FocusWriter FocusWriter @@ -41,6 +42,7 @@ 焦點作家 Fullscreen word processor Volskerm woordverwerker + Aplikacija za rad s tekstom na punom ekranu Textový procesor v režimu na celou obrazovku Tekstbehandling i fuldskærm Vollbild-Textverarbeitungsprogramm @@ -74,6 +76,7 @@

    FocusWriter is a simple, distraction-free word processor. It utilizes a hide-away interface that you access by moving your mouse to the edges of the screen, allowing the program to have a familiar look and feel to it while still getting out of the way so that you can immerse yourself in your work.

    FocusWriter is 'n eenvoudige woordverwerker sonder enige afleidings. Dit maak gebruik van 'n wegsteek-koppelvlak wat jy kan gebruik deur jou muis na die kante van die skerm te beweeg en verskaf sodoende 'n bekende en gebruiklike voorkoms en gevoel, terwyl die program uit jou pad bly dat jy jou in jou werk kan verdiep.

    +

    FocusWriter je jednostavan program za rad s tekstom, bez distrakcija. Svi elementi aplikacije skriveni su iz vidokruga i pristupa im se povlačenjem kursora miša do ivica ekrana. Ovakav metod rada kreira radno okruženje na koje se lahko naviknuti i omogućava Vam potpunu koncentraciju na tekst.

    FocusWriter je jednoduchý, nerozptylující zpracovatel textu. Používá schovávající se rozhraní, ke kterému se dostanete pohybem ukazovátka vaší myši k okrajům obrazovky, čímž programu umožňuje mít důvěrně známý vzhled a dojem z něj, a přitom být z dohledu, takže se můžete ponořit do své práce.

    FocusWriter er en enkel tekstbehandler fri for distraherende elementer. Den anvender en brugerflade, der gemmes under arbejde med kan fremkaldes ved at føre musen til skærmens kanter, så programmet kan opsættes med kendte redskaber, men på en måde, hvor du kan fordybe dig i dit arbejde.

    FocusWriter ist ein einfaches, ablenkungsfreies Textverarbeitungsprogramm. Die Bedienoberfläche ist nur dann sichtbar, wenn man den Mauszeiger an den Rand des Bildschirms bewegt. Auf dieses Weise lässt sich das Programm intuitiv benutzen, ohne dass die Programmoberfläche ihnen die Sicht auf das versperrt, was eigentlich zählt: Ihre Arbeit.

    @@ -104,6 +107,7 @@

    「焦點作家」是一個簡潔、讓您不受干擾的文字處理器。除了寫作區域以外,其他介面均在您將滑鼠移到螢幕邊緣時才會顯示,這樣既能提供所需的功能,又能讓您專心寫作。

    FocusWriter allows you to customize your environment by creating themes that control the font, colors, and background image to add ambiance. It also features on-the-fly updating statistics, daily goals, multiple open documents, spell-checking, and much more.

    FocusWriter laat jou toe om jou omgewing te verpersoonlik. Jy kan tema's gebruik wat die lettertipe, kleure, en agtergrondfoto verander om 'n eie atmosfeer te skep. Die program ondersteun statistiek wat deurlopend opdateer, daaglikse doelwitte, veelvoudige oop dokumente, speltoetsing, en vele meer.

    +

    FocusWriter omogućava Vam da prilagodite radni ambijent vlastitom ukusu kreirajući teme koje sadržavaju različite fontove, boje i pozadinske slike. Aplikacija nudi i statistiku o tekstu, definisanje dnevnih ciljeva, otvaranje više dokumenata u isto vrijeme, provjeru pravopisa i brojne druge mogućnosti.

    FocusWriter vám umožňuje si své prostředí přizpůsobit vytvořením vzhledů, jež řídí písmo, barvy, a obrázek na pozadí, čímž se pracovnímu prostředí přidá určitá nálada. Nabízí také za běhu se obnovující statistikou, denní cíle, možnost mít více otevřených dokumentů, ověřování pravopisu, a mnohé další.

    FocusWriter kan tilpasse arbejdsmiljøet ved at arbejde med temaer, der kontrollerer skrifttype, farver og et baggrundsbillede for stemning. Programmet har også statistik, der opdateres mens du arbejder, daglige mål, mulighed for flere åbne dokumenter, stavekontrol og meget andet.

    FocusWriter erlaubt es Ihnen, die Benutzeroberfläche anzupassen. indem Sie mittel selbst erstellter Themen die Schriftart, Farben und das Hintergrundbild des Programms einstellen, schaffen Sie ihre eigene Arbeitsatmosphäre. Weitere Bestandteile sind Echtzeit-Statistiken, Tagesziele, das Öffnen mehrerer Dokumente gleichzeitig, Rechtschreibkorrektur und vieles mehr.

    @@ -134,6 +138,7 @@

    「焦點作家」可以自訂主題、更改字體、顏色、以及背景圖片等等。也有如動態更新統計;每日目標、多重開啟文件、拼字校正等等的多種功能。

    Additionally, when you open the program your current work in progress will automatically load and position you where you last left off so that you can immediately jump back in.

    Voorts laai die program die dokument waarmee jy besig was, asook presies waar in die dokument jy besig was, wanneer jy die program oopmaak. So kan jy dadelik aan die werk spring.

    +

    Kada otvorite program, svi dokumenti na kojima trenutno radite bit će automatski učitani, a kursor će u svakom od njih biti na istoj poziciji na kojoj se nalazio kada ste zadnji put zatvorili dokument. To Vam omogućava da odmah nastavite s radom tačno ondje gdje ste zadnji put stali.

    Navíc, když otevřete program, vaše rozdělaná práce se automaticky nahraje a otevře se na místě, kde jste ji naposledy opustily, takže se do ní zase budete moci okamžitě dát.

    Desuden gemmes og genåbnes dit arbejde automatisk, så programmet ved opstart vil indlæse det seneste dokument og placere markøren hvor den var, så du med det samme kan komme tilbage i teksten.

    Darüberhinaus lädt das Programm beim Start automatisch ihr zuletzt geöffnetes Dokument an der Stelle, an der Sie zuletzt gearbeitet haben, sodass Sie ihre Arbeit direkt fortsetzen können.

    diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index cba80604..42299c4d 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -2,6 +2,7 @@ Type=Application Name=FocusWriter Name[af_ZA]=FocusWriter +Name[bs]=FocusWriter Name[cs]=FocusWriter Name[da]=FocusWriter Name[de]=FocusWriter @@ -38,6 +39,7 @@ Name[zh_CN]=FocusWriter Name[zh_TW]=焦點作家 GenericName=Fullscreen Word Processor GenericName[af_ZA]=Volskerm woordverwerker +GenericName[bs]=Aplikacija za rad s tekstom na punom ekranu GenericName[cs]=Celoobrazovkový editor textu GenericName[da]=Tekstbehandlingsprogram i fuld skærm GenericName[de]=Vollbild-Textverarbeitung @@ -73,6 +75,7 @@ GenericName[zh_CN]=全屏文本编辑器 GenericName[zh_TW]=全螢幕的文字處理器 Comment=Write without distractions Comment[af_ZA]=Skryf sonder afleidings +Comment[bs]=Pišite bez ometanja Comment[cs]=Pište bez rozptylování Comment[da]=Skriv uden at blive distraheret Comment[de]=Schreibe ohne Ablenkung diff --git a/resources/unix/po/bs.po b/resources/unix/po/bs.po new file mode 100644 index 00000000..2a92f1c3 --- /dev/null +++ b/resources/unix/po/bs.po @@ -0,0 +1,73 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Graeme Gott +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Derviš T., 2018 +msgid "" +msgstr "" +"Project-Id-Version: FocusWriter\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-14 20:43+0000\n" +"PO-Revision-Date: 2018-06-04 03:13+0000\n" +"Last-Translator: Derviš T.\n" +"Language-Team: Bosnian (http://www.transifex.com/gottcode/focuswriter/" +"language/bs/)\n" +"Language: bs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../focuswriter.appdata.xml.in:6 ../focuswriter.desktop.in:4 +msgid "FocusWriter" +msgstr "FocusWriter" + +#: ../focuswriter.appdata.xml.in:7 +msgid "Fullscreen word processor" +msgstr "Aplikacija za rad s tekstom na punom ekranu" + +#: ../focuswriter.appdata.xml.in:10 +msgid "" +"FocusWriter is a simple, distraction-free word processor. It utilizes a hide-" +"away interface that you access by moving your mouse to the edges of the " +"screen, allowing the program to have a familiar look and feel to it while " +"still getting out of the way so that you can immerse yourself in your work." +msgstr "" +"FocusWriter je jednostavan program za rad s tekstom, bez distrakcija. Svi " +"elementi aplikacije skriveni su iz vidokruga i pristupa im se povlačenjem " +"kursora miša do ivica ekrana. Ovakav metod rada kreira radno okruženje na " +"koje se lahko naviknuti i omogućava Vam potpunu koncentraciju na tekst." + +#: ../focuswriter.appdata.xml.in:11 +msgid "" +"FocusWriter allows you to customize your environment by creating themes that " +"control the font, colors, and background image to add ambiance. It also " +"features on-the-fly updating statistics, daily goals, multiple open " +"documents, spell-checking, and much more." +msgstr "" +"FocusWriter omogućava Vam da prilagodite radni ambijent vlastitom ukusu " +"kreirajući teme koje sadržavaju različite fontove, boje i pozadinske slike. " +"Aplikacija nudi i statistiku o tekstu, definisanje dnevnih ciljeva, " +"otvaranje više dokumenata u isto vrijeme, provjeru pravopisa i brojne druge " +"mogućnosti." + +#: ../focuswriter.appdata.xml.in:12 +msgid "" +"Additionally, when you open the program your current work in progress will " +"automatically load and position you where you last left off so that you can " +"immediately jump back in." +msgstr "" +"Kada otvorite program, svi dokumenti na kojima trenutno radite bit će " +"automatski učitani, a kursor će u svakom od njih biti na istoj poziciji na " +"kojoj se nalazio kada ste zadnji put zatvorili dokument. To Vam omogućava da " +"odmah nastavite s radom tačno ondje gdje ste zadnji put stali." + +#: ../focuswriter.desktop.in:5 +msgid "Fullscreen Word Processor" +msgstr "Aplikacija za rad s tekstom na punom ekranu" + +#: ../focuswriter.desktop.in:6 +msgid "Write without distractions" +msgstr "Pišite bez ometanja" diff --git a/translations/focuswriter_bs.ts b/translations/focuswriter_bs.ts new file mode 100644 index 00000000..4fb3278b --- /dev/null +++ b/translations/focuswriter_bs.ts @@ -0,0 +1,1863 @@ + + + + + Alert + + Close (%1) + Zatvori (%1) + + + Collapse + Sažmi + + + Expand + Proširi + + + + AlertLayer + + Dismiss Alert + Odbaci upozorenje + + + Ctrl+D + Ctrl+D + + + + DailyProgress + + %1% of %Ln minute(s) + + %1% od %Ln minute + %1% od %Ln minute + %1% od %Ln minuta + + + + %1% of %Ln word(s) + + %1% od %Ln riječi + %1% od %Ln riječi + %1% od %Ln riječi + + + + %Ln word(s) + + %Ln riječ + %Ln riječi + %Ln riječi + + + + %Ln minute(s) + + %Ln minuta + %Ln minute + %Ln minuta + + + + 0% + 0% + + + + DailyProgressDialog + + Daily Progress + Dnevno napredovanje + + + Longest streak + Najduži niz + + + Current streak + Trenutni niz + + + N/A + Nema + + + %n day(s) + + %n dan + %n dana + %n dana + + + + %1 &ndash; %2 + %1 – %2 + + + + DailyProgressLabel + + %1% of daily goal + %1% od dnevnog cilja + + + + DictionaryDialog + + Set Language + Odredi jezik + + + + Document + + (Untitled %1) + (Bez naziva %1) + + + %1 (Read-Only) + %1 (samo za čitanje) + + + Sorry + Nažalost + + + Unable to save '%1'. + Nije moguće pohraniti '%1'. + + + Save File As + Pohrani datoteku kao + + + Unable to overwrite '%1'. + Nije moguće prebrisati '%1'. + + + Rename File + Preimenuj datoteku + + + Unable to rename '%1'. + Nije moguće preimenovati '%1'. + + + Reload File? + Ponovo učitati datoteku? + + + Reload the file '%1' from disk? + Ponovo učitati datoteku '%1' sa diska? + + + All unsaved changes will be lost. + Sve nepohranjene izmjene bit će izgubljene. + + + Reload + Ponovo učitaj + + + Untitled %1 + Bez naziva %1 + + + Question + Pitanje + + + Saving as plain text will discard all formatting. Discard formatting? + Pohranjivanje u običnom tekstualnom formatu poništit će sva oblikovanja teksta. Poništiti oblikovanja? + + + + DocumentWatcher + + File Changed + Datoteka je izmijenjena + + + The file '%1' was changed by another program. + Datoteka '%1' izmijenjena je u drugom programu. + + + Do you want to reload the file? + Želite li ponovo učitati datoteku? + + + Reload + Ponovo učitaj + + + Ignore + Zanemari + + + File Deleted + Datoteka je obrisana + + + The file %1 was deleted by another program. + Datoteku %1 obrisao je drugi program. + + + Do you want to save or close the file? + Želite li pohraniti ili zatvoriti datoteku? + + + + DocxReader + + Unable to open archive. + Nije moguće otvoriti arhivu. + + + + FindDialog + + Search for: + Potraži: + + + Replace with: + Zamijeni sa: + + + Ignore case + Ne razlikuj velika od malih slova + + + Whole words only + Samo cijele riječi + + + Regular expressions + Regularni izrazi (regexp) + + + Search up + Traži iznad + + + Search down + Traži ispod + + + &Find + Pronađi + + + &Replace + Zamijeni + + + Replace &All + Zamijeni sve + + + Find + Pronađi + + + Replace + Zamijeni + + + Replace %n instance(s)? + + Zamijeniti %n rezultat? + Zamijeniti %n rezultata? + Zamijeniti %n rezultata? + + + + Question + Pitanje + + + Sorry + Nažalost + + + Phrase not found. + Izraz nije pronađen. + + + + FormatManager + + OpenDocument Text + OpenDocument Text + + + OpenDocument Flat XML + OpenDocument Flat XML + + + Office Open XML + Office Open XML + + + Rich Text Format + Rich Text Format + + + Plain Text + Plain Text + + + All Files + Sve datoteke + + + All Supported Files + Sve podržane datoteke + + + + Highlighter + + Add + Dodaj + + + Check Spelling... + Provjeri pravopis ... + + + (No suggestions found) + (Nema prijedloga) + + + + ImageButton + + Open Image + Otvori sliku + + + Images(%1) + Slike(%1) + + + + LocaleDialog + + Select application language: + Odaberite jezik aplikacije: + + + <System Language> + <System Language> + + + Note + Bilješka + + + Please restart this application for the change in language to take effect. + Molimo ponovo pokrenite aplikaciju da bi promjena jezika stupila na snagu. + + + + OdtReader + + Unable to open archive. + Nije moguće otvoriti arhivu. + + + + PreferencesDialog + + Preferences + Podešavanja + + + General + Opća + + + Statistics + Statistika + + + Toolbar + Traka s alatkama + + + Spell Checking + Provjera pravopisa + + + Select Dictionary + Odaberite rječnik + + + Sorry + Nažalost + + + Unable to open archive. + Nije moguće otvoriti arhivu. + + + The archive does not contain a usable dictionary. + Arhiva ne sadržava odgovarajući rječnik. + + + Question + Pitanje + + + Shortcuts + Kratice + + + One or more shortcuts conflict. Do you wish to proceed? + Kratice se preklapaju. Želite li nastaviti? + + + The dictionary "%1" already exists. Do you want to replace it? + Rječnik "%1" već postoji. Želite li ga zamijeniti? + + + Daily Goal + Dnevni cilj + + + None + Ništa + + + Minutes: + Minuta: + + + Words: + Riječi: + + + Editing + Rad s tekstom + + + Always vertically center + Kursor uvijek vertikalno centriran + + + Block insertion cursor + Četvrtasti kursor + + + Smooth fonts + Bolji prikaz slova + + + Typewriter sounds + Zvuk pisaće mašine + + + Smart quotes: + Navodni znaci: + + + Double + Navodnici + + + Single + Polunavodnici + + + Scenes + Scene + + + Divider: + Odvajanje scena pomoću: + + + Saving + Pohranjivanje + + + Remember cursor position + Zapamti poziciju kursora + + + Word count + Broj riječi + + + Page count + Broj stranica + + + Paragraph count + Broj pasusa + + + Character count + Broj znakova + + + Characters: + Znakova: + + + Paragraphs: + Pasusa: + + + Word Count Algorithm + Način utvrđivanja broja riječi + + + Reset daily progress for today to zero? + Vratiti današnje dnevno napredovanje na nulu? + + + Remove current dictionary? + Ukloniti trenutno korišteni rječnik? + + + Write byte order mark in plain text files + Piši Byte Order Mark u običnim tekstualnim datotekama + + + Default format: + Podrazumijevani format: + + + User Interface + Elementi prozora + + + Always show scrollbar + Uvijek prikaži letvicu za pomjeranje teksta + + + Always show top bar + Uvijek prikaži meni i traku s alatkama + + + Always show bottom bar + Uvijek prikaži popis otvorenih datoteka i statistiku + + + Reset Today + Poništi današnje dnevno napredovanje + + + History + Raniji nizovi + + + Remember history + Zabilježi nizove + + + Show streaks + Prikaži nizove + + + Minimum progress for streaks: + Minimum za računanje napredovanja u nizu: + + + Detect word boundaries + Utvrdi granice riječi + + + Divide character count by six + Podijeli broj znakova sa šest + + + Count each letter as a word + Svako slovo računaj kao riječ + + + Page Count Algorithm + Način utvrđivanja broja stranica + + + Style + Izgled + + + Icons Only + Samo sličice + + + Text Only + Samo tekst + + + Text Alongside Icons + Tekst pored sličica + + + Text Under Icons + Tekst ispod sličica + + + Text Position: + Pozicija teksta: + + + Actions + Elementi + + + Move Up + Pomjeri gore + + + Move Down + Pomjeri dolje + + + Add Separator + Dodaj razdjelnicu + + + Command + Komanda + + + Shortcut + Kratica + + + Action + Aktivnost + + + Check spelling as you type + Provjeri pravopis tokom kucanja + + + Ignore words in UPPERCASE + Zaobiđi riječi pisane VELIKIM SLOVIMA + + + Ignore words with numbers + Zaobiđi riječi koje sadržavaju brojeve + + + Language + Jezik + + + Add + Dodaj + + + Remove + Ukloni + + + Personal Dictionary + Vlastiti rječnik + + + + RtfReader + + Not a supported RTF file. + Nije validna RTF datoteka. + + + + RtfTokenizer + + Unexpectedly reached end of file. + Neočekivani kraj datoteke. + + + + SceneList + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + Move Scenes Up + Premjesti scene naprijed + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + Toggle Scene List + Prikaži popis scena + + + Shift+F4 + Shift+F4 + + + Show scene list (%1) + Prikaži popis scena (%1) + + + Hide scene list (%1) + Sakrij popis scena (%1) + + + Filter + Filter + + + Move Scenes Down + Premjesti scene nazad + + + Resize scene list + Promjeni veličinu popisa scena + + + + Session + + Default + Početna + + + + SessionManager + + Manage Sessions + Uredi sesije + + + S&essions + Sesije + + + New + Nova + + + Duplicate + Duplikat + + + Rename + Preimenuj + + + Delete + Obriši + + + Switch To + Pređi na + + + New Session + Nova sesija + + + Duplicate Session + Duplikat sesije + + + Rename Session + Preimenuj sesiju + + + Question + Pitanje + + + Delete selected session? + Obrisati označenu sesiju? + + + Session name: + Naziv sesije: + + + Sorry + Nažalost + + + The requested session name is already in use. + Naziv sesije već postoji. + + + &New... + Nova ... + + + Ctrl+Shift+N + Ctrl+Shift+N + + + &Manage... + Uredi ... + + + Ctrl+Shift+M + Ctrl+Shift+M + + + + ShortcutEdit + + Clear + Počisti + + + Reset to Default + Vrati na predefinisanu + + + Shortcut: + Kratica: + + + + SmartQuote + + Replacing quotation marks... + Zamjena navodnika ... + + + Please Wait + Molimo sačekajte + + + + SpellChecker + + Check Spelling + Provjeri pravopis + + + &Add + Dodaj + + + &Ignore + Zanemari + + + I&gnore All + Zanemari sve + + + &Change + Promijeni + + + C&hange All + Promijeni sve + + + Not in dictionary: + Nema u rječniku: + + + Change to: + Promijeni u: + + + Checking spelling... + Provjera pravopisa ... + + + Cancel + Prekini + + + Please wait + Molimo sačekajte + + + Continue checking at beginning of file? + Nastaviti provjeru od početka teksta? + + + Spell check complete. + Provjera pravopisa završena. + + + + SymbolsDialog + + Symbols + Specijalni znaci + + + Recently used symbols + Nedavno korišteni znaci + + + All symbols + Svi znaci + + + Details + Detalji + + + Name: + Naziv: + + + Insert + Umetni + + + + SymbolsModel + + Blocks + Skupine + + + Scripts + Pisma + + + + Theme + + Untitled %1 + Bez naziva %1 + + + + ThemeDialog + + Name: + Naziv: + + + No Image + Bez slike + + + Tiled + S ponavljanjem + + + Centered + Centrirana + + + Stretched + Razvučena + + + Scaled + Prilagođena + + + Zoomed + Uvećana + + + Opacity: + Providnost: + + + Position: + Pozicija: + + + Width: + Širina: + + + Round Text Background Corners + Zaobljeni uglovi pozadine teksta + + + Radius: + Radijus: + + + Blur Text Background + Mutna pozadina teksta + + + Text Background Drop Shadow + Sjenka pozadine teksta + + + Vertical Offset: + Vertikalno: + + + Margins + Margine + + + Window: + Prozor: + + + Page: + Stranica: + + + Indent first line + Uvučena prva linija teksta + + + Above: + Iznad: + + + Below: + Ispod: + + + Remove + Ukloni + + + Edit Theme + Izmijeni temu + + + Window Background + Pozadina prozora + + + Type: + Vrsta: + + + Color: + Boja: + + + Image: + Slika: + + + pixels + px + + + Left + Lijevo + + + Text Background + Pozadina teksta + + + Right + Desno + + + Text + Tekst + + + Font: + Font: + + + Misspelled: + Pogrešno napisano: + + + Line Spacing + Prored + + + Single + Jednostruki + + + 1.5 Lines + 1,5 redova + + + Double + Dvostruki + + + Proportional + Proporcionalni + + + Height: + Razmak: + + + Paragraph Spacing + Pasus + + + Tab Width: + Uvlačak: + + + New Theme + Nova tema + + + + ThemeManager + + Themes + Teme + + + Default + Osnovne + + + Bitter Skies + Bitter Skies + + + Enchantment + Enchantment + + + Gentle Blues + Gentle Blues + + + Old School + Old School + + + Space Dreams + Space Dreams + + + Spy Games + Spy Games + + + Tranquility + Tranquility + + + Writing Desk + Writing Desk + + + New + Nova + + + Duplicate + Duplikat + + + Custom + Prerađene + + + Edit + Izmijeni + + + Delete + Obriši + + + Import + Unesi + + + Export + Iznesi + + + Question + Pitanje + + + Delete theme '%1'? + Obrisati temu '%1'? + + + Themes (%1) + Teme (%1) + + + Import Theme + Unesi temu + + + Export Theme + Iznesi temu + + + + Timer + + <b>%1</b> - %2 + <b>%1</b> – %2 + + + Question + Pitanje + + + Delete timer? + Obrisati podsjetnik? + + + <b>Words:</b> %L1 + <b>Riječi:</b> %L1 + + + <b>Pages:</b> %L1 + <b>Stranica:</b> %L1 + + + <b>Paragraphs:</b> %L1 + <b>Pasusa:</b> %L1 + + + <b>Characters:</b> %L1 / %L2 + <b>Znakova:</b> %L1 / %L2 + + + Set Delay + Za koliko vremena + + + Set Time + U koliko sati + + + Delay: + Za: + + + Time: + U: + + + HH:mm:ss + HH:mm:ss + + + Alarm + Vrijeme je isteklo! + + + Type: + Vrsta: + + + Memo: + Opis: + + + Edit + Izmijeni + + + Delete + Obriši + + + + TimerDisplay + + HH:mm:ss + HH:mm:ss + + + No timers running + Podsjetnik nije pokrenut + + + + TimerManager + + Timers + Podsjetnici + + + New + Novi + + + Recent + Korišteni + + + Question + Pitanje + + + Cancel editing timers? + Poništiti izmjene podsjetnika? + + + +HH:mm:ss + +HH:mm:ss + + + %1 - %2 + %1 – %2 + + + + Window + + Loading themes + Učitavanje tema + + + Loading sounds + Učitavanje zvuka + + + Untitled + Bez naziva + + + Open File + Otvori datoteku + + + About FocusWriter + O FocusWriteru + + + FocusWriter + FocusWriter + + + A simple fullscreen word processor + Aplikacija za rad s tekstom na punom ekranu + + + Copyright &copy; 2008-%1 Graeme Gott + &copy; 2008&ndash;%1 Graeme Gott + + + Released under the <a href=%1>GPL 3</a> license + Objavljeno pod <a href=%1>GPL 3</a> licencom + + + Uses icons from the <a href=%1>Oxygen</a> icon theme + Koristi sličice <a href=%1>Oxygen</a> teme + + + Used under the <a href=%1>LGPL 3</a> license + prema uslovima <a href=%1>LGPL 3</a> licence + + + Characters: %L1 / %L2 + Znakova: %L1 / %L2 + + + Pages: %L1 + Stranica: %L1 + + + Paragraphs: %L1 + Pasusa: %L1 + + + Words: %L1 + Riječi: %L1 + + + Opening %1 + Otvaranje %1 + + + (Untitled %1) + (Bez naziva %1) + + + List all documents + Prikaži sve dokumente + + + Switch to Next Document + Pređi na sljedeći dokument + + + Switch to Previous Document + Pređi na prethodni dokument + + + Switch to First Document + Pređi na prvi dokument + + + Switch to Last Document + Pređi na posljednji dokument + + + Switch to Document %1 + Pređi na dokument %1 + + + Loading settings + Učitavanje podešavanja + + + Emergency cache is not writable. + Onemogućeno je pohranjivanje u rezervnu memoriju. + + + Warning + Upozorenje + + + FocusWriter was not shut down cleanly. + FocusWriter nije zatvoren na regularan način. + + + Restore from the emergency cache? + Restaurirati iz rezervne memorije? + + + Some files could not be opened. + Neke od datoteka nije bilo moguće otvoriti. + + + Some files were opened Read-Only. + Neke od datoteka otvorene su samo za čitanje. + + + '%1' is newer than the cached copy. + '%1' je noviji od rezervne kopije. + + + Overwrite newer file? + Prebrisati noviju datoteku? + + + Save Changes? + Pohraniti izmjene? + + + Save changes to the file '%1' before closing? + Pohraniti izmjene u datoteci '%1' prije zatvaranja? + + + Your changes will be lost if you don't save them. + Sve izmjene bit će bespovratno izgubljene ukoliko ih ne pohranite. + + + Unable to load typewriter sounds. + Nije moguće učitati zvuk pisaće mašine. + + + &File + Datoteka + + + &New + Nova + + + &Open... + Otvori ... + + + Reloa&d + Ponovo učitaj + + + &Save + Pohrani + + + Save &As... + Pohrani kao ... + + + &Rename... + Preimenuj ... + + + Save A&ll + Pohrani sve + + + Manage Sessions + Uredi sesije + + + New Session + Nova sesija + + + &Print... + Štampaj ... + + + Pa&ge Setup... + Podešavanje stranice ... + + + &Close + Zatvori + + + &Quit + Izađi + + + Ctrl+Q + Ctrl+Q + + + &Edit + Izmjena + + + &Undo + Opozovi + + + &Redo + Ponovi + + + Cu&t + Isijeci + + + &Copy + Kopiraj + + + &Paste + Zalijepi + + + Paste &Unformatted + Zalijepi neformatirano + + + Ctrl+Shift+V + Ctrl+Shift+V + + + Select &All + Označi sve + + + Select &Scene + Označi scenu + + + Ctrl+Shift+A + Ctrl+Shift+A + + + Fo&rmat + Oblikovanje + + + &Heading + Naslov + + + Heading &1 + Naslov &1 + + + Heading &2 + Naslov &2 + + + Heading &3 + Naslov &3 + + + Heading &4 + Naslov &4 + + + Heading &5 + Naslov &5 + + + Heading &6 + Naslov &6 + + + &Normal + Obični tekst + + + &Bold + Podebljano + + + &Italic + Kurziv + + + &Underline + Podvučeno + + + Stri&kethrough + Precrtano + + + Ctrl+K + Ctrl+K + + + Sup&erscript + Eksponent + + + Ctrl+^ + Ctrl+^ + + + &Subscript + Indeks + + + Ctrl+_ + Ctrl+_ + + + Align &Left + Poravnaj slijeva + + + Ctrl+{ + Ctrl+{ + + + Align &Center + Poravnaj po sredini + + + Ctrl+| + Ctrl+| + + + Align &Right + Poravnaj zdesna + + + Ctrl+} + Ctrl+} + + + Align &Justify + Poravnaj obostrano + + + Ctrl+J + Ctrl+J + + + &Decrease Indent + Pomjeri ulijevo + + + Ctrl+< + Ctrl+< + + + I&ncrease Indent + Pomjeri udesno + + + Ctrl+> + Ctrl+> + + + Le&ft to Right Block + Piši slijeva udesno + + + Ri&ght to Left Block + Piši zdesna ulijevo + + + &Tools + Alatke + + + &Find... + Pretraga ... + + + Find &Next + Pronađi sljedeće + + + Find Pre&vious + Pronađi prethodno + + + &Replace... + Zamjena ... + + + Ctrl+R + Ctrl+R + + + Smart &Quotes + Navodnici + + + Update &Document + Ispravi u cijelom dokumentu + + + Update Document Smart Quotes + Ispravi navodnike u cijelom dokumentu + + + Update &Selection + Ispravi u označenom tekstu + + + Update Selection Smart Quotes + Ispravi navodnike u označenom tekstu + + + &Spelling... + Pravopis ... + + + F7 + F7 + + + Set &Language... + Odredi jezik ... + + + &Timers... + Podsjetnici ... + + + S&ymbols... + Specijalni znaci ... + + + &Daily Progress + Dnevno napredovanje + + + &Settings + Podešavanja + + + Show &Toolbar + Prikaži traku s alatkama + + + Show &Menu Icons + Prikaži sličice u menijima + + + F&ocused Text + Fokus na tekst + + + &Fullscreen + Puni ekran + + + F11 + F11 + + + Esc + Esc + + + M&inimize + Minimiziraj + + + Ctrl+M + Ctrl+M + + + &Themes... + Teme ... + + + &Preferences... + Podešavanja ... + + + Focus Off + Fokus poništen + + + Focus One Line + Fokus na jedan red teksta + + + Focus Three Lines + Fokus na tri reda teksta + + + &Paragraph + Pasus + + + Focus Paragraph + Fokus na pasus + + + Ctrl+Shift+` + Ctrl+Shift+` + + + &Help + Pomoć + + + Application &Language... + Jezik aplikacije ... + + + Some files were unsupported and could not be opened. + Neke od datoteka nisu u podržanim formatima i ne mogu se otvoriti. + + + &Off + Bez fokusa + + + One &Line + Jedan red teksta + + + &Three Lines + Tri reda teksta + + + &About + O aplikaciji + + + About &Qt + O Qt-u + + + From 0cf21aae45451235305ada9ffdf7c88866ed768a Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 6 Jul 2018 15:11:16 -0400 Subject: [PATCH 428/630] Bump version number. --- ChangeLog | 6 ++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/unix/focuswriter.appdata.xml | 10 ++++++++++ resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ef9aec1..0ba3d6ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +1.6.14 +------ +* FIXED: Regression where emergency cache didn't run. +* Renamed NEWS to ChangeLog. +* Translation updates: Bosnian. + 1.6.13 ------ * Updated dictionaries. diff --git a/focuswriter.pro b/focuswriter.pro index b60901fe..2a48ea19 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -34,7 +34,7 @@ CONFIG(debug, debug|release) { } # Set program version -VERSION = 1.6.13 +VERSION = 1.6.14 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 7d0bad9b..a810cb68 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.13' +VERSION='1.6.14' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index e3b3dadb..c9a63b51 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -195,6 +195,16 @@ + + +
      +
    • FIXED: Regression where emergency cache didn't run
    • +
    • Renamed NEWS to ChangeLog
    • +
    • Translation updates: Bosnian
    • +
    +
    +
    +
  • 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 z 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 AcK`qY literal 0 HcmV?d00001 diff --git a/resources/symbols/symbols900.dat b/resources/symbols/symbols900.dat deleted file mode 100644 index 3f2a25eb7b11b66c5a0c3b8011d9dd16b0ed7c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237491 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%0A|G48Cg!XoR;K3OeIANDt(iJQQXC<9S=xgI8 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%0A)tT|bLxQx;+$wm0TS!?{dHJ|1`3*M8~& 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 z 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 amhqdY0VjB6 + * Copyright (C) 2012, 2013, 2014, 2016, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -295,7 +295,7 @@ int SymbolsModel::rowCount(const QModelIndex& parent) const void SymbolsModel::setData(const QStringList& datadirs) { for (const QString& path : datadirs) { - QFileInfo info(path + "/symbols900.dat"); + QFileInfo info(path + "/symbols1000.dat"); if (info.exists()) { m_path = info.absoluteFilePath(); break; diff --git a/windows_deploy.bat b/windows_deploy.bat index a456d094..8028a4da 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -33,7 +33,7 @@ MKDIR %SOUNDS% COPY resources\sounds\* %SOUNDS% >nul ECHO Copying symbols -COPY resources\symbols\symbols900.dat %APP% >nul +COPY resources\symbols\symbols1000.dat %APP% >nul ECHO Copying themes SET THEMES=%APP%\themes From b2e1d54d177b56b33a29bb4b56f39f6fb23da384 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 19 May 2018 13:26:54 -0400 Subject: [PATCH 415/630] Update dictionaries. --- resources/windows/dictionaries.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/windows/dictionaries.sh b/resources/windows/dictionaries.sh index 14aa7daa..1612c983 100755 --- a/resources/windows/dictionaries.sh +++ b/resources/windows/dictionaries.sh @@ -11,11 +11,11 @@ cd temp # Download echo -n 'Downloading LibreOffice dictionaries...' -loversion='6.0.0.3' +loversion='6.0.4.2' lodict="libreoffice-dictionaries-${loversion}" lofiles="libreoffice-${loversion}/dictionaries" if [ ! -e "${lodict}.tar.xz" ]; then - curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/6.0.0/${lodict}.tar.xz" + curl -s -O -L "https://download.documentfoundation.org/libreoffice/src/6.0.4/${lodict}.tar.xz" echo ' DONE' else echo ' SKIPPED' @@ -50,10 +50,10 @@ else fi echo -n 'Downloading Korean dictionary...' -kodict='Korean_spell-checker-0.6.0-1_LibO' -kofiles='Korean_spell-checker-0.6.0-1_LibO/dictionaries' +kodict='Korean_spell-checker-0.7.1-2_LibO' +kofiles='Korean_spell-checker-0.7.1-2_LibO/dictionaries' if [ ! -e "${kodict}.oxt" ]; then - curl -s -O "https://extensions.libreoffice.org/extensions/korean-spellchecker/0-6-0-1/@@download/file/${kodict}.oxt" + curl -s -O "https://extensions.libreoffice.org/extensions/korean-spellchecker/0-7-1-2/@@download/file/${kodict}.oxt" echo ' DONE' else echo ' SKIPPED' From e59f72b413fb7b37877c95b6e844769eb14b2587 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 22 May 2018 12:47:40 -0400 Subject: [PATCH 416/630] Replace deprecated code. --- src/document.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index 477f57c0..163e30f1 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ static void printPage(int index, QPainter *painter, const QTextDocument *doc, co painter->setFont(QFont(doc->defaultFont())); const QString pageString = QString::number(index); - painter->drawText(qRound(pageNumberPos.x() - painter->fontMetrics().width(pageString)), + painter->drawText(qRound(pageNumberPos.x() - painter->fontMetrics().boundingRect(pageString).width()), qRound(pageNumberPos.y() + view.top()), pageString); } From 578cdd5cf0249106e7a35e2ded88ccb257539076 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 24 May 2018 05:39:16 -0400 Subject: [PATCH 417/630] Load all Qt translations. --- src/locale_dialog.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index eff7552a..5cecd974 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2014, 2015, 2016, 2018 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -114,12 +114,16 @@ void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadi // Load translators static QTranslator qt_translator; + qt_translator.load("qt_" + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + QCoreApplication::installTranslator(&qt_translator); + + static QTranslator qtbase_translator; if (translations.contains("qtbase_" + current) || translations.contains("qtbase_" + current.left(2))) { - qt_translator.load("qtbase_" + current, m_path); + qtbase_translator.load("qtbase_" + current, m_path); } else { - qt_translator.load("qtbase_" + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + qtbase_translator.load("qtbase_" + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); } - QCoreApplication::installTranslator(&qt_translator); + QCoreApplication::installTranslator(&qtbase_translator); static QTranslator translator; translator.load(m_appname + current, m_path); From a30771ad67435f7ee382aa2d78de6985e9fc1a37 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 24 May 2018 12:03:55 -0400 Subject: [PATCH 418/630] Improve Windows deployment. --- resources/windows/installer.nsi | 131 +++----------------------------- windows_deploy.bat | 80 ++++++++++--------- 2 files changed, 51 insertions(+), 160 deletions(-) diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index d09f7c8f..5508c95b 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -63,7 +63,7 @@ Var StartMenuFolder ;-------------------------------- ;Finish Page Settings -!define MUI_FINISHPAGE_RUN "$INSTDIR\FocusWriter.exe" +!define MUI_FINISHPAGE_RUN "$INSTDIR\${APPNAME}.exe" !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\ReadMe.txt" ;-------------------------------- @@ -160,97 +160,8 @@ FunctionEnd Section "install" ;Copy files - SetOutPath $INSTDIR - File ..\..\release\FocusWriter.exe - File ..\symbols\symbols1000.dat - File $%QTDIR%\bin\libgcc_s_dw2-1.dll - File $%QTDIR%\bin\libstdc++-6.dll - File $%QTDIR%\bin\libwinpthread-1.dll - File $%QTDIR%\bin\Qt5Core.dll - File $%QTDIR%\bin\Qt5Gui.dll - File $%QTDIR%\bin\Qt5Multimedia.dll - File $%QTDIR%\bin\Qt5Network.dll - File $%QTDIR%\bin\Qt5PrintSupport.dll - File $%QTDIR%\bin\Qt5Svg.dll - File $%QTDIR%\bin\Qt5Widgets.dll - File $%QTDIR%\bin\Qt5WinExtras.dll - - SetOutPath $INSTDIR\audio - File $%QTDIR%\plugins\audio\qtaudio_windows.dll - - SetOutPath $INSTDIR\bearer - File $%QTDIR%\plugins\bearer\qgenericbearer.dll - - SetOutPath $INSTDIR\imageformats - File $%QTDIR%\plugins\imageformats\qgif.dll - File $%QTDIR%\plugins\imageformats\qicns.dll - File $%QTDIR%\plugins\imageformats\qico.dll - File $%QTDIR%\plugins\imageformats\qjpeg.dll - File $%QTDIR%\plugins\imageformats\qsvg.dll - File $%QTDIR%\plugins\imageformats\qtga.dll - File $%QTDIR%\plugins\imageformats\qtiff.dll - File $%QTDIR%\plugins\imageformats\qwbmp.dll - File $%QTDIR%\plugins\imageformats\qwebp.dll - - SetOutPath $INSTDIR\mediaservice - File $%QTDIR%\plugins\mediaservice\dsengine.dll - File $%QTDIR%\plugins\mediaservice\qtmedia_audioengine.dll - - SetOutPath $INSTDIR\platforms - File $%QTDIR%\plugins\platforms\qwindows.dll - - SetOutPath $INSTDIR\printsupport - File $%QTDIR%\plugins\printsupport\windowsprintersupport.dll - - SetOutPath $INSTDIR\dictionaries - File dicts\*.aff - File dicts\*.dic - File dicts\*.dll - SetOutPath $INSTDIR\dictionaries\2\mor-standard - File dicts\2\mor-standard\* - - SetOutPath $INSTDIR\icons\hicolor - File ..\images\icons\oxygen\hicolor\index.theme - SetOutPath $INSTDIR\icons\hicolor\16 - File ..\images\icons\oxygen\hicolor\16\* - SetOutPath $INSTDIR\icons\hicolor\22 - File ..\images\icons\oxygen\hicolor\22\* - SetOutPath $INSTDIR\icons\hicolor\32 - File ..\images\icons\oxygen\hicolor\32\* - SetOutPath $INSTDIR\icons\hicolor\48 - File ..\images\icons\oxygen\hicolor\48\* - SetOutPath $INSTDIR\icons\hicolor\64 - File ..\images\icons\oxygen\hicolor\64\* - - SetOutPath $INSTDIR\sounds - File ..\sounds\*.wav - - SetOutPath $INSTDIR\themes - File ..\themes\*.theme - SetOutPath $INSTDIR\themes\images - File ..\themes\images\* - - SetOutPath $INSTDIR\translations - File ..\..\translations\*.qm - File $%QTDIR%\translations\qtbase_*.qm - - ;Create ReadMe file - SetOutPath $INSTDIR - File /oname=ReadMe.txt ..\..\README - FileOpen $4 "ReadMe.txt" a - FileSeek $4 0 END - FileWrite $4 "$\r$\n$\r$\nCredits$\r$\n=======$\r$\n$\r$\n" - FileClose $4 - File ..\..\CREDITS - ${FileJoin} "ReadMe.txt" "CREDITS" "ReadMe.txt" - Delete $INSTDIR\CREDITS - FileOpen $4 "ReadMe.txt" a - FileSeek $4 0 END - FileWrite $4 "$\r$\n$\r$\nNews$\r$\n====$\r$\n$\r$\n" - FileClose $4 - File ..\..\NEWS - ${FileJoin} "ReadMe.txt" "NEWS" "ReadMe.txt" - Delete $INSTDIR\NEWS + SetOutPath "$INSTDIR" + File /r "..\..\${APPNAME}\*" ;Registry information for add/remove programs WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" @@ -259,7 +170,7 @@ Section "install" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\Uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\FocusWriter.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${APPVERSION}" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "VersionMajor" ${VERSIONMAJOR} @@ -277,7 +188,7 @@ Section "install" SetShellVarContext all !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$StartMenuFolder" - CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${APPNAME}.lnk" "$INSTDIR\FocusWriter.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" !insertmacro MUI_STARTMENU_WRITE_END SetShellVarContext current @@ -302,36 +213,12 @@ Section "Uninstall" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" ;Remove files - Delete $INSTDIR\FocusWriter.exe - Delete $INSTDIR\symbols*.dat - Delete $INSTDIR\ReadMe.txt - Delete $INSTDIR\*.dll - Delete $INSTDIR\audio\*.dll - Delete $INSTDIR\bearer\*.dll - Delete $INSTDIR\dictionaries\*\*\* - Delete $INSTDIR\icons\hicolor\*\* - Delete $INSTDIR\imageformats\*.dll - Delete $INSTDIR\mediaservice\*.dll - Delete $INSTDIR\platforms\*.dll - Delete $INSTDIR\printsupport\*.dll - Delete $INSTDIR\sounds\*.wav - Delete $INSTDIR\themes\*\* - Delete $INSTDIR\translations\*.qm - Delete $INSTDIR\Uninstall.exe + !include files.nsh + Delete "$INSTDIR\Uninstall.exe" ;Remove directories - RMDir /r $INSTDIR\dictionaries - RMDir /r $INSTDIR\icons - RMDir /r $INSTDIR\themes - RMDir $INSTDIR\audio - RMDir $INSTDIR\bearer - RMDir $INSTDIR\imageformats - RMDir $INSTDIR\mediaservice - RMDir $INSTDIR\platforms - RMDir $INSTDIR\printsupport - RMDir $INSTDIR\sounds - RMDir $INSTDIR\translations - RMDir $INSTDIR + !include dirs.nsh + RMDir "$INSTDIR" ;Remove shortcut SetShellVarContext all diff --git a/windows_deploy.bat b/windows_deploy.bat index 8028a4da..dd4ad891 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,3 +1,5 @@ +@ECHO ON>resources\windows\dirs.nsh +@ECHO ON>resources\windows\files.nsh @ECHO OFF SET APP=FocusWriter @@ -5,9 +7,6 @@ SET VERSION=1.6.12 ECHO Copying executable MKDIR %APP% -TYPE COPYING | FIND "" /V > %APP%\COPYING.txt -TYPE CREDITS | FIND "" /V > %APP%\CREDITS.txt -TYPE README | FIND "" /V > %APP%\README.txt COPY release\%APP%.exe %APP% >nul strip %APP%\%APP%.exe @@ -15,7 +14,6 @@ ECHO Copying translations SET TRANSLATIONS=%APP%\translations MKDIR %TRANSLATIONS% COPY translations\*.qm %TRANSLATIONS% >nul -COPY %QTDIR%\translations\qtbase_*.qm %TRANSLATIONS% >nul ECHO Copying icons SET ICONS=%APP%\icons\hicolor @@ -40,43 +38,47 @@ SET THEMES=%APP%\themes MKDIR %THEMES% XCOPY /Q /S /Y resources\themes\* %THEMES% >nul -ECHO Copying Qt libraries -COPY %QTDIR%\bin\libgcc_s_dw2-1.dll %APP% >nul -COPY "%QTDIR%\bin\libstdc++-6.dll" %APP% >nul -COPY %QTDIR%\bin\libwinpthread-1.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Core.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Gui.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Multimedia.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Network.dll %APP% >nul -COPY %QTDIR%\bin\Qt5PrintSupport.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Svg.dll %APP% >nul -COPY %QTDIR%\bin\Qt5Widgets.dll %APP% >nul -COPY %QTDIR%\bin\Qt5WinExtras.dll %APP% >nul - -ECHO Copying Qt plugins -MKDIR %APP%\audio -COPY %QTDIR%\plugins\audio\qtaudio_windows.dll %APP%\audio >nul - -MKDIR %APP%\bearer -XCOPY /Q /S /Y %QTDIR%\plugins\bearer %APP%\bearer >nul -DEL %APP%\bearer\*d.dll >nul - -MKDIR %APP%\platforms -COPY %QTDIR%\plugins\platforms\qwindows.dll %APP%\platforms >nul - -MKDIR %APP%\imageformats -XCOPY /Q /S /Y %QTDIR%\plugins\imageformats %APP%\imageformats >nul -DEL %APP%\imageformats\*d.dll >nul - -MKDIR %APP%\mediaservice -XCOPY /Q /S /Y %QTDIR%\plugins\mediaservice %APP%\mediaservice >nul -DEL %APP%\mediaservice\*d.dll >nul - -MKDIR %APP%\printsupport -COPY %QTDIR%\plugins\printsupport\windowsprintersupport.dll %APP%\printsupport >nul +ECHO Copying Qt +%QTDIR%\bin\windeployqt.exe --verbose 0 --release --no-angle --no-opengl-sw %APP%\%APP%.exe +RMDIR /S /Q %APP%\iconengines + +ECHO Creating ReadMe +TYPE README >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +ECHO CREDITS >> %APP%\ReadMe.txt +ECHO ======= >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +TYPE CREDITS >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +ECHO NEWS >> %APP%\ReadMe.txt +ECHO ==== >> %APP%\ReadMe.txt +ECHO. >> %APP%\ReadMe.txt +TYPE NEWS >> %APP%\ReadMe.txt + +ECHO Creating installer +CD %APP% +SETLOCAL EnableDelayedExpansion +SET "parentfolder=%__CD__%" +FOR /R . %%F IN (*) DO ( + SET "var=%%F" + ECHO Delete "$INSTDIR\!var:%parentfolder%=!" >> ..\resources\windows\files.nsh +) +FOR /R /D %%F IN (*) DO ( + TYPE ..\resources\windows\dirs.nsh > temp.txt + SET "var=%%F" + ECHO RMDir "$INSTDIR\!var:%parentfolder%=!" > ..\resources\windows\dirs.nsh + TYPE temp.txt >> ..\resources\windows\dirs.nsh +) +DEL temp.txt +ENDLOCAL +CD .. +makensis.exe /V0 resources\windows\installer.nsi ECHO Making portable MKDIR %APP%\Data +COPY COPYING %APP%\COPYING.txt >nul ECHO Creating compressed file CD %APP% @@ -86,3 +88,5 @@ MOVE %APP%\%APP%_%VERSION%.zip . >nul ECHO Cleaning up RMDIR /S /Q %APP% +DEL resources\windows\dirs.nsh +DEL resources\windows\files.nsh From a37416dc18cfedc25bfa885873bf0ad4b5bd4831 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 26 May 2018 12:27:49 -0400 Subject: [PATCH 419/630] Improve macOS deployment. --- mac_deploy.sh | 76 +++++++++++++++------------------ resources/mac/background.png | Bin 21475 -> 0 bytes resources/mac/background.tiff | Bin 0 -> 150488 bytes resources/mac/locversion.plist | 15 ------- 4 files changed, 35 insertions(+), 56 deletions(-) delete mode 100644 resources/mac/background.png create mode 100644 resources/mac/background.tiff delete mode 100644 resources/mac/locversion.plist diff --git a/mac_deploy.sh b/mac_deploy.sh index d586f89b..0d15b093 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -7,8 +7,8 @@ VERSION='1.6.12' # Remove any previous disk folder or DMG echo -n 'Preparing... ' rm -f "${APP}_$VERSION.dmg" -if [ -e "/Volumes/${APP}" ]; then - hdiutil detach -quiet "/Volumes/${APP}" +if [ -e "/Volumes/$APP" ]; then + hdiutil detach -quiet "/Volumes/$APP" fi rm -Rf "$APP" echo 'Done' @@ -16,68 +16,64 @@ echo 'Done' # Create disk folder echo -n 'Copying application bundle... ' mkdir "$APP" -cp -Rpf "$BUNDLE" "$APP/" +cp -Rf "$BUNDLE" "$APP/" strip "$APP/$BUNDLE/Contents/MacOS/$APP" cp COPYING "$APP/License.txt" -cp CREDITS "$APP/Credits.txt" +echo 'Done' + +# Create ReadMe +echo -n 'Creating ReadMe... ' cp README "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +echo 'CREDITS' >> "$APP/Read Me.txt" +echo '=======' >> "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +cat CREDITS >> "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +echo 'NEWS' >> "$APP/Read Me.txt" +echo '====' >> "$APP/Read Me.txt" +echo >> "$APP/Read Me.txt" +cat NEWS >> "$APP/Read Me.txt" echo 'Done' # Copy translations echo -n 'Copying translations... ' TRANSLATIONS="$APP/$BUNDLE/Contents/Resources/translations" mkdir "$TRANSLATIONS" -cp -Rpf translations/*.qm "$TRANSLATIONS" +cp translations/*.qm "$TRANSLATIONS" echo 'Done' # Copy Qt translations echo -n 'Copying Qt translations... ' -for translation in $(ls translations | grep qm | cut -d'.' -f1 | cut -d'_' -f2- | uniq) -do - LPROJ="$APP/$BUNDLE/Contents/Resources/${translation}.lproj" - mkdir "$LPROJ" - sed "s/????/${translation}/" < 'resources/mac/locversion.plist' > "${LPROJ}/locversion.plist" - - QT_TRANSLATION="${QTDIR}/translations/qtbase_${translation}.qm" - if [ -e "$QT_TRANSLATION" ]; then - cp -f "$QT_TRANSLATION" "$TRANSLATIONS" - fi - - QT_TRANSLATION="${QTDIR}/translations/qtbase_${translation:0:2}.qm" - if [ -e "$QT_TRANSLATION" ]; then - cp -f "$QT_TRANSLATION" "$TRANSLATIONS" - fi -done +cp $QTDIR/translations/qt_* "$TRANSLATIONS" +cp $QTDIR/translations/qtbase_* "$TRANSLATIONS" +rm -f $TRANSLATIONS/qt_help_* echo 'Done' # Copy frameworks and plugins echo -n 'Copying frameworks and plugins... ' macdeployqt "$APP/$BUNDLE" -# Remove QML copied in by macdeployqt with >= 4.7.2 -rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtDeclarative.framework" -rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtScript.framework" -rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtSql.framework" -rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtSvg.framework" -rm -Rf "$APP/$BUNDLE/Contents/Frameworks/QtXmlPatterns.framework" -rm -Rf "$APP/$BUNDLE/Contents/PlugIns/qmltooling" +rm -Rf "$APP/$BUNDLE/Contents/PlugIns/iconengines" echo 'Done' # Copy background echo -n 'Copying background... ' -mkdir "${APP}/.background" -cp 'resources/mac/background.png' "${APP}/.background/background.png" +mkdir "$APP/.background" +cp resources/mac/background.tiff "$APP/.background/background.tiff" echo 'Done' # Create disk image echo -n 'Creating disk image... ' -hdiutil create -quiet -srcfolder "${APP}" -volname "${APP}" -fs HFS+ -format UDRW 'temp.dmg' +hdiutil create -quiet -srcfolder "$APP" -volname "$APP" -fs HFS+ -format UDRW 'temp.dmg' echo 'Done' echo -n 'Configuring disk image... ' hdiutil attach -quiet -readwrite -noverify -noautoopen 'temp.dmg' echo ' tell application "Finder" - tell disk "'${APP}'" + tell disk "'$APP'" open tell container window @@ -85,7 +81,7 @@ echo ' set current view to icon view set toolbar visible to false set statusbar visible to true - set the bounds to {400, 100, 800, 420} + set the bounds to {400, 100, 800, 460} end tell set viewOptions to the icon view options of container window @@ -96,14 +92,13 @@ echo ' set shows icon preview to true set shows item info to false end tell - set background picture of viewOptions to file ".background:background.png" + set background picture of viewOptions to file ".background:background.tiff" make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} - set position of item "'${BUNDLE}'" of container window to {90, 90} + set position of item "'$BUNDLE'" of container window to {90, 90} set position of item "Applications" of container window to {310, 90} - set position of item "Credits.txt" of container window to {100, 215} - set position of item "License.txt" of container window to {200, 215} - set position of item "Read Me.txt" of container window to {300, 215} + set position of item "Read Me.txt" of container window to {140, 215} + set position of item "License.txt" of container window to {260, 215} close open @@ -112,14 +107,13 @@ echo ' end tell end tell ' | osascript -chmod -Rf go-w "/Volumes/${APP}" >& /dev/null +chmod -Rf go-w "/Volumes/$APP" >& /dev/null sync -hdiutil detach -quiet "/Volumes/${APP}" +hdiutil detach -quiet "/Volumes/$APP" echo 'Done' echo -n 'Compressing disk image... ' hdiutil convert -quiet 'temp.dmg' -format UDBZ -o "${APP}_${VERSION}.dmg" -hdiutil internet-enable -quiet -yes "${APP}_${VERSION}.dmg" rm -f temp.dmg echo 'Done' diff --git a/resources/mac/background.png b/resources/mac/background.png deleted file mode 100644 index 24ee81f569f9d227682f8ada67b1c3ec69a33730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21475 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�w9jmDkAe#AP9VW-UL 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 K&6|PR!2bmjT|6!T diff --git a/translations/focuswriter_sr.qm b/translations/focuswriter_sr.qm deleted file mode 100644 index 6a5bc2ee1da8628fcfbedcadd6013ea32d266c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34978 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 F{J+!F=q3OF diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm deleted file mode 100644 index 2051dbc0892c6352237601140aeecba75cf4fb3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35477 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 diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm deleted file mode 100644 index fff140431b8fdcf81e40f801b2640a4d57fde5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33954 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%0A{z)D_|Vl*xX=Nl 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 ShcfB8`0P>olq5lk82ukr=z$La diff --git a/translations/focuswriter_uk.qm b/translations/focuswriter_uk.qm deleted file mode 100644 index 9560c6478c192091c8524b5afecd7c1447ad094f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36144 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 diff --git a/translations/focuswriter_vi.qm b/translations/focuswriter_vi.qm deleted file mode 100644 index db07f5c88d05151f7ce92a0692678904f4e4dc56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29356 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 VG?|eI-9mv;wirb89NHs?{|1u2(%b+5 diff --git a/translations/focuswriter_zh_CN.qm b/translations/focuswriter_zh_CN.qm deleted file mode 100644 index cea392b16b23f67ce43646b7413151e60ca5081e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28189 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 From 4aba032b75edf837d2dbb9996a37ab91099f8c5d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 1 Oct 2016 07:49:38 -0400 Subject: [PATCH 314/630] Only use qtbase translations. --- mac_deploy.sh | 4 ++-- resources/windows/installer.nsi | 2 -- src/locale_dialog.cpp | 28 ++++++++++++---------------- windows_deploy.bat | 2 -- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/mac_deploy.sh b/mac_deploy.sh index 27be1ac9..9322b357 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -38,12 +38,12 @@ do mkdir "$LPROJ" sed "s/????/${translation}/" < 'resources/mac/locversion.plist' > "${LPROJ}/locversion.plist" - QT_TRANSLATION="${QTDIR}/translations/qt_${translation}.qm" + QT_TRANSLATION="${QTDIR}/translations/qtbase_${translation}.qm" if [ -e "$QT_TRANSLATION" ]; then cp -f "$QT_TRANSLATION" "$TRANSLATIONS" fi - QT_TRANSLATION="${QTDIR}/translations/qt_${translation:0:2}.qm" + QT_TRANSLATION="${QTDIR}/translations/qtbase_${translation:0:2}.qm" if [ -e "$QT_TRANSLATION" ]; then cp -f "$QT_TRANSLATION" "$TRANSLATIONS" fi diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 4be6d4db..41304942 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -234,9 +234,7 @@ Section "install" SetOutPath $INSTDIR\translations File ..\..\translations\*.qm - File $%QTDIR%\translations\qt_*.qm File $%QTDIR%\translations\qtbase_*.qm - File $%QTDIR%\translations\qtmultimedia_*.qm ;Create ReadMe file SetOutPath $INSTDIR diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index fc350861..eff7552a 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2016 Graeme Gott + * Copyright (C) 2010, 2011, 2012, 2014, 2015, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,11 @@ #include "locale_dialog.h" -#include #include -#include #include #include #include +#include #include #include #include @@ -53,7 +52,7 @@ LocaleDialog::LocaleDialog(QWidget* parent) : QLabel* text = new QLabel(tr("Select application language:"), this); m_translations = new QComboBox(this); - m_translations->addItem(tr(""), ""); + m_translations->addItem(tr("")); QStringList translations = findTranslations(); for (QString translation : translations) { if (translation.startsWith("qt")) { @@ -66,8 +65,8 @@ LocaleDialog::LocaleDialog(QWidget* parent) : m_translations->setCurrentIndex(index); QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); - connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); + connect(buttons, &QDialogButtonBox::accepted, this, &LocaleDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, this, &LocaleDialog::reject); QVBoxLayout* layout = new QVBoxLayout(this); layout->setSizeConstraint(QLayout::SetFixedSize); @@ -114,23 +113,20 @@ void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadi } // Load translators - const QStringList qtbasenames({"qt_", "qtbase_", "qtmultimedia_"}); - for (const QString& basename : qtbasenames) { - QTranslator* qt_translator = new QTranslator(QCoreApplication::instance()); - if (translations.contains(basename + current) || translations.contains(basename + current.left(2))) { - qt_translator->load(basename + current, m_path); - } else { - qt_translator->load(basename + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - } - QCoreApplication::installTranslator(qt_translator); + static QTranslator qt_translator; + if (translations.contains("qtbase_" + current) || translations.contains("qtbase_" + current.left(2))) { + qt_translator.load("qtbase_" + current, m_path); + } else { + qt_translator.load("qtbase_" + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); } + QCoreApplication::installTranslator(&qt_translator); static QTranslator translator; translator.load(m_appname + current, m_path); QCoreApplication::installTranslator(&translator); // Work around bug in Qt 5 where text direction is not loaded - QApplication::setLayoutDirection(QLocale(current).textDirection()); + QGuiApplication::setLayoutDirection(QLocale(current).textDirection()); } //----------------------------------------------------------------------------- diff --git a/windows_deploy.bat b/windows_deploy.bat index 350ca77d..44af5e03 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -15,9 +15,7 @@ ECHO Copying translations SET TRANSLATIONS=%APP%\translations MKDIR %TRANSLATIONS% COPY translations\*.qm %TRANSLATIONS% >nul -COPY %QTDIR%\translations\qt_*.qm %TRANSLATIONS% >nul COPY %QTDIR%\translations\qtbase_*.qm %TRANSLATIONS% >nul -COPY %QTDIR%\translations\qtmultimedia_*.qm %TRANSLATIONS% >nul ECHO Copying icons SET ICONS=%APP%\icons\hicolor From 12f639372866ca33883880704156133957ae21d7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 1 Oct 2016 09:18:27 -0400 Subject: [PATCH 315/630] Update strings. --- translations/focuswriter_af_ZA.ts | 484 ------------------------------ translations/focuswriter_ar.ts | 484 ------------------------------ translations/focuswriter_ca.ts | 484 ------------------------------ translations/focuswriter_cs.ts | 484 ------------------------------ translations/focuswriter_da.ts | 484 ------------------------------ translations/focuswriter_de.ts | 484 ------------------------------ translations/focuswriter_el.ts | 484 ------------------------------ translations/focuswriter_en.ts | 484 ------------------------------ translations/focuswriter_en_GB.ts | 484 ------------------------------ translations/focuswriter_eo.ts | 484 ------------------------------ translations/focuswriter_es.ts | 484 ------------------------------ translations/focuswriter_es_MX.ts | 484 ------------------------------ translations/focuswriter_fi.ts | 484 ------------------------------ translations/focuswriter_fr.ts | 484 ------------------------------ translations/focuswriter_he.ts | 484 ------------------------------ translations/focuswriter_hu.ts | 484 ------------------------------ translations/focuswriter_hy.ts | 484 ------------------------------ translations/focuswriter_id.ts | 484 ------------------------------ translations/focuswriter_it.ts | 484 ------------------------------ translations/focuswriter_ja.ts | 484 ------------------------------ translations/focuswriter_ko.ts | 484 ------------------------------ translations/focuswriter_lt.ts | 484 ------------------------------ translations/focuswriter_nl.ts | 484 ------------------------------ translations/focuswriter_pl.ts | 484 ------------------------------ translations/focuswriter_pt.ts | 484 ------------------------------ translations/focuswriter_pt_BR.ts | 484 ------------------------------ translations/focuswriter_ro.ts | 484 ------------------------------ translations/focuswriter_ru.ts | 484 ------------------------------ translations/focuswriter_sk.ts | 484 ------------------------------ translations/focuswriter_sr.ts | 484 ------------------------------ translations/focuswriter_sv.ts | 484 ------------------------------ translations/focuswriter_tr.ts | 484 ------------------------------ translations/focuswriter_uk.ts | 484 ------------------------------ translations/focuswriter_vi.ts | 484 ------------------------------ translations/focuswriter_zh_CN.ts | 484 ------------------------------ 35 files changed, 16940 deletions(-) diff --git a/translations/focuswriter_af_ZA.ts b/translations/focuswriter_af_ZA.ts index 3cd86673..fea19994 100644 --- a/translations/focuswriter_af_ZA.ts +++ b/translations/focuswriter_af_ZA.ts @@ -4,17 +4,14 @@ Alert - Close (%1) - Collapse Vou op - Expand Brei uit @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Wys waarskuwing van die hand - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% van %Ln minuut @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% van %Ln woord @@ -51,7 +44,6 @@ - %Ln word(s) %Ln woord @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuut @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Daaglikse vordering - Longest streak Langste - Current streak - N/A N/B - %n day(s) %n dag @@ -103,7 +88,6 @@ - %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% van daaglikse doelwit @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Wysig taal @@ -128,81 +109,62 @@ Document - (Untitled %1) (Ongetiteld %1) - %1 (Read-Only) %1 (Lees slegs) - - - - Sorry Jammer - Unable to save '%1'. Kan nie '%1' stoor nie. - Save File As Stoor dokument as - - Unable to overwrite '%1'. Kan nie oor '%1' skryf nie - Rename File Herbenoem dokument - Unable to rename '%1'. - Reload File? Herbenoem dokument? - Reload the file '%1' from disk? - All unsaved changes will be lost. Alle ongestoorde veranderinge sal verloor word. - Reload Herlaai - Untitled %1 - Question Vraag - Saving as plain text will discard all formatting. Discard formatting? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Dokument verander - The file '%1' was changed by another program. - Do you want to reload the file? Wil jy werklik die dokument herlaai? - Reload Herlaai - Ignore Ignoreer - File Deleted Dokument uitgewis - The file %1 was deleted by another program. Die dokument %1 is deur 'n ander program uitgewis. - Do you want to save or close the file? Wil jy die dokument stoor of toe maak? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Kan nie die argief oopmaak nie. @@ -261,67 +214,54 @@ FindDialog - Search for: Soek vir: - Replace with: Vervang met: - Ignore case - Whole words only Slegs volle woorde - Regular expressions Gereelde uitdrukkings - Search up Soek boontoe - Search down Soek ondertoe - &Find &Vind - &Replace &Vervang - Replace &All Vervang &alle - Find Vind - Replace Vervang - Replace %n instance(s)? Vervang %n geval? @@ -329,19 +269,14 @@ - Question Vraag - - Sorry Jammer - - Phrase not found. Frase nie gevind nie @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Teks - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Suiwer teks - All Files Alle dokumente - All Supported Files @@ -387,17 +315,14 @@ Highlighter - Add Voeg by - Check Spelling... Kyk na spelling... - (No suggestions found) (Geen aanbevelings gevind) @@ -405,12 +330,10 @@ ImageButton - Open Image Maak foto oop - Images(%1) Foto's(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Wysig toepassingtaal - <System Language> <Sisteemtaal> - Note Nota - Please restart this application for the change in language to take effect. Herlaai asseblief hierdie toepassing vir die taalwysiging om pos te vat. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Kan nie die argief oopmaak nie. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Voorkeure - General Algemeen - Statistics Statistiek - Toolbar - Spell Checking Speltoetsing - Select Dictionary Kies woordeboek - - Sorry Jammer - Unable to open archive. Kan nie die argief oopmaak nie. - The archive does not contain a usable dictionary. Die argief bevat nie 'n bruikbare woordeboek nie. - - - - Question Vraag - Shortcuts Kortpaaie - One or more shortcuts conflict. Do you wish to proceed? Een of meer kortpaaie veroorsaak konflik. Wil jy voortgaan? - The dictionary "%1" already exists. Do you want to replace it? Die woordeboek "%1" bestaan reeds. Wil jy dit vervang? - Daily Goal Daaglikse doelwit - None Geen - Minutes: Minute: - - Words: Woorde: - Editing Redigering - Always vertically center Altyd vertikaalgesentreerd - Block insertion cursor - Smooth fonts - Typewriter sounds Tikmasjienklanke - Smart quotes: Slim aanhalings: - Double Dubbel - Single Enkel - Scenes - Divider: - Saving Stoor tans - Automatically save changes Stoor vanself veranderinge - Remember cursor position - Word count Woordtelling - Page count Bladsytelling - Paragraph count Paragraaftelling - Character count Karaktertelling - Characters: - Paragraphs: - Word Count Algorithm - Reset daily progress for today to zero? Herstel daaglike vordering vir vandag na nul? - Remove current dictionary? - Write byte order mark in plain text files - Default format: Verstek formaat: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Herstel vandag - History Geskiedenis - Remember history Onthou geskiedenis - Show streaks - Minimum progress for streaks: - Detect word boundaries - Divide character count by six - Count each letter as a word - Page Count Algorithm - Style - Icons Only - Text Only - Text Alongside Icons - Text Under Icons - Text Position: - Actions - Move Up - Move Down - Add Separator - Command - Shortcut - Action - Check spelling as you type - Ignore words in UPPERCASE - Ignore words with numbers - Language - - Add Voeg by - - Remove - Personal Dictionary @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down - Move Scenes Up - Ctrl+Shift+Up - Toggle Scene List - Shift+F4 - Show scene list (%1) - Hide scene list (%1) - Filter - Move Scenes Down - Resize scene list @@ -899,12 +723,6 @@ Session - - - - - - Default @@ -912,97 +730,78 @@ SessionManager - Manage Sessions - S&essions - New - Duplicate - Rename - Delete - Switch To - New Session - Duplicate Session - Rename Session - Question Vraag - Delete selected session? - Session name: - Sorry Jammer - The requested session name is already in use. - &New... - Ctrl+Shift+N - &Manage... - Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear - Reset to Default - - Shortcut: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Vervang tans aanhalingstekens - Please Wait Wag asseblief @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling - &Add &Voeg by - &Ignore &Ignoreer - I&gnore All - &Change &Wysig - C&hange All - Not in dictionary: Nie in woordeboek: - Change to: Verander na: - Checking spelling... Gaan tans spelling na - Cancel Kanselleer - Please wait Wag asseblief - Continue checking at beginning of file? Gaan voort om die begin van dokument na te gaan? - Spell check complete. Klaar spelling nagegaan. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols - Recently used symbols - All symbols - Details Besonderhede - Name: Naam: - Insert @@ -1143,12 +917,10 @@ SymbolsModel - Blocks - Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Naam: - No Image - Tiled - - Centered - - Stretched - Scaled - Zoomed - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove - Edit Theme - Window Background - - Type: - - - - Color: - Image: - - - - - - - - - - pixels - Left - Text Background - Right - Text - Font: - Misspelled: - Line Spacing - Single Enkel - 1.5 Lines - Double Dubbel - Proportional - Height: - Paragraph Spacing - Tab Width: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes - Default - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New - - Duplicate - Custom - Edit - Delete - Import - Export - Question Vraag - Delete theme '%1'? - - Themes (%1) - Import Theme - Export Theme @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 - Question Vraag - Delete timer? - <b>Words:</b> %L1 - <b>Pages:</b> %L1 - <b>Paragraphs:</b> %L1 - <b>Characters:</b> %L1 / %L2 - Set Delay - Set Time - Delay: - Time: - HH:mm:ss - Alarm - Type: - Memo: - Edit - Delete @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss - No timers running @@ -1616,37 +1283,30 @@ TimerManager - Timers - New - Recent - Question Vraag - Cancel editing timers? - +HH:mm:ss - %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes - Loading sounds - - Untitled - Open File - About FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor - Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license - Uses icons from the <a href=%1>Oxygen</a> icon theme - Used under the <a href=%1>LGPL 3</a> license - - Characters: %L1 / %L2 - - Pages: %L1 - - Paragraphs: %L1 - - Words: %L1 - - Opening %1 - (Untitled %1) (Ongetiteld %1) - List all documents - Switch to Next Document - Switch to Previous Document - Switch to First Document - Switch to Last Document - Switch to Document %1 - Loading settings - Emergency cache is not writable. - - Warning - FocusWriter was not shut down cleanly. - Restore from the emergency cache? - Some files could not be opened. - Some files were opened Read-Only. - '%1' is newer than the cached copy. - Overwrite newer file? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. - &File - &New - &Open... - Reloa&d - &Save - Save &As... - &Rename... - Save A&ll - Manage Sessions - New Session - &Print... - Pa&ge Setup... - &Close - &Quit - Ctrl+Q - &Edit - &Undo - &Redo - Cu&t - &Copy - &Paste - Paste &Unformatted - Ctrl+Shift+V - Select &All - Select &Scene - Ctrl+Shift+A - Fo&rmat - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold - &Italic - &Underline - Stri&kethrough - Ctrl+K - Sup&erscript - Ctrl+^ - &Subscript - Ctrl+_ - Align &Left - Ctrl+{ - Align &Center - Ctrl+| - Align &Right - Ctrl+} - Align &Justify - Ctrl+J - &Decrease Indent - Ctrl+< - I&ncrease Indent - Ctrl+> - Le&ft to Right Block - Ri&ght to Left Block - &Tools - &Find... - Find &Next - Find Pre&vious - &Replace... - Ctrl+R - Smart &Quotes - Update &Document - Update Document Smart Quotes - Update &Selection - Update Selection Smart Quotes - &Spelling... - F7 - Set &Language... - &Timers... - S&ymbols... - &Daily Progress - &Settings - Show &Toolbar - Show &Menu Icons - F&ocused Text - &Fullscreen - F11 - Esc - M&inimize - Ctrl+M - &Themes... - &Preferences... - Focus Off - Focus One Line - Focus Three Lines - &Paragraph - Focus Paragraph - Ctrl+Shift+` - &Help - Application &Language... - Some files were unsupported and could not be opened. - &Off - One &Line - &Three Lines - &About - About &Qt diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index a085fd1c..17486280 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -4,17 +4,14 @@ Alert - Close (%1) إغـلاق (%1) - Collapse تجميع - Expand بسـط @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) @@ -47,7 +41,6 @@ - %1% of %Ln word(s) @@ -59,7 +52,6 @@ - %Ln word(s) @@ -71,7 +63,6 @@ - %Ln minute(s) @@ -83,7 +74,6 @@ - 0% @@ -91,27 +81,22 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) @@ -123,7 +108,6 @@ - %1 &ndash; %2 @@ -131,8 +115,6 @@ DailyProgressLabel - - %1% of daily goal @@ -140,7 +122,6 @@ DictionaryDialog - Set Language @@ -148,81 +129,62 @@ Document - (Untitled %1) (%1 غير معنون) - %1 (Read-Only) - - - - Sorry معـذرة! - Unable to save '%1'. لا يمكن حفظ '%1'. - Save File As حفظ باسم - - Unable to overwrite '%1'. لا يمكن الكتابة على '%1'. - Rename File تسمية الملف مجددا - Unable to rename '%1'. لا يمكن إعادة تسمية '%1'. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. - Reload تحديـث - Untitled %1 - Question - Saving as plain text will discard all formatting. Discard formatting? @@ -230,42 +192,34 @@ DocumentWatcher - File Changed - The file '%1' was changed by another program. - Do you want to reload the file? تحدِّث هذا الملف؟ - Reload تحديـث - Ignore تجاهـل - File Deleted - The file %1 was deleted by another program. - Do you want to save or close the file? تريد إغلاق هذا الملف أم حفظه؟ @@ -273,7 +227,6 @@ DocxReader - Unable to open archive. لا يمكن فتح ملف الأرشيف @@ -281,67 +234,54 @@ FindDialog - Search for: بحث عن: - Replace with: استبدال: - Ignore case - Whole words only - Regular expressions تعبيرات قياسية - Search up بحث تجاه فوق - Search down بحث تجاه تحت - &Find بحـث - &Replace استبدال الكل - Replace &All استبدال بالكل - Find بحـث - Replace استبـدال - Replace %n instance(s)? @@ -353,19 +293,14 @@ - Question - - Sorry معذرة! - - Phrase not found. كلمة غير موجودة. @@ -373,37 +308,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -411,17 +339,14 @@ Highlighter - Add إضافة - Check Spelling... - (No suggestions found) @@ -429,12 +354,10 @@ ImageButton - Open Image فتح صورة - Images(%1) صور(%1) @@ -442,22 +365,18 @@ LocaleDialog - Select application language: اختيار لغة البرنامج - <System Language> <لغة النظام> - Note ملاحظة - Please restart this application for the change in language to take effect. من فضلك، أعد تشغيل البرنامج ليتم تفعيل اللغة المختارة. @@ -465,7 +384,6 @@ OdtReader - Unable to open archive. لا يمكن فتح ملف الأرشيف @@ -473,379 +391,298 @@ PreferencesDialog - Preferences تفضيلات - General عـام - Statistics - Toolbar شريط الأدوات - Spell Checking - Select Dictionary اختـر قاموساً - - Sorry - Unable to open archive. لا يمكن فتح ملف الأرشيف - The archive does not contain a usable dictionary. - - - - Question - Shortcuts - One or more shortcuts conflict. Do you wish to proceed? - The dictionary "%1" already exists. Do you want to replace it? - Daily Goal - None - Minutes: - - Words: الكلمـات: - Editing تحريـر - Always vertically center - Block insertion cursor - Smooth fonts تنعيم الخطوط - Typewriter sounds أصوات الرقن - Smart quotes: - Double - Single - Scenes - Divider: - Saving حفـظ - Automatically save changes حفظ تلقائي للتغييرات - Remember cursor position - Word count عدد الكلمات - Page count عدد الصفحات - Paragraph count عدد الفقرات - Character count عدد الحروف - Characters: الحروف: - Paragraphs: الفقرات: - Word Count Algorithm - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries - Divide character count by six - Count each letter as a word - Page Count Algorithm - Style النـمـط - Icons Only أيقوانات فقط - Text Only نص فقط - Text Alongside Icons - Text Under Icons النص تحت الأيقونة - Text Position: تموضع النص: - Actions - Move Up تحريك إلى أعلى - Move Down تحريك إلى أسفل - Add Separator إضافة فاصل - Command - Shortcut - Action - Check spelling as you type - Ignore words in UPPERCASE - Ignore words with numbers - Language اللغة - - Add إضافة - - Remove حـذف - Personal Dictionary قاموس شخصي @@ -853,8 +690,6 @@ RtfReader - - Not a supported RTF file. @@ -862,7 +697,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -870,52 +704,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List - Shift+F4 Shift+F4 - Show scene list (%1) - Hide scene list (%1) - Filter - Move Scenes Down - Resize scene list @@ -923,12 +747,6 @@ Session - - - - - - Default الافتراضي @@ -936,97 +754,78 @@ SessionManager - Manage Sessions إدارة الجلسات - S&essions الجلسـات - New جديد - Duplicate - Rename التسمية مجددا - Delete حـذف - Switch To التبديل إلى - New Session جلسة جديدة - Duplicate Session - Rename Session تسمية الجلسة مجددًا - Question - Delete selected session? تحذف الجلسة المحددة؟ - Session name: اسم الجلسة: - Sorry - The requested session name is already in use. - &New... جديـد... - Ctrl+Shift+N - &Manage... إدارة... - Ctrl+Shift+M Ctrl+Shift+M @@ -1034,18 +833,14 @@ ShortcutEdit - Clear - Reset to Default - - Shortcut: @@ -1053,12 +848,10 @@ SmartQuote - Replacing quotation marks... - Please Wait من فضلك، انتظر @@ -1066,67 +859,54 @@ SpellChecker - Check Spelling - &Add إضافة - &Ignore تجاهـل - I&gnore All تجاهل الكل - &Change تغييـر - C&hange All - Not in dictionary: - Change to: - Checking spelling... - Cancel إلغـاء - Please wait - Continue checking at beginning of file? - Spell check complete. @@ -1134,32 +914,26 @@ SymbolsDialog - Symbols - Recently used symbols - All symbols - Details تفاصيـل - Name: الاسـم: - Insert إدراج @@ -1167,12 +941,10 @@ SymbolsModel - Blocks - Scripts @@ -1180,7 +952,6 @@ Theme - Untitled %1 @@ -1188,234 +959,174 @@ ThemeDialog - Name: الاسـم: - No Image لا صورة - Tiled - - Centered - - Stretched - Scaled - Zoomed - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove حـذف - Edit Theme - Window Background - - Type: النـوع: - - - - Color: اللـون: - Image: الصـورة: - - - - - - - - - - pixels - Left يسارا - Text Background - Right يمينـا - Text النص - Font: الخـط - Misspelled: - Line Spacing المباعدة بين الأسطر - Single - 1.5 Lines - Double - Proportional - Height: - Paragraph Spacing - Tab Width: - New Theme @@ -1423,115 +1134,90 @@ ThemeManager - Themes السمـات - Default الافتراضي - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New - - Duplicate - Custom - Edit - Delete حـذف - Import تحميـل - Export تصديـر - Question - Delete theme '%1'? - - Themes (%1) - Import Theme تحميل سمة - Export Theme تصدير السمة @@ -1539,87 +1225,70 @@ Timer - <b>%1</b> - %2 - Question - Delete timer? - <b>Words:</b> %L1 - <b>Pages:</b> %L1 - <b>Paragraphs:</b> %L1 - <b>Characters:</b> %L1 / %L2 - Set Delay - Set Time - Delay: - Time: - HH:mm:ss HH:mm:ss - Alarm منبـه - Type: النـوع: - Memo: - Edit - Delete حـذف @@ -1627,12 +1296,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running @@ -1640,37 +1307,30 @@ TimerManager - Timers - New جديـد - Recent المستندات الأخيرة - Question - Cancel editing timers? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1678,690 +1338,546 @@ Window - Loading themes تحميـل سمـات - Loading sounds تحميل الأصوات - - Untitled غير معنون - Open File فتـح ملف - About FocusWriter حـول البرنامج FocusWriter - - FocusWriter - A simple fullscreen word processor - Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license - Uses icons from the <a href=%1>Oxygen</a> icon theme - Used under the <a href=%1>LGPL 3</a> license - - Characters: %L1 / %L2 - - Pages: %L1 - - Paragraphs: %L1 - - Words: %L1 - - Opening %1 فتـح %1 - (Untitled %1) (%1 غير معنون) - List all documents - Switch to Next Document التبديل إلى المستند اللاحق - Switch to Previous Document التبديل إلى المستند السابق - Switch to First Document التبديل إلى المستند الأول - Switch to Last Document التبديل إلى المستند الأخير - Switch to Document %1 التبديل إلى المستند %1 - Loading settings تحميل الإعدادات - Emergency cache is not writable. - - Warning - FocusWriter was not shut down cleanly. - Restore from the emergency cache? - Some files could not be opened. - Some files were opened Read-Only. - '%1' is newer than the cached copy. - Overwrite newer file? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. لا يمكن تحمل أصوات الرقن. - &File ملـف - &New جديـد - &Open... فتـح - Reloa&d تحديـث - &Save حفـظ - Save &As... حفظ باسم - &Rename... التسمية مجددًا - Save A&ll حفظ الكل - Manage Sessions إدارة الجلسات - New Session جلسة جديدة - &Print... طباعة - Pa&ge Setup... - &Close إغلاق المستند الحالي - &Quit إغلاق البرنامج - Ctrl+Q Ctrl+Q - &Edit تحريـر - &Undo تراجـع - &Redo استرجاع - Cu&t قـص - &Copy نسـخ - &Paste لصـق - Paste &Unformatted - Ctrl+Shift+V Ctrl+Shift+V - Select &All تحديـد الكل - Select &Scene - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat النمـط - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold سمـيك - &Italic مائـل - &Underline مسطر تحته - Stri&kethrough مشـطب - Ctrl+K Ctrl+K - Sup&erscript - Ctrl+^ Ctrl+^ - &Subscript - Ctrl+_ Ctrl+_ - Align &Left محاذاة إلى اليسار - Ctrl+{ Ctrl+{ - Align &Center محاذاة إلى الوسط - Ctrl+| Ctrl+| - Align &Right محاذاة إلى اليمين - Ctrl+} Ctrl+} - Align &Justify ضبـط - Ctrl+J Ctrl+J - &Decrease Indent - Ctrl+< Ctrl+< - I&ncrease Indent - Ctrl+> Ctrl+> - Le&ft to Right Block الاتجاه من اليسار إلى اليمين - Ri&ght to Left Block الاتجاه من اليمين إلى اليسار - &Tools أدوات - &Find... بحـث - Find &Next أوجد اللاحق - Find Pre&vious أوجد السابق - &Replace... استبـدال... - Ctrl+R Ctrl+R - Smart &Quotes - Update &Document - Update Document Smart Quotes - Update &Selection - Update Selection Smart Quotes - &Spelling... - F7 F7 - Set &Language... - &Timers... - S&ymbols... - &Daily Progress - &Settings إعـدادات - Show &Toolbar إظهار شريط الأدوات - Show &Menu Icons - F&ocused Text النص المركز عليه - &Fullscreen - F11 F11 - Esc Esc - M&inimize - Ctrl+M Ctrl+M - &Themes... سمـات... - &Preferences... تفضيلات... - Focus Off دون تركيز - Focus One Line تركيز على سطر - Focus Three Lines تركيز على ثلاثة أسطر - &Paragraph فقـرة - Focus Paragraph تركيز على فقرة - Ctrl+Shift+` - &Help مساعدة - Application &Language... لغة التطبيق... - Some files were unsupported and could not be opened. - &Off دون تركيز - One &Line تركيز على سطر - &Three Lines تركيز على ثلاثة أسطر - &About حـول - About &Qt حـول "كيوتي" diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 57ef3a2b..c7af618c 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Tanca (%1) - Collapse Redueix - Expand Expandeix @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Descarta l'alerta - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) @@ -43,7 +37,6 @@ - %1% of %Ln word(s) @@ -51,7 +44,6 @@ - %Ln word(s) @@ -59,7 +51,6 @@ - %Ln minute(s) @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progrés diari - Longest streak La ratxa més llarga - Current streak Ratxa actual - N/A No disponible - %n day(s) @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% de l'objectiu del dia @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Configura l'idioma @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sense títol %1) - %1 (Read-Only) %! (Només lectura) - - - - Sorry Disculpes - Unable to save '%1'. No s'ha pogut desar '%1'. - Save File As Anomena i desa - - Unable to overwrite '%1'. No s'ha pogut sobreescriure '%1'. - Rename File Reanomena el fitxer - Unable to rename '%1'. No s'ha pogut reanomenar '%1'. - Reload File? Voleu recarregar el fitxer? - Reload the file '%1' from disk? Voleu recarregar el fitxer '%1' des del disc? - All unsaved changes will be lost. Es perdran tots els canvis. - Reload Torna a carregar - Untitled %1 Sense títol %1 - Question Pregunta - Saving as plain text will discard all formatting. Discard formatting? Si deseu com a text pla es perdran tots els canvis de format. Voleu descartar el formatatge? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed S'ha canviat el fitxer - The file '%1' was changed by another program. El fitxer '%1' ha estat modificat per un altre programa. - Do you want to reload the file? Este segur que voleu tornar a carregar el fitxer? - Reload Torna a carregar - Ignore Ignora - File Deleted S'ha esborrat el fitxer - The file %1 was deleted by another program. Un altre programa ha esborrat el fitxer %1 - Do you want to save or close the file? Voleu tancar o desar el fitxer? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. No es pot obrir el fitxer @@ -261,67 +214,54 @@ FindDialog - Search for: Cerca: - Replace with: Reemplaça amb: - Ignore case Ignora majúscules - Whole words only Només paraules senceres - Regular expressions Expressions regulars - Search up Cerca cap enrere - Search down Cerca cap endavant - &Find Cerca - &Replace &Reemplaça - Replace &All Reemplaça-ho tot - Find Troba - Replace Reemplaça - Replace %n instance(s)? Esteu segur que voleu reemplaçar %n instàncies? @@ -329,19 +269,14 @@ - Question Pregunta - - Sorry Disculpeu - - Phrase not found. No s'ha trobat la frase @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Text pla - All Files Tots els fitxers - All Supported Files Tots els fitxers suportats @@ -387,17 +315,14 @@ Highlighter - Add Afegeix - Check Spelling... Comprova l'ortografia - (No suggestions found) (No s'han trobat suggeriments) @@ -405,12 +330,10 @@ ImageButton - Open Image Obre la imatge - Images(%1) Imatges (%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Seleccioneu l'idioma de l'aplicació: - <System Language> <Idioma del sistema> - Note Nota - Please restart this application for the change in language to take effect. Call que reinicieu l'aplicació perquè tingui efecte el canvi d'idioma @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. No s'ha pogut obrir el fitxer @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferències - General General - Statistics Estadístiques - Toolbar Barra d'eines - Spell Checking Ortografia - Select Dictionary Seleccioneu un diccionari - - Sorry Disculpeu - Unable to open archive. És impossible obrir el fitxer - The archive does not contain a usable dictionary. El fitxer no conté un diccionari que es pugui utilitzar - - - - Question Pregunta - Shortcuts Dreceres - One or more shortcuts conflict. Do you wish to proceed? Hi ha un conflicte entre dreceres. Esteu segur que voleu continuar? - The dictionary "%1" already exists. Do you want to replace it? Ja existeix el diccionari '%1'. Voleu reemplaçar-lo? - Daily Goal Objectiu del dia - None Cap - Minutes: Minuts: - - Words: Paraules: - Editing Edita - Always vertically center Sempre centrat verticalment - Block insertion cursor Cursor d'inserció de bloc - Smooth fonts Lletres suaus - Typewriter sounds So de màquina d'escriure - Smart quotes: Cometes tipogràfiques: - Double Doble - Single Senzill - Scenes Escenes - Divider: Divisor - Saving S'està desant - Automatically save changes Desa els canvis automàticament - Remember cursor position Recorda la posició del cursor - Word count Recompte de paraules - Page count Recompte de pàgines - Paragraph count Recompte de paràgrafs - Character count Recompte de caràcters - Characters: Caràcters: - Paragraphs: Paràgrafs: - Word Count Algorithm Algorisme de recompte de paraules - Reset daily progress for today to zero? Voleu reiniciar a zero el progrés diari d'avui? - Remove current dictionary? - Write byte order mark in plain text files Escriu la marca d'ordre dels bits en els arxius de text pla - Default format: Format per defecte: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Reinicia avui - History Historial - Remember history Recorda l'historial - Show streaks Mostra les ratxes - Minimum progress for streaks: Progrés mínim per les ratxes: - Detect word boundaries Detecta els límits de les paraules - Divide character count by six Divideix el nombre de caràcters entre sis - Count each letter as a word Compta cada lletra com si fos una paraula - Page Count Algorithm Algorisme de recompte de pàgines - Style Estil - Icons Only Només icones - Text Only Només text - Text Alongside Icons Text al costat de les icones - Text Under Icons Text sota les icones - Text Position: Posició del text: - Actions Accions - Move Up Puja - Move Down Baixa - Add Separator Afegeix separador - Command Ordre - Shortcut Drecera - Action Acció - Check spelling as you type Comprova l'ortografia mentre s'escriu - Ignore words in UPPERCASE Ignaora les paraules en MAJÚSCULES - Ignore words with numbers Ignora les paraules amb números - Language Idioma - - Add Afegeix - - Remove Elimina - Personal Dictionary Diccionari personal @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Aquest fitxer no és un RTF suportat @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. S'ha arribat inesperadament al final del fitxer @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Puja les escenes - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Commuta la llista d'escenes - Shift+F4 Shift+F4 - Show scene list (%1) Mostra la llista d'escenes (%1) - Hide scene list (%1) Oculta la llista d'escenes (%1) - Filter Filtre - Move Scenes Down Baixa les escenes - Resize scene list Redimensiona la llista d'escenes @@ -899,12 +723,6 @@ Session - - - - - - Default Per defecte @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Gestiona les sessions - S&essions S&essions - New Nou - Duplicate - Rename Canvia el nom - Delete Elimina - Switch To Canvia a - New Session Sessió nova - Duplicate Session - Rename Session Canvia el nom de la sessió - Question Pregunta - Delete selected session? Esteu segur que voleu eliminar la sessió seleccionada? - Session name: Nom de la sessió: - Sorry Disculpes - The requested session name is already in use. El nom de la sessió seleccionat ja està essent utilitzat. - &New... &Nou... - Ctrl+Shift+N Ctrl+Maj+N - &Manage... Administrar - Ctrl+Shift+M Ctrl+Maj+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Neteja - Reset to Default Reinicia a per defecte - - Shortcut: Drecera: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Reemplaça cometes ... - Please Wait Espereu siusplau @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Comprova l'ortografia - &Add &Afegeix - &Ignore &Ignora - I&gnore All I&gnora-ho tot - &Change &Canvia - C&hange All Canvia-ho tot - Not in dictionary: No s'ha trobat al diccionari: - Change to: Canvia per: - Checking spelling... S'està comprovant l'ortografia - Cancel Cancel·la - Please wait Espereu siusplau - Continue checking at beginning of file? Voleu continuar comprovant des del principi del fitxer? - Spell check complete. S'ha completat la revisió ortogràfica @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Símbols - Recently used symbols Símbols utilitzats darrerament - All symbols Tots els símbols - Details Detalls - Name: Nom: - Insert Insereix @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocs - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sensetítol %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nom: - No Image Sense imatge - Tiled En mosaic - - Centered Centrada - - Stretched Estirada - Scaled Escalada - Zoomed Aplica el zoom - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Esborra - Edit Theme - Window Background - - Type: Tipus: - - - - Color: Color: - Image: Imatge: - - - - - - - - - - pixels píxels - Left Esquerra - Text Background - Right Dreta - Text Text - Font: Tipus de lletra: - Misspelled: Error ortogràfic - Line Spacing Espai entre línies - Single Senzill - 1.5 Lines 1.5 Línies - Double Doble - Proportional Proporcional - Height: - Paragraph Spacing Espai entre paràgrafs - Tab Width: Amplada de la pestanya: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temes - Default Per defecte - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New Nou - - Duplicate - Custom - Edit Edita - Delete - Import Importa - Export Exporta - Question Pregunta - Delete theme '%1'? - - Themes (%1) - Import Theme Importa Tema - Export Theme Exporta Tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pregunta - Delete timer? Voleu eliminar el temporitzador? - <b>Words:</b> %L1 <b>Paraules:</b> %L1 - <b>Pages:</b> %L1 <b>Pàgines:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paràgrafs:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caràcters:</b> %L1 / %L2 - Set Delay Ajusta el retard - Set Time Ajusta el temps - Delay: Retard: - Time: Temps: - HH:mm:ss HH:mm:ss - Alarm Alarma - Type: Tipus: - Memo: Memoràndum - Edit Edita - Delete Esborra @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running No hi ha cap temporitzador en marxa @@ -1616,37 +1283,30 @@ TimerManager - Timers Temporitzadors - New Nou - Recent Recent - Question Pregunta - Cancel editing timers? Voleu cancel·lar els temporitzadors existents? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes S'estan carregant els Temes - Loading sounds S'estan carregant els sons - - Untitled Sense títol - Open File bre fitxer - About FocusWriter Sobre FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un processador de text senzill a pantalla completa - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Usa les icones del tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Utilitzades sota llicència <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caràcters: %L1 / %L2 - - Pages: %L1 Pàgines: %L1 - - Paragraphs: %L1 Paràgrafs: %L1 - - Words: %L1 Paraules: %L1 - - Opening %1 'està obrint %1 - (Untitled %1) (Sense títol %1) - List all documents Llista tots els documents - Switch to Next Document Canvia a un document nou - Switch to Previous Document Canvia al document anterior - Switch to First Document Canvia al primer document - Switch to Last Document Canvia al darrer document - Switch to Document %1 Canvia al document %1 - Loading settings S'estan carregant els ajustos - Emergency cache is not writable. No es pot escriure a la memòria cau d'emergència. - - Warning Avís - FocusWriter was not shut down cleanly. FocusWriter no es va tancat correctament. - Restore from the emergency cache? Voleu restaurar des de la memòria cau d'emergència? - Some files could not be opened. No s'han pogut obrir alguns fitxers. - Some files were opened Read-Only. S'han obert alguns fitxers en mode de Només lectura. - '%1' is newer than the cached copy. '%1'és més nou que la còpia de la memòria cau. - Overwrite newer file? Voleu sobreescriure el fitxer més nou? - Save Changes? Voleu desar els canvis? - Save changes to the file '%1' before closing? Voleu desar els canvis efectuats a '%1' abans de tancar? - Your changes will be lost if you don't save them. Es perdran els canvis si no els deseu. - Unable to load typewriter sounds. No s'han pogut carregar els sons de màquina d'escriure. - &File &Fitxer - &New &Nou - &Open... &Obre - Reloa&d Torna a carregar - &Save &Desa - Save &As... Desa &com... - &Rename... &Reanomena... - Save A&ll Desa-ho tot - Manage Sessions Gestiona les sessions - New Session Nova sessió - &Print... Im&primeix - Pa&ge Setup... - &Close Tan&ca - &Quit Surt - Ctrl+Q Ctrl+Q - &Edit &Edita - &Undo Desfés - &Redo &Refés - Cu&t Talla - &Copy &Copia - &Paste Enganxa - Paste &Unformatted Enganxa sense format - Ctrl+Shift+V Ctrl+Shift+V - Select &All Seleccion&a tot - Select &Scene Selecciona l'escena - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmat - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold Negreta - &Italic Itàlica - &Underline S&ubratllat - Stri&kethrough Ratllat - Ctrl+K Ctrl+K - Sup&erscript Sup&eríndex - Ctrl+^ Ctrl+^ - &Subscript &Subíndex - Ctrl+_ Ctrl+_ - Align &Left Alinea a l'esquerra - Ctrl+{ Ctrl+{ - Align &Center Alinea al &Centre - Ctrl+| Ctrl+| - Align &Right Alinea a la dreta - Ctrl+} Ctrl+} - Align &Justify &Justifica - Ctrl+J Ctrl+J - &Decrease Indent &Disminueix el sagnat - Ctrl+< Ctrl+< - I&ncrease Indent I&ncrementa el sagnat - Ctrl+> Ctrl+> - Le&ft to Right Block Escriure d'esquerra a dreta - Ri&ght to Left Block Escriure de dreta a esquerra - &Tools Eines - &Find... Cerca... - Find &Next Cerca el següent - Find Pre&vious Cerca l'anterior - &Replace... Reemplaça - Ctrl+R Ctrl+R - Smart &Quotes Cometes tipogràfiques - Update &Document Actualitza el document - Update Document Smart Quotes - Update &Selection Actualitza la selecció - Update Selection Smart Quotes - &Spelling... Ortografia - F7 F7 - Set &Language... Configuració i Idioma - &Timers... &Temporitzadors - S&ymbols... S&ímbols... - &Daily Progress &Progrés diari - &Settings Configuració - Show &Toolbar Mostra la barra d'eines - Show &Menu Icons Mostra les icones del menú - F&ocused Text Text focalitzat - &Fullscreen Pantalla completa - F11 F11 - Esc Esc - M&inimize M&inimitza - Ctrl+M Ctrl+M - &Themes... &Temes... - &Preferences... &Preferències... - Focus Off No focalitzis - Focus One Line Focalitza una línia - Focus Three Lines Focalitza tres línies - &Paragraph &Paràgraf - Focus Paragraph Focalitza un paràgraf - Ctrl+Shift+` - &Help Ajuda - Application &Language... Idioma de l'aplicació - Some files were unsupported and could not be opened. Alguns fitxers no tenen suport i no es podran obrir - &Off Tanca - One &Line Una &Línia - &Three Lines &Tres línies - &About Sobre - About &Qt Sobre &Qt diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index b1c07e09..9f229b26 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Zavřít (%1) - Collapse Složit - Expand Rozbalit @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Odvolat poplach - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% z %Ln minut @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% z %Ln slov @@ -53,7 +46,6 @@ - %Ln word(s) %Ln slovo @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln minuta @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Denní postup - Longest streak Nejdelší proužek - Current streak Nynější proužek - N/A Nedostupné - %n day(s) %n den @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% z denního cíle @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Nastavit jazyk @@ -133,81 +114,62 @@ Document - (Untitled %1) (Bez názvu %1) - %1 (Read-Only) %1 (pouze pro čtení) - - - - Sorry Promiňte - Unable to save '%1'. Nelze uložit '%1'. - Save File As Uložit soubor jako - - Unable to overwrite '%1'. Nelze přepsat '%1'. - Rename File Přejmenovat soubor - Unable to rename '%1'. Nelze přejmenovat '%1'. - Reload File? Nahrát soubor znovu? - Reload the file '%1' from disk? Nahrát soubor '%1' znovu z disku? - All unsaved changes will be lost. Všechny neuložené změny budou ztraceny. - Reload Nahrát znovu - Untitled %1 Bez názvu %1 - Question Otázka - Saving as plain text will discard all formatting. Discard formatting? Uložení v prostém textu zahodí všechno formátování. Zahodit formátování? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Soubor změněn - The file '%1' was changed by another program. Soubor '%1' byl změněn jiným programem. - Do you want to reload the file? Chcete soubor nahrát znovu? - Reload Nahrát znovu - Ignore Přehlížet - File Deleted Soubor smazán - The file %1 was deleted by another program. Soubor %1 byl smazán jiným programem. - Do you want to save or close the file? Chcete soubor uložit nebo zavřít? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Nelze otevřít archiv. @@ -266,67 +219,54 @@ FindDialog - Search for: Hledat: - Replace with: Nahradit: - Ignore case Nevšímat si velikosti písmen - Whole words only Pouze celá slova - Regular expressions Regulární výrazy - Search up Hledat nahoru - Search down Hledat dolů - &Find &Hledat - &Replace &Nahradit - Replace &All Nahradit &vše - Find Najít - Replace Nahradit - Replace %n instance(s)? Nahradit jeden případ? @@ -335,19 +275,14 @@ - Question Otázka - - Sorry Promiňte - - Phrase not found. Slovní spojení nebylo nenalezeno. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Prostý text - All Files Všechny soubory - All Supported Files Všechny podporované soubory @@ -393,17 +321,14 @@ Highlighter - Add Přidat - Check Spelling... Ověření pravopisu... - (No suggestions found) (Nebyly nalezeny žádné návrhy) @@ -411,12 +336,10 @@ ImageButton - Open Image Otevřít obrázek - Images(%1) Obrázky (%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Vybrat jazyk programu: - <System Language> <Jazyk systému> - Note Poznámka - Please restart this application for the change in language to take effect. Spusťte program znovu, aby se změna jazyka projevila. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Nelze otevřít archiv. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Nastavení - General Obecné - Statistics Statistika - Toolbar Nástrojový pruh - Spell Checking Správné psaní - Select Dictionary Vybrat slovník - - Sorry Promiňte - Unable to open archive. Nelze otevřít archiv. - The archive does not contain a usable dictionary. Archiv neobsahuje použitelný slovník. - - - - Question Otázka - Shortcuts Zkratky - One or more shortcuts conflict. Do you wish to proceed? Střet jedné nebo více zkratek. Chcete pokračovat? - The dictionary "%1" already exists. Do you want to replace it? Slovník "%1" již existuje. Chcete jej nahradit? - Daily Goal Denní cíl - None Žádný - Minutes: Minut: - - Words: Slov: - Editing Úpravy - Always vertically center Umístit vždy svisle do středu - Block insertion cursor Ukazatel vkládání bloku - Smooth fonts Vyhlazená písma - Typewriter sounds Zvuky psacího stroje - Smart quotes: Chytré uvozovky: - Double dvojité - Single jednoduché - Scenes Scény - Divider: Oddělovač - Saving Ukládání - Automatically save changes Automaticky uložit změny - Remember cursor position Zapamatovat si polohu ukazatele - Word count Počet slov - Page count Počet stran - Paragraph count Počet odstavců - Character count Počet znaků - Characters: Znaků: - Paragraphs: Odstavců: - Word Count Algorithm Algoritmus pro počítání slov - Reset daily progress for today to zero? Nastavit denní postup pro dnešek znovu na nulu? - Remove current dictionary? - Write byte order mark in plain text files Zapsat značku pro pořadí bytů (BOM) do souborů prostého textu - Default format: Výchozí formát: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Vynulovat dnešek - History Historie - Remember history Zapamatovat si historii - Show streaks Ukázat proužky - Minimum progress for streaks: Nejmenší postup pro proužky: - Detect word boundaries Zjistit hranice slov - Divide character count by six Vydělit počet znaků šesti - Count each letter as a word Počítat každé písmeno za slovo - Page Count Algorithm Algoritmus pro počítání stran - Style Styl - Icons Only Pouze ikony - Text Only Pouze text - Text Alongside Icons Text vedle ikon - Text Under Icons Text pod ikonami - Text Position: Poloha textu: - Actions Činnosti - Move Up Posunout nahoru - Move Down Posunout dolů - Add Separator Přidat oddělovač - Command Příkaz - Shortcut Zkratka - Action Činnost - Check spelling as you type Ověřování pravopisu během psaní - Ignore words in UPPERCASE Nevšímat si slov psaných VELKÝMI PÍSMENY - Ignore words with numbers Nevšímat si slov s čísly - Language Jazyk - - Add Přidat - - Remove Odstranit - Personal Dictionary Osobní slovník @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Není podporovaným souborem RTF. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Neočekávaně dosaženo konce souboru. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+šipka dolů - Move Scenes Up Přesunout scény nahoru - Ctrl+Shift+Up Ctrl+Shift+šipka nahoru - Toggle Scene List Přepnout seznam scén - Shift+F4 Shift+F4 - Show scene list (%1) Ukázat seznam scén (%1) - Hide scene list (%1) Skrýt seznam scén (%1) - Filter Filtr - Move Scenes Down Přesunout scény dolů - Resize scene list Změnit velikost seznamu scén @@ -905,12 +729,6 @@ Session - - - - - - Default Výchozí @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Spravovat sezení - S&essions S&ezení - New Nové - Duplicate Zdvojit - Rename Přejmenovat - Delete Smazat - Switch To Přepnout na - New Session Nové sezení - Duplicate Session Zdvojit sezení - Rename Session Přejmenovat sezení - Question Otázka - Delete selected session? Smazat vybrané sezení? - Session name: Název sezení: - Sorry Promiňte - The requested session name is already in use. Požadovaný název sezení se již používá. - &New... &Nové... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Spravovat... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Smazat - Reset to Default Nastavit znovu na výchozí - - Shortcut: Zkratka: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Nahrazují se uvozovky... - Please Wait Počkejte, prosím @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Ověření pravopisu - &Add &Přidat - &Ignore Pře&hlížet - I&gnore All Přeh&lížet vše - &Change &Změnit - C&hange All Změ&nit - Not in dictionary: Ne ve slovníku: - Change to: Změnit na: - Checking spelling... Ověřuje se pravopis... - Cancel Zrušit - Please wait Počkejte, prosím - Continue checking at beginning of file? Pokračovat v kontrole od začátku souboru? - Spell check complete. Ověření správného psaní je hotovo. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Symboly - Recently used symbols Nedávno použité symboly - All symbols Všechny symboly - Details Podrobnosti - Name: Název: - Insert Vložit @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Bloky - Scripts Skripty @@ -1162,7 +934,6 @@ Theme - Untitled %1 Bez názvu %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Název: - No Image Žádný obrázek - Tiled Vydlážděno - - Centered Vystředěno - - Stretched Roztaženo - Scaled Změněno měřítko - Zoomed Přiblíženo - Opacity: Neprůhlednost: - Position: Poloha: - Width: Šířka: - Round Text Background Corners Kulaté rohy pozadí textu - - - Radius: Poloměr: - Blur Text Background Rozmazané pozadí textu - Text Background Drop Shadow Stín pozadí textu - Vertical Offset: Svislý posun: - Margins Okraje - Window: Okno: - Page: Strana: - Indent first line Odsadit první řádek - Above: Nad: - Below: Pod: - Remove Odstranit - Edit Theme Upravit vzhled - Window Background Pozadí okna - - Type: Typ: - - - - Color: Barva: - Image: Obrázek: - - - - - - - - - - pixels pixelů - Left Zarovnáno vlevo - Text Background Pozadí textu - Right Zarovnáno vpravo - Text Text - Font: Písmo: - Misspelled: Špatně napsáno: - Line Spacing Odstupy mezi řádky - Single Jednoduchý - 1.5 Lines 1.5 řádku - Double Dvojitý - Proportional Poměrný - Height: Výška: - Paragraph Spacing Odstupy mezi odstavci - Tab Width: Šířka zarážky: - New Theme Nový vzhled @@ -1405,115 +1116,90 @@ ThemeManager - Themes Vzhled - Default Výchozí - Bitter Skies - Enchantment - Gentle Blues Něžné blues - Old School Stará škola - Space Dreams Vesmírné sny - Spy Games - Tranquility - Writing Desk Psací stůl - - New Nový - - Duplicate Zdvojit - Custom Vlastní - Edit Upravit - Delete Smazat - Import Zavést - Export Vyvést - Question Otázka - Delete theme '%1'? Smazat vzhled '%1'? - - Themes (%1) Vzhledy (%1) - Import Theme Zavést vzhled - Export Theme Vyvést podobu @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Otázka - Delete timer? Smazat časomíru? - <b>Words:</b> %L1 <b>Slova:</b> %L1 - <b>Pages:</b> %L1 <b>Strany:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Odstavce:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Znaky:</b> %L1 / %L2 - Set Delay Nastavit zpoždění - Set Time Nastavit čas - Delay: Zpoždění: - Time: Čas: - HH:mm:ss HH:mm:ss - Alarm Budík - Type: Typ: - Memo: Zpráva: - Edit Upravit - Delete Smazat @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Neběží žádná časomíra @@ -1622,37 +1289,30 @@ TimerManager - Timers Časomíry - New Nová - Recent Naposledy použitá - Question Otázka - Cancel editing timers? Zrušit časomíry pro úpravy? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Nahrávají se podoby - Loading sounds Nahrávají se zvuky - - Untitled Bez názvu - Open File Otevřít soubor - About FocusWriter O programu FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Jednoduchý celoobrazovkový editor textu - Copyright &copy; 2008-%1 Graeme Gott Autorské právo &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Používá ikony z motivu ikon <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Vydáno pod licencí <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Znaky: %L1 / %L2 - - Pages: %L1 Strany: %L1 - - Paragraphs: %L1 Odstavce: %L1 - - Words: %L1 Slova: %L1 - - Opening %1 Otevírá se %1 - (Untitled %1) (Bez názvu %1) - List all documents Vypsat všechny dokumenty - Switch to Next Document Přepnout na další dokument - Switch to Previous Document Přepnout na předchozí dokument - Switch to First Document Přepnout na první dokument - Switch to Last Document Přepnout na poslední dokument - Switch to Document %1 Přepnout na dokument %1 - Loading settings Nahrávají se nastavení - Emergency cache is not writable. Pohotovostní vyrovnávací paměť není zapisovatelná - - Warning Varování - FocusWriter was not shut down cleanly. FocusWriter nebyl vypnut čistě. - Restore from the emergency cache? Obnovit z pohotovostní vyrovnávací paměti? - Some files could not be opened. Některé soubory se nepodařilo otevřít. - Some files were opened Read-Only. Některé soubory byly otevřeny pouze pro čtení. - '%1' is newer than the cached copy. '%1' je novější než kopie ve vyrovnávací paměti. - Overwrite newer file? Přepsat novější soubor? - Save Changes? Uložit změny? - Save changes to the file '%1' before closing? Uložit změny do souboru '%1' před zavřením? - Your changes will be lost if you don't save them. Vaše změny budou ztraceny, pokud je neuložíte. - Unable to load typewriter sounds. Nelze nahrát zvuky psacího stroje. - &File &Soubor - &New &Nový - &Open... &Otevřít... - Reloa&d Nahrát z&novu - &Save &Uložit - Save &As... Uložit &jako... - &Rename... Pře&jmenovat... - Save A&ll U&ložit vše - Manage Sessions Spravovat sezení - New Session Nové sezení - &Print... &Tisk... - Pa&ge Setup... - &Close &Zavřít - &Quit &Ukončit - Ctrl+Q Ctrl+Q - &Edit Úp&ravy - &Undo &Zpět - &Redo Zn&ovu - Cu&t Vyj&mout - &Copy &Kopírovat - &Paste &Vložit - Paste &Unformatted Vložit ne&formátované - Ctrl+Shift+V Ctrl+Shift+V - Select &All Vybrat &vše - Select &Scene Vybrat &scénu - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Formát - &Heading &Nadpis - Heading &1 Nadpis &1 - Heading &2 Nadpis &2 - Heading &3 Nadpis &3 - Heading &4 Nadpis &4 - Heading &5 Nadpis &5 - Heading &6 Nadpis &6 - &Normal &Normální - &Bold &Tučné - &Italic &Kurzíva - &Underline &Podtržení - Stri&kethrough Přeškr&tnutí - Ctrl+K Ctrl+K - Sup&erscript &Horní index - Ctrl+^ Ctrl+^ - &Subscript &Dolní index - Ctrl+_ Ctrl+_ - Align &Left Zarovnat &vlevo - Ctrl+{ Ctrl+{ - Align &Center Zarovnat na &střed - Ctrl+| Ctrl+| - Align &Right Zarovnat vp&ravo - Ctrl+} Ctrl+} - Align &Justify Zarovnat do &bloku - Ctrl+J Ctrl+J - &Decrease Indent Z&menšit odsazení - Ctrl+< Ctrl+< - I&ncrease Indent Zvětš&it odsazení - Ctrl+> Ctrl+> - Le&ft to Right Block Blok zl&eva doprava - Ri&ght to Left Block Blok z&prava doleva - &Tools &Nástroje - &Find... &Hledat... - Find &Next Najít &další - Find Pre&vious Najít &předchozí - &Replace... &Nahradit... - Ctrl+R Ctrl+R - Smart &Quotes Chytré &uvozovky - Update &Document Obnovit &dokument - Update Document Smart Quotes - Update &Selection Obnovit &výběr - Update Selection Smart Quotes - &Spelling... &Pravopis... - F7 F7 - Set &Language... Nastavit &jazyk... - &Timers... Časo&míry... - S&ymbols... S&ymboly... - &Daily Progress &Denní postup - &Settings &Nastavení - Show &Toolbar Ukázat ná&strojový pruh - Show &Menu Icons Ukázat &nabídkové ikony - F&ocused Text Zao&střený text - &Fullscreen &Celá obrazovka - F11 F11 - Esc Esc - M&inimize Z&menšit na panel - Ctrl+M Ctrl+M - &Themes... &Vzhled... - &Preferences... &Nastavení... - Focus Off Zaměření vypnuto - Focus One Line Zaměření na jeden řádek - Focus Three Lines Zaměření na tři řádky - &Paragraph &Odstavec - Focus Paragraph Zaměření na odstavec - Ctrl+Shift+` - &Help &Nápověda - Application &Language... Jazyk &programu... - Some files were unsupported and could not be opened. Některé soubory nebyly podporovány a nepodařilo se je otevřít. - &Off &Vypnuto - One &Line Jeden řá&dek - &Three Lines &Tři řádky - &About &O programu - About &Qt O &Qt diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 2ebc1c42..cf7ef5d5 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Luk (%1) - Collapse Fold sammen - Expand Fold ud @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Afvis alarm - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% af %Ln minut @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% af %Ln ord @@ -51,7 +44,6 @@ - %Ln word(s) %Ln ord @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minut @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Dagligt fremskridt - Longest streak Længste stræk - Current streak Nuværende stræk - N/A N/A - %n day(s) %n dag @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% af dagligt mål @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Vælg sprog @@ -128,81 +109,62 @@ Document - (Untitled %1) (Unavngivet %1) - %1 (Read-Only) %1 (skrivebeskyttet) - - - - Sorry Beklager - Unable to save '%1'. Det er ikke muligt at gemme '%1'. - Save File As Gem fil som - - Unable to overwrite '%1'. Det er ikke muligt at overskrive '%1'. - Rename File Omdøb fil - Unable to rename '%1'. Det er ikke muligt at omdøbe '%1'. - Reload File? Genindlæs fil? - Reload the file '%1' from disk? Genindlæs filen '%1' fra disken? - All unsaved changes will be lost. Alle ændringer, der ikke er gemt, vil gå tabt. - Reload Genindlæs - Untitled %1 Unavngivet %1 - Question Spørgsmål - Saving as plain text will discard all formatting. Discard formatting? Gemmes der som ren tekst, vil al formatting blive fjernet. Fjern formattering? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Fil ændret - The file '%1' was changed by another program. Filen '%1' blev ændret af et andet program. - Do you want to reload the file? Ønsker du at genindlæse filen? - Reload Genindlæs - Ignore Ignorer - File Deleted Fil slettet - The file %1 was deleted by another program. Filen %1 blev slettet af et andet program. - Do you want to save or close the file? Ønsker du at gemme eller lukke filen? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Kunne ikke åbne arkivet. @@ -261,67 +214,54 @@ FindDialog - Search for: Søg efter: - Replace with: Erstat med: - Ignore case Ignorer store/små bogstaver - Whole words only Kun hele ord - Regular expressions Regulære udtryk - Search up Søg tilbage - Search down Søg fremad - &Find &Find - &Replace &Erstat - Replace &All Erstat &alle - Find Find - Replace Erstat - Replace %n instance(s)? Erstat %n forekomst? @@ -329,19 +269,14 @@ - Question Spørgsmål - - Sorry Beklager - - Phrase not found. Frasen kunne ikke findes. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Ren tekst - All Files Alle filer - All Supported Files Alle understøttede filer @@ -387,17 +315,14 @@ Highlighter - Add Tilføj - Check Spelling... Stavekontrol... - (No suggestions found) (Der er ikke fundet forslag) @@ -405,12 +330,10 @@ ImageButton - Open Image Åbn billede - Images(%1) Billeder(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Vælg programmets sprog: - <System Language> <Systemsprog> - Note Note - Please restart this application for the change in language to take effect. Genstart programmet for at skifte til det valgte sprog. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Kunne ikke åbne arkivet. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Indstillinger - General Generelt - Statistics Statistik - Toolbar Værktøjslinie - Spell Checking Stavekontrol - Select Dictionary Vælg ordbog - - Sorry Beklager - Unable to open archive. Det er ikke muligt at åbne arkivet. - The archive does not contain a usable dictionary. Dette arkiv indeholder ikke en anvendelig ordbog. - - - - Question Spørgsmål - Shortcuts Genveje - One or more shortcuts conflict. Do you wish to proceed? En eller flere genveje er i konflikt. Ønsker du at fortsætte? - The dictionary "%1" already exists. Do you want to replace it? Ordbogen '%1' findes allerede. Ønsker du at erstatte den? - Daily Goal Dagligt mål - None Intet - Minutes: Minutter: - - Words: Ord: - Editing Redigering - Always vertically center Altid centreret lodret - Block insertion cursor Firkantet markør for indsættelse - Smooth fonts Udjævn skrifttyper - Typewriter sounds Skrivemaskinelyde - Smart quotes: Smart quotes: - Double Dobbelte - Single Enkelte - Scenes Scener - Divider: Separator: - Saving Gemmer - Automatically save changes Gem automatisk - Remember cursor position Husk markørens placering - Word count Optælling af ord - Page count Antal sider - Paragraph count Antal afsnit - Character count Antal tegn - Characters: Tegn: - Paragraphs: Afsnit: - Word Count Algorithm Algoritme til ordtælling - Reset daily progress for today to zero? Nulstil dagligt fremskridt for i dag? - Remove current dictionary? - Write byte order mark in plain text files Indlæg Byte Order Mark i de rene tekstfiler - Default format: Standardformat: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Nulstil i dag - History Historik - Remember history Husk historik - Show streaks Vis stræk - Minimum progress for streaks: Minimumsfremskridt for stræk: - Detect word boundaries Registrer ordgrænser - Divide character count by six Del antal tegn med seks - Count each letter as a word Tæl hvert bogstav som et ord - Page Count Algorithm Algoritme for sideoptælling - Style Stil - Icons Only Kun ikoner - Text Only Kun tekst - Text Alongside Icons Tekst ved siden af ikoner - Text Under Icons Tekst under ikoner - Text Position: Placering i tekst - Actions Handlinger - Move Up Flyt op - Move Down Flyt ned - Add Separator Tilføj opdeling - Command Kommando - Shortcut Genvej - Action Handling - Check spelling as you type Kontroller stavning, mens der skrives - Ignore words in UPPERCASE Ignorer STORE BOGSTAVER - Ignore words with numbers Ignorer ord med tal - Language Sprog - - Add Tilføj - - Remove Fjern - Personal Dictionary Personlig ordbog @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Ikke en understøttet RTF-fil. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Uventet slutning på filen. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Ned - Move Scenes Up Flyt scener op - Ctrl+Shift+Up Ctrl+Shift+Op - Toggle Scene List Liste over scener til/fra - Shift+F4 Shift+F4 - Show scene list (%1) Vis liste over scener (%1) - Hide scene list (%1) Skjul liste over scener (%1) - Filter Filter - Move Scenes Down Flyt scener ned - Resize scene list Juster liste over scener @@ -899,12 +723,6 @@ Session - - - - - - Default Standard @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Administrer sessioner - S&essions S&essioner - New Ny - Duplicate Duplik - Rename Omdøb - Delete Slet - Switch To Skift til - New Session Ny session - Duplicate Session Duplik af session - Rename Session Omdøb session - Question Spørgsmål - Delete selected session? Slet valgte session? - Session name: Navn på session: - Sorry Beklager - The requested session name is already in use. Der gøres allerede brug af det ønskede sessionsnavn. - &New... &Ny... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Administrer - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Ryd - Reset to Default Nulstil - - Shortcut: Genvej: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Erstatter citatonstegn... - Please Wait Vent venligst @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Kontroller stavning - &Add &Tilføj - &Ignore &Ignorer - I&gnore All I&gnorer alle - &Change &Skift - C&hange All S&kift alle - Not in dictionary: Ikke i ordbogen: - Change to: Skift til: - Checking spelling... Kontrollerer stavning... - Cancel Fortryd - Please wait Vent venligst - Continue checking at beginning of file? Begynd check ved start på filen? - Spell check complete. Stavekontrol fuldført. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symboler - Recently used symbols Nyligt brugte symboler - All symbols Alle symboler - Details Detaljer - Name: Navn: - Insert Indsæt @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blokke - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Uden titel %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Navn: - No Image Intet billede - Tiled Side om side - - Centered Centreret - - Stretched Strakt - Scaled Skaleret - Zoomed Zoomet - Opacity: Gennemsigtighed: - Position: Position: - Width: Bredde: - Round Text Background Corners Runde hjørner på tekstbaggrund - - - Radius: Radius: - Blur Text Background Slør tekstbaggrund - Text Background Drop Shadow Skygge på tekstbaggrund - Vertical Offset: Lodret afsæt: - Margins Margener - Window: Vindue: - Page: ide: - Indent first line Indryk første linie - Above: Over: - Below: Under: - Remove Fjern - Edit Theme Rediger tema - Window Background Baggrund for vindue - - Type: Type: - - - - Color: Farve: - Image: Billede: - - - - - - - - - - pixels pixels - Left Venstre - Text Background Tekstbaggrund - Right Højre - Text Tekst - Font: Skrifttype: - Misspelled: Stavefejl: - Line Spacing Linjeafstand - Single Enkel - 1.5 Lines Halvanden linie - Double Dobbelt - Proportional Proportionel - Height: Højde: - Paragraph Spacing Mellemrum mellem afsnit - Tab Width: Fanebredde: - New Theme Nyt tema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temaer - Default Standard - Bitter Skies - Enchantment - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games - Tranquility - Writing Desk Writing Desk - - New Nyt - - Duplicate Duplik - Custom Tilpasset - Edit Rediger - Delete let - Import Importer - Export Eksport - Question Spørgsmål - Delete theme '%1'? Slet temaet '%1' - - Themes (%1) Temaer (%1) - Import Theme Importer tema - Export Theme Eksporter tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Spørgsmål - Delete timer? Slet tæller - <b>Words:</b> %L1 <b>Ord:</b> %L1 - <b>Pages:</b> %L1 <b>Sider:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Afsnit:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Tegn:</b> %L1 / %L2 - Set Delay Sæt nedtælling - Set Time Sæt tid - Delay: Nedtælling: - Time: Tid: - HH:mm:ss TT:mm:ss - Alarm Alarm - Type: Type: - Memo: Memo: - Edit Rediger - Delete Slet @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss TT:mm:ss - No timers running Ingen aktive tællere @@ -1616,37 +1283,30 @@ TimerManager - Timers Tællere - New Ny - Recent Nylig - Question Spørgsmål - Cancel editing timers? Fortryd ændring af tællere - +HH:mm:ss +TT:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Indlæser temaer - Loading sounds Indlæser lyde - - Untitled Uden titel - Open File Åbn fil - About FocusWriter Om FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Et enkelt tekstbehandlingsprogram i fuld skærm - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Udgivet under licensen <a href=%1>GPL 3</a>. - Uses icons from the <a href=%1>Oxygen</a> icon theme Anvender ikoner fra <a href=%1>Oxygen</a>-temaet - Used under the <a href=%1>LGPL 3</a> license Anvendes under licensen <a href=%1>LGPL 3</a>. - - Characters: %L1 / %L2 Tegn: %L1 / %L2 - - Pages: %L1 Sider: %L1 - - Paragraphs: %L1 Afsnit: %L1 - - Words: %L1 Ord: %L1 - - Opening %1 Åbner %1 - (Untitled %1) (Uden titel%1) - List all documents Liste over alle dokumenter - Switch to Next Document Skift til næste dokument - Switch to Previous Document Skift til tidligere dokument - Switch to First Document Skift til første dokument - Switch to Last Document Skift til sidste dokument - Switch to Document %1 Skift til dokument %1 - Loading settings Indlæser indstillinger - Emergency cache is not writable. Der kan ikke skrives til reservecachen. - - Warning Advarsel - FocusWriter was not shut down cleanly. FocusWriter blev ikke lukket korrekt. - Restore from the emergency cache? Gendan fra reservecache? - Some files could not be opened. Visse filer kunne ikke åbnes. - Some files were opened Read-Only. Visse filer blev åbnet skrivebeskyttet. - '%1' is newer than the cached copy. '%1' er nyere end den lagrede kopi. - Overwrite newer file? Overskriv nyere fil? - Save Changes? Gem ændringer - Save changes to the file '%1' before closing? Gem ændringerne til filen '%1', inden den lukkes? - Your changes will be lost if you don't save them. Dine ændringer vil gå tabt, hvis du ikke gemmer dem. - Unable to load typewriter sounds. Kan ikke indlæse skrivemaskinelyde. - &File &Fil - &New &Ny - &Open... &Åbn... - Reloa&d Genind&læs - &Save &Gem - Save &As... Gem &som - &Rename... &Omdøb... - Save A&ll Gem &alle - Manage Sessions Administrer sessioner - New Session Ny session - &Print... &Udskrift... - Pa&ge Setup... - &Close &Luk - &Quit &Afslut - Ctrl+Q Ctrl+Q - &Edit &Rediger - &Undo &Fortryd - &Redo &Gendan - Cu&t K&lip - &Copy &Kopier - &Paste &Indsæt - Paste &Unformatted Indsæt &uformatteret - Ctrl+Shift+V Ctrl+Shift+V - Select &All Vælg &alle - Select &Scene Vælg &scene - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmat - &Heading &Overskrift - Heading &1 Overskrift &1 - Heading &2 Overskrift &2 - Heading &3 Overskrift &3 - Heading &4 Overskrift &4 - Heading &5 Overskrift &5 - Heading &6 Overskrift &6 - &Normal &Normal - &Bold &Fed - &Italic &Kursiv - &Underline &Understreg - Stri&kethrough &Gennemstreg - Ctrl+K Ctrl+K - Sup&erscript &Hævet skrift - Ctrl+^ Ctrl+^ - &Subscript &Sænket skrift - Ctrl+_ Ctrl+_ - Align &Left &Venstrestil - Ctrl+{ Ctrl+{ - Align &Center &Centrer - Ctrl+| Ctrl+| - Align &Right &Højrestil - Ctrl+} Ctrl+} - Align &Justify &Tilpasset - Ctrl+J Ctrl+J - &Decrease Indent &Forminds indrykning - Ctrl+< Ctrl+< - I&ncrease Indent Fo&røg indrykning - Ctrl+> Ctrl+> - Le&ft to Right Block Tekstblok med Ve&nstre til højre - Ri&ght to Left Block Tekstblok med Hø&jre til venstre - &Tools &Værktøjer - &Find... &Find... - Find &Next Find &næste - Find Pre&vious Find &tidligere - &Replace... &Erstat - Ctrl+R Ctrl+R - Smart &Quotes Smart &Quotes - Update &Document Opdater &dokument - Update Document Smart Quotes - Update &Selection Opdater &markering - Update Selection Smart Quotes - &Spelling... &Stavning... - F7 F7 - Set &Language... Sæt &sprog - &Timers... &Tællere... - S&ymbols... S&ymboler... - &Daily Progress &Dagligt fremskridt - &Settings &Indstillinger - Show &Toolbar Vis &værktøjslinie - Show &Menu Icons Vis &menuikoner - F&ocused Text F&okuseret tekst - &Fullscreen &Fuld skærm - F11 F11 - Esc Esc - M&inimize M&inimer - Ctrl+M Ctrl+M - &Themes... &Temaer... - &Preferences... &Indstillinger... - Focus Off Fokus fra - Focus One Line Fokus én linie - Focus Three Lines Fokus tre linier - &Paragraph A&fsnit - Focus Paragraph Fokus afsnit - Ctrl+Shift+` - &Help &Hjælp - Application &Language... Programmets &sprog - Some files were unsupported and could not be opened. Nogle filer var ikke understøttede og kunne ikke åbnes. - &Off &Fra - One &Line En &linie - &Three Lines &Tre linier - &About &Om - About &Qt Om &QT diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 9cbcfbd8..1698266f 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Schließen (%1) - Collapse Einklappen - Expand Ausklappen @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Alarm Beenden - Ctrl+D Strg+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% von %Ln Minute @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% von %Ln Wort @@ -51,7 +44,6 @@ - %Ln word(s) %Ln Wort @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln Minute @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Täglicher Fortschritt - Longest streak Längster Siegeszug - Current streak Aktueller Siegeszug - N/A N/A - %n day(s) %n Tag @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% des Tagesziels @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Sprache einstellen @@ -128,81 +109,62 @@ Document - (Untitled %1) (Unbenannt %1) - %1 (Read-Only) %1 (Schreibgeschützt) - - - - Sorry Entschuldigung - Unable to save '%1'. '%1' kann nicht gespeichert werden. - Save File As Datei speichern unter - - Unable to overwrite '%1'. '%1' kann nicht überschrieben werden. - Rename File Datei umbenennen - Unable to rename '%1'. '%1' kann nicht umbenannt werden. - Reload File? Datei neu laden? - Reload the file '%1' from disk? Datei '%1' von der Festplatte neu laden? - All unsaved changes will be lost. Alle ungespeicherten Änderungen werden verloren gehen. - Reload Neu laden - Untitled %1 Unbenannt %1 - Question Frage - Saving as plain text will discard all formatting. Discard formatting? Durch das Soeichern als einfacher Text werden alle Formatierungen entfernt. Formatierungen entfernen? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Datei geändert - The file '%1' was changed by another program. Die Datei '%1' wurde durch ein anderes Programm geändert. - Do you want to reload the file? Wollen Sie die Datei neu laden? - Reload Neu laden - Ignore Ignorieren - File Deleted Die Datei wurde gelöscht - The file %1 was deleted by another program. Die Datei %1 wurde von einem anderen Programm gelöscht. - Do you want to save or close the file? Wollen Sie die Datei speichern oder schliessen? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Archiv kann nicht geöffnet werden. @@ -261,67 +214,54 @@ FindDialog - Search for: Suche nach: - Replace with: Ersetze durch: - Ignore case Groß-/Kleinschreibung ignorieren - Whole words only Nur ganze Wörter - Regular expressions Reguläre Ausrücke - Search up Aufwärts suchen - Search down Abwärts suchen - &Find &Suchen - &Replace &Ersetzen - Replace &All &Alle Ersetzen - Find Suchen - Replace Ersetzen - Replace %n instance(s)? In %n Fall ersetzen? @@ -329,19 +269,14 @@ - Question Frage - - Sorry Entschuldigung - - Phrase not found. Ausdruck nicht gefunden. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text nur Text - All Files Alle Dateien - All Supported Files Alle unterstützten Dateien @@ -387,17 +315,14 @@ Highlighter - Add Hinzufügen - Check Spelling... Rechtschreibung prüfen ... - (No suggestions found) (keine Vorschläge gefunden) @@ -405,12 +330,10 @@ ImageButton - Open Image Bild öffnen - Images(%1) Bilder(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Programmsprache wählen: - <System Language> <Systemsprache> - Note Beachte - Please restart this application for the change in language to take effect. Damit Änderungen an der Programmsprache in Kraft treten können, muss das Programm neu gestartet werden. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Archiv kann nicht geöffnet werden. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Einstellungen - General Allgemein - Statistics Statistiken - Toolbar Symbolleiste - Spell Checking Rechtschreibprüfung - Select Dictionary Wörterbuch wählen - - Sorry Entschuldigung - Unable to open archive. Archiv kann nicht geöffnet werden. - The archive does not contain a usable dictionary. Dieses Archiv enthält kein brauchbares Wörterbuch. - - - - Question Frage - Shortcuts Shortcuts - One or more shortcuts conflict. Do you wish to proceed? Eine oder mehrere Verknüpfungen verursachen Konflikte. Möchten Sie fortfahren? - The dictionary "%1" already exists. Do you want to replace it? Das Wörterbuch %1 existiert bereits. Möchten Sie es ersetzen? - Daily Goal Tagesziel - None Nichts - Minutes: Minuten: - - Words: Wörter: - Editing Bearbeitung - Always vertically center Immer mittig ausrichten - Block insertion cursor Eingabemarkierung als Block darstellen - Smooth fonts Geglättete Schriften - Typewriter sounds Tippgeräusche - Smart quotes: Typographische Anführungszeichen: - Double Doppelt - Single Einfach - Scenes Szenen - Divider: Teiler: - Saving Speichern - Automatically save changes Änderungen automatisch speichern - Remember cursor position Position der Eingabemarkierung merken - Word count Wörterzählung - Page count Seitenzählung - Paragraph count Absatzzählung - Character count Zeichenzählung - Characters: Zeichen: - Paragraphs: Absätze: - Word Count Algorithm Algorithmus für die Wortzählung - Reset daily progress for today to zero? Tagesziel auf Null zurücksetzen? - Remove current dictionary? Aktuelles Wörterbuch entfernen? - Write byte order mark in plain text files Schreibe Bytereihenfolge-Markierung in einfache Textdateien - Default format: Standard Format: - User Interface Benutzeroberfläche - Always show scrollbar Immer die Bildlaufleiste zeigen - Always show top bar Immer die obere Leiste zeigen - Always show bottom bar Immer die untere Leiste zeigen - Reset Today Heute zurücksetzen? - History Chronik - Remember history Chronik speichern - Show streaks Siegeszüge anzeigen - Minimum progress for streaks: Mindestfortschritt für Siegeszüge: - Detect word boundaries Wortgrenzen entdecken - Divide character count by six Zeichenzahl durch sechs dividieren - Count each letter as a word Jeden Buchstaben als Wort zählen - Page Count Algorithm Algorithmus für die Seitenzählung - Style Erscheinungsbild - Icons Only nur Symbole - Text Only nur Text - Text Alongside Icons Text neben Symbolen - Text Under Icons Text unter Icons - Text Position: Text Position: - Actions Befehle - Move Up Nach oben verschieben - Move Down Nach unten verschieben - Add Separator Trennlinie hinzufügen - Command Befehl - Shortcut Shortcut - Action Befehl - Check spelling as you type Rechtschreibung bei der Eingabe prüfen - Ignore words in UPPERCASE GROßSCHREIBUNG von Wörtern ignorieren - Ignore words with numbers Wörter mit Ziffern ignorieren - Language Sprache - - Add Hinzufügen - - Remove Entfernen - Personal Dictionary Persönliches Wörterbuch @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Keine unterstützte RTF-Datei. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Ende der Datei unerwartet erreicht. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Strg+Shift+Bild nach unten - Move Scenes Up Szenen nach oben verschieben - Ctrl+Shift+Up Strg+Shift+Up - Toggle Scene List Toggle Szene Liste - Shift+F4 Shift+F4 - Show scene list (%1) Szeneliste anzeigen (%1) - Hide scene list (%1) Szeneliste verstecken (%1) - Filter Filter - Move Scenes Down Szenen nach unten verschieben - Resize scene list Größe der Szeneliste ändern @@ -899,12 +723,6 @@ Session - - - - - - Default Standard @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Sitzungen verwalten - S&essions S&itzungen - New Neu - Duplicate Duplizieren - Rename Umbenennen - Delete Löschen - Switch To Wechseln zu - New Session Neue Sitzung - Duplicate Session Sitzung duplizieren - Rename Session Sitzung umbenennen - Question Frage - Delete selected session? Sitzung löschen? - Session name: Name der Sitzung: - Sorry Entschuldigung - The requested session name is already in use. Die gewünschte Sitzung wird derzeit benutzt. - &New... &Neu... - Ctrl+Shift+N Strg+Shift+N - &Manage... &Verwalten... - Ctrl+Shift+M Strg+Shift+V @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Leeren - Reset to Default Auf Standard zurücksetzen - - Shortcut: Shortcut: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Anführungszeichen werden ersetzt... - Please Wait Bitte warten @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Rechtschreibprüfung - &Add &Hinzufügen - &Ignore &Ignorieren - I&gnore All Alle I&gnorieren - &Change &Ändern - C&hange All Alle Ä&ndern - Not in dictionary: Nicht im Wörterbuch: - Change to: Ersetzen durch: - Checking spelling... Rechtschreibung prüfen ... - Cancel Abbrechen - Please wait Bitte warten - Continue checking at beginning of file? Prüfung am Dateianfang fortsetzen? - Spell check complete. Rechtschreibprüfung abgeschlossen. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symbole - Recently used symbols Zuletzt verwendete Symbole - All symbols Alle Symbole - Details Details - Name: Name: - Insert Einfügen @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blöcke - Scripts Skripte @@ -1156,7 +928,6 @@ Theme - Untitled %1 Unbenannt %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Name: - No Image Kein Bild - Tiled Gekachelt - - Centered Zentriert - - Stretched Gedehnt - Scaled Skaliert - Zoomed Zoom - Opacity: Deckkraft: - Position: Position: - Width: Breite: - Round Text Background Corners Runde Ecken des Text-Hintergrundes - - - Radius: Radius: - Blur Text Background Verschwommener Text-Hintergrund - Text Background Drop Shadow Schattenwurf des Text-Hintergrundes - Vertical Offset: Vertikaler Versatz: - Margins Ränder - Window: Fenster: - Page: Seite: - Indent first line Erste Zeile einrücken - Above: Darüber: - Below: Darunter: - Remove Entfernen - Edit Theme Thema bearbeiten - Window Background Fenster-Hintergrund - - Type: Stil: - - - - Color: Farbe: - Image: Bild: - - - - - - - - - - pixels Pixel - Left Links - Text Background Text-Hintergrund - Right Rechts - Text Text - Font: Schrift: - Misspelled: Schreibfehler: - Line Spacing Zeilenabstand - Single Einzeilig - 1.5 Lines 1,5zeilig - Double Zweizeilig - Proportional Proportional - Height: Höhe: - Paragraph Spacing Absatzabstände - Tab Width: Breite der Registerkarte: - New Theme Neues Thema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Themen - Default Standard - Bitter Skies - Enchantment - Gentle Blues Sanfter Blues - Old School Alte Schule - Space Dreams Weltraum-Träume - Spy Games - Tranquility - Writing Desk Schreibtisch - - New Neu - - Duplicate Duplizieren - Custom Benutzerdefiniert - Edit Bearbeiten - Delete Löschen - Import Importieren - Export Exportieren - Question Frage - Delete theme '%1'? Thema '%1' löschen? - - Themes (%1) Themen (%1) - Import Theme Thema importieren - Export Theme Thema exportieren @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Frage - Delete timer? Timer löschen? - <b>Words:</b> %L1 <b>Wörter:</b> %L1 - <b>Pages:</b> %L1 <b>Seiten:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Absätze:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Zeichen:</b> %L1 / %L2 - Set Delay Dauer einstellen - Set Time Uhrzeit einstellen - Delay: Dauer: - Time: Zeit: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Typ: - Memo: Notiz: - Edit Bearbeiten - Delete Löschen @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Kein Timer eingestellt @@ -1616,37 +1283,30 @@ TimerManager - Timers Timer - New Neu - Recent Letzter - Question Frage - Cancel editing timers? Timer einstellen abbrechen? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Themen werden geladen - Loading sounds Sounds werden geladen - - Untitled Unbenannt - Open File Datei öffnen - About FocusWriter Über FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Einfache Vollbild Textverarbeitung - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Herausgegeben unter der <a href=%1>GPL 3</a> Lizenz - Uses icons from the <a href=%1>Oxygen</a> icon theme Die Symbole entstammen dem <a href=%1>Oxygen</a> Symbol-Thema - Used under the <a href=%1>LGPL 3</a> license Unter Verwendung der <a href=%1>LGPL 3</a> Lizenz - - Characters: %L1 / %L2 Zeichen: %L1 / %L2 - - Pages: %L1 Seiten: %L1 - - Paragraphs: %L1 Absätze: %L1 - - Words: %L1 Wörter: %L1 - - Opening %1 Datei %1 wird geöffnet - (Untitled %1) (Unbenannt %1) - List all documents Alle Dokumente auflisten - Switch to Next Document Ins nächste Dokument übergehen - Switch to Previous Document Ins vorherige Dokument übergehen - Switch to First Document Ins erste Dokument übergehen - Switch to Last Document Ins letzte Dokument übergehen - Switch to Document %1 Ins Dokument %1 übergehen - Loading settings Einstellungen werden geladen - Emergency cache is not writable. Der Sicherheitsspeicher ist nicht beschreibbar. - - Warning Warnung - FocusWriter was not shut down cleanly. FocusWriter wurde nicht ordnungsgemäß beendet. - Restore from the emergency cache? Sicherheitskopie wiederherstellen? - Some files could not be opened. Einige Dateien konnten nicht geöffnet werden. - Some files were opened Read-Only. Einige Dateien wurden im schreibgeschützten Modus geöffnet. - '%1' is newer than the cached copy. '%1' ist aktueller als die Version im Zwischenspeicher. - Overwrite newer file? Neuere Datei überschreiben? - Save Changes? Änderungen speichern? - Save changes to the file '%1' before closing? Änderungen an der Datei '%1' vor dem Schließen speichern? - Your changes will be lost if you don't save them. Alle Änderungen gehen verloren, wenn diese nicht gespeichert werden. - Unable to load typewriter sounds. Tippgeräusche können nicht geladen werden. - &File &Datei - &New &Neu - &Open... &Öffnen... - Reloa&d Neuladen - &Save &Speichern - Save &As... Speichern &unter... - &Rename... &Umbenennen... - Save A&ll &Alles speichern - Manage Sessions Sitzungen verwalten - New Session Neue Sitzung - &Print... &Drucken... - Pa&ge Setup... Seiten&einrichtung... - &Close &Schließen - &Quit &Beenden - Ctrl+Q Strg+Q - &Edit &Bearbeiten - &Undo &Rückgängig - &Redo &Wiederholen - Cu&t A&usschneiden - &Copy K&opieren - &Paste Einf&ügen - Paste &Unformatted &Rohtext einfügen - Ctrl+Shift+V Strg+Shift+V - Select &All Alles Ausw&ählen - Select &Scene Szene auswählen - Ctrl+Shift+A Strg+Shift+A - Fo&rmat Fo&rmatieren - &Heading Über&schrift - Heading &1 Überschrift &1 - Heading &2 Überschrift &2 - Heading &3 Überschrift &3 - Heading &4 Heading &4 - Heading &5 Überschrift &5 - Heading &6 Heading &6 - &Normal &Normal - &Bold &Fett - &Italic &Kursiv - &Underline &Unterstrichen - Stri&kethrough Durch&gestrichen - Ctrl+K Strg+G - Sup&erscript &Hochgestellt - Ctrl+^ Strg+^ - &Subscript &Tiefgestellt - Ctrl+_ Strg+_ - Align &Left &Linksbündig - Ctrl+{ Strg+{ - Align &Center &Zentrieren - Ctrl+| Strg+| - Align &Right &Rechtsbündig - Ctrl+} Strg+} - Align &Justify &Blocksatz - Ctrl+J Strg+J - &Decrease Indent Zeileneinzug &verringern - Ctrl+< Strg+< - I&ncrease Indent &Zeile einrücken - Ctrl+> Strg+> - Le&ft to Right Block Block &linksbündig ausrichten - Ri&ght to Left Block Block &rechtbündig ausrichten - &Tools &Werkzeuge - &Find... &Suchen... - Find &Next &Weitersuchen - Find Pre&vious &Rückwärts suchen - &Replace... &Ersetzen... - Ctrl+R Strg+R - Smart &Quotes &Anführungszeichen - Update &Document &Dokument aktualisieren - Update Document Smart Quotes - Update &Selection Aus&wahl aktualisieren - Update Selection Smart Quotes - &Spelling... &Rechtschreibung... - F7 F7 - Set &Language... &Sprache einstellen... - &Timers... &Wecker... - S&ymbols... Symbole... - &Daily Progress &Täglicher Fortschritt - &Settings &Einstellungen - Show &Toolbar &Symbolleiste zeigen - Show &Menu Icons &Menu Icons anzeigen - F&ocused Text &Hervorgehobener Text - &Fullscreen &Vollbild - F11 F11 - Esc Esc - M&inimize M&inimieren - Ctrl+M Strg+M - &Themes... &Designs... - &Preferences... &Voreinstellungen... - Focus Off Fokus Aus - Focus One Line Fokus EIne Zeile - Focus Three Lines Fokus Drei Zeilen - &Paragraph &Absatz - Focus Paragraph Fokus Absatz - Ctrl+Shift+` Strg+Shift+` - &Help &Hilfe - Application &Language... &Sprache... - Some files were unsupported and could not be opened. Einige Dateien werden nicht unterstützt und können nicht geöffnet werden. - &Off &Aus - One &Line Eine Zeile - &Three Lines Drei Zeilen - &About &Über - About &Qt Über &Qt diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 79f1103a..6baa24be 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Κλείσιμο (%1) - Collapse Σύμπτυξη - Expand Ανάπτυξη @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Απόκρυψη Ειδοποίησης - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% απο %Ln λεπτο @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% απο %Ln λέξη @@ -51,7 +44,6 @@ - %Ln word(s) %Ln λέξη @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln λεπτο @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Καθημερινή πρόοδος - Longest streak Μεγαλύτερο σερί - Current streak Τρέχον σερί - N/A N/A - %n day(s) %n ημέρα @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% του ημερήσιου στόχου @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Ρύθμιση γλώσσας @@ -128,81 +109,62 @@ Document - (Untitled %1) (Χωρίς τίτλο %1) - %1 (Read-Only) %1 (μόνο για ανάγνωση) - - - - Sorry Λυπούμαστε - Unable to save '%1'. Δεν ήταν δυνατό να αποθηκευτεί το «%1». - Save File As Αποθήκευση Αρχείου Ως - - Unable to overwrite '%1'. Δεν ήταν δυνατό να αντικατασταθεί το «%1». - Rename File Μετονομασία Αρχείου - Unable to rename '%1'. Δεν ήταν δυνατό να μετονομαστεί το «%1». - Reload File? Επαναφόρτωση αρχείου; - Reload the file '%1' from disk? Επαναφόρτωση του αρχείου «%1» από τον δίσκο; - All unsaved changes will be lost. Όλες οι μη αποθηκευμένες αλλαγές θα χαθούν. - Reload Επαναφόρτωση - Untitled %1 Χωρίς τίτλο %1 - Question Ερώτηση - Saving as plain text will discard all formatting. Discard formatting? Η αποθήκευση σε τύπο απλού κειμένου θα απορρίψει όλη τη μορφοποίηση. Απόρριψη όλης της μορφοποίησης; @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Το Αρχείο Έχει Αλλάξει - The file '%1' was changed by another program. Το αρχείο %1 έχει αλλαχθεί από άλλο πρόγραμμα. - Do you want to reload the file? Θέλετε να επαναφορτώσετε το αρχείο; - Reload Επαναφόρτωση - Ignore Παράβλεψη - File Deleted Αρχείο Διεγράφη - The file %1 was deleted by another program. Το αρχείο «%1» διεγράφη από άλλο πρόγραμμα. - Do you want to save or close the file? Θέλετε να αποθηκεύσετε ή να κλείσετε το αρχείο; @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. @@ -261,67 +214,54 @@ FindDialog - Search for: Αναζήτηση για: - Replace with: Αντικατάσταση με: - Ignore case Χωρίς διάκριση πεζών/κεφαλαίων - Whole words only Μόνο ολόκληρες λέξεις - Regular expressions Κανονικές εκφράσεις - Search up Αναζήτηση πάνω - Search down Αναζήτηση κάτω - &Find &Εύρεση - &Replace &Αντικατάσταση - Replace &All Αντικατάσταση &Όλων - Find Εύρεση - Replace Αντικατάσταση - Replace %n instance(s)? Αντικατάσταση %n ευρήματος; @@ -329,19 +269,14 @@ - Question Ερώτηση - - Sorry Λυπούμαστε - - Phrase not found. Δεν βρέθηκε η φράση. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text Κείμενο OpenDocument - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Εμπλουτισμένο κείμενο - Plain Text Απλό κείμενο - All Files Όλα τα αρχεία - All Supported Files Όλα τα υποστηριζόμενα αρχεία @@ -387,17 +315,14 @@ Highlighter - Add Προσθήκη - Check Spelling... Ορθογραφικός Έλεγχος... - (No suggestions found) (Δεν βρέθηκαν προτάσεις) @@ -405,12 +330,10 @@ ImageButton - Open Image Άνοιγμα Εικόνας - Images(%1) Εικόνες (%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Επιλέξτε τη γλώσσα της εφαρμογής: - <System Language> <Γλώσσα Συστήματος> - Note Σημείωση - Please restart this application for the change in language to take effect. Επανεκκινήστε την εφαρμογή για να ισχύσει η αλλαγή γλώσσας. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Προτιμήσεις - General Γενικά - Statistics Στατιστικά - Toolbar Γραμμή Εργαλείων - Spell Checking Ορθογραφικός Έλεγχος - Select Dictionary Επιλογή Λεξικού - - Sorry Λυπούμαστε - Unable to open archive. Δεν ήταν δυνατό να ανοίξει η αρχειοθήκη. - The archive does not contain a usable dictionary. Η αρχειοθήκη δεν περιέχει αξιοποιήσιμο λεξικό. - - - - Question Ερώτηση - Shortcuts Συντομεύσεις - One or more shortcuts conflict. Do you wish to proceed? Μία ή περισσότερες συντομεύσεις συγκρούονται. Θέλετε να συνεχίσετε; - The dictionary "%1" already exists. Do you want to replace it? Το λεξικό «%1» υπάρχει ήδη. Θέλετε να αντικατασταθεί; - Daily Goal Ημερήσιος Στόχος - None Κανένας - Minutes: Λεπτά: - - Words: Λέξεις: - Editing Επεξεργασία - Always vertically center Πάντοτε κατακόρυφο κεντράρισμα - Block insertion cursor Παχύς δρομέας εισαγωγής - Smooth fonts Στρογγυλεμένες γραμματοσειρές - Typewriter sounds Ήχοι γραφομηχανής - Smart quotes: Έξυπνα εισαγωγικά: - Double Διπλά - Single Μονά - Scenes Σκηνές - Divider: Διαχωριστικό: - Saving Αποθήκευση - Automatically save changes Αυτόματη αποθήκευση αλλαγών - Remember cursor position Μνημόνευση θέσης δρομέα - Word count Αριθμός λέξεων - Page count Αριθμός σελίδων - Paragraph count Αριθμός παραγράφων - Character count Αριθμός χαρακτήρων - Characters: Χαρακτήρες: - Paragraphs: Παράγραφοι: - Word Count Algorithm Αλγόριθμος Καταμέτρησης Λέξεων - Reset daily progress for today to zero? Επαναφορά καθημερινής προόδου για σήμερα στο μηδέν; - Remove current dictionary? - Write byte order mark in plain text files Σήμανση εγγραφής σειράς byte σε αρχεία απλού κειμένου - Default format: Προεπιλεγμένη μορφή: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Επαναφορά Σήμερα - History Ιστορικό - Remember history Μνημόνευση ιστορικου - Show streaks Εμφάνιση λωρίδων - Minimum progress for streaks: Ελάχιστη πρόοδος για λωρίδες: - Detect word boundaries Εντοπισμός Ορίων Λέξεων - Divide character count by six Διαίρεση αριθμού χαρακτήρων διά του έξι - Count each letter as a word Καταμέτρηση κάθε γράμμα σαν μια λέξη - Page Count Algorithm Αλγόριθμος αριθμου σελίδων - Style Στυλ - Icons Only Μόνο Εικονίδια - Text Only Μόνο Κείμενο - Text Alongside Icons Κείμενο Πλάι στα Εικονίδια - Text Under Icons Κείμενο Κάτω από τα Εικονίδια - Text Position: Θέση Κειμένου: - Actions Ενέργειες - Move Up Μετακίνηση Πάνω - Move Down Μετακίνηση Κάτω - Add Separator Προσθήκη Διαχωριστικού - Command Εντολή - Shortcut Συντόμευση - Action Ενέργεια - Check spelling as you type Ορθογραφικός έλεγχος κατά την πληκτρολόγηση - Ignore words in UPPERCASE Παράβλεψη λέξεων σε ΚΕΦΑΛΑΙΑ - Ignore words with numbers Παράβλεψη λέξεων με αριθμούς - Language Γλώσσα - - Add Προσθήκη - - Remove Αφαίρεση - Personal Dictionary Προσωπικό Λεξικό @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Μη υποστηριζόμενο αρχείο RTF. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Απρόσμενη μετάβαση στο τέλος του αρχείου. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Κάτω - Move Scenes Up Μετακίνηση Σκηνών Πάνω - Ctrl+Shift+Up Ctrl+Shift+Πάνω - Toggle Scene List Εναλλαγή Λίστας Σκηνών - Shift+F4 Shift+F4 - Show scene list (%1) Εμφάνιση λίστας σκηνών (%1) - Hide scene list (%1) Απόκρυψη λίστας σκηνών (%1) - Filter Φιλτράρισμα - Move Scenes Down Μετακίνηση Σκηνών Κάτω - Resize scene list Αλλαγή μεγέθους λίστας σκηνών @@ -899,12 +723,6 @@ Session - - - - - - Default Προεπιλογή @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Διαχείριση Περιόδων Λειτουργίας - S&essions Π&ερίοδοι λειτουργίας - New Νέα - Duplicate Διπλότυπο - Rename Μετονομασία - Delete Διαγραφή - Switch To Εναλλαγή Σε - New Session Νέα Περίοδος Λειτουργίας - Duplicate Session Περιόδος λειτουργίας διπλότυπου - Rename Session Μετονομασία Περιόδου Λειτουργίας - Question Ερώτηση - Delete selected session? Να διαγραφή η επιλεγμένη περιόδου λειτουργίας; - Session name: Όνομα περιόδου λειτουργίας: - Sorry Λυπούμαστε - The requested session name is already in use. Αυτό το όνομα χρησιμοποιείται ήδη για άλλη περίοδο λειτουργίας. - &New... &Νέα... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Διαχείριση... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Εκκαθάριση - Reset to Default Επαναφορά στα Προκαθορισμένα - - Shortcut: Συντόμευση: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Αντικατάσταση εισαγωγικών... - Please Wait Παρακαλώ Περιμένετε @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Ορθογραφικός Έλεγχος - &Add &Προσθήκη - &Ignore Πα&ράβλεψη - I&gnore All Παράβλε&ψη Όλων - &Change &Αλλαγή - C&hange All Α&λλαγή Όλων - Not in dictionary: Δεν υπάρχει στο λεξικό: - Change to: Αλλαγή σε: - Checking spelling... Γίνεται έλεγχος ορθογραφίας... - Cancel Ακύρωση - Please wait Παρακαλώ Περιμένετε - Continue checking at beginning of file? Να συνεχιστεί ο έλεγχος από την αρχή του αρχείου; - Spell check complete. Ο ορθογραφικός έλεγχος ολοκληρώθηκε. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Σύμβολα - Recently used symbols Πρόσφατα σύμβολα - All symbols Όλα τα σύμβολα - Details Λεπτομέρειες - Name: Όνομα: - Insert Εισαγωγή @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Κουτάκια - Scripts Γραφές @@ -1156,7 +928,6 @@ Theme - Untitled %1 Χωρίς τίτλο %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Όνομα: - No Image Χωρίς Εικόνα - Tiled Επαναλαμβανόμενη - - Centered Κεντραρισμένη - - Stretched Τεντωμένη - Scaled Κλιμακωμένη - Zoomed Μεγεθυσμένη - Opacity: Αδιαφάνεια: - Position: Θέση: - Width: Πλάτος: - Round Text Background Corners Γύρος φόντου κειμένου γωνιών - - - Radius: Ακτίνα: - Blur Text Background Θόλωμα φόντου κειμένου - Text Background Drop Shadow Φόντος κειμένου προσπίπτουσα σκιά - Vertical Offset: Κάθετη Μετατόπιση: - Margins Περιθώρια: - Window: Παράθυρο: - Page: Σελίδα: - Indent first line Εσοχή πρώτης γραμμής - Above: Παραπάνω: - Below: Παρακάτω: - Remove Αφαίρεση - Edit Theme Επεξεργασία θέματος - Window Background Φόντος παραθύρου - - Type: Τύπος: - - - - Color: Χρώμα: - Image: Εικόνα: - - - - - - - - - - pixels pixel - Left Αριστερά - Text Background Φόντος κειμένου - Right Δεξιά - Text Κείμενο - Font: Γραμματοσειρά: - Misspelled: Ανορθογραφίες: - Line Spacing Απόσταση Γραμμών - Single Μονή - 1.5 Lines 1,5 Γραμμή - Double Διπλή - Proportional Αναλογική - Height: Ύψος: - Paragraph Spacing Απόσταση Παραγράφων - Tab Width: Πλάτος καρτέλας: - New Theme Νέο θέμα @@ -1399,115 +1110,90 @@ ThemeManager - Themes Θέματα - Default Προεπιλογή - Bitter Skies - Enchantment - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games - Tranquility - Writing Desk Writing Desk - - New Νέο - - Duplicate Διπλότυπο - Custom Προσαρμοσμένο - Edit Επεξεργασία - Delete Διαγραφή - Import Εισαγωγή - Export Εξαγωγή - Question Ερώτηση - Delete theme '%1'? Διαγραφή θέματος '%1'; - - Themes (%1) Θέματα (%1) - Import Theme Εισαγωγή Θέματος - Export Theme Εξαγωγή Θέματος @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Ερώτηση - Delete timer? Να διαγραφεί το χρονομέτρο; - <b>Words:</b> %L1 <b>Λέξεις:</b> %L1 - <b>Pages:</b> %L1 <b>Σελίδες:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Παράγραφοι:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Χαρακτήρες:</b> %L1 / %L2 - Set Delay Ορισμός Καθυστέρησης - Set Time Ορισμός Ώρας - Delay: Καθυστέρηση: - Time: Ώρα: - HH:mm:ss ΩΩ:λλ:δδ - Alarm Ειδοποίηση - Type: Τύπος: - Memo: Υπόμνημα: - Edit Επεξεργασία - Delete Διαγραφή @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss ΩΩ:λλ:δδ - No timers running Δεν λειτουργούν χρονόμετρα @@ -1616,37 +1283,30 @@ TimerManager - Timers Χρονόμετρα - New Νέο - Recent Πρόσφατα - Question Ερώτηση - Cancel editing timers? Να ακυρωθεί η επεξεργασία χρονομέτρων; - +HH:mm:ss +ΩΩ:λλ:δδ - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Φορτώνουν θέματα - Loading sounds Φορτώνουν ήχοι - - Untitled Χωρίς τίτλο - Open File Άνοιγμα Αρχείου - About FocusWriter Σχετικά με το FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Ένας απλός επεξεργαστής κειμένου πλήρης οθόνης - Copyright &copy; 2008-%1 Graeme Gott Πνευματική ιδιοκτησία του &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Κυκλοφορεί υπό την άδεια χρήσης <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Χρησιμοποιεί εικονίδια από το θέμα εικονιδίων <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Χρησιμοποιούνται υπό την άδεια χρήσης <a href=%1>LGPL 3</ a> - - Characters: %L1 / %L2 Χαρακτήρες: %L1 / %L2 - - Pages: %L1 Σελίδες: %L1 - - Paragraphs: %L1 Παράγραφοι: %L1 - - Words: %L1 Λέξεις: %L1 - - Opening %1 Ανοίγει το %1 - (Untitled %1) (Χωρίς τίτλο %1) - List all documents Λίστα όλων των εγγράφων - Switch to Next Document Μετάβαση στο Επόμενο Έγγραφο - Switch to Previous Document Μετάβαση στο Προηγούμενο Έγγραφο - Switch to First Document Μετάβαση στο Πρώτο Έγγραφο - Switch to Last Document Μετάβαση στο Τελευταίο Έγγραφο - Switch to Document %1 Μετάβαση στο Έγγραφο %1 - Loading settings Φορτώνουν ρυθμίσεις - Emergency cache is not writable. Δεν μπορεί να γίνει εγγραφή στην κρυφή μνήμη εκτάκτου ανάγκης. - - Warning Προειδοποίηση - FocusWriter was not shut down cleanly. Το FocusWriter δεν τερματίστηκε σωστά. - Restore from the emergency cache? Να γίνει επαναφορά από τη μνήμη εκτάκτου ανάγκης; - Some files could not be opened. Ορισμένα αρχεία δεν ήταν δυνατό να ανοιχτούν. - Some files were opened Read-Only. Ορισμένα αρχεία ανοίχτηκαν ως μόνο για ανάγνωση. - '%1' is newer than the cached copy. Το «%1» είναι νεότερο από το αντίγραφο στη μνήμη. - Overwrite newer file? Να αντικατασταθεί το νεότερο αρχείο; - Save Changes? Να αποθηκευτούν οι αλλαγές; - Save changes to the file '%1' before closing? Αποθήκευση αλλαγών στο αρχείο '%1' πριν το κλείσιμο; - Your changes will be lost if you don't save them. Οι αλλαγές σας θα χαθούν αν δεν τις αποθηκεύσετε. - Unable to load typewriter sounds. Δεν ήταν δυνατό να φορτώσουν οι ήχοι γραφομηχανής. - &File &Αρχείο - &New &Νέο - &Open... Άν&οιγμα... - Reloa&d Επαναφόρτωσ&η - &Save Αποθήκευ&ση - Save &As... Αποθήκευση &ως... - &Rename... &Μετονομασία... - Save A&ll Αποθήκευση ό&λων - Manage Sessions Διαχείριση Περιόδων Λειτουργίας - New Session Νέα Περίοδος Λειτουργίας - &Print... Εκτύ&πωση... - Pa&ge Setup... - &Close &Κλείσιμο - &Quit Έξο&δος - Ctrl+Q Ctrl+Q - &Edit &Επεξεργασία - &Undo &Αναίρεση - &Redo Ε&πανάληψη - Cu&t Απο&κοπή - &Copy Αν&τιγραφή - &Paste Επικό&λληση - Paste &Unformatted Επικόλληση &Χωρίς Μορφοποίηση - Ctrl+Shift+V Ctrl+Shift+V - Select &All Επιλογή Όλ&ων - Select &Scene Επιλογή &Σκηνής - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Μορφοποίηση - &Heading Επικεφαλίδα - Heading &1 Επικεφαλίδα &1 - Heading &2 Επικεφαλίδα &2 - Heading &3 Επικεφαλίδα &3 - Heading &4 Επικεφαλίδα &4 - Heading &5 Επικεφαλίδα &5 - Heading &6 Επικεφαλίδα &6 - &Normal Απλή - &Bold Έντ&ονα - &Italic &Πλάγια - &Underline &Υπογραμμισμένα - Stri&kethrough Διαγραμμέ&να - Ctrl+K Ctrl+K - Sup&erscript &Εκθέτης - Ctrl+^ Ctrl+^ - &Subscript &Δείκτης - Ctrl+_ Ctrl+_ - Align &Left Στοίχιση &Αριστερά - Ctrl+{ Ctrl+{ - Align &Center Στοίχιση στο Κέν&τρο - Ctrl+| Ctrl+| - Align &Right Στοίχιση &Δεξιά - Ctrl+} Ctrl+} - Align &Justify Πλήρης &Στοίχιση - Ctrl+J Ctrl+J - &Decrease Indent Μεί&ωση Εσοχής - Ctrl+< Ctrl+< - I&ncrease Indent Αύ&ξηση Εσοχής - Ctrl+> Ctrl+> - Le&ft to Right Block Δεξιόστ&ροφη Γραφή - Ri&ght to Left Block Αριστερόστρο&φη Γραφή - &Tools Εργα&λεία - &Find... Εύρε&ση... - Find &Next Εύρεση &Επόμενου - Find Pre&vious Εύρεση &Προηγούμενου - &Replace... &Αντικατάσταση... - Ctrl+R Ctrl+R - Smart &Quotes Έξυπνα Εισαγ&ωγικά - Update &Document Ενη&μέρωση εγγράφου - Update Document Smart Quotes - Update &Selection Ε&νημέρωση Επιλογής - Update Selection Smart Quotes - &Spelling... Ορ&θογραφία... - F7 F7 - Set &Language... Ρύθμιση γλώσσας... - &Timers... Χρονόμε&τρα... - S&ymbols... Σύμ&βολα... - &Daily Progress Καθημερινή πρόοδος - &Settings &Ρυθμίσεις - Show &Toolbar Εμφάνιση Γραμμής Εργα&λείων - Show &Menu Icons Εμφάνιση Εικονιδίων &Μενού - F&ocused Text Εστιασμένο &Κείμενο - &Fullscreen Πλήρης Οθό&νη - F11 F11 - Esc Esc - M&inimize Ελαχι&στοποίηση - Ctrl+M Ctrl+M - &Themes... &Θέματα... - &Preferences... Προ&τιμήσεις... - Focus Off Εστίαση Ανενεργή - Focus One Line Εστίαση Μίας Γραμμής - Focus Three Lines Εστίαση Τριών Γραμμών - &Paragraph &Παραγράφου - Focus Paragraph Εστίαση Παραγράφου - Ctrl+Shift+` - &Help &Βοήθεια - Application &Language... &Γλώσσα Εφαρμογής... - Some files were unsupported and could not be opened. Ορισμένα αρχεία δεν υποστηρίζονται και δεν ήταν δυνατό να ανοιχτούν. - &Off &Απενεργοποίηση - One &Line &Μία Γραμμή - &Three Lines &Τρεις Γραμμές - &About &Σχετικά - About &Qt &Σχετικά με το Qt diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 07ee0c01..5cdec35b 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -4,17 +4,14 @@ Alert - Close (%1) - Collapse - Expand @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert - Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% of %Ln minute @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% of %Ln word @@ -51,7 +44,6 @@ - %Ln word(s) %Ln word @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minute @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) %n day @@ -103,7 +88,6 @@ - %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal @@ -120,7 +102,6 @@ DictionaryDialog - Set Language @@ -128,81 +109,62 @@ Document - (Untitled %1) - %1 (Read-Only) - - - - Sorry - Unable to save '%1'. - Save File As - - Unable to overwrite '%1'. - Rename File - Unable to rename '%1'. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. - Reload - Untitled %1 - Question - Saving as plain text will discard all formatting. Discard formatting? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed - The file '%1' was changed by another program. - Do you want to reload the file? - Reload - Ignore - File Deleted - The file %1 was deleted by another program. - Do you want to save or close the file? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. @@ -261,67 +214,54 @@ FindDialog - Search for: - Replace with: - Ignore case - Whole words only - Regular expressions - Search up - Search down - &Find - &Replace - Replace &All - Find - Replace - Replace %n instance(s)? Replace %n instance? @@ -329,19 +269,14 @@ - Question - - Sorry - - Phrase not found. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -387,17 +315,14 @@ Highlighter - Add - Check Spelling... - (No suggestions found) @@ -405,12 +330,10 @@ ImageButton - Open Image - Images(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: - <System Language> - Note - Please restart this application for the change in language to take effect. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences - General - Statistics - Toolbar - Spell Checking - Select Dictionary - - Sorry - Unable to open archive. - The archive does not contain a usable dictionary. - - - - Question - Shortcuts - One or more shortcuts conflict. Do you wish to proceed? - The dictionary "%1" already exists. Do you want to replace it? - Daily Goal - None - Minutes: - - Words: - Editing - Always vertically center - Block insertion cursor - Smooth fonts - Typewriter sounds - Smart quotes: - Double - Single - Scenes - Divider: - Saving - Automatically save changes - Remember cursor position - Word count - Page count - Paragraph count - Character count - Characters: - Paragraphs: - Word Count Algorithm - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries - Divide character count by six - Count each letter as a word - Page Count Algorithm - Style - Icons Only - Text Only - Text Alongside Icons - Text Under Icons - Text Position: - Actions - Move Up - Move Down - Add Separator - Command - Shortcut - Action - Check spelling as you type - Ignore words in UPPERCASE - Ignore words with numbers - Language - - Add - - Remove - Personal Dictionary @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down - Move Scenes Up - Ctrl+Shift+Up - Toggle Scene List - Shift+F4 - Show scene list (%1) - Hide scene list (%1) - Filter - Move Scenes Down - Resize scene list @@ -899,12 +723,6 @@ Session - - - - - - Default @@ -912,97 +730,78 @@ SessionManager - Manage Sessions - S&essions - New - Duplicate - Rename - Delete - Switch To - New Session - Duplicate Session - Rename Session - Question - Delete selected session? - Session name: - Sorry - The requested session name is already in use. - &New... - Ctrl+Shift+N - &Manage... - Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear - Reset to Default - - Shortcut: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... - Please Wait @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling - &Add - &Ignore - I&gnore All - &Change - C&hange All - Not in dictionary: - Change to: - Checking spelling... - Cancel - Please wait - Continue checking at beginning of file? - Spell check complete. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols - Recently used symbols - All symbols - Details - Name: - Insert @@ -1143,12 +917,10 @@ SymbolsModel - Blocks - Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: - No Image - Tiled - - Centered - - Stretched - Scaled - Zoomed - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove - Edit Theme - Window Background - - Type: - - - - Color: - Image: - - - - - - - - - - pixels - Left - Text Background - Right - Text - Font: - Misspelled: - Line Spacing - Single - 1.5 Lines - Double - Proportional - Height: - Paragraph Spacing - Tab Width: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes - Default - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New - - Duplicate - Custom - Edit - Delete - Import - Export - Question - Delete theme '%1'? - - Themes (%1) - Import Theme - Export Theme @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 - Question - Delete timer? - <b>Words:</b> %L1 - <b>Pages:</b> %L1 - <b>Paragraphs:</b> %L1 - <b>Characters:</b> %L1 / %L2 - Set Delay - Set Time - Delay: - Time: - HH:mm:ss - Alarm - Type: - Memo: - Edit - Delete @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss - No timers running @@ -1616,37 +1283,30 @@ TimerManager - Timers - New - Recent - Question - Cancel editing timers? - +HH:mm:ss - %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes - Loading sounds - - Untitled - Open File - About FocusWriter - - FocusWriter - A simple fullscreen word processor - Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license - Uses icons from the <a href=%1>Oxygen</a> icon theme - Used under the <a href=%1>LGPL 3</a> license - - Characters: %L1 / %L2 - - Pages: %L1 - - Paragraphs: %L1 - - Words: %L1 - - Opening %1 - (Untitled %1) - List all documents - Switch to Next Document - Switch to Previous Document - Switch to First Document - Switch to Last Document - Switch to Document %1 - Loading settings - Emergency cache is not writable. - - Warning - FocusWriter was not shut down cleanly. - Restore from the emergency cache? - Some files could not be opened. - Some files were opened Read-Only. - '%1' is newer than the cached copy. - Overwrite newer file? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. - &File - &New - &Open... - Reloa&d - &Save - Save &As... - &Rename... - Save A&ll - Manage Sessions - New Session - &Print... - Pa&ge Setup... - &Close - &Quit - Ctrl+Q - &Edit - &Undo - &Redo - Cu&t - &Copy - &Paste - Paste &Unformatted - Ctrl+Shift+V - Select &All - Select &Scene - Ctrl+Shift+A - Fo&rmat - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold - &Italic - &Underline - Stri&kethrough - Ctrl+K - Sup&erscript - Ctrl+^ - &Subscript - Ctrl+_ - Align &Left - Ctrl+{ - Align &Center - Ctrl+| - Align &Right - Ctrl+} - Align &Justify - Ctrl+J - &Decrease Indent - Ctrl+< - I&ncrease Indent - Ctrl+> - Le&ft to Right Block - Ri&ght to Left Block - &Tools - &Find... - Find &Next - Find Pre&vious - &Replace... - Ctrl+R - Smart &Quotes - Update &Document - Update Document Smart Quotes - Update &Selection - Update Selection Smart Quotes - &Spelling... - F7 - Set &Language... - &Timers... - S&ymbols... - &Daily Progress - &Settings - Show &Toolbar - Show &Menu Icons - F&ocused Text - &Fullscreen - F11 - Esc - M&inimize - Ctrl+M - &Themes... - &Preferences... - Focus Off - Focus One Line - Focus Three Lines - &Paragraph - Focus Paragraph - Ctrl+Shift+` - &Help - Application &Language... - Some files were unsupported and could not be opened. - &Off - One &Line - &Three Lines - &About - About &Qt diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 93360e37..658d77c1 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Close (%1) - Collapse Collapse - Expand Expand @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Dismiss Alert - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) @@ -43,7 +37,6 @@ - %1% of %Ln word(s) @@ -51,7 +44,6 @@ - %Ln word(s) @@ -59,7 +51,6 @@ - %Ln minute(s) @@ -67,7 +58,6 @@ - 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) @@ -103,7 +88,6 @@ - %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal @@ -120,7 +102,6 @@ DictionaryDialog - Set Language @@ -128,81 +109,62 @@ Document - (Untitled %1) (Untitled %1) - %1 (Read-Only) - - - - Sorry Sorry - Unable to save '%1'. Unable to save '%1'. - Save File As Save File As - - Unable to overwrite '%1'. Unable to overwrite '%1'. - Rename File Rename File - Unable to rename '%1'. Unable to rename '%1'. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. All unsaved changes will be lost. - Reload Reload - Untitled %1 Untitled %1 - Question Question - Saving as plain text will discard all formatting. Discard formatting? Saving as plain-text will discard all formatting. Discard formatting? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed File Changed - The file '%1' was changed by another program. - Do you want to reload the file? Do you want to reload the file? - Reload Reload - Ignore Ignore - File Deleted File Deleted - The file %1 was deleted by another program. The file %1 was deleted by another programme. - Do you want to save or close the file? Do you want to save or close the file? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Unable to open archive. @@ -261,67 +214,54 @@ FindDialog - Search for: Search for: - Replace with: Replace with: - Ignore case Ignore case: - Whole words only Whole words only - Regular expressions Regular expressions - Search up Search up - Search down Search down - &Find &Find - &Replace &Replace - Replace &All Replace &All - Find Find - Replace Replace - Replace %n instance(s)? Replace %n instance? @@ -329,19 +269,14 @@ - Question Question - - Sorry Sorry - - Phrase not found. Phrase not found. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -387,17 +315,14 @@ Highlighter - Add Add - Check Spelling... Check Spelling... - (No suggestions found) (No suggestions found) @@ -405,12 +330,10 @@ ImageButton - Open Image Open Image - Images(%1) Images(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Select application language: - <System Language> <System Language> - Note Note - Please restart this application for the change in language to take effect. Please restart the application for the language change to take effect. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Unable to open archive. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferences - General General - Statistics Statistics - Toolbar Toolbar - Spell Checking Spell Checking - Select Dictionary Select Dictionary - - Sorry Sorry - Unable to open archive. Unable to open archive. - The archive does not contain a usable dictionary. The archive does not contain a usable dictionary. - - - - Question Question - Shortcuts Shortcuts - One or more shortcuts conflict. Do you wish to proceed? One or more shortcuts conflict. Do you wish to proceed? - The dictionary "%1" already exists. Do you want to replace it? The dictionary "%1" already exists. Do you want to replace it? - Daily Goal Daily Goal - None None - Minutes: Minutes: - - Words: Words: - Editing Editing: - Always vertically center Always centre vertically - Block insertion cursor Block insertion cursor - Smooth fonts Smooth fonts - Typewriter sounds Typewriter sounds - Smart quotes: Smart quotes: - Double Double - Single Single - Scenes Scenes - Divider: Divider: - Saving Saving - Automatically save changes Automatically save changes - Remember cursor position Remember cursor position - Word count Word count - Page count Page count - Paragraph count Paragraph count - Character count Character count - Characters: Characters: - Paragraphs: Paragraphs: - Word Count Algorithm Word Count Algorithm - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries Detect word boundaries - Divide character count by six Divide character count by six - Count each letter as a word - Page Count Algorithm - Style Style - Icons Only Icons Only - Text Only Text Only - Text Alongside Icons Text Alongside Icons - Text Under Icons Text Under Icons - Text Position: Text Position: - Actions Actions - Move Up Move Up - Move Down Move Down - Add Separator Add Separator - Command Command - Shortcut Shortcut - Action Action - Check spelling as you type Check spelling as you type - Ignore words in UPPERCASE Ignore words in UPPERCASE - Ignore words with numbers Ignore words with numbers - Language Language - - Add Add - - Remove Remove - Personal Dictionary Personal Dictionary @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Move Scenes Up - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Toggle Scene List - Shift+F4 Shift+F4 - Show scene list (%1) Show scene list (%1) - Hide scene list (%1) Hide scene list (%1) - Filter Filter - Move Scenes Down Move Scenes Down - Resize scene list Resize scene list @@ -899,12 +723,6 @@ Session - - - - - - Default Default @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Manage Sessions - S&essions S&essions - New New - Duplicate - Rename Rename - Delete Delete - Switch To Switch To - New Session New Session - Duplicate Session - Rename Session Rename Session - Question Question - Delete selected session? Delete selected session? - Session name: Session name: - Sorry Sorry - The requested session name is already in use. The requested session name is already in use. - &New... &New... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Manage... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Clear - Reset to Default Reset to Default - - Shortcut: Shortcut: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Replacing quotation marks... - Please Wait Please Wait @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Check Spelling - &Add &Add - &Ignore &Ignore - I&gnore All I&gnore All - &Change &Change - C&hange All C&hange All - Not in dictionary: Not in dictionary: - Change to: Change to: - Checking spelling... Checking spelling... - Cancel Cancel - Please wait Please wait - Continue checking at beginning of file? - Spell check complete. Spell check complete @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symbols - Recently used symbols Recently used symbols - All symbols All symbols - Details Details - Name: Name: - Insert Insert @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocks - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Untitled %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Name: - No Image No image - Tiled Tiled - - Centered Centred - - Stretched Stretched - Scaled Scaled - Zoomed Zoomed - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Remove - Edit Theme - Window Background - - Type: Type: - - - - Color: Colour: - Image: Image: - - - - - - - - - - pixels pixels - Left Left - Text Background - Right Right - Text Text - Font: Font: - Misspelled: Misspelt: - Line Spacing Line Spacing - Single Single - 1.5 Lines 1.5 Lines - Double Double - Proportional Proportional - Height: - Paragraph Spacing Paragraph Spacing - Tab Width: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes Themes - Default Default - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New New - - Duplicate - Custom - Edit Edit - Delete Delete - Import Import - Export Export - Question Question - Delete theme '%1'? - - Themes (%1) - Import Theme Import Theme - Export Theme Export Theme @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Question - Delete timer? Delete timer? - <b>Words:</b> %L1 <b>Words:</b> %L1 - <b>Pages:</b> %L1 <b>Pages:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragraphs:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Characters:</b> %L1 / %L2 - Set Delay Set Delay - Set Time Set Time - Delay: Delay: - Time: Time: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Type: - Memo: Note: - Edit Edit - Delete Delete @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running No timers running @@ -1616,37 +1283,30 @@ TimerManager - Timers Timers - New New - Recent Recent - Question Question - Cancel editing timers? Cancel editing timers? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Loading themes - Loading sounds Loading sounds - - Untitled Untitled - Open File Open File - About FocusWriter About FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor A simple full-screen word processor - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> licence - Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> licence - - Characters: %L1 / %L2 Characters: %L1 / %L2 - - Pages: %L1 Pages: %L1 - - Paragraphs: %L1 Paragraphs: %L1 - - Words: %L1 Words: %L1 - - Opening %1 Opening %1 - (Untitled %1) (Untitled %1) - List all documents - Switch to Next Document Switch to Next Document - Switch to Previous Document Switch to Previous Document - Switch to First Document Switch to First Document - Switch to Last Document Switch to Last Document - Switch to Document %1 Switch to Document %1 - Loading settings Loading settings - Emergency cache is not writable. Emergency cache is not writable. - - Warning Warning - FocusWriter was not shut down cleanly. FocusWriter was not shut down cleanly. - Restore from the emergency cache? Restore from the emergency cache? - Some files could not be opened. Some files could not be opened. - Some files were opened Read-Only. Some files were opened as Read-Only. - '%1' is newer than the cached copy. '%1' is newer than the cached copy. - Overwrite newer file? Overwrite the newer file? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. Unable to load typewriter sounds. - &File &File - &New &New - &Open... &Open... - Reloa&d Reloa&d - &Save &Save - Save &As... Save &As... - &Rename... &Rename... - Save A&ll Save A&ll - Manage Sessions Manage Sessions - New Session New Session - &Print... &Print... - Pa&ge Setup... - &Close &Close - &Quit &Quit - Ctrl+Q Ctrl+Q - &Edit &Edit - &Undo &Undo - &Redo &Redo - Cu&t Cu&t - &Copy &Copy - &Paste &Paste - Paste &Unformatted Paste &Unformatted - Ctrl+Shift+V Ctrl+Shift+V - Select &All Select &All - Select &Scene Select &Scene - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmat - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold &Bold - &Italic &Italic - &Underline &Underline - Stri&kethrough Stri&kethough - Ctrl+K Ctrl+K - Sup&erscript Sup&erscript - Ctrl+^ Ctrl+^ - &Subscript &Subscript - Ctrl+_ Ctrl+_ - Align &Left Align &Left - Ctrl+{ Ctrl+{ - Align &Center Align &Centre - Ctrl+| Ctrl+| - Align &Right Align &Right - Ctrl+} Ctrl+} - Align &Justify Align &Justify - Ctrl+J Ctrl+J - &Decrease Indent &Decrease Indent - Ctrl+< Ctrl+< - I&ncrease Indent I&ncrease Indent - Ctrl+> Ctrl+> - Le&ft to Right Block Le&ft to Right Block - Ri&ght to Left Block Ri&ght to Left Block - &Tools &Tools - &Find... &Find... - Find &Next Find &Next - Find Pre&vious Find Pre&vious - &Replace... &Replace... - Ctrl+R Ctrl+R - Smart &Quotes Smart &Quotes - Update &Document Update &Document - Update Document Smart Quotes - Update &Selection Update &Selection - Update Selection Smart Quotes - &Spelling... &Spelling... - F7 F7 - Set &Language... - &Timers... &Timers... - S&ymbols... S&ymbols... - &Daily Progress - &Settings &Settings - Show &Toolbar Show &Toolbar - Show &Menu Icons Show &Menu Icons - F&ocused Text F&ocused Text - &Fullscreen &Full-screen - F11 F11 - Esc Esc - M&inimize M&inimise - Ctrl+M Ctrl+M - &Themes... &Themes... - &Preferences... &Preferences... - Focus Off Focus Off - Focus One Line Focus One Line - Focus Three Lines Focus Three Lines - &Paragraph &Paragraph - Focus Paragraph Focus Paragraph - Ctrl+Shift+` - &Help &Help - Application &Language... Application &Language... - Some files were unsupported and could not be opened. Some files are unsupported and could not be opened. - &Off &Off - One &Line One &Line - &Three Lines &Three Lines - &About &About - About &Qt About &Qt diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index f99b01c4..f0bdc45c 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Fermi (%1) - Collapse Maletendi - Expand Etendi @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Forsendi Averton - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% de %Ln minuto @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% de %Ln vorto @@ -51,7 +44,6 @@ - %Ln word(s) %Ln vorto @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuto @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Ĉiutaga Progreso - Longest streak Plej longa serio - Current streak Aktuala serio - N/A N-A - %n day(s) %n tago @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% de ĉiutaga celo @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Agordi Lingvon @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sentitole %1) - %1 (Read-Only) %1 (Nurlegebla) - - - - Sorry Pardonu - Unable to save '%1'. Ne eblis konservi '%1'. - Save File As Konservi dosieron kiel... - - Unable to overwrite '%1'. Ne eblis anstataŭigi '%1'. - Rename File Renomi Dosieron - Unable to rename '%1'. Ne eblis renomi '%1'. - Reload File? Reŝargi la Dosieron? - Reload the file '%1' from disk? Reŝargi la dosieron '%1' el disko? - All unsaved changes will be lost. Ĉiuj nekonservitaj ŝanĝoj perdiĝos. - Reload Reŝargi - Untitled %1 Sentitole %1 - Question Demando - Saving as plain text will discard all formatting. Discard formatting? Konservi kiel plata teksto ne konservos ĉiun tekstaranĝon. Ne konservu tekstaranĝon? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Dosiero Ŝanĝiĝis - The file '%1' was changed by another program. La dosiero '%1' ŝanĝiĝis de alia programaro. - Do you want to reload the file? Ĉu vi volas reŝargi la dosieron? - Reload Reŝargi - Ignore Malatenti - File Deleted Dosiero Foriĝis - The file %1 was deleted by another program. La dosiero %1 foriĝis de alia programaro. - Do you want to save or close the file? Ĉu vi volas konservi aŭ fermi la dosieron? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Ne eblis malfermi arĥivon. @@ -261,67 +214,54 @@ FindDialog - Search for: Serĉi por: - Replace with: Anstataŭigi kun: - Ignore case Malatenti usklon - Whole words only Nur tutaj vortoj - Regular expressions Regulesprimoj - Search up Serĉi supren - Search down Serĉi malsupren - &Find &Trovi - &Replace &Anstataŭigi - Replace &All Anstataŭigi ĉiu&jn - Find Trovi - Replace Anstataŭigi - Replace %n instance(s)? Anstataŭigi %n aperon? @@ -329,19 +269,14 @@ - Question Demando - - Sorry Pardonu - - Phrase not found. Frazero ne troviĝis. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Teksto - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Plata Teksto - All Files Ĉiuj Dosieroj - All Supported Files Ĉiuj Subtenataj Dosieroj @@ -387,17 +315,14 @@ Highlighter - Add Aldoni - Check Spelling... Kontroli Literumadon... - (No suggestions found) (Ne sugestoj troviĝis) @@ -405,12 +330,10 @@ ImageButton - Open Image Malfermi Bildon - Images(%1) Bildoj(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Elekti lingvon de aplikaĵo: - <System Language> <Lingvo de Sistemo> - Note Noto - Please restart this application for the change in language to take effect. Bonvolu relanĉi ĉi tiun aplikaĵon por la lingva ŝanĝo efiki. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Ne eblis malfermi arĥivon. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Agordoj - General Ĝenerale - Statistics Statistiko - Toolbar Ilobreto - Spell Checking Literumada Kontrolo - Select Dictionary Elekti Vortaron - - Sorry Pardonu - Unable to open archive. Ne eblis malfermi arĥivon. - The archive does not contain a usable dictionary. La arĥivo ne enhavas uzeblan vortaron. - - - - Question Demando - Shortcuts Fulmoklavoj - One or more shortcuts conflict. Do you wish to proceed? Unu aŭ pluraj fulmoklavoj konfliktas. Ĉu vi volas daŭri? - The dictionary "%1" already exists. Do you want to replace it? La vortaro "%1" jam ekzistas. Ĉu vi volas anstataŭigi ĝin? - Daily Goal Ĉiutaga Celo - None Nenio - Minutes: Minutoj: - - Words: Vortoj: - Editing Redaktado - Always vertically center Ĉiam vertikale centri - Block insertion cursor Bloka enmeta kursoro - Smooth fonts Glataj tajparoj - Typewriter sounds Skribmaŝinaj sonoj - Smart quotes: Inteligentaj citiloj: - Double Duoble - Single Unuoble - Scenes Scenoj - Divider: Dividanto: - Saving Konservante - Automatically save changes Aŭtomate konservi ŝanĝojn - Remember cursor position Memori kursoran pozicion - Word count Vortnombrado - Page count Paĝnombrado - Paragraph count Alinenombrado - Character count Signonombrado - Characters: Signoj: - Paragraphs: Alineoj: - Word Count Algorithm Vortnombrada Algoritmo - Reset daily progress for today to zero? Rekomencigi ĉiutagan progreson por hodiaŭ? - Remove current dictionary? - Write byte order mark in plain text files Skribi bajtordo-marko en platatekstajn dosierojn - Default format: Defaŭlta dosierformo: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Rekomencigi Hodiaŭ - History Historio - Remember history Memori historion - Show streaks Montri seriojn - Minimum progress for streaks: Minimuma progreso por serioj: - Detect word boundaries Detekti vortlimojn - Divide character count by six Dividi signonombradon per ses - Count each letter as a word Nombri ĉiun literon kiel vorton - Page Count Algorithm Paĝnombrada Algoritmo - Style Stilo - Icons Only Nur Bildsimboloj - Text Only Nur Teksto - Text Alongside Icons Teksto Flanke de Bildsimboloj - Text Under Icons Teksto Malsupre de Bildsignoj - Text Position: Pozicio de Teksto - Actions Agoj - Move Up Movi Supren - Move Down Movi Malsupren - Add Separator Aldoni Apartigilon - Command Komando - Shortcut Fulmoklavo - Action Ago - Check spelling as you type Kontroli literumadon dum vi tajpas - Ignore words in UPPERCASE Malatenti vortojn da MAJUSKLOJ - Ignore words with numbers Malatenti vortojn kun numeroj - Language Lingvo - - Add Aldoni - - Remove Forigi - Personal Dictionary Persona Vortaro @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Ne subtenata RTF dosiero. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Neatendite atingis dosierfinon. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Malsupren - Move Scenes Up Movi Scenojn Supren - Ctrl+Shift+Up Ctrl+Shift+Supren - Toggle Scene List Baskuligi Liston da Scenoj - Shift+F4 Shift+F4 - Show scene list (%1) Montri liston da scenoj (%1) - Hide scene list (%1) Kaŝi liston da scenoj (%1) - Filter Filtri - Move Scenes Down Movi Scenojn Malsupren - Resize scene list Regrandigi liston da scenoj @@ -899,12 +723,6 @@ Session - - - - - - Default Defaŭlto @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Administri Seancojn - S&essions S&eancoj - New Nova - Duplicate Duobligi - Rename Renomi - Delete Forigi - Switch To Ŝanĝi Al - New Session Nova seanco - Duplicate Session Duobligi Seancon - Rename Session Renomi Seancon - Question Demando - Delete selected session? Forigi elektitan seancon? - Session name: Seanca nomo: - Sorry Pardonu - The requested session name is already in use. La petita seanca nomo estas jam uzata. - &New... &Nova... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Administri... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Vakigi - Reset to Default Rekomencigi Defaŭlten - - Shortcut: Fulmoklavo: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Anstataŭigante citilojn... - Please Wait Bonvolu Atendi @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Kontroli Literumadon - &Add &Aldoni - &Ignore &Malatenti - I&gnore All Malatenti ĉ&iujn - &Change Ŝa&nĝi - C&hange All Ŝanĝi ĉiu&jn - Not in dictionary: Ne en vortaro: - Change to: Ŝanĝi al: - Checking spelling... Kontrolante literumadon... - Cancel Nuligi - Please wait Bonvolu atendi - Continue checking at beginning of file? Daŭri kontroli dekomence? - Spell check complete. Literumada kontrolo finfaris. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Simboloj - Recently used symbols Lastatempe uzitaj simboloj - All symbols Ĉiuj simboloj - Details Detaloj - Name: Nomo: - Insert Enmeto @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blokoj - Scripts Skriboj @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sentitole %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nomo: - No Image Neniu Bildo - Tiled Kahelita - - Centered Centrita - - Stretched Streĉita - Scaled Skalita - Zoomed Zomita - Opacity: Opakeco: - Position: Pozicio: - Width: Larĝo: - Round Text Background Corners Rondaj Tekstfonaj Anguloj - - - Radius: Duondiametro: - Blur Text Background Malfokusi Tekstfonon - Text Background Drop Shadow Tekstfona Ĵetita Ombro - Vertical Offset: Vertikala Deŝovo: - Margins Marĝenoj - Window: Fenestro: - Page: Paĝo: - Indent first line Krei krommarĝenon sur la unua lineo - Above: Supre: - Below: Malsupre: - Remove Forigi - Edit Theme Redakti Etoson - Window Background Fenestra Fono - - Type: Tipo: - - - - Color: Koloro: - Image: Bildo: - - - - - - - - - - pixels bilderoj - Left Maldekstre - Text Background Tekstfono - Right Dekstre - Text Teksto - Font: Tajparo: - Misspelled: Misortografiita: - Line Spacing Interlinea Distanco - Single Unuoble - 1.5 Lines 1.5 Lineoj - Double Duoble - Proportional Proporcie - Height: Alto: - Paragraph Spacing Interalinea Distanco - Tab Width: Larĝo de Tabo: - New Theme Nova etoso @@ -1399,115 +1110,90 @@ ThemeManager - Themes Etosoj - Default Defaŭlto - Bitter Skies - Enchantment - Gentle Blues Mola Bluso - Old School Malnoveca stilo - Space Dreams Kosmaj Sonĝoj - Spy Games - Tranquility - Writing Desk Skribtablo - - New Nov - - Duplicate Duobligi - Custom Propra - Edit Redakti - Delete Forigi - Import Enporti - Export Elporti - Question Demando - Delete theme '%1'? Forigi etoson '%1'? - - Themes (%1) Etosoj (%1) - Import Theme Elporti Etoson - Export Theme Elporti Etoson @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Demando - Delete timer? Forigi tempmezurilon? - <b>Words:</b> %L1 <b>Vortoj:</b> %L1 - <b>Pages:</b> %L1 <b>Paĝoj:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Alineoj:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Signoj:</b> %L1 / %L2 - Set Delay Agordi Prokraston - Set Time Agordi Tempon - Delay: Prokrasto: - Time: Tempo: - HH:mm:ss HH:mm:ss - Alarm Alarmo - Type: Tipo: - Memo: Noto: - Edit Redakti - Delete Forigi @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Neniu funkcianta tempmezurilo @@ -1616,37 +1283,30 @@ TimerManager - Timers Tempmezuriloj - New Nova - Recent Lastatempe - Question Demando - Cancel editing timers? Rezigni redakton de tempmezuriloj? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Ŝargante etosojn - Loading sounds Ŝargante sonojn - - Untitled Sentitole - Open File Malfermi Dosieron - About FocusWriter Pri FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Simpla tutekrana tekstoprilaborilo - Copyright &copy; 2008-%1 Graeme Gott Kopirajto &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Eldonita per la <a href=%1>GPL 3</a> permesilo - Uses icons from the <a href=%1>Oxygen</a> icon theme Uzas bildsimbolojn de la <a href=%1>Oxygen</a> bildsimbola etoso - Used under the <a href=%1>LGPL 3</a> license Uzata per la <a href=%1>LGPL 3</a> permesilo - - Characters: %L1 / %L2 Signoj: %L1 / %L2 - - Pages: %L1 Paĝoj: %L1 - - Paragraphs: %L1 Alineoj: %L1 - - Words: %L1 Vortoj: %1 - - Opening %1 Malfermante %1 - (Untitled %1) (Sentitole %1) - List all documents Listi ĉiujn dokumentojn - Switch to Next Document Ŝanĝi al Sekva Dokumento - Switch to Previous Document Ŝanĝi al Antaŭa Dokumento - Switch to First Document Ŝanĝi al Unua Dokumento - Switch to Last Document Ŝanĝi al Lasta Dokumento - Switch to Document %1 Ŝanĝi al Dokumento %1 - Loading settings Ŝargante agordojn - Emergency cache is not writable. Kriza kaŝmemoro ne skribeblas. - - Warning Averto - FocusWriter was not shut down cleanly. FocusWriter ne malŝatis pure. - Restore from the emergency cache? Restaŭri de la kriza kaŝmemoro? - Some files could not be opened. Ne eblis malfermi kelkajn dosierojn. - Some files were opened Read-Only. Kelkaj dosieroj malfermis nurlegeble. - '%1' is newer than the cached copy. '%1' estas plinova ol la kaŝmemorita kopio. - Overwrite newer file? Anstataŭigi la novan dosieron? - Save Changes? Konservi Ŝanĝojn? - Save changes to the file '%1' before closing? Konservi ŝanĝojn en la dosieron '%1' antaŭ fermi? - Your changes will be lost if you don't save them. Viaj ŝanĝoj estos perditaj, se vi ne konservas ilin. - Unable to load typewriter sounds. Ne eblis ŝargi skribmaŝinajn sonojn. - &File &Dosiero - &New &Nova - &Open... &Malfermi... - Reloa&d Reŝar&gi - &Save &Konservi - Save &As... Konservi kie&l... - &Rename... &Renomi... - Save A&ll Konservi ĉiu&jn - Manage Sessions Administri Seancojn - New Session Nova seanco - &Print... &Presi... - Pa&ge Setup... - &Close &Fermi... - &Quit Ĉ&esi - Ctrl+Q Ctrl+Q - &Edit &Redakti - &Undo &Malfari - &Redo &Refari - Cu&t E&tondi - &Copy &Kopii - &Paste E&nmeti - Paste &Unformatted Enmeti sen&aranĝe - Ctrl+Shift+V Ctrl+Shift+V - Select &All Elekti ĉi&on - Select &Scene Elekti &scenon - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Aranĝo - &Heading &Titolo - Heading &1 Titolo &1 - Heading &2 Titolo &2 - Heading &3 Titolo &3 - Heading &4 Titolo &4 - Heading &5 Titolo &5 - Heading &6 Titolo &6 - &Normal &Normala - &Bold &Grasa - &Italic K&ursiva - &Underline Subst&reki - Stri&kethrough Trast&reki - Ctrl+K Ctrl+K - Sup&erscript Su&pra indico - Ctrl+^ Ctrl+^ - &Subscript Su&ba indico - Ctrl+_ Ctrl+_ - Align &Left Ĝisrandigi &maldekstren - Ctrl+{ Ctrl+{ - Align &Center &Centrigi - Ctrl+| Ctrl+| - Align &Right Ĝisrandigi &dekstren - Ctrl+} Ctrl+} - Align &Justify &Ĝisrandigi - Ctrl+J Ctrl+J - &Decrease Indent Ma&lgrandigi krommarĝenon - Ctrl+< Ctrl+< - I&ncrease Indent Grandigi Krommarĝenon - Ctrl+> Ctrl+> - Le&ft to Right Block Demaldekstra Bloko - Ri&ght to Left Block Dedekstra blo&ko - &Tools &Iloj - &Find... &Trovi... - Find &Next Trovi &sekve - Find Pre&vious Tro&vi antaŭe - &Replace... &Anstataŭigi... - Ctrl+R Ctrl+R - Smart &Quotes Inteligentaj Citiloj - Update &Document Ĝisdatigi Dokumenton - Update Document Smart Quotes - Update &Selection Ĝisdatigi Elekton - Update Selection Smart Quotes - &Spelling... Literumado... - F7 F7 - Set &Language... Agordi &lingvon... - &Timers... Tempomezuriloj... - S&ymbols... Simboloj - &Daily Progress Ĉiutaga Progreso - &Settings Agordoj - Show &Toolbar Montri Ilobreton - Show &Menu Icons Montri Menuajn Bildsimbolojn - F&ocused Text Fokusita Teksto - &Fullscreen Tutekrane - F11 F11 - Esc Esc - M&inimize Plejetigi - Ctrl+M Ctrl+M - &Themes... Etosoj... - &Preferences... A&gordoj... - Focus Off Ne Fokuso - Focus One Line Unulinea Fokuso - Focus Three Lines Trilinea Fokuso - &Paragraph Alineo - Focus Paragraph Fokusi Alineon - Ctrl+Shift+` - &Help &Helpo - Application &Language... &Lingvo de la aplikaĵo... - Some files were unsupported and could not be opened. Kelkaj dosieroj ne estis subtenitaj kaj ne povis malfermiĝi. - &Off Neniu - One &Line Unu Lineo - &Three Lines Tri Lineo - &About &Pri - About &Qt Pri &Qt diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 25b8dca3..e83a5546 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Cerrar (%1) - Collapse Contraer - Expand Expandir @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Desactivar alerta - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% de %Ln minuto @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% de %Ln palabra @@ -51,7 +44,6 @@ - %Ln word(s) %Ln palabra @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuto @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progreso diario - Longest streak - Current streak - N/A N/A - %n day(s) %n día @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% de meta diaria @@ -120,7 +102,6 @@ DictionaryDialog - Set Language @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sin título %1) - %1 (Read-Only) - - - - Sorry Aviso - Unable to save '%1'. No se puede guardar «%1». - Save File As Guardar archivo como - - Unable to overwrite '%1'. No se puede sobrescribir «%1». - Rename File Renombrar el archivo - Unable to rename '%1'. No se puede renombrar «%1». - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. Se perderán todos los cambios no guardados. - Reload Volver a cargar - Untitled %1 Sin título %1 - Question Confirmación - Saving as plain text will discard all formatting. Discard formatting? Al guardar como texto plano se descartarán todos los cambios de formato. ¿Desea continuar? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Archivo modificado - The file '%1' was changed by another program. - Do you want to reload the file? ¿Desea volver a cargarlo? - Reload Volver a cargar - Ignore Ignorar - File Deleted Archivo eliminado - The file %1 was deleted by another program. El archivo %1 ha sido eliminado por otro programa. - Do you want to save or close the file? ¿Desea guardar o cerrar el archivo? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. No se puede abrir el archivador. @@ -261,67 +214,54 @@ FindDialog - Search for: Buscar: - Replace with: Reemplazar por: - Ignore case Ignorar mayúsculas y minúsculas - Whole words only Solo palabras completas - Regular expressions Expresiones regulares - Search up Hacia atrás - Search down Hacia adelante - &Find &Buscar - &Replace &Reemplazar - Replace &All Reemplazar &todas - Find Buscar - Replace Reemplazar - Replace %n instance(s)? ¿Reemplazar %n coincidencia? @@ -329,19 +269,14 @@ - Question Confirmación - - Sorry Aviso - - Phrase not found. No se encontró la frase. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -387,17 +315,14 @@ Highlighter - Add Añadir - Check Spelling... Revisar la ortografía… - (No suggestions found) (No se encontraron sugerencias) @@ -405,12 +330,10 @@ ImageButton - Open Image Abrir imagen - Images(%1) Imágenes(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Seleccione el idioma de la aplicación: - <System Language> <Idioma del sistema> - Note Nota - Please restart this application for the change in language to take effect. Reinicie la aplicación para que el cambio de idioma tenga efecto. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. No se puede abrir el archivador. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferencias - General General - Statistics Estadísticas - Toolbar Barra de herramientas - Spell Checking Ortografía - Select Dictionary Seleccionar diccionario - - Sorry Aviso - Unable to open archive. No se puede abrir el archivador. - The archive does not contain a usable dictionary. El archivador no contiene un diccionario compatible. - - - - Question Confirmación - Shortcuts Atajos - One or more shortcuts conflict. Do you wish to proceed? Dos o más atajos coinciden. ¿Desea continuar? - The dictionary "%1" already exists. Do you want to replace it? El diccionario «%1» ya existe. ¿Quiere reemplazarlo? - Daily Goal Objetivo diario - None Ninguno - Minutes: Minutos: - - Words: Palabras: - Editing Edición - Always vertically center Centrar siempre verticalmente - Block insertion cursor Bloquear el cursor de inserción - Smooth fonts Suavizar tipografías - Typewriter sounds Sonidos de máquina de escribir - Smart quotes: Comillas tipográficas: - Double Dobles - Single Simples - Scenes Escenas - Divider: Separador: - Saving Guardado - Automatically save changes Guardar los cambios automáticamente - Remember cursor position Recordar la posición del cursor - Word count Número de palabras - Page count Número de páginas - Paragraph count Número de párrafos - Character count Número de caracteres - Characters: Caracteres: - Paragraphs: Párrafos: - Word Count Algorithm Algoritmo para contar palabras - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries Detectar límites de palabras - Divide character count by six Dividir entre seis el número de caracteres - Count each letter as a word - Page Count Algorithm - Style Estilo - Icons Only Solo iconos - Text Only Solo texto - Text Alongside Icons Texto al lado de los iconos - Text Under Icons Texto debajo de los iconos - Text Position: Posición del texto: - Actions Acciones - Move Up Subir - Move Down Bajar - Add Separator Añadir separador - Command Comando - Shortcut Atajo - Action Acción - Check spelling as you type Revisar la ortografía mientras escribe - Ignore words in UPPERCASE Omitir palabras en MAYÚSCULAS - Ignore words with numbers Omitir palabras con números - Language Idioma - - Add Añadir - - Remove Eliminar - Personal Dictionary Diccionario personal @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl + Mayús + Abajo - Move Scenes Up Subir escenas - Ctrl+Shift+Up Ctrl + Mayús + Arriba - Toggle Scene List Invertir la lista de escenas - Shift+F4 Mayús + F4 - Show scene list (%1) Mostrar la lista de escenas (%1) - Hide scene list (%1) Ocultar la lista de escenas (%1) - Filter Filtro - Move Scenes Down Bajar escenas - Resize scene list Cambiar el tamaño de la lista de escenas @@ -899,12 +723,6 @@ Session - - - - - - Default Predeterminado @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Gestionar sesiones - S&essions &Sesiones - New Nueva - Duplicate - Rename Renombrar - Delete Eliminar - Switch To Cambiar a - New Session Nueva sesión - Duplicate Session - Rename Session Renombrar la sesión - Question Confirmación - Delete selected session? ¿Quiere eliminar la sesión seleccionada? - Session name: Nombre de la sesión: - Sorry Aviso - The requested session name is already in use. El nombre solicitado ya está en uso. - &New... &Nueva... - Ctrl+Shift+N Ctrl+Mayús+N - &Manage... &Gestionar... - Ctrl+Shift+M Ctrl+Mayús+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Borrar - Reset to Default Restablecer valores predeterminados - - Shortcut: Atajo: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Reemplazando comillas... - Please Wait Espere un momento @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Revisar la ortografía - &Add &Añadir - &Ignore &Omitir - I&gnore All Omitir &todas - &Change &Cambiar - C&hange All Cambiar t&odas - Not in dictionary: No se encontró en el diccionario: - Change to: Cambiar por: - Checking spelling... Revisando la ortografía... - Cancel Cancelar - Please wait Espere un momento - Continue checking at beginning of file? - Spell check complete. Finalizó la revisión ortográfica. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Símbolos - Recently used symbols Símbolos usados recientemente - All symbols Todos los símbolos - Details Detalles - Name: Nombre: - Insert Insertar @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Bloques - Scripts Secuencias @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sin título %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nombre: - No Image Sin imagen - Tiled Mosaico - - Centered Centrado - - Stretched Estirado - Scaled A escala - Zoomed Ampliado - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Eliminar - Edit Theme - Window Background - - Type: Tipo: - - - - Color: Color: - Image: Imagen: - - - - - - - - - - pixels píxeles - Left Izquierda - Text Background - Right Derecha - Text Texto - Font: Tipo de letra: - Misspelled: Faltas ortográficas: - Line Spacing Interlineado - Single Sencillo - 1.5 Lines 1,5 líneas - Double Doble - Proportional Proporcional - Height: - Paragraph Spacing Espaciado entre párrafos - Tab Width: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temas - Default Predeterminado - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New Nueva - - Duplicate - Custom - Edit Editar - Delete Eliminar - Import Importar - Export Exportar - Question Confirmación - Delete theme '%1'? - - Themes (%1) - Import Theme Importar tema - Export Theme Exportar tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Confirmación - Delete timer? ¿Quiere eliminar la alarma? - <b>Words:</b> %L1 <b>Palabras:</b> %L1 - <b>Pages:</b> %L1 <b>Páginas:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Párrafos:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caracteres:</b> %L1 / %L2 - Set Delay Establecer tiempo - Set Time Establecer hora - Delay: Tiempo: - Time: Hora: - HH:mm:ss HH:mm:ss - Alarm Alarma - Type: Tipo: - Memo: Nota: - Edit Editar - Delete Eliminar @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running No hay ninguna alarma activada @@ -1616,37 +1283,30 @@ TimerManager - Timers Alarmas - New Nueva - Recent Recientes - Question Confirmación - Cancel editing timers? ¿Quiere cancelar la edición de las alarmas? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Cargando temas - Loading sounds Cargando sonidos - - Untitled Sin título - Open File Abrir archivo - About FocusWriter Acerca de FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un procesador de textos simple a pantalla completa - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Publicado con licencia <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Iconos del tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Usados según la licencia <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - Pages: %L1 Páginas: %L1 - - Paragraphs: %L1 Párrafos: %L1 - - Words: %L1 Palabras: %L1 - - Opening %1 Abriendo %1 - (Untitled %1) (Sin título %1) - List all documents - Switch to Next Document Cambiar al documento siguiente - Switch to Previous Document Cambiar al documento anterior - Switch to First Document Cambiar al primer documento - Switch to Last Document Cambiar al último documento - Switch to Document %1 Cambiar al documento %1 - Loading settings Cargando configuración - Emergency cache is not writable. No se puede escribir en la caché de emergencia. - - Warning Advertencia - FocusWriter was not shut down cleanly. FocusWriter no se cerró correctamente. - Restore from the emergency cache? ¿Desea restaurarlo desde la caché de emergencia? - Some files could not be opened. Algunos archivos no se pueden abrir. - Some files were opened Read-Only. Algunos archivos se abrieron como solo lectura. - '%1' is newer than the cached copy. "%1" es más reciente que la copia en caché. - Overwrite newer file? ¿Desea sobrescribir el archivo más reciente? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. No se pueden cargar los sonidos de máquina de escribir. - &File &Archivo - &New &Nuevo - &Open... A&brir... - Reloa&d Vol&ver a cargar - &Save &Guardar - Save &As... G&uardar como... - &Rename... &Cambiar nombre... - Save A&ll Guardar &todo - Manage Sessions Gestionar sesiones - New Session Nueva sesión - &Print... &Imprimir... - Pa&ge Setup... - &Close C&errar - &Quit Sali&r - Ctrl+Q Ctrl + Q - &Edit &Editar - &Undo &Deshacer - &Redo &Rehacer - Cu&t C&ortar - &Copy &Copiar - &Paste &Pegar - Paste &Unformatted Pegar sin &formato - Ctrl+Shift+V Ctrl + Mayús + V - Select &All &Seleccionar todo - Select &Scene Seleccionar &escena - Ctrl+Shift+A Ctrl + Mayús + A - Fo&rmat &Formato - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold &Negrita - &Italic &Cursiva - &Underline &Subrayado - Stri&kethrough &Tachado - Ctrl+K Ctrl + K - Sup&erscript Su&períndice - Ctrl+^ Ctrl + ^ - &Subscript Su&bíndice - Ctrl+_ Ctrl + _ - Align &Left Alinear a la i&zquierda - Ctrl+{ Caracteres: 0 - Align &Center Centra&r - Ctrl+| Ctrl + | - Align &Right Alinear a la &derecha - Ctrl+} Ctrl + } - Align &Justify &Justificar - Ctrl+J Ctrl + J - &Decrease Indent &Disminuir sangría - Ctrl+< Ctrl + < - I&ncrease Indent &Aumentar sangría - Ctrl+> Ctrl + > - Le&ft to Right Block &Escribir de izquierda a derecha - Ri&ght to Left Block Escribir de derec&ha a izquierda - &Tools &Herramientas - &Find... &Buscar... - Find &Next Buscar &siguiente - Find Pre&vious Buscar &anterior - &Replace... &Reemplazar... - Ctrl+R Ctrl + R - Smart &Quotes &Comillas tipográficas - Update &Document Actualizar &documento - Update Document Smart Quotes - Update &Selection Actualizar &selección - Update Selection Smart Quotes - &Spelling... &Ortografía... - F7 F7 - Set &Language... - &Timers... &Alarmas... - S&ymbols... Símb&olos… - &Daily Progress - &Settings &Configuración - Show &Toolbar Mo&strar barra de herramientas - Show &Menu Icons M&ostrar iconos del menú - F&ocused Text En&focar el texto - &Fullscreen &Pantalla completa - F11 F11 - Esc Esc - M&inimize &Minimizar - Ctrl+M Ctrl + M - &Themes... &Temas... - &Preferences... &Preferencias... - Focus Off Desactivar foco - Focus One Line Enfocar una línea - Focus Three Lines Enfocar tres líneas - &Paragraph &Párrafo - Focus Paragraph Enfocar un párrafo - Ctrl+Shift+` - &Help &Ayuda - Application &Language... &Idioma de la aplicación... - Some files were unsupported and could not be opened. Algunos archivos no son compatibles y no pueden abrirse. - &Off &Desactivar - One &Line Una &línea - &Three Lines &Tres líneas - &About A&cerca - About &Qt Ac&erca de Qt diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 4bb39424..5602684c 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Cerrar (%1) - Collapse Colapsar - Expand Expadir @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Descartar alerta - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) @@ -43,7 +37,6 @@ - %1% of %Ln word(s) @@ -51,7 +44,6 @@ - %Ln word(s) @@ -59,7 +51,6 @@ - %Ln minute(s) @@ -67,7 +58,6 @@ - 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) @@ -103,7 +88,6 @@ - %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal @@ -120,7 +102,6 @@ DictionaryDialog - Set Language @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sin título %1) - %1 (Read-Only) - - - - Sorry Lo siento - Unable to save '%1'. No se puede guardar '%1'. - Save File As Guardar archivo como - - Unable to overwrite '%1'. No se puede sobreescribir '%1'. - Rename File Renombrar archivo - Unable to rename '%1'. No se puede renombrar '%1'. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. Todos los cambios se perderán. - Reload Volver a cargar - Untitled %1 Sin título %1 - Question Pregunta - Saving as plain text will discard all formatting. Discard formatting? Guardar como texto plano descartará cualquier formato, ¿descartar formato? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Archivo alterado - The file '%1' was changed by another program. - Do you want to reload the file? ¿Desea volver a cargar el archivo? - Reload Volver a cargar - Ignore Ignorar - File Deleted Archivo eliminado - The file %1 was deleted by another program. El archivo %1 fue eliminado por otro programa. - Do you want to save or close the file? ¿Desea guardar o cerrar el archivo? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. No se puede abrir el archivo. @@ -261,67 +214,54 @@ FindDialog - Search for: Buscar: - Replace with: Reemplazar con: - Ignore case Ignorar mayúsculas - Whole words only Solo palabras completas - Regular expressions Expresiones regulares - Search up Buscar arriba - Search down Buscar abajo - &Find &Buscar - &Replace &Reemplazar - Replace &All Reemplazar &todo - Find Buscar - Replace Reemplazar - Replace %n instance(s)? Replace %n instance? @@ -329,19 +269,14 @@ - Question Pregunta - - Sorry Lo siento - - Phrase not found. No se encontró la frase. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -387,17 +315,14 @@ Highlighter - Add Agregar - Check Spelling... Checar ortografía... - (No suggestions found) (No se encontraron sugerencias) @@ -405,12 +330,10 @@ ImageButton - Open Image Abrir imagen - Images(%1) Imágenes (%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Seleccione idioma de la aplicación: - <System Language> <Idioma del sistema> - Note Nota - Please restart this application for the change in language to take effect. Por favor reinicie esta aplicación para que los cambios de idioma se realicen. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. No se puede abrir el archivo. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferencias - General General - Statistics Estadísticas - Toolbar Barra de herramientas - Spell Checking Chequeo de ortógrafía - Select Dictionary Seleccione diccionario - - Sorry Lo siento - Unable to open archive. No se puede abrir el archivo. - The archive does not contain a usable dictionary. El archivo no contiene un diccionario utilizable. - - - - Question Pregunta - Shortcuts Atajos - One or more shortcuts conflict. Do you wish to proceed? Uno o más atajos están en conflicto. ¿Desea continuar? - The dictionary "%1" already exists. Do you want to replace it? El diccionario "%1" ya existe. ¿Desea reemplazarlo? - Daily Goal Meta diaria - None Ninguna - Minutes: Minutos: - - Words: Palabras: - Editing Edición - Always vertically center Siempre centrar verticalmente - Block insertion cursor Cursor de bloque - Smooth fonts Suavizar fuentess - Typewriter sounds Sonido de máquina de escribir - Smart quotes: Comillas inteligentes: - Double Dobles - Single Sencillas - Scenes Escenas - Divider: Separador: - Saving Guardar - Automatically save changes Guardar automáticamente los cambios - Remember cursor position Recordar la posición del cursor - Word count Conteo de palabras - Page count Conteo de páginas - Paragraph count Conteo de párrafos - Character count Conteo de caracteres - Characters: Caracteres: - Paragraphs: Párrafos: - Word Count Algorithm Algoritmo de conteo de palabras - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries Detectar límite de palabra - Divide character count by six Dividir conteo de caracteres por 6 - Count each letter as a word - Page Count Algorithm - Style EStilo - Icons Only Solo íconos - Text Only Solo texto - Text Alongside Icons Texto con íconos - Text Under Icons Texto debajo íconos - Text Position: Posición de texto: - Actions Acciones - Move Up Mover arriba - Move Down Mover abajo - Add Separator Agregar separador - Command Comando - Shortcut Atajo - Action Acción - Check spelling as you type Checar ortigrafía mientras escribe - Ignore words in UPPERCASE Ignorar palabras en mayúsculas - Ignore words with numbers Ignorar palabras con números - Language Idioma - - Add Agregar - - Remove Eliminar - Personal Dictionary Diccionario personal @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Mayus+Abajo - Move Scenes Up Mover escenas arriba - Ctrl+Shift+Up Ctrl+Mayus+Arriba - Toggle Scene List - Shift+F4 Mayus+F4 - Show scene list (%1) Mostrar lista de escenas (%1) - Hide scene list (%1) Ocultar lista de escenas (%1) - Filter Filtro - Move Scenes Down Mover escenas abajo - Resize scene list Redimensionar lista de escenas @@ -899,12 +723,6 @@ Session - - - - - - Default Por omisión @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Administrar sesiones - S&essions S&esiones - New Nueva - Duplicate - Rename Renombrar - Delete Borrar - Switch To Cambiar a - New Session Nueva sesión - Duplicate Session - Rename Session Renombrar sesión - Question Pregunta - Delete selected session? ¿Borrar sesión seleccionada? - Session name: Nombre de sesión: - Sorry Lo siento - The requested session name is already in use. La sesión solicitada se encuentra en uso. - &New... &Nueva... - Ctrl+Shift+N Ctrl+Mayus+N - &Manage... &Administrar... - Ctrl+Shift+M Ctrl+Mayus+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Limpiar - Reset to Default Revertir a predeterminado - - Shortcut: Atajo: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Reemplazando comillas... - Please Wait Por favor espere @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Checar ortografía - &Add &Agregar - &Ignore &Ignorar - I&gnore All I&gnorar todo - &Change &Cambiar - C&hange All Ca&mbiar todo - Not in dictionary: Fuera del diccionario: - Change to: Cambiar a: - Checking spelling... Checando ortografía... - Cancel Cancelar - Please wait Por favor espere - Continue checking at beginning of file? - Spell check complete. Chequeo ortográfico completo. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Símbolos - Recently used symbols Símbolos usados recientemente - All symbols Todos los símbolos - Details Detalles - Name: Nombre: - Insert Insertar @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Bloques - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sin título %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nombre: - No Image Sin imagen - Tiled Mosaico - - Centered Centrado - - Stretched Estirado - Scaled Escalado - Zoomed Ajustado - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Remover - Edit Theme - Window Background - - Type: Tipo: - - - - Color: Color: - Image: Imagen: - - - - - - - - - - pixels pixeles - Left Izquierda - Text Background - Right Derecha - Text Texto - Font: Fuente: - Misspelled: Mal escrito: - Line Spacing Linea de espaciado - Single Simple - 1.5 Lines 1.5 líneas - Double Doble - Proportional Propocional - Height: - Paragraph Spacing Espaciado de párrafo - Tab Width: - New Theme @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temas - Default Por omisión - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New - - Duplicate - Custom - Edit Editar - Delete Borrar - Import Importar - Export Exportar - Question Pregunta - Delete theme '%1'? - - Themes (%1) - Import Theme Importar tema - Export Theme Exportar tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pregunta - Delete timer? ¿Desea eliminar el contador de tiempo? - <b>Words:</b> %L1 <b>Palabras:</b> %L1 - <b>Pages:</b> %L1 <b>Páginas:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Párrafos:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caracteres:</b> %L1 / %L2 - Set Delay Ajustar retraso - Set Time Ajustar tiempo - Delay: Retraso: - Time: Tiempo: - HH:mm:ss HH:mm:ss - Alarm Alarma - Type: Tipo: - Memo: Nota: - Edit Editar - Delete Borrar @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running No hay contadores de tiempo en ejecución @@ -1616,37 +1283,30 @@ TimerManager - Timers Contador de tiempo - New Nuevo - Recent Reciente - Question Pregunta - Cancel editing timers? ¿Desea cancelar contadores de tiempo? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Cargando temas - Loading sounds Cargando sonidos - - Untitled Sin título - Open File Abrir archivo - About FocusWriter Acerca de FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un simple procesador de palabras en pantalla completa - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Liberado bajo la licencia <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Usa íconos del tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Usado bajo la licencia <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - Pages: %L1 Páginas: %L1 - - Paragraphs: %L1 Párrafos: %L1 - - Words: %L1 Palabras: %L1 - - Opening %1 Abriendo %1 - (Untitled %1) (Sin título %1) - List all documents - Switch to Next Document Cambiar al siguiente documento - Switch to Previous Document Cambiar al documento previo - Switch to First Document Cambiar al primer documento - Switch to Last Document Cambiar al último documento - Switch to Document %1 Cambiar al documento %1 - Loading settings Cargando preferencias - Emergency cache is not writable. No se puede escribir el caché de emergencia - - Warning Advertencia - FocusWriter was not shut down cleanly. FocusWriter no fue cerrado correctamente - Restore from the emergency cache? ¿Restaurar el caché de emergencia? - Some files could not be opened. Algunos archivos no se pueden abrir. - Some files were opened Read-Only. Algunos archivos son de sólo lectura. - '%1' is newer than the cached copy. '%1' is más reciente que el que se tiene en caché. - Overwrite newer file? ¿Sobreescribir el archivo nuevo? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. No se puede cargar los sonidos de escritura. - &File &Archivo - &New &Nuevo - &Open... &Abrir... - Reloa&d Volver a car&gar - &Save &Guardar - Save &As... Guardar &como... - &Rename... &Renombrar... - Save A&ll Guardar To&do - Manage Sessions Administrar sesiones - New Session Nueva sesión - &Print... &Imprimir... - Pa&ge Setup... - &Close &Cerrar - &Quit &Salir - Ctrl+Q Ctrl+Q - &Edit &Editar - &Undo &Deshacer - &Redo &Rehacer - Cu&t Cor&tar - &Copy &Copiar - &Paste &Pegar - Paste &Unformatted Pegar &sin formato - Ctrl+Shift+V Ctrl+Mayus+V - Select &All Seleccionar &todo - Select &Scene Seleccionar e&scena - Ctrl+Shift+A Ctrl+Mayus+A - Fo&rmat Fo&rmato - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold &Negrita - &Italic &Itálica - &Underline &Subrayado - Stri&kethrough Ta&chado - Ctrl+K Ctrl+K - Sup&erscript Sup&eríndice - Ctrl+^ Ctrl+^ - &Subscript &Subíndice - Ctrl+_ Ctrl+_ - Align &Left Alinear a &Izquierda - Ctrl+{ Ctrl+{ - Align &Center &Centrar - Ctrl+| Ctrl+| - Align &Right Alinear a &Derecha - Ctrl+} Ctrl+} - Align &Justify &Justificar - Ctrl+J Ctrl+J - &Decrease Indent &Decrementar Indentación - Ctrl+< Ctrl+< - I&ncrease Indent A&umentar Indentación - Ctrl+> Ctrl+> - Le&ft to Right Block Bloque &Izquierda a Derecha - Ri&ght to Left Block Bloque &Derecha a Izquierda - &Tools &Herramientas - &Find... &Buscar... - Find &Next &Buscar siguiente - Find Pre&vious &Buscar previo - &Replace... &Reemplazar... - Ctrl+R Ctrl+R - Smart &Quotes Comillas &inteligentes - Update &Document Actualizar &documento - Update Document Smart Quotes - Update &Selection Actualizar &selección - Update Selection Smart Quotes - &Spelling... &Ortografía... - F7 F7 - Set &Language... - &Timers... Contador de &tiempo... - S&ymbols... S&ímbolos... - &Daily Progress - &Settings &Configuración - Show &Toolbar Mostrar &barra de herramientas - Show &Menu Icons Mostrar &menú de íconos - F&ocused Text Texto enf&ocado - &Fullscreen &Pantalla completa - F11 F11 - Esc Esc - M&inimize M&inimizar - Ctrl+M Ctrl+M - &Themes... &Temas... - &Preferences... &Preferencias... - Focus Off Enfoque deshabilitado - Focus One Line Enfocar una línea - Focus Three Lines Enfocar tres líneas - &Paragraph &Párrafo - Focus Paragraph Enfocar párrafo - Ctrl+Shift+` - &Help A&yuda - Application &Language... &Idioma de aplicación... - Some files were unsupported and could not be opened. Algunos archivos no está soportados y no podrán ser abiertos. - &Off - One &Line - &Three Lines - &About &Acerca de - About &Qt Acerca de &Qt diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 39c5693f..f10989fb 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Sulje (%1) - Collapse Pienennä - Expand Laajenna @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Kuittaa hälytys - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1 % %Ln minuutista @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1 % %Ln sanasta @@ -51,7 +44,6 @@ - %Ln word(s) %Ln sana @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuutti @@ -67,7 +58,6 @@ - 0% 0 % @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Päivittäinen eteneminen - Longest streak Pisin putki - Current streak Nykyinen putki - N/A - %n day(s) %n päivä @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1 % päivittäisestä tavoitteesta @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Aseta kieli @@ -128,81 +109,62 @@ Document - (Untitled %1) (Nimetön %1) - %1 (Read-Only) %1 (vain luku) - - - - Sorry Virhe - Unable to save '%1'. Tiedoston ”%1” tallentaminen epäonnistui. - Save File As Tallenna tiedosto nimellä - - Unable to overwrite '%1'. Tiedoston ”%1” korvaaminen epäonnistui. - Rename File Nimeä tiedosto uudelleen - Unable to rename '%1'. Tiedoston ”%1” uudelleennimeäminen epäonnistui. - Reload File? Ladataanko tiedosto uudelleen? - Reload the file '%1' from disk? Ladataanko tiedosto ”%1” uudelleen levyltä? - All unsaved changes will be lost. Kaikki tallentamattomat muutokset menetetään. - Reload Lataa uudelleen - Untitled %1 Nimetön %1 - Question Kysymys - Saving as plain text will discard all formatting. Discard formatting? Pelkkänä tekstinä tallennettaessa menetetään kaikki muotoilu. Poistetaanko muotoilu? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Tiedosto muuttui - The file '%1' was changed by another program. Toinen ohjelma on muuttanut tiedostoa %1. - Do you want to reload the file? Haluatko ladata tiedoston uudelleen? - Reload Lataa uudelleen - Ignore Jätä huomiotta - File Deleted Tiedosto poistettu - The file %1 was deleted by another program. Toinen ohjelma on poistanut tiedoston %1. - Do you want to save or close the file? Haluatko tallentaa vai sulkea tiedoston? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Arkiston avaaminen epäonnistui. @@ -261,67 +214,54 @@ FindDialog - Search for: Etsi: - Replace with: Korvaa: - Ignore case Aakkoskoolla ei ole merkitystä - Whole words only Vain kokonaiset sanat - Regular expressions Säännölliset lausekkeet - Search up Etsi ylös - Search down Etsi alas - &Find &Etsi - &Replace &Korvaa - Replace &All Korvaa k&aikki - Find Etsi - Replace Korvaa - Replace %n instance(s)? Korvataanko %n esiintymä? @@ -329,19 +269,14 @@ - Question Kysymys - - Sorry Virhe - - Phrase not found. Fraasia ei löydy. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument-teksti - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Muotoiltu teksti - Plain Text Pelkkä teksti - All Files Kaikki tiedostot - All Supported Files Kaikki tuetut tiedostot @@ -387,17 +315,14 @@ Highlighter - Add Lisää - Check Spelling... Tarkista oikeinkirjoitus… - (No suggestions found) (Ei ehdotuksia) @@ -405,12 +330,10 @@ ImageButton - Open Image Avaa kuva - Images(%1) Kuvat (%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Valitse ohjelman kieli: - <System Language> <Järjestelmän kieli> - Note Huomaa - Please restart this application for the change in language to take effect. Ole hyvä ja käynnistä ohjelma uudelleen, jotta kielen muutos tulee voimaan. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Arkiston avaaminen epäonnistui. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Asetukset - General Yleisasetukset - Statistics Tilastot - Toolbar Työkalupalkki - Spell Checking Oikeinkirjoituksen tarkistus - Select Dictionary Valitse sanasto - - Sorry Virhe - Unable to open archive. Arkiston avaaminen epäonnistui. - The archive does not contain a usable dictionary. Arkisto ei sisällä käyttökelpoista sanastoa. - - - - Question Kysymys - Shortcuts Pikanäppäimet - One or more shortcuts conflict. Do you wish to proceed? Yksi tai useampi päällekkäinen pikanäppäin. Haluatko jatkaa? - The dictionary "%1" already exists. Do you want to replace it? Sanasto ”%1” on jo olemassa. Haluatko korvata sen? - Daily Goal Päivittäinen tavoite - None Ei tavoitetta - Minutes: Minuutteina: - - Words: Sanoina: - Editing Muokkaaminen - Always vertically center Keskitä aina pystysuunnassa - Block insertion cursor Laatikkomainen lisäyskohdistin - Smooth fonts Tasoitetut fontit - Typewriter sounds Kirjoituskoneäänet - Smart quotes: Älykkäät lainausmerkit: - Double Kokolainausmerkit - Single Puolilainausmerkit - Scenes Kohtaukset - Divider: Erotin: - Saving Tallennus - Automatically save changes Tallenna muutokset automaattisesti - Remember cursor position Muista kohdistimen sijainti - Word count Sanamäärä - Page count Sivumäärä - Paragraph count Kappalemäärä - Character count Merkkimäärä - Characters: Merkkeinä: - Paragraphs: Kappaleina: - Word Count Algorithm Sanamäärän algoritmi - Reset daily progress for today to zero? Nollataanko tämän päivän eteneminen? - Remove current dictionary? - Write byte order mark in plain text files Kirjoita tavujärjestysmerkki (BOM) tekstitiedostoihin - Default format: Oletusmuoto: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Nollaa tämä päivä - History Historia - Remember history Muista historia - Show streaks Näytä etenemisputket - Minimum progress for streaks: Vähin eteneminen voittoputkeen: - Detect word boundaries Tunnista sanojen rajat - Divide character count by six Jaa merkkimäärä kuudella - Count each letter as a word Laske jokainen kirjain sanaksi - Page Count Algorithm Sivumäärän algoritmi - Style Tyyli - Icons Only Vain kuvakkeet - Text Only Vain teksti - Text Alongside Icons Teksti kuvakkeiden vieressä - Text Under Icons Teksti kuvakkeiden alla - Text Position: Tekstin sijainti: - Actions Toiminnot - Move Up Siirrä ylemmäs - Move Down Siirrä alemmas - Add Separator Lisää erotin - Command Komento - Shortcut Pikanäppäin - Action Toiminto - Check spelling as you type Tarkista oikeinkirjoitus kirjoitettaessa - Ignore words in UPPERCASE Ohita SUURAAKKOSIN kirjoitetut sanat - Ignore words with numbers Ohita sanat, joissa on numeroita - Language Kieli - - Add Lisää - - Remove Poista - Personal Dictionary Oma sanasto @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Ei tuettu RTF-tiedosto. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Tiedosto loppui yllättäen. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Siirrä kohtauksia ylemmäs - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Näytä tai piilota kohtausluettelo - Shift+F4 Shift+F4 - Show scene list (%1) Näytä kohtausluettelo (%1) - Hide scene list (%1) Piilota kohtausluettelo (%1) - Filter Suodatin - Move Scenes Down Siirrä kohtauksia alemmas - Resize scene list Muuta kohtausluettelon kokoa @@ -899,12 +723,6 @@ Session - - - - - - Default Oletus @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Hallitse istuntoja - S&essions &Istunnot - New Uusi - Duplicate Kopioi - Rename Nimeä uudelleen - Delete Poista - Switch To Siirry - New Session Uusi istunto - Duplicate Session Kopioi istunto - Rename Session Nimeä istunto uudelleen - Question Kysymys - Delete selected session? Poistetaanko valittu istunto? - Session name: Istunnon nimi: - Sorry Virhe - The requested session name is already in use. Pyytämäsi istunnon nimi on jo käytössä. - &New... &Uusi… - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Hallitse… - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Tyhjennä - Reset to Default Palauta oletusarvoon - - Shortcut: Pikanäppäin: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Korvataan lainausmerkkejä… - Please Wait Odota hetki @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Tarkista oikeinkirjoitus - &Add &Lisää - &Ignore Jätä &huomiotta - I&gnore All &Jätä kaikki huomiotta - &Change &Muuta - C&hange All Muuta &kaikki - Not in dictionary: Ei sanastossa: - Change to: Vaihda muotoon: - Checking spelling... Tarkistetaan oikeinkirjoitusta… - Cancel Peru - Please wait Odota hetki - Continue checking at beginning of file? Jatketaanko tarkistamista tiedoston alusta? - Spell check complete. Oikeinkirjoituksen tarkistus valmis. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symbolit - Recently used symbols Viimeksi käytetyt symbolit - All symbols Kaikki symbolit - Details Tiedot - Name: Nimi: - Insert Lisää @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Lohkot - Scripts Kirjoitusjärjestelmät @@ -1156,7 +928,6 @@ Theme - Untitled %1 Nimetön %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nimi: - No Image Ei kuvaa - Tiled Toistettu - - Centered Keskitetty - - Stretched Venytetty - Scaled Skaalattu - Zoomed Suurennettu - Opacity: Peittävyys: - Position: Sijainti: - Width: Leveys: - Round Text Background Corners Pyöristetyt kulmat tekstin taustassa - - - Radius: Säde: - Blur Text Background Sumenna tekstin tausta - Text Background Drop Shadow Tekstin taustan varjo - Vertical Offset: Pystysiirtymä: - Margins Reunukset - Window: Ikkuna: - Page: Sivu: - Indent first line Sisennä ensimmäinen rivi - Above: Yläpuolella: - Below: Alapuolella: - Remove Poista - Edit Theme Muokkaa teemaa - Window Background Ikkunan tausta - - Type: Tyyppi: - - - - Color: Väri: - Image: Kuva: - - - - - - - - - - pixels pikseliä - Left Vasemmalla - Text Background Tekstin tausta - Right Oikealla - Text Teksti - Font: Fontti: - Misspelled: Kirjoitusvirheet: - Line Spacing Riviväli - Single Yksinkertainen - 1.5 Lines 1,5-kertainen - Double Kaksinkertainen - Proportional Suhteellinen - Height: Korkeus: - Paragraph Spacing Kappaleväli - Tab Width: Sarkainleveys: - New Theme Uusi teema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Teemat - Default Oletusteemat - Bitter Skies - Enchantment - Gentle Blues Pehmeänsininen - Old School Vanhanaikainen - Space Dreams Avaruusunelma - Spy Games - Tranquility - Writing Desk Kirjoituspöytä - - New Uusi - - Duplicate Kopioi - Custom Omat teemat - Edit Muokkaa - Delete Poista - Import Tuo - Export Vie - Question Kysymys - Delete theme '%1'? Poistetaanko teema %1? - - Themes (%1) Teemat (%1) - Import Theme Tuo teema - Export Theme Vie teema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> – %2 - Question Kysymys - Delete timer? Poistetaanko ajastin? - <b>Words:</b> %L1 <b>Sanoja:</b> %L1 - <b>Pages:</b> %L1 <b>Sivuja:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Kappaleita:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Merkkejä:</b> %L1 / %L2 - Set Delay Aseta viive - Set Time Aseta aika - Delay: Viive: - Time: Aika: - HH:mm:ss HH:mm:ss - Alarm Hälytys - Type: Tyyppi: - Memo: Lisätieto: - Edit Muokkaa - Delete Poista @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Ei ajastimia käynnissä @@ -1616,37 +1283,30 @@ TimerManager - Timers Ajastimet - New Uusi - Recent Viimeisimmät - Question Kysymys - Cancel editing timers? Perutaanko ajastimien muokkaus? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 – %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Ladataan teemoja - Loading sounds Ladataan ääniä - - Untitled Nimetön - Open File Avaa tiedosto - About FocusWriter Tietoja FocusWriterista - - FocusWriter FocusWriter - A simple fullscreen word processor Yksinkertainen koko näytön tekstinkäsittelyohjelma - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008–%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Julkaistu <a href=%1>GPL 3</a>-lisenssillä - Uses icons from the <a href=%1>Oxygen</a> icon theme Käyttää <a href=%1>Oxygen</a>-kuvaketeemaa - Used under the <a href=%1>LGPL 3</a> license Käytetty <a href=%1>LGPL 3</a>-lisenssin mukaisesti - - Characters: %L1 / %L2 Merkkejä: %L1 / %L2 - - Pages: %L1 Sivuja: %L1 - - Paragraphs: %L1 Kappaleita: %L1 - - Words: %L1 Sanoja: %L1 - - Opening %1 Avataan %1 - (Untitled %1) (Nimetön %1) - List all documents Luettele kaikki asiakirjat - Switch to Next Document Siirry seuraavaan asiakirjaan - Switch to Previous Document Siirry edelliseen asiakirjaan - Switch to First Document Siirry ensimmäiseen asiakirjaan - Switch to Last Document Siirry viimeiseen asiakirjaan - Switch to Document %1 Siirry asiakirjaan %1 - Loading settings Ladataan asetuksia - Emergency cache is not writable. Varavälimuistiin ei voida kirjoittaa. - - Warning Varoitus - FocusWriter was not shut down cleanly. FocusWriter ei sulkeutunut oikein. - Restore from the emergency cache? Palautetaanko tilanne varavälimuistista? - Some files could not be opened. Joitain tiedostoja ei saatu avattua. - Some files were opened Read-Only. Osa tiedostoista avattiin vain luku -tilassa. - '%1' is newer than the cached copy. %1 on uudempi kuin välimuistin versio. - Overwrite newer file? Korvataanko uudempi tiedosto? - Save Changes? Tallennetaanko muutokset? - Save changes to the file '%1' before closing? Tallennetaanko muutokset tiedostoon ”%1” ennen sulkemista? - Your changes will be lost if you don't save them. Muutoksesi häviävät, jollet tallenna niitä. - Unable to load typewriter sounds. Kirjoituskoneäänien lataaminen epäonnistui. - &File &Tiedosto - &New &Uusi - &Open... &Avaa… - Reloa&d Lataa uu&delleen - &Save &Tallenna - Save &As... Tallenna &nimellä… - &Rename... Ni&meä uudelleen… - Save A&ll Tallenna &kaikki - Manage Sessions Hallitse istuntoja - New Session Uusi istunto - &Print... Tul&osta… - Pa&ge Setup... - &Close &Sulje - &Quit &Lopeta - Ctrl+Q Ctrl+Q - &Edit &Muokkaa - &Undo &Peru - &Redo &Tee uudelleen - Cu&t L&eikkaa - &Copy &Kopioi - &Paste &Liitä - Paste &Unformatted Liitä &muotoilematta - Ctrl+Shift+V Ctrl+Shift+V - Select &All Valitse k&aikki - Select &Scene &Valitse kohtaus - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat M&uotoilu - &Heading Otsikko - Heading &1 Otsikko &1 - Heading &2 Otsikko &2 - Heading &3 Otsikko &3 - Heading &4 Otsikko &4 - Heading &5 Otsikko &5 - Heading &6 Otsikko &6 - &Normal &Tavallinen - &Bold Li&havointi - &Italic Ku&rsivointi - &Underline All&eviivaus - Stri&kethrough Yl&iviivaus - Ctrl+K Ctrl+K - Sup&erscript &Yläindeksi - Ctrl+^ Ctrl+^ - &Subscript &Alaindeksi - Ctrl+_ Ctrl+_ - Align &Left Tasaa &vasemmalle - Ctrl+{ Ctrl+{ - Align &Center Tasaa &keskelle - Ctrl+| Ctrl+| - Align &Right Tasaa &oikealle - Ctrl+} Ctrl+} - Align &Justify &Tasaa molemmat reunat - Ctrl+J Ctrl+J - &Decrease Indent &Ulonna - Ctrl+< Ctrl+< - I&ncrease Indent &Sisennä - Ctrl+> Ctrl+> - Le&ft to Right Block Vase&mmalta oikealle - Ri&ght to Left Block Oikea&lta vasemmalle - &Tools T&yökalut - &Find... &Etsi… - Find &Next Etsi &seuraava - Find Pre&vious Etsi edelli&nen - &Replace... &Korvaa… - Ctrl+R Ctrl+R - Smart &Quotes Älykkäät &lainausmerkit - Update &Document Päivitä &asiakirja - Update Document Smart Quotes - Update &Selection Päivitä &valinta - Update Selection Smart Quotes - &Spelling... &Oikeinkirjoitus… - F7 F7 - Set &Language... Ase&ta kieli… - &Timers... &Ajastimet… - S&ymbols... S&ymbolit… - &Daily Progress &Päivittäinen eteneminen - &Settings &Asetukset - Show &Toolbar Näytä &työkalupalkki - Show &Menu Icons Näytä &valikkokuvakkeet - F&ocused Text K&ohdistettu teksti - &Fullscreen Koko &näyttö - F11 F11 - Esc Esc - M&inimize P&ienennä - Ctrl+M Ctrl+M - &Themes... T&eemat… - &Preferences... &Asetukset… - Focus Off Kohdistus pois päältä - Focus One Line Kohdista yksi rivi - Focus Three Lines Kohdista kolme riviä - &Paragraph &Kappale - Focus Paragraph Kohdista kappale - Ctrl+Shift+` - &Help &Ohje - Application &Language... Ohjelman &kieli… - Some files were unsupported and could not be opened. Joidenkin tiedostojen tiedostomuotoja ei tueta; niiden avaaminen epäonnistui. - &Off &Ei kohdistusta - One &Line &Yksi rivi - &Three Lines Kolme &riviä - &About &Tietoja - About &Qt Tietoja &Qt:sta diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index fca6ba9f..7065245c 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Fermer (%1) - Collapse Minimiser - Expand Agrandir @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Lever l'alerte - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% sur %Ln minute @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% sur %Ln mot @@ -51,7 +44,6 @@ - %Ln word(s) %Ln mot @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minute @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progrès quotidien - Longest streak Session la plus longue - Current streak Session actuelle - N/A N/A - %n day(s) %n jour @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ntiret; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% de l'objectif quotidien @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Définir le langage @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sans titre %1) - %1 (Read-Only) %1 (Lecture seule) - - - - Sorry Désolé - Unable to save '%1'. Impossible d'enregistrer « %1 ». - Save File As Enregistrer sous - - Unable to overwrite '%1'. Impossible d'écraser « %1 ». - Rename File Renommer le fichier - Unable to rename '%1'. Impossible de renommer le fichier « %1 ». - Reload File? Recharger le fichier ? - Reload the file '%1' from disk? Recharger le fichier « %1 » à partir du disque ? - All unsaved changes will be lost. Toutes les modifications non enregistrées seront perdues. - Reload Rechargement - Untitled %1 Sans titre %1 - Question Question - Saving as plain text will discard all formatting. Discard formatting? L'enregistrement en texte brut effacera toute mise en forme. Voulez-vous effacer la mise en forme ? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Fichier modifié - The file '%1' was changed by another program. Le fichier « %1 » a été modifié par un autre programme. - Do you want to reload the file? Voulez-vous recharger le fichier ? - Reload Recharger - Ignore Ignorer - File Deleted Fichier supprimé - The file %1 was deleted by another program. Le fichier %1 a été supprimé par un autre programme. - Do you want to save or close the file? Voulez-vous enregistrer ou fermer le fichier ? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Impossible d'ouvrir l'archive. @@ -261,67 +214,54 @@ FindDialog - Search for: Rechercher : - Replace with: Remplacer par : - Ignore case Ignorer la casse - Whole words only Mots entiers seulement - Regular expressions Expressions régulières - Search up Précédent - Search down Suivant - &Find &Rechercher - &Replace &Remplacer - Replace &All Remplacer &tout - Find Chercher - Replace Remplacer - Replace %n instance(s)? Remplacer %n occurrence ? @@ -329,19 +269,14 @@ - Question Question - - Sorry Désolé - - Phrase not found. Phrase non trouvée. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text Texte OpenDocument - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Texte brut - All Files Tous les fichiers - All Supported Files Tous les fichiers pris en charge @@ -387,17 +315,14 @@ Highlighter - Add Ajouter - Check Spelling... Vérifier l'orthographe... - (No suggestions found) (Aucune suggestion trouvée) @@ -405,12 +330,10 @@ ImageButton - Open Image Ouvrir une image - Images(%1) Images(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Choisissez la langue du programme : - <System Language> <Langue du système> - Note Note - Please restart this application for the change in language to take effect. Veuillez redémarrer le programme pour que le changement de langue prenne effet. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Impossible d'ouvrir l'archive. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Préférences - General Général - Statistics Statistiques - Toolbar Barre d'outils - Spell Checking Vérification orthographique - Select Dictionary Choisir le dictionnaire - - Sorry Désolé - Unable to open archive. Impossible d'ouvrir l'archive. - The archive does not contain a usable dictionary. L'archive ne contient aucun dictionnaire utilisable. - - - - Question Question - Shortcuts Raccourcis - One or more shortcuts conflict. Do you wish to proceed? Au moins un conflit dans les raccourcis clavier. Voulez-vous continuer ? - The dictionary "%1" already exists. Do you want to replace it? Le dictionnaire « %1 » existe déjà. Voulez-vous le remplacer ? - Daily Goal Objectif quotidien - None Aucun - Minutes: Minutes : - - Words: Mots : - Editing Édition - Always vertically center Toujours centrer verticalement - Block insertion cursor Curseur bloc - Smooth fonts Polices lissées - Typewriter sounds Sons de machine à écrire - Smart quotes: Guillemets typographiques : - Double Doubles - Single Simples - Scenes Scènes - Divider: Séparateur : - Saving Enregistrement - Automatically save changes Automatique - Remember cursor position Se souvenir de la position du curseur - Word count Nombre de mots - Page count Nombre de pages - Paragraph count Nombre de paragraphes - Character count Nombre de caractères - Characters: Caractères : - Paragraphs: Paragraphes : - Word Count Algorithm Algorithme de comptage des mots - Reset daily progress for today to zero? Réinitialiser le progrès quotidien pour aujourd'hui ? - Remove current dictionary? Supprimer le dictionnaire courant ? - Write byte order mark in plain text files Écrire l'ordre des octets dans des fichiers textes bruts - Default format: Format par défaut : - User Interface Interface utilisateur - Always show scrollbar Toujours afficher la barre de défilement - Always show top bar Toujours afficher la barre supérieure - Always show bottom bar Toujours afficher la barre inférieure - Reset Today Réinitialiser pour aujourd'hui - History Historique - Remember history Se souvenir de l'historique - Show streaks Afficher les sessions - Minimum progress for streaks: Progrès minimum pour les sessions : - Detect word boundaries Détecter la fin des mots - Divide character count by six Diviser le nombre de caractères par six - Count each letter as a word Compter chaque lettre comme un mot - Page Count Algorithm Algorithme de comptage des pages - Style Style - Icons Only Icône seule - Text Only Texte seul - Text Alongside Icons Texte à côté des icônes - Text Under Icons Texte sous les icônes - Text Position: Position du texte : - Actions Actions - Move Up Monter - Move Down Descendre - Add Separator Ajouter un séparateur - Command Commande - Shortcut Raccourci - Action Action - Check spelling as you type Vérifier l'orthographe pendant la frappe - Ignore words in UPPERCASE Ignorer les mots en MAJUSCULES - Ignore words with numbers Ignorer les mots comportant des chiffres - Language Langue - - Add Ajouter - - Remove Supprimer - Personal Dictionary Dictionnaire personnel @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Fichier RTF non pris en charge. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Fin du fichier avortée. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Maj+Bas - Move Scenes Up Déplacer les scènes vers le haut - Ctrl+Shift+Up Ctrl+Maj+Haut - Toggle Scene List Affichage de la liste des scènes - Shift+F4 Maj+F4 - Show scene list (%1) Afficher la liste des scènes (%1) - Hide scene list (%1) Masquer la liste des scènes (%1) - Filter Filtre - Move Scenes Down Déplacer les scènes vers le bas - Resize scene list Redimensionner la liste des scènes @@ -899,12 +723,6 @@ Session - - - - - - Default Par défaut @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Gérer les sessions - S&essions S&essions - New Nouveau - Duplicate Dupliquer - Rename Renommer - Delete Supprimer - Switch To Ouvrir la session - New Session Nouvelle session - Duplicate Session Dupliquer la session - Rename Session Renommer la session - Question Question - Delete selected session? Effacer la session sélectionnée ? - Session name: Nom de la session : - Sorry Désolé - The requested session name is already in use. Le nom demandé est déjà utilisé. - &New... &Nouvelle... - Ctrl+Shift+N Ctrl+Maj+N - &Manage... &Gérer... - Ctrl+Shift+M Ctrl+Maj+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Effacer - Reset to Default Valeurs par défaut - - Shortcut: Raccourci : @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Remplacement des guillemets... - Please Wait Veuillez patienter @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Vérifier l'orthographe - &Add &Ajouter - &Ignore &Ignorer - I&gnore All Tout i&gnorer - &Change &Modifier - C&hange All Tout m&odifier - Not in dictionary: Absent du dictionnaire : - Change to: Changer pour : - Checking spelling... Vérification de l'orthographe... - Cancel Annuler - Please wait Veuillez patienter - Continue checking at beginning of file? Poursuivre la vérification au début du fichier ? - Spell check complete. Vérification orthographique terminée. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symboles - Recently used symbols Symboles récemment utilisés - All symbols Tous les symboles - Details Détails - Name: Nom : - Insert Insérer @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocs - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sans titre %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nom : - No Image Aucune image - Tiled Mosaïque - - Centered Centrée - - Stretched Étendue - Scaled Mise à l'échelle - Zoomed Agrandie et rognée - Opacity: Opacité : - Position: Position : - Width: Largeur : - Round Text Background Corners Coins arrondis pour l'arrière-plan du texte - - - Radius: Rayon : - Blur Text Background Estomper l'arrière-plan du texte - Text Background Drop Shadow Ombre portée de l'arrière-plan du texte - Vertical Offset: Décalage vertical : - Margins Marges - Window: Fenêtre : - Page: Page : - Indent first line Indenter la première ligne - Above: Au-dessus : - Below: Au-dessous : - Remove Supprimer l'image - Edit Theme Éditer le thème - Window Background Arrière-plan de la fenêtre - - Type: Type : - - - - Color: Couleur : - Image: Image : - - - - - - - - - - pixels pixels - Left Gauche - Text Background Arrière-plan du texte - Right Droite - Text Texte - Font: Police : - Misspelled: Fautes : - Line Spacing Interligne - Single Simple - 1.5 Lines 1,5 lignes - Double Double - Proportional Proportionnelle - Height: Hauteur : - Paragraph Spacing Retraits et espacements de paragraphes - Tab Width: Largeur du retrait : - New Theme Nouveau thème @@ -1399,115 +1110,90 @@ ThemeManager - Themes Thèmes - Default Par défaut - Bitter Skies - Enchantment - Gentle Blues Bleu tendre - Old School Vieille école - Space Dreams Rêves d'espace - Spy Games - Tranquility - Writing Desk Secrétaire - - New Nouveau - - Duplicate Dupliquer - Custom Personnalisé - Edit Éditer - Delete Supprimer - Import Importer - Export Exporter - Question Question - Delete theme '%1'? Supprimer le thème « %1 » ? - - Themes (%1) Thèmes (%1) - Import Theme Importer un thème - Export Theme Exporter le thème @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Question - Delete timer? Supprimer le chronomètre ? - <b>Words:</b> %L1 <b>Mots :</b> %L1 - <b>Pages:</b> %L1 <b>Pages :</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragraphes :</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caractères :</b> %L1 / %L2 - Set Delay régler la durée - Set Time Régler l'heure - Delay: Temps d'attente: - Time: Heure : - HH:mm:ss HH:mm:ss - Alarm Alarme - Type: Type : - Memo: Mémo : - Edit Modifier - Delete Supprimer @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Aucun chronomètre en cours @@ -1616,37 +1283,30 @@ TimerManager - Timers Chronomètres - New Nouveau - Recent Récent - Question Question - Cancel editing timers? Annuler les modifications apportées aux chronomètres ? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Chargement des thèmes - Loading sounds Chargement des sons - - Untitled Sans titre - Open File Ouvrir un fichier - About FocusWriter À propos de FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un traitement de texte plein écran simple - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Publié sous licence <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Utilise les icônes du thème <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Utilisé sous licence <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caractères : %L1 / %L2 - - Pages: %L1 Pages : %L1 - - Paragraphs: %L1 Paragraphes : %L1 - - Words: %L1 Mots : %L1 - - Opening %1 Ouverture de %1 - (Untitled %1) (Sans titre %1) - List all documents Lister tous les documents - Switch to Next Document Basculer vers le document suivant - Switch to Previous Document Basculer vers le document précédent - Switch to First Document Basculer vers le premier document - Switch to Last Document Basculer vers le dernier document - Switch to Document %1 Basculer vers le document %1 - Loading settings Chargement des préférences - Emergency cache is not writable. Le cache d'urgence n'est pas accessible en écriture. - - Warning Avertissement - FocusWriter was not shut down cleanly. FocusWriter ne s'est pas fermé correctement. - Restore from the emergency cache? Récupérer les informations depuis le cache d'urgence ? - Some files could not be opened. Certains fichiers n'ont pas pu être ouverts. - Some files were opened Read-Only. Certains fichiers ont été ouverts en mode de lecture seule. - '%1' is newer than the cached copy. « %1 » est plus récent que la copie présente en cache. - Overwrite newer file? Ouvrir le fichier plus récent ? - Save Changes? Enregistrer les modifications ? - Save changes to the file '%1' before closing? Enregistrer les modifications du fichier « %1 » avant de fermer ? - Your changes will be lost if you don't save them. Vos modifications seront perdues si vous ne les enregistrez pas. - Unable to load typewriter sounds. Impossible de charger les sons de machine à écrire. - &File &Fichier - &New &Nouveau - &Open... &Ouvrir... - Reloa&d Rechar&ger - &Save &Enregistrer - Save &As... Enregistrer &sous... - &Rename... &Renommer... - Save A&ll Enregistrer &tout - Manage Sessions Gérer les sessions - New Session Nouvelle session - &Print... Im&primer... - Pa&ge Setup... Mise en pa&ge... - &Close Fer&mer - &Quit &Quitter - Ctrl+Q Ctrl+Q - &Edit &Édition - &Undo Annu&ler - &Redo Re&faire - Cu&t Co&uper - &Copy &Copier - &Paste C&oller - Paste &Unformatted Collage sans &formatage - Ctrl+Shift+V Ctrl+Maj+V - Select &All Tout &sélectionner - Select &Scene Sélectionner la &scène - Ctrl+Shift+A Ctrl+Maj+A - Fo&rmat Fo&rmat - &Heading &Titre - Heading &1 Titre &1 - Heading &2 Titre &2 - Heading &3 Titre &3 - Heading &4 Titre &4 - Heading &5 Titre &5 - Heading &6 Titre &6 - &Normal &Normal - &Bold &Gras - &Italic &Italique - &Underline &Souligner - Stri&kethrough &Barrer - Ctrl+K Ctrl+K - Sup&erscript &Exposant - Ctrl+^ Ctrl+^ - &Subscript I&ndice - Ctrl+_ Ctrl+_ - Align &Left &Aligner à gauche - Ctrl+{ Ctrl+{ - Align &Center Aligner au &centre - Ctrl+| Ctrl+| - Align &Right Aligner à &droite - Ctrl+} Ctrl+} - Align &Justify &Justifier - Ctrl+J Ctrl+J - &Decrease Indent D&ésindenter - Ctrl+< Ctrl+< - I&ncrease Indent Inden&ter - Ctrl+> Ctrl+> - Le&ft to Right Block B&loc d'écriture de gauche à droite - Ri&ght to Left Block Bl&oc d'écriture de droite à gauche - &Tools O&utils - &Find... &Chercher... - Find &Next Occurrence &suivante - Find Pre&vious Occurrence &précédente - &Replace... &Remplacer... - Ctrl+R Ctrl+R - Smart &Quotes &Apostrophes typographiques - Update &Document Mettre à jour le &document - Update Document Smart Quotes - Update &Selection Mettre à jour la &sélection - Update Selection Smart Quotes - &Spelling... Ortho&graphe... - F7 F7 - Set &Language... Définir le &langage ... - &Timers... C&hronomètres... - S&ymbols... S&ymboles... - &Daily Progress &Progrès quotidien - &Settings &Configuration - Show &Toolbar Afficher la barre d'&outils - Show &Menu Icons &Montrer les icônes dans le menu - F&ocused Text Texte en é&vidence - &Fullscreen Pl&ein écran - F11 F11 - Esc Esc - M&inimize M&inimiser - Ctrl+M Ctrl+M - &Themes... &Thèmes... - &Preferences... &Préférences... - Focus Off Zoom désactivé - Focus One Line Zoom sur une ligne - Focus Three Lines Zoom sur trois lignes - &Paragraph &Paragraphe - Focus Paragraph Zoom sur paragraphe - Ctrl+Shift+` Ctrl+Maj+` - &Help &Aide - Application &Language... &Langue de l'application... - Some files were unsupported and could not be opened. Certains fichiers non pris en charge n'ont pas pu être ouverts. - &Off &HF - One &Line Une &ligne - &Three Lines &Trois lignes - &About À &propos - About &Qt À propos de &Qt diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index 60400050..6d16de16 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -4,17 +4,14 @@ Alert - Close (%1) סגור (%1) - Collapse צמצם - Expand הרחב @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert סלק אתראה - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% מתוך דקה %Ln @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% מתוך %Ln מילים @@ -51,7 +44,6 @@ - %Ln word(s) מילה %Ln @@ -59,7 +51,6 @@ - %Ln minute(s) דקה %Ln @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress התקדמות יומית - Longest streak תקופה ארוכה ביותר - Current streak תקופה נוכחית - N/A ל/ז - %n day(s) יום %n @@ -103,7 +88,6 @@ - %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% מתוך היעד היומי @@ -120,7 +102,6 @@ DictionaryDialog - Set Language קביעת שפה @@ -128,81 +109,62 @@ Document - (Untitled %1) (ללא כותרת %1) - %1 (Read-Only) %1 (קריאה-בלבד) - - - - Sorry צר לי - Unable to save '%1'. אין אפשרות לשמור '%1'. - Save File As שמירת קובץ בשם - - Unable to overwrite '%1'. אין אפשרות להחליף את '%1'. - Rename File שינוי שם קובץ - Unable to rename '%1'. אין אפשרות לשנות שם '%1'. - Reload File? לטעון מחדש קובץ? - Reload the file '%1' from disk? לטעון מחדש קובץ '%1' מתוך כונן? - All unsaved changes will be lost. כל השינויים שלא נשמרו יאבדו. - Reload טעינה מחדש - Untitled %1 ללא כותרת %1 - Question שאלה - Saving as plain text will discard all formatting. Discard formatting? שמירה כתמליל גלוי תתעלם מכל העיצוב. האם להתעלם מן עיצוב? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed קובץ שונה - The file '%1' was changed by another program. הקובץ '%1' שונה על ידי תוכנית אחרת. - Do you want to reload the file? האם ברצונך להטעין את הקובץ מחדש? - Reload טעינה מחדש - Ignore התעלם מן אירוע - File Deleted קובץ נמחק - The file %1 was deleted by another program. הקובץ %1 נמחק על ידי תוכנית אחרת. - Do you want to save or close the file? האם ברצונך לשמור או לסגור את הקובץ? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. אין אפשרות לפתוח ארכיון. @@ -261,67 +214,54 @@ FindDialog - Search for: חפש עבור: - Replace with: החלף עם: - Ignore case התעלם מרישיות - Whole words only כל המילים בלבד - Regular expressions ביטויים רגולריים - Search up חפש מעלה - Search down חפש מטה - &Find &מצא - &Replace &החלף - Replace &All החלף ה&כל - Find מציאה - Replace החלפה - Replace %n instance(s)? להחליף מאורע %n? @@ -329,19 +269,14 @@ - Question שאלה - - Sorry צר לי - - Phrase not found. צירוף מילים לא נמצא. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text טקסט גלוי - All Files כל הקבצים - All Supported Files כל הקבצים הנתמכים @@ -387,17 +315,14 @@ Highlighter - Add הוסף - Check Spelling... בדיקת איות... - (No suggestions found) (לא נמצאו הצעות) @@ -405,12 +330,10 @@ ImageButton - Open Image פתוח תמונה - Images(%1) תמונות(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: בחירת שפת יישום: - <System Language> <שפת מערכת> - Note הערה - Please restart this application for the change in language to take effect. נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. אין אפשרות לפתוח ארכיון. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences העדפות - General כללי - Statistics סטטיסטיקה - Toolbar סרגל כלים - Spell Checking בדיקת איות - Select Dictionary בחירת מילון - - Sorry צר לי - Unable to open archive. אין אפשרות לפתוח ארכיון. - The archive does not contain a usable dictionary. הארכיון לא מכיל מילון שמיש. - - - - Question שאלה - Shortcuts קיצורי דרך - One or more shortcuts conflict. Do you wish to proceed? מתנגשים קיצור דרך אחד או יותר. האם ברצונך להמשיך? - The dictionary "%1" already exists. Do you want to replace it? המילון "%1" כבר קיים. האם ברצונך להחליפו? - Daily Goal יעד יומי - None בלי - Minutes: דקות: - - Words: מילים: - Editing עריכה - Always vertically center תמיד ממורכז במאונך - Block insertion cursor סמן שיבוץ בלוק - Smooth fonts גופנים מלוטשים - Typewriter sounds צלילי מכונת כתיבה - Smart quotes: מרכאות חכמות: - Double כפולות - Single בודדות - Scenes מקטעים - Divider: מפריד: - Saving שמירה - Automatically save changes שמור שינויים אוטומטית - Remember cursor position זכור מיקום סמן - Word count ספור מילים - Page count ספור עמודים - Paragraph count ספור פסקאות - Character count ספור תווים - Characters: תווים: - Paragraphs: פסקאות: - Word Count Algorithm אלגוריתם ספירת מילים - Reset daily progress for today to zero? לאפס התקדמות יומית להיום אל אפס? - Remove current dictionary? להסיר מילון נוכחי? - Write byte order mark in plain text files - Default format: פורמט ברירת מחדל: - User Interface ממשק משתמש - Always show scrollbar הצג תמיד פס גלילה - Always show top bar הצג תמיד סרגל עליון - Always show bottom bar הצג תמיד סרגל תחתון - Reset Today איפוס היום - History היסטוריה - Remember history זכור היסטוריה - Show streaks הצג תקופות - Minimum progress for streaks: התקדמות נומינלית לתקופות: - Detect word boundaries אתר גבולות מילה - Divide character count by six חלק ספירת תו בשש (6) - Count each letter as a word ספור כל אות כאילו היתה מילה - Page Count Algorithm אלגוריתם ספירת עמוד - Style סגנון - Icons Only צלמיות בלבד - Text Only תמליל בלבד - Text Alongside Icons תמליל לצד צלמיות - Text Under Icons תמליל תחת צלמיות - Text Position: מיקום תמליל: - Actions פעולות - Move Up הזז מעלה - Move Down הזז מטה - Add Separator הוסף חוצץ - Command פקודה - Shortcut קיצור דרך - Action פעולה - Check spelling as you type בדוק איות בעת הקלדה - Ignore words in UPPERCASE התעלם ממילים עיליות - Ignore words with numbers התעלם ממילים עם אותיות - Language שפה - - Add הוסף - - Remove הסר - Personal Dictionary מילון אישי @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. לא קובץ RTF נתמך. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. הגיע באופן מפתיע לסוף קובץ. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+מטה - Move Scenes Up הזז מקטעים מעלה - Ctrl+Shift+Up Ctrl+Shift+מעלה - Toggle Scene List הצג/הסתר רשימת מקטע - Shift+F4 Shift+F4 - Show scene list (%1) הצג רשימת מקטע (%1) - Hide scene list (%1) הסתר רשימת מקטע (%1) - Filter סינון - Move Scenes Down הזז מקטעים מטה - Resize scene list שנה גודל רשימת מקטע @@ -899,12 +723,6 @@ Session - - - - - - Default ברירת מחדל @@ -912,97 +730,78 @@ SessionManager - Manage Sessions ניהול סשנים - S&essions ס&שנים - New חדש - Duplicate שכפל - Rename שנה שם - Delete מחק - Switch To החלף אל - New Session סשן חדש - Duplicate Session שכפול סשן - Rename Session שינוי שם סשן - Question שאלה - Delete selected session? למחוק סשן נבחר? - Session name: שם סשן: - Sorry צר לי - The requested session name is already in use. שם הסשן המבוקש כבר מצוי בשימוש. - &New... &חדש... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &ניהול... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear טהר - Reset to Default אפס - - Shortcut: קיצור דרך: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... מחליף כעת סימני מרכאות... - Please Wait נא להמתין @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling בדיקת איות - &Add הו&סף - &Ignore הת&עלם - I&gnore All התעלם מ&הכל - &Change &שנה - C&hange All שנה ה&כל - Not in dictionary: לא במילון: - Change to: שנה אל: - Checking spelling... בודק כעת איות... - Cancel ביטול - Please wait נא להמתין - Continue checking at beginning of file? להמשיך לבדוק בתחילתו של קובץ? - Spell check complete. בדיקת איות הושלמה. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols סמלים - Recently used symbols סמלים שנשתמשו לאחרונה - All symbols כל הסמלים - Details פרטים - Name: שם: - Insert שבץ @@ -1143,12 +917,10 @@ SymbolsModel - Blocks בלוקים - Scripts תסריטים @@ -1156,7 +928,6 @@ Theme - Untitled %1 ללא כותרת %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: שם: - No Image אין תמונה - Tiled מרוצף - - Centered ממורכז - - Stretched פרוש - Scaled מתוח - Zoomed מוקרב - Opacity: עמימות: - Position: מיקום: - Width: רוחב: - Round Text Background Corners פינות רקע טקסט מעוגלות - - - Radius: רדיוס: - Blur Text Background רקע טקסט מטושטש - Text Background Drop Shadow רקע טקסט עם הצלה - Vertical Offset: הדפסה אנכית: - Margins שוליים - Window: חלון: - Page: עמוד: - Indent first line הזח שורה ראשונה - Above: מעלה: - Below: מטה: - Remove הסר - Edit Theme עריכת מוטיב - Window Background רקע חלון - - Type: טיפוס: - - - - Color: צבע: - Image: תמונה: - - - - - - - - - - pixels פיקסלים - Left שמאל - Text Background רקע טקסט - Right ימין - Text תמליל - Font: גופן: - Misspelled: שגיאת כתיב: - Line Spacing ריווח שורה - Single בודדות - 1.5 Lines 1.5 שורות - Double כפולות - Proportional פרופורציונלי - Height: גובה: - Paragraph Spacing ריווח פסקאות - Tab Width: רוחב כרטיסייה: - New Theme מוטיב חדש @@ -1399,115 +1110,90 @@ ThemeManager - Themes מוטיבים - Default ברירת מחדל - Bitter Skies שמים מרים - Enchantment קסם - Gentle Blues כחולים עדינים - Old School בית ספר ותיק - Space Dreams פנטזיות חלל - Spy Games משחקי ריגול - Tranquility שלווה - Writing Desk שולחן כתיבה - - New חדש - - Duplicate שכפל - Custom מותאם - Edit ערוך - Delete מחק - Import יבא - Export יצא - Question שאלה - Delete theme '%1'? למחוק את מוטיב '%1'? - - Themes (%1) מוטיבים (%1) - Import Theme ייבוא מוטיב - Export Theme ייצוא מוטיב @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 - Question שאלה - Delete timer? למחוק שעון עצר? - <b>Words:</b> %L1 <b>מילים:</b> %L1 - <b>Pages:</b> %L1 <b>עמודים:</b> %L1 - <b>Paragraphs:</b> %L1 <b>פסקאות:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>תווים:</b> %L1 / %L2 - Set Delay הגדר שיהוי - Set Time הגדר זמן - Delay: שיהוי: - Time: זמן: - HH:mm:ss HH:mm:ss - Alarm אזעקה - Type: טיפוס: - Memo: מזכר: - Edit ערוך - Delete מחק @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running אין שעון עצר שמורץ @@ -1616,37 +1283,30 @@ TimerManager - Timers שעוני עצר - New חדש - Recent אחרונים - Question שאלה - Cancel editing timers? ביטול עריכת שעוני עצר? - +HH:mm:ss +HH:mm:ss - %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes מטעין כעת מוטיבים - Loading sounds מטעין כעת צלילים - - Untitled ללא כותרת - Open File פתיחת קובץ - About FocusWriter אדות ‫FocusWriter - - FocusWriter ‫FocusWriter - A simple fullscreen word processor עורך תמלילים פשוט במסך מלא - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme הצלמיות נלקחו מן הפרויקט <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license בשימוש תחת הרשיון <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 תווים: %L1 / %L2 - - Pages: %L1 עמודים: %L1 - - Paragraphs: %L1 פסקאות: %L1 - - Words: %L1 מילים: %L1 - - Opening %1 ‫‭%1‬ נפתח כעת - (Untitled %1) (ללא כותרת %1) - List all documents מנה את כל המסמכים - Switch to Next Document עבור אל מסמך בא - Switch to Previous Document עבור אל מסמך קודם - Switch to First Document עבור אל מסמך ראשון - Switch to Last Document עבור אל מסמך אחרון - Switch to Document %1 עבור אל מסמך %1 - Loading settings טוען כעת הגדרות - Emergency cache is not writable. מטמון חירום אינו בר כתיבה. - - Warning אזהרה - FocusWriter was not shut down cleanly. ‫FocusWriter לא סוים באופן מוסדר. - Restore from the emergency cache? לשחזר מתוך מטמון חירום? - Some files could not be opened. קבצים מסוימים לא יכלו להיפתח. - Some files were opened Read-Only. קבצים מסוימים נפתחו לקריאה-בלבד. - '%1' is newer than the cached copy. '%1' הינו חדש יותר מן העותק המוטמן. - Overwrite newer file? להחליף קובץ חדש? - Save Changes? לשמור שינויים? - Save changes to the file '%1' before closing? לשמור שינויים לתוך הקובץ '%1' טרם סגירה? - Your changes will be lost if you don't save them. השינויים שלך יאבדו אם לא תשמור אותם. - Unable to load typewriter sounds. אין אפשרות לטעון צלילי מכונת כתיבה. - &File &קובץ - &New &חדש - &Open... &פתיחה... - Reloa&d &טען מחדש - &Save &שמור - Save &As... שמירה &בשם... - &Rename... שי&נוי שם... - Save A&ll שמור ה&כל - Manage Sessions נהל סשנים - New Session סשן חדש - &Print... ה&דפסה... - Pa&ge Setup... ת&צורת עמוד... - &Close &סגור - &Quit י&ציאה - Ctrl+Q Ctrl+Q - &Edit ע&ריכה - &Undo בט&ל - &Redo ב&צע שוב - Cu&t &גזור - &Copy הע&תק - &Paste ה&דבק - Paste &Unformatted הדבק בלי &עיצוב - Ctrl+Shift+V Ctrl+Shift+V - Select &All בחר ה&כל - Select &Scene בחר &מקטע - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat עי&צוב - &Heading &כותרת - Heading &1 כותרת &1 - Heading &2 כותרת &2 - Heading &3 כותרת &3 - Heading &4 כותרת &4 - Heading &5 כותרת &5 - Heading &6 כותרת &6 - &Normal &רגיל - &Bold &מודגש - &Italic &נטוי - &Underline &קו תחתון - Stri&kethrough קו &חוצה - Ctrl+K Ctrl+K - Sup&erscript כיתוב &עילי - Ctrl+^ Ctrl+^ - &Subscript כיתוב &תחתי - Ctrl+_ Ctrl+_ - Align &Left יישור &שמאל - Ctrl+{ Ctrl+{ - Align &Center יישור מ&רכז - Ctrl+| Ctrl+| - Align &Right יישור &ימין - Ctrl+} Ctrl+} - Align &Justify יישור מ&אוזן - Ctrl+J Ctrl+J - &Decrease Indent &צמצם שוליים - Ctrl+< Ctrl+< - I&ncrease Indent &גידול שוליים - Ctrl+> Ctrl+> - Le&ft to Right Block בלוק שמ&אל אל ימין - Ri&ght to Left Block בלוק י&מין אל שמאל - &Tools &כלים - &Find... &חיפוש... - Find &Next מצא את ה&בא - Find Pre&vious מצא את ה&קודם - &Replace... &החלפה... - Ctrl+R Ctrl+R - Smart &Quotes מר&כאות חכמות - Update &Document עדכן &מסמך - Update Document Smart Quotes - Update &Selection עדכן &בחירה - Update Selection Smart Quotes - &Spelling... &איות... - F7 F7 - Set &Language... קביעת &שפה... - &Timers... &שעוני עצר... - S&ymbols... &סמלים... - &Daily Progress התקדמות &יומית - &Settings &הגדרות - Show &Toolbar הצג &סרגל כלים - Show &Menu Icons הצג &צלמיות תפריט - F&ocused Text תמליל ממור&כז - &Fullscreen &מסך מלא - F11 F11 - Esc Esc - M&inimize מ&זער - Ctrl+M Ctrl+M - &Themes... מו&טיבים... - &Preferences... &העדפות... - Focus Off בטל מרכוז - Focus One Line מרכז שורה אחת - Focus Three Lines מרכז שלוש שורות - &Paragraph &פסקה - Focus Paragraph מרכז פסקה - Ctrl+Shift+` - &Help &עזרה - Application &Language... &שפת יישום... - Some files were unsupported and could not be opened. קבצים מסוימים לא נתמכו ולא היתה אפשרות לפתוח אותם. - &Off &כבוי - One &Line שורה &אחת - &Three Lines &שלוש שורות - &About &אודות - About &Qt אודות &Qt diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 18211907..7945eab1 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Bezárás - Collapse Összezárás - Expand Kibontás @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Figyelmeztetés bezárása - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) - %1% of %Ln word(s) - %Ln word(s) - %Ln minute(s) - 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) - %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal @@ -115,7 +97,6 @@ DictionaryDialog - Set Language @@ -123,81 +104,62 @@ Document - (Untitled %1) (Névtelen %1) - %1 (Read-Only) - - - - Sorry Elnézést - Unable to save '%1'. Nem sikerült '%1' mentése. - Save File As Mentés másként - - Unable to overwrite '%1'. Nem sikerült '%1' felülírása. - Rename File Fájl átnevezése - Unable to rename '%1'. Nem sikerült '%1' átnevezése. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. Minden el nem mentett változtatás el fog veszni - Reload Újratöltés - Untitled %1 Névtelen %1 - Question Kérdés - Saving as plain text will discard all formatting. Discard formatting? Egyszerű szövegként való mentés minden formázást töröl. Töröl minden formázást? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed A fálj megváltozott - The file '%1' was changed by another program. - Do you want to reload the file? Újra akarja tölteni a fájlt? - Reload Újratöltés - Ignore Figyelmen kívül hagyás - File Deleted Fájl törölve - The file %1 was deleted by another program. A()z %1 fájlt egy másik program törölte - Do you want to save or close the file? El szeretné menteni vagy be szeretné zárni a fájlt? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. Nem sikerült a csomagfájl megnyitása. @@ -256,86 +209,68 @@ FindDialog - Search for: Keresés: - Replace with: Csere: - Ignore case Kis- és nagybetűk közötti különbség figyelmen kívül hagyása - Whole words only Csak teljes szavakat - Regular expressions Szabályos kifejezések - Search up Keresés felfelé - Search down Keresés lefelé - &Find &Keresés... - &Replace &Csere - Replace &All Összes &cseréje - Find Keresés - Replace Csere - Replace %n instance(s)? Kicseréljünk %n előfordulást? - Question Kérdés - - Sorry Elnézést - - Phrase not found. A keresett kifejezés nem található. @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -381,17 +309,14 @@ Highlighter - Add Hozzáadás - Check Spelling... Helyesírás-ellenőrzés... - (No suggestions found) (Nincsenek javaslatok) @@ -399,12 +324,10 @@ ImageButton - Open Image Kép megnyitása - Images(%1) Képek(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: Válaszd ki az alkalmazás nyelvét: - <System Language> <A rendszer nyelve> - Note Megjegyzés - Please restart this application for the change in language to take effect. Indítsd újra az alkalmazást, hogy a változtatások érvénybe lépjenek. @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. Nem sikerült a csomagfájl megnyitása. @@ -443,379 +361,298 @@ PreferencesDialog - Preferences Beállítások - General Általános - Statistics Statisztika - Toolbar Eszközsáv - Spell Checking Helyesírás-ellenőrzés - Select Dictionary Szótár kiválasztása - - Sorry Elnézést - Unable to open archive. Nem sikerült a csomagfájl megnyitása. - The archive does not contain a usable dictionary. Nincs használható szótár a csomagfájlban. - - - - Question Kérdés - Shortcuts Gyorsgombok - One or more shortcuts conflict. Do you wish to proceed? Egy vagy több gyorsgomb ütközik. Szeretné folytatni? - The dictionary "%1" already exists. Do you want to replace it? "%1" szótár már létezik. Le szeretnéd cserélni? - Daily Goal Napi cél - None Nincs - Minutes: Perc: - - Words: Szó: - Editing Szerkesztés - Always vertically center A kurzor maradjon függőlegesen középen - Block insertion cursor Blokkszerű kurzor - Smooth fonts Betűtípusok képének simítása - Typewriter sounds Írógéphangok - Smart quotes: Intelligens idézőjelek: - Double Dupla - Single Szimpla - Scenes Jelenetek - Divider: Elosztó - Saving Mentés - Automatically save changes A változtatások automatikus mentése - Remember cursor position A kurzor pozíciójának megjegyzése - Word count Szavak száma - Page count Oldalak száma - Paragraph count Bekezdések száma - Character count Karakterek száma - Characters: Karakter: - Paragraphs: Bekezdés: - Word Count Algorithm Szószámlálás algoritmusa - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries Szóhatárok felismerése - Divide character count by six Karakterszám osztása hattal - Count each letter as a word - Page Count Algorithm - Style Stílus - Icons Only Csak ikonok - Text Only Csak szöveg - Text Alongside Icons Szöveg az ikonok mellett - Text Under Icons Szöveg az ikonok alatt - Text Position: Szöveg helyzete: - Actions Akciók - Move Up Felfelé mozgatás - Move Down Lefelé mozgatás - Add Separator Elválasztó hozzáadása - Command Parancs - Shortcut Gyorsgomb - Action Akció - Check spelling as you type Helyesírás-ellenőrzés gépelés közben - Ignore words in UPPERCASE CSUPA NAGYBETŰS SZAVAK figyelmen kívül hagyása - Ignore words with numbers Számokat tartalmazó szavak figyelmen kívül hagyása - Language Nyelv - - Add Hozzáadás - - Remove Eltávolítás - Personal Dictionary Saját szótár @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Le - Move Scenes Up Jelenetek mozgatása felfelé - Ctrl+Shift+Up Ctrl+Shift+Fel - Toggle Scene List Jelenetek átváltása - Shift+F4 Shift+F4 - Show scene list (%1) Jelenetek listájának mutatása (%1) - Hide scene list (%1) Jelenetek listájának elrejtése (%1) - Filter Szűrő - Move Scenes Down Jelenetek mozgatása lefelé - Resize scene list Jelenek listájának átméretezése @@ -893,12 +717,6 @@ Session - - - - - - Default Alapértelmezett @@ -906,97 +724,78 @@ SessionManager - Manage Sessions Munkamenetek kezelése - S&essions Munkam&enetek - New Új - Duplicate - Rename Átnevezés - Delete Törlés - Switch To Váltás - New Session Új munkamenet - Duplicate Session - Rename Session Munkamenet átnevezése - Question Kérdés - Delete selected session? Töröljük a kijelölt munkamenetet? - Session name: Munkamenet neve: - Sorry Elnézést - The requested session name is already in use. A megadott munkamenet-név már használatban van. - &New... &Új... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Kezelés... - Ctrl+Shift+M Ctri+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear Törlés - Reset to Default Visszaállítás alapértelmezettre - - Shortcut: Gyorsgomb: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... Idézőjelek cseréje... - Please Wait Kérlek várj @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling Helyesírás-ellenőrzés - &Add &Hozzáadás - &Ignore &Figyelmen kívül hagyás - I&gnore All &Összes figyelmen kívül hagyása - &Change &Változtatás - C&hange All Összes változtatása - Not in dictionary: Nincs a szótárban: - Change to: Változtatás erre: - Checking spelling... Helyesírás ellenőrzése... - Cancel Mégsem - Please wait Kérlek, várj - Continue checking at beginning of file? - Spell check complete. A helyesírás-ellenőrzés befejeződött. @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols Szimbólumok - Recently used symbols Nemrég használt szimbólumok - All symbols Minden szimbólum - Details Részletek - Name: Név: - Insert Beszúrás @@ -1137,12 +911,10 @@ SymbolsModel - Blocks Tömbök - Scripts Szkriptek @@ -1150,7 +922,6 @@ Theme - Untitled %1 Névtelen %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: Név: - No Image Nincs kép - Tiled Mozaikozva - - Centered Középre igazítva - - Stretched Nyújtva - Scaled Kicsinyítve - Zoomed Nagyítva - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Eltávolítás - Edit Theme - Window Background - - Type: Típus: - - - - Color: Szín: - Image: Kép: - - - - - - - - - - pixels pixel - Left Bal - Text Background - Right Jobb - Text Szöveg - Font: Betűtípus: - Misspelled: Helyesírási hiba: - Line Spacing Sorközök - Single Szimpla - 1.5 Lines 1.5 Sor - Double Dupla - Proportional Arányos - Height: - Paragraph Spacing Bekezdésközök - Tab Width: - New Theme @@ -1393,115 +1104,90 @@ ThemeManager - Themes Témák - Default Alapértelmezett - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New Új - - Duplicate - Custom - Edit Szerkesztés - Delete Törlés - Import Importálás - Export Exportálás - Question Kérdés - Delete theme '%1'? - - Themes (%1) - Import Theme Téma importálása - Export Theme Téma exportálása @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Kérdés - Delete timer? Töröljük a a stoppert? - <b>Words:</b> %L1 <b>Szó:</b> %L1 - <b>Pages:</b> %L1 <b>Oldal:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Bekezdés:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Karakter:</b> %L1 / %L2 - Set Delay Visszafelé - Set Time Adott időben - Delay: Idő: - Time: Időpont: - HH:mm:ss HH:mm:ss - Alarm Figyelmeztetés - Type: Típus: - Memo: Emlékeztető: - Edit Szerkesztés - Delete Törlés @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nincsen futó stopper @@ -1610,37 +1277,30 @@ TimerManager - Timers Stopperek - New Új - Recent Legutóbbiak - Question Kérdés - Cancel editing timers? Félbehagyod a stopperek szerkesztését? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes Témák betöltése - Loading sounds Hangok betöltése - - Untitled Névtelen - Open File Fájl megnyitása - About FocusWriter A FocusWriter-ről - - FocusWriter FocusWriter - A simple fullscreen word processor Egy egyszerű teljesképernyős szövegszerkesztő - Copyright &copy; 2008-%1 Graeme Gott Szerzői jogvédelem alatt &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> licensz alatt kiadva - Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> ikontémából használ ikonokat - Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> licensz alatt használva - - Characters: %L1 / %L2 Karakter: %L1 / %L2 - - Pages: %L1 Oldal: %L1 - - Paragraphs: %L1 Bekezdés: %L1 - - Words: %L1 Szó: %L1 - - Opening %1 %1 megnyitása - (Untitled %1) (Névtelen %1) - List all documents - Switch to Next Document Váltás a következő dokumentumra - Switch to Previous Document Váltás az előző dokumentumra - Switch to First Document Váltás az első dokumentumra - Switch to Last Document Váltás az utolsó dokumentumra - Switch to Document %1 Váltás a(z) %1 dokumentumra - Loading settings Beállítások betöltése - Emergency cache is not writable. A vész-gyorsítótár nem írható. - - Warning Figyelmeztetés - FocusWriter was not shut down cleanly. A FocusWriter hibásan lett leállítva. - Restore from the emergency cache? Visszaállítsuk az adatokat a vész-gyorsítótárból? - Some files could not be opened. Néhány fájlt nem sikerült megnyitni. - Some files were opened Read-Only. Néhány fájl csak olvasható módon lett megnyitva. - '%1' is newer than the cached copy. '%1' újabb, mint a gyorsítótárazott másolata. - Overwrite newer file? Felülírjuk az újabb fájlt? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. Nem sikerült az írógép-hangok betöltése. - &File &Fájl - &New &Új - &Open... M&egnyitás... - Reloa&d Újratöltés & - &Save &Mentés - Save &As... Mentés m&ásként... - &Rename... Á&tnevezés... - Save A&ll &Összes mentése - Manage Sessions Munkamenetek kezelése - New Session Új munkamenet - &Print... &Nyomtatás... - Pa&ge Setup... - &Close Be&zárás - &Quit &Kilépés - Ctrl+Q Ctrl+Q - &Edit &Szerkesztés - &Undo &Visszavonás - &Redo &Újra - Cu&t &Kivágás - &Copy &Másolás - &Paste &Beillesztés - Paste &Unformatted Beillesztés &Formázatlanul - Ctrl+Shift+V Ctrl+Shift+V - Select &All &Összes kijelölése - Select &Scene &Jelenet kiválasztása - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmázás - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold &Vastag - &Italic &Dőlt - &Underline &Aláhúzott - Stri&kethrough &Áthúzott - Ctrl+K Ctrl+K - Sup&erscript &Felső index - Ctrl+^ Ctrl+^ - &Subscript A&lsó index - Ctrl+_ Ctrl+_ - Align &Left &Balra igazítás - Ctrl+{ Ctrl+{ - Align &Center &Középre igazítás - Ctrl+| Ctrl+| - Align &Right &Jobbra igazítás - Ctrl+} Ctrl+} - Align &Justify &Sorkizárt - Ctrl+J Ctrl+J - &Decrease Indent Behúzás &csökkentése - Ctrl+< Ctrl+< - I&ncrease Indent Behúzás &növelése - Ctrl+> Ctrl+> - Le&ft to Right Block Bal&ról jobbra blokk - Ri&ght to Left Block Jobbr&ól balra blokk - &Tools &Eszközök - &Find... &Keresés... - Find &Next K&övetkező keresése - Find Pre&vious &Előző keresése - &Replace... &Csere... - Ctrl+R Ctrl+R - Smart &Quotes Intelligens &idézőjelek - Update &Document &Dokumentum frissítése - Update Document Smart Quotes - Update &Selection &Kijelölés frissítése - Update Selection Smart Quotes - &Spelling... &Helyesírás... - F7 F7 - Set &Language... - &Timers... &Stopperek... - S&ymbols... &Szimbólumok - &Daily Progress - &Settings &Beállítások - Show &Toolbar &Eszköztár mutatása - Show &Menu Icons &Menü ikonok mutatása - F&ocused Text Fókuszált szöveg - &Fullscreen Teljes &képernyő - F11 F11 - Esc Esc - M&inimize M&inimalizálás - Ctrl+M Ctrl+M - &Themes... &Témák... - &Preferences... &Beállítások... - Focus Off Fókusz kikapcsolása - Focus One Line Egy sor fókuszálása - Focus Three Lines Három sor fókuszálása - &Paragraph &Bekezdés - Focus Paragraph Bekezdés fókuszálása - Ctrl+Shift+` - &Help &Segítség - Application &Language... Alkalmazás &nyelve... - Some files were unsupported and could not be opened. Néhány fájltípus nem támogatott és nem került megnyitásra. - &Off &Kikapcsolás - One &Line Egy &Sor - &Three Lines &Három sor - &About &Névjegy - About &Qt A &Qt-ról diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index a99322fd..f589f006 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Փակել (%1) - Collapse Ամփոփել - Expand Ընդարձակել @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Վերացնել նախազգուշացումը - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) %Ln րոպեի %1%-ը - %1% of %Ln word(s) %Ln բառի %1%-ը - %Ln word(s) %Ln բառ - %Ln minute(s) %Ln րոպե - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress Օրական առաջընթաց - Longest streak Ամենաերկար շերտը - Current streak Ներկա շերտը - N/A N/A - %n day(s) %n օր - %1 &ndash; %2 %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal Օրական սահմանաքանակի %1% @@ -115,7 +97,6 @@ DictionaryDialog - Set Language Ընտրել լեզուն @@ -123,81 +104,62 @@ Document - (Untitled %1) (Անանուն %1) - %1 (Read-Only) %1% (միայն ընթերցման համար) - - - - Sorry Ներողություն։ - Unable to save '%1'. «%1» նիշքի պահպանումը հնարավոր չէ։ - Save File As Պահպանել նիշքը որպես - - Unable to overwrite '%1'. «%1» նիշքի վերագրանցումը հնարավոր չէ։ - Rename File Վերանվանել նիշքը - Unable to rename '%1'. «%1» նիշքի վերանվանումը հնարավոր չէ։ - Reload File? Նիշքը նորի՞ց բացել։ - Reload the file '%1' from disk? «%1» նիշքը նորի՞ց բացել սկավառակից։ - All unsaved changes will be lost. Չպահպանված բոլոր փոփոխությունները կկորչեն։ - Reload Նորից բացել - Untitled %1 Անանուն %1 - Question Հարց - Saving as plain text will discard all formatting. Discard formatting? Հասարակ տեքստի ձևաչափով պահպանումը կվերացնի ձևավորումը։ Վերացնե՞լ ձևավորումը։ @@ -205,42 +167,34 @@ DocumentWatcher - File Changed Նիշքը փոփոխված է։ - The file '%1' was changed by another program. «%1» նիշքը մեկ այլ ծրագրով փոփոխվել է։ - Do you want to reload the file? Նիշքը նորի՞ց բացել։ - Reload Նորից բացել - Ignore Անտեսել - File Deleted Նիշքը ջնջված է։ - The file %1 was deleted by another program. %1 նիշքը մեկ այլ ծրագրով ջնջվել է։ - Do you want to save or close the file? Նիշքը պահպանե՞լ, թե փակել։ @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. Սեղմված նիշքը բացել հնարավոր չէ։ @@ -256,86 +209,68 @@ FindDialog - Search for: Փնտրել - Replace with: Փոխարինել հետևյալով՝ - Ignore case Մեծատառ թե փոքրատառ՝ կարևոր չէ։ - Whole words only Միայն ամբողջական բառեր - Regular expressions Կանոնավոր արտահայտություններ - Search up Փնտրել վերևում - Search down Փնտրել ներքևում - &Find Գ&տնել - &Replace &Փոխարինել - Replace &All Փոխարինել &բոլորը - Find Գտնել - Replace Փոխարինել - Replace %n instance(s)? Փոխարինե՞լ %n համընկումը։ - Question Հարց - - Sorry Ներողություն։ - - Phrase not found. Փնտրվածը չի գտնվել։ @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Հասարակ տեքստ - All Files Բոլոր նիշքերը - All Supported Files Ծրագրին համապատասխանող բոլոր նիշքերը @@ -381,17 +309,14 @@ Highlighter - Add Ավելացնել - Check Spelling... Ստուգել ուղղագրությունը... - (No suggestions found) (Տարբերակներ չկան) @@ -399,12 +324,10 @@ ImageButton - Open Image Բացել նկարը - Images(%1) Նկարներ(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: Ընտրել ծրագրի լեզուն - <System Language> <Համակարգի լեզուն> - Note Նշում - Please restart this application for the change in language to take effect. Լեզվի փոփոխության կայացման համար ծրագիրը վերագործարկել @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. Սեղմված նիշքը բացել հնարավոր չէ։ @@ -443,379 +361,298 @@ PreferencesDialog - Preferences Նախընտրանքներ - General Ընդհանուր - Statistics Վիճակագրություն - Toolbar Գործիքների վահանակ - Spell Checking Ուղղագրության ստուգում - Select Dictionary Ընտրել բառարան - - Sorry Ներողություն։ - Unable to open archive. Սեղմված նիշքը բացել հնարավոր չէ։ - The archive does not contain a usable dictionary. Սեղմված նիշքում գործածելի բառարան չկա։ - - - - Question Հարց - Shortcuts Ստեղների համադրություններ - One or more shortcuts conflict. Do you wish to proceed? Մեկ կամ մի քանի համադրություն համընկնում է։ Շարունակե՞լ։ - The dictionary "%1" already exists. Do you want to replace it? "%1" բառարանն արդեն կա։ Փոխարինել այն նորո՞վ։ - Daily Goal Օրական սահմանաքանակ - None Չիք - Minutes: Րոպեներ - - Words: Բառեր - Editing Խմբագրում - Always vertically center Միշտ կենտրոնում՝ ըստ ուղղահայացի - Block insertion cursor Ներմուծման ուղղանկյուն շարժագիծ - Smooth fonts Տառատեսակը հարթեցնել - Typewriter sounds Գրամեքենայի ձայն - Smart quotes: Չակերտները փոխել - Double Երկգծիկ - Single Միագծիկ - Scenes Դրվագներ - Divider: Բաժանիչ նշան - Saving Պահպանում - Automatically save changes Փոփոխությունները լռելյայն պահպանել - Remember cursor position Հիշել շարժագծի դիրքը - Word count Բառերի քանակ - Page count Էջերի քանակ - Paragraph count Պարբերությունների քանակ - Character count Նիշերի քանակ - Characters: Նիշեր - Paragraphs: Պարբերություններ - Word Count Algorithm Բառաքանակի հաշվարկի քայլաշար - Reset daily progress for today to zero? Օրական սահմանաքանակի այսօրվա բաժինը զրոյացնե՞լ։ - Remove current dictionary? Հեռացնե՞լ այս բառարանը - Write byte order mark in plain text files Հասարակ տեքստային նիշքերում գրել բայտերի կարգանիշը - Default format: Լռելյայն ձևաչափ - User Interface Օգտվողի միջերես - Always show scrollbar Միշտ ցույց տալ ոլորագոտին - Always show top bar Միշտ ցույց տալ վերին գոտին - Always show bottom bar Միշտ ցույց տալ ստորին գոտին - Reset Today Վերականգնել այսօր - History Պատմություն - Remember history Հիշել պատմությունը - Show streaks Ցույց տալ շերտերը - Minimum progress for streaks: Շերտերի նվազագույն առաջընթաց - Detect word boundaries Հաշվել բառերի սահմանները - Divide character count by six Նիշերի քանակը բաժանել վեցի - Count each letter as a word Ամեն տառ հաշվել որպես բառ - Page Count Algorithm Էջահաշվարկի քայլաշար - Style Ոճ - Icons Only Միայն պատկերակներ - Text Only Միայն տեքստ - Text Alongside Icons Տեքստ՝ պատկերակների կողքին - Text Under Icons Տեքստ՝ պատկերակների տակ - Text Position: Տեքստի դիրք - Actions Գործողություններ - Move Up Տանել վերև - Move Down Տանել ներքև - Add Separator Դնել բաժանագիծ - Command Հրաման - Shortcut Ստեղների համադրություն - Action Գործողություն - Check spelling as you type Ուղղագրությունը ստուգել մուտքագրմանը զուգընթաց - Ignore words in UPPERCASE Անտեսել ՄԵԾԱՏԱՌԵՐՈՎ բառերը - Ignore words with numbers Անտեսել թվանշաններով բառերը - Language Լեզու - - Add Ավելացնել - - Remove Հեռացնել - Personal Dictionary Անձնական բառարան @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. Անհամապատասխան RTF նիշք @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. Անսպասելի ժամանում նիշքի վերջին։ @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+վարընթաց սլաք - Move Scenes Up Դրվագները վերև տանել - Ctrl+Shift+Up Ctrl+Shift+վերընթաց սլաք - Toggle Scene List Ցույց տալ/թաքցնել դրվագացանկը - Shift+F4 Shift+F4 - Show scene list (%1) Ցույց տալ դրվագացանկը (%1) - Hide scene list (%1) Թաքցնել դրվագացանկը (%1) - Filter Զտել - Move Scenes Down Դրվագները ներքև տանել - Resize scene list Դրվագացանկի չափը փոխել @@ -893,12 +717,6 @@ Session - - - - - - Default Լռելյայն @@ -906,97 +724,78 @@ SessionManager - Manage Sessions Գործաժամերի կառավարում - S&essions &Գործաժամեր - New Նոր - Duplicate Կրկնօրինակել - Rename Վերանվանել - Delete Ջնջել - Switch To Փոխադրվել - New Session Նոր գործաժամ - Duplicate Session Կրկնօրինակել գործաժամը - Rename Session Վերանվանել գործաժամը - Question Հարց - Delete selected session? Ջնջե՞լ ընտրված գործաժամը։ - Session name: Գործաժամի անվանում - Sorry Ներողություն։ - The requested session name is already in use. Գործաժամի այդ անունն արդեն գործածվում է։ - &New... Ն&որ... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Կառավարում... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear Մաքրել - Reset to Default Վերականգնել լռելյայն կարգավորումը - - Shortcut: Ստեղների համադրություն @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... Չակերտների փոփոխում... - Please Wait Խնդրում ենք սպասել @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling Ստուգել ուղղագրությունը - &Add &Ավելացնել - &Ignore Անտեսել - I&gnore All Ան&տեսել ամբողջը - &Change &Փոխել - C&hange All Փո&խել ամբողջը - Not in dictionary: Բառարանում բացակայում է՝ - Change to: Փոխարինել հետևյալով՝ - Checking spelling... Ուղղագրության ստուգում... - Cancel Չեղարկել - Please wait Խնդրում ենք սպասել - Continue checking at beginning of file? Շարունակե՞լ ստուգումը նիշքի սկզբում։ - Spell check complete. Ուղղագրության ստուգումն ավարտված է։ @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols Նշաններ - Recently used symbols Վերջերս գործածված նշաններ - All symbols Բոլոր նշանները - Details Մանրամասներ - Name: Անվանում - Insert Ներմուծել @@ -1137,12 +911,10 @@ SymbolsModel - Blocks Բլոկներ - Scripts Գրանշաններ @@ -1150,7 +922,6 @@ Theme - Untitled %1 Անանուն %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: Անվանում - No Image Նկար պետք չէ - Tiled Սալապատված - - Centered Կենտրոնում տեղադրված - - Stretched Լայնքով ձգված - Scaled Համաչափորեն տարածված - Zoomed Խոշորացված - Opacity: Անթափանցություն՝ - Position: Դիրք՝ - Width: Լայնք՝ - Round Text Background Corners Տեքստի խորքի անկյունները կլորացնել - - - Radius: Շառավիղ՝ - Blur Text Background Տեքստի խորքն աղոտացնել - Text Background Drop Shadow Տեքստի խորքի ստվերանկում - Vertical Offset: Ուղղահայաց շեղում՝ - Margins Լուսանցքներ - Window: Պատուհան՝ - Page: Էջ՝ - Indent first line Առաջին տողագլուխը՝ ներքաշված - Above: Վերևից՝ - Below: Ներքևից՝ - Remove Հեռացնել - Edit Theme Թեմայի խմբագրում - Window Background Պատուհանի խորք - - Type: Տեսակ - - - - Color: Գույն - Image: Նկար - - - - - - - - - - pixels պիքսել - Left Ձախից - Text Background Տեքստի խորք - Right Աջից - Text Տեքստ - Font: Տառատեսակ - Misspelled: Սխալագիր բառեր - Line Spacing Միջտողային տարածություն - Single Մեկ տողաչափով - 1.5 Lines 1.5 տողաչափով - Double Կրկնակի տողաչափով - Proportional Համամասնական - Height: Բարձրություն - Paragraph Spacing Պարբերության տարածություն - Tab Width: Սյունատի լայնք - New Theme Նոր թեմա @@ -1393,115 +1104,90 @@ ThemeManager - Themes Թեմաներ - Default Լռելյայն - Bitter Skies Մռայլ երկինք - Enchantment Դյութանք - Gentle Blues Մեղմ բլյուզ - Old School Հին դպրոց - Space Dreams Տիեզերական երազներ - Spy Games Լրտեսական խաղեր - Tranquility Հանդարտություն - Writing Desk Գրասեղան - - New Նոր - - Duplicate Կրկնօրինակել - Custom Ուրիշ - Edit Խմբագրել - Delete Ջնջել - Import Ներմուծել - Export Արտահանել - Question Հարց - Delete theme '%1'? Ջնջե՞լ «%1» թեման։ - - Themes (%1) Թեմաներ (%1) - Import Theme Ներմուծել թեմա - Export Theme Թեման արտահանել @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Հարց - Delete timer? Ջնջե՞լ ժամաչափիչը։ - <b>Words:</b> %L1 <b>Բառեր</b> %L1 - <b>Pages:</b> %L1 <b>Էջեր</b> %L1 - <b>Paragraphs:</b> %L1 <b>Պարբերություններ</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Նիշեր</b> %L1 / %L2 - Set Delay Ընդմիջում - Set Time Ժամանակամիջոց - Delay: Ընդմիջում - Time: Ժամանակ - HH:mm:ss HH:mm:ss - Alarm Զարթուցիչ - Type: Տեսակ - Memo: Հաղորդագրություն - Edit Խմբագրել - Delete Ջնջել @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss ԺԺ:րր:վվ - No timers running Միացված ժամաչափիչ չկա։ @@ -1610,37 +1277,30 @@ TimerManager - Timers Ժամաչափիչներ - New Նոր - Recent Վերջերս գործածված - Question Հարց - Cancel editing timers? Չեղարկե՞լ ժամաչափիչների խմբագրումը։ - +HH:mm:ss +ԺԺ:րր:վվ - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes Թեմաների բեռնում - Loading sounds Ձայնային նիշքերի բեռնում - - Untitled Անանուն - Open File Բացել նիշքը - About FocusWriter FocusWriter-ի մասին - - FocusWriter FocusWriter - A simple fullscreen word processor Լիէկրան պարզ տեքստային խմբագրիչ - Copyright &copy; 2008-%1 Graeme Gott Պատճենաշնորհ &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Թողարկված է <a href=%1>GPL 3</a>-ի արտոնագրով։ - Uses icons from the <a href=%1>Oxygen</a> icon theme Գործածված են <a href=%1>Oxygen</a> թեմայի պատկերակները։ - Used under the <a href=%1>LGPL 3</a> license Պատկերակները գործածված են <a href=%1>LGPL 3</a>-ի արտոնագրով։ - - Characters: %L1 / %L2 Նիշեր՝ %L1 / %L2 - - Pages: %L1 Էջեր՝ %L1 - - Paragraphs: %L1 Պարբերություններ՝ %L1 - - Words: %L1 Բառեր՝ %L1 - - Opening %1 Բացվում է %1-ը - (Untitled %1) (Անանուն %1) - List all documents Բոլոր փաստաթղթերը - Switch to Next Document Անցնել հաջորդ փաստաթղթին - Switch to Previous Document Անցնել նախորդ փաստաթղթին - Switch to First Document Անցնել առաջին փաստաթղթին - Switch to Last Document Անցնել վերջին փաստաթղթին - Switch to Document %1 Անցնել %1 փաստաթղթին - Loading settings Կարգավորումները բեռնվում են - Emergency cache is not writable. Պահեստային հիշողությունը գրանցման ենթակա չէ։ - - Warning Զգուշացում - FocusWriter was not shut down cleanly. FocusWriter-ը ճիշտ չէր փակվել։ - Restore from the emergency cache? Վերականգնե՞լ պահեստային հիշողությունից։ - Some files could not be opened. Որոշ նիշքեր հնարավոր չեղավ բացել։ - Some files were opened Read-Only. Որոշ նիշքեր բացվել են միայն ընթերցման համար։ - '%1' is newer than the cached copy. «%1» նիշքը պահեստային օրինակից նոր է։ - Overwrite newer file? Նոր տարբերակը պահեստայինո՞վ փոխարինել։ - Save Changes? Պահպանե՞լ փոփոխությունները։ - Save changes to the file '%1' before closing? Փակելուց առաջ «%1» նիշքի փոփոխությունները պահպանե՞լ։ - Your changes will be lost if you don't save them. Փոփոխությունները կկորչեն, եթե դրանք չպահպանեք։ - Unable to load typewriter sounds. Հնարավոր չեղավ գրամեքենայի ձայնը բեռնել։ - &File &Նիշք - &New Ն&որ - &Open... &Բացել... - Reloa&d Նոր&ից բացել - &Save Պահպանել - Save &As... &Պահպանել որպես - &Rename... &Վերանվանել... - Save A&ll Պա&հպանել բոլորը - Manage Sessions Կա&ռավարել գործաժամերը - New Session Նոր գո&րծաժամ - &Print... &Տպել... - Pa&ge Setup... &Էջի կարգավորում... - &Close &Փակել - &Quit &Դուրս գալ - Ctrl+Q Ctrl+Q - &Edit &Խմբագրում - &Undo &Չեղարկել - &Redo &Կրկնել - Cu&t Կ&տրել - &Copy &Պատճենել - &Paste &Փակցնել - Paste &Unformatted Փակցնել &առանց ձևավորման - Ctrl+Shift+V Ctrl+Shift+V - Select &All &Ընտրել ամբողջը - Select &Scene Ընտրել &դրվագ - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Ձևավորում - &Heading &Գլխագիր - Heading &1 Գլխագիր &1 - Heading &2 Գլխագիր &2 - Heading &3 Գլխագիր &3 - Heading &4 Գլխագիր &4 - Heading &5 Գլխագիր &5 - Heading &6 Գլխագիր &6 - &Normal &Սովորական - &Bold &Թավատառ - &Italic &Շեղատառ - &Underline &Ընդգծված - Stri&kethrough &Ջնջագծված - Ctrl+K Ctrl+K - Sup&erscript &Վերտողագիր - Ctrl+^ Ctrl+^ - &Subscript &Ենթատողագիր - Ctrl+_ Ctrl+_ - Align &Left Ուղղել ձա&խից - Ctrl+{ Ctrl+{ - Align &Center Ուղղել &կենտրոնով - Ctrl+| Ctrl+| - Align &Right Ուղղել աջ&ից - Ctrl+} Ctrl+} - Align &Justify Երկու կողմից &հավասարեցնել - Ctrl+J Ctrl+J - &Decrease Indent &Փոքրացնել տողագլխի խորքը - Ctrl+< Ctrl+< - I&ncrease Indent Մե&ծացնել տողագլխի խորքը - Ctrl+> Ctrl+> - Le&ft to Right Block Ձախից աջ &տանել - Ri&ght to Left Block Աջից ձախ տա&նել - &Tools &Գործիքներ - &Find... Գ&տնել... - Find &Next Գտնել &հաջորդը - Find Pre&vious Գտնել &նախորդը - &Replace... &Փոխարինել... - Ctrl+R Ctrl+R - Smart &Quotes &Չակերտները փոխել - Update &Document &Թարմացնել փաստաթուղթը - Update Document Smart Quotes Ուղղել փաստաթղթի չակերտները - Update &Selection Թարմացնել &ընտրված հատվածը - Update Selection Smart Quotes Ուղղել ընտրված մասի չակերտները - &Spelling... Ու&ղղագրություն... - F7 F7 - Set &Language... Ընտրել &լեզուն... - &Timers... &Ժամաչափիչներ... - S&ymbols... Ն&շաններ... - &Daily Progress &Օրական առաջընթաց - &Settings &Կարգավորումներ - Show &Toolbar Ցույց տալ &գործիքների վահանակը - Show &Menu Icons Ցույց տալ &ընտրացանկի պատկերակները - F&ocused Text &Տեքստային հատվածի ընդգծում - &Fullscreen Ամբողջ &էկրանով - F11 F11 - Esc Esc - M&inimize &Ամփոփել - Ctrl+M Ctrl+M - &Themes... &Թեմաներ... - &Preferences... &Նախընտրանքներ... - Focus Off Անջատված է - Focus One Line Մեկ տողի ընդգծում - Focus Three Lines Երեք տողի ընդգծում - &Paragraph &Պարբերություն - Focus Paragraph Պարբերության ընդգծում - Ctrl+Shift+` Ctrl+Shift+` - &Help &Օգնություն - Application &Language... Ծրագրի &լեզուն... - Some files were unsupported and could not be opened. Որոշ նիշքեր ծրագրին չեն համապատասխանում և չեն կարող բացվել։ - &Off Ան&ջատված է - One &Line &Մեկ տող - &Three Lines &Երեք տող - &About &Ծրագրի մասին - About &Qt Qt-ի &մասին diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index f79cf00b..2fb24e69 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Tutup (%1) - Collapse Tutup - Expand Buka @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Hilangkan Peringatan - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) %1% dari %Ln menit - %1% of %Ln word(s) %1% dari %Ln kata - %Ln word(s) %Ln kata - %Ln minute(s) %Ln menit - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress Kemajuan Harian - Longest streak Rekor terpanjang - Current streak Rekor saat ini - N/A N/A - %n day(s) %n hari - %1 &ndash; %2 %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal %1% dari target harian @@ -115,7 +97,6 @@ DictionaryDialog - Set Language Pilih Bahasa @@ -123,81 +104,62 @@ Document - (Untitled %1) (Tanpa Judul %1) - %1 (Read-Only) %1 (Hanya Baca) - - - - Sorry Maaf - Unable to save '%1'. Gagal menyimpan '%1'. - Save File As Simpan File Sebagai - - Unable to overwrite '%1'. Gagal memperbarui '%1'. - Rename File Ubah Nama File - Unable to rename '%1'. Gagal mengubah nama '%1'. - Reload File? Muat Ulang File - Reload the file '%1' from disk? Muat ulang file %1 dari disk? - All unsaved changes will be lost. Semua perubahan yang tidak disimpan akan hilang. - Reload Muat ulang - Untitled %1 Tanpa Judul %1 - Question Pertanyaan - Saving as plain text will discard all formatting. Discard formatting? Menyimpan sebagai teks polos akan membuang semua format. Buang format? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed File Berubah - The file '%1' was changed by another program. File %1 berubah karena program lain. - Do you want to reload the file? Apakah Anda ingin memuat file ini? - Reload Muat ulang - Ignore Abaikan - File Deleted File Dihapus - The file %1 was deleted by another program. File %1 dihapus oleh program lain. - Do you want to save or close the file? Apakah Anda ingin menyimpan atau menutup file ini? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. Gagal membuka arsip. @@ -256,86 +209,68 @@ FindDialog - Search for: Cari: - Replace with: Gantikan dengan: - Ignore case Abaikan jenis huruf (kapital/kecil) - Whole words only Hanya keseluruhan kata - Regular expressions RegEx - Search up Cari ke atas - Search down Cari ke bawah - &Find &Temukan... - &Replace &Gantikan... - Replace &All Gantikan &Semua - Find Temukan - Replace Gantikan - Replace %n instance(s)? Gantikan %n lainnya? - Question Pertanyaan - - Sorry Maaf - - Phrase not found. Frase tidak ditemukan. @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text Teks OpenDocument - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Teks Polos - All Files Semua File - All Supported Files Semua File Yang Didukung @@ -381,17 +309,14 @@ Highlighter - Add Tambahkan - Check Spelling... Cek Ejaan... - (No suggestions found) (Saran tidak ditemukan) @@ -399,12 +324,10 @@ ImageButton - Open Image Buka Gambar - Images(%1) Gambar(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: Pilih bahasa: - <System Language> <System Language> - Note Catatan - Please restart this application for the change in language to take effect. Silakan tutup dan buka kembali aplikasi ini untuk menerapkan perubahan bahasa. @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. Gagal membuka arsip. @@ -443,379 +361,298 @@ PreferencesDialog - Preferences Preferensi - General Umum - Statistics Statistik - Toolbar Bilah Peralatan - Spell Checking Pemeriksaan Ejaan - Select Dictionary Pilih Kamus - - Sorry Maaf - Unable to open archive. Gagal membuka arsip. - The archive does not contain a usable dictionary. Arsip ini tidak memiliki kamus yang bisa dipergunakan. - - - - Question Pertanyaan - Shortcuts Shortcuts - One or more shortcuts conflict. Do you wish to proceed? Satu atau lebih shortcuts beradu. Apakah Anda ingin melanjutkan? - The dictionary "%1" already exists. Do you want to replace it? Kamus "%1" sudah ada. Anda ingin menggantikannya? - Daily Goal Target Harian - None Tak satupun - Minutes: Menit: - - Words: Kata: - Editing Mengedit - Always vertically center Selalu tengah secara vertikal - Block insertion cursor Blok kursor sisipan - Smooth fonts Font halus - Typewriter sounds Suara Mesin Ketik - Smart quotes: Kutipan cerdas: - Double Ganda - Single Tunggal - Scenes Suasana - Divider: Pembagi: - Saving Menyimpan - Automatically save changes Menyimpan perubahan secara otomatis - Remember cursor position Ingat posisi kursor - Word count Jumlah kata - Page count Jumlah halaman - Paragraph count Jumlah paragraf - Character count Jumlah karakter - Characters: Karakter: - Paragraphs: Paragraf: - Word Count Algorithm Algoritma Penjumlahan Kata - Reset daily progress for today to zero? Reset kemajuan harian hari ini ke nol? - Remove current dictionary? - Write byte order mark in plain text files Tulis byte order mark di file teks polos - Default format: Format standar: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Reset Hari Ini - History Riwayat - Remember history Ingat riwayat - Show streaks Tampilkan rekor - Minimum progress for streaks: Kemajuan minimum untuk rekor: - Detect word boundaries Deteksi batas-batas kata - Divide character count by six Bagikan jumlah karakter dengan 6 - Count each letter as a word Hitung tiap huruf sebagai kata - Page Count Algorithm Algoritma Penghitungan Halaman - Style Gaya - Icons Only Ikon saja - Text Only Teks saja - Text Alongside Icons Teks dan Ikon - Text Under Icons Teks di bawah Ikon - Text Position: Posisi Teks: - Actions Tindakan: - Move Up Naik - Move Down Turun - Add Separator Tambahkan Pemisah - Command Perintah - Shortcut Shortcut - Action Tindakan - Check spelling as you type Cek ejaan saat Anda mengetik - Ignore words in UPPERCASE Abaikan kata dalam huruf KAPITAL - Ignore words with numbers Abaikan kata dengan angka - Language Bahasa - - Add Tambahkan - - Remove Hapus - Personal Dictionary Kamus Pribadi @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. Bukan file RTF yang didukung. @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. Mencapai akhir file tanpa diduga. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Naikkan Suasana - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Toggle List Suasana - Shift+F4 Shift+F4 - Show scene list (%1) Tampilkan list suasana (%1) - Hide scene list (%1) Sembunyian list suasana (%1) - Filter Filter - Move Scenes Down Turunkan Suasana - Resize scene list Ubah ukuran list suasana @@ -893,12 +717,6 @@ Session - - - - - - Default Setelan Standar @@ -906,97 +724,78 @@ SessionManager - Manage Sessions Kelola Sesi - S&essions S&esi - New Baru - Duplicate Duplikat - Rename Ubah Nama - Delete Hapus - Switch To Pindah Ke - New Session Sesi Baru - Duplicate Session Duplikat Sesi - Rename Session Ubah Nama Sesi - Question Pertanyaan - Delete selected session? Hapus sesi terpilih? - Session name: Judul sesi: - Sorry Maaf - The requested session name is already in use. Nama sesi sudah pernah dipakai. - &New... &Baru... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Kelola... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear Bersihkan - Reset to Default Setelan Standar - - Shortcut: Shortcut: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... Mengganti tanda kutip... - Please Wait Mohon Tunggu @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling Memeriksa Ejaan - &Add &Tambahkan - &Ignore &Abaikan - I&gnore All Abaikan &Semua - &Change &Ubah - C&hange All U&bah Semua - Not in dictionary: Tak ada dalam kamus: - Change to: Ubah menjadi: - Checking spelling... Memeriksa ejaan... - Cancel Batalkan - Please wait Silakan tunggu - Continue checking at beginning of file? Lanjutkan mengecek awal file? - Spell check complete. Ejaan selesai diperiksa. @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols Simbol - Recently used symbols Simbol baru dipakai - All symbols Semua simbol - Details Rincian - Name: Nama: - Insert Sisipkan @@ -1137,12 +911,10 @@ SymbolsModel - Blocks Blok - Scripts Naskah @@ -1150,7 +922,6 @@ Theme - Untitled %1 Tanpa Judul %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: Nama: - No Image Tanpa gambar - Tiled Berjajar - - Centered Terpusat - - Stretched Terhampar - Scaled Terskala - Zoomed Di-zoom - Opacity: Transparansi: - Position: Posisi: - Width: Lebar: - Round Text Background Corners Sudut Latar Teks Bulat - - - Radius: Radius: - Blur Text Background Latar Teks Blur - Text Background Drop Shadow Bayangan Latar Teks - Vertical Offset: Offset Vertikal: - Margins Marjin - Window: Jendela: - Page: Halaman: - Indent first line Indent baris pertama - Above: Di Atas: - Below: Di Bawah: - Remove Buang - Edit Theme Edit Tema - Window Background Latar Jendela - - Type: Tipe: - - - - Color: Warna: - Image: Gambar: - - - - - - - - - - pixels piksel - Left Kiri - Text Background Latar Teks - Right Kanan - Text Teks - Font: Font: - Misspelled: Keliru eja: - Line Spacing Jarak Baris - Single Tunggal - 1.5 Lines 1.5 Baris - Double Ganda - Proportional Proporsional - Height: Tinggi: - Paragraph Spacing Jarak Paragraf - Tab Width: Lebar Tab: - New Theme Tema Baru @@ -1393,115 +1104,90 @@ ThemeManager - Themes Tema - Default Standar - Bitter Skies - Enchantment - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games - Tranquility - Writing Desk Nulis Meja - - New Baru - - Duplicate Duplikat - Custom Buatan - Edit Edit - Delete Hapus - Import Impor - Export Ekspor - Question Pertanyaan - Delete theme '%1'? Hapus tema '%1'? - - Themes (%1) Tema (%1) - Import Theme Impor Tema - Export Theme Ekspor Tema @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pertanyaan - Delete timer? Hapus pengukur waktu? - <b>Words:</b> %L1 <b>Kata:</b> %L1 - <b>Pages:</b> %L1 <b>Halaman:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragraf:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Karakter:</b> %L1 / %L2 - Set Delay Atur Penundaan - Set Time Atur Waktu - Delay: Tunda: - Time: Waktu: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Jenis: - Memo: Memo: - Edit Edit - Delete Hapus @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Tak ada pengukur waktu yang dijalankan @@ -1610,37 +1277,30 @@ TimerManager - Timers Pengukur Waktu - New Baru - Recent Mutakhir - Question Pertanyaan - Cancel editing timers? Batalkan pengaturan waktu? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes Memuat tema - Loading sounds Memuat suara - - Untitled Tanpa Judul - Open File Buka File - About FocusWriter Tentang FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Pengolah kata selayar penuh sederhana - Copyright &copy; 2008-%1 Graeme Gott Hak Cipta &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Dirilis dalam lisensi <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Menggunakan ikon dari tema ikon <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Digunakan dalam lisensi <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Karakter: %L1 / %L2 - - Pages: %L1 Halaman: %L1 - - Paragraphs: %L1 Paragraf: %L1 - - Words: %L1 Kata: %L1 - - Opening %1 Membuka %1 - (Untitled %1) (Tanpa Judul %1) - List all documents List semua dokumen - Switch to Next Document Beralih Ke Dokumen Berikutnya - Switch to Previous Document Beralih Ke Dokumen Sebelumnya - Switch to First Document Beralih Ke Dokumen Pertama - Switch to Last Document Beralih Ke Dokumen Terakhir - Switch to Document %1 Beralih Ke Dokumen %1 - Loading settings Memuat pengaturan - Emergency cache is not writable. Penyimpanan darurat tak bisa diedit. - - Warning Peringatan - FocusWriter was not shut down cleanly. FocusWriter tidak ditutup dengan baik. - Restore from the emergency cache? Kembalikan dari penyimpanan darurat? - Some files could not be opened. Beberapa file tak bisa dibuka. - Some files were opened Read-Only. Beberapa file dibuka secara Read-Only (tak bisa diedit). - '%1' is newer than the cached copy. '%1' lebih mutakhir daripada kopian yang tersimpan. - Overwrite newer file? Timpa file yang lebih baru? - Save Changes? Simpan Perubahan? - Save changes to the file '%1' before closing? Simpan perubahan ke file '%1' sebelum keluar? - Your changes will be lost if you don't save them. Perubahan Anda akan hilang jika Anda tidak menyimpan mereka. - Unable to load typewriter sounds. Gagal memuat suara mesin ketik. - &File &File - &New &Baru - &Open... &Buka... - Reloa&d &Muat Ulang - &Save &Simpan - Save &As... Simpan &sebagai... - &Rename... &Ubah Nama... - Save A&ll Simpan S&emua - Manage Sessions Kelola Sesi - New Session Sesi Baru - &Print... &Cetak... - Pa&ge Setup... - &Close &Tutup - &Quit &Keluar - Ctrl+Q Ctrl+Q - &Edit &Edit - &Undo &Undo - &Redo &Redo - Cu&t Po%tong - &Copy &Salin - &Paste &Tempelkan - Paste &Unformatted Paste &Tanpa Format - Ctrl+Shift+V Ctrl+Shift+V - Select &All Pilih &Semua - Select &Scene Pilih &Suasana - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmat - &Heading &Heading - Heading &1 Heading &1 - Heading &2 Heading &2 - Heading &3 Heading &3 - Heading &4 Heading &4 - Heading &5 Heading &5 - Heading &6 Heading &6 - &Normal &Normal - &Bold &Tebal - &Italic &Miring - &Underline &Garisbawah - Stri&kethrough Gar&iscoret - Ctrl+K Ctrl+K - Sup&erscript Sup&erscript - Ctrl+^ Ctrl+^ - &Subscript &Subscript - Ctrl+_ Ctrl+_ - Align &Left Rata &Kiri - Ctrl+{ Ctrl+{ - Align &Center Rata &Tengah - Ctrl+| Ctrl+| - Align &Right Rata &Kanan - Ctrl+} Ctrl+} - Align &Justify Rata &Sisi - Ctrl+J Ctrl+J - &Decrease Indent %Kurangi Indentasi - Ctrl+< Ctrl+< - I&ncrease Indent T&ambahkan Indentasi - Ctrl+> Ctrl+> - Le&ft to Right Block Bl&ok Kiri ke Kanan - Ri&ght to Left Block Bl&ok Kanan ke Kiri - &Tools &Peralatan - &Find... &Temukan... - Find &Next Temukan &berikutnya - Find Pre&vious Temukan Seb&elumnya - &Replace... &Gantikan... - Ctrl+R Ctrl+R - Smart &Quotes Kutipan &Cerdas - Update &Document Perbarui &Dokumen - Update Document Smart Quotes - Update &Selection Perbarui &Seleksi - Update Selection Smart Quotes - &Spelling... %Ejaan... - F7 F7 - Set &Language... Pilih &Bahasa... - &Timers... &Pengatur Waktu... - S&ymbols... S&imbol... - &Daily Progress &Kemajuan Harian - &Settings &Pengaturan - Show &Toolbar Tampilkan &Bilah Alat - Show &Menu Icons Tampilkan &Ikon Menu - F&ocused Text Teks Yang Difokus - &Fullscreen &Layar Penuh - F11 F11 - Esc Esc - M&inimize M&inimize - Ctrl+M Ctrl+M - &Themes... &Tema... - &Preferences... &Preferensi... - Focus Off Fokus Mati - Focus One Line Fokus Satu Baris - Focus Three Lines Fokus Tiga Baris - &Paragraph &Paragraf - Focus Paragraph Fokus Paragraf - Ctrl+Shift+` - &Help &Bantuan - Application &Language... Bahasa &Aplikasi... - Some files were unsupported and could not be opened. Beberapa file tak didukung dan tak bisa dibuka. - &Off &Mati - One &Line Satu &Baris - &Three Lines &Tiga Baris - &About &Tentang - About &Qt Tentang &Qt diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 1c769b44..ec7a81fe 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Chiudi (%1) - Collapse Riduci - Expand Espandi @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Chiudi avviso - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% minuti su %Ln @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% su %Ln parole @@ -51,7 +44,6 @@ - %Ln word(s) %Ln parole @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuti @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progresso giornaliero - Longest streak Sequenza più lunga - Current streak Sequenza corrente - N/A n/d - %n day(s) %n giorni @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% dell'obiettivo giornaliero @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Imposta lingua @@ -128,81 +109,62 @@ Document - (Untitled %1) (Senza titolo %1) - %1 (Read-Only) %1 (sola lettura) - - - - Sorry Spiacente - Unable to save '%1'. Impossibile salvare '%1'. - Save File As Salva con nome - - Unable to overwrite '%1'. Impossibile sovrascrivere '%1'. - Rename File Rinomina file - Unable to rename '%1'. Impossibile rinominare '%1'. - Reload File? Ricaricare il file? - Reload the file '%1' from disk? Ricaricare il file '%1' dal disco? - All unsaved changes will be lost. Tutte le modifiche non salvate andranno perse. - Reload Ricarica - Untitled %1 Senza titolo %1 - Question Domanda - Saving as plain text will discard all formatting. Discard formatting? Se si salva nel formato solo testo, la formattazione andrà persa. Eliminare la formattazione? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed File modificato - The file '%1' was changed by another program. Il file '%1' è stato modificato da un altro programma. - Do you want to reload the file? Vuoi ricaricare il file? - Reload Ricarica - Ignore Ignora - File Deleted File eliminato - The file %1 was deleted by another program. Il file '%1' è stato modificato da un altro programma. - Do you want to save or close the file? Vuoi salvare il file o chiuderlo? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Impossibile aprire l'archivio. @@ -261,67 +214,54 @@ FindDialog - Search for: Cerca: - Replace with: Sostituisci con: - Ignore case Ignora maiuscole/minuscole - Whole words only Solo parole intere - Regular expressions Espressioni regolari - Search up Cerca su - Search down Cerca giù - &Find &Cerca - &Replace &Sostituisci - Replace &All Sostitusci &tutto - Find Trova - Replace Sostituisci - Replace %n instance(s)? Sostituire %n istanze? @@ -329,19 +269,14 @@ - Question Domanda - - Sorry Spiacente - - Phrase not found. Frase non trovata. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Documenti di testo - All Files Tutti i file - All Supported Files Tutti i formati supportati @@ -387,17 +315,14 @@ Highlighter - Add Aggiungi - Check Spelling... Controllo ortografico... - (No suggestions found) (Nessun suggerimento trovato) @@ -405,12 +330,10 @@ ImageButton - Open Image Apri immagine - Images(%1) Immagini (%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Seleziona una lingua da utilizzare per l'applicazione: - <System Language> <Lingua di sistema> - Note Nota - Please restart this application for the change in language to take effect. Per modificare la lingua è necessario riavviare l'applicazione. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Impossibile aprire l'archivio. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferenze - General Generale - Statistics Statistiche - Toolbar Barra degli strumenti - Spell Checking Controllo ortografico - Select Dictionary Seleziona un dizionario - - Sorry Spiacente - Unable to open archive. Impossibile aprire l'archivio. - The archive does not contain a usable dictionary. L'archivio non contiene un dizionario utilizzabile. - - - - Question Domanda - Shortcuts Tasti di scelta rapida - One or more shortcuts conflict. Do you wish to proceed? C'è un conflitto tra i tasti di scelta rapida. Continuare comunque? - The dictionary "%1" already exists. Do you want to replace it? Il dizionario "%1" esiste già. Vuoi sostituirlo? - Daily Goal Obiettivo giornaliero - None Nessuno - Minutes: Minuti: - - Words: Parole: - Editing Modifica - Always vertically center Centra sempre in verticale - Block insertion cursor Blocca cursore di inserimento - Smooth fonts Font "morbide" - Typewriter sounds Suoni della macchina da scrivere - Smart quotes: Virgolette: - Double Doppie - Single Singole - Scenes Scene - Divider: Divisore - Saving Salvataggio - Automatically save changes Salva automaticamente le modifiche - Remember cursor position Ricorda la posizione del cursore - Word count Conteggio parole - Page count Conteggio pagine - Paragraph count Conteggio paragrafi - Character count Conteggio caratteri - Characters: Caratteri: - Paragraphs: Paragrafi: - Word Count Algorithm Algoritmo di conteggio parole - Reset daily progress for today to zero? Resettare a zero i progressi di oggi? - Remove current dictionary? Rimuovere il dizionario attualmente in uso? - Write byte order mark in plain text files Scrivi il BOM (Byte Order Mark) nei file di puro testo - Default format: Formato predefinito: - User Interface Interfaccia utente - Always show scrollbar Mostra sempre la barra di scorrimento - Always show top bar Mostra sempre la barra superiore - Always show bottom bar Mostra sempre la barra inferiore - Reset Today Azzera le statistiche di oggi - History Cronologia - Remember history Salva cronologia - Show streaks Mostra sequenze - Minimum progress for streaks: Progresso minimo per sequenza: - Detect word boundaries Rileva spazi tra le parole - Divide character count by six Dividi per sei il conteggio dei caratteri - Count each letter as a word Conta ciascuna lettera come una parola - Page Count Algorithm Algoritmo di conteggio pagine - Style Stile - Icons Only Solo icone - Text Only Solo testo - Text Alongside Icons Testo affiancato alle icone - Text Under Icons Testo sotto le icone - Text Position: Posizione testo: - Actions Azioni - Move Up Sposta su - Move Down Sposta giù - Add Separator Aggiungi separatore - Command Comando - Shortcut Tasto di scelta rapida - Action Azione - Check spelling as you type Controllo ortografico durante la digitazione - Ignore words in UPPERCASE Ignora parole MAIUSCOLE - Ignore words with numbers Ignora parole con numeri - Language Lingua - - Add Aggiungi - - Remove Rimuovi - Personal Dictionary Dizionario personale @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Questo file non è un file RTF supportato. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Fine del file raggiunta inaspettatamente. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Giù - Move Scenes Up Sposta scene su - Ctrl+Shift+Up Ctrl+Shift+Su - Toggle Scene List Attiva lista scene - Shift+F4 Shift+F4 - Show scene list (%1) Visualizza lista scene (%1) - Hide scene list (%1) Nascondi lista scene (%1) - Filter Filtro - Move Scenes Down Sposta scene giù - Resize scene list Ridimensiona lista scene @@ -899,12 +723,6 @@ Session - - - - - - Default Predefinita @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Gestione sessioni - S&essions Sess&ioni - New Nuova - Duplicate Duplica - Rename Rinomina - Delete Elimina - Switch To Passa a - New Session Nuova sessione - Duplicate Session Sessione duplicata - Rename Session Rinomina sessione - Question Domanda - Delete selected session? Eliminare la sessione selezionata? - Session name: Nome della sessione: - Sorry Spiacente - The requested session name is already in use. Il nome della sessione richiesto è già in uso. - &New... &Nuova... - Ctrl+Shift+N Ctrl+Maiusc+N - &Manage... &Gestisci... - Ctrl+Shift+M Ctrl+Maiusc+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Elimina - Reset to Default Ripristina predefinito - - Shortcut: Tasto di scelta rapida: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Sostituzione virgolette... - Please Wait Attendere prego @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Controllo ortografico - &Add &Aggiungi - &Ignore &Ignora - I&gnore All Ignora &tutto - &Change &Sostituisci - C&hange All Sostituisci t&utto - Not in dictionary: La parola evidenziata in rosso non è presente nel dizionario: - Change to: Sostituisci con: - Checking spelling... Controllo ortografico... - Cancel Annulla - Please wait Attendere prego - Continue checking at beginning of file? Continuare il controllo dall'inizio del file? - Spell check complete. Controllo ortografico completato. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Simboli - Recently used symbols Simboli usati recentemente - All symbols Tutti i simboli - Details Dettagli - Name: Nome: - Insert Inserisci @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocchi - Scripts Script @@ -1156,7 +928,6 @@ Theme - Untitled %1 Senza titolo %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nome: - No Image Nessuna immagine - Tiled Piastrellato - - Centered Centrato - - Stretched Allargato - Scaled Scalato - Zoomed Zoomato - Opacity: Opacità: - Position: Posizione: - Width: Larghezza: - Round Text Background Corners Angoli arrotondati sfondo del testo - - - Radius: Raggio: - Blur Text Background Sfondo del testo sfumato - Text Background Drop Shadow Ombra sfondo del testo - Vertical Offset: Orientamento verticale: - Margins Margini - Window: Finestra: - Page: Pagina: - Indent first line Applica rientro ad ogni a capo - Above: Sopra: - Below: Sotto: - Remove Rimuovi - Edit Theme Modifica tema - Window Background Sfondo della finestra - - Type: Tipo: - - - - Color: Colore: - Image: Immagine: - - - - - - - - - - pixels pixel - Left Sinistra - Text Background Sfondo del testo - Right Destra - Text Testo - Font: Tipo di carattere: - Misspelled: Errori di ortografia: - Line Spacing Interlinea - Single Singola - 1.5 Lines 1,5 righe - Double Doppia - Proportional Proporzionale - Height: Altezza: - Paragraph Spacing Spaziatura paragrafi - Tab Width: Rientro prima riga: - New Theme Nuovo tema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temi - Default Predefinito - Bitter Skies Cieli amari - Enchantment Incantesimo - Gentle Blues Dolce blues - Old School Vecchia scuola - Space Dreams Sogni dallo spazio - Spy Games Giochiamo alla spia - Tranquility Tranquillità - Writing Desk Scrittoio - - New Nuovo - - Duplicate Duplica - Custom Personalizza - Edit Modifica - Delete Elimina - Import Importa - Export Esporta - Question Domanda - Delete theme '%1'? Cancellare il tema '%1'? - - Themes (%1) Temi (%1) - Import Theme Importa tema - Export Theme Esporta tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Domanda - Delete timer? Cancellare il conteggio del tempo? - <b>Words:</b> %L1 <b>Parole:</b> %L1 - <b>Pages:</b> %L1 <b>Pagine:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragrafi:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caratteri:</b> %L1 / %L2 - Set Delay Imposta ritardo - Set Time Imposta tempo - Delay: Ritardo: - Time: Tempo: - HH:mm:ss HH:mm:ss - Alarm Allarme - Type: Tipo: - Memo: Promemoria: - Edit Modifica - Delete Elimina @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nessun timer in esecuzione @@ -1616,37 +1283,30 @@ TimerManager - Timers Timer - New Nuovo - Recent Documenti recenti - Question Domanda - Cancel editing timers? Annullare le modifiche al timer? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Caricamento del tema - Loading sounds Caricamento dei suoni - - Untitled Senza nome - Open File Apri file - About FocusWriter Info su FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un semplice elaboratore di testi a schermo intero - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Rilasciato sotto licenza <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Utilizza icone del tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Sotto licenza <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caratteri: %L1 / %L2 - - Pages: %L1 Pagine: %L1 - - Paragraphs: %L1 Paragrafi: %L1 - - Words: %L1 Parole: %L1 - - Opening %1 Apertura di %1 - (Untitled %1) (Senza nome %1) - List all documents Mostra tutti i documenti - Switch to Next Document Passa al documento successivo - Switch to Previous Document Passa al documento precedente - Switch to First Document Passa al primo documento - Switch to Last Document Passa all'ultimo documento - Switch to Document %1 Passa al documento %1 - Loading settings Caricamento delle impostazioni - Emergency cache is not writable. La cache di ripristino non è scrivibile. - - Warning Attenzione - FocusWriter was not shut down cleanly. FocusWriter non è stato chiuso correttamente. - Restore from the emergency cache? Ripristinare i file dalla cache? - Some files could not be opened. Non è stato possibile aprire alcuni file. - Some files were opened Read-Only. Alcuni file sono stati aperti in sola lettura. - '%1' is newer than the cached copy. '%1' è più recente della copia memorizzata nella cache. - Overwrite newer file? Sovrascrivere il file più recente? - Save Changes? Salvare le modifiche? - Save changes to the file '%1' before closing? Salvare le modifiche al file '%1' prima di chiudere? - Your changes will be lost if you don't save them. Le modifiche apportate al file andranno perse se non vengono prima salvate. - Unable to load typewriter sounds. Impossibile caricare i suoni della macchina da scrivere. - &File &File - &New &Nuovo - &Open... &Apri... - Reloa&d &Ricarica - &Save &Salva - Save &As... Sal&va con nome... - &Rename... Rino&mina... - Save A&ll Salva &tutto - Manage Sessions Gestione sessioni - New Session Nuova sessione - &Print... Stam&pa... - Pa&ge Setup... Imp&osta pagina - &Close &Chiudi - &Quit &Esci - Ctrl+Q Ctrl+Q - &Edit &Modifica - &Undo &Annulla - &Redo &Ripeti - Cu&t Ta&glia - &Copy &Copia - &Paste &Incolla - Paste &Unformatted Incolla senza &formattazione - Ctrl+Shift+V Ctrl+Shift+V - Select &All Seleziona &tutto - Select &Scene Seleziona &scena - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmato - &Heading &Intestazione - Heading &1 Intestazione &1 - Heading &2 Intestazione &2 - Heading &3 Intestazione &3 - Heading &4 Intestazione &4 - Heading &5 Intestazione &5 - Heading &6 Intestazione &6 - &Normal &Normale - &Bold &Grassetto - &Italic &Corsivo - &Underline &Sottolineato - Stri&kethrough B&arrato - Ctrl+K Ctrl+K - Sup&erscript Ap&ice - Ctrl+^ Ctrl+^ - &Subscript &Pedice - Ctrl+_ Ctrl+_ - Align &Left A&llinea testo a sinistra - Ctrl+{ Ctrl+{ - Align &Center C&entra testo - Ctrl+| Ctrl+| - Align &Right Allinea testo a &destra - Ctrl+} Ctrl+} - Align &Justify Giustifica &testo - Ctrl+J Ctrl+J - &Decrease Indent &Riduci rientro - Ctrl+< Ctrl+< - I&ncrease Indent A&umenta rientro - Ctrl+> Ctrl+> - Le&ft to Right Block &Blocca testo a sinistra - Ri&ght to Left Block Bl&occa testo a destra - &Tools &Strumenti - &Find... &Trova... - Find &Next Trova succ&essivo - Find Pre&vious Trova pre&cedente - &Replace... &Sostituisci... - Ctrl+R Ctrl+R - Smart &Quotes &Virgolette - Update &Document Aggiorna &documento - Update Document Smart Quotes Aggiorna virgolette nel documento - Update &Selection Aggiorna &selezione - Update Selection Smart Quotes Aggiorna virgolette nel testo selezionato - &Spelling... Controllo &ortografico... - F7 F7 - Set &Language... Imposta &lingua - &Timers... &Timer... - S&ymbols... S&imboli - &Daily Progress &Progresso giornaliero - &Settings &Impostazioni - Show &Toolbar Mostra &barra degli strumenti - Show &Menu Icons Mostra &icone nei menu - F&ocused Text Testo a &fuoco - &Fullscreen &Schermo intero - F11 F11 - Esc Esc - M&inimize &Minimizza - Ctrl+M Ctrl+M - &Themes... &Temi... - &Preferences... &Preferenze... - Focus Off Disattiva messa a fuoco - Focus One Line Metti a fuoco una linea - Focus Three Lines Metti a fuoco tre linee - &Paragraph &Paragrafo - Focus Paragraph Metti a fuoco il paragrafo - Ctrl+Shift+` Ctrl+Shift+` - &Help &Aiuto - Application &Language... Lingua &applicazione... - Some files were unsupported and could not be opened. Alcuni file non sono supportati e pertanto non è possibile aprirli. - &Off &Non attivo - One &Line &Una linea - &Three Lines &Tre linee - &About &Informazioni su - About &Qt Informazioni su &Qt diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 1fc8e4bd..a59080c0 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -4,17 +4,14 @@ Alert - Close (%1) 閉じる (%1) - Collapse セッション (&S) - Expand 詳細 @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert 警告を無視する - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) 全 %Ln 分中 %1% - %1% of %Ln word(s) 全 %Ln 単語中 %1% - %Ln word(s) 全 %Ln 単語 - %Ln minute(s) 全 %Ln 分 - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress 日毎の進捗 - Longest streak 最長連続執筆期間 - Current streak 現在の連続執筆期間 - N/A N/A - %n day(s) %n 日 - %1 &ndash; %2 %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal 一日の目標の %1% @@ -115,7 +97,6 @@ DictionaryDialog - Set Language 言語の変更 @@ -123,81 +104,62 @@ Document - (Untitled %1) (無題 %1) - %1 (Read-Only) %1 (読み込み専用) - - - - Sorry エラー - Unable to save '%1'. '%1' を保存できませんでした。 - Save File As 名前を付けて保存 - - Unable to overwrite '%1'. '%1' を上書きすることができませんでした。 - Rename File ファイル名の変更 - Unable to rename '%1'. '%1' の名前を変更できませんでした。 - Reload File? ファイルを再読み込みしますか? - Reload the file '%1' from disk? ファイル %1 を再読み込みしますか? - All unsaved changes will be lost. 保存されていない変更はすべて失われます。 - Reload 再読み込み - Untitled %1 無題 %1 - Question 問い合わせ - Saving as plain text will discard all formatting. Discard formatting? プレーン・テキストとして保存した場合、すべての書式が失われます。よろしいですか? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed ファイルが変更されています - The file '%1' was changed by another program. 他のプログラムによりファイル %1 は変更されています。 - Do you want to reload the file? ファイルを読み込み直しますか? - Reload 再読み込み - Ignore 無視 - File Deleted ファイルが削除されました - The file %1 was deleted by another program. 他のプログラムによりファイル %1 は削除されました。 - Do you want to save or close the file? ファイルを保存、または閉じますか? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. アーカイブを開けませんでした。 @@ -256,86 +209,68 @@ FindDialog - Search for: 検索する文字列: - Replace with: 置換後の文字列: - Ignore case 大文字と小文字を区別しない - Whole words only 単語単位で探す - Regular expressions 正規表現 - Search up 前を検索 - Search down 次を検索 - &Find 検索 (&F) - &Replace 置換 (&R) - Replace &All すべて置換 (&A) - Find 検索 - Replace 置換 - Replace %n instance(s)? %n 件置換しますか? - Question 確認 - - Sorry エラー - - Phrase not found. 見つかりませんでした。 @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text OpenDocument 文書 - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format リッチ テキスト形式 - Plain Text テキスト文書 - All Files すべてのファイル - All Supported Files サポートされているすべてのファイル @@ -381,17 +309,14 @@ Highlighter - Add 追加 - Check Spelling... スペルチェック... - (No suggestions found) (修正候補は見つかりませんでした) @@ -399,12 +324,10 @@ ImageButton - Open Image 画像の選択 - Images(%1) 画像 (%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: 言語の選択: - <System Language> <システムの言語> - Note 注意 - Please restart this application for the change in language to take effect. 言語の変更を反映させるためにアプリケーションを再起動してください。 @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. アーカイブを開けませんでした。 @@ -443,379 +361,298 @@ PreferencesDialog - Preferences 設定 - General 一般 - Statistics 統計 - Toolbar ツール バー - Spell Checking スペルチェック - Select Dictionary 辞書の選択 - - Sorry エラー - Unable to open archive. アーカイブを開けませんでした。 - The archive does not contain a usable dictionary. このアーカイブには有効な辞書が含まれていません。 - - - - Question 確認 - Shortcuts ショートカット一覧 - One or more shortcuts conflict. Do you wish to proceed? ショートカットがいくつかバッティングしています。続行してもよろしいですか? - The dictionary "%1" already exists. Do you want to replace it? "%1" という名前の辞書は既にあります。置き換えても良いですか? - Daily Goal 一日の目標 - None なし - Minutes: 分: - - Words: 語: - Editing 編集 - Always vertically center カーソル位置を常に縦方向の中央にする - Block insertion cursor 挿入モードでもブロック形のカーソルを使う - Smooth fonts フォントをなめらかにする - Typewriter sounds タイプライター音を再生する - Smart quotes: スマート引用符: - Double 二重 - Single 一重 - Scenes シーン一覧 - Divider: ディバイダー: - Saving 保存 - Automatically save changes 変更を自動的に保存する - Remember cursor position カーソル位置を記憶する - Word count 単語数 - Page count ページ数 - Paragraph count 段落数 - Character count 文字数 - Characters: 文字 - Paragraphs: 段落 - Word Count Algorithm 単語数カウント・アルゴリズム - Reset daily progress for today to zero? 今日の進捗状況を0にリセットしますか? - Remove current dictionary? - Write byte order mark in plain text files プレーンテキストにも BOM を追加する - Default format: デフォルトの形式: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today 本日分をリセット - History 履歴 - Remember history 履歴を保存する - Show streaks 連続執筆期間の表示 - Minimum progress for streaks: 連続執筆期間の最小値: - Detect word boundaries 単語の境界を認識する - Divide character count by six 文字数を 6 で割る - Count each letter as a word 一文字ごとに単語として数える - Page Count Algorithm ページ数カウント・アルゴリズム - Style スタイル - Icons Only アイコンのみ - Text Only 文字のみ - Text Alongside Icons アイコンの横に文字 - Text Under Icons アイコンの下に文字 - Text Position: 文字の位置: - Actions アクション - Move Up 上へ移動 - Move Down 下へ移動 - Add Separator セパレーターを追加 - Command コマンド - Shortcut ショートカット - Action アクション - Check spelling as you type タイプするごとにチェックする - Ignore words in UPPERCASE 大文字を無視する - Ignore words with numbers 数字が含まれる単語を無視する - Language 言語 - - Add 追加 - - Remove 削除 - Personal Dictionary ユーザー辞書 @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. サポートしていないリッチ テキスト形式です。 @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. ファイルの最後に到達しました。 @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up シーンをひとつ上に移動 - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List シーン・リストの表示の切り替え - Shift+F4 Shift+F4 - Show scene list (%1) シーン・リストの表示 (%1) - Hide scene list (%1) シーン・リストの非表示 (%1) - Filter 絞込み - Move Scenes Down シーンをひとつ下に移動 - Resize scene list シーン・リストのリサイズ @@ -893,12 +717,6 @@ Session - - - - - - Default デフォルト @@ -906,97 +724,78 @@ SessionManager - Manage Sessions セッションの管理 - S&essions セッション (&S) - New 新規 - Duplicate 複製 - Rename 名前の変更 - Delete 削除 - Switch To 切り替え - New Session 新しいセッション - Duplicate Session セッションの複製 - Rename Session セッション名の変更 - Question 確認 - Delete selected session? 選択中のセッションを削除しますか? - Session name: セッション名: - Sorry エラー - The requested session name is already in use. 指定したセッション名は既にあります。 - &New... 新規 (&N)... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... 管理 (&M)... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear 消去 - Reset to Default デフォルトに戻す - - Shortcut: ショートカット: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... 引用符の置換... - Please Wait お待ちください @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling スペルチェック - &Add 追加 (&A) - &Ignore 無視 (&I) - I&gnore All すべて無視 (&G) - &Change 変更 (&C) - C&hange All すべて変更 (&H) - Not in dictionary: 辞書にないもの: - Change to: 変更後: - Checking spelling... スペルチェック中です... - Cancel キャンセル - Please wait お待ちください - Continue checking at beginning of file? ファイルの先頭からチェックを続けますか? - Spell check complete. スペルチェックが終わりました。 @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols シンボル一覧 - Recently used symbols 最近使ったシンボル - All symbols すべてのシンボル - Details 詳細 - Name: 名前: - Insert 挿入 @@ -1137,12 +911,10 @@ SymbolsModel - Blocks ブロック - Scripts スクリプト @@ -1150,7 +922,6 @@ Theme - Untitled %1 無題 %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: 名前: - No Image イメージなし - Tiled 並べて表示 - - Centered 中央に表示 - - Stretched 画面に合わせて伸縮 - Scaled ページ縦幅に合わせる - Zoomed ページ横幅に合わせる - Opacity: 不透明度: - Position: 位置: - Width: 幅: - Round Text Background Corners テキスト背景の角を丸める - - - Radius: 半径: - Blur Text Background テキスト背景をぼやかす: - Text Background Drop Shadow テキスト背景の影 - Vertical Offset: 垂直方向の距離: - Margins マージン - Window: ウィンドウ: - Page: ページ: - Indent first line 最初の行をインデントする - Above: 上に: - Below: 下に: - Remove 削除 - Edit Theme テーマを編集 - Window Background ウィンドウの背景 - - Type: 画像の配置: - - - - Color: 背景色: - Image: 画像: - - - - - - - - - - pixels ピクセル - Left 左寄せ - Text Background テキスト背景 - Right 右寄せ - Text 文字 - Font: フォント: - Misspelled: スペルミス: - Line Spacing 行間のスペース - Single シングル - 1.5 Lines 1.5倍 - Double 2倍 - Proportional プロポーショナル - Height: 高さ: - Paragraph Spacing 段落間のマージン - Tab Width: タブ幅: - New Theme 新しいテーマ @@ -1393,115 +1104,90 @@ ThemeManager - Themes テーマ - Default デフォルト - Bitter Skies - Enchantment - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games - Tranquility - Writing Desk Writing Desk - - New 新規 - - Duplicate 複製 - Custom カスタム - Edit 編集 - Delete 削除 - Import インポート - Export エクスポート - Question 確認 - Delete theme '%1'? テーマ '%1' を削除しますか? - - Themes (%1) テーマ (%1) - Import Theme テーマのインポート - Export Theme テーマのエクスポート @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question 確認 - Delete timer? タイマーを削除しますか? - <b>Words:</b> %L1 <b>単語数:</b> %L1 - <b>Pages:</b> %L1 <b>ページ数:</b> %L1 - <b>Paragraphs:</b> %L1 <b>段落数:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>文字数:</b> %L1 / %L2 - Set Delay 時間で指定 - Set Time 時刻で指定 - Delay: 時間: - Time: 時刻: - HH:mm:ss HH:mm:ss - Alarm アラーム - Type: 種類: - Memo: メモ: - Edit 編集 - Delete 削除 @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running タイマーはありません。 @@ -1610,37 +1277,30 @@ TimerManager - Timers タイマー - New 新規作成 - Recent 履歴 - Question 確認 - Cancel editing timers? タイマーの編集を中止しますか? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes テーマを読み込んでいます - Loading sounds 音声を読み込んでいます - - Untitled 無題 - Open File 開く - About FocusWriter FocusWriter について - - FocusWriter FocusWriter - A simple fullscreen word processor A simple fullscreen word processor - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Released under the <a href=%1>GPL 3</a> license - Uses icons from the <a href=%1>Oxygen</a> icon theme Uses icons from the <a href=%1>Oxygen</a> icon theme - Used under the <a href=%1>LGPL 3</a> license Used under the <a href=%1>LGPL 3</a> license - - Characters: %L1 / %L2 文字数: %L1 / %L2 - - Pages: %L1 ページ数: %L1 - - Paragraphs: %L1 段落数: %L1 - - Words: %L1 単語数: %L1 - - Opening %1 %1 を開いています - (Untitled %1) (無題 %1) - List all documents 全文書の表示 - Switch to Next Document 次のドキュメントへ切り替える - Switch to Previous Document 前のドキュメントへ切り替える - Switch to First Document 最初のドキュメントへ切り替える - Switch to Last Document 最後のドキュメントへ切り替える - Switch to Document %1 %1 へ切り替える - Loading settings 設定を読み込んでいます - Emergency cache is not writable. 緊急用のキャッシュに書き込むことができませんでした。 - - Warning 警告 - FocusWriter was not shut down cleanly. FocusWriter は正常に終了できませんでした。 - Restore from the emergency cache? 緊急用のキャッシュから復活させますか? - Some files could not be opened. いくつかのファイルが開けませんでした。 - Some files were opened Read-Only. いくつかをファイルを読み取り専用で開きました。 - '%1' is newer than the cached copy. '%1' はキャッシュより新しいようです。 - Overwrite newer file? 新しいファイルを上書きしますか? - Save Changes? 変更を保存しますか? - Save changes to the file '%1' before closing? 閉じる前にファイル %1 へ加えた変更を保存しますか? - Your changes will be lost if you don't save them. 保存しない場合、加えた変更は失われます。 - Unable to load typewriter sounds. タイプライター音を読み込めませんでした。 - &File ファイル (&F) - &New 新規作成 (&N) - &Open... 開く (&O)... - Reloa&d 再読み込み (&D) - &Save 保存 (&S)... - Save &As... 名前を付けて保存 (&A)... - &Rename... 名前の変更 (&R)... - Save A&ll すべて保存 (&L) - Manage Sessions セッションの管理 - New Session 新規セッション - &Print... 印刷 (&P)... - Pa&ge Setup... - &Close 閉じる (&C) - &Quit 終了 (&Q) - Ctrl+Q Ctrl+Q - &Edit 編集 (&E) - &Undo 元に戻す (&U) - &Redo やり直し (&R) - Cu&t 切り取り (&T) - &Copy コピー (&C) - &Paste 貼り付け (&P) - Paste &Unformatted 書式を無視して貼り付け - Ctrl+Shift+V Ctrl+Shift+V - Select &All すべて選択 (&A) - Select &Scene シーンの選択 (&S) - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat 書式 (&R) - &Heading 見出し (&H) - Heading &1 見出しレベル1 (&1) - Heading &2 見出しレベル2 (&2) - Heading &3 見出しレベル3 (&3) - Heading &4 見出しレベル4 (&4) - Heading &5 見出しレベル5 (&5) - Heading &6 見出しレベル6 (&6) - &Normal 通常 (&N) - &Bold 太字 (&B) - &Italic 斜体 (&I) - &Underline 下線 (&U) - Stri&kethrough 取り消し線 (&K) - Ctrl+K Ctrl+K - Sup&erscript 下付き文字 (&E) - Ctrl+^ Ctrl+^ - &Subscript 上付き文字 (&S) - Ctrl+_ Ctrl+_ - Align &Left 左揃え (&L) - Ctrl+{ Ctrl+{ - Align &Center 中央揃え (&C) - Ctrl+| Ctrl+| - Align &Right 右揃え (&R) - Ctrl+} Ctrl+} - Align &Justify 均等割付 (&J) - Ctrl+J Ctrl+J - &Decrease Indent インデントを減らす (&D) - Ctrl+< Ctrl+< - I&ncrease Indent インデントを増やす (&N) - Ctrl+> Ctrl+> - Le&ft to Right Block 左から右へ (&F) - Ri&ght to Left Block 右から左へ (&G) - &Tools ツール (&T) - &Find... 検索 (&F)... - Find &Next 次を検索 (&N) - Find Pre&vious 前を検索 (&V) - &Replace... 置換 (&R)... - Ctrl+R Ctrl+R - Smart &Quotes スマート引用符 (&Q) - Update &Document 文書全体に適用 (&D) - Update Document Smart Quotes - Update &Selection 選択範囲に適用 (&S) - Update Selection Smart Quotes - &Spelling... スペルチェック (&S)... - F7 F7 - Set &Language... 言語の変更 (&S) - &Timers... タイマー (&T)... - S&ymbols... シンボル (&Y)... - &Daily Progress 日毎の進捗 (&D) - &Settings 設定 (&S) - Show &Toolbar ツール バーを表示 (&T) - Show &Menu Icons メニュー項目のアイコンを表示 (&M) - F&ocused Text フォーカスされた文字 (&O) - &Fullscreen 全画面表示 (&F) - F11 F11 - Esc Esc - M&inimize 最小化 (&I) - Ctrl+M Ctrl+M - &Themes... テーマ (&T)... - &Preferences... 設定 (&P)... - Focus Off フォーカスの無効 - Focus One Line 一行フォーカス - Focus Three Lines 三行フォーカス - &Paragraph 段落 (&P) - Focus Paragraph 段落フォーカス - Ctrl+Shift+` - &Help ヘルプ (&H) - Application &Language... Application &Language... - Some files were unsupported and could not be opened. いくつかのファイルがサポートされていない形式のため開くことができませんでした。 - &Off オフ (&O) - One &Line 一行 (&L) - &Three Lines 三行 (&T) - &About FocusWriter について (&A) - About &Qt Qt について (&Q) diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 28144ca9..50936de6 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -4,17 +4,14 @@ Alert - Close (%1) (%1) 닫기 - Collapse 접기 - Expand 펼치기 @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert 알림 해제 - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) %Ln 분 중 %1% - %1% of %Ln word(s) 단어 %Ln 중 %1% - %Ln word(s) 단어 %Ln개 - %Ln minute(s) %Ln 분 - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress 하루 작업량 - Longest streak 가장 긴 연속 작업 - Current streak 현재 연속 작업 - N/A 없음 - %n day(s) %n 일 - %1 &ndash; %2 %1 &n회당; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal 하루 목표의 %1% @@ -115,7 +97,6 @@ DictionaryDialog - Set Language 언어 설정 @@ -123,81 +104,62 @@ Document - (Untitled %1) (제목없음 %1) - %1 (Read-Only) %1 (읽기 전용) - - - - Sorry 죄송합니다 - Unable to save '%1'. '%1' 파일을 저장할 수 없습니다. - Save File As 다른 이름으로 저장 - - Unable to overwrite '%1'. '%1' 파일을 덮어쓸 수 없습니다. - Rename File 파일 이름 바꾸기 - Unable to rename '%1'. '%1' 파일의 이름을 바꿀 수 없습니다. - Reload File? 파일을 다시 불러올까요? - Reload the file '%1' from disk? 디스크에서 '%1' 파일을 다시 불러올까요? - All unsaved changes will be lost. 저장하지 않은 바뀐 정보는 사라집니다. - Reload 새로 고침 - Untitled %1 제목없음 %1 - Question 물어볼 것이 있습니다. - Saving as plain text will discard all formatting. Discard formatting? 일반 텍스트로 저장하면 모든 서식을 잃어버리게 됩니다. 서식을 버리시겠습니까? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed 파일 변환 완료 - The file '%1' was changed by another program. '%1' 파일이 다른 프로그램에 의해서 변경되었습니다. - Do you want to reload the file? 파일을 다시 불러올까요? - Reload 새로 고침 - Ignore 그대로 둠 - File Deleted 파일을 지웠습니다. - The file %1 was deleted by another program. %1 파일이 다른 프로그램에 의해서 지워졌습니다. - Do you want to save or close the file? 파일을 저장할까요? 닫을까요? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. 압축파일을 열 수 없습니다. @@ -256,86 +209,68 @@ FindDialog - Search for: 검색 : - Replace with: 다음과 바꿈 : - Ignore case 대/소문자 구분 안함 - Whole words only 단어로 검색 - Regular expressions 일반적인 표현 - Search up 위로 검색 - Search down 아래로 검색 - &Find &찾기 - &Replace &바꾸기 - Replace &All &모두 바꾸기 - Find 찾기 - Replace 바꾸기 - Replace %n instance(s)? %n 의 사례를 바꿀까요? - Question 물어볼 것이 있습니다 - - Sorry 죄송합니다 - - Phrase not found. 문장이 없습니다. @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text 오픈 다큐먼트 텍스트 - OpenDocument Flat XML - Office Open XML 오피스 오픈 XML - Rich Text Format 서식 있는 텍스트 - Plain Text 일반 텍스트 - All Files 모든 파일 - All Supported Files 모든 지원되는 파일 @@ -381,17 +309,14 @@ Highlighter - Add 더하기 - Check Spelling... 맞춤법 검사 하기... - (No suggestions found) (다른 대안을 찾지 못했습니다) @@ -399,12 +324,10 @@ ImageButton - Open Image 이미지 열기 - Images(%1) 이미지(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: 프로그램 언어 선택: - <System Language> < 시스템 언어 > - Note 노트 - Please restart this application for the change in language to take effect. 바뀐 언어로 적용하기 위해 프로그램을 다시 시작 해주세요. @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. 압축파일을 열 수 없습니다. @@ -443,379 +361,298 @@ PreferencesDialog - Preferences 설정 - General 일반 설정 - Statistics 통계 - Toolbar 툴바 - Spell Checking 맞춤법 검사 - Select Dictionary 사전 고르기 - - Sorry 죄송합니다 - Unable to open archive. 압축파일을 열 수 없습니다. - The archive does not contain a usable dictionary. 이용할 만 한 사전이 없습니다. - - - - Question 물어볼 것이 있습니다 - Shortcuts 단축키 - One or more shortcuts conflict. Do you wish to proceed? 하나 이상의 단축키에서 충돌이 났습니다. 계속할까요? - The dictionary "%1" already exists. Do you want to replace it? 사전 "%1" 은 이미 있습니다. 바꾸시겠습니까? - Daily Goal 오늘의 목표 - None 없음 - Minutes: 분: - - Words: 단어: - Editing 설정하기 - Always vertically center 항상 세로로 가운데 맞춤 - Block insertion cursor 블럭 삽입 커서 - Smooth fonts 부드러운 글꼴 - Typewriter sounds 타자기 소리 - Smart quotes: 지능형 따옴표: - Double 큰 따옴표 - Single 작은 따옴표 - Scenes 화면 - Divider: 구분선: - Saving 저장하기 - Automatically save changes 자동으로 저장하기 - Remember cursor position 커서 위치 저장하기 - Word count 단어 수 - Page count 페이지 수 - Paragraph count 문단 수 - Character count 글자 수 - Characters: 글자: - Paragraphs: 문단: - Word Count Algorithm 단어 수 세는 알고리즘 - Reset daily progress for today to zero? 오늘의 하루 작업량을 0으로 초기화할까요? - Remove current dictionary? - Write byte order mark in plain text files 일반 텍스트 파일에 바이트 순서 표식을 사용합니다. - Default format: 기본 포맷: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today 오늘 기록 초기화 - History 기록 - Remember history 기록 저장하기 - Show streaks 연속 기록 보이기 - Minimum progress for streaks: 연속 작업대비 최소 작업비: - Detect word boundaries 단어의 범위를 감지하기 - Divide character count by six 글자 수를 여섯 개마다 나누기 - Count each letter as a word 각 문자를 단어로 세기 - Page Count Algorithm 페이지 수 세는 알고리즘 - Style 스타일 - Icons Only 아이콘만 사용 - Text Only 텍스트만 사용 - Text Alongside Icons 아이콘 옆에 글자 표시 - Text Under Icons 아이콘 아래에 글자 표시 - Text Position: 텍스트 위치: - Actions 기능 - Move Up 위로 옮기기 - Move Down 아래로 옮기기 - Add Separator 구분선 더하기 - Command 명령어 - Shortcut 단축키 - Action 기능 - Check spelling as you type 입력하는 대로 검사하기 - Ignore words in UPPERCASE 대문자 건너뛰기 - Ignore words with numbers 숫자 건너뛰기 - Language 언어 - - Add 더하기 - - Remove 제거 - Personal Dictionary 개인 사전 @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. 지원하는 RTF 파일이 아닙니다. @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. 예상과 달리 파일끝에 닿았습니다. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up 화면을 위로 올리기 - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List 화면 목록 켜고/끄기 - Shift+F4 Shift+F4 - Show scene list (%1) (%1) 화면 목록 보이기 - Hide scene list (%1) (%1) 화면 목록 감추기 - Filter 필터 - Move Scenes Down 화면을 아래로 내리기 - Resize scene list 화면 목록 크기 조절 @@ -893,12 +717,6 @@ Session - - - - - - Default 기본 세션 @@ -906,97 +724,78 @@ SessionManager - Manage Sessions 세션 관리 - S&essions &세션 - New 새로 만들기 - Duplicate 복사하기 - Rename 이름 바꾸기 - Delete 지우기 - Switch To 서로 바꾸기 - New Session 새 세션 - Duplicate Session 세션 복사 - Rename Session 세션 이름 바꾸기 - Question 물어볼 것이 있습니다 - Delete selected session? 선택한 세션을 지우시겠습니까? - Session name: 세션 이름 - Sorry 죄송합니다. - The requested session name is already in use. 요청하신 세션 이름은 이미 사용 중입니다. - &New... &새로 만들기... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &관리하기... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear 지우기 - Reset to Default 기본 설정으로 되돌리기 - - Shortcut: 단축키: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... 따옴표 바꾸기... - Please Wait 기다려 주세요 @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling 맞춤법 검사 - &Add &더하기 - &Ignore &그대로 둠 - I&gnore All &모두 그대로 둠 - &Change &바꾸기 - C&hange All &모두 바꿈 - Not in dictionary: 이 사전엔 없습니다 : - Change to: 다음으로 바꾸기: - Checking spelling... 맞춤법 검사 중입니다... - Cancel 취소하기 - Please wait 기다려 주세요 - Continue checking at beginning of file? 파일의 처음부터 다시 체크하시겠습니까? - Spell check complete. 맞춤법 검사를 마쳤습니다. @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols 부호 - Recently used symbols 최근에 사용한 부호들 - All symbols 모든 부호들 - Details 크게 보기 - Name: 이름: - Insert 적용 @@ -1137,12 +911,10 @@ SymbolsModel - Blocks 블록 - Scripts 스크립트 @@ -1150,7 +922,6 @@ Theme - Untitled %1 제목 없음 %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: 이름: - No Image 이미지 없음 - Tiled 타일 붙임 - - Centered 가운데 맞춤 - - Stretched 늘이기 - Scaled 비율 맞춤 - Zoomed 확대 맞춤 - Opacity: 불투명도: - Position: 위치: - Width: 너비: - Round Text Background Corners 노트 모서리 둥금 정도 - - - Radius: 반경: - Blur Text Background 노트 배경 흐릿함 정도 - Text Background Drop Shadow 노트 그림자 정도 - Vertical Offset: 아래로 옮김 정도: - Margins 글자와 노트 사이의 사이띄기 - Window: 창과의 거리: - Page: 노트와 글자와의 거리: - Indent first line 한 줄 들여쓰기 - Above: 위로: - Below: 아래로: - Remove 지우기 - Edit Theme 테마 편집 - Window Background 배경 그림 설정 - - Type: 종류 - - - - Color: 색상 - Image: 이미지 - - - - - - - - - - pixels pixels - Left 왼쪽 - Text Background 노트 설정 - Right 오른쪽 - Text 글자 - Font: 글꼴: - Misspelled: 오자 표시: - Line Spacing 줄 띄우기 - Single 한 줄 - 1.5 Lines 1.5 줄 - Double 두 줄 - Proportional 비율 맞춤 - Height: 줄 높이: - Paragraph Spacing 문단 사이 띄기 - Tab Width: 탭 너비: - New Theme 새로운 테마 @@ -1393,115 +1104,90 @@ ThemeManager - Themes 테마 - Default 기본 세션 - Bitter Skies - Enchantment - Gentle Blues 편한 푸른색 - Old School 올드 스쿨 - Space Dreams 스페이스 드림 - Spy Games - Tranquility - Writing Desk 나무 책상 - - New 새로 만들기 - - Duplicate 복사하기 - Custom 사용자 설정 - Edit 편집하기 - Delete 지우기 - Import 가져오기 - Export 내보내기 - Question 물어볼 것이 있습니다. - Delete theme '%1'? '%1' 테마를 지우시겠습니까? - - Themes (%1) 테마 (%1) - Import Theme 테마 가져오기 - Export Theme 테마 내보내기 @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question 물어볼 것이 있습니다. - Delete timer? 타이머를 지울까요? - <b>Words:</b> %L1 <b>단어:</b> %L1 - <b>Pages:</b> %L1 <b>페이지:</b> %L1 - <b>Paragraphs:</b> %L1 <b>문단:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>글자:</b> %L1 / %L2 - Set Delay 지연 시간 설정 - Set Time 시간 설정 - Delay: 지연 시간: - Time: 시간: - HH:mm:ss 시:분:초 - Alarm 알람 - Type: 종류: - Memo: 메모: - Edit 수정 - Delete 지우기 @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss 시:분:초 - No timers running 타이머 작동 안함 @@ -1610,37 +1277,30 @@ TimerManager - Timers 타이머 - New 새로 만들기 - Recent 최근 설정 - Question 물어볼 것이 있습니다. - Cancel editing timers? 타이머 수정을 취소할까요? - +HH:mm:ss +시:분:초 - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes 테마 불러오는 중 - Loading sounds 효과음 불러오는 중 - - Untitled 제목 없음 - Open File 파일 열기 - About FocusWriter 포커스 라이터 란 - - FocusWriter 포커스 라이터 - A simple fullscreen word processor 간편한 풀스크린 워드 프로세서 - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> 라이선스에 따라 배포됩니다. - Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a>의 아이콘 테마를 이용합니다. - Used under the <a href=%1>LGPL 3</a> license <a href=%1>LGPL 3</a> 의 라이선스를 준수합니다. - - Characters: %L1 / %L2 문자: %L1 / %L2 - - Pages: %L1 페이지: %L1 - - Paragraphs: %L1 문단: % L1 - - Words: %L1 단어: %L1 - - Opening %1 %1 열기 - (Untitled %1) (제목없음 %1) - List all documents 모든 문서 보이기 - Switch to Next Document 다음 문서로 이동 - Switch to Previous Document 이전 문서로 이동 - Switch to First Document 처음 문서로 이동 - Switch to Last Document 마지막 문서로 이동 - Switch to Document %1 %1 문서로 이동 - Loading settings 설정 불러오는 중 - Emergency cache is not writable. 비상 캐시가 작성되지 않습니다. - - Warning 알림 - FocusWriter was not shut down cleanly. 포커스 라이터가 제대로 꺼지지 않았습니다. - Restore from the emergency cache? 비상 캐시를 이용해서 복구할까요? - Some files could not be opened. 몇몇 파일들이 열리지 않습니다. - Some files were opened Read-Only. 몇몇 파일들이 일기 전용으로 열렸습니다. - '%1' is newer than the cached copy. '%1' 이 캐시에 복사된 것보다 새것입니다. - Overwrite newer file? 새 파일로 덮어쓸까요? - Save Changes? 바뀐 내용을 저장하시겠습니까? - Save changes to the file '%1' before closing? 닫기 전에 파일 '%1'에 바뀐 내용을 저장하시겠습니까? - Your changes will be lost if you don't save them. 저장하지 않으시면 바뀐 내용을 잃어버리십니다. - Unable to load typewriter sounds. 타자기 효과음을 불러올 수 없습니다. - &File &파일 - &New &새로 만들기 - &Open... &열기... - Reloa&d &새로 고침 - &Save &저장 - Save &As... &다른 이름으로 저장... - &Rename... &이름 바꾸기... - Save A&ll &모두 저장하기 - Manage Sessions 세션 관리하기 - New Session 새 세션 - &Print... &출력하기... - Pa&ge Setup... - &Close &닫기 - &Quit &끝내기 - Ctrl+Q Ctrl+Q - &Edit &편집 - &Undo &뒤로 무르기 - &Redo &다시 적용 - Cu&t &자르기 - &Copy &복사하기 - &Paste &붙여넣기 - Paste &Unformatted &서식을 유지한 채 붙여넣기 - Ctrl+Shift+V Ctrl+Shift+V - Select &All &모두 선택 - Select &Scene &화면 선택 - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &양식 - &Heading &머릿글 - Heading &1 머릿글 &1 - Heading &2 머릿글 &2 - Heading &3 머릿글 &3 - Heading &4 머릿글 &4 - Heading &5 머릿글 &5 - Heading &6 머릿글 &6 - &Normal &기본 - &Bold &볼드 - &Italic &이탤릭 - &Underline &밑줄 긋기 - Stri&kethrough &가운데 줄긋기 - Ctrl+K Ctrl+K - Sup&erscript &위 첨자 - Ctrl+^ Ctrl+^ - &Subscript &아래 첨자 - Ctrl+_ Ctrl+_ - Align &Left &왼쪽 끝 맞춤 - Ctrl+{ Ctrl+{ - Align &Center &가운데 줄맞춤 - Ctrl+| Ctrl+| - Align &Right &오른쪽 끝 맞춤 - Ctrl+} Ctrl+} - Align &Justify &양끝 맞춤 - Ctrl+J Ctrl+J - &Decrease Indent &들여 쓰기 - Ctrl+< Ctrl+< - I&ncrease Indent &내어 쓰기 - Ctrl+> Ctrl+> - Le&ft to Right Block &왼쪽에서 오른쪽으로 쓰기 시작 - Ri&ght to Left Block &오른쪽에서 왼쪽으로 쓰기 시작 - &Tools &도구 - &Find... &찾아보기... - Find &Next &다음에서 찾기 - Find Pre&vious &이전에서 찾기 - &Replace... &바꾸기... - Ctrl+R Ctrl+R - Smart &Quotes &지능형 따옴표 - Update &Document &문서에 적용 - Update Document Smart Quotes - Update &Selection &선택한 내용 적용 - Update Selection Smart Quotes - &Spelling... &맞춤법... - F7 F7 - Set &Language... &언어 설정... - &Timers... &타이머... - S&ymbols... &부호들... - &Daily Progress &하루 진행량 - &Settings &설정 - Show &Toolbar &툴바 보이기 - Show &Menu Icons &메뉴 아이콘 보이기 - F&ocused Text &포커스 텍스트 - &Fullscreen &전체 화면 - F11 F11 - Esc Esc - M&inimize &최소화 - Ctrl+M Ctrl+M - &Themes... &테마... - &Preferences... &설정... - Focus Off 포커스 끔 - Focus One Line 한 줄 포커스 - Focus Three Lines 세 줄 포커스 - &Paragraph &문단 - Focus Paragraph 문단 포커스 - Ctrl+Shift+` - &Help &도움말 - Application &Language... &프로그램 언어 설정 - Some files were unsupported and could not be opened. 지원되지 않는 파일이 있어서 열 수 없습니다. - &Off &사용 안함 - One &Line &한 줄 - &Three Lines &세 줄 - &About &FocusWriter 소개 - About &Qt &Qt 소개 diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index bd79d5ad..10ae3fa4 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Užverti (%1) - Collapse Suskleisti - Expand Išskleisti @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Pašalinti įspėjimą - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% iš %Ln minutės @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% iš %Ln žodžio @@ -53,7 +46,6 @@ - %Ln word(s) %Ln žodis @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln minutė @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Kasdienė eiga - Longest streak Ilgiausias ruožas - Current streak Dabartinis ruožas - N/A Nėra - %n day(s) %n diena @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% kasdienio tikslo @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Nustatyti kalbą @@ -133,81 +114,62 @@ Document - (Untitled %1) (Be pavadinimo %1) - %1 (Read-Only) %1 (Tik-skaitymui) - - - - Sorry Atsiprašome - Unable to save '%1'. Nepavyko įrašyti '%1'. - Save File As Įrašyti failą kaip - - Unable to overwrite '%1'. Nepavyko pakeisti '%1'. - Rename File Pervadinti failą - Unable to rename '%1'. Nepavyko pervadinti '%1'. - Reload File? Įkelti failą iš naujo? - Reload the file '%1' from disk? Įkelti iš naujo failą '%1' iš disko? - All unsaved changes will be lost. Visi neįrašyti pakeitimai bus prarasti. - Reload Įkelti iš naujo - Untitled %1 Be pavadinimo %1 - Question Klausimas - Saving as plain text will discard all formatting. Discard formatting? Įrašymas grynu tekstu pašalins visą formatavimą. Pašalinti formatavimą? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Failas pasikeitė - The file '%1' was changed by another program. Failas '%1' buvo pakeistas kita programa. - Do you want to reload the file? Ar norite įkelti failą iš naujo? - Reload Įkelti iš naujo - Ignore Nepaisyti - File Deleted Failas ištrintas - The file %1 was deleted by another program. Failas %1 buvo ištrintas kita programa. - Do you want to save or close the file? Jūs norite failą įrašyti ar užverti? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Nepavyko atverti archyvo. @@ -266,67 +219,54 @@ FindDialog - Search for: Ieškoti: - Replace with: Pakeisti tekstu: - Ignore case Nepaisyti raidžių lygio - Whole words only Tik pilni žodžiai - Regular expressions Reguliarieji reiškiniai - Search up Ieškoti aukštyn - Search down Ieškoti žemyn - &Find &Rasti - &Replace &Pakeisti - Replace &All Pakeisti &visus - Find Rasti - Replace Pakeisti - Replace %n instance(s)? Pakeisti %n egzempliorių? @@ -335,19 +275,14 @@ - Question Klausimas - - Sorry Atsiprašome - - Phrase not found. Frazė nerasta. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text ODT formatas - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML DOCX formatas - Rich Text Format RTF formatas - Plain Text Grynas tekstas - All Files Visi failai - All Supported Files Visi palaikomi failai @@ -393,17 +321,14 @@ Highlighter - Add Pridėti - Check Spelling... Tikrinti rašybą... - (No suggestions found) (Jokių pasiūlymų nerasta) @@ -411,12 +336,10 @@ ImageButton - Open Image Atverti paveikslą - Images(%1) Paveikslai(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Pasirinkite programos kalbą: - <System Language> <Sistemos kalba> - Note Pastaba - Please restart this application for the change in language to take effect. Kad įsigaliotų kalbos pakeitimai, prašome paleisti programą iš naujo. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Nepavyko atverti archyvo. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Nuostatos - General Bendra - Statistics Statistika - Toolbar Įrankių juosta - Spell Checking Rašybos tikrinimas - Select Dictionary Pasirinkite žodyną - - Sorry Atleiskite - Unable to open archive. Nepavyko atverti archyvo. - The archive does not contain a usable dictionary. Archyve nėra tinkamo naudoti žodyno. - - - - Question Klausimas - Shortcuts Spartieji klavišai - One or more shortcuts conflict. Do you wish to proceed? Vienas ar daugiau sparčiųjų klavišų konfliktuoja. Ar norite tęsti? - The dictionary "%1" already exists. Do you want to replace it? "%1" žodynas jau yra. Ar norite jį pakeisti? - Daily Goal Kasdienis tikslas - None Jokio - Minutes: Minučių: - - Words: Žodžių: - Editing Redagavimas - Always vertically center Visuomet vertikaliai centruoti - Block insertion cursor Blokuoti įterpimo žymeklį - Smooth fonts Glotninti šriftus - Typewriter sounds Spausdinimo mašinėlės garsai - Smart quotes: Išmaniosios kabutės: - Double Dvigubos - Single Viengubos - Scenes Scenos - Divider: Dalytuvas: - Saving Įrašymas - Automatically save changes Automatiškai įrašyti pakeitimus - Remember cursor position Įsiminti žymeklio vietą - Word count Skaičiuoti žodžius - Page count Skaičiuoti puslapius - Paragraph count Skaičiuoti pastraipas - Character count Skaičiuoti simbolius - Characters: Simbolių: - Paragraphs: Pastraipų: - Word Count Algorithm Žodžių skaičiavimo algoritmas - Reset daily progress for today to zero? Atstatyti kasdienę eigą šiandienai iki nulio? - Remove current dictionary? Šalinti esamą žodyną? - Write byte order mark in plain text files Įrašyti baitų tvarkos žymę gryno teksto failuose - Default format: Numatytasis formatas: - User Interface Naudotojo sąsaja - Always show scrollbar Visada rodyti slankjuostę - Always show top bar Visada rodyti viršutinę juostą - Always show bottom bar Visada rodyti apatinę juostą - Reset Today Atstatyti šiandieną - History Žurnalas - Remember history Įsiminti žurnalą - Show streaks Rodyti ruožus - Minimum progress for streaks: Minimali eiga ruožui: - Detect word boundaries Aptikti žodžio ribas - Divide character count by six Dalinti simbolių skaičių iš šešių - Count each letter as a word Skaičiuoti kiekvieną raidę kaip žodį - Page Count Algorithm Puslapių skaičiavimo algoritmas - Style Stilius - Icons Only Tik piktogramos - Text Only Tik tekstas - Text Alongside Icons Tekstas šalia piktogramų - Text Under Icons Tekstas po piktogramomis - Text Position: Teksto vieta: - Actions Veiksmai - Move Up Kelti aukštyn - Move Down Nuleisti žemyn - Add Separator Pridėti skirtuką - Command Komanda - Shortcut Spartusis klavišas - Action Veiksmas - Check spelling as you type Tikrinti rašybą, renkant tekstą - Ignore words in UPPERCASE Nepaisyti žodžių, parašytų DIDŽIOSIOMIS RAIDĖMIS - Ignore words with numbers Nepaisyti žodžių su skaičiais - Language Kalba - - Add Pridėti - - Remove Šalinti - Personal Dictionary Asmeninis žodynas @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Nepalaikomas RTF failas. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Netikėtai pasiekta failo pabaiga. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Kelti scenas aukštyn - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Perjungti scenų sąrašą - Shift+F4 Shift+F4 - Show scene list (%1) Rodyti scenų sąrašą (%1) - Hide scene list (%1) Slėpti scenų sąrašą (%1) - Filter Filtruoti - Move Scenes Down Leisti scenas žemyn - Resize scene list Keisti scenų sąrašo dydį @@ -905,12 +729,6 @@ Session - - - - - - Default Numatytoji @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Tvarkyti seansus - S&essions S&esijos - New Nauja - Duplicate Dubliuoti - Rename Pervadinti - Delete Ištrinti - Switch To Perjungti į - New Session Naujas seansas - Duplicate Session Dubliuoti seansą - Rename Session Pervadinti seansą - Question Klausimas - Delete selected session? Ištrinti pasirinktą seansą? - Session name: Seanso pavadinimas: - Sorry Atleiskite - The requested session name is already in use. Užklaustas seanso pavadinimas jau yra naudojamas. - &New... &Nauja... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Tvarkyti... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Išvalyti - Reset to Default Atstatyti numatytąsias reikšmes - - Shortcut: Spartusis klavišas: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Keičiamos kabutės... - Please Wait Prašome palaukti @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Tikrinama rašyba - &Add &Pridėti - &Ignore Nepa&isyti - I&gnore All I&gnoruoti visus - &Change &Pakeisti - C&hange All Pa&keisti visus - Not in dictionary: Nėra žodyne: - Change to: Pakeisti į: - Checking spelling... Tikrinama rašyba... - Cancel Atšaukti - Please wait Prašome palaukti - Continue checking at beginning of file? Tęsti tikrinimą failo pradžioje? - Spell check complete. Rašybos tikrinimas užbaigtas. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Simboliai - Recently used symbols Neseniai naudoti simboliai - All symbols Visi simboliai - Details Išsamiau - Name: Pavadinimas: - Insert Įterpti @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Blokai - Scripts Scenarijai @@ -1162,7 +934,6 @@ Theme - Untitled %1 Be pavadinimo %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Pavadinimas: - No Image Nėra paveikslo - Tiled Iškloti - - Centered Centruoti - - Stretched Ištempti - Scaled Ištempti proporcingai - Zoomed Pritraukti - Opacity: Dengiamumas: - Position: Vieta: - Width: Plotis: - Round Text Background Corners Apvalinti teksto fono kampus - - - Radius: Plotas: - Blur Text Background Sulieti teksto foną - Text Background Drop Shadow Teksto fonas numeta šešėlį - Vertical Offset: Vertikalus poslinkis: - Margins Paraštės - Window: Langas: - Page: Puslapis: - Indent first line Įtraukti pirmą eilutę - Above: Prieš: - Below: Po: - Remove Pašalinti - Edit Theme Redaguoti temą - Window Background Lango fonas - - Type: Tipas: - - - - Color: Spalva: - Image: Paveikslas: - - - - - - - - - - pixels taškelių - Left Kairėje - Text Background Teksto fonas - Right Dešinėje - Text Tekstas - Font: Šriftas: - Misspelled: Neteisingai parašytas: - Line Spacing Eilučių intervalai - Single Viengubas - 1.5 Lines 1.5 eilutės - Double Dvigubas - Proportional Proporcionalus - Height: Aukštis: - Paragraph Spacing Pastraipos tarpai - Tab Width: Tabuliacijos plotis: - New Theme Nauja tema @@ -1405,115 +1116,90 @@ ThemeManager - Themes Temos - Default Numatytoji - Bitter Skies Geliantis dangus - Enchantment Žavesys - Gentle Blues Švelniai mėlyna - Old School Senoji mokykla - Space Dreams Kosminės svajonės - Spy Games Šnipų žaidimai - Tranquility Ramumas - Writing Desk Rašomasis stalas - - New Nauja - - Duplicate Dubliuoti - Custom Tinkinta - Edit Keisti - Delete Ištrinti - Import Importuoti - Export Eksportuoti - Question Klausimas - Delete theme '%1'? Ištrinti temą '%1'? - - Themes (%1) Temos (%1) - Import Theme Importuoti temą - Export Theme Eksportuoti temą @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Klausimas - Delete timer? Ištrinti laikmatį? - <b>Words:</b> %L1 <b>Žodžių:</b> %L1 - <b>Pages:</b> %L1 <b>Puslapių:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Pastraipų:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Simbolių:</b> %L1 / %L2 - Set Delay Nustatyti delsimą - Set Time Nustatyti laiką - Delay: Delsimas: - Time: Laikas: - HH:mm:ss HH:mm:ss - Alarm Signalas - Type: Tipas: - Memo: Raštelis: - Edit Redaguoti - Delete Ištrinti @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nėra aktyvių laikmačių @@ -1622,37 +1289,30 @@ TimerManager - Timers Laikmačiai - New Naujas - Recent Paskiausi - Question Klausimas - Cancel editing timers? Atšaukti laikmačių redagavimą? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Įkeliamos temos - Loading sounds Įkeliami garsai - - Untitled Be pavadinimo - Open File Atverti failą - About FocusWriter Apie FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Paprasta viso ekrano žodžių doroklė - Copyright &copy; 2008-%1 Graeme Gott Autorių Teisės &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Išleista pagal <a href=%1>GPL 3</a> licenciją - Uses icons from the <a href=%1>Oxygen</a> icon theme Naudoja piktogramas iš <a href=%1>Oxygen</a> piktogramų temos - Used under the <a href=%1>LGPL 3</a> license Išleista pagal <a href=%1>LGPL 3</a> licenciją - - Characters: %L1 / %L2 Simbolių: %L1 / %L2 - - Pages: %L1 Puslapių: %L1 - - Paragraphs: %L1 Pastraipų: %L1 - - Words: %L1 Žodžių: %L1 - - Opening %1 Atveriama %1 - (Untitled %1) (Be pavadinimo %1) - List all documents Pateikti visus dokumentus - Switch to Next Document Perjungti į kitą dokumentą - Switch to Previous Document Perjungti į ankstesnį dokumentą - Switch to First Document Perjungti į pirmą dokumentą - Switch to Last Document Perjungti į paskutinį dokumentą - Switch to Document %1 Perjungti į dokumentą %1 - Loading settings Įkeliami nustatymai - Emergency cache is not writable. Avarinė talpykla nėra tinkama įrašymui. - - Warning Įspėjimas - FocusWriter was not shut down cleanly. FocusWriter nebaigė darbo sklandžiai. - Restore from the emergency cache? Atkurti iš avarinės talpyklos? - Some files could not be opened. Kai kurie failai negalėjo būti atidaryti. - Some files were opened Read-Only. Kai kurie failai buvo atverti tik skaitymui. - '%1' is newer than the cached copy. '%1' yra naujesnis negu talpinama kopija. - Overwrite newer file? Pakeisti naujesnį failą? - Save Changes? Įrašyti pakeitimus? - Save changes to the file '%1' before closing? Prieš užveriant, įrašyti pakeitimus į failą '%1'? - Your changes will be lost if you don't save them. Jeigu neįrašysite, jūsų pakeitimai bus prarasti. - Unable to load typewriter sounds. Nepavyko įkelti spausdinimo mašinėlės garsus. - &File &Failas - &New &Naujas - &Open... &Atverti - Reloa&d Į&kelti iš naujo - &Save Į&rašyti - Save &As... Įrašyti kai&p... - &Rename... Pe&rvadinti... - Save A&ll Įrašyti &visus - Manage Sessions Tvarkyti seansus - New Session Naujas seansas - &Print... &Spausdinti... - Pa&ge Setup... Pus&lapio sąranka... - &Close &Užverti - &Quit Išei&ti - Ctrl+Q Ctrl+Q - &Edit &Taisa - &Undo &Anuliuoti - &Redo A&tkurti - Cu&t &Iškirpti - &Copy K&opijuoti - &Paste Į&dėti - Paste &Unformatted Įdėti &neformatuotą - Ctrl+Shift+V Ctrl+Shift+V - Select &All Žymėti &viską - Select &Scene Žymėti &sceną - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmatas - &Heading &Antraštė - Heading &1 Antraštė &1 - Heading &2 Antraštė &2 - Heading &3 Antraštė &3 - Heading &4 Antraštė &4 - Heading &5 Antraštė &5 - Heading &6 Antraštė &6 - &Normal &Normalus - &Bold &Paryškintas - &Italic &Kursyvu - &Underline Pa&brauktas - Stri&kethrough Perbr&auktas - Ctrl+K Ctrl+K - Sup&erscript &Viršutiniame indekse - Ctrl+^ Ctrl+^ - &Subscript Apa&tiniame indekse - Ctrl+_ Ctrl+_ - Align &Left Lygiuoti kairė&je - Ctrl+{ Ctrl+{ - Align &Center Lygiuoti &centre - Ctrl+| Ctrl+| - Align &Right Lygiuoti &dešinėje - Ctrl+} Ctrl+} - Align &Justify Lygiuoti &iš abiejų pusių - Ctrl+J Ctrl+J - &Decrease Indent &Mažinti įtrauką - Ctrl+< Ctrl+< - I&ncrease Indent Didi&nti įtrauką - Ctrl+> Ctrl+> - Le&ft to Right Block Blokas iš kairė&s į dešinę - Ri&ght to Left Block Blokas iš d&ešinės į kairę - &Tools Įr&ankiai - &Find... &Rasti... - Find &Next Rasti &kitą - Find Pre&vious Rasti a&nkstesnį - &Replace... &Pakeisti... - Ctrl+R Ctrl+R - Smart &Quotes Išmaniosios ka&butės - Update &Document Atnaujinti &dokumentą - Update Document Smart Quotes Atnaujinti dokumento išmaniąsias kabutes - Update &Selection Atnaujinti žymėji&mą - Update Selection Smart Quotes Atnaujinti žymėjimo išmaniąsias kabutes - &Spelling... Raš&ybos tikrinimas... - F7 F7 - Set &Language... Nustatyti ka&lbą... - &Timers... &Laikmačiai... - S&ymbols... &Simboliai... - &Daily Progress Kas&dienė eiga - &Settings &Nustatymai - Show &Toolbar Rodyti įrankių &juostą - Show &Menu Icons Rodyti meniu &piktogramas - F&ocused Text Teksto &dėmesio centras - &Fullscreen &Visas ekranas - F11 F11 - Esc Esc - M&inimize Suskle&isti langą - Ctrl+M Ctrl+M - &Themes... &Temos... - &Preferences... &Nuostatos... - Focus Off Dėmesio centras išjungtas - Focus One Line Dėmesio centras - viena eilutė - Focus Three Lines Dėmesio centras - trys eilutės - &Paragraph &Pastraipa - Focus Paragraph Dėmesio centras - pastraipa - Ctrl+Shift+` Ctrl+Shift+` - &Help Ž&inynas - Application &Language... Programos ka&lba... - Some files were unsupported and could not be opened. Kai kurie failai buvo nepalaikomi, todėl negalėjo būti atverti. - &Off Išj&ungtas - One &Line Viena ei&lutė - &Three Lines &Trys eilutės - &About &Apie - About &Qt Apie &Qt diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 3cc31085..a6fc3266 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Sluit (%1) - Collapse Inklappen - Expand Uitklappen @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Wegklikken alarm - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% van %Ln minuut @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% van %Ln woord @@ -51,7 +44,6 @@ - %Ln word(s) %Ln woord @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuut @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Dagelijkse voortgang - Longest streak Langste serie - Current streak Huidige serie - N/A N/A - %n day(s) %n dag @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% van dagelijkse doel @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Taal instellen @@ -128,81 +109,62 @@ Document - (Untitled %1) (naamloos %1) - %1 (Read-Only) %1 (Alleen lezen) - - - - Sorry Sorry - Unable to save '%1'. '%1' kan niet opgeslagen worden. - Save File As Opslaan als - - Unable to overwrite '%1'. '%1' kan niet overschreven worden. - Rename File Bestand hernoemen - Unable to rename '%1'. '%1' kan niet hernoemd worden. - Reload File? Herladen bestamd - Reload the file '%1' from disk? Bestand '%1' herladen van disk - All unsaved changes will be lost. Alle niet bewaarde wijzigingen zullen verloren gaan - Reload Herladen - Untitled %1 Geen naam %1 - Question Vraag - Saving as plain text will discard all formatting. Discard formatting? Opslaan als kale tekst zal alle opmaak verwijderen. Opmaak verwijderen ? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Bestand is gewijzigd - The file '%1' was changed by another program. Bestand %1 is veranderd door een ander programma - Do you want to reload the file? Moet het bestand opnieuw geladen worden ? - Reload Herladen - Ignore Negeren - File Deleted Bestand is verwijderd - The file %1 was deleted by another program. Bestand %1 is verwijderd door een andere applicatie - Do you want to save or close the file? Bestand opslaan of afsluiten ? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Kan archief niet openen @@ -261,67 +214,54 @@ FindDialog - Search for: Zoeken naar: - Replace with: Vervangen door: - Ignore case Hoofd-/kleine letters negeren - Whole words only Alleen hele woorden - Regular expressions Regulieren expressies - Search up Naar begin zoeken - Search down Naar einde zoeken - &Find &Zoek - &Replace &Vervang - Replace &All Vervang &Alles - Find Zoeken - Replace Vervangen - Replace %n instance(s)? %n vondst vervangen? @@ -329,19 +269,14 @@ - Question Vraag - - Sorry Sorry - - Phrase not found. Zoekterm niet gevonden. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Tekst - OpenDocument Flat XML OpenDocument platte XML - Office Open XML Office Open XML - Rich Text Format Rich text formaat - Plain Text Platte tekst - All Files Alle bestanden - All Supported Files Alle ondersteunde bestanden @@ -387,17 +315,14 @@ Highlighter - Add Toevoegen - Check Spelling... Spelling controleren ... - (No suggestions found) (geen suggestie gevonden) @@ -405,12 +330,10 @@ ImageButton - Open Image Plaatje openen - Images(%1) Plaatjes(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Taal selecteren: - <System Language> <Systeemtaal> - Note Let op - Please restart this application for the change in language to take effect. Graag de applicatie herstarten om de taalverandering door te voeren. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Kan archief niet openen @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Instellungen - General Algemeen - Statistics Statistieken - Toolbar Werkbalk - Spell Checking Spellingscontrole - Select Dictionary Woordenboek kiezen - - Sorry Sorry - Unable to open archive. Archief kan niet geopend worden. - The archive does not contain a usable dictionary. Dit archief bevat geen bruikbare woordenlijst. - - - - Question Vraag - Shortcuts Snelkoppelingen - One or more shortcuts conflict. Do you wish to proceed? Een of meerdere snelkoppelingen conflicteren. Toch doorgaan ? - The dictionary "%1" already exists. Do you want to replace it? Het woordenboek %1 bestaat al. Deze vervangen ? - Daily Goal Dagelijks doel - None Niets - Minutes: Minuten: - - Words: Woorden: - Editing Bewerking - Always vertically center Verticaal centreren - Block insertion cursor Blok invoeg cursor - Smooth fonts Afgevlakte letters - Typewriter sounds Typemachine geluiden - Smart quotes: Slimme aanhalingstekens: - Double Dubbel - Single Enkel - Scenes Scenes - Divider: Deelstreep - Saving Opslaan - Automatically save changes Automatisch veranderingen opslaan - Remember cursor position Onthou cursor positie - Word count Woordtelling - Page count Paginatelling - Paragraph count Paragraaftelling - Character count Tekentelling - Characters: Tekens: - Paragraphs: Paragrafen: - Word Count Algorithm Algoritme voor woordtelling - Reset daily progress for today to zero? Dagelijkse voortgang naar 0 toe zetten ? - Remove current dictionary? Huidige directory verwijderen - Write byte order mark in plain text files Schrijf "byte order" markering in platte tekst bestanden - Default format: Standaard formaat - User Interface Gebruikers interface - Always show scrollbar Scrollbar altijd tonen - Always show top bar Top bar altijd tonen - Always show bottom bar Bottom bar altijd tonen - Reset Today Reset vandaag - History Geschiedenis - Remember history Onthou geschiedenis - Show streaks Toon serie - Minimum progress for streaks: Minimale voortgang voor serie - Detect word boundaries Woordgrenzen bepalen - Divide character count by six Tekentelling door 6 delen - Count each letter as a word Tel elke letter als een woord - Page Count Algorithm Manier van pagina tellen - Style Stijl - Icons Only Alleen iconen - Text Only Alleen tekst - Text Alongside Icons Tekst naast iconen - Text Under Icons Tekst onder Iconen - Text Position: Tekst positie: - Actions Acties - Move Up Naar boven verschuiven - Move Down Naar onder verschuiven - Add Separator Scheidingsteken toevoegen - Command Commando - Shortcut Snelkoppeling - Action Actie - Check spelling as you type Spelling controleren terwijl je typt - Ignore words in UPPERCASE Woorden in HOOFDLETTERS negeren - Ignore words with numbers Woorden met getallen negeren - Language Taal - - Add Toevoegen - - Remove Verwijderen - Personal Dictionary Persoonlijke woordenboek @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Niet ondersteund RTF bestand @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Onverwacht het einde van het bestand bereikt. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl-Shift-Down - Move Scenes Up Verplaats de scene omhoog - Ctrl+Shift+Up Ctrl-Shift-Up - Toggle Scene List Schakel scene lijst - Shift+F4 Shift-F4 - Show scene list (%1) Laat scene lijst (%1) zien - Hide scene list (%1) Verberg scene lijst (%1) - Filter Filteren - Move Scenes Down Verplaats Scenes naar beneden - Resize scene list Vergroot of verklein scene lijst @@ -899,12 +723,6 @@ Session - - - - - - Default Standaard @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Sessies beheren - S&essions S&essies - New Nieuw - Duplicate Kopiëren - Rename Hernoemen - Delete Verwijderen - Switch To Wissel naar - New Session Nieuwe sessie - Duplicate Session Kopieer sessie - Rename Session Sessie hernoemen - Question Vraag - Delete selected session? Sessie verwijderen ? - Session name: Sessie naam: - Sorry Sorry - The requested session name is already in use. De sessie naam is al in gebruik. - &New... &Nieuw... - Ctrl+Shift+N Crtl+Shift+N - &Manage... &Beheren... - Ctrl+Shift+M Ctrl+Shift+B @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Leegmaken - Reset to Default Terugzetten naar standaard instellingen - - Shortcut: Snelkoppeling @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Vervang aanhalingstekens... - Please Wait Even geduld @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Spellingcontrole - &Add &Toevoegen - &Ignore &Negeren - I&gnore All Negeer &Alles - &Change &Verander - C&hange All V&erander Alles - Not in dictionary: Niet in woordenboek: - Change to: Vervang door: - Checking spelling... Spelling controleren ... - Cancel Afbreken - Please wait Even geduld - Continue checking at beginning of file? Ga door met controleren vanaf het begin van het bestand - Spell check complete. Spellingcontrole klaar. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symbolen - Recently used symbols Recent gebruikte symbolen - All symbols Alle symbolen - Details Details - Name: Naam: - Insert Invoegen @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blokken - Scripts Scripts @@ -1156,7 +928,6 @@ Theme - Untitled %1 Naamloos %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Naam: - No Image Geen plaatje - Tiled Getegeld. - - Centered Gecentreerd - - Stretched Uitgerekt - Scaled Geschaald - Zoomed Zoom - Opacity: Bedekking: - Position: Positie: - Width: Breedte: - Round Text Background Corners Afronden hoeken achtergrond tekst - - - Radius: Straal: - Blur Text Background Achtergrond tekst onduidelijker maken - Text Background Drop Shadow Schaduw achtergrond tekst - Vertical Offset: Verticale verschuiving - Margins Randen - Window: Window: - Page: Pagina: - Indent first line Eerste lijn inspringen - Above: Boven: - Below: Onder: - Remove Verwijder - Edit Theme Thema bewerken - Window Background Window Achtergrond - - Type: Type: - - - - Color: Kleur: - Image: Plaatje: - - - - - - - - - - pixels Pixel - Left Links - Text Background Achtergrond tekst - Right Rechts - Text Tekst - Font: Lettertype: - Misspelled: Spelfout: - Line Spacing Lijn afstand - Single Enkel - 1.5 Lines Anderhalve lijn - Double Dubbele lijn - Proportional Proportioneel - Height: Hoogte: - Paragraph Spacing Paragraaf uitlijning - Tab Width: Tab Breedte: - New Theme Nieuw Thema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Thema's - Default Standaard - Bitter Skies Bittere luchten - Enchantment Betovering - Gentle Blues Rustige Blues - Old School Oude school - Space Dreams Ruimtedromen - Spy Games Spionnenspel - Tranquility Kalmte - Writing Desk Schrijftafel - - New Nieuw - - Duplicate Kopieren - Custom Aangepast - Edit Bewerken - Delete Verwijderen - Import Importeren - Export Exporteren - Question Vraag - Delete theme '%1'? Verwijder thema '%1'? - - Themes (%1) Thema's(%1) - Import Theme Thema importeren - Export Theme Thema exporteren @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Vraag - Delete timer? Timer verwijderen? - <b>Words:</b> %L1 <b>woorden:</b> %L1 - <b>Pages:</b> %L1 <b>pagina's:</b> %L1 - <b>Paragraphs:</b> %L1 <b>paragrafen:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>tekens:</b> %L1 / %L2 - Set Delay Tijdsduur instellen - Set Time Tijd instellen - Delay: Duur: - Time: Tijd: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Type: - Memo: Memo: - Edit Bewerken - Delete Verwijderen @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Geen timers ingesteld @@ -1616,37 +1283,30 @@ TimerManager - Timers Timer - New Neu - Recent Recent - Question Vraag - Cancel editing timers? Timer instelling beeindigen? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Thema wordt geladen - Loading sounds Geluiden worden geladen - - Untitled Unbenannt - Open File Bestand openen - About FocusWriter Over FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Een simpele schermvullende tekstverwerker - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a> licentie - Uses icons from the <a href=%1>Oxygen</a> icon theme Maakt gebruik van iconenn van het <a href=%1>Oxygen</a> iconen thema - Used under the <a href=%1>LGPL 3</a> license Gebruikt onder de <a href=%1>LGPL 3</a> licentie - - Characters: %L1 / %L2 Tekens: %L1 / %L2 - - Pages: %L1 Pagina's: %L1 - - Paragraphs: %L1 Paragrafen: %L1 - - Words: %L1 Woorden: %L1 - - Opening %1 Bestand %1 wordt geopend - (Untitled %1) (naamloos %1) - List all documents Laat alle documenten zien - Switch to Next Document Schakel naar volgend document - Switch to Previous Document Schakel naar vorig document - Switch to First Document Schakel naar eerste document - Switch to Last Document Schakel naar laatste document - Switch to Document %1 Schakel naar document %1 - Loading settings Instellingen inladen - Emergency cache is not writable. De noodopslag is niet beschrijfbaar. - - Warning Waarschuwing - FocusWriter was not shut down cleanly. FocusWriter is niet netjes afgesloten. - Restore from the emergency cache? Veiligheidskopie herstellen? - Some files could not be opened. Enkele bestanden konden niet geopend worden. - Some files were opened Read-Only. Enkele bestanden zijn in alleen lezen mode geopend. - '%1' is newer than the cached copy. '%1' is nieuwer dan de versie in de tussenopslag. - Overwrite newer file? Nieuwer bestand overschrijven ? - Save Changes? Veranderingen opslaan ? - Save changes to the file '%1' before closing? Veranderingen in bestand '%1' opslaan voor het afsluiten - Your changes will be lost if you don't save them. De veranderingen zullen verloren gaan als ze niet opgeslagen worden - Unable to load typewriter sounds. Typemachinegeluiden konden niet geladen worden. - &File &Bestand - &New &Nieuw - &Open... &Openen... - Reloa&d Her&laden - &Save Op&slaan - Save &As... Opslaan &als... - &Rename... &Hernoemen... - Save A&ll &Alles opslaan - Manage Sessions Beheer sessies - New Session Nieuwe sessie - &Print... A&fdrukken... - Pa&ge Setup... Pagina instellingen - &Close Afsl&uiten - &Quit S&toppen - Ctrl+Q Ctrl+Q - &Edit &Bewerken - &Undo &Ongedaan maken - &Redo &Herhalen - Cu&t K&nippen - &Copy K&opieren - &Paste Pl&akken - Paste &Unformatted Plak &zonder formattering - Ctrl+Shift+V Ctrl-Shift-V - Select &All Alles &Selecteren - Select &Scene Selecteer &scene - Ctrl+Shift+A Ctrl-Shift-A - Fo&rmat O&pmaken - &Heading &Kop - Heading &1 Kop &1 - Heading &2 Kop &2 - Heading &3 Kop &3 - Heading &4 Kop &4 - Heading &5 Kop &5 - Heading &6 Kop &6 - &Normal &Normaal - &Bold &Dik - &Italic &Schuin - &Underline &Onderlijnen - Stri&kethrough &Doorhalen - Ctrl+K Strg+G - Sup&erscript Sup&erscript - Ctrl+^ Strg+^ - &Subscript Su&bscript - Ctrl+_ Ctrl+_ - Align &Left &Links uitlijnen - Ctrl+{ Ctrl+{ - Align &Center &Centreren - Ctrl+| Ctrl+| - Align &Right &Rechts uitlijnen - Ctrl+} Ctrl+} - Align &Justify Align &Justify - Ctrl+J Ctrl+J - &Decrease Indent Minder inspringen - Ctrl+< Ctrl+< - I&ncrease Indent &Meer inspringen - Ctrl+> Ctrl+> - Le&ft to Right Block Blok &links uitlijnen - Ri&ght to Left Block Blok &rechts uitlijnen - &Tools &Gereedschappen - &Find... &Vinden... - Find &Next Volge&nde - Find Pre&vious &Achteruit zoeken - &Replace... Ve&rvang... - Ctrl+R Ctrl+R - Smart &Quotes &Slimme aanhalingstekens - Update &Document &Dokument bijwerken - Update Document Smart Quotes - Update &Selection Selecti&e bijwerken - Update Selection Smart Quotes - &Spelling... Spellings&controle... - F7 F7 - Set &Language... Taal instellen - &Timers... &Stopwatch... - S&ymbols... S&ymbolen - &Daily Progress &Dagelijkse voortgang - &Settings &Instellingen - Show &Toolbar &Gereedschapsbalk tonen - Show &Menu Icons &Menu Iconen tonen - F&ocused Text Tekst in focus - &Fullscreen &Schermvullend - F11 F11 - Esc Esc - M&inimize Mi&nimaliseren - Ctrl+M Ctrl+M - &Themes... &Thema's... - &Preferences... &Instellingen... - Focus Off Focus uit - Focus One Line Focus op een lijn - Focus Three Lines Focus op 3 lijnen - &Paragraph &Paragraaf - Focus Paragraph Focus op paragraaf - Ctrl+Shift+` Ctrl+Shift+` - &Help &Help - Application &Language... &Taal... - Some files were unsupported and could not be opened. Sommige bestanden worden niet ondersteund en kunnen niet geopend worden - &Off &Uit - One &Line Een &lijn - &Three Lines &Drie lijnen - &About &Over - About &Qt Over &Qt diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 05fef73b..867cb149 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Zamknij (%1) - Collapse Zwiń - Expand Rozwiń @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Zamknij powiadomienie - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% z %Ln minuty @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% z %Ln słowa @@ -53,7 +46,6 @@ - %Ln word(s) %Ln słowo @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln minuta @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Dzienny postęp - Longest streak Najdłuższy triumf - Current streak Obecny triumf - N/A niedostępne - %n day(s) %n dzień @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% dziennego celu @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Ustaw język @@ -133,81 +114,62 @@ Document - (Untitled %1) (Bez tytułu %1) - %1 (Read-Only) %1 (Tylko-do-odczytu) - - - - Sorry Przepraszam - Unable to save '%1'. Nie można zapisać pliku '%1'. - Save File As Zapisz plik jako - - Unable to overwrite '%1'. Nie można nadpisać pliku '%1'. - Rename File Zmień nazwę pliku - Unable to rename '%1'. Nie można zmienić nazwy pliku '%1'. - Reload File? Wczytać ponownie plik? - Reload the file '%1' from disk? Wczytać ponownie plik '%1' z dysku? - All unsaved changes will be lost. Wszystkie niezapisane zmiany zostaną utracone - Reload Wczytaj ponownie - Untitled %1 Bez nazwy %1 - Question Pytanie - Saving as plain text will discard all formatting. Discard formatting? Zapisanie jako zwykły tekst usunie całe formatowanie. Usunąć formatowanie? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Plik zmieniony - The file '%1' was changed by another program. Plik '%1' został zmieniony przez inny program. - Do you want to reload the file? Czy chcesz wczytać plik ponownie? - Reload Wczytaj ponownie - Ignore Ignoruj - File Deleted Plik usunięty - The file %1 was deleted by another program. Plik %1 został usunięty przez inny program. - Do you want to save or close the file? Czy chcesz zapisać, czy zamknąć plik? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Nie można otworzyć archiwum. @@ -266,67 +219,54 @@ FindDialog - Search for: Znajdź: - Replace with: Zastąp: - Ignore case Ignoruj wielkość liter - Whole words only Tylko całe wyrazy - Regular expressions Wyrażenia regularne - Search up Znajdź poprzedni - Search down Znajdź następny - &Find &Znajdź - &Replace &Zastąp - Replace &All Zastąp &wszystkie - Find Znajdź - Replace Zastąp - Replace %n instance(s)? Zastąpić %n wystąpienie? @@ -335,19 +275,14 @@ - Question Pytanie - - Sorry Przepraszam - - Phrase not found. Nie znaleziono wyrażenia. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text Dokument tekstowy OpenDocument - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Tekst z formatowaniem - Plain Text Zwykły tekst - All Files Wszystkie pliki - All Supported Files Wszystkie obsługiwane typy plików @@ -393,17 +321,14 @@ Highlighter - Add Dodaj - Check Spelling... Sprawdź pisownię... - (No suggestions found) (Nie znaleziono propozycji) @@ -411,12 +336,10 @@ ImageButton - Open Image Otwórz obrazek - Images(%1) Obrazki(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Wybierz język aplikacji: - <System Language> <Język systemowy> - Note Informacja - Please restart this application for the change in language to take effect. Zmiany zostaną uwzględnione przy następnym uruchomieniu programu. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Nie można otworzyć archiwum. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Preferencje - General Ogólne - Statistics Statystyki - Toolbar Pasek narzędzi - Spell Checking Sprawdzanie pisowni - Select Dictionary Wybierz słownik - - Sorry Przepraszam - Unable to open archive. Nie można otworzyć archiwum. - The archive does not contain a usable dictionary. Archiwum nie zawiera prawidłowego słownika. - - - - Question Pytanie - Shortcuts Skróty - One or more shortcuts conflict. Do you wish to proceed? Jeden lub więcej skrótów się powtarza. Czy chcesz kontynuować? - The dictionary "%1" already exists. Do you want to replace it? Słowniki "%1" już istnieje. Czy chcesz go zastąpić? - Daily Goal Dzienny cel - None Brak - Minutes: Minuty: - - Words: Słowa: - Editing Edycja - Always vertically center Zawsze wyśrodkuj w pionie - Block insertion cursor Kursor blokowy - Smooth fonts Wygładzone czcionki - Typewriter sounds Odgłosy maszyny do pisania - Smart quotes: Eleganckie cudzysłowy: - Double Podwójne - Single Pojedyncze - Scenes Sceny - Divider: Sekwencja podziału - Saving Zapisywanie - Automatically save changes Automatycznie zapisuj zmiany - Remember cursor position Pamiętaj pozycję kursora - Word count Licznik słów - Page count Licznik stron - Paragraph count Licznik akapitów - Character count Licznik znaków - Characters: Znaki: - Paragraphs: Akapity: - Word Count Algorithm Algorytm zliczania słów - Reset daily progress for today to zero? Czy zresetować licznik dziennego postępu? - Remove current dictionary? Usunąć obecny słownik? - Write byte order mark in plain text files Zapisz znacznik kolejności bajtów w prostych plikach tekstowych - Default format: Domyślny format: - User Interface Interfejs użytkownika - Always show scrollbar Zawsze wyświetlaj pasek przewijania - Always show top bar Zawsze wyświetlaj górny pasek - Always show bottom bar Zawsze wyświetlaj dolny pasek - Reset Today Zresetuj Dzisiaj - History Historia - Remember history Zapamiętaj historię - Show streaks Pokaż triumfy - Minimum progress for streaks: Minimalny postęp dla triumfu: - Detect word boundaries Wykrywaj granice słów - Divide character count by six Dziel liczbę znaków przez sześć - Count each letter as a word Zliczaj każdą literę jako slowo - Page Count Algorithm Algorytm zliczania słów - Style Styl - Icons Only Tylko ikony - Text Only Tylko tekst - Text Alongside Icons Tekst obok ikon - Text Under Icons Tekst pod ikonami - Text Position: Położenie tekstu: - Actions Działania - Move Up Przesuń w górę - Move Down Przesuń w dół - Add Separator Dodaj odstęp - Command Polecenie - Shortcut Skrót - Action Działanie - Check spelling as you type Sprawdzaj pisownię podczas pisania - Ignore words in UPPERCASE Ignoruj słowa pisane WIELKIMI LITERAMI - Ignore words with numbers Ignoruj słowa z liczbami - Language Język - - Add Dodaj - - Remove Usuń - Personal Dictionary Osobisty słownik @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. To nie jest obsługiwany plik RTF. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Niespodziewanie osiągnięto koniec pliku. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+W dół - Move Scenes Up Przenieś sceny w górę - Ctrl+Shift+Up Ctrl+Shift+W górę - Toggle Scene List Pokaż/Ukryj listę scen - Shift+F4 Shift+F4 - Show scene list (%1) Pokaż listę scen (%1) - Hide scene list (%1) Ukryj listę scen (%1) - Filter Filtruj - Move Scenes Down Przenieś sceny w dół - Resize scene list Zmień rozmiar listy scen @@ -905,12 +729,6 @@ Session - - - - - - Default Domyślna @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Zarządzanie sesjami - S&essions S&esje - New Nowa - Duplicate Stwórz kopię - Rename Zmień nazwę - Delete Usuń - Switch To Przełącz na - New Session Nowa sesja - Duplicate Session Stwórz kopię sesji - Rename Session Zmień nazwę sesji - Question Pytanie - Delete selected session? Usunąć wybraną sesję? - Session name: Nazwa sesji: - Sorry Przepraszam - The requested session name is already in use. Podana nazwa sesji już jest używana. - &New... &Nowa... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... Za&rządzaj... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Wyczyść - Reset to Default Przywróć domyślny - - Shortcut: Skrót: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Zamienianie cudzysłowów... - Please Wait Proszę czekać @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Sprawdź pisownię - &Add &Dodaj - &Ignore &Ignoruj - I&gnore All Ignoruj &wszystkie - &Change &Zamień - C&hange All Zamień w&szystkie - Not in dictionary: Nie ma w słowniku: - Change to: Zamień na: - Checking spelling... Sprawdzanie pisowni... - Cancel Anuluj - Please wait Proszę czekać - Continue checking at beginning of file? Kontynuuj sprawdzanie od początku pliku? - Spell check complete. Zakończono sprawdzanie pisowni. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Symbole - Recently used symbols Ostatnio używane symbole - All symbols Wszystkie symbole - Details Szczegóły - Name: Nazwa: - Insert Wstaw @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Bloki - Scripts Skrypty @@ -1162,7 +934,6 @@ Theme - Untitled %1 Bez nazwy %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Nazwa: - No Image Brak obrazka - Tiled Sąsiadująco - - Centered Wyśrodkowane - - Stretched Rozciągnięte - Scaled Przeskalowane - Zoomed Powiększone - Opacity: Nieprzezroczystość: - Position: Położenie: - Width: Szerokość: - Round Text Background Corners Okrągłe rogi tła tekstu - - - Radius: Promień: - Blur Text Background Rozmycie tła tekstu - Text Background Drop Shadow Cień tła tekstu - Vertical Offset: Przesunięcie pionowe: - Margins Marginesy zewnętrzne - Window: Okno: - Page: Strona: - Indent first line Wcięcie pierwszego wiersza - Above: Powyżej: - Below: Poniżej: - Remove Usuń - Edit Theme Edytuj motyw - Window Background Tło okna - - Type: Rodzaj: - - - - Color: Kolor: - Image: Obrazek: - - - - - - - - - - pixels pikseli - Left Po lewej - Text Background Tło tekstu - Right Po prawej - Text Tekst - Font: Czcionka: - Misspelled: Błędne wyrazy: - Line Spacing Odstęp między wierszami - Single Pojedynczy - 1.5 Lines 1,5 wiersza - Double Podwójny - Proportional Proporcjonalny - Height: Wysokość: - Paragraph Spacing Odstępy między akapitami - Tab Width: Szerokość zakładki: - New Theme Nowy motyw @@ -1405,115 +1116,90 @@ ThemeManager - Themes Motywy - Default Domyślny - Bitter Skies - Enchantment - Gentle Blues Delikatny Blues - Old School Stara szkoła - Space Dreams Marzenia kosmiczne - Spy Games - Tranquility - Writing Desk Biurko - - New Nowy - - Duplicate Stwórz kopię - Custom Własny - Edit Edytuj - Delete Usuń - Import Importuj - Export Eksportuj - Question Pytanie - Delete theme '%1'? Usunąć motyw '%1'? - - Themes (%1) Motywy (%1) - Import Theme Importuj motyw - Export Theme Eksportuj motyw @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pytanie - Delete timer? Usunąć odliczanie? - <b>Words:</b> %L1 <b>Słowa:</b> %L1 - <b>Pages:</b> %L1 <b>Strony:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Akapity:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Znaki:</b> %L1 / %L2 - Set Delay Ustaw opóźnienie - Set Time Ustaw czas - Delay: Opóźnienie: - Time: Czas: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Rodzaj: - Memo: Memo: - Edit Edytuj - Delete Usuń @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nie ma włączonego odliczania @@ -1622,37 +1289,30 @@ TimerManager - Timers Odliczanie - New Nowe - Recent Poprzednie - Question Pytanie - Cancel editing timers? Anulować edycję odliczania? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Wczytywanie motywów - Loading sounds Wczytywanie dźwięków - - Untitled Bez tytułu - Open File Otwórz plik - About FocusWriter O programie FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Prosty pełnoekranowy procesor tekstu - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Udostępniony na licencji <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Korzysta z ikon motywu <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Udostępnionych na licencji <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Znaki: %L1 / %L2 - - Pages: %L1 Strony: %L1 - - Paragraphs: %L1 Akapity: %L1 - - Words: %L1 Słowa: %L1 - - Opening %1 Otwieranie %1 - (Untitled %1) (Bez tytułu %1) - List all documents Przeglądaj wszystkie dokumenty - Switch to Next Document Przełącz do następnego dokumentu - Switch to Previous Document Przełącz do poprzedniego dokumentu - Switch to First Document Przełącz do pierwszego dokumentu - Switch to Last Document Przełącz do ostatniego dokumentu - Switch to Document %1 Przełącz do dokumentu %1 - Loading settings Wczytywanie ustawień - Emergency cache is not writable. Bufor awaryjny nie jest zapisywalny. - - Warning Ostrzeżenie - FocusWriter was not shut down cleanly. Program FocusWriter nie został zamknięty prawidłowo. - Restore from the emergency cache? Przywrócić z bufora awaryjnego? - Some files could not be opened. Niektórych plików nie można otworzyć. - Some files were opened Read-Only. Niektóre pliki zostały otwarte tylko do odczytu. - '%1' is newer than the cached copy. '%1' jest nowszy niż zachowana kopia. - Overwrite newer file? Nadpisać nowszy plik? - Save Changes? Zapisać zmiany? - Save changes to the file '%1' before closing? Zapisać zmiany w pliku '%1' przed zamknięciem? - Your changes will be lost if you don't save them. Twoje zmiany zostaną utracone, jeśli ich nie zapiszesz. - Unable to load typewriter sounds. Nie można załadować odgłosów maszyny do pisania. - &File &Plik - &New &Nowy - &Open... &Otwórz... - Reloa&d &Przeładuj - &Save &Zapisz - Save &As... Zapisz &jako... - &Rename... Z&mień nazwę... - Save A&ll Zapisz &wszystko - Manage Sessions Zarządzanie sesjami - New Session Nowa sesja - &Print... &Drukuj... - Pa&ge Setup... Ustawienia &strony... - &Close Z&amknij - &Quit Za&kończ - Ctrl+Q Ctrl+Q - &Edit &Edycja - &Undo &Cofnij - &Redo Przyw&róć - Cu&t Wy&tnij - &Copy &Kopiuj - &Paste &Wklej - Paste &Unformatted Wklej &bez formatowania - Ctrl+Shift+V Ctrl+Shift+V - Select &All &Zaznacz wszystko - Select &Scene Zaznacz &scenę - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Format - &Heading &Nagłówek - Heading &1 Nagłówek &1 - Heading &2 Nagłówek &2 - Heading &3 Nagłówek &3 - Heading &4 Nagłówek &4 - Heading &5 Nagłówek &5 - Heading &6 Nagłówek &6 - &Normal &Normalnie - &Bold Pogru&bienie - &Italic &Kursywa - &Underline P&odkreślenie - Stri&kethrough Przek&reślenie - Ctrl+K Ctrl+K - Sup&erscript Indeks &górny - Ctrl+^ Ctrl+^ - &Subscript Indeks &dolny - Ctrl+_ Ctrl+_ - Align &Left Wyrównaj do &lewej - Ctrl+{ Ctrl+{ - Align &Center Wyrównaj do środk&a - Ctrl+| Ctrl+| - Align &Right Wyrównaj do &prawej - Ctrl+} Ctrl+} - Align &Justify Wyrównaj do ob&u stron - Ctrl+J Ctrl+J - &Decrease Indent Z&mniejsz wcięcie - Ctrl+< Ctrl+< - I&ncrease Indent Z&większ wcięcie - Ctrl+> Ctrl+> - Le&ft to Right Block Blok od l&ewej do prawej - Ri&ght to Left Block Blok od prawe&j do lewej - &Tools &Narzędzia - &Find... &Znajdź... - Find &Next Znajdź &następny - Find Pre&vious Znajdź &poprzedni - &Replace... Za&stąp... - Ctrl+R Ctrl+R - Smart &Quotes Eleganckie &cudzysłowy - Update &Document Aktualizuj &dokument - Update Document Smart Quotes - Update &Selection Aktualizuj z&aznaczenie - Update Selection Smart Quotes - &Spelling... Sp&rawdzanie pisowni... - F7 F7 - Set &Language... Ustaw &język... - &Timers... &Odliczanie... - S&ymbols... S&ymbole... - &Daily Progress &Dzienny postęp - &Settings &Ustawienia - Show &Toolbar Wyświetlaj pasek &narzędzi - Show &Menu Icons Wyświetlaj &ikony w menu - F&ocused Text P&odświetlanie tekstu - &Fullscreen Tryb pełno&ekranowy - F11 F11 - Esc Esc - M&inimize Minimalizu&j - Ctrl+M Ctrl+M - &Themes... &Motywy... - &Preferences... &Preferencje... - Focus Off Wyłącz podświetlanie - Focus One Line Podświetl jeden wiersz - Focus Three Lines Podświetl trzy wiersze - &Paragraph &Akapit - Focus Paragraph Podświetl akapit - Ctrl+Shift+` Ctrl+Shift+` - &Help P&omoc - Application &Language... &Zmiana języka aplikacji... - Some files were unsupported and could not be opened. Niektóre pliki nie są obsługiwane i nie mogły być otwarte. - &Off &Wyłączone - One &Line &Jeden wiersz - &Three Lines &Trzy wiersze - &About &Informacje o programie - About &Qt Informacje o &Qt diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index fdd614da..e5e1bbae 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Fechar (%1) - Collapse Minimizar - Expand Expandir @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Descartar o alerta - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% de %Ln minuto @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% de %Ln palavra @@ -51,7 +44,6 @@ - %Ln word(s) %Ln palavra @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuto @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progresso diário - Longest streak Série mais longa - Current streak Série atual - N/A N/D - %n day(s) %n dia @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% do objetivo diário @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Definir língua @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sem título %1) - %1 (Read-Only) %1 (Ler apenas) - - - - Sorry Desculpe - Unable to save '%1'. Não foi possível guardar «%1». - Save File As Guardar como - - Unable to overwrite '%1'. Não foi possível substituir «%1». - Rename File Alterar o nome do ficheiro - Unable to rename '%1'. Não foi possível alterar o nome « %1 ». - Reload File? Carregar de novo o ficheiro? - Reload the file '%1' from disk? Carregar de novo o ficheiro '%1' do disco? - All unsaved changes will be lost. Todas as alterações não guardadas serão perdidas. - Reload Carregar de novo - Untitled %1 Sem título %1 - Question Pergunta - Saving as plain text will discard all formatting. Discard formatting? Guardar como texto simples descartará toda a formatação. Descartar a formatação? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Ficheiro alterado - The file '%1' was changed by another program. O ficheiro '%1' foi alterado por outro programa - Do you want to reload the file? Carregar de novo o ficheiro? - Reload Carregar de novo - Ignore Ignorar - File Deleted Ficheiro eliminado - The file %1 was deleted by another program. O ficheiro %1 foi eliminado por outro programa. - Do you want to save or close the file? Gravar ou fechar o ficheiro? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Não foi possível abrir o arquivo. @@ -261,67 +214,54 @@ FindDialog - Search for: Procurar por: - Replace with: Substituir por: - Ignore case Ignorar maiúsculas - Whole words only Palavras inteiras apenas - Regular expressions Expressões regulares - Search up Para trás - Search down Para diante - &Find &Procurar - &Replace &Substituir - Replace &All Substituir &tudo - Find Procurar - Replace Substituir - Replace %n instance(s)? Substituir %n ocorrência? @@ -329,19 +269,14 @@ - Question Pergunta - - Sorry Desculpe - - Phrase not found. A frase não foi encontrada. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Plain Text - All Files Todos os ficheiros - All Supported Files Todos os ficheiros suportados @@ -387,17 +315,14 @@ Highlighter - Add Adicionar - Check Spelling... Verificação ortográfica... - (No suggestions found) (Nenhuma sugestão encontrada) @@ -405,12 +330,10 @@ ImageButton - Open Image Abrir imagem - Images(%1) Imagens(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Selecionar a língua do programa: - <System Language> <Língua do sistema> - Note Nota - Please restart this application for the change in language to take effect. Por favor reinicie o programa para a mudança da língua do programa ser aplicada. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Não foi possível abrir o arquivo @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Definições - General Geral - Statistics Estatísticas - Toolbar Barra de ferramentas - Spell Checking Verificação ortográfica - Select Dictionary Selecionar o dicionário - - Sorry Desculpe - Unable to open archive. Não foi possível abrir o arquivo. - The archive does not contain a usable dictionary. O arquivo não contem nenhum dicionário utilizável. - - - - Question Pergunta - Shortcuts Atalhos - One or more shortcuts conflict. Do you wish to proceed? Pelo menos um dos atalho está em conflito. Continuar? - The dictionary "%1" already exists. Do you want to replace it? O dicionário "%1" já existe. Deseja substituí-lo? - Daily Goal Objetivo diário - None Nenhum - Minutes: Minutos: - - Words: Palavras: - Editing Edição - Always vertically center Centrar sempre na vertical - Block insertion cursor Cursor de bloco - Smooth fonts Tipos de letra suavizados - Typewriter sounds Ruídos de máquina de escrever - Smart quotes: Aspas curvas e angulares: - Double Duplas - Single Simples - Scenes Cenas - Divider: Divisor: - Saving Gravando - Automatically save changes Gravar automaticamente as alterações - Remember cursor position Memorizar a posição do cursor - Word count Número de palavras - Page count Número de páginas - Paragraph count Número de parágrafos - Character count Número de caracteres - Characters: Caracteres: - Paragraphs: Parágrafos: - Word Count Algorithm Algoritmo de contagem de palavras - Reset daily progress for today to zero? Repor o progresso diário a zero? - Remove current dictionary? - Write byte order mark in plain text files Incluir "byte order mark" em ficheiros "plain text"? - Default format: Formato padrão: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Repor hoje - History Histórico - Remember history Lembrar histórico - Show streaks Mostrar séries - Minimum progress for streaks: Progresso mínimo para série: - Detect word boundaries Detetar o fim das palavras - Divide character count by six Dividir o número de caracteres por seis - Count each letter as a word Contar cada letra como palavra - Page Count Algorithm Algoritmo de contagem das páginas - Style Estilo - Icons Only Apenas o ícone - Text Only Apenas o texto - Text Alongside Icons Texto ao lado do ícone - Text Under Icons Texto por baixo do ícone - Text Position: Posição do texto: - Actions Ações - Move Up Subir - Move Down Descer - Add Separator Adicionar um separador - Command Comando - Shortcut Atalho - Action Ação - Check spelling as you type Verificar ortografia ao escrever - Ignore words in UPPERCASE Ignorar palavras em MAIÚSCULAS - Ignore words with numbers Ignorar palavras com números - Language Língua - - Add Adicionar - - Remove Eliminar - Personal Dictionary Dicionário definido pelo utilizador @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Não é um ficheiro RTF suportado. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Final do ficheiro atingido inesperadamente. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Seta Abaixo - Move Scenes Up Deslocar cenas para cima - Ctrl+Shift+Up Ctrl+Shift+Seta Acima - Toggle Scene List Comutar a lista de cenas - Shift+F4 Shift+F4 - Show scene list (%1) Mostrar a lista de cenas (%1) - Hide scene list (%1) Esconder a lista de cenas (%1) - Filter Filtrar - Move Scenes Down Deslocar cenas para baixo - Resize scene list Alterar o tamanho da lista @@ -899,12 +723,6 @@ Session - - - - - - Default Padrão @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Organizar as sessões - S&essions S&essões - New Novo - Duplicate Duplicar - Rename Alterar o nome - Delete Eliminar - Switch To Abrir a sessão - New Session Nova sessão - Duplicate Session Duplicar sessão - Rename Session Alterar o nome da sessão - Question Pergunta - Delete selected session? Apagar a sessão selecionada ? - Session name: Nome da sessão: - Sorry Desculpe - The requested session name is already in use. O nome introduzido já está a ser utilizado. - &New... &Nova... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Gerir... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Limpar - Reset to Default Repor os valores padrão - - Shortcut: Atalho: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... A substituir as aspas... - Please Wait Espere por favor @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Verificação da ortografia - &Add &Adicionar - &Ignore &Ignorar - I&gnore All I&gnorar tudo - &Change &Alterar - C&hange All A&lterar tudo - Not in dictionary: Não consta do dicionário: - Change to: Alterar por: - Checking spelling... Verificação da ortografia... - Cancel Anular - Please wait Espere por favor - Continue checking at beginning of file? Continuar verificação do início do ficheiro? - Spell check complete. Verificação da ortografia concluída. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Símbolo - Recently used symbols Símbolos utilizados recentemente - All symbols Todos os símbolos - Details Detalhes - Name: Nome: - Insert Inserir @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocos - Scripts Guiões @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sem título %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nome: - No Image Sem imagem - Tiled Em mosaico - - Centered Centrado - - Stretched Esticada - Scaled Ampliada - Zoomed Ampliada e cortada - Opacity: Opacidade: - Position: Posição: - Width: Largura: - Round Text Background Corners Fundo do texto com cantos arredondados - - - Radius: Raio: - Blur Text Background Desfocar fundo do texto - Text Background Drop Shadow Sombra projetada pelo fundo do texto - Vertical Offset: Desfasamento vertical: - Margins Margens - Window: Janela: - Page: Página: - Indent first line Indentar primeira linha - Above: Por cima: - Below: Por baixo: - Remove Eliminar - Edit Theme Editar tema - Window Background Fundo da janela - - Type: Tipo: - - - - Color: Cor: - Image: Imagem: - - - - - - - - - - pixels píxeis - Left Esquerda - Text Background Fundo do texto - Right Direita - Text Texto - Font: Tipo de letra: - Misspelled: Erros: - Line Spacing Espaço entre linhas - Single Simples - 1.5 Lines 1,5 Linhas - Double Duplo - Proportional Proporcional - Height: Altura: - Paragraph Spacing Espaçamento do parágrafo - Tab Width: Largura de tabulação: - New Theme Novo tema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temas - Default Padrão - Bitter Skies - Enchantment - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games - Tranquility - Writing Desk Escrivaninha - - New Novo - - Duplicate Duplicar - Custom Personalizado - Edit Editar - Delete Eliminar - Import Importar - Export Exportar - Question Pergunta - Delete theme '%1'? Eliminar tema '%1'? - - Themes (%1) Temas (%1) - Import Theme Importar um tema - Export Theme Exportar o tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pergunta - Delete timer? Eliminar cronómetro ? - <b>Words:</b> %L1 <b>Palavras :</b> %L1 - <b>Pages:</b> %L1 <b>Páginas :</b> %L1 - <b>Paragraphs:</b> %L1 <b>Parágrafos :</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caracteres :</b> %L1 / %L2 - Set Delay Ajustar a duração - Set Time Acertar a hora - Delay: Tempo de espera: - Time: Hora: - HH:mm:ss HH:mm:ss - Alarm Alerta - Type: Tipo: - Memo: Nota : - Edit Alterar - Delete Apagar @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nenhum cronómetro acionado @@ -1616,37 +1283,30 @@ TimerManager - Timers Cronómetros - New Novo - Recent Recente - Question Pergunta - Cancel editing timers? Cancelar a edição dos cronómetros ? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Carregamento dos temas - Loading sounds Carregamento dos efeitos sonoros - - Untitled Sem título - Open File Abrir um ficheiro - About FocusWriter Acerca do FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Um processador de texto simples em ecrã completo - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Disponibilizado sob licença <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Usa ícones do tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Usado sob licença <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - Pages: %L1 Páginas: %L1 - - Paragraphs: %L1 Parágrafos: %L1 - - Words: %L1 Palávras: %L1 - - Opening %1 A abrir %1 - (Untitled %1) (Sem título %1) - List all documents Listar todos os documentos - Switch to Next Document Passar ao documento seguinte - Switch to Previous Document Passar ao documento anterior - Switch to First Document Passar ao primeiro documento - Switch to Last Document Passar ao último documento - Switch to Document %1 Passar ao dicumento %1 - Loading settings A carregar definições - Emergency cache is not writable. Não é possível escrever na cache de emergência. - - Warning Atenção - FocusWriter was not shut down cleanly. FocusWriter não encerrou corretamente. - Restore from the emergency cache? Recuperar dados da cache de emergência? - Some files could not be opened. Alguns ficheiros não puderam ser abertos. - Some files were opened Read-Only. Alguns ficheiros foram abertos em modo de leitura. - '%1' is newer than the cached copy. '%1' é mais recente do que a cópia presente na cache. - Overwrite newer file? Sobrepor o ficheiro mais recente? - Save Changes? Guardar alterações? - Save changes to the file '%1' before closing? Guardar alterações ao ficheiro '%1' antes de encerrar? - Your changes will be lost if you don't save them. As alterações serão perdidas se não forem guardadas. - Unable to load typewriter sounds. Não foi possível carregar os ruídos de máquina de escrever. - &File &Ficheiro - &New &Novo - &Open... &Abrir... - Reloa&d Carrega&r de novo - &Save &Guardar - Save &As... Guardar &como... - &Rename... &Mudar o nome... - Save A&ll Guardar t&udo - Manage Sessions Organizar as sessões - New Session Nova sessão - &Print... &Imprimir... - Pa&ge Setup... - &Close &Fechar - &Quit &Sair - Ctrl+Q Ctrl+Q - &Edit &Editar - &Undo &Anular - &Redo &Restaurar - Cu&t Corta&r - &Copy &Copiar - &Paste &Colar - Paste &Unformatted Colar &sem formatação - Ctrl+Shift+V Ctrl+Shift+V - Select &All Seleccionar &tudo - Select &Scene Seleccionar &cena - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmato - &Heading &Cabeçalho - Heading &1 Cabeçalho &1 - Heading &2 Cabeçalho &2 - Heading &3 Cabeçalho &3 - Heading &4 Cabeçalho &4 - Heading &5 Cabeçalho &5 - Heading &6 Cabeçalho &6 - &Normal &Normal - &Bold &Negrito - &Italic &Itálico - &Underline &Sublinhar - Stri&kethrough Ra&surar - Ctrl+K Ctrl+K - Sup&erscript Ex&poente - Ctrl+^ Ctrl+^ - &Subscript &Índice - Ctrl+_ Ctrl+_ - Align &Left Alinhar à &esquerda - Ctrl+{ Ctrl+{ - Align &Center Alinhar ao &centro - Ctrl+| Ctrl+| - Align &Right Alinhar à &direita - Ctrl+} Ctrl+} - Align &Justify &Justificado - Ctrl+J Ctrl+J - &Decrease Indent &Reduzir a indentação - Ctrl+< Ctrl+< - I&ncrease Indent A&umentar a indentação - Ctrl+> Ctrl+> - Le&ft to Right Block &Bloco de escrita da esquerda para a direita - Ri&ght to Left Block B&loco de escrita da direita para a esquerda - &Tools &Ferramentas - &Find... &Procurar... - Find &Next Procurar se&guinte - Find Pre&vious Procurar &anterior - &Replace... &Substituir... - Ctrl+R Ctrl+S - Smart &Quotes &Aspas curvas e angulares - Update &Document Actualizar &documento - Update Document Smart Quotes - Update &Selection Actualizar a &selecção - Update Selection Smart Quotes - &Spelling... &Ortografia... - F7 F7 - Set &Language... Definir &língua - &Timers... C&ronómetros... - S&ymbols... Sí&mbolos... - &Daily Progress &Progresso diário - &Settings &Configuração - Show &Toolbar Mostrar a &barra de ferramentas - Show &Menu Icons &Mostrar os ícones no menu - F&ocused Text Texto f&ocado - &Fullscreen &Ecrã completo - F11 F11 - Esc Esc - M&inimize M&inimizar - Ctrl+M Ctrl+M - &Themes... &Temas... - &Preferences... &Definições... - Focus Off Desligar o foco - Focus One Line Focar uma linha - Focus Three Lines Focar três linhas - &Paragraph &Parágrafo - Focus Paragraph Focar parágrafo - Ctrl+Shift+` - &Help A&juda - Application &Language... &Língua do programa... - Some files were unsupported and could not be opened. Alguns ficheiros não são suportados e não puderam ser abertos - &Off &Desligado - One &Line Uma l&inha - &Three Lines &Três linhas - &About &Acerca - About &Qt Acerca de &Qt diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index ff95402f..b8fdfb3f 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Próximo (%1) - Collapse Minimizar - Expand Maximizar @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Ignorar alerta - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% de %Ln minutoo @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% de %Ln palavra @@ -51,7 +44,6 @@ - %Ln word(s) %Ln palavra @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minuto @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Progresso Diário - Longest streak Sessão mais longa - Current streak Sessão atual - N/A N/A - %n day(s) %n dia @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% do objetivo diário @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Definir Idioma @@ -128,81 +109,62 @@ Document - (Untitled %1) (Sem título %1) - %1 (Read-Only) %1 (Somente leitura) - - - - Sorry Desculpe - Unable to save '%1'. Não foi possível salvar '%1'. - Save File As Salvar como - - Unable to overwrite '%1'. Não foi possível sobrescrever '%1'. - Rename File Renomear arquivo - Unable to rename '%1'. Não foi possível renomear '%1'. - Reload File? Recarregar Arquivo? - Reload the file '%1' from disk? Recarregar o arquivo '%1' do disco? - All unsaved changes will be lost. Todas as modificações não salvas serão perdidas. - Reload Recarregar - Untitled %1 Sem título %1 - Question Questão - Saving as plain text will discard all formatting. Discard formatting? Salvar como texto plano fará com que toda a formatação seja perdida. Descartar formatação? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Arquivo alterado - The file '%1' was changed by another program. O arquivo '%1' foi modificado por outro programa. - Do you want to reload the file? Deseja recarregar o arquivo? - Reload Recarregar - Ignore Ignorar - File Deleted Arquivo apagado - The file %1 was deleted by another program. O arquivo %1 foi apagado por outro programa - Do you want to save or close the file? Deseja salvar ou fechar o arquivo? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Não foi possível abrir o arquivo. @@ -261,67 +214,54 @@ FindDialog - Search for: Procurar por: - Replace with: Substituir por: - Ignore case Ignorar capitalização - Whole words only Somente palavras inteiras - Regular expressions Expressões regulares - Search up Pesquisar para trás - Search down Pesquisar para frente - &Find &Localizar - &Replace &Substituir - Replace &All Substituir &todos - Find Localizar - Replace Substituir - Replace %n instance(s)? Substituir %n ocorrência? @@ -329,19 +269,14 @@ - Question Pergunta - - Sorry Desculpe - - Phrase not found. A frase não foi encontrada. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text Texto OpenDocument - OpenDocument Flat XML XML Plano do OpenDocument - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Texto Simples - All Files Todos os Arquivos - All Supported Files Todos os Arquivos Suportados @@ -387,17 +315,14 @@ Highlighter - Add Adicionar - Check Spelling... Verificação ortográfica... - (No suggestions found) (Sem sugestões) @@ -405,12 +330,10 @@ ImageButton - Open Image Abrir imagem - Images(%1) Imagens(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Selecione o idioma do programa: - <System Language> <Linguagem do sistema> - Note Nota - Please restart this application for the change in language to take effect. Por favor, reinicie o programa para que as alterações no idioma tenham efeito. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Não foi possível abrir o arquivo. @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Preferências - General Geral - Statistics Estatísticas - Toolbar Barra de ferramentas - Spell Checking Verificação ortográfica - Select Dictionary Selecionar dicionário - - Sorry Desculpe - Unable to open archive. Não foi possível abrir o arquivo. - The archive does not contain a usable dictionary. O arquivo não contém um dicionário utilizável. - - - - Question Pergunta - Shortcuts Atalhos - One or more shortcuts conflict. Do you wish to proceed? Um ou mais atalhos estão conflitantes. Deseja prosseguir? - The dictionary "%1" already exists. Do you want to replace it? O dicionário "%1" já existe. Deseja subistituí-lo? - Daily Goal Objetivo diário - None Nenhum - Minutes: Minutos: - - Words: Palavras: - Editing Edição - Always vertically center Sempre centralizado verticalmente - Block insertion cursor Cursor de inserção de bloco - Smooth fonts Fontes suavizadas - Typewriter sounds Sons de máquina datilográfica - Smart quotes: Aspas inteligentes: - Double Dupla - Single Simples - Scenes Cenas - Divider: Divisor: - Saving Salvando - Automatically save changes Salvar alterações automaticamente - Remember cursor position Lembrar posição do cursor - Word count Contagem de palavras - Page count Contagem de páginas - Paragraph count Contagem de parágrafos - Character count Contagem de caracteres - Characters: Caracteres: - Paragraphs: Parágrafos: - Word Count Algorithm Algoritmo para contagem de palavras - Reset daily progress for today to zero? Redefinir o progresso diário para hoje a zero? - Remove current dictionary? Remover o dicionário atual? - Write byte order mark in plain text files Escrever a ordem de bytes em arquivos de texto sem formatação - Default format: Formato Padrão: - User Interface Interface de Usuário - Always show scrollbar Mostrar sempre a barra de rolagem - Always show top bar MOstrar sempre a barra superior - Always show bottom bar Mostrar sempre as barra inferior - Reset Today Redefinir Hoje - History Histórico - Remember history Relembrar histórico - Show streaks Ver todas as sessões - Minimum progress for streaks: Progresso mínimo para as sessões: - Detect word boundaries Detectar limites de palavras - Divide character count by six Dividir contagem total de caracteres por seis - Count each letter as a word Contar cada letra como uma palavra - Page Count Algorithm Algorítimo de Contagem de Páginas - Style Estilo - Icons Only Apenas ícones - Text Only Apenas textos - Text Alongside Icons Textos ao lado dos ícones - Text Under Icons Textos abaixo dos ícones - Text Position: Posição do texto: - Actions Ações - Move Up Mover para cima - Move Down Mover para baixo - Add Separator Adicionar separador - Command Comando - Shortcut Atalho - Action Ação - Check spelling as you type Verificar ortografia ao escrever - Ignore words in UPPERCASE Ignorar palavras em MAIÚSCULAS - Ignore words with numbers Ignorar palavras com números - Language Idioma - - Add Adicionar - - Remove Remover - Personal Dictionary Dicionário definido pelo usuário @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Não é um arquivo RTF suportado. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Fim do arquivo alcançado inesperadamente. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Baixo - Move Scenes Up Mover cenas para cima - Ctrl+Shift+Up Ctrl+Shift+Cima - Toggle Scene List Alternar Lista de cenas - Shift+F4 Shift+F4 - Show scene list (%1) Exibir lista de cenas (%1) - Hide scene list (%1) Ocultar lista de cenas (%1) - Filter Filtro - Move Scenes Down Mover cenas para baixo - Resize scene list Alterar tamanho da lista de cenas @@ -899,12 +723,6 @@ Session - - - - - - Default Padrão @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Gerenciar Sessões - S&essions S&essões - New Nova - Duplicate Duplicar - Rename Renomear - Delete Excluir - Switch To Mudar para - New Session Nova sessão - Duplicate Session Duplicar Sessão - Rename Session Renomear sessão - Question Pergunta - Delete selected session? Excluir sessão selecionada? - Session name: Nome da sessão: - Sorry Desculpe - The requested session name is already in use. Este nome de sessão já está sendo utilizado. - &New... &Nova... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Gerenciar... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Limpar - Reset to Default Restaurar padrão - - Shortcut: Atalho: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Substituindo aspas... - Please Wait Por favor, aguarde @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Verificar ortografia - &Add &Adicionar - &Ignore &Ignorar - I&gnore All &Ignorar todos - &Change &Alterar - C&hange All A&lterar todos - Not in dictionary: Não está no dicionário: - Change to: Alterar para: - Checking spelling... Verificação ortográfica... - Cancel Cancelar - Please wait Por favor, aguarde - Continue checking at beginning of file? Continuar a verificação no início do arquivo? - Spell check complete. Verificação ortográfica completa. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Símbolos - Recently used symbols Símbolos usados recentemente - All symbols Todos os símbolos - Details Detalhes - Name: Nome: - Insert Inserir @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Blocos - Scripts Roteiros @@ -1156,7 +928,6 @@ Theme - Untitled %1 Sem título %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Nome: - No Image Sem imagem - Tiled Lado a lado - - Centered Centralizado - - Stretched Esticado - Scaled Em escala - Zoomed Ampliada - Opacity: Opacidade: - Position: Posição: - Width: Largura: - Round Text Background Corners Cantos Arredondados para o Plano de Fundo do Texto - - - Radius: Raio: - Blur Text Background Desfocar o Plano de Fundo do Texto - Text Background Drop Shadow Sombra Projetada do Plano de Fundo do Texo - Vertical Offset: Deslocamento Vertical: - Margins Margens - Window: Janela: - Page: Página: - Indent first line Indentar a primeira linha - Above: Acima: - Below: Abaixo: - Remove Remover - Edit Theme Editar Tema - Window Background Plano de Fundo da Janela - - Type: Tipo: - - - - Color: Cor: - Image: Imagem: - - - - - - - - - - pixels pixels - Left Esquerda - Text Background Plano de Fundo do Texto - Right Direita - Text Texto - Font: Fonte: - Misspelled: Erros: - Line Spacing Espaçamento da linha - Single Simples - 1.5 Lines 1.5 linhas - Double Duplo - Proportional Proporcional - Height: Altura: - Paragraph Spacing Espaçamento do parágrafo - Tab Width: Largura da Tabulação: - New Theme Novo Tema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Temas - Default Padrão - Bitter Skies Céus Amargos - Enchantment Encantamento - Gentle Blues Gentle Blues - Old School Old School - Space Dreams Space Dreams - Spy Games Jogos de Espionagem - Tranquility Tranquilidade - Writing Desk Writing Desk - - New Novo - - Duplicate Duplicar - Custom Personalizado - Edit Editar - Delete Deletar - Import Importar - Export Exportar - Question Pergunta - Delete theme '%1'? Deletar o tema '%1'? - - Themes (%1) Temas (%1) - Import Theme Importar tema - Export Theme Exportar tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Pergunta - Delete timer? Excluir cronômetro? - <b>Words:</b> %L1 <b>Palavras:</b> %L1 - <b>Pages:</b> %L1 <b>Páginas:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Parágrafos:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caracteres:</b> %L1 / %L2 - Set Delay Configurar espera - Set Time Configurar Hora - Delay: Espera: - Time: Hora: - HH:mm:ss HH:mm:ss - Alarm Alarme - Type: Tipo: - Memo: Nota: - Edit Editar - Delete Excluir @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nenhum cronômetro funcionando @@ -1616,37 +1283,30 @@ TimerManager - Timers Cronômetros - New Novo - Recent Recente - Question Pergunta - Cancel editing timers? Cancelar a edição dos cronômetros? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Carregando temas - Loading sounds Carregando sons - - Untitled Sem título - Open File Abrir arquivo - About FocusWriter Sobre o FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Um processador de textos simples para escrita em modo Tela cheia - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Disponibilizado sob a licença <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Utiliza ícones do conjunto <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Utilizado sob a licença <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caracteres: %L1 / %L2 - - Pages: %L1 Páginas: %L1 - - Paragraphs: %L1 Parágrafos: %L1 - - Words: %L1 Palavras: %L1 - - Opening %1 Abrindo %1 - (Untitled %1) (Sem título %1) - List all documents Listar todos os documentos - Switch to Next Document Ir para próximo documento - Switch to Previous Document Ir para documento anterior - Switch to First Document Ir para o primeiro documento - Switch to Last Document Ir para o último documento - Switch to Document %1 Ir para o documento %1 - Loading settings Carregando configurações - Emergency cache is not writable. Não é possível escrever no cache de emergência. - - Warning Aviso - FocusWriter was not shut down cleanly. O FocusWriter não foi fechado corretamente. - Restore from the emergency cache? Restaurar a partir do cache de emergência? - Some files could not be opened. Alguns arquivos não puderam ser abertos. - Some files were opened Read-Only. Alguns arquivos foram abertos em modo somente leitura. - '%1' is newer than the cached copy. '%1' é mais recente que a cópia em cache. - Overwrite newer file? Sobrescrever o novo arquivo? - Save Changes? Salvar as Alterações? - Save changes to the file '%1' before closing? Salvar as alterações para o arquivo '%1' antes de fechar? - Your changes will be lost if you don't save them. Suas alterações serão perdidas se você não salvá-las. - Unable to load typewriter sounds. Não é possível carregar os sons de máquina de datilografia. - &File &Arquivo - &New &Novo - &Open... &Abrir... - Reloa&d Recarrega&r - &Save &Salvar - Save &As... Salvar &como... - &Rename... &Renomear... - Save A&ll Salvar Tod&os - Manage Sessions Gerenciar Sessões - New Session Nova sessão - &Print... Im&primir... - Pa&ge Setup... Configuração de Pá&gina - &Close Fec&har - &Quit Sai&r - Ctrl+Q Ctrl+Q - &Edit &Editar - &Undo Desfa&zer - &Redo &Refazer - Cu&t Cor&tar - &Copy &Copiar - &Paste C&olar - Paste &Unformatted Colar sem &Formatação - Ctrl+Shift+V Ctrl+Shift+V - Select &All Selecionar t&udo - Select &Scene Selecionar cena - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Formatar - &Heading &Título - Heading &1 Título &1 - Heading &2 Título &2 - Heading &3 Título &3 - Heading &4 Título &4 - Heading &5 Título &5 - Heading &6 Título &6 - &Normal &Normal - &Bold &Negrito - &Italic &Itálico - &Underline &Sublinhado - Stri&kethrough &Tachado - Ctrl+K Ctrl+K - Sup&erscript S&obrescrito - Ctrl+^ Ctrl+^ - &Subscript S&ubscrito - Ctrl+_ Ctrl+_ - Align &Left Alinhar à &esquerda - Ctrl+{ Ctrl+{ - Align &Center Alinhar ao &centro - Ctrl+| Ctrl+| - Align &Right Alinhar à &direita - Ctrl+} Ctrl+} - Align &Justify Alinhar e &justificar - Ctrl+J Ctrl+J - &Decrease Indent Di&minuir indentação - Ctrl+< Ctrl+< - I&ncrease Indent &Aumentar indentação - Ctrl+> Ctrl+> - Le&ft to Right Block Bloco de texto da es&querda para a direita - Ri&ght to Left Block Bloco de texto da di&reita para a esquerda - &Tools Ferra&mentas - &Find... &Localizar... - Find &Next Localizar &próximo - Find Pre&vious Localizar &anterior - &Replace... &Substituir... - Ctrl+R Ctrl+R - Smart &Quotes Aspas &Inteligentes - Update &Document Atualizar &documento - Update Document Smart Quotes Atualizar aspas duplas no documento - Update &Selection Atualizar &seleção - Update Selection Smart Quotes Atualizar aspas duplas na seleção - &Spelling... &Verificação ortográfica... - F7 F7 - Set &Language... Definir o &Idioma... - &Timers... &Cronômetros... - S&ymbols... S&ímbolos... - &Daily Progress &Progresso Diário - &Settings &Configurações - Show &Toolbar Exibir &barra de ferramentas - Show &Menu Icons Exibir &ícones do menu - F&ocused Text Texto focado - &Fullscreen Tela &cheia - F11 F11 - Esc Esc - M&inimize M&inimizar - Ctrl+M Ctrl+M - &Themes... &Temas... - &Preferences... &Preferências... - Focus Off Desligar foco - Focus One Line Focar uma linha& - Focus Three Lines Focar três linhas - &Paragraph &Parágrafo - Focus Paragraph Focar parágrafo - Ctrl+Shift+` Ctrl+Shift+` - &Help A&juda - Application &Language... &Idioma do programa... - Some files were unsupported and could not be opened. Alguns arquivos não são suportados e não podem ser abertos. - &Off &Desligar - One &Line Uma &Linha - &Three Lines &Três linhas - &About &Sobre - About &Qt Sobre o &Qt diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 3b886362..daba4de8 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Închide (%1) - Collapse Restrînge - Expand Extinde @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Revocare alertă - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% din %Ln minut @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% of %Ln cuvînt @@ -53,7 +46,6 @@ - %Ln word(s) %Ln cuvînt @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln minut @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Progres zilnic - Longest streak Ce mai lungă perioadă - Current streak Perioada curentă - N/A Indisponibil - %n day(s) %n zi(le) @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% din obiectiv zilnic @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Setare limbă @@ -133,81 +114,62 @@ Document - (Untitled %1) (Fără titlu %1) - %1 (Read-Only) %1 (Doar-citire) - - - - Sorry Scuze - Unable to save '%1'. Nu se poate salva '%1'. - Save File As Salvează fişierul ca - - Unable to overwrite '%1'. Nu se poate suprascrie'%1'. - Rename File Redenumire fişier - Unable to rename '%1'. Nu se poate redenumi '%1'. - Reload File? Reîncarcă fişier? - Reload the file '%1' from disk? Reîncarcă fişierul '%1' de pe disc? - All unsaved changes will be lost. Toate modificările nesalvate vor fi pierdute. - Reload Reîncarcă - Untitled %1 FărăTitlu %1 - Question Întrebare - Saving as plain text will discard all formatting. Discard formatting? Salvînd ca text simplu se vor pierde toate formatările. Renunţaţi la formatare? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Fişierul a fost modificat - The file '%1' was changed by another program. Fişierul '%1' a fost modificat de un alt program. - Do you want to reload the file? Doriţi să reîncărcaţi fişierul? - Reload Reîncarcă - Ignore Ignoră - File Deleted Fişier şters - The file %1 was deleted by another program. Fişierul %1 a fost şters de un alt program. - Do you want to save or close the file? Doriţi să salvaţi sau închideţi fişierul? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Nu se poate deschide arhiva. @@ -266,67 +219,54 @@ FindDialog - Search for: Caută: - Replace with: Înlocuieşte cu: - Ignore case Ignoră minuscule/majuscule - Whole words only Doar cuvinte întregi - Regular expressions Expresii regulate - Search up Caută în sus - Search down Caută în jos - &Find Caută - &Replace Înlocuieşte - Replace &All Înlocuieşte to&ate - Find Căutare - Replace Înlocuire - Replace %n instance(s)? Înlocuire %n o dată? @@ -335,19 +275,14 @@ - Question Întrebare - - Sorry Scuze - - Phrase not found. Fraza nu a fost găsită. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text Text OpenDocument - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Text îmbogăţit - Plain Text Text simplu - All Files Toate fişierele - All Supported Files Toate fişierele suportate @@ -393,17 +321,14 @@ Highlighter - Add Adaugă - Check Spelling... Verificare ortografică... - (No suggestions found) (Nu s-au găsit sugestii) @@ -411,12 +336,10 @@ ImageButton - Open Image Deschide imagine - Images(%1) Imagini (%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Selectaţi limba aplicaţiei: - <System Language> <Limbaj Sistem> - Note Notă - Please restart this application for the change in language to take effect. Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Nu se poate deschide arhiva. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Preferinţe - General General - Statistics Statistici - Toolbar Bară de intrumente - Spell Checking Verificare ortografică - Select Dictionary Selectaţi dicţionarul - - Sorry Scuze - Unable to open archive. Nu se poate deschide arhiva - The archive does not contain a usable dictionary. Arhiva nu conţine un dicţionar utilizabil. - - - - Question Întrebare - Shortcuts Scurtături - One or more shortcuts conflict. Do you wish to proceed? Una sau mai multe scurtături sînt în conflict. Doriţi să continuaţi? - The dictionary "%1" already exists. Do you want to replace it? Dicţionarul "%1" deja există. Doriţi să-l înlocuiţi? - Daily Goal Obiectiv zilnic - None Niciunul - Minutes: Minute: - - Words: Cuvinte: - Editing Editare - Always vertically center Centrează vertical întotdeauna - Block insertion cursor Cursor block de inserare - Smooth fonts Netezire font-uri - Typewriter sounds Sunete maşină de scris - Smart quotes: Ghilimele inteligente: - Double Duble - Single Simple - Scenes Scene - Divider: Divizor: - Saving Salvare - Automatically save changes Salvează automat modificările - Remember cursor position Amintire poziţie cursor - Word count Contor cuvinte - Page count Contor pagini - Paragraph count Contor paragrafe - Character count Contor caractere - Characters: Caractere: - Paragraphs: Paragrafe: - Word Count Algorithm Algoritm contorizare cuvinte - Reset daily progress for today to zero? Resetare progres zilnic pentru astăzi la zero? - Remove current dictionary? Înlăturaţi dicţionarul curent? - Write byte order mark in plain text files Scrie marker ordine octeţi în fişierele de text simplu - Default format: Format iniţial: - User Interface Interfaţă utilizator - Always show scrollbar Arată întotdeauna bările de defilare - Always show top bar Arată întotdeauna bara de sus - Always show bottom bar Arată întotdeauna bara de jos - Reset Today Resetare astăzi - History Istoric - Remember history Amintire istoric - Show streaks Arată perioade - Minimum progress for streaks: Progres minim pentru perioade: - Detect word boundaries Detectare limite cuvinte - Divide character count by six Împarte numărul de caractere cu şase - Count each letter as a word Contorizează fiecare literă ca şi cuvînt - Page Count Algorithm Algoritm contorizare pagini - Style Stil - Icons Only Doar iconuri - Text Only Doar text - Text Alongside Icons Text lîngă iconuri - Text Under Icons Text sub iconuri - Text Position: Poziţie text - Actions Acţiuni - Move Up Mută în sus - Move Down Mută în jos - Add Separator Adaugă separator - Command Comandă - Shortcut Scurtătură - Action Acţiune - Check spelling as you type Verificare ortografică în timpul tastării - Ignore words in UPPERCASE Ignorare cuvinte cu MAJUSCULE - Ignore words with numbers Ignorare cuvinte care conţin cifre - Language Limbă - - Add Adăugare - - Remove Înlăturare - Personal Dictionary Dicţionar personal @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Fişier RTF nesuportat. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. S-a ajuns pe neaşteptate la sfîrşitul fişierului. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Săgeată în jos - Move Scenes Up Mută scene în sus - Ctrl+Shift+Up Ctrl+Shift+Săgeată în sus - Toggle Scene List Comutare listă scene - Shift+F4 Shift+F4 - Show scene list (%1) Arată listă scene (%1) - Hide scene list (%1) Ascunde listă scene (%1) - Filter Filtru - Move Scenes Down Mută scene în jos - Resize scene list Redimensionare listă scene @@ -905,12 +729,6 @@ Session - - - - - - Default Iniţial @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Gestionare sesiuni - S&essions S&esiuni - New Nou - Duplicate Duplicat - Rename Redenumire - Delete Ştergere - Switch To Comută la - New Session Sesiune nouă - Duplicate Session Duplică sesiune - Rename Session Redenumire sesiune - Question Întrebare - Delete selected session? Şterge sesiunea selectată? - Session name: Nume sesiune: - Sorry Scuze - The requested session name is already in use. Numele solicitat al sesiunii este deja în uz. - &New... &Nou... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... Gestionare... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Curăţă - Reset to Default Resetează la valorile implicte - - Shortcut: Scurtătură: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Înlocuire ghilimele... - Please Wait Vă rugăm aşteptaţi @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Verificare ortografică - &Add &Adaugă - &Ignore &Ignoră - I&gnore All I&gnoră toate - &Change &Modifică - C&hange All Modifică &toate - Not in dictionary: Nu este în dicţionar: - Change to: Modifică în: - Checking spelling... Verificare ortografie... - Cancel Anulare - Please wait Vă rugăm aşteptaţi - Continue checking at beginning of file? Continuă verificarea de la începutul fişierului? - Spell check complete. Verificare ortografică completă. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Simboluri - Recently used symbols Simbolurile folosite recent - All symbols Toate simbolurile - Details Detalii - Name: Nume: - Insert Inserează @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Blocuri - Scripts Script-uri @@ -1162,7 +934,6 @@ Theme - Untitled %1 FărăTitlu %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Nume: - No Image Fără imagine - Tiled Placat - - Centered Centrat - - Stretched Întins - Scaled Redimensionat - Zoomed Mărit - Opacity: Opacitate: - Position: Poziţie: - Width: Lăţime: - Round Text Background Corners Text fundal colţuri rotunjite - - - Radius: Rază: - Blur Text Background Estompare text fundal - Text Background Drop Shadow Umbră text fundal - Vertical Offset: Offset vertical: - Margins Margini - Window: Fereastră: - Page: Pagină: - Indent first line Indentare prima linie - Above: Deasupra: - Below: Sub: - Remove Înlătură - Edit Theme Editare temă - Window Background Fundal fereastră - - Type: Tip: - - - - Color: Culoare: - Image: Imagine: - - - - - - - - - - pixels pixeli - Left Stînga - Text Background Text fundal - Right Dreapta - Text Text - Font: Font: - Misspelled: Greşit: - Line Spacing Spaţiere rînd - Single Simplă - 1.5 Lines 1.5 linii - Double Două rînduri - Proportional Proporţional - Height: Înălţime: - Paragraph Spacing Spaţiere paragraf - Tab Width: Lăţime tab: - New Theme Temă nouă @@ -1405,115 +1116,90 @@ ThemeManager - Themes Teme - Default Iniţial - Bitter Skies Cer morocănos - Enchantment Încîntare - Gentle Blues Albatru gentil - Old School Vechea şcoală - Space Dreams Vise spaţiale - Spy Games Jocuri spion - Tranquility Linişte - Writing Desk Birou de scris - - New Nou - - Duplicate Duplicat - Custom Personalizată - Edit Editare - Delete Ştergere - Import Import - Export Export - Question Întrebare - Delete theme '%1'? Ştergeţi tema '%1'? - - Themes (%1) Teme (%1) - Import Theme Importare temă - Export Theme Exportare temă @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Întrebare - Delete timer? Şterge cronometru? - <b>Words:</b> %L1 <b>Cuvinte:</b> %L1 - <b>Pages:</b> %L1 <b>Pagini:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragrafe:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Caractere:</b> %L1 / %L2 - Set Delay Setare întîrzîiere - Set Time Setare timp - Delay: Întîrzîiere: - Time: Timp: - HH:mm:ss HH:mm:ss - Alarm Alarmă - Type: Tip: - Memo: Notă: - Edit Editare - Delete Ştergere @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nu există cronometre care rulează @@ -1622,37 +1289,30 @@ TimerManager - Timers Cronometre - New Nou - Recent Recent - Question Întrebare - Cancel editing timers? Anulare cronometru editare? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Încărcare teme - Loading sounds Încărcare sunete - - Untitled FărăTitlu - Open File Deschide fişier - About FocusWriter Despre FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Un procesor simplu de text pe tot ecranul - Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Foloseşte iconuri din tema <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Folosit sub licenţă <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Caractere: %L1 / %L2 - - Pages: %L1 Pagini: %L1 - - Paragraphs: %L1 Paragrafe: %L1 - - Words: %L1 Cuvinte: %L1 - - Opening %1 Deschidere %1 - (Untitled %1) (Fără titlu %1) - List all documents Listă toate documentele - Switch to Next Document Comutare la următorul document - Switch to Previous Document Comutare la documentul precedent - Switch to First Document Comutare la primul document - Switch to Last Document Comutare la ultimul document - Switch to Document %1 Comutare la document %1 - Loading settings Încărcare setări - Emergency cache is not writable. Cache-ul de urgenţă nu poate fi scris. - - Warning Avertisment - FocusWriter was not shut down cleanly. FocusWriter nu a fost oprit corect. - Restore from the emergency cache? Restaurare din memoria cache de urgenţă? - Some files could not be opened. Unele fişiere nu au putut fi deschise. - Some files were opened Read-Only. Unele fişiere au fost deschise în mod doar-citire. - '%1' is newer than the cached copy. '%1' este mai nou decît copia din cache. - Overwrite newer file? Suprascrie noul fişier? - Save Changes? Salvaţi modificările? - Save changes to the file '%1' before closing? Salvează modificările în fişierul '%1' înainte de închidere? - Your changes will be lost if you don't save them. Modificările dvs. vor fi pierdure dacă nu le salvaţi. - Unable to load typewriter sounds. Nu se pot încărca sunetele maşină de scris. - &File &Fişier - &New &Nou - &Open... &Deschide... - Reloa&d Reîncarcă - &Save &Salvare - Save &As... Salvare c&a... - &Rename... &Redenumire... - Save A&ll Sa&lvează tot - Manage Sessions Gestionare sesiuni - New Session Sesiune nouă - &Print... Imprimare... - Pa&ge Setup... Setări pa&gină... - &Close Închide - &Quit &Ieşire - Ctrl+Q Ctrl+Q - &Edit &Editare - &Undo Anulează - &Redo Reface - Cu&t &Taie - &Copy &Copiază - &Paste &Lipeşte - Paste &Unformatted Lipire neformatat - Ctrl+Shift+V Ctrl+Shift+V - Select &All Selectează &tot - Select &Scene Selectare &scenă - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmatare - &Heading Rubrică - Heading &1 Rubrică &1 - Heading &2 Rubrică &2 - Heading &3 Rubrică &3 - Heading &4 Rubrică &4 - Heading &5 Rubrică &5 - Heading &6 Rubrică &6 - &Normal &Normal - &Bold Îngroşat - &Italic &Italic - &Underline S&ubliniat - Stri&kethrough &Tăiat - Ctrl+K Ctrl+K - Sup&erscript Exponent - Ctrl+^ Ctrl+^ - &Subscript Indice - Ctrl+_ Ctrl+_ - Align &Left Aliniere la &stînga - Ctrl+{ Ctrl+{ - Align &Center Aliniere la &centru - Ctrl+| Ctrl+| - Align &Right Aliniere la &dreapta - Ctrl+} Ctrl+} - Align &Justify Aliniere stînga-dreapta - Ctrl+J Ctrl+J - &Decrease Indent Mărire alineat - Ctrl+< Ctrl+< - I&ncrease Indent Micşorare alineat - Ctrl+> Ctrl+> - Le&ft to Right Block Bloc stînga-dreapta - Ri&ght to Left Block Bloc dreapta-stînga - &Tools &Unelte - &Find... &Caută... - Find &Next Caută &următorul - Find Pre&vious Caută &precedent - &Replace... Înlocuire... - Ctrl+R Ctrl+R - Smart &Quotes Ghilimele inteligente - Update &Document Actualizare &document - Update Document Smart Quotes Actualizare ghilimele inteligente în document - Update &Selection Actualizare &selecţie - Update Selection Smart Quotes Actualizare ghilimele inteligente în selecţie - &Spelling... &Ortografie... - F7 F7 - Set &Language... Setare &limbă... - &Timers... Cronometre... - S&ymbols... S&imboluri... - &Daily Progress Progres zilnic - &Settings &Setări - Show &Toolbar Arată bară de unelte - Show &Menu Icons Arată iconuri &meniu - F&ocused Text Text f&ocalizat - &Fullscreen &Tot ecranul - F11 F11 - Esc Esc - M&inimize M&inimizare - Ctrl+M Ctrl+M - &Themes... &Teme... - &Preferences... &Preferinţe... - Focus Off Focaliuzare oprită - Focus One Line Focalizare o linie - Focus Three Lines Focalizare trei linii - &Paragraph &Paragraf - Focus Paragraph Focalizare paragraf - Ctrl+Shift+` Ctrl+Shift+` - &Help &Ajutor - Application &Language... Limbă aplicaţie... - Some files were unsupported and could not be opened. Unele fişiere au fost nesuportate şi nu au putut fi deschide. - &Off &Oprit - One &Line O &linie - &Three Lines &Trei linii - &About &Despre - About &Qt Despre &Qt diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index 8c9302db..c1d6535a 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Закрыть (%1) - Collapse Свернуть - Expand Развернуть @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Убрать предупреждение - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% из %Ln минут @@ -44,7 +38,6 @@ - %1% of %Ln word(s) @@ -53,7 +46,6 @@ - %Ln word(s) %Ln слов @@ -62,7 +54,6 @@ - %Ln minute(s) @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Ежедневный прогресс - Longest streak Наиболее долгий период рабочих дней - Current streak Текущий период рабочих дней - N/A Недоступно - %n day(s) @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% от ежедневной цели @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Установить язык @@ -133,81 +114,62 @@ Document - (Untitled %1) (Без названия %1) - %1 (Read-Only) %1 (Только чтение) - - - - Sorry Извините - Unable to save '%1'. Невозможно сохранить '%1'. - Save File As Сохранить как - - Unable to overwrite '%1'. Невозможно перезаписать '%1'. - Rename File Переименовать файл - Unable to rename '%1'. Невозможно переименовать '%1'. - Reload File? Перезагрузить файл? - Reload the file '%1' from disk? Перезагрузить файл '%1' с диска? - All unsaved changes will be lost. Все несохранённые изменения в файле будут утеряны. - Reload Открыть заново - Untitled %1 Без названия %1 - Question Вопрос - Saving as plain text will discard all formatting. Discard formatting? Сохранение файла как простой текст приведёт к потере форматирования. Убрать форматирование? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Файл изменён - The file '%1' was changed by another program. Файл '%1' был изменен в другой программе. - Do you want to reload the file? Открыть заново этот файл? - Reload Открыть заново - Ignore Пропустить - File Deleted Файл удалён - The file %1 was deleted by another program. Файл %1 был удалён другой программой. - Do you want to save or close the file? Хотите ли вы сохранить файл, или же закрыть его? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Невозможно открыть архив. @@ -266,67 +219,54 @@ FindDialog - Search for: Найти: - Replace with: Заменить на: - Ignore case Не учитывать регистр - Whole words only Только слова целиком - Regular expressions Регулярные выражения - Search up Найти выше - Search down Найти ниже - &Find &Найти - &Replace &Заменить - Replace &All Заменить &все - Find Найти - Replace Заменить - Replace %n instance(s)? Заменить %n совпадение? @@ -335,19 +275,14 @@ - Question Вопрос - - Sorry Извините - - Phrase not found. Фраза не найдена. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text Открытый Текстовый Документ - OpenDocument Flat XML - Office Open XML Открытый офисный файл XML - Rich Text Format Расширенный Текстовый формат - Plain Text Обычный текст - All Files Все файлы - All Supported Files Все поддерживаемые файлы @@ -393,17 +321,14 @@ Highlighter - Add Добавить - Check Spelling... Проверить правописание... - (No suggestions found) (Нет вариантов) @@ -411,12 +336,10 @@ ImageButton - Open Image Открыть изображение - Images(%1) Изображения(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Выберите язык приложения: - <System Language> <Язык системы> - Note Информация - Please restart this application for the change in language to take effect. Перезапустите программу, чтобы применить изменение языка. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Невозможно открыть архив. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Параметры - General Общие - Statistics Статистика - Toolbar Панель инструментов - Spell Checking Проверка правописания - Select Dictionary Выберите словарь - - Sorry Извините - Unable to open archive. Невозможно открыть архив. - The archive does not contain a usable dictionary. Архив не содержит правильного словаря. - - - - Question Вопрос - Shortcuts Комбинация клавиш - One or more shortcuts conflict. Do you wish to proceed? Некоторые комбинации клавиш совпадают. Продолжить? - The dictionary "%1" already exists. Do you want to replace it? Словарь "%1" уже существует. Перезаписать его? - Daily Goal Дневная задача - None Нет - Minutes: Минут: - - Words: Слов: - Editing Редактирование - Always vertically center Всегда центрировать по вертикали - Block insertion cursor Прямоугольный курсор - Smooth fonts Сглаживать шрифты - Typewriter sounds Звук пишущей машинки - Smart quotes: Заменять кавычки: - Double Двойные - Single Одинарные - Scenes Сцены - Divider: Разделительная линия: - Saving Сохранение - Automatically save changes Автоматически сохранять изменения - Remember cursor position Запоминать позицию курсора - Word count Количество слов - Page count Количество страниц - Paragraph count Количество абзацев - Character count Количество символов - Characters: Символов: - Paragraphs: Абзацев: - Word Count Algorithm Алгоритм подсчёта слов - Reset daily progress for today to zero? Сбросить сегодняшний ежедневный прогресс на ноль? - Remove current dictionary? - Write byte order mark in plain text files Записывать метку байта в простых текстовых файлах - Default format: Формат по умолчанию: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Сбросить сегодняшнее - History История - Remember history Запоминать историю - Show streaks Показывать рабочие дни - Minimum progress for streaks: Минимальный прогресс для зачета дня в рабочий период: - Detect word boundaries Определять границы слов - Divide character count by six Делить количество символов на шесть - Count each letter as a word Считать каждую букву, как слово - Page Count Algorithm Алгоритм формирования страницы - Style Стиль - Icons Only Только значки - Text Only Только текст - Text Alongside Icons Текст рядом со значками - Text Under Icons Текст под значками - Text Position: Положение текста: - Actions Действия - Move Up Переместить вверх - Move Down Переместить вниз - Add Separator Добавить разделитель - Command Команда - Shortcut Комбинация клавиш - Action Действие - Check spelling as you type Проверять орфографию при вводе - Ignore words in UPPERCASE Пропускать слова в ВЕРХНЕМ РЕГИСТРЕ - Ignore words with numbers Пропускать слова с цифрами - Language Язык - - Add Добавить - - Remove Удалить - Personal Dictionary Пользовательский словарь @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Неподдерживаемый файл RTF. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Неожиданный конец файла. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Стрелка вниз - Move Scenes Up Передвинуть сцены выше - Ctrl+Shift+Up Ctrl+Shift+Стрелка вверх - Toggle Scene List Открыть/закрыть список сцен - Shift+F4 Shift+F4 - Show scene list (%1) Показать список сцен (%1) - Hide scene list (%1) Скрыть список сцен (%1) - Filter Фильтровать - Move Scenes Down Передвинуть сцены ниже - Resize scene list Изменить размер списка сцен @@ -905,12 +729,6 @@ Session - - - - - - Default По умолчанию @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Управление сеансами - S&essions С&еансы - New Новый - Duplicate Дублировать - Rename Переименовать - Delete Удалить - Switch To Переключиться - New Session Новый сеанс - Duplicate Session Дублировать сессию - Rename Session Переименовать сеанс - Question Вопрос - Delete selected session? Удалить выбранный сеанс? - Session name: Название сеанса: - Sorry Извините - The requested session name is already in use. Заданное имя сеанса уже используется. - &New... &Новый... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Управление... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Очистить - Reset to Default Сбросить к значениям по умолчанию - - Shortcut: Комбинация клавиш: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Замена кавычек... - Please Wait Пожалуйста, подождите @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Проверить орфографию - &Add &Добавить - &Ignore &Пропустить - I&gnore All П&ропустить все - &Change &Заменить - C&hange All Заме&нить все - Not in dictionary: Нет в словаре: - Change to: Заменить на: - Checking spelling... Проверяется орфография... - Cancel Отмена - Please wait Пожалуйста, подождите - Continue checking at beginning of file? Продолжить проверку с начала файла? - Spell check complete. Проверка орфографии завершена. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Символы - Recently used symbols Недавно использованные символы - All symbols Все символы - Details Подробности - Name: Название: - Insert Вставить @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Блоки - Scripts Скрипты @@ -1162,7 +934,6 @@ Theme - Untitled %1 Безымянная %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Название: - No Image Нет изображения - Tiled Замостить - - Centered Центрировать - - Stretched По ширине - Scaled Масштабировать - Zoomed Приблизить - Opacity: Непрозрачность: - Position: Позиция: - Width: Ширина: - Round Text Background Corners Закругление углов фона текста - - - Radius: Радиус: - Blur Text Background Размытие фона текста - Text Background Drop Shadow Падающая тень от текста - Vertical Offset: Вертикальное смещение: - Margins Границы - Window: Окно: - Page: Страница: - Indent first line Отступ первой строки: - Above: Перед: - Below: После: - Remove Удалить - Edit Theme Редактировать тему - Window Background Фон окна - - Type: Тип: - - - - Color: Цвет: - Image: Изображение: - - - - - - - - - - pixels пикселей - Left Слева - Text Background Фон текста - Right Справа - Text Текст - Font: Шрифт: - Misspelled: Ошибки: - Line Spacing Межстрочный интервал - Single Одинарный - 1.5 Lines Полуторный - Double Двойной - Proportional Пропорциональный - Height: Высота: - Paragraph Spacing Отступы параграфа - Tab Width: Ширина вкладки: - New Theme Новая тема @@ -1405,115 +1116,90 @@ ThemeManager - Themes Темы - Default По умолчанию - Bitter Skies - Enchantment - Gentle Blues Нежный блюз - Old School Старая школа - Space Dreams Космические мечты - Spy Games - Tranquility - Writing Desk Письменный стол - - New Новая - - Duplicate Дублировать - Custom Пользовательская - Edit Редактировать - Delete Удалить - Import Импорт - Export Экспорт - Question Вопрос - Delete theme '%1'? Удалить тему '%1'? - - Themes (%1) Темы (%1) - Import Theme Импортировать тему - Export Theme Экспортировать тему @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Вопрос - Delete timer? Удалить таймер? - <b>Words:</b> %L1 <b>Слов:</b> %L1 - <b>Pages:</b> %L1 <b>Страниц:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Абзацев:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Символов:</b> %L1 / %L2 - Set Delay Интервал - Set Time Заданное время - Delay: Интервал: - Time: Время: - HH:mm:ss HH:mm:ss - Alarm Будильник - Type: Тип: - Memo: Сообщение: - Edit Редактировать - Delete Удалить @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss ЧЧ:мм:сс - No timers running Таймер не включён @@ -1622,37 +1289,30 @@ TimerManager - Timers Таймеры - New Новый - Recent Недавний - Question Вопрос - Cancel editing timers? Отменить редактирование таймеров? - +HH:mm:ss +ЧЧ:мм:сс - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Загружаются темы - Loading sounds Загружаются звуки - - Untitled Безымянный - Open File Открыть файл - About FocusWriter О программе FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Простой полноэкранный текстовый редактор - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Выпущен под лицензией <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme В программе используются иконки из темы <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Используются согласно лицензии <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Символов: %L1 / %L2 - - Pages: %L1 Страниц: %L1 - - Paragraphs: %L1 Абзацев: %L1 - - Words: %L1 Слов: %L1 - - Opening %1 Открывается %1 - (Untitled %1) (Безымянный %1) - List all documents Список всех документов - Switch to Next Document Перейти к следующему документу - Switch to Previous Document Перейти к предыдущему документу - Switch to First Document Перейти к первому документу - Switch to Last Document Перейти к последнему документу - Switch to Document %1 Перейти к документу %1 - Loading settings Загружаются настройки - Emergency cache is not writable. Резервная память недоступна для записи. - - Warning Предупреждение - FocusWriter was not shut down cleanly. Работа приложения была завершена неправильно. - Restore from the emergency cache? Восстановить открытые файлы из резервной памяти? - Some files could not be opened. Не удалось открыть некоторые файлы. - Some files were opened Read-Only. Некоторые файлы были открыты только для чтения. - '%1' is newer than the cached copy. '%1' новее резервной копии. - Overwrite newer file? Заменить новую версию резервной копией? - Save Changes? Сохранить изменения? - Save changes to the file '%1' before closing? Сохранить изменения в файле '%1' перед закрытием? - Your changes will be lost if you don't save them. Ваши изменения будут утеряны, если вы не сохраните их. - Unable to load typewriter sounds. Не удаётся загрузить звук пишущей машинки. - &File &Файл - &New &Новый - &Open... &Открыть... - Reloa&d Откр&ыть заново - &Save &Сохранить - Save &As... Сохранить &как... - &Rename... П&ереименовать... - Save A&ll Сохранить вс&е - Manage Sessions Управление сеансами - New Session Новый сеанс - &Print... &Печать... - Pa&ge Setup... - &Close З&акрыть - &Quit В&ыход - Ctrl+Q Ctrl+Q - &Edit &Правка - &Undo &Отменить - &Redo Пов&торить - Cu&t Вы&резать - &Copy &Копировать - &Paste Вс&тавить - Paste &Unformatted Вставить без &форматирования - Ctrl+Shift+V Ctrl+Shift+V - Select &All &Выбрать всё - Select &Scene Выбрать &сцену - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Ф&ормат - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold Полу&жирный - &Italic &Курсив - &Underline Под&чёркнутый - Stri&kethrough &Зачёркнутый - Ctrl+K Ctrl+K - Sup&erscript &Надстрочный индекс - Ctrl+^ Ctrl+^ - &Subscript П&одстрочный индекс - Ctrl+_ Ctrl+_ - Align &Left По &левому краю - Ctrl+{ Ctrl+{ - Align &Center По &центру - Ctrl+| Ctrl+| - Align &Right По &правому краю - Ctrl+} Ctrl+} - Align &Justify По &ширине - Ctrl+J Ctrl+J - &Decrease Indent У&меньшить отступ - Ctrl+< Ctrl+< - I&ncrease Indent У&величить отступ - Ctrl+> Ctrl+> - Le&ft to Right Block Фрагмент слева напр&аво - Ri&ght to Left Block Фрагмент справа нал&ево - &Tools &Инструменты - &Find... &Найти... - Find &Next Найти следующ&ий - Find Pre&vious Найти пред&ыдущий - &Replace... За&менить... - Ctrl+R Ctrl+R - Smart &Quotes Заменить кавы&чки - Update &Document Во всём &документе - Update Document Smart Quotes - Update &Selection В &выделенном - Update Selection Smart Quotes - &Spelling... Ор&фография... - F7 F7 - Set &Language... Установить &язык... - &Timers... &Таймеры... - S&ymbols... Сим&волы... - &Daily Progress &Ежедневный прогресс - &Settings &Параметры - Show &Toolbar Показать панель &инструментов - Show &Menu Icons Показать значки мен&ю - F&ocused Text Подсве&тка текста - &Fullscreen Полно&экранный режим - F11 F11 - Esc Esc - M&inimize Сверн&уть - Ctrl+M Ctrl+M - &Themes... &Темы... - &Preferences... Пара&метры... - Focus Off Отключена - Focus One Line На одной строке - Focus Three Lines На трёх строках - &Paragraph &На абзаце - Focus Paragraph На абзаце - Ctrl+Shift+` - &Help Спр&авка - Application &Language... &Язык приложения... - Some files were unsupported and could not be opened. Формат некоторых файлов не поддерживается программой. Эти файлы не были открыты. - &Off &Выключено - One &Line Одна ст&рока - &Three Lines &Три строки - &About &О программе - About &Qt Информация о &Qt diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 3dc9ef9b..13bc0590 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Zavrieť (%1) - Collapse Zbaliť - Expand Rozbaliť @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Zrušiť upozornenie - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% z %Ln minút(y) @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% z %Ln slov @@ -53,7 +46,6 @@ - %Ln word(s) %Ln slov @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln minút(y) @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Denný pokrok - Longest streak Najdlhší pás - Current streak Aktuálny pás - N/A N/A - %n day(s) %n dní @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &mdash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% denného cieľa @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Nastaviť jazyk @@ -133,81 +114,62 @@ Document - (Untitled %1) (Bez názvu %1) - %1 (Read-Only) %1 (Iba na čítanie) - - - - Sorry Prepáčte - Unable to save '%1'. Nedá sa uložiť '%1'. - Save File As Uložiť súbor ako - - Unable to overwrite '%1'. Nedá sa prepísať '%1'. - Rename File Premenovať súbor - Unable to rename '%1'. Nedá sa premenovať '%1'. - Reload File? Opätovne načítať súbor? - Reload the file '%1' from disk? Opätovne načítať súbor %1 z disku? - All unsaved changes will be lost. Všetky neuložené zmeny budú stratené. - Reload Opätovne načítať - Untitled %1 Bez názvu %1 - Question Otázka - Saving as plain text will discard all formatting. Discard formatting? Uloženie ako obyčajný text odstráni formátovanie. Chcete zrušiť formátovanie? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Súbor bol zmenený - The file '%1' was changed by another program. Súbor %1 bol zmenený iným programom. - Do you want to reload the file? Chcete súbor opätovne načítať? - Reload Opätovne načítať - Ignore Ignorovať - File Deleted Súbor bol vymazaný - The file %1 was deleted by another program. Súbor %1 bol vymazaný iným programom. - Do you want to save or close the file? Chcete súbor uložiť alebo zavrieť? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Nie je možné otvoriť archív. @@ -266,67 +219,54 @@ FindDialog - Search for: Vyhľadať: - Replace with: Nahradiť: - Ignore case Ignorovať veľkosť začiatočných písmen - Whole words only Iba celé slová - Regular expressions Regulárne výrazy - Search up Hľadať smerom hore - Search down Hľadať smerom dole - &Find &Nájsť - &Replace Na&hradiť - Replace &All Nahradiť &všetko - Find Nájsť - Replace Nahradiť - Replace %n instance(s)? Nahradiť %n výskyt? @@ -335,19 +275,14 @@ - Question Otázka - - Sorry Prepáčte - - Phrase not found. Výraz nebol nájdený. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Obyčajný text - All Files Všetky súbory - All Supported Files Všetky podporované súbory @@ -393,17 +321,14 @@ Highlighter - Add Pridať - Check Spelling... Kontrola pravopisu... - (No suggestions found) (Žiadne návrhy neboli nájdené) @@ -411,12 +336,10 @@ ImageButton - Open Image Otvoriť obrázok - Images(%1) Obrázky(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Výber jazyka programu: - <System Language> <Predvolený jazyk systému> - Note Poznámka - Please restart this application for the change in language to take effect. K zmene jazyka dôjde po reštarte programu. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Nie je možné otvoriť archív. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Nastavenia - General Všeobecné - Statistics Štatistika - Toolbar Panel nástrojov - Spell Checking Kontrola pravopisu - Select Dictionary Výber slovníka - - Sorry Prepáčte - Unable to open archive. Archív nie je možné otvoriť. - The archive does not contain a usable dictionary. Archív neobsahuje použiteľný slovník. - - - - Question Otázka - Shortcuts Skratky - One or more shortcuts conflict. Do you wish to proceed? Bol zistený konflikt jednej alebo viacerých skratiek. Chcete pokračovať? - The dictionary "%1" already exists. Do you want to replace it? Slovník "%1" už existuje. Chcete ho nahradiť? - Daily Goal Denný cieľ - None Žiadny - Minutes: Minút: - - Words: Slov: - Editing Úpravy - Always vertically center Vždy zarovnať vertikálne na stred - Block insertion cursor Kurzor vkladania bloku - Smooth fonts Jemné písma - Typewriter sounds Zvuk písacieho stroja - Smart quotes: Inteligentné úvodzovky: - Double Dvojité - Single Jednoduché - Scenes Scény - Divider: Oddeľovač: - Saving Ukladanie - Automatically save changes Automaticky ukladať zmeny - Remember cursor position Zapamätať si pozíciu kurzora - Word count Počet slov - Page count Počet strán - Paragraph count Počet odstavcov - Character count Počet znakov - Characters: Znakov: - Paragraphs: Odstavcov: - Word Count Algorithm Algoritmus počítania slov - Reset daily progress for today to zero? Vynulovať dnešný denný pokrok? - Remove current dictionary? Odstrániť aktuálny slovník? - Write byte order mark in plain text files Napísať znak pre označenie poradia bajtov v obyčajných textových súboroch - Default format: Nastavený formát: - User Interface Používateľské rozhranie - Always show scrollbar Vždy ukazovať rolovací pruh - Always show top bar Vždy ukazovať hornú lištu - Always show bottom bar Vždy ukazovať spodnú lištu - Reset Today Vynulovať dnešok - History História - Remember history Zapamätať históriu - Show streaks Ukázať pásy - Minimum progress for streaks: Najmenší progres pre pásy: - Detect word boundaries Rozoznávanie hraníc slov - Divide character count by six Deliť počet znakov šiestimi - Count each letter as a word Počítať každé písmeno ako slovo - Page Count Algorithm Algoritmus počítania strán - Style Štýl - Icons Only Iba ikony - Text Only Iba text - Text Alongside Icons Text vedľa ikon - Text Under Icons Text pod ikonami - Text Position: Pozícia textu: - Actions Činnosti - Move Up Posunúť nahor - Move Down Posunúť nadol - Add Separator Pridať oddeľovač - Command Príkaz - Shortcut Skratka - Action Činnosť - Check spelling as you type Kontrola pravopisu počas písania - Ignore words in UPPERCASE Ignorovať slová písané VEĽKÝMI PÍSMENAMI - Ignore words with numbers Ignorovať slová obsahujúce čísla - Language Jazyk - - Add Pridať - - Remove Odstrániť - Personal Dictionary Osobný slovník @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Nepodporovaný súbor RTF. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Neočakávaný koniec súboru. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Posunúť scény nahor - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Prepnúť zoznam scén - Shift+F4 Shift+F4 - Show scene list (%1) Zobraziť zoznam scén (%1) - Hide scene list (%1) Skryť zoznam scén (%1) - Filter Filter - Move Scenes Down Posunúť scény nadol - Resize scene list Zmeniť veľkosť zoznamu scén @@ -905,12 +729,6 @@ Session - - - - - - Default Prednastavený @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Spravovať relácie - S&essions R&elácie - New Nová - Duplicate Kópia - Rename Premenovať - Delete Zmazať - Switch To Prepnúť na - New Session Nová relácia - Duplicate Session Duplikovať reláciu - Rename Session Premenovať reláciu - Question Otázka - Delete selected session? Vymazať vybranú reláciu? - Session name: Názov relácie: - Sorry Prepáčte - The requested session name is already in use. Požadovaný názov relácie sa už používa. - &New... &Nová... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Spravovať... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Vyčistiť - Reset to Default Obnoviť prednastavené - - Shortcut: Skratky: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Nahrádzanie úvodzoviek... - Please Wait Čakajte prosím @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Kontrola pravopisu - &Add &Pridať - &Ignore &Ignorovať - I&gnore All I&gnorovať všetko - &Change &Zmeniť - C&hange All Z&meniť všetko - Not in dictionary: Nenachádza sa v slovníku: - Change to: Zmeniť na: - Checking spelling... Kontrola pravopisu... - Cancel Zrušiť - Please wait Čakajte prosím - Continue checking at beginning of file? Pokračovať v kontrole od začiatku súboru? - Spell check complete. Kontrola pravopisu ukončená. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Symboly - Recently used symbols Posledné použité symboly - All symbols Všetky symboly - Details Podrobnosti - Name: Názov: - Insert Vložiť @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Bloky - Scripts Skripty @@ -1162,7 +934,6 @@ Theme - Untitled %1 Bez názvu %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Názov: - No Image Žiadny obrázok - Tiled Dlaždice - - Centered Na stred - - Stretched Roztiahnuť - Scaled Zmenšiť - Zoomed Priblížiť - Opacity: Nepriehľadnosť: - Position: Pozícia: - Width: Šírka: - Round Text Background Corners Oblé rohy pozadia textu - - - Radius: Polomer: - Blur Text Background Rozmazané pozadie textu - Text Background Drop Shadow Tieň pozadia textu - Vertical Offset: Zvislý posun: - Margins Okraje - Window: Okno: - Page: Strana: - Indent first line Odsadiť prvý riadok - Above: Nad: - Below: Pod: - Remove Odstrániť - Edit Theme Upraviť tému - Window Background Pozadie okna - - Type: Typ: - - - - Color: Farba: - Image: Obrázok: - - - - - - - - - - pixels pixelov - Left Zarovnať vľavo - Text Background Pozadie textu - Right Zarovnať vpravo - Text Text - Font: Písmo: - Misspelled: Chybne napísané: - Line Spacing Riadkovanie - Single Jednoduché - 1.5 Lines 1,5 riadka - Double Dvojité - Proportional Proporcionálne - Height: Výška: - Paragraph Spacing Odstupy medzi odstavcami - Tab Width: Šírka zarážky: - New Theme Nová téma @@ -1405,115 +1116,90 @@ ThemeManager - Themes Témy - Default Prednastavený - Bitter Skies - Enchantment - Gentle Blues Nežné blues - Old School Stará škola - Space Dreams Vesmírne sny - Spy Games - Tranquility - Writing Desk Písací stôl - - New Nový - - Duplicate Kópia - Custom Vlastný - Edit Upraviť - Delete Zmazať - Import Importovať - Export Exportovať - Question Otázka - Delete theme '%1'? Zmazať tému '%1'? - - Themes (%1) Témy (%1) - Import Theme Importovať tému - Export Theme Exportovať tému @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Otázka - Delete timer? Zmazať časovač? - <b>Words:</b> %L1 <b>Slová:</b> %L1 - <b>Pages:</b> %L1 <b>Strany:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Odstavce:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Znaky:</b> %L1 / %L2 - Set Delay Nastaviť oneskorenie - Set Time Nastaviť čas - Delay: Oneskorenie: - Time: Čas: - HH:mm:ss HH:mm:ss - Alarm Upozornenie: - Type: Typ: - Memo: Správa: - Edit Upraviť - Delete Zmazať @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Nebežia žiadne časovače @@ -1622,37 +1289,30 @@ TimerManager - Timers Časovače - New Nový - Recent Posledný použitý - Question Otázka - Cancel editing timers? Zrušiť úpravu časovačov? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Načítavanie tém - Loading sounds Načítavanie zvukov - - Untitled Bez názvu - Open File Otvoriť súbor - About FocusWriter O programe FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Jednoduchý celoobrazovkový textový editor. - Copyright &copy; 2008-%1 Graeme Gott Práva vyhradené &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Vydané pod licenciou <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Používa ikony zo sady ikon <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Použité pod licenciou <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Znaky: %L1 / %L2 - - Pages: %L1 Strany: %L1 - - Paragraphs: %L1 Odstavce: %L1 - - Words: %L1 Slová: %L1 - - Opening %1 Otváranie %1 - (Untitled %1) (Bez názvu %1) - List all documents Vypísať všetky dokumenty - Switch to Next Document Prepnúť na ďalší dokument - Switch to Previous Document Prepnúť na predchádzajúci dokument - Switch to First Document Prepnúť na prvý dokument - Switch to Last Document Prepnúť na posledný dokument - Switch to Document %1 Prepnúť na dokument %1 - Loading settings Načítavanie nastavení - Emergency cache is not writable. Nie je možné zapisovať do pohotovostnej vyrovnávacej pamäti. - - Warning Upozornenie - FocusWriter was not shut down cleanly. Program FocusWriter nebol riadne ukončený. - Restore from the emergency cache? Obnoviť z vyrovnávacej pamäti. - Some files could not be opened. Niektoré súbory nemohli byť otvorené. - Some files were opened Read-Only. Niektoré súbory boli otvorené iba na čítanie. - '%1' is newer than the cached copy. Súbor '%1' je novší ako kópia vo vyrovnávacej pamäti. - Overwrite newer file? Prepísať novší súbor? - Save Changes? Uložiť zmeny? - Save changes to the file '%1' before closing? Uložiť zmeny do súboru '%1' pred zatvorením? - Your changes will be lost if you don't save them. Vaše zmeny budú stratené ak ich neuložíte. - Unable to load typewriter sounds. Nie je možné načítať zvuky písacieho stroja. - &File &Súbor - &New &Nový - &Open... &Otvoriť... - Reloa&d Opätovne &načítať - &Save &Uložiť - Save &As... Uložiť &ako... - &Rename... &Premenovať... - Save A&ll U&ložiť všetko - Manage Sessions Spravovať relácie - New Session Nová relácia - &Print... &Tlač... - Pa&ge Setup... Nastavenie &strany - &Close &Zavrieť - &Quit S&končiť - Ctrl+Q Ctrl+Q - &Edit Upra&viť - &Undo &Späť - &Redo &Opakovať - Cu&t Vys&trihnúť - &Copy &Kopírovať - &Paste &Prilepiť - Paste &Unformatted Prilepiť &bez formátovania - Ctrl+Shift+V Ctrl+Shift+V - Select &All Vybrať &všetko - Select &Scene Vybrať &scénu - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Fo&rmátovanie - &Heading &Nadpis - Heading &1 Nadpis &1 - Heading &2 Nadpis &2 - Heading &3 Nadpis &3 - Heading &4 Nadpis &4 - Heading &5 Nadpis &5 - Heading &6 Nadpis &6 - &Normal Normálny - &Bold Tu&čné - &Italic K&urzivá - &Underline Po&dčiarknuté - Stri&kethrough Pr&ečiarknuté - Ctrl+K Ctrl+K - Sup&erscript Horný inde&x - Ctrl+^ Ctrl+^ - &Subscript Dolný i&ndex - Ctrl+_ Ctrl+_ - Align &Left Zarovnať &vľavo - Ctrl+{ Ctrl+{ - Align &Center Zarovnať na st&red - Ctrl+| Ctrl+| - Align &Right Zarovnať v&pravo - Ctrl+} Ctrl+} - Align &Justify Zarovnať do bl&oku - Ctrl+J Ctrl+J - &Decrease Indent Z&menšiť odsadenie - Ctrl+< Ctrl+< - I&ncrease Indent Z&väčšiť odsadenie - Ctrl+> Ctrl+> - Le&ft to Right Block Bl&ok zľava doprava - Ri&ght to Left Block B&lok sprava doľava - &Tools &Nástroje - &Find... Ná&jsť... - Find &Next Nájsť &ďalší - Find Pre&vious Nájsť &predchádzajúci - &Replace... Na&hradiť... - Ctrl+R Ctrl+R - Smart &Quotes Inteligentné ú&vodzovky - Update &Document Aktualizovať &dokument - Update Document Smart Quotes - Update &Selection Aktualizovať &výber - Update Selection Smart Quotes - &Spelling... &Pravopis... - F7 F7 - Set &Language... Nastaviť &jazyk... - &Timers... Čas&ovače... - S&ymbols... S&ymboly... - &Daily Progress &Denný pokrok - &Settings &Nastavenia - Show &Toolbar Zobraziť p&anel nástrojov - Show &Menu Icons Zobraziť &ikony ponuky - F&ocused Text Za&meraný text - &Fullscreen &Celá obrazovka - F11 F11 - Esc Esc - M&inimize M&inimalizovať - Ctrl+M Ctrl+M - &Themes... &Témy... - &Preferences... &Predvoľby... - Focus Off Vypnúť zameranie - Focus One Line Zamerať jeden riadok - Focus Three Lines Zamerať tri riadky - &Paragraph O&dstavec - Focus Paragraph Zamerať odstavec - Ctrl+Shift+` Ctrl+Shift+` - &Help &Nápoveda - Application &Language... Jazyk p&rogramu... - Some files were unsupported and could not be opened. Niektoré súbory neboli podporované a nemohli byť otvorené. - &Off &Vypnuté - One &Line Jeden &riadok - &Three Lines &Tri riadky - &About &O programe - About &Qt O &Qt diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index 515dd164..6c646649 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Затвори (%1) - Collapse Колапс - Expand Прошири @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Одбаци упозорење - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% од %Ln минута @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% од %Ln речи @@ -53,7 +46,6 @@ - %Ln word(s) %Ln реч @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln минут @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Дневни напредак - Longest streak Најдужа серија - Current streak Тренутна серија - N/A N/A - %n day(s) %n дан @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% од дневног циља @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Подеси језик @@ -133,81 +114,62 @@ Document - (Untitled %1) (Без наслова %1) - %1 (Read-Only) %1 (Само за читање) - - - - Sorry Извините - Unable to save '%1'. Онемогућено чување '%1'. - Save File As Сачувај фајл као - - Unable to overwrite '%1'. Онемогућено да пребрише '%1'. - Rename File Преименуј фајл - Unable to rename '%1'. Онемогућено преименовање '%1'. - Reload File? Поново учитај фајл? - Reload the file '%1' from disk? Поново учитај фајл '%1' са диска? - All unsaved changes will be lost. Све несачуване промене ће бити изгубљене. - Reload Поново учитај - Untitled %1 Без наслова %1 - Question Питање - Saving as plain text will discard all formatting. Discard formatting? Чување као обичан текст ће одбацити сва обликовања. Одбаци обликовање? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Промењен фајл - The file '%1' was changed by another program. Фајл '%1' је промењен од стране другог програма. - Do you want to reload the file? Да ли желите да поново учитате фајл? - Reload Поново учитај - Ignore Занемари - File Deleted Обрисан фајл - The file %1 was deleted by another program. Фајл %1 је обрисао други програм. - Do you want to save or close the file? Да ли желите да сачувате или затворите фајл? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Онемогућено отварање архиве. @@ -266,67 +219,54 @@ FindDialog - Search for: Претрага за: - Replace with: Замени са: - Ignore case Игнориши случај - Whole words only Само целе речи - Regular expressions Регуларни изрази - Search up Претражи горе - Search down Претражи доле - &Find &Пронађи - &Replace &Замени - Replace &All Замени &све - Find Пронађи - Replace Замени - Replace %n instance(s)? Замените %n пример? @@ -335,19 +275,14 @@ - Question Питање - - Sorry Извините - - Phrase not found. Фраза није пронађена. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Формат обогаћеног текста - Plain Text Чисти текст - All Files Сви фајлови - All Supported Files Сви подржани фајлови @@ -393,17 +321,14 @@ Highlighter - Add Додај - Check Spelling... Провери правопис... - (No suggestions found) (Без пронађене сугестије) @@ -411,12 +336,10 @@ ImageButton - Open Image Отвори слику - Images(%1) Слике(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Одабери језик програма: - <System Language> <Системски језик> - Note Напомена - Please restart this application for the change in language to take effect. Молимо рестартујте програм да би се видела промена језика. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Онемогућено отварање архиве. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Подешавања - General Опште - Statistics Статистика - Toolbar Трака алата - Spell Checking Провера правописа - Select Dictionary Одабери речник - - Sorry Извините - Unable to open archive. Онемогућено отварање архиве. - The archive does not contain a usable dictionary. Архива не садржи уобичајен речник. - - - - Question Питање - Shortcuts Пречице - One or more shortcuts conflict. Do you wish to proceed? Један или више кофликт пречица. Да ли желите да наставите? - The dictionary "%1" already exists. Do you want to replace it? Речник "%1" већ постоји. Да ли желите да га замените? - Daily Goal Дневни циљ - None Ниједан - Minutes: Минути: - - Words: Речи: - Editing Измене - Always vertically center Увек вертикални центар - Block insertion cursor Блокирај уметање курсора - Smooth fonts Умекшај фонтове - Typewriter sounds Звук писаће машине - Smart quotes: Паметни цитати: - Double Дупли - Single Једини - Scenes Сцене - Divider: Разделник: - Saving Чување - Automatically save changes Аутоматски чувај промене - Remember cursor position Запамти позицију курсора - Word count Број речи - Page count Број страна - Paragraph count Број параграфа - Character count Број карактера - Characters: Карактери: - Paragraphs: Параграфи: - Word Count Algorithm Број алторитама - Reset daily progress for today to zero? Врати дневни напредак за данас на нулу? - Remove current dictionary? - Write byte order mark in plain text files Напиши бајт редослед ознака у текстуалном фајлу - Default format: Подразумевани формат: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Врати данас на почетно - History Историја - Remember history Запамти историју - Show streaks Покажи серије - Minimum progress for streaks: Минимум напретка за серије: - Detect word boundaries Детектовање границе речи - Divide character count by six Подели број карактера са шест - Count each letter as a word Рачунај свако слово као реч - Page Count Algorithm Број страна алгоритама - Style Изглед - Icons Only Само иконе - Text Only Само текст - Text Alongside Icons Текст поред икона - Text Under Icons Текст испод икона - Text Position: Позиција текста: - Actions Акције - Move Up Помери горе - Move Down Помери доле - Add Separator Додај раздвајач - Command Команда - Shortcut Пречица - Action Акција - Check spelling as you type Проверите правопис док куцате - Ignore words in UPPERCASE Занемари речи са ВЕЛИКИМ СЛОВИМА - Ignore words with numbers Занемари речи са бројевима - Language Језик - - Add Додај - - Remove Уклони - Personal Dictionary Лични речник @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Није подржан RTF фајл. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Неочекивано стигао крај фајла. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Помери сцене горе - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Укључи/искључи листу сцена - Shift+F4 Shift+F4 - Show scene list (%1) Покажи листу сцена (%1) - Hide scene list (%1) Сакриј листу сцена (%1) - Filter Филтер - Move Scenes Down Помери сцене доле - Resize scene list Промени величину листе сцена @@ -905,12 +729,6 @@ Session - - - - - - Default Подразумевано @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Управљај сесијама - S&essions С&есије - New Нови - Duplicate Дупликат - Rename Преименуј - Delete Избриши - Switch To Пребаци на - New Session Нова сесија - Duplicate Session Дупликат сесија - Rename Session Преименуј сесију - Question Питање - Delete selected session? Избриши одабрану сесију? - Session name: Име сесије: - Sorry Извините - The requested session name is already in use. Захтевано име сесије је већ у употреби. - &New... &Нова... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Управљај... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Очисти - Reset to Default Ресетуј на подразумевано - - Shortcut: Пречица: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Замена наводника... - Please Wait Молимо сачекајте @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Провери правопис - &Add &Додај - &Ignore &Занемари - I&gnore All З&анемари све - &Change &Промени - C&hange All П&ромени све - Not in dictionary: Није у речнику: - Change to: Промени на: - Checking spelling... Провери правопис... - Cancel Откажи - Please wait Молимо сачекајте - Continue checking at beginning of file? Наставите проверу на почетку фајла? - Spell check complete. Провера правописа је завршена. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Симболи - Recently used symbols Недавно коришћени симболи - All symbols Сви симболи - Details Детаљи - Name: Име: - Insert Инсерт @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Блокови - Scripts Скрипте @@ -1162,7 +934,6 @@ Theme - Untitled %1 Без наслова %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Име: - No Image Без слике - Tiled Поплочано - - Centered Центрирано - - Stretched Раширено - Scaled Скалирано - Zoomed Зумирано - Opacity: Непрозирност: - Position: Позиција: - Width: Ширина: - Round Text Background Corners Заокружи углове позадине текста - - - Radius: Радијус: - Blur Text Background Замути позадину текста - Text Background Drop Shadow Осенчи позадину текста - Vertical Offset: Вертикално: - Margins Ивице: - Window: Прозор: - Page: Страна: - Indent first line Увлачење прве линије - Above: Изнад: - Below: Испод: - Remove Уклони - Edit Theme Измени тему - Window Background Позадина прозора - - Type: Врста: - - - - Color: Боја: - Image: Слика: - - - - - - - - - - pixels пиксела - Left Лево - Text Background Позадина текста - Right Десно - Text Текст - Font: Фонт: - Misspelled: Погрешно написано: - Line Spacing Проред - Single Један - 1.5 Lines 1.5 линија - Double Дупли - Proportional Пропорционалан - Height: Висина: - Paragraph Spacing Пасус - Tab Width: Ширина картице: - New Theme Нова тема @@ -1405,115 +1116,90 @@ ThemeManager - Themes Теме - Default Подразумевано - Bitter Skies - Enchantment - Gentle Blues Блуз - Old School Стара школа - Space Dreams Свемирски снови - Spy Games - Tranquility - Writing Desk Писаћи сто - - New Нови - - Duplicate Дупликат - Custom Прилагођено - Edit Измени - Delete Избриши - Import Увези - Export Извези - Question Питање - Delete theme '%1'? Подразумевана тема '%1'? - - Themes (%1) Теме (%1) - Import Theme Увези тему - Export Theme Извези тему @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Питање - Delete timer? Обриши тајмер? - <b>Words:</b> %L1 <b>Речи:</b> %L1 - <b>Pages:</b> %L1 <b>Стране:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Параграфи:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Карактери:</b> %L1 / %L2 - Set Delay Подеси кашњење - Set Time Подеси време - Delay: Кашњење: - Time: Време: - HH:mm:ss HH:mm:ss - Alarm Аларм - Type: Врста: - Memo: Меморандум: - Edit Измени - Delete Избриши @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Без покренутог тајмера @@ -1622,37 +1289,30 @@ TimerManager - Timers Тајмери - New Нови - Recent Скорашње - Question Питање - Cancel editing timers? Откажи измене тајмера? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Учитавање тема - Loading sounds Учитавање звука - - Untitled Без наслова - Open File Отвори фајл - About FocusWriter О програму FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Једноставан обрађивач текста на пуном екрану - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Реализовано под <a href=%1>GPL 3</a> лиценцом - Uses icons from the <a href=%1>Oxygen</a> icon theme Користи иконе из <a href=%1>Oxygen</a> теме икона - Used under the <a href=%1>LGPL 3</a> license Коришћен под <a href=%1>LGPL 3</a> лиценцом - - Characters: %L1 / %L2 Карактери: %L1 / %L2 - - Pages: %L1 Стране: %L1 - - Paragraphs: %L1 Параграфи: %L1 - - Words: %L1 Речи: %L1 - - Opening %1 Oтварање %1 - (Untitled %1) (Без наслова %1) - List all documents Листа свих докумената - Switch to Next Document Пређи на следећи документ - Switch to Previous Document Пређи на претходни документ - Switch to First Document Пређи на први документ - Switch to Last Document Пређи на последњи документ - Switch to Document %1 Пређи на документ %1 - Loading settings Учитавање подешавања - Emergency cache is not writable. Ургентни кеш није уписив. - - Warning Упозорење - FocusWriter was not shut down cleanly. FocusWriter није затворен чисто. - Restore from the emergency cache? Враћање из ургентног кеша? - Some files could not be opened. Неки фајлови нису могли бити отворени. - Some files were opened Read-Only. Неки фајлови су отворени само за читање. - '%1' is newer than the cached copy. '%1' је новије од кеширане копије. - Overwrite newer file? Пребиши новији фајл? - Save Changes? Сачувај промене? - Save changes to the file '%1' before closing? Сачувајте промене фајла '%1' пре затварања? - Your changes will be lost if you don't save them. Ваше промене ће бити изгубљене, ако их не сачувате. - Unable to load typewriter sounds. Онемогућено учитавање звука писаће машине. - &File &Фајл - &New &Нови - &Open... &Отвори... - Reloa&d Поно&во учитај - &Save &Сачувај - Save &As... Сачувај &као... - &Rename... &Преименуј... - Save A&ll Сачувај с&ве - Manage Sessions Управљај сесијама - New Session Нова сесија - &Print... &Штампај... - Pa&ge Setup... - &Close &Затвори - &Quit &Напусти - Ctrl+Q Ctrl+Q - &Edit &Измени - &Undo &Опозови - &Redo &Поново уради - Cu&t Исе&ци - &Copy &Копирај - &Paste &Налепи - Paste &Unformatted Налепи &неформатирано - Ctrl+Shift+V Ctrl+Shift+V - Select &All Одабери &све - Select &Scene Одабери &сцену - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Фо&рмат - &Heading &Наслов - Heading &1 Наслов &1 - Heading &2 Наслов &2 - Heading &3 Наслов &3 - Heading &4 Наслов &4 - Heading &5 Наслов &5 - Heading &6 Наслов &6 - &Normal &Стандардно - &Bold &Подебљано - &Italic &Искошено - &Underline &Подвучено - Stri&kethrough Пре&цртано - Ctrl+K Ctrl+K - Sup&erscript Екс&понент - Ctrl+^ Ctrl+^ - &Subscript &Индекс - Ctrl+_ Ctrl+_ - Align &Left Поравнај &лево - Ctrl+{ Ctrl+{ - Align &Center Поравнај &на центар - Ctrl+| Ctrl+| - Align &Right Поравнај &десно - Ctrl+} Ctrl+} - Align &Justify Поравнај &обострано - Ctrl+J Ctrl+J - &Decrease Indent &Смањи увлачење - Ctrl+< Ctrl+< - I&ncrease Indent П&овећај увлачење - Ctrl+> Ctrl+> - Le&ft to Right Block Ле&во на десно блок - Ri&ght to Left Block Де&сно на лево блок - &Tools &Алати - &Find... &Пронађи... - Find &Next Пронађи &следеће - Find Pre&vious Пронађи пре&тходно - &Replace... &Замени... - Ctrl+R Ctrl+R - Smart &Quotes Паметни &цитати - Update &Document Ажурирај &документ - Update Document Smart Quotes - Update &Selection Ажурирај &одабир - Update Selection Smart Quotes - &Spelling... &Правопис... - F7 F7 - Set &Language... Подеси &језик... - &Timers... &Tајмери... - S&ymbols... С&имболи... - &Daily Progress &Дневни напредак - &Settings &Подешавање - Show &Toolbar Покажи &траку алата - Show &Menu Icons Покажи &иконе менија - F&ocused Text Ф&окусирани текст - &Fullscreen &Пун екран - F11 F11 - Esc Esc - M&inimize M&инимизуј - Ctrl+M Ctrl+M - &Themes... &Tеме... - &Preferences... &Подешавања... - Focus Off Фокусирање искључено - Focus One Line Фокусирање једне линије - Focus Three Lines Фокусирање три линије - &Paragraph &Параграф - Focus Paragraph Фокусирај параграф - Ctrl+Shift+` - &Help &Помоћ - Application &Language... Језик &програма... - Some files were unsupported and could not be opened. Неки фајлови нису подржани и не могу бити отворени. - &Off &Искључено - One &Line Једна &линија - &Three Lines &Три линије - &About &О програму - About &Qt О &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index d941671c..cdcea7d5 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Stäng (%1) - Collapse Fäll in - Expand Fäll ut @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Stäng varning - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% av %Ln minut @@ -43,7 +37,6 @@ - %1% of %Ln word(s) %1% av %Ln ord @@ -51,7 +44,6 @@ - %Ln word(s) %Ln ord @@ -59,7 +51,6 @@ - %Ln minute(s) %Ln minut @@ -67,7 +58,6 @@ - 0% 0% @@ -75,27 +65,22 @@ DailyProgressDialog - Daily Progress Dagliga framsteg - Longest streak Längsta svit - Current streak Pågående svit - N/A N/A - %n day(s) %n dag @@ -103,7 +88,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -111,8 +95,6 @@ DailyProgressLabel - - %1% of daily goal %1% av dagligt mål @@ -120,7 +102,6 @@ DictionaryDialog - Set Language Ställ in språk @@ -128,81 +109,62 @@ Document - (Untitled %1) (Namnlös %1) - %1 (Read-Only) %1 (Skrivskyddad) - - - - Sorry Tyvärr - Unable to save '%1'. Kunde inte spara "%1". - Save File As Spara fil som - - Unable to overwrite '%1'. Kunde inte skriva över "%1". - Rename File Byt namn på fil - Unable to rename '%1'. Kunde inte byta namn på filen "%1". - Reload File? Läs om fil? - Reload the file '%1' from disk? Läs om filen "%1" från disk? - All unsaved changes will be lost. Alla osparade ändringar kommer att gå förlorade. - Reload Läs om - Untitled %1 Namnlös %1 - Question Fråga - Saving as plain text will discard all formatting. Discard formatting? Att spara som vanlig text tar bort all formatering. Ta bort formatering? @@ -210,42 +172,34 @@ DocumentWatcher - File Changed Filen ändrad - The file '%1' was changed by another program. Filen "%1" har ändrats av ett annat program. - Do you want to reload the file? Vill du läsa om filen? - Reload Läs om - Ignore Ignorera - File Deleted Fil raderad - The file %1 was deleted by another program. Filen %1 togs bort av ett annat program. - Do you want to save or close the file? Vill du spara eller stänga filen? @@ -253,7 +207,6 @@ DocxReader - Unable to open archive. Kunde inte öppna arkiv. @@ -261,67 +214,54 @@ FindDialog - Search for: Sök efter: - Replace with: Ersätt med: - Ignore case Ignorera skiftläge - Whole words only Endast hela ord - Regular expressions Reguljära uttryck - Search up Sök uppåt - Search down Sök nedåt - &Find &Sök - &Replace &Ersätt - Replace &All Ersätt &alla - Find Sök - Replace Ersätt - Replace %n instance(s)? Ersätt %n förekomst? @@ -329,19 +269,14 @@ - Question Fråga - - Sorry Tyvärr - - Phrase not found. Frasen hittades inte. @@ -349,37 +284,30 @@ FormatManager - OpenDocument Text OpenDocument text - OpenDocument Flat XML OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text Format - Plain Text Vanlig text - All Files Alla filer - All Supported Files Alla filer som stöds @@ -387,17 +315,14 @@ Highlighter - Add Lägg till - Check Spelling... Kontrollera stavning... - (No suggestions found) (Inga förslag hittades) @@ -405,12 +330,10 @@ ImageButton - Open Image Öppna bild - Images(%1) Bilder(%1) @@ -418,22 +341,18 @@ LocaleDialog - Select application language: Välj programspråk: - <System Language> <Systemspråk> - Note Observera - Please restart this application for the change in language to take effect. Starta om programmet för att språkändringen ska aktiveras. @@ -441,7 +360,6 @@ OdtReader - Unable to open archive. Kunde inte öppna arkiv @@ -449,379 +367,298 @@ PreferencesDialog - Preferences Inställningar - General Allmänt - Statistics Statistik - Toolbar Verktygsrad - Spell Checking Stavningskontroll - Select Dictionary Välj ordbok - - Sorry Tyvärr - Unable to open archive. Kunde inte öppna arkivet. - The archive does not contain a usable dictionary. Arkivet innehåller ingen användbar ordbok. - - - - Question Fråga - Shortcuts Genvägar - One or more shortcuts conflict. Do you wish to proceed? Genvägar i konflikt. Vill du fortsätta? - The dictionary "%1" already exists. Do you want to replace it? Ordboken "%1" finns redan. Vill du ersätta den? - Daily Goal Dagligt mål - None Inget - Minutes: Minuter: - - Words: Ord: - Editing Redigering - Always vertically center Centrera alltid vertikalt - Block insertion cursor Blockmarkör för infogning - Smooth fonts Mjuka typsnitt - Typewriter sounds Skrivmaskinsljud - Smart quotes: Smarta citationstecken: - Double Dubbel - Single Enkel - Scenes Scener - Divider: Avdelare: - Saving Spara - Automatically save changes Spara automatiskt ändringar - Remember cursor position Kom ihåg markörposition - Word count Antal ord - Page count Antal sidor - Paragraph count Antal stycken - Character count Antal tecken - Characters: Tecken: - Paragraphs: Stycken: - Word Count Algorithm Algoritm för ordantal - Reset daily progress for today to zero? Återställ dagligt mål för idag till noll? - Remove current dictionary? Ta bort aktuell ordlista? - Write byte order mark in plain text files Skriv byteordningsmärke i vanliga textfiler - Default format: Standardformat: - User Interface Användargränssnitt - Always show scrollbar Visa alltid rullist - Always show top bar Visa alltid topplist - Always show bottom bar Visa alltid bottenlist - Reset Today Återställ idag - History Historik - Remember history Kom ihåg historik - Show streaks Visa sviter - Minimum progress for streaks: Minsta framsteg för sviter: - Detect word boundaries Identifiera ordgränser - Divide character count by six Dela teckenantal med sex - Count each letter as a word Räkna varje bokstav som ett ord - Page Count Algorithm Sidräkningsalgoritm - Style Stil - Icons Only Endast ikoner - Text Only Endast text - Text Alongside Icons Text bredvid ikoner - Text Under Icons Text under ikoner - Text Position: Textposition: - Actions Åtgärder - Move Up Flytta uppåt - Move Down Flytta nedåt - Add Separator Lägg till avgränsare - Command Kommando - Shortcut Genväg - Action Åtgärd - Check spelling as you type Kontrollera stavning när du skriver - Ignore words in UPPERCASE Ignorera ord med VERSALER - Ignore words with numbers Ignorera ord med siffror - Language Språk - - Add Lägg till - - Remove Ta bort - Personal Dictionary Personlig ordbok @@ -829,8 +666,6 @@ RtfReader - - Not a supported RTF file. Inte en stödd RTF-fil. @@ -838,7 +673,6 @@ RtfTokenizer - Unexpectedly reached end of file. Nådde oväntat filslut. @@ -846,52 +680,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Skift+Ned - Move Scenes Up Flytta upp scener - Ctrl+Shift+Up Ctrl+Skift+Upp - Toggle Scene List Växla scenlista - Shift+F4 Skift+F4 - Show scene list (%1) Visa scenlista (%1) - Hide scene list (%1) Dölj scenlista (%1) - Filter Filter - Move Scenes Down Flytta ner scener - Resize scene list Storleksändra scenlista @@ -899,12 +723,6 @@ Session - - - - - - Default Standard @@ -912,97 +730,78 @@ SessionManager - Manage Sessions Hantera sessioner - S&essions S&essioner - New Ny - Duplicate Duplicera - Rename Byt namn - Delete Ta bort - Switch To Växla till - New Session Ny session - Duplicate Session Duplicera session - Rename Session Byt namn på session - Question Fråga - Delete selected session? Ta bort markerad session? - Session name: Sessionsnamn: - Sorry Tyvärr - The requested session name is already in use. Det begärda sessionsnamnet används redan. - &New... &Ny... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Hantera... - Ctrl+Shift+M Ctrl+Shift+M @@ -1010,18 +809,14 @@ ShortcutEdit - Clear Töm - Reset to Default Återställ till förval - - Shortcut: Genväg: @@ -1029,12 +824,10 @@ SmartQuote - Replacing quotation marks... Ersätter citationstecken... - Please Wait Vänta @@ -1042,67 +835,54 @@ SpellChecker - Check Spelling Kontrollera stavning - &Add &Lägg till - &Ignore &Ignorera - I&gnore All I&gnorera alla - &Change &Ändra - C&hange All Ä&ndra alla - Not in dictionary: Finns inte i ordboken: - Change to: Ändra till: - Checking spelling... Kontrollerar stavning... - Cancel Avbryt - Please wait Vänta - Continue checking at beginning of file? Fortsätt kontrollera i början av filen? - Spell check complete. Stavningskontrollen är färdig. @@ -1110,32 +890,26 @@ SymbolsDialog - Symbols Symboler - Recently used symbols Nyligen använda symboler - All symbols Alla symboler - Details Detaljer - Name: Namn: - Insert Infoga @@ -1143,12 +917,10 @@ SymbolsModel - Blocks Tecken - Scripts Skriftspråk @@ -1156,7 +928,6 @@ Theme - Untitled %1 Namnlös %1 @@ -1164,234 +935,174 @@ ThemeDialog - Name: Namn: - No Image Ingen bild - Tiled Sida vid sida - - Centered Centrerad - - Stretched Utsträckt - Scaled Skalad - Zoomed Zoomad - Opacity: Opacitet: - Position: Position: - Width: Bredd: - Round Text Background Corners Runda textbakgrundshörn - - - Radius: Radie: - Blur Text Background Gör textbakgrund suddig - Text Background Drop Shadow Texbakgrundsskugga - Vertical Offset: Vertikal förskjutning: - Margins Marginaler - Window: Fönster: - Page: Sida: - Indent first line Gör indrag första raden - Above: Ovanför: - Below: Under: - Remove Ta bort - Edit Theme Redigera tema - Window Background Fönsterbakgrund - - Type: Typ: - - - - Color: Färg: - Image: Bild: - - - - - - - - - - pixels bildpunkter - Left Vänster - Text Background Textbakgrund - Right Höger - Text Text - Font: Typsnitt: - Misspelled: Felstavning: - Line Spacing Radavstånd - Single Enkelt - 1.5 Lines 1,5 radavstånd - Double Dubbelt - Proportional Proportionellt - Height: Höjd - Paragraph Spacing Styckeavstånd - Tab Width: Tabbredd: - New Theme Nytt tema @@ -1399,115 +1110,90 @@ ThemeManager - Themes Teman - Default Standard - Bitter Skies Bittra himlar - Enchantment Förtrollning - Gentle Blues Mjukblått - Old School Gamla skolan - Space Dreams Rymddrömmar - Spy Games Spionspel - Tranquility Fridfullhet - Writing Desk Skrivbord - - New Nytt - - Duplicate Duplicera - Custom Standard - Edit Redigera - Delete Ta bort - Import Importera - Export Exportera - Question Fråga - Delete theme '%1'? Ta bort tema "%1"? - - Themes (%1) Teman (%1) - Import Theme Importera tema - Export Theme Exportera tema @@ -1515,87 +1201,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Fråga - Delete timer? Ta bort tidtagare? - <b>Words:</b> %L1 <b>Ord:</b> %L1 - <b>Pages:</b> %L1 <b>Sidor:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Stycken:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Tecken:</b> %L1 / %L2 - Set Delay Ställ in fördröjning - Set Time Ställ in tid - Delay: Fördröjning: - Time: Tid: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Typ: - Memo: Memo: - Edit Redigera - Delete Ta bort @@ -1603,12 +1272,10 @@ TimerDisplay - HH:mm:ss HH: mm: ss - No timers running Inga tidtagare är igång @@ -1616,37 +1283,30 @@ TimerManager - Timers Tidtagare - New Ny - Recent Tidigare - Question Fråga - Cancel editing timers? Avbryt redigering av tidtagare? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1654,690 +1314,546 @@ Window - Loading themes Läser in teman - Loading sounds Läser in ljud - - Untitled Namnlös - Open File Öppna fil - About FocusWriter Om FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor En enkel ordbehandlare med helskärmsläge - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Släppt under licensen <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Använder ikoner från ikontemat <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Använda under licensen <a href=%1>GPL 3</a> - - Characters: %L1 / %L2 Tecken: %L1 / %L2 - - Pages: %L1 Sidor: %L1 - - Paragraphs: %L1 Stycken: %L1 - - Words: %L1 Ord: %L1 - - Opening %1 Öppnar %1 - (Untitled %1) (Namnlös %1) - List all documents Lista alla dokument - Switch to Next Document Växla till nästa dokument - Switch to Previous Document Växla till föregående dokument - Switch to First Document Växla till första dokumentet - Switch to Last Document Växla till sista dokumentet - Switch to Document %1 Växla till dokument %1 - Loading settings Läser in inställningar - Emergency cache is not writable. Nödcachen är inte skrivbar. - - Warning Varning - FocusWriter was not shut down cleanly. FocusWriter stängdes inte av korrekt. - Restore from the emergency cache? Återställ från nödcachen? - Some files could not be opened. Några filer kunde inte öppnas. - Some files were opened Read-Only. Några filer öppnades som skrivskyddade. - '%1' is newer than the cached copy. "%1" är nyare än den mellanlagrade kopian. - Overwrite newer file? Skriv över nyare fil? - Save Changes? Spara ändringar? - Save changes to the file '%1' before closing? Spara ändringar till filen "%1" innan stängning? - Your changes will be lost if you don't save them. Dina ändringar kommer att förloras om du inte sparar dem. - Unable to load typewriter sounds. Kunde inte läsa in skrivmaskinsljud. - &File &Arkiv - &New &Nytt - &Open... &Öppna... - Reloa&d Läs in &igen - &Save &Spara - Save &As... Spara so&m... - &Rename... &Byt namn... - Save A&ll Spara a&lla - Manage Sessions Hantera sessioner - New Session Ny session - &Print... Skriv &ut... - Pa&ge Setup... Si&dinställning... - &Close S&täng - &Quit A&vsluta - Ctrl+Q Ctrl+Q - &Edit R&edigera - &Undo &Ångra - &Redo &Gör om - Cu&t Klipp &ut - &Copy &Kopiera - &Paste Klistra &in - Paste &Unformatted Klistra in &oformaterat - Ctrl+Shift+V Ctrl+Skift+V - Select &All Markera &allt - Select &Scene Välj &scen - Ctrl+Shift+A Ctrl+Skift+A - Fo&rmat Fo&rmatera - &Heading &Rubrik - Heading &1 Rubrik &1 - Heading &2 Rubrik &2 - Heading &3 Rubrik &3 - Heading &4 Rubrik &4 - Heading &5 Rubrik &5 - Heading &6 Rubrik &6 - &Normal &Normal - &Bold &Fet - &Italic &Kursiv - &Underline &Understruken - Stri&kethrough G&enomstruken - Ctrl+K Ctrl+K - Sup&erscript Upphö&jd - Ctrl+^ Ctrl+^ - &Subscript Nedsän&kt - Ctrl+_ Ctrl+_ - Align &Left Justera &vänster - Ctrl+{ Ctrl+{ - Align &Center Justera &mitten - Ctrl+| Ctrl+| - Align &Right Justera &höger - Ctrl+} Ctrl+} - Align &Justify &Justera - Ctrl+J Ctrl+J - &Decrease Indent &Minska indrag - Ctrl+< Ctrl+< - I&ncrease Indent Öka in&drag - Ctrl+> Ctrl+> - Le&ft to Right Block Vänster till &högerblock - Ri&ght to Left Block Höger till &vänsterblock - &Tools Ver&ktyg - &Find... &Sök... - Find &Next Sök &nästa - Find Pre&vious Sök &föregående - &Replace... &Ersätt... - Ctrl+R Ctrl+R - Smart &Quotes Smarta &citationstecken - Update &Document Uppdatera &dokument - Update Document Smart Quotes - Update &Selection Uppdatera &markering - Update Selection Smart Quotes - &Spelling... Sta&vning... - F7 F7 - Set &Language... Ställ in &Språk... - &Timers... &Tidtagare... - S&ymbols... S&ymboler... - &Daily Progress &Dagliga framsteg - &Settings &Inställningar - Show &Toolbar Visa &verktygsrad - Show &Menu Icons Visa &menyikoner - F&ocused Text F&okuserad text - &Fullscreen &Helskärm - F11 F11 - Esc Esc - M&inimize Mi&nimera - Ctrl+M Ctrl+M - &Themes... &Teman... - &Preferences... &Inställningar... - Focus Off Fokus av - Focus One Line Fokusera en rad - Focus Three Lines Fokusera tre rader - &Paragraph &Stycke - Focus Paragraph Fokusera stycke - Ctrl+Shift+` Ctrl+Shift+` - &Help &Hjälp - Application &Language... Programs&pråk... - Some files were unsupported and could not be opened. Några filer stöds inte och kunde inte öppnas. - &Off &Av - One &Line En &rad - &Three Lines &Tre rader - &About &Om - About &Qt Om &Qt diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index a5184ef4..2e64ea62 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Kapat (%1) - Collapse Daralt - Expand Genişlet @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Uyarıyı Kapat - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) - %1% of %Ln word(s) - %Ln word(s) %Ln kelime - %Ln minute(s) %Ln dakika - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress Günlük İlerleme - Longest streak En uzun seri - Current streak Şu anki seri - N/A N/A - %n day(s) %n gün - %1 &ndash; %2 %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal Günlük hedeften % %1 @@ -115,7 +97,6 @@ DictionaryDialog - Set Language Dili Ayarla @@ -123,81 +104,62 @@ Document - (Untitled %1) (Başlıksız %1) - %1 (Read-Only) %1 (Salt Okunur) - - - - Sorry Üzgünüm - Unable to save '%1'. '%1' kaydedilemedi. - Save File As Dosyayı Farklı Kaydet - - Unable to overwrite '%1'. '%1' üzerine yazılamadı. - Rename File Dosyayı Yeniden Adlandır - Unable to rename '%1'. '%1' yeniden adlandırılamadı. - Reload File? Dosya Yeniden Yüklensin mi? - Reload the file '%1' from disk? '%1' dosyası diskten yeniden yüklensin mi? - All unsaved changes will be lost. Tüm kaydedilmemiş değişiklikler kaybedilecektir. - Reload Yeniden Yükle - Untitled %1 Başlıksız %1 - Question Soru - Saving as plain text will discard all formatting. Discard formatting? Düz metin olarak kaydetmek tüm biçimlendirleri geçersiz kılacaktır. Biçimlendirmeler geçersiz kılınsın mı? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed Dosya Değişti - The file '%1' was changed by another program. '%1' dosyası başka bir program tarafından değiştirilmiş. - Do you want to reload the file? Dosyayı yeniden yüklemek ister misiniz? - Reload Yeniden Yükle - Ignore Yoksay - File Deleted Dosya Silindi - The file %1 was deleted by another program. %1 dosyası başka bir program tarafından silindi. - Do you want to save or close the file? Dosyayı kaydetmek mi kapatmak mı istiyorsunuz? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. Arşiv açılamadı. @@ -256,86 +209,68 @@ FindDialog - Search for: Ara: - Replace with: Şununla değiştir: - Ignore case Büyük/küçük harf yoksay - Whole words only Yalnızca tam sözcükler - Regular expressions Kurallı ifadeler - Search up Yukarıya doğru ara - Search down Aşağıya doğru ara - &Find &Bul - &Replace &Değiştir - Replace &All &Tümünü Değiştir - Find Bul - Replace Değiştir - Replace %n instance(s)? %n öğe değiştirilsin mi? - Question Soru - - Sorry Üzgünüm - - Phrase not found. İfade bulunamadı. @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text OpenDocument Metni - OpenDocument Flat XML - Office Open XML Ofis Açık XML - Rich Text Format Zengin Metin Biçimi - Plain Text Salt Metin - All Files Tüm Dosyalar - All Supported Files Tüm Desteklenen Dosyalar @@ -381,17 +309,14 @@ Highlighter - Add Ekle - Check Spelling... Yazım Denetimi Yap... - (No suggestions found) (Öneri bulunamadı) @@ -399,12 +324,10 @@ ImageButton - Open Image Resim Aç - Images(%1) Resimler(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: Uygulama dilini seçin: - <System Language> <Sistem Dili> - Note Not - Please restart this application for the change in language to take effect. Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. Arşiv açılamadı. @@ -443,379 +361,298 @@ PreferencesDialog - Preferences Tercihler - General Genel - Statistics İstatistikler - Toolbar Araç Çubuğu - Spell Checking Yazım Denetimi - Select Dictionary Sözlük Seçin - - Sorry Üzgünüm - Unable to open archive. Arşiv açılamadı. - The archive does not contain a usable dictionary. Arşiv kullanılabilir bir sözlük içermiyor. - - - - Question Soru - Shortcuts Kısayollar - One or more shortcuts conflict. Do you wish to proceed? Bir ya da daha fazla kısayol çakışıyor. Devam etmek istiyor musunuz? - The dictionary "%1" already exists. Do you want to replace it? "%1" sözlüğü zaten var. Değiştirmek ister misiniz? - Daily Goal Günlük Hedef - None Hiçbiri - Minutes: Dakika: - - Words: Kelime: - Editing Düzenleme - Always vertically center Her zaman dikey ortala - Block insertion cursor Ekleme imlecini engelle - Smooth fonts Düzgün yazı tipleri - Typewriter sounds Daktilo sesleri - Smart quotes: Akıllı tırnaklar: - Double Çift - Single Tek - Scenes Sahneler - Divider: Bölen: - Saving Kaydetme - Automatically save changes Değişiklikleri otomatik olarak kaydet - Remember cursor position İmleç konumu hatırla - Word count Kelime sayısı - Page count Sayfa sayısı - Paragraph count Paragraf sayısı - Character count Karakter sayısı - Characters: Karakter: - Paragraphs: Paragraf: - Word Count Algorithm Sözcük Sayım Algoritması - Reset daily progress for today to zero? Bugünkü ilerleme sıfırlansın mı? - Remove current dictionary? - Write byte order mark in plain text files - Default format: Varsayılan biçim: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Bugünü Sıfırla - History Geçmiş - Remember history Geçmişi hatırla - Show streaks Serileri göster - Minimum progress for streaks: - Detect word boundaries Sözcük sınırları algıla - Divide character count by six Karakter sayısını altıya böl - Count each letter as a word Her harfi bir kelime olarak say - Page Count Algorithm Sayfa Sayma Algoritması - Style Stil - Icons Only Yalnızca Simgeler - Text Only Yalnızca Metin - Text Alongside Icons Simge Yanında Metin - Text Under Icons Simge Altında Metin - Text Position: Metin Pozisyonu: - Actions Eylemler - Move Up Yukarı Taşı - Move Down Aşağı Taşı - Add Separator Ayraç Ekle - Command Komut - Shortcut Kısayol - Action Eylem - Check spelling as you type Yazarken yazım denetimi yap - Ignore words in UPPERCASE BÜYÜK HARFLİ sözcükleri yoksay - Ignore words with numbers Sayı içeren sözcükleri yoksay - Language Dil - - Add Ekle - - Remove Kaldır - Personal Dictionary Kişisel Sözlük @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. Desteklenmeyen bir RTF dosyası. @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. Dosya sonuna beklenmedik bir biçimde erişildi. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Aşağı Ok - Move Scenes Up Sahneleri Yukarı Taşı - Ctrl+Shift+Up Ctrl+Shift+Yukarı Ok - Toggle Scene List Sahneler Arasında Geçiş Yap - Shift+F4 Shift+F4 - Show scene list (%1) Sahne listesini göster (%1) - Hide scene list (%1) Sahne listesini gizle (%1) - Filter Filtrele - Move Scenes Down Sahneleri Aşağı Taşı - Resize scene list Sahne listesini yeniden boyutlandır @@ -893,12 +717,6 @@ Session - - - - - - Default Varsayılan @@ -906,97 +724,78 @@ SessionManager - Manage Sessions Oturumları Yönet - S&essions &Oturumlar - New Yeni - Duplicate Çoğalt - Rename Yeniden adlandır - Delete Sil - Switch To Geçiş Yap - New Session Yeni Oturum - Duplicate Session Oturumu Çoğalt - Rename Session Oturumu Yeniden Adlandır - Question Soru - Delete selected session? Seçili oturum silinsin mi? - Session name: Oturum adı: - Sorry Üzgünüm - The requested session name is already in use. İstenen oturum adı zaten kullanımda. - &New... &Yeni... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... Y&önet... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear Temizle - Reset to Default Varsayılana Sıfırla - - Shortcut: Kısayol: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... Tırnak işaretleri değiştiriliyor... - Please Wait Lütfen Bekleyin @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling Yazım Denetimi Yap - &Add &Ekle - &Ignore &Yoksay - I&gnore All &Tümünü Gizle - &Change &Değiştir - C&hange All &Tümünü Değiştir - Not in dictionary: Sözlükte yok: - Change to: Değiştir: - Checking spelling... Yazım denetimi yapılılıyor... - Cancel İptal Et - Please wait Lütfen bekleyin - Continue checking at beginning of file? Kontrol etmeye dosya başından devam edilsin mi? - Spell check complete. Yazım denetimi tamamlandı. @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols Simgeler - Recently used symbols Son kullanılan simgeler - All symbols Tüm simgeler - Details Ayrıntılar - Name: İsim: - Insert Ekle @@ -1137,12 +911,10 @@ SymbolsModel - Blocks Bloklar - Scripts Betikler @@ -1150,7 +922,6 @@ Theme - Untitled %1 Başlıksız %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: İsim: - No Image Resim Yok - Tiled Döşe - - Centered Ortala - - Stretched Uzat - Scaled Ölçekle - Zoomed Yakınlaştır - Opacity: Saydamlık: - Position: Pozisyon: - Width: Genişlik: - Round Text Background Corners - - - Radius: Çap: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: Dikey Dengeleme: - Margins Kenarlıklar - Window: Pencere: - Page: Sayfa: - Indent first line İlk satır girintisi - Above: - Below: - Remove Kaldır - Edit Theme Temayı Düzenle - Window Background Pencere Arka Planı - - Type: Tür: - - - - Color: Renk: - Image: Resim: - - - - - - - - - - pixels piksel - Left Sol - Text Background Metin Arka Planı - Right Sağ - Text Metin - Font: Yazı Tipi: - Misspelled: İmla Hataları: - Line Spacing Satır Aralığı - Single Tek - 1.5 Lines 1.5 Satır - Double Çift - Proportional Orantısal - Height: Yükseklik: - Paragraph Spacing Paragraf Boşluğu - Tab Width: Sekme Genişliği: - New Theme Yeni Tema @@ -1393,115 +1104,90 @@ ThemeManager - Themes Temalar - Default Varsayılan - Bitter Skies - Enchantment - Gentle Blues Kibar Mavi - Old School Eski Okul - Space Dreams Uzay Düşleri - Spy Games - Tranquility - Writing Desk Yazı Masası - - New Yeni - - Duplicate Çoğalt - Custom Kişisel - Edit Düzenle - Delete Sil - Import Al - Export Ver - Question Soru - Delete theme '%1'? '%1' teması silinsin mi? - - Themes (%1) Temalar (%1) - Import Theme Temayı Al - Export Theme Temayı Ver @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Soru - Delete timer? Zamanlayıcı silinsin mi? - <b>Words:</b> %L1 <b>Kelime:</b> %L1 - <b>Pages:</b> %L1 <b>Sayfa:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Paragraf:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Karakter:</b> %L1 / %L2 - Set Delay Süre Ayarla - Set Time Saat Ayarla - Delay: Süre: - Time: Saat: - HH:mm:ss HH:mm:ss - Alarm Alarm - Type: Tür: - Memo: Not: - Edit Düzenle - Delete Sil @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Çalışan zamanlayıcı yok @@ -1610,37 +1277,30 @@ TimerManager - Timers Zamanlayıcılar - New Yeni - Recent Son - Question Soru - Cancel editing timers? Zamanlayıcı düzenleme iptal edilsin mi? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes Temalar yükleniyor - Loading sounds Sesler yükleniyor - - Untitled Başlıksız - Open File Dosyayı Aç - About FocusWriter FocusWriter Hakkında - - FocusWriter FocusWriter - A simple fullscreen word processor Basit bir tam ekran kelime işlemci - Copyright &copy; 2008-%1 Graeme Gott Telif hakları saklıdır &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır - Uses icons from the <a href=%1>Oxygen</a> icon theme <a href=%1>Oxygen</a> simge temasından simgeler kullanılıyor - Used under the <a href=%1>LGPL 3</a> license <a href=%1>GPL 3</a> lisansı altında kullanılıyor - - Characters: %L1 / %L2 Karakter: %L1 / %L2 - - Pages: %L1 Sayfa: %L1 - - Paragraphs: %L1 Paragraf: %L1 - - Words: %L1 Kelime: %L1 - - Opening %1 %1 açılıyor - (Untitled %1) (Başlıksız %1) - List all documents Tüm dokümanları listele - Switch to Next Document Sonraki Belgeye Geç - Switch to Previous Document Önceki Belgeye Geç - Switch to First Document İlk Belgeye Geç - Switch to Last Document Son Belgeye Geç - Switch to Document %1 %1. Belgeye Geç - Loading settings Ayarlar yükleniyor - Emergency cache is not writable. Acil önbellek yazılabilir değil. - - Warning Uyarı - FocusWriter was not shut down cleanly. FocusWriter temiz bir şekilde kapatılmadı. - Restore from the emergency cache? Acil önbellekten kurtarılsın mı? - Some files could not be opened. Bazı dosyalar açılamadı. - Some files were opened Read-Only. Bazı dosyalar salt okunur olarak açıldı. - '%1' is newer than the cached copy. '%1' önbelleğe alınmış kopyadan daha yeni. - Overwrite newer file? Daha yeni dosyanın üzerine yazılsın mı? - Save Changes? Değişiklikler Kaydedilsin mi? - Save changes to the file '%1' before closing? Değişiklikler kapatılmadan önce '%1' dosyasına kaydedilsin mi? - Your changes will be lost if you don't save them. Kaydetmezsen değişiklikler kaybedilecek. - Unable to load typewriter sounds. Daktilo sesleri yüklenemiyor. - &File &Dosya - &New &Yeni - &Open... &Aç... - Reloa&d &Yeniden Yükle - &Save &Kaydet - Save &As... &Farklı Kaydet... - &Rename... Yeni &İsim Ver... - Save A&ll &Tümünü Kaydet - Manage Sessions Oturumları Yönet - New Session Yeni Oturum - &Print... Ya&zdır... - Pa&ge Setup... - &Close Ka&pat - &Quit &Çık - Ctrl+Q Ctrl+Q - &Edit D&üzen - &Undo &Geri Al - &Redo &Yinele - Cu&t &Kes - &Copy K&opyala - &Paste Y&apıştır - Paste &Unformatted &Biçimlendirme Olmadan Yapıştır - Ctrl+Shift+V Ctrl+Shift+V - Select &All &Tümünü Seç - Select &Scene &Sahneyi Seç - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Biçim - &Heading Başlık - Heading &1 Başlık &1 - Heading &2 Başlık &2 - Heading &3 Başlık &3 - Heading &4 Başlık &4 - Heading &5 Başlık &5 - Heading &6 Başlık &6 - &Normal &Normal - &Bold &Kalın - &Italic &İtalik - &Underline &Altı Çizili - Stri&kethrough &Üstü Çizili - Ctrl+K Ctrl+K - Sup&erscript Ü&st Simge - Ctrl+^ Ctrl+^ - &Subscript A&lt Simge - Ctrl+_ Ctrl+_ - Align &Left So&la Yasla - Ctrl+{ Ctrl+{ - Align &Center &Ortala - Ctrl+| Ctrl+| - Align &Right Sa&ğa Yasla - Ctrl+} Ctrl+} - Align &Justify İki &Yana Yasla - Ctrl+J Ctrl+J - &Decrease Indent &Girintiyi Azalt - Ctrl+< Ctrl+< - I&ncrease Indent Gi&rintiyi Arttır - Ctrl+> Ctrl+> - Le&ft to Right Block S&oldan Sağa Blok - Ri&ght to Left Block Sa&ğdan Sola Blok - &Tools &Araçlar - &Find... &Bul... - Find &Next &Sonrakini Bul - Find Pre&vious &Öncekini Bul - &Replace... &Değiştir... - Ctrl+R Ctrl+R - Smart &Quotes &Akıllı Tırnaklar - Update &Document &Dökümanı Güncelle - Update Document Smart Quotes - Update &Selection &Seçilimi Güncelle - Update Selection Smart Quotes - &Spelling... &Yazım Denetimi... - F7 F7 - Set &Language... Dili &Ayarla... - &Timers... &Zamanlayıcılar... - S&ymbols... &Simgeler... - &Daily Progress &Günlük İlerleme - &Settings &Ayarlar - Show &Toolbar &Araç Çubuğunu Göster - Show &Menu Icons &Menü Simgelerini Göster - F&ocused Text &Odaklanılan Metin - &Fullscreen Tam &Ekran - F11 F11 - Esc Esc - M&inimize &Küçült - Ctrl+M Ctrl+M - &Themes... &Temalar... - &Preferences... &Tercihler... - Focus Off Odaklanmayı Kapat - Focus One Line Bir Satıra Odaklan - Focus Three Lines Üç Satıra Odaklan - &Paragraph &Paragraf - Focus Paragraph Paragrafa Odaklan - Ctrl+Shift+` - &Help &Yardım - Application &Language... &Uygulama Dili ... - Some files were unsupported and could not be opened. Bazı dosyalar desteklenmiyor ve açılamadı. - &Off &Kapalı - One &Line &Bir Satır - &Three Lines &Üç Satır - &About &Hakkında - About &Qt &Qt Hakkında diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index deda6386..58ca519a 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Закрити (%1) - Collapse Згорнути - Expand Розгорнути @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Пропустити попередження - Ctrl+D Ctrl+D @@ -35,7 +30,6 @@ DailyProgress - %1% of %Ln minute(s) %1% з %Ln хвилин @@ -44,7 +38,6 @@ - %1% of %Ln word(s) %1% з %Ln слів @@ -53,7 +46,6 @@ - %Ln word(s) %Ln слово @@ -62,7 +54,6 @@ - %Ln minute(s) %Ln хвилина @@ -71,7 +62,6 @@ - 0% 0% @@ -79,27 +69,22 @@ DailyProgressDialog - Daily Progress Щоденний Прогрес - Longest streak Найдовший період робочих днів - Current streak Поточний період робочих днів - N/A Недоступно - %n day(s) %n день @@ -108,7 +93,6 @@ - %1 &ndash; %2 %1 &ndash; %2 @@ -116,8 +100,6 @@ DailyProgressLabel - - %1% of daily goal %1% щоденного завдання @@ -125,7 +107,6 @@ DictionaryDialog - Set Language Встановити мову @@ -133,81 +114,62 @@ Document - (Untitled %1) (Без назви %1) - %1 (Read-Only) %1 (Лише для читання) - - - - Sorry На жаль - Unable to save '%1'. Не вдалось зберегти '%1'. - Save File As Зберегти файл як - - Unable to overwrite '%1'. Не вдалось перезаписати '%1'. - Rename File Перейменувати файл - Unable to rename '%1'. Не вдалось перейменувати '%1'. - Reload File? Перезавантажити файл? - Reload the file '%1' from disk? Перезавантажити файл '%1' з диску? - All unsaved changes will be lost. Всі незбережені зміни будуть втрачені. - Reload Перевантажити - Untitled %1 Без назви %1 - Question Питання - Saving as plain text will discard all formatting. Discard formatting? Збереження файлу як простого тексту призведе до втрати форматування. Пропустити форматування? @@ -215,42 +177,34 @@ DocumentWatcher - File Changed Файл змінено - The file '%1' was changed by another program. Файл '%1' був змінений в іншій програмі. - Do you want to reload the file? Ви хочете перевантажити файл? - Reload Перевантажити - Ignore Пропустити - File Deleted Файл видалено - The file %1 was deleted by another program. Файл %1 видалений іншою програмою. - Do you want to save or close the file? Ви хочете зберегти чи закрити файл? @@ -258,7 +212,6 @@ DocxReader - Unable to open archive. Не вдалось відкрити архів. @@ -266,67 +219,54 @@ FindDialog - Search for: Знайти: - Replace with: Замінити на: - Ignore case Ігнорувати регістр - Whole words only Лише повні слова - Regular expressions Регулярні вирази - Search up Пошук уверх - Search down Пошук вниз - &Find &Знайти - &Replace &Замінити - Replace &All Замінити &все - Find Знайти - Replace Замінити - Replace %n instance(s)? Замінити %n примірник? @@ -335,19 +275,14 @@ - Question Запит - - Sorry На жаль - - Phrase not found. Фраза не знайдена. @@ -355,37 +290,30 @@ FormatManager - OpenDocument Text OpenDocument Text - OpenDocument Flat XML - Office Open XML Office Open XML - Rich Text Format Rich Text - розширений текстовий формат - Plain Text Plain Text - Простий текст - All Files Всі файли - All Supported Files Всі підтримувані файли @@ -393,17 +321,14 @@ Highlighter - Add Додати - Check Spelling... Перевірка правопису... - (No suggestions found) (Пропозицій не знайдено) @@ -411,12 +336,10 @@ ImageButton - Open Image Відкрити зображення - Images(%1) Зображень(%1) @@ -424,22 +347,18 @@ LocaleDialog - Select application language: Виберіть мову програми: - <System Language> <System Language> - Note Примітка - Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набрала чинності. @@ -447,7 +366,6 @@ OdtReader - Unable to open archive. Не вдалось відкрити архів. @@ -455,379 +373,298 @@ PreferencesDialog - Preferences Параметри - General Загальне - Statistics Статистика - Toolbar Панель інструментів - Spell Checking Перевірка правопису - Select Dictionary Вибрати словник - - Sorry На жаль - Unable to open archive. Не вдалось відкрити архів. - The archive does not contain a usable dictionary. Архів не містить придатного словника. - - - - Question Запитання - Shortcuts Комбінації клавіш - One or more shortcuts conflict. Do you wish to proceed? Деякі комбінації клавіш збігаються. Продовжити? - The dictionary "%1" already exists. Do you want to replace it? Словник "%1" вже є. Хочете замінити його? - Daily Goal Щоденні завдання - None Немає - Minutes: Хвилин: - - Words: Слів: - Editing Редагування - Always vertically center Завжди центрувати вертикально - Block insertion cursor Блокувати курсор вставки - Smooth fonts Згладжені шрифти - Typewriter sounds Звуки друкарської машинки - Smart quotes: Прямі лапки: - Double Подвійні - Single Одинарні - Scenes Сцени - Divider: Роздільна лінія: - Saving Збереження - Automatically save changes Зміни зберігати автоматично - Remember cursor position Пам'ятати позицію курсору - Word count Кількість слів - Page count Кількість сторінок - Paragraph count Кількість абзаців - Character count Кількість символів - Characters: Символів: - Paragraphs: Абзаців: - Word Count Algorithm Алгоритм підрахунку слів - Reset daily progress for today to zero? Скинути сьогоднішній щоденний прогрес до нуля? - Remove current dictionary? - Write byte order mark in plain text files Записувати мітку байта в простих текстових файлах - Default format: Формат за замовчуванням: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today Скинути сьогоднішнє - History Історія - Remember history Зберігати історію - Show streaks Показувати робочі дні - Minimum progress for streaks: Мінімальний прогрес для зарахування дня в робочий період: - Detect word boundaries Визначати межі слова - Divide character count by six Ділити кількість символів на шість - Count each letter as a word Рахувати кожну букву як слово - Page Count Algorithm Алгоритм обрахування сторінок - Style Стиль - Icons Only Лише значки - Text Only Лише текст - Text Alongside Icons Текст біля значків - Text Under Icons Текст під значками - Text Position: Розташування тексту: - Actions Дії - Move Up Перемістити уверх - Move Down Перемістити вниз - Add Separator Додати розділювач - Command Команда - Shortcut Комбінація клавіш - Action Дія - Check spelling as you type Перевіряти правопис під час введення - Ignore words in UPPERCASE Ігнорувати слова у ВЕРХНЬОМУ регістрі - Ignore words with numbers Ігнорувати слова з цифрами - Language Мова - - Add Додати - - Remove Вилучити - Personal Dictionary Особистий словник @@ -835,8 +672,6 @@ RtfReader - - Not a supported RTF file. Не підтримуваний файл RTF. @@ -844,7 +679,6 @@ RtfTokenizer - Unexpectedly reached end of file. Несподівано завершився файл. @@ -852,52 +686,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Пересунути сцени вище - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Відкрити/закрити список сцен - Shift+F4 Shift+F4 - Show scene list (%1) Показати список сцен (%1) - Hide scene list (%1) Заховати список сцен (%1) - Filter Фільтрувати - Move Scenes Down Пересунути сцени нижче - Resize scene list Змінити розмір списку сцен @@ -905,12 +729,6 @@ Session - - - - - - Default Типово @@ -918,97 +736,78 @@ SessionManager - Manage Sessions Керування сеансами - S&essions С&анси - New Новий - Duplicate Дублювати - Rename Перейменувати - Delete Вилучити - Switch To Перейти - New Session Новий сеанс - Duplicate Session Дублювати сесію - Rename Session Перейменувати сеанс - Question Запит - Delete selected session? Вилучити вибраний сеанс? - Session name: Назва сеансу: - Sorry На жаль - The requested session name is already in use. Така назва сеансу вже є. - &New... &Новий ... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Керування... - Ctrl+Shift+M Ctrl+Shift+M @@ -1016,18 +815,14 @@ ShortcutEdit - Clear Очистити - Reset to Default Скинути до значень за замовчуванням - - Shortcut: Комбінація клавіш: @@ -1035,12 +830,10 @@ SmartQuote - Replacing quotation marks... Заміна лапок... - Please Wait Будь ласка, зачекайте @@ -1048,67 +841,54 @@ SpellChecker - Check Spelling Перевірка правопису - &Add &Додати - &Ignore &Пропустити - I&gnore All &Пропустити все - &Change &Замінити - C&hange All &Замінити все - Not in dictionary: Немає в словнику: - Change to: Змінити на: - Checking spelling... Перевірка правопису ... - Cancel Скасувати - Please wait Будь ласка, зачекайте - Continue checking at beginning of file? Продовжити пошук з початку файлу? - Spell check complete. Перевірку правопису завершено. @@ -1116,32 +896,26 @@ SymbolsDialog - Symbols Символи - Recently used symbols Недавно використані символи - All symbols Всі символи - Details Деталі - Name: Назва: - Insert Вставити @@ -1149,12 +923,10 @@ SymbolsModel - Blocks Блоки - Scripts Скрипти @@ -1162,7 +934,6 @@ Theme - Untitled %1 Без назви %1 @@ -1170,234 +941,174 @@ ThemeDialog - Name: Назва: - No Image Немає зображення - Tiled Замостити - - Centered По центру - - Stretched Розтягнути - Scaled Масштабувати - Zoomed Наблизити - Opacity: Непрозорість: - Position: Позиція: - Width: Ширина: - Round Text Background Corners Заокруглені кути - - - Radius: Радіус: - Blur Text Background Розмити фон тексту - Text Background Drop Shadow Падаюча тінь від тексту - Vertical Offset: Ветрикальне зміщення: - Margins Зовнішні краї - Window: Вікно: - Page: Сторінка: - Indent first line Відступ першого рядка - Above: Перед: - Below: Після: - Remove Віддалити - Edit Theme Редагувати тему - Window Background Фон вікна - - Type: Тип: - - - - Color: Колір: - Image: Зображення: - - - - - - - - - - pixels пікселів - Left Ліворуч - Text Background Фон тексту - Right Праворуч - Text Текст - Font: Шрифт: - Misspelled: З помилкою: - Line Spacing Відстань між рядками - Single Одинарні - 1.5 Lines Півтора - Double Подвійні - Proportional ПропорційнІ - Height: Висота: - Paragraph Spacing Відстань між абзацами - Tab Width: Ширина вкладки - New Theme Нова тема @@ -1405,115 +1116,90 @@ ThemeManager - Themes Теми - Default За замовчуванням - Bitter Skies - Enchantment - Gentle Blues Ніжний блюз - Old School Стара школа - Space Dreams Космічні мрії - Spy Games - Tranquility - Writing Desk Письмовий стіл - - New Нова - - Duplicate Дублювати - Custom Користувацька - Edit Редагувати - Delete Видалити - Import Імпортувати - Export Експортувати - Question Запитання - Delete theme '%1'? Видалити тему '%1'? - - Themes (%1) Теми (%1) - Import Theme Імпортувати тему - Export Theme Експортувати тему @@ -1521,87 +1207,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Запитання - Delete timer? Вилучити таймер? - <b>Words:</b> %L1 <b>Слів:</b> %L1 - <b>Pages:</b> %L1 <b>Сторінок:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Абзаців:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Символів:</b> %L1 / %L2 - Set Delay Затримка - Set Time Час - Delay: Затримка: - Time: Час: - HH:mm:ss HH:mm:ss - Alarm Сигнал - Type: Тип: - Memo: Для довідки: - Edit Змінити - Delete Вилучити @@ -1609,12 +1278,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Таймери не працюють @@ -1622,37 +1289,30 @@ TimerManager - Timers Таймери - New Новий - Recent Останні - Question Запитання - Cancel editing timers? Скасувати змінені таймери? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1660,690 +1320,546 @@ Window - Loading themes Завантаження тем - Loading sounds Завантаження звуків - - Untitled Без назви - Open File Відкрити файл - About FocusWriter Про FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor Простий повноекранний текстовий редактор - Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Випущено під ліцензією <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Використовуються іконки з теми <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Використано відповідно до ліцензії <a href=%1>GPL 3</a> - - Characters: %L1 / %L2 Символів: %L1 / %L2 - - Pages: %L1 Сторінок: %L1 - - Paragraphs: %L1 Абзаців: %L1 - - Words: %L1 Слів: %L1 - - Opening %1 Відкривання %1 - (Untitled %1) (Без назви %1) - List all documents Список усіх документів - Switch to Next Document Перейти до наступного документу - Switch to Previous Document Перейти до попереднього документу - Switch to First Document Перейти до першого документу - Switch to Last Document Перейти до останнього документу - Switch to Document %1 Перейти до документу %1 - Loading settings Завантажуються налаштування - Emergency cache is not writable. Резервна пам’ять недоступна для запису. - - Warning Попередження - FocusWriter was not shut down cleanly. FocusWriter не був закритий правильно. - Restore from the emergency cache? Відновити відкриті файли із резервної пам’яті? - Some files could not be opened. Не вдалось відкрити деякі файли. - Some files were opened Read-Only. Деякі файли були відкриті лише для читання. - '%1' is newer than the cached copy. '%1' новіше резервної копії - Overwrite newer file? Замінити нову версію резервною копією? - Save Changes? Зберегти зміни? - Save changes to the file '%1' before closing? Зберегти зміни у файлі '%1' перед закриттям? - Your changes will be lost if you don't save them. Ваші зміни будуть втрачені, якщо ви їх не збережете. - Unable to load typewriter sounds. Не вдається завантажити звук друкарської машинки. - &File &Файл - &New &Новий - &Open... &Відкрити... - Reloa&d Відкр&ити заново - &Save &Зберегти - Save &As... Зберегти &як... - &Rename... &Перейменувати... - Save A&ll Зберегти вс&е - Manage Sessions Керування сеансами - New Session Новий сеанс - &Print... &Друк... - Pa&ge Setup... - &Close За&крити - &Quit В&ийти - Ctrl+Q Ctrl+Q - &Edit &Змінити - &Undo &Повернути - &Redo Пов&торити - Cu&t Виріза&ти - &Copy Копі&ювати - &Paste В&ставити - Paste &Unformatted Вставити без &форматування - Ctrl+Shift+V Ctrl+Shift+V - Select &All Вибрати &все - Select &Scene Вибрати &Сцену - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat &Формат - &Heading &Заголовок - Heading &1 Заголовок &1 - Heading &2 Заголовок &2 - Heading &3 Заголовок &3 - Heading &4 Заголовок &4 - Heading &5 Заголовок &5 - Heading &6 Заголовок &6 - &Normal &Звичайний - &Bold &Напівжирний - &Italic &Курсив - &Underline &Підкреслений - Stri&kethrough &Закреслений - Ctrl+K Ctrl+K - Sup&erscript Верхній &індекс - Ctrl+^ Ctrl+^ - &Subscript Ни&жній індекс - Ctrl+_ Ctrl+_ - Align &Left По &лівому краю - Ctrl+{ Ctrl+{ - Align &Center По &центру - Ctrl+| Ctrl+| - Align &Right По пр&авому краю - Ctrl+} Ctrl+} - Align &Justify По &ширині - Ctrl+J Ctrl+J - &Decrease Indent &Зменшити відступ - Ctrl+< Ctrl+< - I&ncrease Indent З&більшити відступ - Ctrl+> Ctrl+> - Le&ft to Right Block Фрагмент зліва напр&аво - Ri&ght to Left Block Фрагмент справа нал&іво - &Tools &Інструменти - &Find... &Знайти... - Find &Next Знайти нас&тупний - Find Pre&vious Знайти п&опередній - &Replace... За&мінити... - Ctrl+R Ctrl+R - Smart &Quotes Прямі &лапки - Update &Document Оновити &документ - Update Document Smart Quotes - Update &Selection Оновити &виділене - Update Selection Smart Quotes - &Spelling... &Перевірка правопису... - F7 F7 - Set &Language... Встановити &мову - &Timers... &Таймери... - S&ymbols... С&имволи... - &Daily Progress &Щоденний прогрес - &Settings &Налаштування - Show &Toolbar Показати панель &інструментів - Show &Menu Icons Показати значки мен&ю - F&ocused Text Під&свічування тексту - &Fullscreen Н&а повний екран - F11 F11 - Esc Esc - M&inimize &Згорнути - Ctrl+M Ctrl+M - &Themes... &Теми... - &Preferences... Пара&метри... - Focus Off Вимкнена - Focus One Line На одному рядку - Focus Three Lines На трьох рядках - &Paragraph &Абзац - Focus Paragraph На абзаці - Ctrl+Shift+` - &Help &Довідка - Application &Language... Мова &програми... - Some files were unsupported and could not be opened. Формат деяких файлів не підтримується програмою. Ці файли не були відкриті. - &Off &Виключено - One &Line Один &рядок - &Three Lines &Три рядки - &About &Про програму - About &Qt Про &Qt diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index afff73ee..5caa7f16 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -4,17 +4,14 @@ Alert - Close (%1) Đóng lại (%1) - Collapse Xổ xuống - Expand Mở rộng @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert Bỏ qua cảnh báo - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) - %1% of %Ln word(s) - %Ln word(s) - %Ln minute(s) - 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress - Longest streak - Current streak - N/A - %n day(s) - %1 &ndash; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal @@ -115,7 +97,6 @@ DictionaryDialog - Set Language @@ -123,81 +104,62 @@ Document - (Untitled %1) (Chưa đặt tiêu đề %1) - %1 (Read-Only) - - - - Sorry Rất tiếc - Unable to save '%1'. Không thể lưu '%1'. - Save File As Lưu tập tin thành - - Unable to overwrite '%1'. Không thể ghi đè lên '%1'. - Rename File Đổi tên tập tin - Unable to rename '%1'. Không thể đổi tên '%1'. - Reload File? - Reload the file '%1' from disk? - All unsaved changes will be lost. Tất cả các thay đổi chưa lưu sẽ bị mất. - Reload Tải lại - Untitled %1 Chưa đặt tiêu đề %1 - Question Câu hỏi - Saving as plain text will discard all formatting. Discard formatting? Lưu dưới dạng văn bản thông thường sẽ bỏ qua tất cả các chỉnh sửa về hiển thị. Bỏ qua toàn bộ các hiển thị? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed Đã thay đổi tập tin - The file '%1' was changed by another program. - Do you want to reload the file? Bạn có muốn tải lại tập tin? - Reload Tải lại - Ignore Bỏ qua - File Deleted Đã xóa tập tin - The file %1 was deleted by another program. Tập tin %1 đã bị xóa bởi một ứng dụng khác. - Do you want to save or close the file? Bạn có muốn lưu hoặc đóng lại tập tin này? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. Không thể mở phần lưu trữ. @@ -256,86 +209,68 @@ FindDialog - Search for: Tìm kiếm cho: - Replace with: Thay thế với: - Ignore case Bỏ qua trường hợp chữ in hoa - Whole words only Chỉ toàn bộ các từ này - Regular expressions Phép toán thông thường - Search up Tìm kiếm phía trên - Search down Tìm kiếm phía dưới - &Find &Tìm kiếm - &Replace Th&ay thế - Replace &All Tha&y thế tất cả - Find Tìm - Replace Thay thế - Replace %n instance(s)? Thay thế %n tiến trình? - Question Câu hỏi - - Sorry Rất tiếc - - Phrase not found. Không tìm thấy cụm từ. @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text - OpenDocument Flat XML - Office Open XML - Rich Text Format - Plain Text - All Files - All Supported Files @@ -381,17 +309,14 @@ Highlighter - Add Thêm - Check Spelling... Kiểm tra lỗi chính tả... - (No suggestions found) (Không tìm thấy lời đề nghị nào) @@ -399,12 +324,10 @@ ImageButton - Open Image Mở hình ảnh - Images(%1) Hình ảnh(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: Chọn ngôn ngữ của ứng dụng: - <System Language> <Ngôn ngữ Hệ thống> - Note Ghi chú - Please restart this application for the change in language to take effect. Xin vui lòng khởi động lại ứng dụng này để áp dụng thao tác thay đổi ngôn ngữ. @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. Không thể mở phần lưu trữ. @@ -443,379 +361,298 @@ PreferencesDialog - Preferences Tùy biến - General Tổng quan - Statistics Thống kê - Toolbar Thanh công cụ - Spell Checking Đang kiểm tra lỗi chính tả - Select Dictionary Chọn Từ Điển - - Sorry Rất tiếc - Unable to open archive. Không thể mở phần lưu trữ. - The archive does not contain a usable dictionary. Phần lưu trữ không chứa từ điển nào có thể sử dụng được. - - - - Question Câu hỏi - Shortcuts Phím tắt - One or more shortcuts conflict. Do you wish to proceed? Một hoặc nhiều phím tắt hơn bị xung đột. Bạn có muốn tiếp tục? - The dictionary "%1" already exists. Do you want to replace it? Từ điển "%1" đã có sẵn. Bạn có muốn thay thế từ điển này không? - Daily Goal Mục tiêu mỗi ngày - None Không - Minutes: Phút: - - Words: Từ: - Editing Đang chỉnh sửa - Always vertically center Vị trí luôn thẳng đứng ở giữa - Block insertion cursor Khóa việc chèn con trỏ - Smooth fonts Kiểu chữ dễ nhìn - Typewriter sounds Âm thanh đánh máy khi gõ - Smart quotes: Trích dẫn thông minh: - Double Gấp đôi - Single Đơn lẻ - Scenes Khung cảnh - Divider: Người chia cắt: - Saving Đang lưu - Automatically save changes Tự động lưu các thay đổi - Remember cursor position Nhớ vị trí trỏ chuột - Word count Tổng số từ - Page count Tổng số trang - Paragraph count Tổng số đoạn văn - Character count Tổng số ký tự - Characters: Ký tự: - Paragraphs: Đoạn văn: - Word Count Algorithm Thuật toán tính toán tổng số chữ - Reset daily progress for today to zero? - Remove current dictionary? - Write byte order mark in plain text files - Default format: - User Interface - Always show scrollbar - Always show top bar - Always show bottom bar - Reset Today - History - Remember history - Show streaks - Minimum progress for streaks: - Detect word boundaries Phát hiện việc bo tròn các chữ - Divide character count by six Chia các ký tự bởi nhóm có số lượng sáu - Count each letter as a word - Page Count Algorithm - Style Giao diện - Icons Only Chỉ hiển thị biểu tượng - Text Only Chỉ hiển thị chữ - Text Alongside Icons Chữ kèm theo biểu tượng - Text Under Icons Chữ dưới biểu tượng - Text Position: Vị trí chữ: - Actions Thao tác - Move Up Di chuyển lên - Move Down Di chuyển xuống - Add Separator Thêm dấu phân cách - Command Lệnh - Shortcut Phím tắt - Action Thao tác - Check spelling as you type Kiểm tra ngữ pháp khi gõ - Ignore words in UPPERCASE Bỏ qua các từ IN HOA - Ignore words with numbers Bỏ qua các từ kèm theo số - Language Ngôn ngữ - - Add Thêm - - Remove Loại bỏ - Personal Dictionary Từ điển tự tạo @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up Chuyển cảnh lên - Ctrl+Shift+Up Ctrl+Shift+Up - Toggle Scene List Chuyển đổi danh sách các cảnh - Shift+F4 Shift+F4 - Show scene list (%1) Hiển thị danh sách cảnh (%1) - Hide scene list (%1) Ẩn danh sách cảnh (%1) - Filter Lọc dữ liệu - Move Scenes Down Chuyển cảnh xuống - Resize scene list Chỉnh lại kích thước danh sách cảnh @@ -893,12 +717,6 @@ Session - - - - - - Default Mặc định @@ -906,97 +724,78 @@ SessionManager - Manage Sessions Quản lý phiên làm việc - S&essions P&hiên làm việc - New Tạo mới - Duplicate - Rename Đổi tên - Delete Xóa - Switch To Chuyển sang - New Session Phiên làm việc mới - Duplicate Session - Rename Session Đổi tên phiên làm việc - Question Câu hỏi - Delete selected session? Xóa phiên làm việc đã được chọn? - Session name: Tên phiên làm việc: - Sorry Rất tiếc - The requested session name is already in use. Tên của phiên làm việc được yêu cầu hiện đang được sử dụng. - &New... &Tạo mới... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... &Quản lý... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear Dọn dẹp - Reset to Default Chuyển về mặc định - - Shortcut: Phím tắt: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... Thay đổi các phần đánh dấu trích dẫn.. - Please Wait Vui lòng đợi @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling Kiểm tra ngữ pháp - &Add &Thêm - &Ignore &Bỏ qua - I&gnore All Bỏ q&ua tất cả - &Change Th&ay đổi - C&hange All Tha&y đổi tất cả - Not in dictionary: Không có trong từ điển: - Change to: Thay đổi sang: - Checking spelling... Đang thực hiện việc kiểm tra ngữ pháp... - Cancel Hủy bỏ - Please wait Vui lòng đợi - Continue checking at beginning of file? - Spell check complete. Đã thực hiện xong thao tác kiểm tra ngữ pháp. @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols Biểu tượng - Recently used symbols Các biểu tượng được dùng gần đây - All symbols Tất cả biểu tượng - Details Chi tiết - Name: Tên: - Insert Chèn @@ -1137,12 +911,10 @@ SymbolsModel - Blocks Khối - Scripts Kịch bản @@ -1150,7 +922,6 @@ Theme - Untitled %1 Chưa đặt tiêu đề %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: Tên: - No Image Không có hình ảnh - Tiled Xếp theo ô - - Centered Ở giữa - - Stretched Trải rộng ra - Scaled Theo tỉ lệ - Zoomed Phóng to - Opacity: - Position: - Width: - Round Text Background Corners - - - Radius: - Blur Text Background - Text Background Drop Shadow - Vertical Offset: - Margins - Window: - Page: - Indent first line - Above: - Below: - Remove Loại bỏ - Edit Theme - Window Background - - Type: Loại: - - - - Color: Màu: - Image: Hình ảnh: - - - - - - - - - - pixels điểm ảnh - Left Bên tay trái - Text Background - Right Bên tay phải - Text Văn bản - Font: Kiểu chữ: - Misspelled: Sai ngữ pháp: - Line Spacing Khoảng trống giữa các dòng - Single Đơn lẻ - 1.5 Lines 1.5 dòng - Double Gấp đôi - Proportional Tỉ lệ cân xứng - Height: - Paragraph Spacing Khoảng cách giữa các đoạn văn - Tab Width: - New Theme @@ -1393,115 +1104,90 @@ ThemeManager - Themes Giao diện - Default Mặc định - Bitter Skies - Enchantment - Gentle Blues - Old School - Space Dreams - Spy Games - Tranquility - Writing Desk - - New Tạo mới - - Duplicate - Custom - Edit Chỉnh sửa - Delete Xóa - Import Nhập dữ liệu - Export Xuất dữ liệu - Question Câu hỏi - Delete theme '%1'? - - Themes (%1) - Import Theme Nhập dữ liệu về giao diện - Export Theme Xuất dữ liệu về giao diện @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question Câu hỏi - Delete timer? Xóa phần đếm thời gian? - <b>Words:</b> %L1 <b>Số lượng từ:</b> %L1 - <b>Pages:</b> %L1 <b>Số lượng trang:</b> %L1 - <b>Paragraphs:</b> %L1 <b>Số lượng đoạn văn:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>Số lượng ký tự:</b> %L1 / %L2 - Set Delay Đặt độ trễ - Set Time Đặt thời gian - Delay: Độ trễ: - Time: Thời gian: - HH:mm:ss HH:mm:ss - Alarm Hẹn giờ - Type: Loại: - Memo: Ghi chú: - Edit Chỉnh sửa - Delete Xóa @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running Hiện không có phần đếm thời gian nào @@ -1610,37 +1277,30 @@ TimerManager - Timers Bộ đếm thời gian - New Tạo mới - Recent Gần đây - Question Câu hỏi - Cancel editing timers? Hủy bỏ việc chỉnh sửa bộ đếm giờ? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes Đang tải dữ liệu giao diện - Loading sounds Đang tải dữ liệu âm thanh - - Untitled Chưa đặt tiêu đề - Open File Mở tập tin - About FocusWriter Dịch bởi Phan Anh - - FocusWriter FocusWriter - A simple fullscreen word processor Một phần mềm soạn thảo văn bản toàn màn hình dạng đơn giản - Copyright &copy; 2008-%1 Graeme Gott Bản quyền &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license Phát hành dựa theo giấy phép <a href=%1>GPL 3</a> - Uses icons from the <a href=%1>Oxygen</a> icon theme Sử dụng bộ biểu tượng từ <a href=%1>Oxygen</a> - Used under the <a href=%1>LGPL 3</a> license Sử dụng dựa trên giấy phép <a href=%1>LGPL 3</a> - - Characters: %L1 / %L2 Số ký tự: %L1 / %L2 - - Pages: %L1 Số trang: %L1 - - Paragraphs: %L1 Số đoạn văn: %L1 - - Words: %L1 Số từ: %L1 - - Opening %1 Đang mở %1 - (Untitled %1) (Chưa đặt tiêu đề %1) - List all documents - Switch to Next Document Chuyển sang một tài liệu mới - Switch to Previous Document Chuyển sang tài liệu trước đó - Switch to First Document Chuyển sang tài liệu đầu tiên - Switch to Last Document Chuyển sang tài liệu cuối cùng - Switch to Document %1 Chuyển sang tài liệu %1 - Loading settings Đang tải thiết lập - Emergency cache is not writable. Phần bộ nhớ đệm trong trường hợp khẩn cấp hiện không thể ghi dữ liệu vào. - - Warning Cảnh báo - FocusWriter was not shut down cleanly. FocusWriter đã không được tắt theo đúng cách. - Restore from the emergency cache? Khôi phục dữ liệu từ phần bộ nhớ đệm khẩn cấp? - Some files could not be opened. Không thể mở một số tập tin. - Some files were opened Read-Only. Một vài tập tin được mở dưới chế độ Chỉ Được-Đọc - '%1' is newer than the cached copy. '%1' mới hơn bản dữ liệu được sao chép trong bộ nhớ đệm. - Overwrite newer file? Viết đè dữ liệu lên tập tin mới hơn? - Save Changes? - Save changes to the file '%1' before closing? - Your changes will be lost if you don't save them. - Unable to load typewriter sounds. Không thể tải âm thanh tạo hiệu ứng gõ chữ. - &File &Tập tin - &New &Tạo mới - &Open... &Mở... - Reloa&d Tải l&ại - &Save &Lưu - Save &As... Lưu &Dưới Dạng... - &Rename... &Đổi tên... - Save A&ll Lưu T&ất Cả - Manage Sessions Quản lý phiên làm việc - New Session Phiên làm việc mới - &Print... &In dữ liệu... - Pa&ge Setup... - &Close Đ&óng lại - &Quit Th&oát - Ctrl+Q Ctrl+Q - &Edit C&hỉnh sửa - &Undo Hủ&y thao tác - &Redo Lặ&p lại thao tác - Cu&t Cắ&t - &Copy S&ao chép - &Paste D&án - Paste &Unformatted Dán vào dữ liệu ch&ưa chỉnh sửa - Ctrl+Shift+V Ctrl+Shift+V - Select &All Chọn tấ&t cả - Select &Scene Chọn c&ảnh - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat Đị&nh dạng - &Heading - Heading &1 - Heading &2 - Heading &3 - Heading &4 - Heading &5 - Heading &6 - &Normal - &Bold &In đậm - &Italic I&n nghiêng - &Underline &Gạch dưới - Stri&kethrough G&ạch xuyên qua - Ctrl+K Ctrl+K - Sup&erscript Chữ t&rồi lên - Ctrl+^ Ctrl+^ - &Subscript Chữ s&ụp xuống - Ctrl+_ Ctrl+_ - Align &Left Canh lề b&ên trái - Ctrl+{ Ctrl+{ - Align &Center Canh lề c&hính giữa - Ctrl+| Ctrl+| - Align &Right Canh lề bên p&hải - Ctrl+} Ctrl+} - Align &Justify Canh lề đ&ều hai bên - Ctrl+J Ctrl+J - &Decrease Indent Giả&m mức lùi dòng - Ctrl+< Ctrl+< - I&ncrease Indent Tă&ng mức lùi dòng - Ctrl+> Ctrl+> - Le&ft to Right Block Khối văn bản từ tr&ái sang phải - Ri&ght to Left Block Khối văn bản từ ph&ải sang trái - &Tools Cô&ng cụ - &Find... Tì&m kiếm... - Find &Next Tìm tiế&p theo - Find Pre&vious Tìm tr&ước đó - &Replace... Th&ay thế... - Ctrl+R Ctrl+R - Smart &Quotes Trích dẫn thô&ng minh: - Update &Document Cập nhật tà&i liệu - Update Document Smart Quotes - Update &Selection Cập nhật v&ùng lựa chọn - Update Selection Smart Quotes - &Spelling... Kiểm tr&a lỗi chính tả... - F7 F7 - Set &Language... - &Timers... B&ộ đếm thời gian - S&ymbols... Biể&u tượng... - &Daily Progress - &Settings Thiế&t lập - Show &Toolbar Hiển thị th&anh công cụ - Show &Menu Icons Hiển thị biểu tượng men&u - F&ocused Text Tập tr&ung vào văn bản - &Fullscreen Toàn mà&n hình - F11 F11 - Esc Esc - M&inimize T&hu nhỏ - Ctrl+M Ctrl+M - &Themes... G&iao diện... - &Preferences... Tùy biế&n... - Focus Off Tắt phần tập trung - Focus One Line Tập trung vào một dòng văn bản - Focus Three Lines Tập trung vào ba dòng văn bản - &Paragraph &Đoạn văn - Focus Paragraph Tập trung vào đoạn văn - Ctrl+Shift+` - &Help Dịch bởi P&han Anh - Application &Language... Ngôn ngữ hiển th&ị... - Some files were unsupported and could not be opened. Một số tập tin không được hỗ trợ nên sẽ không thể mở được. - &Off T&ắt - One &Line Một D&òng - &Three Lines B&a Dòng - &About Thô&ng tin - About &Qt Thô&ng tin về Qt diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 7a863983..f0ed72f6 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -4,17 +4,14 @@ Alert - Close (%1) 关闭 (%1) - Collapse 折叠 - Expand 展开 @@ -22,12 +19,10 @@ AlertLayer - Dismiss Alert 忽略警告 - Ctrl+D Ctrl+D @@ -35,35 +30,30 @@ DailyProgress - %1% of %Ln minute(s) %1%/%Ln 分钟 - %1% of %Ln word(s) %1%/%Ln 字 - %Ln word(s) %Ln 个字 - %Ln minute(s) %Ln 分钟 - 0% 0% @@ -71,34 +61,28 @@ DailyProgressDialog - Daily Progress 每日进度 - Longest streak 终极目标 - Current streak 当前目标 - N/A 不可用 - %n day(s) %n 天 - %1 &ndash; %2 %1 &n破折号; %2 @@ -106,8 +90,6 @@ DailyProgressLabel - - %1% of daily goal 每日目标的 %1% @@ -115,7 +97,6 @@ DictionaryDialog - Set Language 设置语言 @@ -123,81 +104,62 @@ Document - (Untitled %1) (无标题 %1) - %1 (Read-Only) %1 (只读) - - - - Sorry 抱歉 - Unable to save '%1'. 不能保存 '%1'。 - Save File As 保存文件为 - - Unable to overwrite '%1'. 不能覆盖 '%1'。 - Rename File 重命名文件 - Unable to rename '%1'. 不能重命名 '%1'。 - Reload File? 重新加载文件? - Reload the file '%1' from disk? 重新从磁盘中加载文件 '%1' ? - All unsaved changes will be lost. 未保存的更改将丢失。 - Reload 重新加载 - Untitled %1 无标题 %1 - Question 问题 - Saving as plain text will discard all formatting. Discard formatting? 保存为纯文本将丢弃全部格式。丢弃格式吗? @@ -205,42 +167,34 @@ DocumentWatcher - File Changed 文件已更改 - The file '%1' was changed by another program. 文件 '%1' 已由其他程序更改。 - Do you want to reload the file? 您要重新加载文件吗? - Reload 重新加载 - Ignore 忽略 - File Deleted 文件已删除 - The file %1 was deleted by another program. 文件 %1 已经由其他程序删除。 - Do you want to save or close the file? 您要保存或关闭该文件? @@ -248,7 +202,6 @@ DocxReader - Unable to open archive. 不能打开存档。 @@ -256,86 +209,68 @@ FindDialog - Search for: 搜索: - Replace with: 替换为: - Ignore case 忽略大小写 - Whole words only 全字匹配 - Regular expressions 正则表达式 - Search up 向上搜索 - Search down 向下搜索 - &Find 查找(&F) - &Replace 替换(&R) - Replace &All 替换全部(&A) - Find 查找 - Replace 替换 - Replace %n instance(s)? 替换 %n 个实例? - Question 询问 - - Sorry 抱歉 - - Phrase not found. 没找到词组。 @@ -343,37 +278,30 @@ FormatManager - OpenDocument Text odf文本 - OpenDocument Flat XML OpenDocument 普通 XML - Office Open XML Office Open XML - Rich Text Format RTF 文本格式 - Plain Text 纯文本 - All Files 所有文件 - All Supported Files 所有支持的文件 @@ -381,17 +309,14 @@ Highlighter - Add 添加 - Check Spelling... 检查拼写... - (No suggestions found) (找不到建议) @@ -399,12 +324,10 @@ ImageButton - Open Image 打开图像 - Images(%1) 图像(%1) @@ -412,22 +335,18 @@ LocaleDialog - Select application language: 选择程序语言: - <System Language> <系统语言> - Note 注意 - Please restart this application for the change in language to take effect. 要使语言的变化生效,请重新启动该应用程序。 @@ -435,7 +354,6 @@ OdtReader - Unable to open archive. 无法打开存档 @@ -443,379 +361,298 @@ PreferencesDialog - Preferences 首选项 - General 常规 - Statistics 统计 - Toolbar 工具栏 - Spell Checking 拼写检查 - Select Dictionary 选择词典 - - Sorry 抱歉 - Unable to open archive. 不能打开存档。 - The archive does not contain a usable dictionary. 存档不包含可用的词典。 - - - - Question 询问 - Shortcuts 快捷键 - One or more shortcuts conflict. Do you wish to proceed? 一个或多个快捷键冲突。您要继续吗? - The dictionary "%1" already exists. Do you want to replace it? 词典 "%1" 已经存在。您要替换它吗? - Daily Goal 每日目标 - None - Minutes: 分钟: - - Words: 字数: - Editing 编辑 - Always vertically center 始终垂直居中 - Block insertion cursor 块状光标 - Smooth fonts 平滑字体 - Typewriter sounds 打字机声音 - Smart quotes: 智能引号: - Double 双倍行距 - Single 单线 - Scenes 场景 - Divider: 分隔符: - Saving 保存 - Automatically save changes 自动保存更改 - Remember cursor position 记住光标位置 - Word count 字数 - Page count 页数 - Paragraph count 段落数 - Character count 字符数 - Characters: 字符: - Paragraphs: 段落: - Word Count Algorithm 字数统计规则 - Reset daily progress for today to zero? 将今天的计划进度清零? - Remove current dictionary? 移除当前词典? - Write byte order mark in plain text files 对纯文本文件写入字节顺序标记 - Default format: 默认格式: - User Interface 界面 - Always show scrollbar 总是显示滚动条 - Always show top bar 总是显示置顶栏 - Always show bottom bar 总是显示底边栏 - Reset Today 重置今日 - History 历史 - Remember history 记住历史 - Show streaks 显示目标 - Minimum progress for streaks: 达到目标的最小进度: - Detect word boundaries 探测单词边界 - Divide character count by six 字符数除以6 - Count each letter as a word 将每个字母都计算为一个词 - Page Count Algorithm 页数统计算法 - Style 样式 - Icons Only 仅图标 - Text Only 仅文本 - Text Alongside Icons 文本在图标旁 - Text Under Icons 文本在图标下 - Text Position: 文本位置: - Actions 动作 - Move Up 上移 - Move Down 下移 - Add Separator 添加分隔符 - Command 命令 - Shortcut 快捷键 - Action 动作 - Check spelling as you type 输入时检查拼写 - Ignore words in UPPERCASE 忽略大写单词 - Ignore words with numbers 忽略带数字的单词 - Language 语言 - - Add 添加 - - Remove 移除 - Personal Dictionary 个人词典 @@ -823,8 +660,6 @@ RtfReader - - Not a supported RTF file. 不支持的RTF文件。 @@ -832,7 +667,6 @@ RtfTokenizer - Unexpectedly reached end of file. 意外地跳到了文件末尾. @@ -840,52 +674,42 @@ SceneList - Ctrl+Shift+Down Ctrl+Shift+Down - Move Scenes Up 向上移动场景 - Ctrl+Shift+Up Ctrl+Shift+Down - Toggle Scene List 打开/关闭场景列表 - Shift+F4 Shift+F4 - Show scene list (%1) 显示场景列表(%1) - Hide scene list (%1) 隐藏场景列表(%1) - Filter 过滤器 - Move Scenes Down 向下移动场景 - Resize scene list 调整场景列表大小 @@ -893,12 +717,6 @@ Session - - - - - - Default 默认 @@ -906,97 +724,78 @@ SessionManager - Manage Sessions 管理会话 - S&essions 会话(&E) - New 新建 - Duplicate 副本 - Rename 重命名 - Delete 删除 - Switch To 切换到 - New Session 新会话 - Duplicate Session 复制会话 - Rename Session 重命名会话 - Question 询问 - Delete selected session? 删除所选会话? - Session name: 会话名称: - Sorry 抱歉 - The requested session name is already in use. 请求的会话名称已在使用中。 - &New... 新建(&N)... - Ctrl+Shift+N Ctrl+Shift+N - &Manage... 管理(&M)... - Ctrl+Shift+M Ctrl+Shift+M @@ -1004,18 +803,14 @@ ShortcutEdit - Clear 清除 - Reset to Default 恢复默认 - - Shortcut: 快捷键: @@ -1023,12 +818,10 @@ SmartQuote - Replacing quotation marks... 更换引号... - Please Wait 请等待 @@ -1036,67 +829,54 @@ SpellChecker - Check Spelling 检查拼写 - &Add 添加(&A) - &Ignore 忽略(&I) - I&gnore All 忽略全部(&g) - &Change 更改(&C) - C&hange All 更改全部(&h) - Not in dictionary: 不在词典中: - Change to: 更改为: - Checking spelling... 检查拼写... - Cancel 取消 - Please wait 请等待 - Continue checking at beginning of file? 从文件开始继续检查? - Spell check complete. 拼写检查完成。 @@ -1104,32 +884,26 @@ SymbolsDialog - Symbols 符号 - Recently used symbols 最近使用过的符号 - All symbols 全部符号 - Details 详情 - Name: 名称: - Insert 插入 @@ -1137,12 +911,10 @@ SymbolsModel - Blocks - Scripts 文字 @@ -1150,7 +922,6 @@ Theme - Untitled %1 无标题 %1 @@ -1158,234 +929,174 @@ ThemeDialog - Name: 名称: - No Image 无图像 - Tiled 平铺 - - Centered 居中 - - Stretched 拉伸 - Scaled 比例 - Zoomed 缩放 - Opacity: 不透明度: - Position: 位置: - Width: 宽度: - Round Text Background Corners 圆滑文字背景边角 - - - Radius: 半径: - Blur Text Background 模糊文字背景 - Text Background Drop Shadow 文字背景阴影 - Vertical Offset: 垂直偏移量: - Margins 页边距 - Window: 窗口: - Page: 页面: - Indent first line 首行缩进 - Above: 段前: - Below: 段后: - Remove 移除 - Edit Theme 编辑主题 - Window Background 窗口背景 - - Type: 类型: - - - - Color: 颜色: - Image: 图像: - - - - - - - - - - pixels 像素 - Left - Text Background 文字背景 - Right - Text 文本 - Font: 字体: - Misspelled: 拼写错误: - Line Spacing 行距 - Single 单线 - 1.5 Lines 1.5 倍行距 - Double 双倍行距 - Proportional 成比例 - Height: 高度: - Paragraph Spacing 段间距 - Tab Width: Tab 宽度: - New Theme 新建主题 @@ -1393,115 +1104,90 @@ ThemeManager - Themes 主题 - Default 默认 - Bitter Skies - Enchantment - Gentle Blues 柔和蓝 - Old School 保守派 - Space Dreams 太空梦 - Spy Games - Tranquility - Writing Desk 写字台 - - New 新建 - - Duplicate 副本 - Custom 自定义 - Edit 编辑 - Delete 删除 - Import 导入 - Export 导出 - Question 询问 - Delete theme '%1'? 删除主题 '%1'? - - Themes (%1) 主题 (%1) - Import Theme 导入主题 - Export Theme 导出主题 @@ -1509,87 +1195,70 @@ Timer - <b>%1</b> - %2 <b>%1</b> - %2 - Question 询问 - Delete timer? 删除定时器? - <b>Words:</b> %L1 <b>单词数:</b> %L1 - <b>Pages:</b> %L1 <b>页数:</b> %L1 - <b>Paragraphs:</b> %L1 <b>段落数:</b> %L1 - <b>Characters:</b> %L1 / %L2 <b>字符数:</b> %L1 / %L2 - Set Delay 设定延迟 - Set Time 设定时间 - Delay: 延迟: - Time: 时间: - HH:mm:ss HH:mm:ss - Alarm 闹铃 - Type: 类型: - Memo: 备忘录: - Edit 编辑 - Delete 删除 @@ -1597,12 +1266,10 @@ TimerDisplay - HH:mm:ss HH:mm:ss - No timers running 无定时器运行 @@ -1610,37 +1277,30 @@ TimerManager - Timers 定时器 - New 新建 - Recent 最近的 - Question 询问 - Cancel editing timers? 取消编辑定时器吗? - +HH:mm:ss +HH:mm:ss - %1 - %2 %1 - %2 @@ -1648,690 +1308,546 @@ Window - Loading themes 载入主题 - Loading sounds 载入声音 - - Untitled 无标题 - Open File 打开文件 - About FocusWriter 关于 FocusWriter - - FocusWriter FocusWriter - A simple fullscreen word processor 一个简洁的全屏文字处理软件 - Copyright &copy; 2008-%1 Graeme Gott 版权 &copy; 2008-%1 Graeme Gott - Released under the <a href=%1>GPL 3</a> license 以 <a href=%1>GPL 3</a> 许可协议发布 - Uses icons from the <a href=%1>Oxygen</a> icon theme 使用 <a href=%1>Oxygen</a> 图标主题 - Used under the <a href=%1>LGPL 3</a> license 遵照 <a href=%1>LGPL 3</a> 许可使用 - - Characters: %L1 / %L2 字符数:%L1 / %L2 - - Pages: %L1 页数:%L1 - - Paragraphs: %L1 段落数:%L1 - - Words: %L1 单词数:%L1 - - Opening %1 正在打开 %1 - (Untitled %1) (无标题 %1) - List all documents 列出所有文档 - Switch to Next Document 跳转到下一文档 - Switch to Previous Document 跳转到上一文档 - Switch to First Document 跳转到第一个文档 - Switch to Last Document 跳转到最后一个文档 - Switch to Document %1 跳转到文档 %1 - Loading settings 加载设置中 - Emergency cache is not writable. 紧急缓存是不可写的。 - - Warning 警告 - FocusWriter was not shut down cleanly. FocusWriter 没有完全关闭。 - Restore from the emergency cache? 从紧急缓存中还原? - Some files could not be opened. 有些文件无法打开。 - Some files were opened Read-Only. 一些文件以只读方式打开。 - '%1' is newer than the cached copy. '%1' 比缓存的副本新。 - Overwrite newer file? 覆盖较新的文件? - Save Changes? 保存更改? - Save changes to the file '%1' before closing? 在关闭之前保存文件 '%1' ? - Your changes will be lost if you don't save them. 如果你选择不保存,所有更改都会丢失。 - Unable to load typewriter sounds. 无法加载打字机声音。 - &File 文件(&F) - &New 新建(&N) - &Open... 打开(&O)... - Reloa&d 重新载入(&d) - &Save 保存(&S) - Save &As... 另存为(&A)... - &Rename... 重命名(&R)... - Save A&ll 全部保存(&L) - Manage Sessions 管理会话 - New Session 新会话 - &Print... 打印(&P)... - Pa&ge Setup... 页面设置.(&g).. - &Close 关闭(&C) - &Quit 退出(&Q) - Ctrl+Q Ctrl+Q - &Edit 编辑(&E) - &Undo 撤销(&U) - &Redo 重做(&R) - Cu&t 剪切(&T) - &Copy 复制(&C) - &Paste 粘贴(&P) - Paste &Unformatted 无格式粘贴(&U) - Ctrl+Shift+V Ctrl+Shift+V - Select &All 全选(&A) - Select &Scene 选择场景(&S) - Ctrl+Shift+A Ctrl+Shift+A - Fo&rmat 格式(&R) - &Heading 标题(&H) - Heading &1 标题 &1 - Heading &2 标题 &2 - Heading &3 标题 &3 - Heading &4 标题 &4 - Heading &5 标题 &5 - Heading &6 标题 &6 - &Normal 普通 (&N) - &Bold 粗体(&B) - &Italic 斜体(&I) - &Underline 下划线(&U) - Stri&kethrough 删除线(&K) - Ctrl+K Ctrl+K - Sup&erscript 上标(&E) - Ctrl+^ Ctrl+^ - &Subscript 下标(&S) - Ctrl+_ Ctrl+_ - Align &Left 左对齐(&L) - Ctrl+{ Ctrl+{ - Align &Center 居中(&C) - Ctrl+| Ctrl+| - Align &Right 右对齐(&R) - Ctrl+} Ctrl+} - Align &Justify 两端对齐(&J) - Ctrl+J Ctrl+J - &Decrease Indent 减少缩进(&D) - Ctrl+< Ctrl+< - I&ncrease Indent 增加缩进(&N) - Ctrl+> Ctrl+> - Le&ft to Right Block 从左到右(&F) - Ri&ght to Left Block 从右到左 (&G) - &Tools 工具(&T) - &Find... 查找(&F)... - Find &Next 查找下一个(&N) - Find Pre&vious 查找上一个(&V) - &Replace... 替换(&R)... - Ctrl+R Ctrl+R - Smart &Quotes 智能引号(&Q) - Update &Document 更新文档(&D) - Update Document Smart Quotes - Update &Selection 更新所选(&S) - Update Selection Smart Quotes - &Spelling... 拼写(&S)... - F7 F7 - Set &Language... 设置语言(&L) - &Timers... 定时器(&T)... - S&ymbols... 符号...(&y) - &Daily Progress 每日进度(&D) - &Settings 设置(&S) - Show &Toolbar 显示工具栏(&T) - Show &Menu Icons 显示菜单图标(&M) - F&ocused Text 聚焦文本(&F) - &Fullscreen 全屏(&F) - F11 F11 - Esc Esc - M&inimize 最小化(&I) - Ctrl+M Ctrl+M - &Themes... 主题(&T)... - &Preferences... 偏好设置(&P)... - Focus Off 关闭聚焦 - Focus One Line 聚焦一行 - Focus Three Lines 聚焦三行 - &Paragraph 段落(&P) - Focus Paragraph 聚焦段落 - Ctrl+Shift+` Ctrl+Shift+` - &Help 帮助(&H) - Application &Language... 程序语言(&L)... - Some files were unsupported and could not be opened. 某些文件不受支持,不能打开。 - &Off 关闭(&O) - One &Line 单行(&L) - &Three Lines 三行(&T) - &About 关于(&A) - About &Qt 关于 &Qt From 7133c9a142a29ac05673da4bd108f28f275d5ca7 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 2 Oct 2016 12:57:47 -0400 Subject: [PATCH 316/630] Clean up commands for generating qm files. --- focuswriter.pro | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/focuswriter.pro b/focuswriter.pro index a6254f1d..0c382e84 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -215,15 +215,12 @@ SOURCES += src/action_manager.cpp \ src/spelling/highlighter.cpp \ src/spelling/spell_checker.cpp -# Allow for updating translations +# Generate translations TRANSLATIONS = $$files(translations/focuswriter_*.ts) -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} +qtPrepareTool(LRELEASE, lrelease) updateqm.input = TRANSLATIONS updateqm.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm -updateqm.commands = $$QMAKE_LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm +updateqm.commands = $$LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} updateqm.CONFIG += no_link target_predeps QMAKE_EXTRA_COMPILERS += updateqm From d6be5902f12defaf31e93fd997fdfa369c4a7258 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 5 Oct 2016 11:05:46 -0400 Subject: [PATCH 317/630] Sync translations with Transifex. --- translations/focuswriter_it.ts | 2 +- translations/focuswriter_sv.ts | 4 ++-- translations/focuswriter_uk.ts | 28 ++++++++++++++-------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index ec7a81fe..4726bf95 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -1851,7 +1851,7 @@ &About - &Informazioni su + &Informazioni su FocusWriter About &Qt diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index cdcea7d5..802a1c4b 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Uppdatera dokument smarta citationstecken Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Uptatera markering smarta citationstecken &Spelling... diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 58ca519a..ffdc4e83 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -526,7 +526,7 @@ Remove current dictionary? - + Видалити поточний словник? Write byte order mark in plain text files @@ -538,19 +538,19 @@ User Interface - + Інтерфейс користувача Always show scrollbar - + Завжди відображати прокрутку Always show top bar - + Завжди відображати верхню панель Always show bottom bar - + Завжди відображати нижню панель Reset Today @@ -1106,7 +1106,7 @@ Tab Width: - Ширина вкладки + Ширина вкладки: New Theme @@ -1125,11 +1125,11 @@ Bitter Skies - + Різкі небеса Enchantment - + Чарівність Gentle Blues @@ -1145,11 +1145,11 @@ Spy Games - + Шпигунські ігри Tranquility - + Спокій Writing Desk @@ -1441,7 +1441,7 @@ '%1' is newer than the cached copy. - '%1' новіше резервної копії + '%1' новіше резервної копії. Overwrite newer file? @@ -1509,7 +1509,7 @@ Pa&ge Setup... - + Налаштування сто&рінки... &Close @@ -1749,7 +1749,7 @@ Set &Language... - Встановити &мову + Встановити &мову... &Timers... @@ -1829,7 +1829,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help From 0e6be92f0eea2a1171702177dff175df35f427cb Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 7 Oct 2016 16:51:44 -0400 Subject: [PATCH 318/630] FIXED: Did not install translations in Linux. --- focuswriter.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/focuswriter.pro b/focuswriter.pro index 0c382e84..9a6acb47 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -281,6 +281,7 @@ macx { qm.files = translations/*.qm qm.path = $$DATADIR/focuswriter/translations + qm.CONFIG += no_check_exist sounds.files = resources/sounds/* sounds.path = $$DATADIR/focuswriter/sounds From b3db4502d60b28dfcf91d0e1741f6071e1732c39 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 12 Oct 2016 08:21:52 -0400 Subject: [PATCH 319/630] FIXED: Focused text did not handle first-line indent. --- src/document.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/document.cpp b/src/document.cpp index 1a3b7e42..5df2dbc0 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1166,8 +1166,8 @@ void Document::focusText() break; case 2: // Current line and previous two lines - selection.cursor.movePosition(QTextCursor::StartOfLine); selection.cursor.movePosition(QTextCursor::Up); + selection.cursor.movePosition(QTextCursor::StartOfLine); selection.cursor.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor, 2); selection.cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); break; From e56bc9f9cb5d18fedb990b3df6dd2204c3aa1c90 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 13 Oct 2016 05:36:12 -0400 Subject: [PATCH 320/630] Sync translations with Transifex. --- translations/focuswriter_nl.ts | 4 ++-- translations/focuswriter_uk.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index a6fc3266..5d1e14a6 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -1723,7 +1723,7 @@ Update Document Smart Quotes - + Bijwerken slimme quotes document Update &Selection @@ -1731,7 +1731,7 @@ Update Selection Smart Quotes - + Bijwerken slimme quotes selectie &Spelling... diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index ffdc4e83..7e53b9b1 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -295,7 +295,7 @@ OpenDocument Flat XML - + Відкрити документ Flat XML Office Open XML @@ -534,7 +534,7 @@ Default format: - Формат за замовчуванням: + Формат типово: User Interface @@ -820,7 +820,7 @@ Reset to Default - Скинути до значень за замовчуванням + Скинути до типових значень Shortcut: @@ -1121,7 +1121,7 @@ Default - За замовчуванням + Типово Bitter Skies @@ -1693,7 +1693,7 @@ Ri&ght to Left Block - Фрагмент справа нал&іво + Фрагмент зправа нал&іво &Tools From 954cf511e5d3270fa64afe5dcab169a462a51527 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 13 Oct 2016 05:37:59 -0400 Subject: [PATCH 321/630] Bump version number. --- NEWS | 7 +++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 96887aad..6b1950be 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +1.6.2 +----- +* Generate binary translations at build time. +* FIXED: Focused text did not handle first-line indent. +* FIXED: Was not properly loading Qt translations. +* Translation updates: Armenian, Dutch, Italian, Lithuanian, Portuguese (Brazil), Romanian, Swedish, Ukrainian. + 1.6.1 ----- * FIXED: Incorrectly handled non-heading text in OOXML. diff --git a/focuswriter.pro b/focuswriter.pro index 9a6acb47..ab52ed32 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.6.1 +VERSION = 1.6.2 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index 9322b357..d252e818 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.1' +VERSION='1.6.2' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 41304942..1c3ecb15 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 1 +!define VERSIONPATCH 2 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index 44af5e03..c308c3f7 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.1 +SET VERSION=1.6.2 ECHO Copying executable MKDIR %APP% From 87dac1aca63338814c865e9177d29603d2296127 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 13 Oct 2016 08:19:51 -0400 Subject: [PATCH 322/630] Use build system to generate translations. --- debian/rules | 4 ---- 1 file changed, 4 deletions(-) diff --git a/debian/rules b/debian/rules index 189fcaba..59c32f41 100755 --- a/debian/rules +++ b/debian/rules @@ -9,9 +9,5 @@ include /usr/share/dpkg/buildflags.mk %: dh $@ --parallel -override_dh_auto_build: - lrelease focuswriter.pro # (re)generate translations/*.qm - dh_auto_build - override_dh_installchangelogs: dh_installchangelogs NEWS From d5b07b412869a138bfdb799e335184c805ba0dc1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 13 Oct 2016 08:21:39 -0400 Subject: [PATCH 323/630] Log changes. --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 590db172..03fcac0f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +focuswriter (1.6.2-1) unstable; urgency=medium + + * New upstream release + * Use build system to generate translations + + -- Graeme Gott Thu, 13 Oct 2016 12:20:12 +0000 + focuswriter (1.6.1-1) unstable; urgency=medium [ Graeme Gott ] From 19b501da355ed68e88128e5094b14e79c6d4a44d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sat, 29 Oct 2016 09:48:38 -0400 Subject: [PATCH 324/630] Sync translations with Transifex. --- translations/focuswriter_zh_CN.ts | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index f0ed72f6..2a4c47ce 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -117,7 +117,7 @@ Unable to save '%1'. - 不能保存 '%1'。 + 无法保存 '%1'。 Save File As @@ -125,7 +125,7 @@ Unable to overwrite '%1'. - 不能覆盖 '%1'。 + 无法覆盖 '%1'。 Rename File @@ -133,7 +133,7 @@ Unable to rename '%1'. - 不能重命名 '%1'。 + 无法重命名 '%1'。 Reload File? @@ -161,7 +161,7 @@ Saving as plain text will discard all formatting. Discard formatting? - 保存为纯文本将丢弃全部格式。丢弃格式吗? + 保存为纯文本将丢弃全部格式。是否要丢弃格式? @@ -172,7 +172,7 @@ The file '%1' was changed by another program. - 文件 '%1' 已由其他程序更改。 + 文件 '%1' 已被其他程序更改。 Do you want to reload the file? @@ -192,18 +192,18 @@ The file %1 was deleted by another program. - 文件 %1 已经由其他程序删除。 + 文件 %1 已被其他程序删除。 Do you want to save or close the file? - 您要保存或关闭该文件? + 您是否要保存或关闭该文件? DocxReader Unable to open archive. - 不能打开存档。 + 无法打开存档。 @@ -348,7 +348,7 @@ Please restart this application for the change in language to take effect. - 要使语言的变化生效,请重新启动该应用程序。 + 要使语言的变化生效,请重新启动本程序。 @@ -390,7 +390,7 @@ Unable to open archive. - 不能打开存档。 + 无法打开存档。 The archive does not contain a usable dictionary. @@ -1113,11 +1113,11 @@ Bitter Skies - + 愤怒的天神 Enchantment - + 魔幻之境 Gentle Blues @@ -1133,15 +1133,15 @@ Spy Games - + 谍战 Tranquility - + 静谧的云端 Writing Desk - 写字台 + 书桌 New @@ -1661,7 +1661,7 @@ &Decrease Indent - 减少缩进(&D) + 减小缩进(&D) Ctrl+< @@ -1669,7 +1669,7 @@ I&ncrease Indent - 增加缩进(&N) + 增大缩进(&N) Ctrl+> @@ -1717,7 +1717,7 @@ Update Document Smart Quotes - + 将文档中所有引号更新为智能引号 Update &Selection @@ -1725,7 +1725,7 @@ Update Selection Smart Quotes - + 将选中的引号更新为智能引号 &Spelling... @@ -1829,7 +1829,7 @@ Some files were unsupported and could not be opened. - 某些文件不受支持,不能打开。 + 某些文件不受支持,无法打开。 &Off From 7c9361a8c7f9e3f30800717b71b9f1775b397fe9 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 27 Nov 2016 04:59:22 -0500 Subject: [PATCH 325/630] FIXED: Possible delay on start when creating non-native printer. --- src/stack.cpp | 30 +++++++++++++++++++----------- src/stack.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/stack.cpp b/src/stack.cpp index b7a6d240..2b7e763a 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -55,6 +55,7 @@ Stack::Stack(QWidget* parent) : QWidget(parent), m_symbols_dialog(0), + m_printer(0), m_current_document(0), m_footer_margin(0), m_header_margin(0), @@ -78,17 +79,6 @@ Stack::Stack(QWidget* parent) : m_find_dialog = new FindDialog(this); connect(m_find_dialog, SIGNAL(findNextAvailable(bool)), this, SIGNAL(findNextAvailable(bool))); - m_printer = new QPrinter(QPrinter::HighResolution); -#if (QT_VERSION >= QT_VERSION_CHECK(5,3,0)) - m_printer->setPageSize(QPageSize(QPageSize::Letter)); - m_printer->setPageOrientation(QPageLayout::Portrait); - m_printer->setPageMargins(QMarginsF(1.0, 1.0, 1.0, 1.0), QPageLayout::Inch); -#else - m_printer->setPageSize(QPrinter::Letter); - m_printer->setOrientation(QPrinter::Portrait); - m_printer->setPageMargins(1.0, 1.0, 1.0, 1.0, QPrinter::Inch); -#endif - connect(ActionManager::instance(), SIGNAL(insertText(QString)), this, SLOT(insertSymbol(QString))); m_layout = new QGridLayout(this); @@ -397,6 +387,7 @@ void Stack::pasteUnformatted() void Stack::pageSetup() { + initPrinter(); QPageSetupDialog dialog(m_printer, this); dialog.exec(); } @@ -405,6 +396,7 @@ void Stack::pageSetup() void Stack::print() { + initPrinter(); m_current_document->print(m_printer); } @@ -835,3 +827,19 @@ void Stack::updateMenuIndexes() } //----------------------------------------------------------------------------- + +void Stack::initPrinter() +{ + m_printer = new QPrinter(QPrinter::HighResolution); +#if (QT_VERSION >= QT_VERSION_CHECK(5,3,0)) + m_printer->setPageSize(QPageSize(QPageSize::Letter)); + m_printer->setPageOrientation(QPageLayout::Portrait); + m_printer->setPageMargins(QMarginsF(1.0, 1.0, 1.0, 1.0), QPageLayout::Inch); +#else + m_printer->setPageSize(QPrinter::Letter); + m_printer->setOrientation(QPrinter::Portrait); + m_printer->setPageMargins(1.0, 1.0, 1.0, 1.0, QPrinter::Inch); +#endif +} + +//----------------------------------------------------------------------------- diff --git a/src/stack.h b/src/stack.h index 1bf0c631..f836fbc5 100644 --- a/src/stack.h +++ b/src/stack.h @@ -140,6 +140,7 @@ private slots: #if (QT_VERSION < QT_VERSION_CHECK(5,6,0)) qreal devicePixelRatioF() const { return devicePixelRatio(); } #endif + void initPrinter(); private: AlertLayer* m_alerts; From 965aba7e84c68c412a272cb675f1f318c757666d Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 27 Nov 2016 07:15:48 -0500 Subject: [PATCH 326/630] FIXED: Memory leak from creating multiple printers. --- src/stack.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/stack.cpp b/src/stack.cpp index 2b7e763a..6823ed0a 100644 --- a/src/stack.cpp +++ b/src/stack.cpp @@ -830,6 +830,10 @@ void Stack::updateMenuIndexes() void Stack::initPrinter() { + if (m_printer) { + return; + } + m_printer = new QPrinter(QPrinter::HighResolution); #if (QT_VERSION >= QT_VERSION_CHECK(5,3,0)) m_printer->setPageSize(QPageSize(QPageSize::Letter)); From 566f6ef53f4e82c5f2833156071951a5b582e8c8 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 29 Nov 2016 07:45:57 -0500 Subject: [PATCH 327/630] FIXED: Line spacing was ignored when pasting in new documents. --- src/document.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/document.cpp b/src/document.cpp index 5df2dbc0..23ecc6b8 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -176,8 +176,12 @@ namespace } QTextDocument document; + QTextCursor cursor(&document); + cursor.mergeBlockFormat(textCursor().blockFormat()); int formats = document.allFormats().size(); - QTextCursor cursor = m_document->isRichText() ? textCursor() : QTextCursor(&document); + if (m_document->isRichText()) { + cursor = textCursor(); + } QByteArray richtext; if (source->hasFormat(QLatin1String("application/vnd.oasis.opendocument.text"))) { @@ -896,6 +900,7 @@ void Document::loadTheme(const Theme& theme) m_text->document()->setModified(false); m_spacings_loaded = true; } + m_text->setTabStopWidth(tab_width); m_text->document()->setIndentWidth(tab_width); From 267d84a597347f9e11f5fc34a7fc861d8b6e4ebc Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 30 Nov 2016 09:00:11 -0500 Subject: [PATCH 328/630] FIXED: Pasting text always made document rich text. --- src/fileformats/odt_reader.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/fileformats/odt_reader.cpp b/src/fileformats/odt_reader.cpp index ac2360c3..22e0aabb 100644 --- a/src/fileformats/odt_reader.cpp +++ b/src/fileformats/odt_reader.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2011, 2012, 2013, 2014, 2015 Graeme Gott + * Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -289,8 +289,6 @@ void OdtReader::readStyleTextProperties(QTextCharFormat& format) if (attributes.hasAttribute(QLatin1String("fo:font-weight"))) { if (attributes.value(QLatin1String("fo:font-weight")) == "bold") { format.setFontWeight(QFont::Bold); - } else { - format.setFontWeight(QFont::Normal); } } From 84a504c8357e9f1d4be62dbb608e52236f7b3869 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 2 Dec 2016 05:38:15 -0500 Subject: [PATCH 329/630] Update hunspell to 1.5.4 --- src/spelling/dictionary_provider_hunspell.cpp | 17 +- src/spelling/hunspell/Makefile.am | 23 +- src/spelling/hunspell/Makefile.in | 122 +- src/spelling/hunspell/affentry.cxx | 236 +- src/spelling/hunspell/affentry.hxx | 68 +- src/spelling/hunspell/affixmgr.cxx | 2802 ++++++++--------- src/spelling/hunspell/affixmgr.hxx | 184 +- src/spelling/hunspell/atypes.hxx | 49 +- src/spelling/hunspell/baseaffix.hxx | 10 +- src/spelling/hunspell/csutil.cxx | 562 +--- src/spelling/hunspell/csutil.hxx | 56 +- src/spelling/hunspell/filemgr.cxx | 32 +- src/spelling/hunspell/filemgr.hxx | 14 +- src/spelling/hunspell/hashmgr.cxx | 613 ++-- src/spelling/hunspell/hashmgr.hxx | 44 +- src/spelling/hunspell/htypes.hxx | 4 +- src/spelling/hunspell/hunspell.cxx | 1266 ++++---- src/spelling/hunspell/hunspell.h | 4 +- src/spelling/hunspell/hunspell.hxx | 125 +- src/spelling/hunspell/hunvisapi.h | 4 +- src/spelling/hunspell/hunvisapi.h.in | 4 +- src/spelling/hunspell/hunzip.cxx | 50 +- src/spelling/hunspell/hunzip.hxx | 13 +- src/spelling/hunspell/langnum.hxx | 6 +- src/spelling/hunspell/phonet.cxx | 31 +- src/spelling/hunspell/phonet.hxx | 8 +- src/spelling/hunspell/replist.cxx | 152 +- src/spelling/hunspell/replist.hxx | 20 +- src/spelling/hunspell/suggestmgr.cxx | 907 +++--- src/spelling/hunspell/suggestmgr.hxx | 101 +- src/spelling/hunspell/w_char.hxx | 12 +- 31 files changed, 3489 insertions(+), 4050 deletions(-) diff --git a/src/spelling/dictionary_provider_hunspell.cpp b/src/spelling/dictionary_provider_hunspell.cpp index e9ab311d..86a9366d 100644 --- a/src/spelling/dictionary_provider_hunspell.cpp +++ b/src/spelling/dictionary_provider_hunspell.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Graeme Gott + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -167,7 +167,11 @@ QStringRef DictionaryHunspell::check(const QString& string, int start_at) const QStringRef check(&string, index, length); QString word = check.toString(); word.replace(QChar(0x2019), QLatin1Char('\'')); +#ifdef H_DEPRECATED + if (!m_dictionary->spell(m_codec->fromUnicode(word).toStdString())) { +#else if (!m_dictionary->spell(m_codec->fromUnicode(word).constData())) { +#endif return check; } } @@ -188,6 +192,16 @@ QStringList DictionaryHunspell::suggestions(const QString& word) const QStringList result; QString check = word; check.replace(QChar(0x2019), QLatin1Char('\'')); +#ifdef H_DEPRECATED + const auto suggestions = m_dictionary->suggest(m_codec->fromUnicode(check).toStdString()); + for (const auto& suggestion : suggestions) { + QString word = m_codec->toUnicode(suggestion.c_str()); + if (SmartQuotes::isEnabled()) { + SmartQuotes::replace(word); + } + result.append(word); + } +#else char** suggestions = 0; int count = m_dictionary->suggest(&suggestions, m_codec->fromUnicode(check).constData()); if (suggestions != 0) { @@ -200,6 +214,7 @@ QStringList DictionaryHunspell::suggestions(const QString& word) const } m_dictionary->free_list(&suggestions, count); } +#endif return result; } diff --git a/src/spelling/hunspell/Makefile.am b/src/spelling/hunspell/Makefile.am index 762c73b8..25769459 100644 --- a/src/spelling/hunspell/Makefile.am +++ b/src/spelling/hunspell/Makefile.am @@ -1,18 +1,19 @@ -lib_LTLIBRARIES = libhunspell-1.4.la -libhunspell_1_4_includedir = $(includedir)/hunspell -libhunspell_1_4_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ +lib_LTLIBRARIES = libhunspell-1.5.la +libhunspell_1_5_includedir = $(includedir)/hunspell +libhunspell_1_5_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \ hashmgr.cxx hunspell.cxx \ suggestmgr.cxx license.myspell license.hunspell \ - phonet.cxx filemgr.cxx hunzip.cxx replist.cxx + phonet.cxx filemgr.cxx hunzip.cxx replist.cxx \ + affentry.hxx htypes.hxx affixmgr.hxx \ + csutil.hxx atypes.hxx suggestmgr.hxx \ + baseaffix.hxx hashmgr.hxx langnum.hxx \ + phonet.hxx filemgr.hxx hunzip.hxx replist.hxx -libhunspell_1_4_include_HEADERS=affentry.hxx htypes.hxx affixmgr.hxx \ - csutil.hxx hunspell.hxx atypes.hxx hunspell.h \ - suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \ - phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx replist.hxx \ - hunvisapi.h +libhunspell_1_5_include_HEADERS=hunspell.hxx hunspell.h hunvisapi.h \ + w_char.hxx atypes.hxx csutil.hxx htypes.hxx -libhunspell_1_4_la_DEPENDENCIES=utf_info.cxx -libhunspell_1_4_la_LDFLAGS=-no-undefined +libhunspell_1_5_la_DEPENDENCIES=utf_info.cxx +libhunspell_1_5_la_LDFLAGS=-no-undefined AM_CXXFLAGS=$(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL diff --git a/src/spelling/hunspell/Makefile.in b/src/spelling/hunspell/Makefile.in index b394a800..184ca6e0 100644 --- a/src/spelling/hunspell/Makefile.in +++ b/src/spelling/hunspell/Makefile.in @@ -89,15 +89,14 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -target_triplet = @target@ subdir = src/hunspell ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ - $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \ - $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ - $(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \ - $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \ - $(top_srcdir)/m4/inttypes-pri.m4 \ + $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ + $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ @@ -107,12 +106,13 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ - $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ - $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ + $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libhunspell_1_4_include_HEADERS) \ +DIST_COMMON = $(srcdir)/Makefile.am $(libhunspell_1_5_include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h @@ -146,20 +146,20 @@ am__uninstall_files_from_dir = { \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(libhunspell_1_4_includedir)" + "$(DESTDIR)$(libhunspell_1_5_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) -libhunspell_1_4_la_LIBADD = -am_libhunspell_1_4_la_OBJECTS = affentry.lo affixmgr.lo csutil.lo \ +libhunspell_1_5_la_LIBADD = +am_libhunspell_1_5_la_OBJECTS = affentry.lo affixmgr.lo csutil.lo \ hashmgr.lo hunspell.lo suggestmgr.lo phonet.lo filemgr.lo \ hunzip.lo replist.lo -libhunspell_1_4_la_OBJECTS = $(am_libhunspell_1_4_la_OBJECTS) +libhunspell_1_5_la_OBJECTS = $(am_libhunspell_1_5_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = -libhunspell_1_4_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ +libhunspell_1_5_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(libhunspell_1_4_la_LDFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(libhunspell_1_5_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -195,14 +195,32 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = -SOURCES = $(libhunspell_1_4_la_SOURCES) -DIST_SOURCES = $(libhunspell_1_4_la_SOURCES) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libhunspell_1_5_la_SOURCES) +DIST_SOURCES = $(libhunspell_1_5_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -HEADERS = $(libhunspell_1_4_include_HEADERS) +HEADERS = $(libhunspell_1_5_include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -269,6 +287,7 @@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ @@ -284,6 +303,7 @@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ +INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ @@ -306,7 +326,9 @@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ @@ -347,6 +369,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ @@ -380,7 +403,6 @@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -388,33 +410,31 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -lib_LTLIBRARIES = libhunspell-1.4.la -libhunspell_1_4_includedir = $(includedir)/hunspell -libhunspell_1_4_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \ +lib_LTLIBRARIES = libhunspell-1.5.la +libhunspell_1_5_includedir = $(includedir)/hunspell +libhunspell_1_5_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \ hashmgr.cxx hunspell.cxx \ suggestmgr.cxx license.myspell license.hunspell \ - phonet.cxx filemgr.cxx hunzip.cxx replist.cxx + phonet.cxx filemgr.cxx hunzip.cxx replist.cxx \ + affentry.hxx htypes.hxx affixmgr.hxx \ + csutil.hxx atypes.hxx suggestmgr.hxx \ + baseaffix.hxx hashmgr.hxx langnum.hxx \ + phonet.hxx filemgr.hxx hunzip.hxx replist.hxx -libhunspell_1_4_include_HEADERS = affentry.hxx htypes.hxx affixmgr.hxx \ - csutil.hxx hunspell.hxx atypes.hxx hunspell.h \ - suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \ - phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx replist.hxx \ - hunvisapi.h +libhunspell_1_5_include_HEADERS = hunspell.hxx hunspell.h hunvisapi.h \ + w_char.hxx atypes.hxx csutil.hxx htypes.hxx -libhunspell_1_4_la_DEPENDENCIES = utf_info.cxx -libhunspell_1_4_la_LDFLAGS = -no-undefined +libhunspell_1_5_la_DEPENDENCIES = utf_info.cxx +libhunspell_1_5_la_LDFLAGS = -no-undefined AM_CXXFLAGS = $(CFLAG_VISIBILITY) -DBUILDING_LIBHUNSPELL EXTRA_DIST = hunspell.dsp README utf_info.cxx all: all-am @@ -488,8 +508,8 @@ clean-libLTLIBRARIES: rm -f $${locs}; \ } -libhunspell-1.4.la: $(libhunspell_1_4_la_OBJECTS) $(libhunspell_1_4_la_DEPENDENCIES) $(EXTRA_libhunspell_1_4_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libhunspell_1_4_la_LINK) -rpath $(libdir) $(libhunspell_1_4_la_OBJECTS) $(libhunspell_1_4_la_LIBADD) $(LIBS) +libhunspell-1.5.la: $(libhunspell_1_5_la_OBJECTS) $(libhunspell_1_5_la_DEPENDENCIES) $(EXTRA_libhunspell_1_5_la_DEPENDENCIES) + $(AM_V_CXXLD)$(libhunspell_1_5_la_LINK) -rpath $(libdir) $(libhunspell_1_5_la_OBJECTS) $(libhunspell_1_5_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -534,27 +554,27 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -install-libhunspell_1_4_includeHEADERS: $(libhunspell_1_4_include_HEADERS) +install-libhunspell_1_5_includeHEADERS: $(libhunspell_1_5_include_HEADERS) @$(NORMAL_INSTALL) - @list='$(libhunspell_1_4_include_HEADERS)'; test -n "$(libhunspell_1_4_includedir)" || list=; \ + @list='$(libhunspell_1_5_include_HEADERS)'; test -n "$(libhunspell_1_5_includedir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libhunspell_1_4_includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libhunspell_1_4_includedir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(libhunspell_1_5_includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libhunspell_1_5_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libhunspell_1_4_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libhunspell_1_4_includedir)" || exit $$?; \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libhunspell_1_5_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libhunspell_1_5_includedir)" || exit $$?; \ done -uninstall-libhunspell_1_4_includeHEADERS: +uninstall-libhunspell_1_5_includeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(libhunspell_1_4_include_HEADERS)'; test -n "$(libhunspell_1_4_includedir)" || list=; \ + @list='$(libhunspell_1_5_include_HEADERS)'; test -n "$(libhunspell_1_5_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libhunspell_1_4_includedir)'; $(am__uninstall_files_from_dir) + dir='$(DESTDIR)$(libhunspell_1_5_includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique @@ -642,7 +662,7 @@ check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libhunspell_1_4_includedir)"; do \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libhunspell_1_5_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -698,7 +718,7 @@ info: info-am info-am: -install-data-am: install-libhunspell_1_4_includeHEADERS +install-data-am: install-libhunspell_1_5_includeHEADERS install-dvi: install-dvi-am @@ -745,7 +765,7 @@ ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_4_includeHEADERS + uninstall-libhunspell_1_5_includeHEADERS .MAKE: install-am install-strip @@ -757,13 +777,13 @@ uninstall-am: uninstall-libLTLIBRARIES \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES \ - install-libhunspell_1_4_includeHEADERS install-man install-pdf \ + install-libhunspell_1_5_includeHEADERS install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ - uninstall-libhunspell_1_4_includeHEADERS + uninstall-libhunspell_1_5_includeHEADERS .PRECIOUS: Makefile diff --git a/src/spelling/hunspell/affentry.cxx b/src/spelling/hunspell/affentry.cxx index bd282743..70b468c0 100644 --- a/src/spelling/hunspell/affentry.cxx +++ b/src/spelling/hunspell/affentry.cxx @@ -79,33 +79,7 @@ #include "affentry.hxx" #include "csutil.hxx" -PfxEntry::PfxEntry(AffixMgr* pmgr, affentry* dp) - // register affix manager - : pmyMgr(pmgr), - next(NULL), - nexteq(NULL), - nextne(NULL), - flgnxt(NULL) { - // set up its initial values - aflag = dp->aflag; // flag - strip = dp->strip; // string to strip - appnd = dp->appnd; // string to append - numconds = dp->numconds; // length of the condition - opts = dp->opts; // cross product flag - // then copy over all of the conditions - if (opts & aeLONGCOND) { - memcpy(c.conds, dp->c.l.conds1, MAXCONDLEN_1); - c.l.conds2 = dp->c.l.conds2; - } else - memcpy(c.conds, dp->c.conds, MAXCONDLEN); - morphcode = dp->morphcode; - contclass = dp->contclass; - contclasslen = dp->contclasslen; -} - -PfxEntry::~PfxEntry() { - aflag = 0; - pmyMgr = NULL; +AffEntry::~AffEntry() { if (opts & aeLONGCOND) free(c.l.conds2); if (morphcode && !(opts & aeALIASM)) @@ -114,17 +88,26 @@ PfxEntry::~PfxEntry() { free(contclass); } +PfxEntry::PfxEntry(AffixMgr* pmgr) + // register affix manager + : pmyMgr(pmgr), + next(NULL), + nexteq(NULL), + nextne(NULL), + flgnxt(NULL) { +} + // add prefix to this word assuming conditions hold -char* PfxEntry::add(const char* word, size_t len) { +std::string PfxEntry::add(const char* word, size_t len) { + std::string result; if ((len > strip.size() || (len == 0 && pmyMgr->get_fullstrip())) && (len >= numconds) && test_condition(word) && (!strip.size() || (strncmp(word, strip.c_str(), strip.size()) == 0))) { /* we have a match so add prefix */ - std::string tword(appnd); - tword.append(word + strip.size()); - return mystrdup(tword.c_str()); + result.assign(appnd); + result.append(word + strip.size()); } - return NULL; + return result; } inline char* PfxEntry::nextchar(char* p) { @@ -276,8 +259,7 @@ struct hentry* PfxEntry::checkword(const char* word, // if ((opts & aeXPRODUCT) && in_compound) { if ((opts & aeXPRODUCT)) { he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, aeXPRODUCT, this, - NULL, 0, NULL, FLAG_NULL, needflag, - in_compound); + FLAG_NULL, needflag, in_compound); if (he) return he; } @@ -291,8 +273,6 @@ struct hentry* PfxEntry::check_twosfx(const char* word, int len, char in_compound, const FLAG needflag) { - struct hentry* he; // hash entry of root word or NULL - // on entry prefix is 0 length or already matches the beginning of the word. // So if the remaining root word has positive length // and if there are enough chars in root word and added back strip chars @@ -324,8 +304,9 @@ struct hentry* PfxEntry::check_twosfx(const char* word, // cross checked combined with a suffix if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - he = pmyMgr->suffix_check_twosfx(tmpword.c_str(), tmpl, aeXPRODUCT, this, - needflag); + // hash entry of root word or NULL + struct hentry* he = pmyMgr->suffix_check_twosfx(tmpword.c_str(), tmpl, aeXPRODUCT, this, + needflag); if (he) return he; } @@ -335,15 +316,15 @@ struct hentry* PfxEntry::check_twosfx(const char* word, } // check if this prefix entry matches -char* PfxEntry::check_twosfx_morph(const char* word, - int len, - char in_compound, - const FLAG needflag) { +std::string PfxEntry::check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + std::string result; // on entry prefix is 0 length or already matches the beginning of the word. // So if the remaining root word has positive length // and if there are enough chars in root word and added back strip chars // to meet the number of characters conditions, then test it - int tmpl = len - appnd.size(); // length of tmpword if ((tmpl > 0 || (tmpl == 0 && pmyMgr->get_fullstrip())) && @@ -370,22 +351,21 @@ char* PfxEntry::check_twosfx_morph(const char* word, // ross checked combined with a suffix if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - return pmyMgr->suffix_check_twosfx_morph(tmpword.c_str(), tmpl, - aeXPRODUCT, - this, needflag); + result = pmyMgr->suffix_check_twosfx_morph(tmpword.c_str(), tmpl, + aeXPRODUCT, + this, needflag); } } } - return NULL; + return result; } // check if this prefix entry matches -char* PfxEntry::check_morph(const char* word, - int len, - char in_compound, - const FLAG needflag) { - struct hentry* he; // hash entry of root word or NULL - char* st; +std::string PfxEntry::check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + std::string result; // on entry prefix is 0 length or already matches the beginning of the word. // So if the remaining root word has positive length @@ -411,9 +391,8 @@ char* PfxEntry::check_morph(const char* word, // root word in the dictionary if (test_condition(tmpword.c_str())) { - std::string result; - tmpl += strip.size(); + struct hentry* he; // hash entry of root word or NULL if ((he = pmyMgr->lookup(tmpword.c_str())) != NULL) { do { if (TESTAFF(he->astr, aflag, he->alen) && @@ -455,23 +434,19 @@ char* PfxEntry::check_morph(const char* word, // ross checked combined with a suffix if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) { - st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, aeXPRODUCT, this, - FLAG_NULL, needflag); - if (st) { + std::string st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, aeXPRODUCT, this, + FLAG_NULL, needflag); + if (!st.empty()) { result.append(st); - free(st); } } - - if (!result.empty()) - return mystrdup(result.c_str()); } } - return NULL; + return result; } -SfxEntry::SfxEntry(AffixMgr* pmgr, affentry* dp) +SfxEntry::SfxEntry(AffixMgr* pmgr) : pmyMgr(pmgr) // register affix manager , next(NULL), @@ -481,50 +456,21 @@ SfxEntry::SfxEntry(AffixMgr* pmgr, affentry* dp) l_morph(NULL), r_morph(NULL), eq_morph(NULL) { - // set up its initial values - aflag = dp->aflag; // char flag - strip = dp->strip; // string to strip - appnd = dp->appnd; // string to append - numconds = dp->numconds; // length of the condition - opts = dp->opts; // cross product flag - - // then copy over all of the conditions - if (opts & aeLONGCOND) { - memcpy(c.l.conds1, dp->c.l.conds1, MAXCONDLEN_1); - c.l.conds2 = dp->c.l.conds2; - } else - memcpy(c.conds, dp->c.conds, MAXCONDLEN); - rappnd = appnd; - reverseword(rappnd); - morphcode = dp->morphcode; - contclass = dp->contclass; - contclasslen = dp->contclasslen; -} - -SfxEntry::~SfxEntry() { - aflag = 0; - pmyMgr = NULL; - if (opts & aeLONGCOND) - free(c.l.conds2); - if (morphcode && !(opts & aeALIASM)) - free(morphcode); - if (contclass && !(opts & aeALIASF)) - free(contclass); } // add suffix to this word assuming conditions hold -char* SfxEntry::add(const char* word, size_t len) { +std::string SfxEntry::add(const char* word, size_t len) { + std::string result; /* make sure all conditions match */ if ((len > strip.size() || (len == 0 && pmyMgr->get_fullstrip())) && (len >= numconds) && test_condition(word + len, word) && (!strip.size() || (strcmp(word + len - strip.size(), strip.c_str()) == 0))) { - std::string tword(word); + result.assign(word); /* we have a match so add suffix */ - tword.replace(len - strip.size(), std::string::npos, appnd); - return mystrdup(tword.c_str()); + result.replace(len - strip.size(), std::string::npos, appnd); } - return NULL; + return result; } inline char* SfxEntry::nextchar(char* p) { @@ -669,9 +615,6 @@ struct hentry* SfxEntry::checkword(const char* word, int len, int optflags, PfxEntry* ppfx, - char** wlst, - int maxSug, - int* ns, const FLAG cclass, const FLAG needflag, const FLAG badflag) { @@ -742,27 +685,6 @@ struct hentry* SfxEntry::checkword(const char* word, return he; he = he->next_homonym; // check homonyms } while (he); - - // obsolote stemming code (used only by the - // experimental SuffixMgr:suggest_pos_stems) - // store resulting root in wlst - } else if (wlst && (*ns < maxSug)) { - int cwrd = 1; - for (int k = 0; k < *ns; k++) - if (strcmp(tmpword, wlst[k]) == 0) { - cwrd = 0; - break; - } - if (cwrd) { - wlst[*ns] = mystrdup(tmpword); - if (wlst[*ns] == NULL) { - for (int j = 0; j < *ns; j++) - free(wlst[j]); - *ns = -1; - return NULL; - } - (*ns)++; - } } } } @@ -775,7 +697,6 @@ struct hentry* SfxEntry::check_twosfx(const char* word, int optflags, PfxEntry* ppfx, const FLAG needflag) { - struct hentry* he; // hash entry pointer PfxEntry* ep = ppfx; // if this suffix is being cross checked with a prefix @@ -813,17 +734,18 @@ struct hentry* SfxEntry::check_twosfx(const char* word, // if all conditions are met then recall suffix_check if (test_condition(end, beg)) { + struct hentry* he; // hash entry pointer if (ppfx) { // handle conditional suffix if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) - he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, NULL, 0, NULL, - (FLAG)aflag, needflag); + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, + (FLAG)aflag, needflag, IN_CPD_NOT); else - he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, optflags, ppfx, NULL, 0, - NULL, (FLAG)aflag, needflag); + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, optflags, ppfx, + (FLAG)aflag, needflag, IN_CPD_NOT); } else { - he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, NULL, 0, NULL, - (FLAG)aflag, needflag); + he = pmyMgr->suffix_check(tmpword.c_str(), tmpl, 0, NULL, + (FLAG)aflag, needflag, IN_CPD_NOT); } if (he) return he; @@ -833,23 +755,20 @@ struct hentry* SfxEntry::check_twosfx(const char* word, } // see if two-level suffix is present in the word -char* SfxEntry::check_twosfx_morph(const char* word, - int len, - int optflags, - PfxEntry* ppfx, - const FLAG needflag) { +std::string SfxEntry::check_twosfx_morph(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag) { PfxEntry* ep = ppfx; - char* st; - - char result[MAXLNLEN]; - *result = '\0'; + std::string result; // if this suffix is being cross checked with a prefix // but it does not support cross products skip it if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0) - return NULL; + return result; // upon entry suffix is 0 length or already matches the end of the word. // So if the remaining root word has positive length @@ -883,40 +802,34 @@ char* SfxEntry::check_twosfx_morph(const char* word, if (ppfx) { // handle conditional suffix if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) { - st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, - needflag); - if (st) { + std::string st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, + needflag); + if (!st.empty()) { if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); + result.append(ppfx->getMorph()); + result.append(" "); } - mystrcat(result, st, MAXLNLEN); - free(st); + result.append(st); mychomp(result); } } else { - st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, optflags, ppfx, aflag, - needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, optflags, ppfx, aflag, + needflag); + if (!st.empty()) { + result.append(st); mychomp(result); } } } else { - st = - pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pmyMgr->suffix_check_morph(tmpword.c_str(), tmpl, 0, NULL, aflag, needflag); + if (!st.empty()) { + result.append(st); mychomp(result); } } - if (*result) - return mystrdup(result); } } - return NULL; + return result; } // get next homonym with same affix @@ -948,6 +861,11 @@ struct hentry* SfxEntry::get_next_homonym(struct hentry* he, return NULL; } +void SfxEntry::initReverseWord() { + rappnd = appnd; + reverseword(rappnd); +} + #if 0 Appendix: Understanding Affix Code diff --git a/src/spelling/hunspell/affentry.hxx b/src/spelling/hunspell/affentry.hxx index 6311d83f..09240300 100644 --- a/src/spelling/hunspell/affentry.hxx +++ b/src/spelling/hunspell/affentry.hxx @@ -71,10 +71,8 @@ * SUCH DAMAGE. */ -#ifndef _AFFIX_HXX_ -#define _AFFIX_HXX_ - -#include "hunvisapi.h" +#ifndef AFFIX_HXX_ +#define AFFIX_HXX_ #include "atypes.hxx" #include "baseaffix.hxx" @@ -82,7 +80,7 @@ /* A Prefix Entry */ -class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry { +class PfxEntry : public AffEntry { private: PfxEntry(const PfxEntry&); PfxEntry& operator=(const PfxEntry&); @@ -96,10 +94,9 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry { PfxEntry* flgnxt; public: - PfxEntry(AffixMgr* pmgr, affentry* dp); - ~PfxEntry(); + explicit PfxEntry(AffixMgr* pmgr); - inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } + bool allowCross() const { return ((opts & aeXPRODUCT) != 0); } struct hentry* checkword(const char* word, int len, char in_compound, @@ -110,19 +107,19 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry { char in_compound, const FLAG needflag = FLAG_NULL); - char* check_morph(const char* word, - int len, - char in_compound, - const FLAG needflag = FLAG_NULL); + std::string check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - char* check_twosfx_morph(const char* word, - int len, - char in_compound, - const FLAG needflag = FLAG_NULL); + std::string check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); - inline FLAG getFlag() { return aflag; } - inline const char* getKey() { return appnd.c_str(); } - char* add(const char* word, size_t len); + FLAG getFlag() { return aflag; } + const char* getKey() { return appnd.c_str(); } + std::string add(const char* word, size_t len); inline short getKeyLen() { return appnd.size(); } @@ -147,7 +144,7 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry { /* A Suffix Entry */ -class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { +class SfxEntry : public AffEntry { private: SfxEntry(const SfxEntry&); SfxEntry& operator=(const SfxEntry&); @@ -166,20 +163,16 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { SfxEntry* eq_morph; public: - SfxEntry(AffixMgr* pmgr, affentry* dp); - ~SfxEntry(); + explicit SfxEntry(AffixMgr* pmgr); - inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } + bool allowCross() const { return ((opts & aeXPRODUCT) != 0); } struct hentry* checkword(const char* word, int len, int optflags, PfxEntry* ppfx, - char** wlst, - int maxSug, - int* ns, - const FLAG cclass = FLAG_NULL, - const FLAG needflag = FLAG_NULL, - const FLAG badflag = FLAG_NULL); + const FLAG cclass, + const FLAG needflag, + const FLAG badflag); struct hentry* check_twosfx(const char* word, int len, @@ -187,11 +180,11 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); - char* check_twosfx_morph(const char* word, - int len, - int optflags, - PfxEntry* ppfx, - const FLAG needflag = FLAG_NULL); + std::string check_twosfx_morph(const char* word, + int len, + int optflags, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); struct hentry* get_next_homonym(struct hentry* he); struct hentry* get_next_homonym(struct hentry* word, int optflags, @@ -199,9 +192,9 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { const FLAG cclass, const FLAG needflag); - inline FLAG getFlag() { return aflag; } - inline const char* getKey() { return rappnd.c_str(); } - char* add(const char* word, size_t len); + FLAG getFlag() { return aflag; } + const char* getKey() { return rappnd.c_str(); } + std::string add(const char* word, size_t len); inline const char* getMorph() { return morphcode; } @@ -224,6 +217,7 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry { inline void setNextNE(SfxEntry* ptr) { nextne = ptr; } inline void setNextEQ(SfxEntry* ptr) { nexteq = ptr; } inline void setFlgNxt(SfxEntry* ptr) { flgnxt = ptr; } + void initReverseWord(); inline char* nextchar(char* p); inline int test_condition(const char* st, const char* begin); diff --git a/src/spelling/hunspell/affixmgr.cxx b/src/spelling/hunspell/affixmgr.cxx index d6bb6779..f288fcb8 100644 --- a/src/spelling/hunspell/affixmgr.cxx +++ b/src/spelling/hunspell/affixmgr.cxx @@ -88,33 +88,24 @@ #include "csutil.hxx" AffixMgr::AffixMgr(const char* affpath, - HashMgr** ptr, - int* md, - const char* key) { + const std::vector& ptr, + const char* key) + : alldic(ptr) + , pHMgr(ptr[0]) { + // register hash manager and load affix data from aff file - pHMgr = ptr[0]; - alldic = ptr; - maxdic = md; - keystring = NULL; - trystring = NULL; - encoding = NULL; csconv = NULL; utf8 = 0; complexprefixes = 0; - maptable = NULL; - nummap = 0; - breaktable = NULL; - numbreak = -1; - reptable = NULL; - numrep = 0; + parsedmaptable = false; + parsedbreaktable = false; + parsedrep = false; iconvtable = NULL; oconvtable = NULL; - checkcpdtable = NULL; // allow simplified compound forms (see 3rd field of CHECKCOMPOUNDPATTERN) simplifiedcpd = 0; - numcheckcpd = 0; - defcpdtable = NULL; - numdefcpd = 0; + parsedcheckcpd = false; + parseddefcpd = false; phone = NULL; compoundflag = FLAG_NULL; // permits word in compound forms compoundbegin = FLAG_NULL; // may be first word in compound forms @@ -135,25 +126,15 @@ AffixMgr::AffixMgr(const char* affpath, forbiddenword = FORBIDDENWORD; // forbidden word signing flag nosuggest = FLAG_NULL; // don't suggest words signed with NOSUGGEST flag nongramsuggest = FLAG_NULL; - lang = NULL; // language langnum = 0; // language code (see http://l10n.openoffice.org/languages.html) needaffix = FLAG_NULL; // forbidden root, allowed only with suffixes cpdwordmax = -1; // default: unlimited wordcount in compound words cpdmin = -1; // undefined cpdmaxsyllable = 0; // default: unlimited syllablecount in compound words - cpdvowels = NULL; // vowels (for calculating of Hungarian compounding limit, - // O(n) search! XXX) - cpdvowels_utf16 = - NULL; // vowels for UTF-8 encoding (bsearch instead of O(n) search) - cpdvowels_utf16_len = 0; // vowels pfxappnd = NULL; // previous prefix for counting syllables of the prefix BUG sfxappnd = NULL; // previous suffix for counting syllables of the suffix BUG sfxextra = 0; // modifier for syllable count of sfxappnd BUG - cpdsyllablenum = NULL; // syllable count incrementing flag checknum = 0; // checking numbers, and word with numbers - wordchars = NULL; // letters + spec. word characters - ignorechars = NULL; // letters + spec. word characters - version = NULL; // affix and dictionary file version string havecontclass = 0; // flags of possible continuing classes (double affix) // LEMMA_PRESENT: not put root into the morphological output. Lemma presents // in morhological description in dictionary file. It's often combined with @@ -225,83 +206,10 @@ AffixMgr::~AffixMgr() { sStart[j] = NULL; } - if (keystring) - free(keystring); - keystring = NULL; - if (trystring) - free(trystring); - trystring = NULL; - if (encoding) - free(encoding); - encoding = NULL; - if (maptable) { - for (int j = 0; j < nummap; j++) { - for (int k = 0; k < maptable[j].len; k++) { - if (maptable[j].set[k]) - free(maptable[j].set[k]); - } - free(maptable[j].set); - maptable[j].set = NULL; - maptable[j].len = 0; - } - free(maptable); - maptable = NULL; - } - nummap = 0; - if (breaktable) { - for (int j = 0; j < numbreak; j++) { - if (breaktable[j]) - free(breaktable[j]); - breaktable[j] = NULL; - } - free(breaktable); - breaktable = NULL; - } - numbreak = 0; - if (reptable) { - for (int j = 0; j < numrep; j++) { - free(reptable[j].pattern); - free(reptable[j].pattern2); - } - free(reptable); - reptable = NULL; - } - if (iconvtable) - delete iconvtable; - if (oconvtable) - delete oconvtable; - if (phone && phone->rules) { - for (int j = 0; j < phone->num + 1; j++) { - free(phone->rules[j * 2]); - free(phone->rules[j * 2 + 1]); - } - free(phone->rules); - free(phone); - phone = NULL; - } + delete iconvtable; + delete oconvtable; + delete phone; - if (defcpdtable) { - for (int j = 0; j < numdefcpd; j++) { - free(defcpdtable[j].def); - defcpdtable[j].def = NULL; - } - free(defcpdtable); - defcpdtable = NULL; - } - numrep = 0; - if (checkcpdtable) { - for (int j = 0; j < numcheckcpd; j++) { - free(checkcpdtable[j].pattern); - free(checkcpdtable[j].pattern2); - free(checkcpdtable[j].pattern3); - checkcpdtable[j].pattern = NULL; - checkcpdtable[j].pattern2 = NULL; - checkcpdtable[j].pattern3 = NULL; - } - free(checkcpdtable); - checkcpdtable = NULL; - } - numcheckcpd = 0; FREE_FLAG(compoundflag); FREE_FLAG(compoundbegin); FREE_FLAG(compoundmiddle); @@ -321,21 +229,7 @@ AffixMgr::~AffixMgr() { pHMgr = NULL; cpdmin = 0; cpdmaxsyllable = 0; - if (cpdvowels) - free(cpdvowels); - if (cpdvowels_utf16) - free(cpdvowels_utf16); - if (cpdsyllablenum) - free(cpdsyllablenum); free_utf_tbl(); - if (lang) - free(lang); - if (wordchars) - free(wordchars); - if (ignorechars) - free(ignorechars); - if (version) - free(version); checknum = 0; #ifdef MOZILLA_CLIENT delete[] csconv; @@ -352,8 +246,6 @@ void AffixMgr::finishFileMgr(FileMgr* afflst) { // read in aff file and build up prefix and suffix entry objects int AffixMgr::parse_file(const char* affpath, const char* key) { - char* line; // io buffers - char ft; // affix type // checking flag duplication char dupflags[CONTSIZE]; @@ -375,7 +267,8 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { // read in each line ignoring any that do not // start with a known line type indicator - while ((line = afflst->getline()) != NULL) { + std::string line; + while (afflst->getline(line)) { mychomp(line); /* remove byte order mark */ @@ -383,41 +276,38 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { firstline = 0; // Affix file begins with byte order mark: possible incompatibility with // old Hunspell versions - if (strncmp(line, "\xEF\xBB\xBF", 3) == 0) { - memmove(line, line + 3, strlen(line + 3) + 1); + if (line.compare(0, 3, "\xEF\xBB\xBF", 3) == 0) { + line.erase(0, 3); } } /* parse in the keyboard string */ - if (strncmp(line, "KEY", 3) == 0) { - if (parse_string(line, &keystring, afflst->getlinenum())) { + if (line.compare(0, 3, "KEY", 3) == 0) { + if (!parse_string(line, keystring, afflst->getlinenum())) { finishFileMgr(afflst); return 1; } } /* parse in the try string */ - if (strncmp(line, "TRY", 3) == 0) { - if (parse_string(line, &trystring, afflst->getlinenum())) { + if (line.compare(0, 3, "TRY", 3) == 0) { + if (!parse_string(line, trystring, afflst->getlinenum())) { finishFileMgr(afflst); return 1; } } /* parse in the name of the character set used by the .dict and .aff */ - if (strncmp(line, "SET", 3) == 0) { - if (parse_string(line, &encoding, afflst->getlinenum())) { + if (line.compare(0, 3, "SET", 3) == 0) { + if (!parse_string(line, encoding, afflst->getlinenum())) { finishFileMgr(afflst); return 1; } - if (strcmp(encoding, "UTF-8") == 0) { + if (encoding == "UTF-8") { utf8 = 1; #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT - if (initialize_utf_tbl()) { - finishFileMgr(afflst); - return 1; - } + initialize_utf_tbl(); #endif #endif } @@ -425,26 +315,26 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { /* parse COMPLEXPREFIXES for agglutinative languages with right-to-left * writing system */ - if (strncmp(line, "COMPLEXPREFIXES", 15) == 0) + if (line.compare(0, 15, "COMPLEXPREFIXES", 15) == 0) complexprefixes = 1; /* parse in the flag used by the controlled compound words */ - if (strncmp(line, "COMPOUNDFLAG", 12) == 0) { - if (parse_flag(line, &compoundflag, afflst)) { + if (line.compare(0, 12, "COMPOUNDFLAG", 12) == 0) { + if (!parse_flag(line, &compoundflag, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by compound words */ - if (strncmp(line, "COMPOUNDBEGIN", 13) == 0) { + if (line.compare(0, 13, "COMPOUNDBEGIN", 13) == 0) { if (complexprefixes) { - if (parse_flag(line, &compoundend, afflst)) { + if (!parse_flag(line, &compoundend, afflst)) { finishFileMgr(afflst); return 1; } } else { - if (parse_flag(line, &compoundbegin, afflst)) { + if (!parse_flag(line, &compoundbegin, afflst)) { finishFileMgr(afflst); return 1; } @@ -452,21 +342,22 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { } /* parse in the flag used by compound words */ - if (strncmp(line, "COMPOUNDMIDDLE", 14) == 0) { - if (parse_flag(line, &compoundmiddle, afflst)) { + if (line.compare(0, 14, "COMPOUNDMIDDLE", 14) == 0) { + if (!parse_flag(line, &compoundmiddle, afflst)) { finishFileMgr(afflst); return 1; } } + /* parse in the flag used by compound words */ - if (strncmp(line, "COMPOUNDEND", 11) == 0) { + if (line.compare(0, 11, "COMPOUNDEND", 11) == 0) { if (complexprefixes) { - if (parse_flag(line, &compoundbegin, afflst)) { + if (!parse_flag(line, &compoundbegin, afflst)) { finishFileMgr(afflst); return 1; } } else { - if (parse_flag(line, &compoundend, afflst)) { + if (!parse_flag(line, &compoundend, afflst)) { finishFileMgr(afflst); return 1; } @@ -474,126 +365,126 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { } /* parse in the data used by compound_check() method */ - if (strncmp(line, "COMPOUNDWORDMAX", 15) == 0) { - if (parse_num(line, &cpdwordmax, afflst)) { + if (line.compare(0, 15, "COMPOUNDWORDMAX", 15) == 0) { + if (!parse_num(line, &cpdwordmax, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag sign compounds in dictionary */ - if (strncmp(line, "COMPOUNDROOT", 12) == 0) { - if (parse_flag(line, &compoundroot, afflst)) { + if (line.compare(0, 12, "COMPOUNDROOT", 12) == 0) { + if (!parse_flag(line, &compoundroot, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by compound_check() method */ - if (strncmp(line, "COMPOUNDPERMITFLAG", 18) == 0) { - if (parse_flag(line, &compoundpermitflag, afflst)) { + if (line.compare(0, 18, "COMPOUNDPERMITFLAG", 18) == 0) { + if (!parse_flag(line, &compoundpermitflag, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by compound_check() method */ - if (strncmp(line, "COMPOUNDFORBIDFLAG", 18) == 0) { - if (parse_flag(line, &compoundforbidflag, afflst)) { + if (line.compare(0, 18, "COMPOUNDFORBIDFLAG", 18) == 0) { + if (!parse_flag(line, &compoundforbidflag, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "COMPOUNDMORESUFFIXES", 20) == 0) { + if (line.compare(0, 20, "COMPOUNDMORESUFFIXES", 20) == 0) { compoundmoresuffixes = 1; } - if (strncmp(line, "CHECKCOMPOUNDDUP", 16) == 0) { + if (line.compare(0, 16, "CHECKCOMPOUNDDUP", 16) == 0) { checkcompounddup = 1; } - if (strncmp(line, "CHECKCOMPOUNDREP", 16) == 0) { + if (line.compare(0, 16, "CHECKCOMPOUNDREP", 16) == 0) { checkcompoundrep = 1; } - if (strncmp(line, "CHECKCOMPOUNDTRIPLE", 19) == 0) { + if (line.compare(0, 19, "CHECKCOMPOUNDTRIPLE", 19) == 0) { checkcompoundtriple = 1; } - if (strncmp(line, "SIMPLIFIEDTRIPLE", 16) == 0) { + if (line.compare(0, 16, "SIMPLIFIEDTRIPLE", 16) == 0) { simplifiedtriple = 1; } - if (strncmp(line, "CHECKCOMPOUNDCASE", 17) == 0) { + if (line.compare(0, 17, "CHECKCOMPOUNDCASE", 17) == 0) { checkcompoundcase = 1; } - if (strncmp(line, "NOSUGGEST", 9) == 0) { - if (parse_flag(line, &nosuggest, afflst)) { + if (line.compare(0, 9, "NOSUGGEST", 9) == 0) { + if (!parse_flag(line, &nosuggest, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "NONGRAMSUGGEST", 14) == 0) { - if (parse_flag(line, &nongramsuggest, afflst)) { + if (line.compare(0, 14, "NONGRAMSUGGEST", 14) == 0) { + if (!parse_flag(line, &nongramsuggest, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by forbidden words */ - if (strncmp(line, "FORBIDDENWORD", 13) == 0) { - if (parse_flag(line, &forbiddenword, afflst)) { + if (line.compare(0, 13, "FORBIDDENWORD", 13) == 0) { + if (!parse_flag(line, &forbiddenword, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by forbidden words */ - if (strncmp(line, "LEMMA_PRESENT", 13) == 0) { - if (parse_flag(line, &lemma_present, afflst)) { + if (line.compare(0, 13, "LEMMA_PRESENT", 13) == 0) { + if (!parse_flag(line, &lemma_present, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by circumfixes */ - if (strncmp(line, "CIRCUMFIX", 9) == 0) { - if (parse_flag(line, &circumfix, afflst)) { + if (line.compare(0, 9, "CIRCUMFIX", 9) == 0) { + if (!parse_flag(line, &circumfix, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by fogemorphemes */ - if (strncmp(line, "ONLYINCOMPOUND", 14) == 0) { - if (parse_flag(line, &onlyincompound, afflst)) { + if (line.compare(0, 14, "ONLYINCOMPOUND", 14) == 0) { + if (!parse_flag(line, &onlyincompound, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by `needaffixs' */ - if (strncmp(line, "PSEUDOROOT", 10) == 0) { - if (parse_flag(line, &needaffix, afflst)) { + if (line.compare(0, 10, "PSEUDOROOT", 10) == 0) { + if (!parse_flag(line, &needaffix, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by `needaffixs' */ - if (strncmp(line, "NEEDAFFIX", 9) == 0) { - if (parse_flag(line, &needaffix, afflst)) { + if (line.compare(0, 9, "NEEDAFFIX", 9) == 0) { + if (!parse_flag(line, &needaffix, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the minimal length for words in compounds */ - if (strncmp(line, "COMPOUNDMIN", 11) == 0) { - if (parse_num(line, &cpdmin, afflst)) { + if (line.compare(0, 11, "COMPOUNDMIN", 11) == 0) { + if (!parse_num(line, &cpdmin, afflst)) { finishFileMgr(afflst); return 1; } @@ -602,29 +493,29 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { } /* parse in the max. words and syllables in compounds */ - if (strncmp(line, "COMPOUNDSYLLABLE", 16) == 0) { - if (parse_cpdsyllable(line, afflst)) { + if (line.compare(0, 16, "COMPOUNDSYLLABLE", 16) == 0) { + if (!parse_cpdsyllable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by compound_check() method */ - if (strncmp(line, "SYLLABLENUM", 11) == 0) { - if (parse_string(line, &cpdsyllablenum, afflst->getlinenum())) { + if (line.compare(0, 11, "SYLLABLENUM", 11) == 0) { + if (!parse_string(line, cpdsyllablenum, afflst->getlinenum())) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by the controlled compound words */ - if (strncmp(line, "CHECKNUM", 8) == 0) { + if (line.compare(0, 8, "CHECKNUM", 8) == 0) { checknum = 1; } /* parse in the extra word characters */ - if (strncmp(line, "WORDCHARS", 9) == 0) { - if (!parse_array(line, &wordchars, wordchars_utf16, + if (line.compare(0, 9, "WORDCHARS", 9) == 0) { + if (!parse_array(line, wordchars, wordchars_utf16, utf8, afflst->getlinenum())) { finishFileMgr(afflst); return 1; @@ -633,8 +524,8 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { /* parse in the ignored characters (for example, Arabic optional diacretics * charachters */ - if (strncmp(line, "IGNORE", 6) == 0) { - if (!parse_array(line, &ignorechars, ignorechars_utf16, + if (line.compare(0, 6, "IGNORE", 6) == 0) { + if (!parse_array(line, ignorechars, ignorechars_utf16, utf8, afflst->getlinenum())) { finishFileMgr(afflst); return 1; @@ -642,172 +533,174 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { } /* parse in the typical fault correcting table */ - if (strncmp(line, "REP", 3) == 0) { - if (parse_reptable(line, afflst)) { + if (line.compare(0, 3, "REP", 3) == 0) { + if (!parse_reptable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the input conversion table */ - if (strncmp(line, "ICONV", 5) == 0) { - if (parse_convtable(line, afflst, &iconvtable, "ICONV")) { + if (line.compare(0, 5, "ICONV", 5) == 0) { + if (!parse_convtable(line, afflst, &iconvtable, "ICONV")) { finishFileMgr(afflst); return 1; } } /* parse in the input conversion table */ - if (strncmp(line, "OCONV", 5) == 0) { - if (parse_convtable(line, afflst, &oconvtable, "OCONV")) { + if (line.compare(0, 5, "OCONV", 5) == 0) { + if (!parse_convtable(line, afflst, &oconvtable, "OCONV")) { finishFileMgr(afflst); return 1; } } /* parse in the phonetic translation table */ - if (strncmp(line, "PHONE", 5) == 0) { - if (parse_phonetable(line, afflst)) { + if (line.compare(0, 5, "PHONE", 5) == 0) { + if (!parse_phonetable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the checkcompoundpattern table */ - if (strncmp(line, "CHECKCOMPOUNDPATTERN", 20) == 0) { - if (parse_checkcpdtable(line, afflst)) { + if (line.compare(0, 20, "CHECKCOMPOUNDPATTERN", 20) == 0) { + if (!parse_checkcpdtable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the defcompound table */ - if (strncmp(line, "COMPOUNDRULE", 12) == 0) { - if (parse_defcpdtable(line, afflst)) { + if (line.compare(0, 12, "COMPOUNDRULE", 12) == 0) { + if (!parse_defcpdtable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the related character map table */ - if (strncmp(line, "MAP", 3) == 0) { - if (parse_maptable(line, afflst)) { + if (line.compare(0, 3, "MAP", 3) == 0) { + if (!parse_maptable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the word breakpoints table */ - if (strncmp(line, "BREAK", 5) == 0) { - if (parse_breaktable(line, afflst)) { + if (line.compare(0, 5, "BREAK", 5) == 0) { + if (!parse_breaktable(line, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the language for language specific codes */ - if (strncmp(line, "LANG", 4) == 0) { - if (parse_string(line, &lang, afflst->getlinenum())) { + if (line.compare(0, 4, "LANG", 4) == 0) { + if (!parse_string(line, lang, afflst->getlinenum())) { finishFileMgr(afflst); return 1; } langnum = get_lang_num(lang); } - if (strncmp(line, "VERSION", 7) == 0) { - for (line = line + 7; *line == ' ' || *line == '\t'; line++) - ; - version = mystrdup(line); + if (line.compare(0, 7, "VERSION", 7) == 0) { + size_t startpos = line.find_first_not_of(" \t", 7); + if (startpos != std::string::npos) { + version = line.substr(startpos); + } } - if (strncmp(line, "MAXNGRAMSUGS", 12) == 0) { - if (parse_num(line, &maxngramsugs, afflst)) { + if (line.compare(0, 12, "MAXNGRAMSUGS", 12) == 0) { + if (!parse_num(line, &maxngramsugs, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "ONLYMAXDIFF", 11) == 0) + if (line.compare(0, 11, "ONLYMAXDIFF", 11) == 0) onlymaxdiff = 1; - if (strncmp(line, "MAXDIFF", 7) == 0) { - if (parse_num(line, &maxdiff, afflst)) { + if (line.compare(0, 7, "MAXDIFF", 7) == 0) { + if (!parse_num(line, &maxdiff, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "MAXCPDSUGS", 10) == 0) { - if (parse_num(line, &maxcpdsugs, afflst)) { + if (line.compare(0, 10, "MAXCPDSUGS", 10) == 0) { + if (!parse_num(line, &maxcpdsugs, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "NOSPLITSUGS", 11) == 0) { + if (line.compare(0, 11, "NOSPLITSUGS", 11) == 0) { nosplitsugs = 1; } - if (strncmp(line, "FULLSTRIP", 9) == 0) { + if (line.compare(0, 9, "FULLSTRIP", 9) == 0) { fullstrip = 1; } - if (strncmp(line, "SUGSWITHDOTS", 12) == 0) { + if (line.compare(0, 12, "SUGSWITHDOTS", 12) == 0) { sugswithdots = 1; } /* parse in the flag used by forbidden words */ - if (strncmp(line, "KEEPCASE", 8) == 0) { - if (parse_flag(line, &keepcase, afflst)) { + if (line.compare(0, 8, "KEEPCASE", 8) == 0) { + if (!parse_flag(line, &keepcase, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by `forceucase' */ - if (strncmp(line, "FORCEUCASE", 10) == 0) { - if (parse_flag(line, &forceucase, afflst)) { + if (line.compare(0, 10, "FORCEUCASE", 10) == 0) { + if (!parse_flag(line, &forceucase, afflst)) { finishFileMgr(afflst); return 1; } } /* parse in the flag used by `warn' */ - if (strncmp(line, "WARN", 4) == 0) { - if (parse_flag(line, &warn, afflst)) { + if (line.compare(0, 4, "WARN", 4) == 0) { + if (!parse_flag(line, &warn, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "FORBIDWARN", 10) == 0) { + if (line.compare(0, 10, "FORBIDWARN", 10) == 0) { forbidwarn = 1; } /* parse in the flag used by the affix generator */ - if (strncmp(line, "SUBSTANDARD", 11) == 0) { - if (parse_flag(line, &substandard, afflst)) { + if (line.compare(0, 11, "SUBSTANDARD", 11) == 0) { + if (!parse_flag(line, &substandard, afflst)) { finishFileMgr(afflst); return 1; } } - if (strncmp(line, "CHECKSHARPS", 11) == 0) { + if (line.compare(0, 11, "CHECKSHARPS", 11) == 0) { checksharps = 1; } /* parse this affix: P - prefix, S - suffix */ - ft = ' '; - if (strncmp(line, "PFX", 3) == 0) + // affix type + char ft = ' '; + if (line.compare(0, 3, "PFX", 3) == 0) ft = complexprefixes ? 'S' : 'P'; - if (strncmp(line, "SFX", 3) == 0) + if (line.compare(0, 3, "SFX", 3) == 0) ft = complexprefixes ? 'P' : 'S'; if (ft != ' ') { if (dupflags_ini) { memset(dupflags, 0, sizeof(dupflags)); dupflags_ini = 0; } - if (parse_affix(line, ft, afflst, dupflags)) { + if (!parse_affix(line, ft, afflst, dupflags)) { finishFileMgr(afflst); return 1; } @@ -848,37 +741,22 @@ int AffixMgr::parse_file(const char* affpath, const char* key) { /* get encoding for CHECKCOMPOUNDCASE */ if (!utf8) { - char* enc = get_encoding(); - csconv = get_current_cs(enc); - free(enc); - enc = NULL; - - std::string expw; - if (wordchars) { - expw.assign(wordchars); - free(wordchars); - } - + csconv = get_current_cs(get_encoding()); for (int i = 0; i <= 255; i++) { if ((csconv[i].cupper != csconv[i].clower) && - (expw.find((char)i) == std::string::npos)) { - expw.push_back((char)i); + (wordchars.find((char)i) == std::string::npos)) { + wordchars.push_back((char)i); } } - wordchars = mystrdup(expw.c_str()); } // default BREAK definition - if (numbreak == -1) { - breaktable = (char**)malloc(sizeof(char*) * 3); - if (!breaktable) - return 1; - breaktable[0] = mystrdup("-"); - breaktable[1] = mystrdup("^-"); - breaktable[2] = mystrdup("-$"); - if (breaktable[0] && breaktable[1] && breaktable[2]) - numbreak = 3; + if (!parsedbreaktable) { + breaktable.push_back("-"); + breaktable.push_back("^-"); + breaktable.push_back("-$"); + parsedbreaktable = true; } return 0; } @@ -949,6 +827,9 @@ int AffixMgr::build_pfxtree(PfxEntry* pfxptr) { // both by suffix flag, and sorted by the reverse of the // suffix string itself; so we need to set up two indexes int AffixMgr::build_sfxtree(SfxEntry* sfxptr) { + + sfxptr->initReverseWord(); + SfxEntry* ptr; SfxEntry* pptr; SfxEntry* ep = sfxptr; @@ -1142,17 +1023,6 @@ int AffixMgr::process_sfx_order() { return 0; } -// add flags to the result for dictionary debugging -void AffixMgr::debugflag(char* result, unsigned short flag) { - char* st = encode_flag(flag); - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_FLAG, MAXLNLEN); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); - } -} - // add flags to the result for dictionary debugging std::string& AffixMgr::debugflag(std::string& result, unsigned short flag) { char* st = encode_flag(flag); @@ -1181,13 +1051,18 @@ int AffixMgr::condlen(const char* st) { return l; } -int AffixMgr::encodeit(affentry& entry, const char* cs) { +int AffixMgr::encodeit(AffEntry& entry, const char* cs) { if (strcmp(cs, ".") != 0) { entry.numconds = (char)condlen(cs); - // coverity[buffer_size_warning] - deliberate use of lack of end of conds - // padded by strncpy as long condition flag - strncpy(entry.c.conds, cs, MAXCONDLEN); - if (entry.c.conds[MAXCONDLEN - 1] && cs[MAXCONDLEN]) { + const size_t cslen = strlen(cs); + const size_t short_part = std::min(MAXCONDLEN, cslen); + memcpy(entry.c.conds, cs, short_part); + if (short_part < MAXCONDLEN) { + //blank out the remaining space + memset(entry.c.conds + short_part, 0, MAXCONDLEN - short_part); + } else if (cs[MAXCONDLEN]) { + //there is more conditions than fit in fixed space, so its + //a long condition entry.opts += aeLONGCOND; entry.c.l.conds2 = mystrdup(cs + MAXCONDLEN_1); if (!entry.c.l.conds2) @@ -1316,13 +1191,12 @@ struct hentry* AffixMgr::prefix_check_twosfx(const char* word, } // check word for prefixes -char* AffixMgr::prefix_check_morph(const char* word, - int len, - char in_compound, - const FLAG needflag) { +std::string AffixMgr::prefix_check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { - char result[MAXLNLEN]; - result[0] = '\0'; + std::string result; pfx = NULL; sfxappnd = NULL; @@ -1331,12 +1205,10 @@ char* AffixMgr::prefix_check_morph(const char* word, // first handle the special case of 0 length prefixes PfxEntry* pe = pStart[0]; while (pe) { - char* st = pe->check_morph(word, len, in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pe->check_morph(word, len, in_compound, needflag); + if (!st.empty()) { + result.append(st); } - // if (rv) return rv; pe = pe->getNext(); } @@ -1346,16 +1218,15 @@ char* AffixMgr::prefix_check_morph(const char* word, while (pptr) { if (isSubset(pptr->getKey(), word)) { - char* st = pptr->check_morph(word, len, in_compound, needflag); - if (st) { + std::string st = pptr->check_morph(word, len, in_compound, needflag); + if (!st.empty()) { // fogemorpheme if ((in_compound != IN_CPD_NOT) || !((pptr->getCont() && (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen()))))) { - mystrcat(result, st, MAXLNLEN); + result.append(st); pfx = pptr; } - free(st); } pptr = pptr->getNextEQ(); } else { @@ -1363,18 +1234,15 @@ char* AffixMgr::prefix_check_morph(const char* word, } } - if (*result) - return mystrdup(result); - return NULL; + return result; } // check word for prefixes -char* AffixMgr::prefix_check_twosfx_morph(const char* word, - int len, - char in_compound, - const FLAG needflag) { - char result[MAXLNLEN]; - result[0] = '\0'; +std::string AffixMgr::prefix_check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag) { + std::string result; pfx = NULL; sfxappnd = NULL; @@ -1383,10 +1251,9 @@ char* AffixMgr::prefix_check_twosfx_morph(const char* word, // first handle the special case of 0 length prefixes PfxEntry* pe = pStart[0]; while (pe) { - char* st = pe->check_twosfx_morph(word, len, in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pe->check_twosfx_morph(word, len, in_compound, needflag); + if (!st.empty()) { + result.append(st); } pe = pe->getNext(); } @@ -1397,10 +1264,9 @@ char* AffixMgr::prefix_check_twosfx_morph(const char* word, while (pptr) { if (isSubset(pptr->getKey(), word)) { - char* st = pptr->check_twosfx_morph(word, len, in_compound, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pptr->check_twosfx_morph(word, len, in_compound, needflag); + if (!st.empty()) { + result.append(st); pfx = pptr; } pptr = pptr->getNextEQ(); @@ -1409,29 +1275,31 @@ char* AffixMgr::prefix_check_twosfx_morph(const char* word, } } - if (*result) - return mystrdup(result); - return NULL; + return result; } // Is word a non compound with a REP substitution (see checkcompoundrep)? int AffixMgr::cpdrep_check(const char* word, int wl) { - if ((wl < 2) || !numrep) + if ((wl < 2) || reptable.empty()) return 0; - for (int i = 0; i < numrep; i++) { + for (size_t i = 0; i < reptable.size(); ++i) { const char* r = word; - int lenp = strlen(reptable[i].pattern); + const size_t lenp = reptable[i].pattern.size(); // search every occurence of the pattern in the word - while ((r = strstr(r, reptable[i].pattern)) != NULL) { + while ((r = strstr(r, reptable[i].pattern.c_str())) != NULL) { std::string candidate(word); - candidate.replace(r - word, lenp, reptable[i].pattern2); + size_t type = r == word ? 1 : 0; + if (r - word + reptable[i].pattern.size() == lenp) + type += 2; + candidate.replace(r - word, lenp, reptable[i].outstrings[type]); if (candidate_check(candidate.c_str(), candidate.size())) return 1; - r++; // search for the next letter + ++r; // search for the next letter } } + return 0; } @@ -1441,21 +1309,21 @@ int AffixMgr::cpdpat_check(const char* word, hentry* r1, hentry* r2, const char /*affixed*/) { - int len; - for (int i = 0; i < numcheckcpd; i++) { - if (isSubset(checkcpdtable[i].pattern2, word + pos) && + for (size_t i = 0; i < checkcpdtable.size(); ++i) { + size_t len; + if (isSubset(checkcpdtable[i].pattern2.c_str(), word + pos) && (!r1 || !checkcpdtable[i].cond || (r1->astr && TESTAFF(r1->astr, checkcpdtable[i].cond, r1->alen))) && (!r2 || !checkcpdtable[i].cond2 || (r2->astr && TESTAFF(r2->astr, checkcpdtable[i].cond2, r2->alen))) && // zero length pattern => only TESTAFF // zero pattern (0/flag) => unmodified stem (zero affixes allowed) - (!*(checkcpdtable[i].pattern) || - ((*(checkcpdtable[i].pattern) == '0' && r1->blen <= pos && + (checkcpdtable[i].pattern.empty() || + ((checkcpdtable[i].pattern[0] == '0' && r1->blen <= pos && strncmp(word + pos - r1->blen, r1->word, r1->blen) == 0) || - (*(checkcpdtable[i].pattern) != '0' && - ((len = strlen(checkcpdtable[i].pattern)) != 0) && - strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)))) { + (checkcpdtable[i].pattern[0] != '0' && + ((len = checkcpdtable[i].pattern.size()) != 0) && + strncmp(word + pos - len, checkcpdtable[i].pattern.c_str(), len) == 0)))) { return 1; } } @@ -1513,7 +1381,6 @@ int AffixMgr::defcpd_check(hentry*** words, std::vector btinfo(1); short bt = 0; - int i, j; (*words)[wnum] = rv; @@ -1525,10 +1392,10 @@ int AffixMgr::defcpd_check(hentry*** words, return 0; } int ok = 0; - for (i = 0; i < numdefcpd; i++) { - for (j = 0; j < defcpdtable[i].len; j++) { - if (defcpdtable[i].def[j] != '*' && defcpdtable[i].def[j] != '?' && - TESTAFF(rv->astr, defcpdtable[i].def[j], rv->alen)) { + for (size_t i = 0; i < defcpdtable.size(); ++i) { + for (size_t j = 0; j < defcpdtable[i].size(); ++j) { + if (defcpdtable[i][j] != '*' && defcpdtable[i][j] != '?' && + TESTAFF(rv->astr, defcpdtable[i][j], rv->alen)) { ok = 1; break; } @@ -1541,25 +1408,25 @@ int AffixMgr::defcpd_check(hentry*** words, return 0; } - for (i = 0; i < numdefcpd; i++) { - signed short pp = 0; // pattern position + for (size_t i = 0; i < defcpdtable.size(); ++i) { + size_t pp = 0; // pattern position signed short wp = 0; // "words" position int ok2; ok = 1; ok2 = 1; do { - while ((pp < defcpdtable[i].len) && (wp <= wnum)) { - if (((pp + 1) < defcpdtable[i].len) && - ((defcpdtable[i].def[pp + 1] == '*') || - (defcpdtable[i].def[pp + 1] == '?'))) { - int wend = (defcpdtable[i].def[pp + 1] == '?') ? wp : wnum; + while ((pp < defcpdtable[i].size()) && (wp <= wnum)) { + if (((pp + 1) < defcpdtable[i].size()) && + ((defcpdtable[i][pp + 1] == '*') || + (defcpdtable[i][pp + 1] == '?'))) { + int wend = (defcpdtable[i][pp + 1] == '?') ? wp : wnum; ok2 = 1; pp += 2; btinfo[bt].btpp = pp; btinfo[bt].btwp = wp; while (wp <= wend) { if (!(*words)[wp]->alen || - !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp - 2], + !TESTAFF((*words)[wp]->astr, defcpdtable[i][pp - 2], (*words)[wp]->alen)) { ok2 = 0; break; @@ -1578,24 +1445,24 @@ int AffixMgr::defcpd_check(hentry*** words, } else { ok2 = 1; if (!(*words)[wp] || !(*words)[wp]->alen || - !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp], + !TESTAFF((*words)[wp]->astr, defcpdtable[i][pp], (*words)[wp]->alen)) { ok = 0; break; } pp++; wp++; - if ((defcpdtable[i].len == pp) && !(wp > wnum)) + if ((defcpdtable[i].size() == pp) && !(wp > wnum)) ok = 0; } } if (ok && ok2) { - int r = pp; - while ((defcpdtable[i].len > r) && ((r + 1) < defcpdtable[i].len) && - ((defcpdtable[i].def[r + 1] == '*') || - (defcpdtable[i].def[r + 1] == '?'))) + size_t r = pp; + while ((defcpdtable[i].size() > r) && ((r + 1) < defcpdtable[i].size()) && + ((defcpdtable[i][r + 1] == '*') || + (defcpdtable[i][r + 1] == '?'))) r += 2; - if (defcpdtable[i].len <= r) + if (defcpdtable[i].size() <= r) return 1; } // backtrack @@ -1608,16 +1475,16 @@ int AffixMgr::defcpd_check(hentry*** words, } while ((btinfo[bt - 1].btnum < 0) && --bt); } while (bt); - if (ok && ok2 && (!all || (defcpdtable[i].len <= pp))) + if (ok && ok2 && (!all || (defcpdtable[i].size() <= pp))) return 1; // check zero ending - while (ok && ok2 && (defcpdtable[i].len > pp) && - ((pp + 1) < defcpdtable[i].len) && - ((defcpdtable[i].def[pp + 1] == '*') || - (defcpdtable[i].def[pp + 1] == '?'))) + while (ok && ok2 && (defcpdtable[i].size() > pp) && + ((pp + 1) < defcpdtable[i].size()) && + ((defcpdtable[i][pp + 1] == '*') || + (defcpdtable[i][pp + 1] == '?'))) pp += 2; - if (ok && ok2 && (defcpdtable[i].len <= pp)) + if (ok && ok2 && (defcpdtable[i].size() <= pp)) return 1; } (*words)[wnum] = NULL; @@ -1651,20 +1518,23 @@ short AffixMgr::get_syllable(const std::string& word) { if (!utf8) { for (size_t i = 0; i < word.size(); ++i) { - if (strchr(cpdvowels, word[i])) - num++; + if (std::binary_search(cpdvowels.begin(), cpdvowels.end(), + word[i])) { + ++num; + } } - } else if (cpdvowels_utf16) { + } else if (!cpdvowels_utf16.empty()) { std::vector w; - int i = u8_u16(w, word); - for (; i > 0; i--) { - if (std::binary_search(cpdvowels_utf16, - cpdvowels_utf16 + cpdvowels_utf16_len, - w[i - 1])) { + u8_u16(w, word); + for (size_t i = 0; i < w.size(); ++i) { + if (std::binary_search(cpdvowels_utf16.begin(), + cpdvowels_utf16.end(), + w[i])) { ++num; } } } + return num; } @@ -1687,8 +1557,7 @@ void AffixMgr::setcminmax(int* cmin, int* cmax, const char* word, int len) { // check if compound word is correctly spelled // hu_mov_rule = spec. Hungarian rule (XXX) -struct hentry* AffixMgr::compound_check(const char* word, - int len, +struct hentry* AffixMgr::compound_check(const std::string& word, short wordnum, short numsyllable, short maxwordnum, @@ -1707,19 +1576,19 @@ struct hentry* AffixMgr::compound_check(const char* word, int cmin; int cmax; int striple = 0; - int scpd = 0; + size_t scpd = 0; int soldi = 0; int oldcmin = 0; int oldcmax = 0; int oldlen = 0; int checkedstriple = 0; - int onlycpdrule; char affixed = 0; hentry** oldwords = words; + size_t len = word.size(); int checked_prefix; - setcminmax(&cmin, &cmax, word, len); + setcminmax(&cmin, &cmax, word.c_str(), len); st.assign(word); @@ -1733,7 +1602,7 @@ struct hentry* AffixMgr::compound_check(const char* word, } words = oldwords; - onlycpdrule = (words) ? 1 : 0; + int onlycpdrule = (words) ? 1 : 0; do { // onlycpdrule loop @@ -1744,26 +1613,26 @@ struct hentry* AffixMgr::compound_check(const char* word, do { // simplified checkcompoundpattern loop if (scpd > 0) { - for (; scpd <= numcheckcpd && - (!checkcpdtable[scpd - 1].pattern3 || - strncmp(word + i, checkcpdtable[scpd - 1].pattern3, - strlen(checkcpdtable[scpd - 1].pattern3)) != 0); + for (; scpd <= checkcpdtable.size() && + (checkcpdtable[scpd - 1].pattern3.empty() || + strncmp(word.c_str() + i, checkcpdtable[scpd - 1].pattern3.c_str(), + checkcpdtable[scpd - 1].pattern3.size()) != 0); scpd++) ; - if (scpd > numcheckcpd) + if (scpd > checkcpdtable.size()) break; // break simplified checkcompoundpattern loop st.replace(i, std::string::npos, checkcpdtable[scpd - 1].pattern); soldi = i; - i += strlen(checkcpdtable[scpd - 1].pattern); + i += checkcpdtable[scpd - 1].pattern.size(); st.replace(i, std::string::npos, checkcpdtable[scpd - 1].pattern2); - st.replace(i + strlen(checkcpdtable[scpd - 1].pattern2), std::string::npos, - word + soldi + strlen(checkcpdtable[scpd - 1].pattern3)); + st.replace(i + checkcpdtable[scpd - 1].pattern2.size(), std::string::npos, + word.substr(soldi + checkcpdtable[scpd - 1].pattern3.size())); oldlen = len; - len += strlen(checkcpdtable[scpd - 1].pattern) + - strlen(checkcpdtable[scpd - 1].pattern2) - - strlen(checkcpdtable[scpd - 1].pattern3); + len += checkcpdtable[scpd - 1].pattern.size() + + checkcpdtable[scpd - 1].pattern2.size() - + checkcpdtable[scpd - 1].pattern3.size(); oldcmin = cmin; oldcmax = cmax; setcminmax(&cmin, &cmax, st.c_str(), len); @@ -1791,7 +1660,7 @@ struct hentry* AffixMgr::compound_check(const char* word, TESTAFF(rv->astr, compoundbegin, rv->alen)) || (compoundmiddle && wordnum && !words && !onlycpdrule && TESTAFF(rv->astr, compoundmiddle, rv->alen)) || - (numdefcpd && onlycpdrule && + (!defcpdtable.empty() && onlycpdrule && ((!words && !wordnum && defcpd_check(&words, wnum, rv, rwords, 0)) || (words && @@ -1812,7 +1681,7 @@ struct hentry* AffixMgr::compound_check(const char* word, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) { if (((rv = suffix_check( - st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundflag, + st.c_str(), i, 0, NULL, FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && (rv = suffix_check_twosfx(st.c_str(), i, 0, NULL, compoundflag)))) && @@ -1829,7 +1698,7 @@ struct hentry* AffixMgr::compound_check(const char* word, if (rv || (((wordnum == 0) && compoundbegin && ((rv = suffix_check( - st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, + st.c_str(), i, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && (rv = suffix_check_twosfx( @@ -1840,7 +1709,7 @@ struct hentry* AffixMgr::compound_check(const char* word, compoundbegin)))) || ((wordnum > 0) && compoundmiddle && ((rv = suffix_check( - st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, + st.c_str(), i, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && (rv = suffix_check_twosfx( @@ -1911,8 +1780,7 @@ struct hentry* AffixMgr::compound_check(const char* word, ((oldwordnum == 0) && compoundbegin && TESTAFF(rv->astr, compoundbegin, rv->alen)) || ((oldwordnum > 0) && compoundmiddle && - TESTAFF(rv->astr, compoundmiddle, rv->alen)) // || - // (numdefcpd && ) + TESTAFF(rv->astr, compoundmiddle, rv->alen)) // LANG_hu section: spec. Hungarian rule || ((langnum == LANG_hu) && hu_mov_rule && @@ -1934,7 +1802,7 @@ struct hentry* AffixMgr::compound_check(const char* word, ((word[i - 1] == word[i + 1])) // may be word[i+1] == '\0' )) || (checkcompoundcase && scpd == 0 && !words && - cpdcase_check(word, i)))) + cpdcase_check(word.c_str(), i)))) // LANG_hu section: spec. Hungarian rule || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && (rv = affix_check(st.c_str(), i)) && @@ -1968,7 +1836,7 @@ struct hentry* AffixMgr::compound_check(const char* word, if (striple) { checkedstriple = 1; i--; // check "fahrt" instead of "ahrt" in "Schiffahrt" - } else if (i > 2 && *(word + i - 1) == *(word + i - 2)) + } else if (i > 2 && word[i - 1] == word[i - 2]) striple = 1; } @@ -1981,7 +1849,7 @@ struct hentry* AffixMgr::compound_check(const char* word, TESTAFF(rv->astr, compoundflag, rv->alen)) || (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) || - (numdefcpd && words && + (!defcpdtable.empty() && words && defcpd_check(&words, wnum + 1, rv, NULL, 1))) || (scpd != 0 && checkcpdtable[scpd - 1].cond2 != FLAG_NULL && !TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond2, @@ -2038,8 +1906,8 @@ struct hentry* AffixMgr::compound_check(const char* word, cpdmaxsyllable))) && ( // test CHECKCOMPOUNDPATTERN - !numcheckcpd || scpd != 0 || - !cpdpat_check(word, i, rv_first, rv, 0)) && + checkcpdtable.empty() || scpd != 0 || + !cpdpat_check(word.c_str(), i, rv_first, rv, 0)) && ((!checkcompounddup || (rv != rv_first))) // test CHECKCOMPOUNDPATTERN conditions && @@ -2047,7 +1915,7 @@ struct hentry* AffixMgr::compound_check(const char* word, TESTAFF(rv->astr, checkcpdtable[scpd - 1].cond2, rv->alen))) { // forbid compound word, if it is a non compound word with typical // fault - if (checkcompoundrep && cpdrep_check(word, len)) + if (checkcompoundrep && cpdrep_check(word.c_str(), len)) return NULL; return rv_first; } @@ -2059,18 +1927,18 @@ struct hentry* AffixMgr::compound_check(const char* word, sfx = NULL; sfxflag = FLAG_NULL; rv = (compoundflag && !onlycpdrule) - ? affix_check((word + i), strlen(word + i), compoundflag, + ? affix_check((word.c_str() + i), strlen(word.c_str() + i), compoundflag, IN_CPD_END) : NULL; if (!rv && compoundend && !onlycpdrule) { sfx = NULL; pfx = NULL; - rv = affix_check((word + i), strlen(word + i), compoundend, + rv = affix_check((word.c_str() + i), strlen(word.c_str() + i), compoundend, IN_CPD_END); } - if (!rv && numdefcpd && words) { - rv = affix_check((word + i), strlen(word + i), 0, IN_CPD_END); + if (!rv && !defcpdtable.empty() && words) { + rv = affix_check((word.c_str() + i), strlen(word.c_str() + i), 0, IN_CPD_END); if (rv && defcpd_check(&words, wnum + 1, rv, NULL, 1)) return rv_first; rv = NULL; @@ -2083,8 +1951,8 @@ struct hentry* AffixMgr::compound_check(const char* word, rv = NULL; // test CHECKCOMPOUNDPATTERN conditions (forbidden compounds) - if (rv && numcheckcpd && scpd == 0 && - cpdpat_check(word, i, rv_first, rv, affixed)) + if (rv && !checkcpdtable.empty() && scpd == 0 && + cpdpat_check(word.c_str(), i, rv_first, rv, affixed)) rv = NULL; // check non_compound flag in suffix and prefix @@ -2118,7 +1986,7 @@ struct hentry* AffixMgr::compound_check(const char* word, if (langnum == LANG_hu) { // calculate syllable number of the word - numsyllable += get_syllable(word + i); + numsyllable += get_syllable(word.c_str() + i); // - affix syllable num. // XXX only second suffix (inflections, not derivations) @@ -2136,7 +2004,7 @@ struct hentry* AffixMgr::compound_check(const char* word, // increment syllable num, if last word has a SYLLABLENUM flag // and the suffix is beginning `s' - if (cpdsyllablenum) { + if (!cpdsyllablenum.empty()) { switch (sfxflag) { case 'c': { numsyllable += 2; @@ -2171,7 +2039,7 @@ struct hentry* AffixMgr::compound_check(const char* word, ((!checkcompounddup || (rv != rv_first)))) { // forbid compound word, if it is a non compound word with typical // fault - if (checkcompoundrep && cpdrep_check(word, len)) + if (checkcompoundrep && cpdrep_check(word.c_str(), len)) return NULL; return rv_first; } @@ -2181,15 +2049,15 @@ struct hentry* AffixMgr::compound_check(const char* word, // perhaps second word is a compound word (recursive call) if (wordnum < maxwordnum) { - rv = compound_check(st.c_str() + i, strlen(st.c_str() + i), wordnum + 1, + rv = compound_check(st.substr(i), wordnum + 1, numsyllable, maxwordnum, wnum + 1, words, rwords, 0, is_sug, info); - if (rv && numcheckcpd && + if (rv && !checkcpdtable.empty() && ((scpd == 0 && - cpdpat_check(word, i, rv_first, rv, affixed)) || + cpdpat_check(word.c_str(), i, rv_first, rv, affixed)) || (scpd != 0 && - !cpdpat_check(word, i, rv_first, rv, affixed)))) + !cpdpat_check(word.c_str(), i, rv_first, rv, affixed)))) rv = NULL; } else { rv = NULL; @@ -2198,13 +2066,12 @@ struct hentry* AffixMgr::compound_check(const char* word, // forbid compound word, if it is a non compound word with typical // fault if (checkcompoundrep || forbiddenword) { - struct hentry* rv2 = NULL; - if (checkcompoundrep && cpdrep_check(word, len)) + if (checkcompoundrep && cpdrep_check(word.c_str(), len)) return NULL; // check first part - if (strncmp(rv->word, word + i, rv->blen) == 0) { + if (strncmp(rv->word, word.c_str() + i, rv->blen) == 0) { char r = st[i + rv->blen]; st[i + rv->blen] = '\0'; @@ -2214,9 +2081,9 @@ struct hentry* AffixMgr::compound_check(const char* word, } if (forbiddenword) { - rv2 = lookup(word); + struct hentry* rv2 = lookup(word.c_str()); if (!rv2) - rv2 = affix_check(word, len); + rv2 = affix_check(word.c_str(), len); if (rv2 && rv2->astr && TESTAFF(rv2->astr, forbiddenword, rv2->alen) && (strncmp(rv2->word, st.c_str(), i + rv->blen) == 0)) { @@ -2248,7 +2115,7 @@ struct hentry* AffixMgr::compound_check(const char* word, scpd++; } while (!onlycpdrule && simplifiedcpd && - scpd <= numcheckcpd); // end of simplifiedcpd loop + scpd <= checkcpdtable.size()); // end of simplifiedcpd loop scpd = 0; wordnum = oldwordnum; @@ -2261,7 +2128,7 @@ struct hentry* AffixMgr::compound_check(const char* word, } else st[i] = ch; - } while (numdefcpd && oldwordnum == 0 && + } while (!defcpdtable.empty() && oldwordnum == 0 && onlycpdrule++ < 1); // end of onlycpd loop } @@ -2278,9 +2145,9 @@ int AffixMgr::compound_check_morph(const char* word, short wnum, hentry** words, hentry** rwords, - char hu_mov_rule = 0, - char** result = NULL, - char* partresult = NULL) { + char hu_mov_rule, + std::string& result, + const std::string* partresult) { int i; short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2; int ok = 0; @@ -2291,12 +2158,11 @@ int AffixMgr::compound_check_morph(const char* word, char ch; int checked_prefix; - char presult[MAXLNLEN]; + std::string presult; int cmin; int cmax; - int onlycpdrule; char affixed = 0; hentry** oldwords = words; @@ -2314,7 +2180,7 @@ int AffixMgr::compound_check_morph(const char* word, } words = oldwords; - onlycpdrule = (words) ? 1 : 0; + int onlycpdrule = (words) ? 1 : 0; do { // onlycpdrule loop @@ -2330,9 +2196,9 @@ int AffixMgr::compound_check_morph(const char* word, affixed = 1; - *presult = '\0'; + presult.clear(); if (partresult) - mystrcat(presult, partresult, MAXLNLEN); + presult.append(*partresult); rv = lookup(st.c_str()); // perhaps without prefix @@ -2345,7 +2211,7 @@ int AffixMgr::compound_check_morph(const char* word, TESTAFF(rv->astr, compoundbegin, rv->alen)) || (compoundmiddle && wordnum && !words && !onlycpdrule && TESTAFF(rv->astr, compoundmiddle, rv->alen)) || - (numdefcpd && onlycpdrule && + (!defcpdtable.empty() && onlycpdrule && ((!words && !wordnum && defcpd_check(&words, wnum, rv, rwords, 0)) || (words && @@ -2357,28 +2223,26 @@ int AffixMgr::compound_check_morph(const char* word, affixed = 0; if (rv) { - sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_PART, st.c_str()); + presult.push_back(MSEP_FLD); + presult.append(MORPH_PART); + presult.append(st.c_str()); if (!HENTRY_FIND(rv, MORPH_STEM)) { - sprintf(presult + strlen(presult), "%c%s%s", MSEP_FLD, MORPH_STEM, - st.c_str()); + presult.push_back(MSEP_FLD); + presult.append(MORPH_STEM); + presult.append(st.c_str()); } - // store the pointer of the hash entry - // sprintf(presult + strlen(presult), "%c%s%p", MSEP_FLD, - // MORPH_HENTRY, rv); if (HENTRY_DATA(rv)) { - sprintf(presult + strlen(presult), "%c%s", MSEP_FLD, - HENTRY_DATA2(rv)); + presult.push_back(MSEP_FLD); + presult.append(HENTRY_DATA2(rv)); } } if (!rv) { - if (onlycpdrule && strlen(*result) > MAXLNLEN / 10) - break; if (compoundflag && !(rv = prefix_check(st.c_str(), i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) { - if (((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + if (((rv = suffix_check(st.c_str(), i, 0, NULL, FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && @@ -2395,7 +2259,7 @@ int AffixMgr::compound_check_morph(const char* word, if (rv || (((wordnum == 0) && compoundbegin && - ((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + ((rv = suffix_check(st.c_str(), i, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && @@ -2406,7 +2270,7 @@ int AffixMgr::compound_check_morph(const char* word, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundbegin)))) || ((wordnum > 0) && compoundmiddle && - ((rv = suffix_check(st.c_str(), i, 0, NULL, NULL, 0, NULL, FLAG_NULL, + ((rv = suffix_check(st.c_str(), i, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) || (compoundmoresuffixes && @@ -2416,26 +2280,23 @@ int AffixMgr::compound_check_morph(const char* word, (rv = prefix_check(st.c_str(), i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundmiddle)))))) { - // char * p = prefix_check_morph(st, i, 0, compound); - char* p = NULL; + std::string p; if (compoundflag) p = affix_check_morph(st.c_str(), i, compoundflag); - if (!p || (*p == '\0')) { - if (p) - free(p); - p = NULL; + if (p.empty()) { if ((wordnum == 0) && compoundbegin) { p = affix_check_morph(st.c_str(), i, compoundbegin); } else if ((wordnum > 0) && compoundmiddle) { p = affix_check_morph(st.c_str(), i, compoundmiddle); } } - if (p && (*p != '\0')) { - sprintf(presult + strlen(presult), "%c%s%s%s", MSEP_FLD, MORPH_PART, - st.c_str(), line_uniq_app(&p, MSEP_REC)); + if (!p.empty()) { + presult.push_back(MSEP_FLD); + presult.append(MORPH_PART); + presult.append(st.c_str()); + line_uniq_app(p, MSEP_REC); + presult.append(p); } - if (p) - free(p); checked_prefix = 1; } // else check forbiddenwords @@ -2507,7 +2368,7 @@ int AffixMgr::compound_check_morph(const char* word, )) || ( // test CHECKCOMPOUNDPATTERN - numcheckcpd && !words && + !checkcpdtable.empty() && !words && cpdpat_check(word, i, rv, NULL, affixed)) || (checkcompoundcase && !words && cpdcase_check(word, i)))) // LANG_hu section: spec. Hungarian rule @@ -2541,31 +2402,29 @@ int AffixMgr::compound_check_morph(const char* word, TESTAFF(rv->astr, compoundflag, rv->alen)) || (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) || - (numdefcpd && words && + (!defcpdtable.empty() && words && defcpd_check(&words, wnum + 1, rv, NULL, 1))))) { rv = rv->next_homonym; } if (rv && words && words[wnum + 1]) { - mystrcat(*result, presult, MAXLNLEN); - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_PART, MAXLNLEN); - mystrcat(*result, word + i, MAXLNLEN); + result.append(presult); + result.append(" "); + result.append(MORPH_PART); + result.append(word + i); if (complexprefixes && HENTRY_DATA(rv)) - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(HENTRY_DATA2(rv)); if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_STEM, MAXLNLEN); - mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); + result.append(" "); + result.append(MORPH_STEM); + result.append(HENTRY_WORD(rv)); } // store the pointer of the hash entry - // sprintf(*result + strlen(*result), " %s%p", - // MORPH_HENTRY, rv); if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(" "); + result.append(HENTRY_DATA2(rv)); } - mystrcat(*result, "\n", MAXLNLEN); + result.append("\n"); return 0; } @@ -2606,28 +2465,26 @@ int AffixMgr::compound_check_morph(const char* word, cpdmaxsyllable))) && ((!checkcompounddup || (rv != rv_first)))) { // bad compound word - mystrcat(*result, presult, MAXLNLEN); - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_PART, MAXLNLEN); - mystrcat(*result, word + i, MAXLNLEN); + result.append(presult); + result.append(" "); + result.append(MORPH_PART); + result.append(word + i); if (HENTRY_DATA(rv)) { if (complexprefixes) - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(HENTRY_DATA2(rv)); if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, MORPH_STEM, MAXLNLEN); - mystrcat(*result, HENTRY_WORD(rv), MAXLNLEN); + result.append(" "); + result.append(MORPH_STEM); + result.append(HENTRY_WORD(rv)); } // store the pointer of the hash entry - // sprintf(*result + strlen(*result), " - // %s%p", MORPH_HENTRY, rv); if (!complexprefixes) { - mystrcat(*result, " ", MAXLNLEN); - mystrcat(*result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(" "); + result.append(HENTRY_DATA2(rv)); } } - mystrcat(*result, "\n", MAXLNLEN); + result.append("\n"); ok = 1; } @@ -2649,27 +2506,24 @@ int AffixMgr::compound_check_morph(const char* word, rv = affix_check((word + i), strlen(word + i), compoundend); } - if (!rv && numdefcpd && words) { + if (!rv && !defcpdtable.empty() && words) { rv = affix_check((word + i), strlen(word + i), 0, IN_CPD_END); if (rv && words && defcpd_check(&words, wnum + 1, rv, NULL, 1)) { - char* m = NULL; + std::string m; if (compoundflag) m = affix_check_morph((word + i), strlen(word + i), compoundflag); - if ((!m || *m == '\0') && compoundend) { - if (m) - free(m); + if (m.empty() && compoundend) { m = affix_check_morph((word + i), strlen(word + i), compoundend); } - mystrcat(*result, presult, MAXLNLEN); - if (m || (*m != '\0')) { - char m2[MAXLNLEN]; - sprintf(m2, "%c%s%s%s", MSEP_FLD, MORPH_PART, word + i, - line_uniq_app(&m, MSEP_REC)); - mystrcat(*result, m2, MAXLNLEN); + result.append(presult); + if (!m.empty()) { + result.push_back(MSEP_FLD); + result.append(MORPH_PART); + result.append(word + i); + line_uniq_app(m, MSEP_REC); + result.append(m); } - if (m) - free(m); - mystrcat(*result, "\n", MAXLNLEN); + result.append("\n"); ok = 1; } } @@ -2713,7 +2567,7 @@ int AffixMgr::compound_check_morph(const char* word, // increment syllable num, if last word has a SYLLABLENUM flag // and the suffix is beginning `s' - if (cpdsyllablenum) { + if (!cpdsyllablenum.empty()) { switch (sfxflag) { case 'c': { numsyllable += 2; @@ -2745,25 +2599,21 @@ int AffixMgr::compound_check_morph(const char* word, (((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) || ((cpdmaxsyllable != 0) && (numsyllable <= cpdmaxsyllable))) && ((!checkcompounddup || (rv != rv_first)))) { - char* m = NULL; + std::string m; if (compoundflag) m = affix_check_morph((word + i), strlen(word + i), compoundflag); - if ((!m || *m == '\0') && compoundend) { - if (m) - free(m); + if (m.empty() && compoundend) { m = affix_check_morph((word + i), strlen(word + i), compoundend); } - mystrcat(*result, presult, MAXLNLEN); - if (m && (*m != '\0')) { - char m2[MAXLNLEN]; - sprintf(m2, "%c%s%s%s", MSEP_FLD, MORPH_PART, word + i, - line_uniq_app(&m, MSEP_REC)); - mystrcat(*result, m2, MAXLNLEN); + result.append(presult); + if (!m.empty()) { + result.push_back(MSEP_FLD); + result.append(MORPH_PART); + result.append(word + 1); + line_uniq_app(m, MSEP_REC); + result.append(m); } - if (m) - free(m); - if (strlen(*result) + 1 < MAXLNLEN) - sprintf(*result + strlen(*result), "%c", MSEP_REC); + result.push_back(MSEP_REC); ok = 1; } @@ -2774,7 +2624,7 @@ int AffixMgr::compound_check_morph(const char* word, if ((wordnum < maxwordnum) && (ok == 0)) { compound_check_morph((word + i), strlen(word + i), wordnum + 1, numsyllable, maxwordnum, wnum + 1, words, rwords, 0, - result, presult); + result, &presult); } else { rv = NULL; } @@ -2783,26 +2633,13 @@ int AffixMgr::compound_check_morph(const char* word, wordnum = oldwordnum; numsyllable = oldnumsyllable; - } while (numdefcpd && oldwordnum == 0 && + } while (!defcpdtable.empty() && oldwordnum == 0 && onlycpdrule++ < 1); // end of onlycpd loop } return 0; } -// return 1 if s1 (reversed) is a leading subset of end of s2 -/* inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int - len) - { - while ((len > 0) && *s1 && (*s1 == *end_of_s2)) { - s1++; - end_of_s2--; - len--; - } - return (*s1 == '\0'); - } - */ - inline int AffixMgr::isRevSubset(const char* s1, const char* end_of_s2, int len) { @@ -2815,14 +2652,10 @@ inline int AffixMgr::isRevSubset(const char* s1, } // check word for suffixes - struct hentry* AffixMgr::suffix_check(const char* word, int len, int sfxopts, PfxEntry* ppfx, - char** wlst, - int maxSug, - int* ns, const FLAG cclass, const FLAG needflag, char in_compound) { @@ -2861,7 +2694,7 @@ struct hentry* AffixMgr::suffix_check(const char* word, (ppfx && !((ep->getCont()) && TESTAFF(ep->getCont(), needaffix, ep->getContLen()))))) { - rv = se->checkword(word, len, sfxopts, ppfx, wlst, maxSug, ns, + rv = se->checkword(word, len, sfxopts, ppfx, (FLAG)cclass, needflag, (in_compound ? 0 : onlyincompound)); if (rv) { @@ -2912,7 +2745,7 @@ struct hentry* AffixMgr::suffix_check(const char* word, if (in_compound != IN_CPD_END || ppfx || !(sptr->getCont() && TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))) { - rv = sptr->checkword(word, len, sfxopts, ppfx, wlst, maxSug, ns, + rv = sptr->checkword(word, len, sfxopts, ppfx, cclass, needflag, (in_compound ? 0 : onlyincompound)); if (rv) { @@ -2985,23 +2818,21 @@ struct hentry* AffixMgr::suffix_check_twosfx(const char* word, return NULL; } -char* AffixMgr::suffix_check_twosfx_morph(const char* word, - int len, - int sfxopts, - PfxEntry* ppfx, - const FLAG needflag) { +std::string AffixMgr::suffix_check_twosfx_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag) { std::string result; std::string result2; std::string result3; - char* st; - // first handle the special case of 0 length suffixes SfxEntry* se = sStart[0]; while (se) { if (contclasses[se->getFlag()]) { - st = se->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); - if (st) { + std::string st = se->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); + if (!st.empty()) { if (ppfx) { if (ppfx->getMorph()) { result.append(ppfx->getMorph()); @@ -3010,7 +2841,6 @@ char* AffixMgr::suffix_check_twosfx_morph(const char* word, debugflag(result, ppfx->getFlag()); } result.append(st); - free(st); if (se->getMorph()) { result.append(" "); result.append(se->getMorph()); @@ -3024,20 +2854,19 @@ char* AffixMgr::suffix_check_twosfx_morph(const char* word, // now handle the general case if (len == 0) - return NULL; // FULLSTRIP + return std::string(); // FULLSTRIP unsigned char sp = *((const unsigned char*)(word + len - 1)); SfxEntry* sptr = sStart[sp]; while (sptr) { if (isRevSubset(sptr->getKey(), word + len - 1, len)) { if (contclasses[sptr->getFlag()]) { - st = sptr->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); - if (st) { + std::string st = sptr->check_twosfx_morph(word, len, sfxopts, ppfx, needflag); + if (!st.empty()) { sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless if (!sptr->getCont()) sfxappnd = sptr->getKey(); // BUG: sfxappnd not stateless result2.assign(st); - free(st); result3.clear(); @@ -3057,25 +2886,20 @@ char* AffixMgr::suffix_check_twosfx_morph(const char* word, } } - if (!result.empty()) - return mystrdup(result.c_str()); - - return NULL; + return result; } -char* AffixMgr::suffix_check_morph(const char* word, - int len, - int sfxopts, - PfxEntry* ppfx, - const FLAG cclass, - const FLAG needflag, - char in_compound) { - char result[MAXLNLEN]; +std::string AffixMgr::suffix_check_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG cclass, + const FLAG needflag, + char in_compound) { + std::string result; struct hentry* rv = NULL; - result[0] = '\0'; - PfxEntry* ep = ppfx; // first handle the special case of 0 length suffixes @@ -3109,37 +2933,34 @@ char* AffixMgr::suffix_check_morph(const char* word, (ppfx && !((ep->getCont()) && TESTAFF(ep->getCont(), needaffix, ep->getContLen())))))) - rv = se->checkword(word, len, sfxopts, ppfx, NULL, 0, 0, cclass, - needflag); + rv = se->checkword(word, len, sfxopts, ppfx, cclass, + needflag, FLAG_NULL); while (rv) { if (ppfx) { if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); + result.append(ppfx->getMorph()); + result.append(" "); } else debugflag(result, ppfx->getFlag()); } if (complexprefixes && HENTRY_DATA(rv)) - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(HENTRY_DATA2(rv)); if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); + result.append(" "); + result.append(MORPH_STEM); + result.append(HENTRY_WORD(rv)); } - // store the pointer of the hash entry - // sprintf(result + strlen(result), " %s%p", MORPH_HENTRY, - // rv); if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(" "); + result.append(HENTRY_DATA2(rv)); } if (se->getMorph()) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, se->getMorph(), MAXLNLEN); + result.append(" "); + result.append(se->getMorph()); } else debugflag(result, se->getFlag()); - mystrcat(result, "\n", MAXLNLEN); + result.append("\n"); rv = se->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); } } @@ -3148,7 +2969,7 @@ char* AffixMgr::suffix_check_morph(const char* word, // now handle the general case if (len == 0) - return NULL; // FULLSTRIP + return std::string(); // FULLSTRIP unsigned char sp = *((const unsigned char*)(word + len - 1)); SfxEntry* sptr = sStart[sp]; @@ -3179,38 +3000,35 @@ char* AffixMgr::suffix_check_morph(const char* word, (cclass || !(sptr->getCont() && TESTAFF(sptr->getCont(), needaffix, sptr->getContLen()))))) - rv = sptr->checkword(word, len, sfxopts, ppfx, NULL, 0, 0, cclass, - needflag); + rv = sptr->checkword(word, len, sfxopts, ppfx, cclass, + needflag, FLAG_NULL); while (rv) { if (ppfx) { if (ppfx->getMorph()) { - mystrcat(result, ppfx->getMorph(), MAXLNLEN); - mystrcat(result, " ", MAXLNLEN); + result.append(ppfx->getMorph()); + result.append(" "); } else debugflag(result, ppfx->getFlag()); } if (complexprefixes && HENTRY_DATA(rv)) - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(HENTRY_DATA2(rv)); if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, HENTRY_WORD(rv), MAXLNLEN); + result.append(" "); + result.append(MORPH_STEM); + result.append(HENTRY_WORD(rv)); } - // store the pointer of the hash entry - // sprintf(result + strlen(result), " %s%p", - // MORPH_HENTRY, rv); if (!complexprefixes && HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(" "); + result.append(HENTRY_DATA2(rv)); } if (sptr->getMorph()) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, sptr->getMorph(), MAXLNLEN); + result.append(" "); + result.append(sptr->getMorph()); } else debugflag(result, sptr->getFlag()); - mystrcat(result, "\n", MAXLNLEN); + result.append("\n"); rv = sptr->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag); } sptr = sptr->getNextEQ(); @@ -3219,9 +3037,7 @@ char* AffixMgr::suffix_check_morph(const char* word, } } - if (*result) - return mystrdup(result); - return NULL; + return result; } // check if word with affixes is correctly spelled @@ -3237,8 +3053,7 @@ struct hentry* AffixMgr::affix_check(const char* word, return rv; // if still not found check all suffixes - rv = suffix_check(word, len, 0, NULL, NULL, 0, NULL, FLAG_NULL, needflag, - in_compound); + rv = suffix_check(word, len, 0, NULL, FLAG_NULL, needflag, in_compound); if (havecontclass) { sfx = NULL; @@ -3259,27 +3074,22 @@ struct hentry* AffixMgr::affix_check(const char* word, } // check if word with affixes is correctly spelled -char* AffixMgr::affix_check_morph(const char* word, +std::string AffixMgr::affix_check_morph(const char* word, int len, const FLAG needflag, char in_compound) { - char result[MAXLNLEN]; - char* st = NULL; - - *result = '\0'; + std::string result; // check all prefixes (also crossed with suffixes if allowed) - st = prefix_check_morph(word, len, in_compound); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = prefix_check_morph(word, len, in_compound); + if (!st.empty()) { + result.append(st); } // if still not found check all suffixes st = suffix_check_morph(word, len, 0, NULL, '\0', needflag, in_compound); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + if (!st.empty()) { + result.append(st); } if (havecontclass) { @@ -3287,39 +3097,120 @@ char* AffixMgr::affix_check_morph(const char* word, pfx = NULL; // if still not found check all two-level suffixes st = suffix_check_twosfx_morph(word, len, 0, NULL, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + if (!st.empty()) { + result.append(st); } // if still not found check all two-level suffixes st = prefix_check_twosfx_morph(word, len, IN_CPD_NOT, needflag); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + if (!st.empty()) { + result.append(st); } } - return mystrdup(result); + return result; +} + +// morphcmp(): compare MORPH_DERI_SFX, MORPH_INFL_SFX and MORPH_TERM_SFX fields +// in the first line of the inputs +// return 0, if inputs equal +// return 1, if inputs may equal with a secondary suffix +// otherwise return -1 +static int morphcmp(const char* s, const char* t) { + int se = 0; + int te = 0; + const char* sl; + const char* tl; + const char* olds; + const char* oldt; + if (!s || !t) + return 1; + olds = s; + sl = strchr(s, '\n'); + s = strstr(s, MORPH_DERI_SFX); + if (!s || (sl && sl < s)) + s = strstr(olds, MORPH_INFL_SFX); + if (!s || (sl && sl < s)) { + s = strstr(olds, MORPH_TERM_SFX); + olds = NULL; + } + oldt = t; + tl = strchr(t, '\n'); + t = strstr(t, MORPH_DERI_SFX); + if (!t || (tl && tl < t)) + t = strstr(oldt, MORPH_INFL_SFX); + if (!t || (tl && tl < t)) { + t = strstr(oldt, MORPH_TERM_SFX); + oldt = NULL; + } + while (s && t && (!sl || sl > s) && (!tl || tl > t)) { + s += MORPH_TAG_LEN; + t += MORPH_TAG_LEN; + se = 0; + te = 0; + while ((*s == *t) && !se && !te) { + s++; + t++; + switch (*s) { + case ' ': + case '\n': + case '\t': + case '\0': + se = 1; + } + switch (*t) { + case ' ': + case '\n': + case '\t': + case '\0': + te = 1; + } + } + if (!se || !te) { + // not terminal suffix difference + if (olds) + return -1; + return 1; + } + olds = s; + s = strstr(s, MORPH_DERI_SFX); + if (!s || (sl && sl < s)) + s = strstr(olds, MORPH_INFL_SFX); + if (!s || (sl && sl < s)) { + s = strstr(olds, MORPH_TERM_SFX); + olds = NULL; + } + oldt = t; + t = strstr(t, MORPH_DERI_SFX); + if (!t || (tl && tl < t)) + t = strstr(oldt, MORPH_INFL_SFX); + if (!t || (tl && tl < t)) { + t = strstr(oldt, MORPH_TERM_SFX); + oldt = NULL; + } + } + if (!s && !t && se && te) + return 0; + return 1; } -char* AffixMgr::morphgen(const char* ts, - int wl, - const unsigned short* ap, - unsigned short al, - const char* morph, - const char* targetmorph, +std::string AffixMgr::morphgen(const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* morph, + const char* targetmorph, int level) { // handle suffixes if (!morph) - return NULL; + return std::string(); // check substandard flag if (TESTAFF(ap, substandard, al)) - return NULL; + return std::string(); if (morphcmp(morph, targetmorph) == 0) - return mystrdup(ts); + return ts; size_t stemmorphcatpos; std::string mymorph; @@ -3352,41 +3243,36 @@ char* AffixMgr::morphgen(const char* ts, int cmp = morphcmp(stemmorph, targetmorph); if (cmp == 0) { - char* newword = sptr->add(ts, wl); - if (newword) { - hentry* check = pHMgr->lookup(newword); // XXX extra dic + std::string newword = sptr->add(ts, wl); + if (!newword.empty()) { + hentry* check = pHMgr->lookup(newword.c_str()); // XXX extra dic if (!check || !check->astr || !(TESTAFF(check->astr, forbiddenword, check->alen) || TESTAFF(check->astr, ONLYUPCASEFLAG, check->alen))) { return newword; } - free(newword); } } // recursive call for secondary suffixes if ((level == 0) && (cmp == 1) && (sptr->getContLen() > 0) && - // (get_sfxcount(stemmorph) < targetcount) && !TESTAFF(sptr->getCont(), substandard, sptr->getContLen())) { - char* newword = sptr->add(ts, wl); - if (newword) { - char* newword2 = - morphgen(newword, strlen(newword), sptr->getCont(), + std::string newword = sptr->add(ts, wl); + if (!newword.empty()) { + std::string newword2 = + morphgen(newword.c_str(), newword.size(), sptr->getCont(), sptr->getContLen(), stemmorph, targetmorph, 1); - if (newword2) { - free(newword); + if (!newword2.empty()) { return newword2; } - free(newword); - newword = NULL; } } } sptr = sptr->getFlgNxt(); } } - return NULL; + return std::string(); } int AffixMgr::expand_rootword(struct guessword* wlst, @@ -3439,10 +3325,10 @@ int AffixMgr::expand_rootword(struct guessword* wlst, TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())) || (onlyincompound && TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) { - char* newword = sptr->add(ts, wl); - if (newword) { + std::string newword = sptr->add(ts, wl); + if (!newword.empty()) { if (nh < maxn) { - wlst[nh].word = newword; + wlst[nh].word = mystrdup(newword.c_str()); wlst[nh].allow = sptr->allowCross(); wlst[nh].orig = NULL; nh++; @@ -3456,13 +3342,11 @@ int AffixMgr::expand_rootword(struct guessword* wlst, if (!wlst[nh].word) return nh - 1; wlst[nh].allow = (1 == 0); - wlst[nh].orig = mystrdup(newword); + wlst[nh].orig = mystrdup(newword.c_str()); if (!wlst[nh].orig) return nh - 1; nh++; } - } else { - free(newword); } } } @@ -3484,15 +3368,13 @@ int AffixMgr::expand_rootword(struct guessword* wlst, ((badl > cptr->getKeyLen()) && (strncmp(cptr->getKey(), bad, cptr->getKeyLen()) == 0)))) { int l1 = strlen(wlst[j].word); - char* newword = cptr->add(wlst[j].word, l1); - if (newword) { + std::string newword = cptr->add(wlst[j].word, l1); + if (!newword.empty()) { if (nh < maxn) { - wlst[nh].word = newword; + wlst[nh].word = mystrdup(newword.c_str()); wlst[nh].allow = cptr->allowCross(); wlst[nh].orig = NULL; nh++; - } else { - free(newword); } } } @@ -3518,15 +3400,13 @@ int AffixMgr::expand_rootword(struct guessword* wlst, TESTAFF(ptr->getCont(), circumfix, ptr->getContLen())) || (onlyincompound && TESTAFF(ptr->getCont(), onlyincompound, ptr->getContLen()))))) { - char* newword = ptr->add(ts, wl); - if (newword) { + std::string newword = ptr->add(ts, wl); + if (!newword.empty()) { if (nh < maxn) { - wlst[nh].word = newword; + wlst[nh].word = mystrdup(newword.c_str()); wlst[nh].allow = ptr->allowCross(); wlst[nh].orig = NULL; nh++; - } else { - free(newword); } } } @@ -3537,15 +3417,8 @@ int AffixMgr::expand_rootword(struct guessword* wlst, return nh; } -// return length of replacing table -int AffixMgr::get_numrep() const { - return numrep; -} - // return replacing table -struct replentry* AffixMgr::get_reptable() const { - if (!reptable) - return NULL; +const std::vector& AffixMgr::get_reptable() const { return reptable; } @@ -3570,35 +3443,21 @@ struct phonetable* AffixMgr::get_phonetable() const { return phone; } -// return length of character map table -int AffixMgr::get_nummap() const { - return nummap; -} - // return character map table -struct mapentry* AffixMgr::get_maptable() const { - if (!maptable) - return NULL; +const std::vector& AffixMgr::get_maptable() const { return maptable; } -// return length of word break table -int AffixMgr::get_numbreak() const { - return numbreak; -} - // return character map table -char** AffixMgr::get_breaktable() const { - if (!breaktable) - return NULL; +const std::vector& AffixMgr::get_breaktable() const { return breaktable; } // return text encoding of dictionary -char* AffixMgr::get_encoding() { - if (!encoding) - encoding = mystrdup(SPELL_ENCODING); - return mystrdup(encoding); +const std::string& AffixMgr::get_encoding() { + if (encoding.empty()) + encoding = SPELL_ENCODING; + return encoding; } // return text encoding of dictionary @@ -3641,10 +3500,10 @@ char* AffixMgr::encode_flag(unsigned short aflag) const { } // return the preferred ignore string for suggestions -char* AffixMgr::get_ignore() const { - if (!ignorechars) +const char* AffixMgr::get_ignore() const { + if (ignorechars.empty()) return NULL; - return ignorechars; + return ignorechars.c_str(); } // return the preferred ignore string for suggestions @@ -3654,20 +3513,20 @@ const std::vector& AffixMgr::get_ignore_utf16() const { // return the keyboard string for suggestions char* AffixMgr::get_key_string() { - if (!keystring) - keystring = mystrdup(SPELL_KEYSTRING); - return mystrdup(keystring); + if (keystring.empty()) + keystring = SPELL_KEYSTRING; + return mystrdup(keystring.c_str()); } // return the preferred try string for suggestions char* AffixMgr::get_try_string() const { - if (!trystring) + if (trystring.empty()) return NULL; - return mystrdup(trystring); + return mystrdup(trystring.c_str()); } // return the preferred try string for suggestions -const char* AffixMgr::get_wordchars() const { +const std::string& AffixMgr::get_wordchars() const { return wordchars; } @@ -3677,7 +3536,7 @@ const std::vector& AffixMgr::get_wordchars_utf16() const { // is there compounding? int AffixMgr::get_compound() const { - return compoundflag || compoundbegin || numdefcpd; + return compoundflag || compoundbegin || !defcpdtable.empty(); } // return the compound words control flag @@ -3710,49 +3569,16 @@ FLAG AffixMgr::get_onlyincompound() const { return onlyincompound; } -// return the compound word signal flag -FLAG AffixMgr::get_compoundroot() const { - return compoundroot; -} - -// return the compound begin signal flag -FLAG AffixMgr::get_compoundbegin() const { - return compoundbegin; -} - -// return the value of checknum -int AffixMgr::get_checknum() const { - return checknum; -} - -// return the value of prefix -const char* AffixMgr::get_prefix() const { - if (pfx) - return pfx->getKey(); - return NULL; -} - -// return the value of suffix -const char* AffixMgr::get_suffix() const { - return sfxappnd; -} - // return the value of suffix -const char* AffixMgr::get_version() const { +const std::string& AffixMgr::get_version() const { return version; } -// return lemma_present flag -FLAG AffixMgr::get_lemma_present() const { - return lemma_present; -} - // utility method to look up root words in hash table struct hentry* AffixMgr::lookup(const char* word) { - int i; struct hentry* he = NULL; - for (i = 0; i < *maxdic && !he; i++) { - he = (alldic[i])->lookup(word); + for (size_t i = 0; i < alldic.size() && !he; ++i) { + he = alldic[i]->lookup(word); } return he; } @@ -3794,839 +3620,751 @@ int AffixMgr::get_sugswithdots(void) const { } /* parse flag */ -int AffixMgr::parse_flag(char* line, unsigned short* out, FileMgr* af) { - char* s = NULL; +bool AffixMgr::parse_flag(const std::string& line, unsigned short* out, FileMgr* af) { if (*out != FLAG_NULL && !(*out >= DEFAULTFLAGS)) { HUNSPELL_WARNING( stderr, "error: line %d: multiple definitions of an affix file parameter\n", af->getlinenum()); - return 1; + return false; } - if (parse_string(line, &s, af->getlinenum())) - return 1; - *out = pHMgr->decode_flag(s); - free(s); - return 0; + std::string s; + if (!parse_string(line, s, af->getlinenum())) + return false; + *out = pHMgr->decode_flag(s.c_str()); + return true; } /* parse num */ -int AffixMgr::parse_num(char* line, int* out, FileMgr* af) { - char* s = NULL; +bool AffixMgr::parse_num(const std::string& line, int* out, FileMgr* af) { if (*out != -1) { HUNSPELL_WARNING( stderr, "error: line %d: multiple definitions of an affix file parameter\n", af->getlinenum()); - return 1; + return false; } - if (parse_string(line, &s, af->getlinenum())) - return 1; - *out = atoi(s); - free(s); - return 0; + std::string s; + if (!parse_string(line, s, af->getlinenum())) + return false; + *out = atoi(s.c_str()); + return true; } /* parse in the max syllablecount of compound words and */ -int AffixMgr::parse_cpdsyllable(char* line, FileMgr* af) { - char* tp = line; - char* piece; +bool AffixMgr::parse_cpdsyllable(const std::string& line, FileMgr* af) { int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - cpdmaxsyllable = atoi(piece); - np++; - break; - } - case 2: { - if (!utf8) { - cpdvowels = mystrdup(piece); - } else { - std::vector w; - u8_u16(w, piece); - if (!w.empty()) { - std::sort(w.begin(), w.end()); - cpdvowels_utf16 = (w_char*)malloc(w.size() * sizeof(w_char)); - if (!cpdvowels_utf16) - return 1; - memcpy(cpdvowels_utf16, &w[0], w.size()); - } - cpdvowels_utf16_len = w.size(); - } - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + cpdmaxsyllable = atoi(std::string(start_piece, iter).c_str()); + np++; + break; + } + case 2: { + if (!utf8) { + cpdvowels.assign(start_piece, iter); + std::sort(cpdvowels.begin(), cpdvowels.end()); + } else { + std::string piece(start_piece, iter); + u8_u16(cpdvowels_utf16, piece); + std::sort(cpdvowels_utf16.begin(), cpdvowels_utf16.end()); } - default: - break; + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np < 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing compoundsyllable information\n", af->getlinenum()); - return 1; + return false; } if (np == 2) - cpdvowels = mystrdup("aeiouAEIOU"); - return 0; + cpdvowels = "AEIOUaeiou"; + return true; } /* parse in the typical fault correcting table */ -int AffixMgr::parse_reptable(char* line, FileMgr* af) { - if (numrep != 0) { +bool AffixMgr::parse_reptable(const std::string& line, FileMgr* af) { + if (parsedrep) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + parsedrep = true; + int numrep = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - numrep = atoi(piece); - if (numrep < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", - af->getlinenum()); - return 1; - } - reptable = (replentry*)malloc(numrep * sizeof(struct replentry)); - if (!reptable) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numrep = atoi(std::string(start_piece, iter).c_str()); + if (numrep < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", + af->getlinenum()); + return false; } - default: - break; + reptable.reserve(numrep); + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numrep lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < numrep; j++) { - if ((nl = af->getline()) == NULL) - return 1; + for (int j = 0; j < numrep; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; + reptable.push_back(replentry()); + iter = nl.begin(); i = 0; - reptable[j].pattern = NULL; - reptable[j].pattern2 = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "REP", 3) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numrep = 0; - return 1; - } - break; - } - case 1: { - if (*piece == '^') - reptable[j].start = true; - else - reptable[j].start = false; - reptable[j].pattern = - mystrrep(mystrdup(piece + int(reptable[j].start)), "_", " "); - int lr = strlen(reptable[j].pattern) - 1; - if (reptable[j].pattern[lr] == '$') { - reptable[j].end = true; - reptable[j].pattern[lr] = '\0'; - } else - reptable[j].end = false; - break; + int type = 0; + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 3, "REP", 3) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + reptable.clear(); + return false; } - case 2: { - reptable[j].pattern2 = mystrrep(mystrdup(piece), "_", " "); - break; + break; + } + case 1: { + if (*start_piece == '^') + type = 1; + reptable.back().pattern.assign(start_piece + type, iter); + mystrrep(reptable.back().pattern, "_", " "); + if (!reptable.back().pattern.empty() && reptable.back().pattern[reptable.back().pattern.size() - 1] == '$') { + type += 2; + reptable.back().pattern.resize(reptable.back().pattern.size() - 1); } - default: - break; + break; + } + case 2: { + reptable.back().outstrings[type].assign(start_piece, iter); + mystrrep(reptable.back().outstrings[type], "_", " "); + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(nl, iter); } - if ((!(reptable[j].pattern)) || (!(reptable[j].pattern2))) { + if (reptable.back().pattern.empty() || reptable.back().outstrings[type].empty()) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numrep = 0; - return 1; + reptable.clear(); + return false; } } - return 0; + return true; } /* parse in the typical fault correcting table */ -int AffixMgr::parse_convtable(char* line, +bool AffixMgr::parse_convtable(const std::string& line, FileMgr* af, RepList** rl, - const char* keyword) { + const std::string& keyword) { if (*rl) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; int i = 0; int np = 0; int numrl = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - numrl = atoi(piece); - if (numrl < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", - af->getlinenum()); - return 1; - } - *rl = new RepList(numrl); - if (!*rl) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numrl = atoi(std::string(start_piece, iter).c_str()); + if (numrl < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: incorrect entry number\n", + af->getlinenum()); + return false; } - default: - break; + *rl = new RepList(numrl); + if (!*rl) + return false; + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the num lines to read in the remainder of the table */ - char* nl; for (int j = 0; j < numrl; j++) { - if (!(nl = af->getline())) - return 1; + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - char* pattern = NULL; - char* pattern2 = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { + std::string pattern; + std::string pattern2; + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + { switch (i) { case 0: { - if (strncmp(piece, keyword, strlen(keyword)) != 0) { + if (nl.compare(start_piece - nl.begin(), keyword.size(), keyword, 0, keyword.size()) != 0) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); delete *rl; *rl = NULL; - return 1; + return false; } break; } case 1: { - pattern = mystrrep(mystrdup(piece), "_", " "); + pattern.assign(start_piece, iter); break; } case 2: { - pattern2 = mystrrep(mystrdup(piece), "_", " "); + pattern2.assign(start_piece, iter); break; } default: break; } - i++; + ++i; } - piece = mystrsep(&tp, 0); + start_piece = mystrsep(nl, iter); } - if (!pattern || !pattern2) { - if (pattern) - free(pattern); - if (pattern2) - free(pattern2); + if (pattern.empty() || pattern2.empty()) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; + return false; } (*rl)->add(pattern, pattern2); } - return 0; + return true; } /* parse in the typical fault correcting table */ -int AffixMgr::parse_phonetable(char* line, FileMgr* af) { +bool AffixMgr::parse_phonetable(const std::string& line, FileMgr* af) { if (phone) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + int num = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - phone = (phonetable*)malloc(sizeof(struct phonetable)); - if (!phone) - return 1; - phone->num = atoi(piece); - phone->rules = NULL; - phone->utf8 = (char)utf8; - if (phone->num < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - phone->rules = (char**)malloc(2 * (phone->num + 1) * sizeof(char*)); - if (!phone->rules) { - free(phone); - phone = NULL; - return 1; - } - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + num = atoi(std::string(start_piece, iter).c_str()); + if (num < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - default: - break; + phone = new phonetable; + phone->utf8 = (char)utf8; + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the phone->num lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < phone->num; j++) { - if (!(nl = af->getline())) - return 1; + for (int j = 0; j < num; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - phone->rules[j * 2] = NULL; - phone->rules[j * 2 + 1] = NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { + const size_t old_size = phone->rules.size(); + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + { switch (i) { case 0: { - if (strncmp(piece, "PHONE", 5) != 0) { + if (nl.compare(start_piece - nl.begin(), 5, "PHONE", 5) != 0) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - phone->num = 0; - return 1; + return false; } break; } case 1: { - phone->rules[j * 2] = mystrrep(mystrdup(piece), "_", ""); + phone->rules.push_back(std::string(start_piece, iter)); break; } case 2: { - phone->rules[j * 2 + 1] = mystrrep(mystrdup(piece), "_", ""); + phone->rules.push_back(std::string(start_piece, iter)); + mystrrep(phone->rules.back(), "_", ""); break; } default: break; } - i++; + ++i; } - piece = mystrsep(&tp, 0); + start_piece = mystrsep(nl, iter); } - if ((!(phone->rules[j * 2])) || (!(phone->rules[j * 2 + 1]))) { + if (phone->rules.size() != old_size + 2) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - phone->num = 0; - return 1; + phone->rules.clear(); + return false; } } - phone->rules[phone->num * 2] = mystrdup(""); - phone->rules[phone->num * 2 + 1] = mystrdup(""); + phone->rules.push_back(""); + phone->rules.push_back(""); init_phonet_hash(*phone); - return 0; + return true; } /* parse in the checkcompoundpattern table */ -int AffixMgr::parse_checkcpdtable(char* line, FileMgr* af) { - if (numcheckcpd != 0) { +bool AffixMgr::parse_checkcpdtable(const std::string& line, FileMgr* af) { + if (parsedcheckcpd) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + parsedcheckcpd = true; + int numcheckcpd = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - numcheckcpd = atoi(piece); - if (numcheckcpd < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - checkcpdtable = - (patentry*)malloc(numcheckcpd * sizeof(struct patentry)); - if (!checkcpdtable) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numcheckcpd = atoi(std::string(start_piece, iter).c_str()); + if (numcheckcpd < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - default: - break; + checkcpdtable.reserve(numcheckcpd); + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numcheckcpd lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < numcheckcpd; j++) { - if (!(nl = af->getline())) - return 1; + for (int j = 0; j < numcheckcpd; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - checkcpdtable[j].pattern = NULL; - checkcpdtable[j].pattern2 = NULL; - checkcpdtable[j].pattern3 = NULL; - checkcpdtable[j].cond = FLAG_NULL; - checkcpdtable[j].cond2 = FLAG_NULL; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "CHECKCOMPOUNDPATTERN", 20) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numcheckcpd = 0; - return 1; - } - break; - } - case 1: { - checkcpdtable[j].pattern = mystrdup(piece); - char* p = strchr(checkcpdtable[j].pattern, '/'); - if (p) { - *p = '\0'; - checkcpdtable[j].cond = pHMgr->decode_flag(p + 1); - } - break; + checkcpdtable.push_back(patentry()); + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 20, "CHECKCOMPOUNDPATTERN", 20) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + return false; } - case 2: { - checkcpdtable[j].pattern2 = mystrdup(piece); - char* p = strchr(checkcpdtable[j].pattern2, '/'); - if (p) { - *p = '\0'; - checkcpdtable[j].cond2 = pHMgr->decode_flag(p + 1); - } - break; + break; + } + case 1: { + checkcpdtable.back().pattern.assign(start_piece, iter); + size_t slash_pos = checkcpdtable.back().pattern.find('/'); + if (slash_pos != std::string::npos) { + std::string chunk(checkcpdtable.back().pattern, slash_pos + 1); + checkcpdtable.back().pattern.resize(slash_pos); + checkcpdtable.back().cond = pHMgr->decode_flag(chunk.c_str()); } - case 3: { - checkcpdtable[j].pattern3 = mystrdup(piece); - simplifiedcpd = 1; - break; + break; + } + case 2: { + checkcpdtable.back().pattern2.assign(start_piece, iter); + size_t slash_pos = checkcpdtable.back().pattern2.find('/'); + if (slash_pos != std::string::npos) { + std::string chunk(checkcpdtable.back().pattern2, slash_pos + 1); + checkcpdtable.back().pattern2.resize(slash_pos); + checkcpdtable.back().cond2 = pHMgr->decode_flag(chunk.c_str()); } - default: - break; + break; + } + case 3: { + checkcpdtable.back().pattern3.assign(start_piece, iter); + simplifiedcpd = 1; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); - } - if ((!(checkcpdtable[j].pattern)) || (!(checkcpdtable[j].pattern2))) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numcheckcpd = 0; - return 1; + i++; + start_piece = mystrsep(nl, iter); } } - return 0; + return true; } /* parse in the compound rule table */ -int AffixMgr::parse_defcpdtable(char* line, FileMgr* af) { - if (numdefcpd != 0) { +bool AffixMgr::parse_defcpdtable(const std::string& line, FileMgr* af) { + if (parseddefcpd) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + parseddefcpd = true; + int numdefcpd = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - numdefcpd = atoi(piece); - if (numdefcpd < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - defcpdtable = (flagentry*)malloc(numdefcpd * sizeof(flagentry)); - if (!defcpdtable) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numdefcpd = atoi(std::string(start_piece, iter).c_str()); + if (numdefcpd < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - default: - break; + defcpdtable.reserve(numdefcpd); + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numdefcpd lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < numdefcpd; j++) { - if (!(nl = af->getline())) - return 1; + for (int j = 0; j < numdefcpd; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - defcpdtable[j].def = NULL; - defcpdtable[j].len = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "COMPOUNDRULE", 12) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numdefcpd = 0; - return 1; - } - break; + defcpdtable.push_back(flagentry()); + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 12, "COMPOUNDRULE", 12) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numdefcpd = 0; + return false; } - case 1: { // handle parenthesized flags - if (strchr(piece, '(')) { - defcpdtable[j].def = (FLAG*)malloc(strlen(piece) * sizeof(FLAG)); - defcpdtable[j].len = 0; - int end = 0; - FLAG* conv; - while (!end) { - char* par = piece + 1; - while (*par != '(' && *par != ')' && *par != '\0') - par++; - if (*par == '\0') - end = 1; - else - *par = '\0'; - if (*piece == '(') - piece++; - if (*piece == '*' || *piece == '?') { - defcpdtable[j].def[defcpdtable[j].len++] = (FLAG)*piece; - } else if (*piece != '\0') { - int l = pHMgr->decode_flags(&conv, piece, af); - for (int k = 0; k < l; k++) - defcpdtable[j].def[defcpdtable[j].len++] = conv[k]; - free(conv); + break; + } + case 1: { // handle parenthesized flags + if (std::find(start_piece, iter, '(') != iter) { + for (std::string::const_iterator k = start_piece; k != iter; ++k) { + std::string::const_iterator chb = k; + std::string::const_iterator che = k + 1; + if (*k == '(') { + std::string::const_iterator parpos = std::find(k, iter, ')'); + if (parpos != iter) { + chb = k + 1; + che = parpos; + k = parpos; } - piece = par + 1; } - } else { - defcpdtable[j].len = - pHMgr->decode_flags(&(defcpdtable[j].def), piece, af); + + if (*chb == '*' || *chb == '?') { + defcpdtable.back().push_back((FLAG)*chb); + } else { + pHMgr->decode_flags(defcpdtable.back(), std::string(chb, che), af); + } } - break; + } else { + pHMgr->decode_flags(defcpdtable.back(), std::string(start_piece, iter), af); } - default: - break; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(nl, iter); } - if (!defcpdtable[j].len) { + if (defcpdtable.back().empty()) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - numdefcpd = 0; - return 1; + return false; } } - return 0; + return true; } /* parse in the character map table */ -int AffixMgr::parse_maptable(char* line, FileMgr* af) { - if (nummap != 0) { +bool AffixMgr::parse_maptable(const std::string& line, FileMgr* af) { + if (parsedmaptable) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + parsedmaptable = true; + int nummap = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - nummap = atoi(piece); - if (nummap < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - maptable = (mapentry*)malloc(nummap * sizeof(struct mapentry)); - if (!maptable) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + nummap = atoi(std::string(start_piece, iter).c_str()); + if (nummap < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - default: - break; + maptable.reserve(nummap); + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the nummap lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < nummap; j++) { - if (!(nl = af->getline())) - return 1; + for (int j = 0; j < nummap; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - maptable[j].set = NULL; - maptable[j].len = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "MAP", 3) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - nummap = 0; - return 1; - } - break; + maptable.push_back(mapentry()); + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 3, "MAP", 3) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + nummap = 0; + return false; } - case 1: { - int setn = 0; - maptable[j].len = strlen(piece); - maptable[j].set = (char**)malloc(maptable[j].len * sizeof(char*)); - if (!maptable[j].set) - return 1; - for (int k = 0; k < maptable[j].len; k++) { - int chl = 1; - int chb = k; - if (piece[k] == '(') { - char* parpos = strchr(piece + k, ')'); - if (parpos != NULL) { - chb = k + 1; - chl = (int)(parpos - piece) - k - 1; - k = k + chl + 1; - } - } else { - if (utf8 && (piece[k] & 0xc0) == 0xc0) { - for (k++; utf8 && (piece[k] & 0xc0) == 0x80; k++) - ; - chl = k - chb; - k--; - } + break; + } + case 1: { + for (std::string::const_iterator k = start_piece; k != iter; ++k) { + std::string::const_iterator chb = k; + std::string::const_iterator che = k + 1; + if (*k == '(') { + std::string::const_iterator parpos = std::find(k, iter, ')'); + if (parpos != iter) { + chb = k + 1; + che = parpos; + k = parpos; + } + } else { + if (utf8 && (*k & 0xc0) == 0xc0) { + ++k; + while (k != iter && (*k & 0xc0) == 0x80) + ++k; + che = k; + --k; } - maptable[j].set[setn] = (char*)malloc(chl + 1); - if (!maptable[j].set[setn]) - return 1; - strncpy(maptable[j].set[setn], piece + chb, chl); - maptable[j].set[setn][chl] = '\0'; - setn++; } - maptable[j].len = setn; - break; + maptable.back().push_back(std::string(chb, che)); } - default: - break; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(nl, iter); } - if (!maptable[j].set || !maptable[j].len) { + if (maptable.back().empty()) { HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - nummap = 0; - return 1; + return false; } } - return 0; + return true; } /* parse in the word breakpoint table */ -int AffixMgr::parse_breaktable(char* line, FileMgr* af) { - if (numbreak > -1) { +bool AffixMgr::parse_breaktable(const std::string& line, FileMgr* af) { + if (parsedbreaktable) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; + parsedbreaktable = true; + int numbreak = -1; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - numbreak = atoi(piece); - if (numbreak < 0) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - if (numbreak == 0) - return 0; - breaktable = (char**)malloc(numbreak * sizeof(char*)); - if (!breaktable) - return 1; - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numbreak = atoi(std::string(start_piece, iter).c_str()); + if (numbreak < 0) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - default: - break; + if (numbreak == 0) + return true; + breaktable.reserve(numbreak); + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numbreak lines to read in the remainder of the table */ - char* nl; - for (int j = 0; j < numbreak; j++) { - if (!(nl = af->getline())) - return 1; + for (int j = 0; j < numbreak; ++j) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "BREAK", 5) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numbreak = 0; - return 1; - } - break; - } - case 1: { - breaktable[j] = mystrdup(piece); - break; + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 5, "BREAK", 5) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numbreak = 0; + return false; } - default: - break; + break; } - i++; + case 1: { + breaktable.push_back(std::string(start_piece, iter)); + break; + } + default: + break; } - piece = mystrsep(&tp, 0); - } - if (!breaktable) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numbreak = 0; - return 1; + ++i; + start_piece = mystrsep(nl, iter); } } - return 0; + + if (breaktable.size() != static_cast(numbreak)) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + return false; + } + + return true; } void AffixMgr::reverse_condition(std::string& piece) { @@ -4665,20 +4403,68 @@ void AffixMgr::reverse_condition(std::string& piece) { } } -int AffixMgr::parse_affix(char* line, +class entries_container { + std::vector entries; + AffixMgr* m_mgr; + char m_at; +public: + entries_container(char at, AffixMgr* mgr) + : m_mgr(mgr) + , m_at(at) { + } + void release() { + entries.clear(); + } + void initialize(int numents, + char opts, unsigned short aflag) { + entries.reserve(numents); + + if (m_at == 'P') { + entries.push_back(new PfxEntry(m_mgr)); + } else { + entries.push_back(new SfxEntry(m_mgr)); + } + + entries.back()->opts = opts; + entries.back()->aflag = aflag; + } + + AffEntry* add_entry(char opts) { + if (m_at == 'P') { + entries.push_back(new PfxEntry(m_mgr)); + } else { + entries.push_back(new SfxEntry(m_mgr)); + } + AffEntry* ret = entries.back(); + ret->opts = entries[0]->opts & opts; + return ret; + } + + AffEntry* first_entry() { + return entries.empty() ? NULL : entries[0]; + } + + ~entries_container() { + for (size_t i = 0; i < entries.size(); ++i) { + delete entries[i]; + } + } + + std::vector::iterator begin() { return entries.begin(); } + std::vector::iterator end() { return entries.end(); } +}; + +bool AffixMgr::parse_affix(const std::string& line, const char at, FileMgr* af, char* dupflags) { - int numents = 0; // number of affentry structures to parse + int numents = 0; // number of AffEntry structures to parse unsigned short aflag = 0; // affix char identifier char ff = 0; - std::vector affentries; + entries_container affentries(at, this); - char* tp = line; - char* nl = line; - char* piece; int i = 0; // checking lines with bad syntax @@ -4689,71 +4475,68 @@ int AffixMgr::parse_affix(char* line, // split affix header line into pieces int np = 0; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + // piece 1 - is type of affix + case 0: { + np++; + break; + } - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - // piece 1 - is type of affix - case 0: { - np++; - break; - } - - // piece 2 - is affix char - case 1: { - np++; - aflag = pHMgr->decode_flag(piece); - if (((at == 'S') && (dupflags[aflag] & dupSFX)) || - ((at == 'P') && (dupflags[aflag] & dupPFX))) { - HUNSPELL_WARNING( - stderr, - "error: line %d: multiple definitions of an affix flag\n", - af->getlinenum()); - // return 1; XXX permissive mode for bad dictionaries - } - dupflags[aflag] += (char)((at == 'S') ? dupSFX : dupPFX); - break; - } - // piece 3 - is cross product indicator - case 2: { - np++; - if (*piece == 'Y') - ff = aeXPRODUCT; - break; + // piece 2 - is affix char + case 1: { + np++; + aflag = pHMgr->decode_flag(std::string(start_piece, iter).c_str()); + if (((at == 'S') && (dupflags[aflag] & dupSFX)) || + ((at == 'P') && (dupflags[aflag] & dupPFX))) { + HUNSPELL_WARNING( + stderr, + "error: line %d: multiple definitions of an affix flag\n", + af->getlinenum()); } + dupflags[aflag] += (char)((at == 'S') ? dupSFX : dupPFX); + break; + } + // piece 3 - is cross product indicator + case 2: { + np++; + if (*start_piece == 'Y') + ff = aeXPRODUCT; + break; + } - // piece 4 - is number of affentries - case 3: { - np++; - numents = atoi(piece); - if ((numents <= 0) || ((std::numeric_limits::max() / - sizeof(struct affentry)) < static_cast(numents))) { - char* err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - free(err); - } - return 1; + // piece 4 - is number of affentries + case 3: { + np++; + numents = atoi(std::string(start_piece, iter).c_str()); + if ((numents <= 0) || ((std::numeric_limits::max() / + sizeof(AffEntry)) < static_cast(numents))) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + free(err); } - affentries.resize(numents); - affentries[0].opts = ff; - if (utf8) - affentries[0].opts += aeUTF8; - if (pHMgr->is_aliasf()) - affentries[0].opts += aeALIASF; - if (pHMgr->is_aliasm()) - affentries[0].opts += aeALIASM; - affentries[0].aflag = aflag; + return false; } - default: - break; + char opts = ff; + if (utf8) + opts += aeUTF8; + if (pHMgr->is_aliasf()) + opts += aeALIASF; + if (pHMgr->is_aliasm()) + opts += aeALIASM; + affentries.initialize(numents, opts, aflag); } - i++; + + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } // check to make sure we parsed enough pieces if (np != 4) { @@ -4763,196 +4546,193 @@ int AffixMgr::parse_affix(char* line, af->getlinenum()); free(err); } - return 1; + return false; } // now parse numents affentries for this affix - std::vector::iterator start = affentries.begin(); - std::vector::iterator end = affentries.end(); - for (std::vector::iterator entry = start; entry != end; ++entry) { - if ((nl = af->getline()) == NULL) - return 1; + AffEntry* entry = affentries.first_entry(); + for (int ent = 0; ent < numents; ++ent) { + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; + + iter = nl.begin(); i = 0; np = 0; // split line into pieces - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - // piece 1 - is type - case 0: { - np++; - if (entry != start) - entry->opts = start->opts & - (char)(aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM); - break; - } + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + // piece 1 - is type + case 0: { + np++; + if (ent != 0) + entry = affentries.add_entry((char)(aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM)); + break; + } - // piece 2 - is affix char - case 1: { - np++; - if (pHMgr->decode_flag(piece) != aflag) { - char* err = pHMgr->encode_flag(aflag); - if (err) { - HUNSPELL_WARNING(stderr, - "error: line %d: affix %s is corrupt\n", - af->getlinenum(), err); - free(err); - } - return 1; + // piece 2 - is affix char + case 1: { + np++; + std::string chunk(start_piece, iter); + if (pHMgr->decode_flag(chunk.c_str()) != aflag) { + char* err = pHMgr->encode_flag(aflag); + if (err) { + HUNSPELL_WARNING(stderr, + "error: line %d: affix %s is corrupt\n", + af->getlinenum(), err); + free(err); } - - if (entry != start) - entry->aflag = start->aflag; - break; + return false; } - // piece 3 - is string to strip or 0 for null - case 2: { - np++; - entry->strip = piece; - if (complexprefixes) { - if (utf8) - reverseword_utf(entry->strip); - else - reverseword(entry->strip); - } - if (entry->strip.compare("0") == 0) { - entry->strip.clear(); - } - break; + if (ent != 0) { + AffEntry* start_entry = affentries.first_entry(); + entry->aflag = start_entry->aflag; } + break; + } - // piece 4 - is affix string or 0 for null - case 3: { - char* dash; - entry->morphcode = NULL; - entry->contclass = NULL; - entry->contclasslen = 0; - np++; - dash = strchr(piece, '/'); - if (dash) { - *dash = '\0'; - - entry->appnd = piece; - - if (ignorechars) { - if (utf8) { - remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); - } else { - remove_ignored_chars(entry->appnd, ignorechars); - } - } - - if (complexprefixes) { - if (utf8) - reverseword_utf(entry->appnd); - else - reverseword(entry->appnd); - } + // piece 3 - is string to strip or 0 for null + case 2: { + np++; + entry->strip = std::string(start_piece, iter); + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->strip); + else + reverseword(entry->strip); + } + if (entry->strip.compare("0") == 0) { + entry->strip.clear(); + } + break; + } - if (pHMgr->is_aliasf()) { - int index = atoi(dash + 1); - entry->contclasslen = (unsigned short)pHMgr->get_aliasf( - index, &(entry->contclass), af); - if (!entry->contclasslen) - HUNSPELL_WARNING(stderr, - "error: bad affix flag alias: \"%s\"\n", - dash + 1); + // piece 4 - is affix string or 0 for null + case 3: { + entry->morphcode = NULL; + entry->contclass = NULL; + entry->contclasslen = 0; + np++; + std::string::const_iterator dash = std::find(start_piece, iter, '/'); + if (dash != iter) { + entry->appnd = std::string(start_piece, dash); + std::string dash_str(dash + 1, iter); + + if (!ignorechars.empty()) { + if (utf8) { + remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); } else { - entry->contclasslen = (unsigned short)pHMgr->decode_flags( - &(entry->contclass), dash + 1, af); - std::sort(entry->contclass, entry->contclass + entry->contclasslen); + remove_ignored_chars(entry->appnd, ignorechars); } - *dash = '/'; + } - havecontclass = 1; - for (unsigned short _i = 0; _i < entry->contclasslen; _i++) { - contclasses[(entry->contclass)[_i]] = 1; - } + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->appnd); + else + reverseword(entry->appnd); + } + + if (pHMgr->is_aliasf()) { + int index = atoi(dash_str.c_str()); + entry->contclasslen = (unsigned short)pHMgr->get_aliasf( + index, &(entry->contclass), af); + if (!entry->contclasslen) + HUNSPELL_WARNING(stderr, + "error: bad affix flag alias: \"%s\"\n", + dash_str.c_str()); } else { - entry->appnd = piece; + entry->contclasslen = (unsigned short)pHMgr->decode_flags( + &(entry->contclass), dash_str.c_str(), af); + std::sort(entry->contclass, entry->contclass + entry->contclasslen); + } - if (ignorechars) { - if (utf8) { - remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); - } else { - remove_ignored_chars(entry->appnd, ignorechars); - } - } + havecontclass = 1; + for (unsigned short _i = 0; _i < entry->contclasslen; _i++) { + contclasses[(entry->contclass)[_i]] = 1; + } + } else { + entry->appnd = std::string(start_piece, iter); - if (complexprefixes) { - if (utf8) - reverseword_utf(entry->appnd); - else - reverseword(entry->appnd); + if (!ignorechars.empty()) { + if (utf8) { + remove_ignored_chars_utf(entry->appnd, ignorechars_utf16); + } else { + remove_ignored_chars(entry->appnd, ignorechars); } } - if (entry->appnd.compare("0") == 0) { - entry->appnd.clear(); + if (complexprefixes) { + if (utf8) + reverseword_utf(entry->appnd); + else + reverseword(entry->appnd); } - break; } - // piece 5 - is the conditions descriptions - case 4: { - std::string chunk(piece); - np++; - if (complexprefixes) { + if (entry->appnd.compare("0") == 0) { + entry->appnd.clear(); + } + break; + } + + // piece 5 - is the conditions descriptions + case 4: { + std::string chunk(start_piece, iter); + np++; + if (complexprefixes) { + if (utf8) + reverseword_utf(chunk); + else + reverseword(chunk); + reverse_condition(chunk); + } + if (!entry->strip.empty() && chunk != "." && + redundant_condition(at, entry->strip.c_str(), entry->strip.size(), chunk.c_str(), + af->getlinenum())) + chunk = "."; + if (at == 'S') { + reverseword(chunk); + reverse_condition(chunk); + } + if (encodeit(*entry, chunk.c_str())) + return false; + break; + } + + case 5: { + std::string chunk(start_piece, iter); + np++; + if (pHMgr->is_aliasm()) { + int index = atoi(chunk.c_str()); + entry->morphcode = pHMgr->get_aliasm(index); + } else { + if (complexprefixes) { // XXX - fix me for morph. gen. if (utf8) reverseword_utf(chunk); else reverseword(chunk); - reverse_condition(chunk); } - if (!entry->strip.empty() && chunk != "." && - redundant_condition(at, entry->strip.c_str(), entry->strip.size(), chunk.c_str(), - af->getlinenum())) - chunk = "."; - if (at == 'S') { - reverseword(chunk); - reverse_condition(chunk); - } - if (encodeit(*entry, chunk.c_str())) - return 1; - break; - } - - case 5: { - std::string chunk(piece); - np++; - if (pHMgr->is_aliasm()) { - int index = atoi(chunk.c_str()); - entry->morphcode = pHMgr->get_aliasm(index); - } else { - if (complexprefixes) { // XXX - fix me for morph. gen. - if (utf8) - reverseword_utf(chunk); - else - reverseword(chunk); - } - // add the remaining of the line - if (*tp) { - *(tp - 1) = ' '; - chunk.push_back(' '); - chunk.append(tp); - } - entry->morphcode = mystrdup(chunk.c_str()); - if (!entry->morphcode) - return 1; + // add the remaining of the line + std::string::const_iterator end = nl.end(); + if (iter != end) { + chunk.append(iter, end); } - break; + entry->morphcode = mystrdup(chunk.c_str()); + if (!entry->morphcode) + return false; } - default: - break; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + i++; + start_piece = mystrsep(nl, iter); } // check to make sure we parsed enough pieces if (np < 4) { @@ -4962,7 +4742,7 @@ int AffixMgr::parse_affix(char* line, af->getlinenum(), err); free(err); } - return 1; + return false; } #ifdef DEBUG @@ -4982,16 +4762,20 @@ int AffixMgr::parse_affix(char* line, // now create SfxEntry or PfxEntry objects and use links to // build an ordered (sorted by affix string) list - for (std::vector::iterator entry = start; entry != end; ++entry) { + std::vector::iterator start = affentries.begin(); + std::vector::iterator end = affentries.end(); + for (std::vector::iterator affentry = start; affentry != end; ++affentry) { if (at == 'P') { - PfxEntry* pfxptr = new PfxEntry(this, &(*entry)); - build_pfxtree(pfxptr); + build_pfxtree(static_cast(*affentry)); } else { - SfxEntry* sfxptr = new SfxEntry(this, &(*entry)); - build_sfxtree(sfxptr); + build_sfxtree(static_cast(*affentry)); } } - return 0; + + //contents belong to AffixMgr now + affentries.release(); + + return true; } int AffixMgr::redundant_condition(char ft, @@ -5088,11 +4872,10 @@ int AffixMgr::redundant_condition(char ft, return 0; } -int AffixMgr::get_suffix_words(short unsigned* suff, +std::vector AffixMgr::get_suffix_words(short unsigned* suff, int len, - const char* root_word, - char** slst) { - int suff_words_cnt = 0; + const char* root_word) { + std::vector slst; short unsigned* start_ptr = suff; for (int j = 0; j < SETSIZE; j++) { SfxEntry* ptr = sStart[j]; @@ -5102,10 +4885,9 @@ int AffixMgr::get_suffix_words(short unsigned* suff, if ((*suff) == ptr->getFlag()) { std::string nw(root_word); nw.append(ptr->getAffix()); - hentry* ht = ptr->checkword(nw.c_str(), nw.size(), 0, NULL, NULL, 0, - NULL, 0, 0, 0); + hentry* ht = ptr->checkword(nw.c_str(), nw.size(), 0, NULL, 0, 0, 0); if (ht) { - slst[suff_words_cnt++] = mystrdup(nw.c_str()); + slst.push_back(nw); } } suff++; @@ -5113,5 +4895,5 @@ int AffixMgr::get_suffix_words(short unsigned* suff, ptr = ptr->getNext(); } } - return suff_words_cnt; + return slst; } diff --git a/src/spelling/hunspell/affixmgr.hxx b/src/spelling/hunspell/affixmgr.hxx index d70e8533..83a4b42c 100644 --- a/src/spelling/hunspell/affixmgr.hxx +++ b/src/spelling/hunspell/affixmgr.hxx @@ -71,14 +71,13 @@ * SUCH DAMAGE. */ -#ifndef _AFFIXMGR_HXX_ -#define _AFFIXMGR_HXX_ - -#include "hunvisapi.h" +#ifndef AFFIXMGR_HXX_ +#define AFFIXMGR_HXX_ #include #include +#include #include "atypes.hxx" #include "baseaffix.hxx" @@ -93,17 +92,16 @@ class PfxEntry; class SfxEntry; -class LIBHUNSPELL_DLL_EXPORTED AffixMgr { +class AffixMgr { PfxEntry* pStart[SETSIZE]; SfxEntry* sStart[SETSIZE]; PfxEntry* pFlag[SETSIZE]; SfxEntry* sFlag[SETSIZE]; - HashMgr* pHMgr; - HashMgr** alldic; - int* maxdic; - char* keystring; - char* trystring; - char* encoding; + const std::vector& alldic; + const HashMgr* pHMgr; + std::string keystring; + std::string trystring; + std::string encoding; struct cs_info* csconv; int utf8; int complexprefixes; @@ -125,19 +123,19 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { FLAG nongramsuggest; FLAG needaffix; int cpdmin; - int numrep; - replentry* reptable; + bool parsedrep; + std::vector reptable; RepList* iconvtable; RepList* oconvtable; - int nummap; - mapentry* maptable; - int numbreak; - char** breaktable; - int numcheckcpd; - patentry* checkcpdtable; + bool parsedmaptable; + std::vector maptable; + bool parsedbreaktable; + std::vector breaktable; + bool parsedcheckcpd; + std::vector checkcpdtable; int simplifiedcpd; - int numdefcpd; - flagentry* defcpdtable; + bool parseddefcpd; + std::vector defcpdtable; phonetable* phone; int maxngramsugs; int maxcpdsugs; @@ -147,10 +145,9 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { int sugswithdots; int cpdwordmax; int cpdmaxsyllable; - char* cpdvowels; - w_char* cpdvowels_utf16; - int cpdvowels_utf16_len; - char* cpdsyllablenum; + std::string cpdvowels; // vowels (for calculating of Hungarian compounding limit, + std::vector cpdvowels_utf16; //vowels for UTF-8 encoding + std::string cpdsyllablenum; // syllable count incrementing flag const char* pfxappnd; // BUG: not stateless const char* sfxappnd; // BUG: not stateless int sfxextra; // BUG: not stateless @@ -159,12 +156,12 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { SfxEntry* sfx; // BUG: not stateless PfxEntry* pfx; // BUG: not stateless int checknum; - char* wordchars; + std::string wordchars; // letters + spec. word characters std::vector wordchars_utf16; - char* ignorechars; + std::string ignorechars; // letters + spec. word characters std::vector ignorechars_utf16; - char* version; - char* lang; + std::string version; // affix and dictionary file version string + std::string lang; // language int langnum; FLAG lemma_present; FLAG circumfix; @@ -182,7 +179,7 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { // affix) public: - AffixMgr(const char* affpath, HashMgr** ptr, int* md, const char* key = NULL); + AffixMgr(const char* affpath, const std::vector& ptr, const char* key = NULL); ~AffixMgr(); struct hentry* affix_check(const char* word, int len, @@ -202,9 +199,6 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { int len, int sfxopts, PfxEntry* ppfx, - char** wlst, - int maxSug, - int* ns, const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT); @@ -214,39 +208,39 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); - char* affix_check_morph(const char* word, - int len, - const FLAG needflag = FLAG_NULL, - char in_compound = IN_CPD_NOT); - char* prefix_check_morph(const char* word, - int len, - char in_compound, - const FLAG needflag = FLAG_NULL); - char* suffix_check_morph(const char* word, - int len, - int sfxopts, - PfxEntry* ppfx, - const FLAG cclass = FLAG_NULL, - const FLAG needflag = FLAG_NULL, - char in_compound = IN_CPD_NOT); + std::string affix_check_morph(const char* word, + int len, + const FLAG needflag = FLAG_NULL, + char in_compound = IN_CPD_NOT); + std::string prefix_check_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + std::string suffix_check_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG cclass = FLAG_NULL, + const FLAG needflag = FLAG_NULL, + char in_compound = IN_CPD_NOT); - char* prefix_check_twosfx_morph(const char* word, - int len, - char in_compound, - const FLAG needflag = FLAG_NULL); - char* suffix_check_twosfx_morph(const char* word, - int len, - int sfxopts, - PfxEntry* ppfx, - const FLAG needflag = FLAG_NULL); + std::string prefix_check_twosfx_morph(const char* word, + int len, + char in_compound, + const FLAG needflag = FLAG_NULL); + std::string suffix_check_twosfx_morph(const char* word, + int len, + int sfxopts, + PfxEntry* ppfx, + const FLAG needflag = FLAG_NULL); - char* morphgen(const char* ts, - int wl, - const unsigned short* ap, - unsigned short al, - const char* morph, - const char* targetmorph, - int level); + std::string morphgen(const char* ts, + int wl, + const unsigned short* ap, + unsigned short al, + const char* morph, + const char* targetmorph, + int level); int expand_rootword(struct guessword* wlst, int maxn, @@ -273,8 +267,7 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { int cpdcase_check(const char* word, int len); inline int candidate_check(const char* word, int len); void setcminmax(int* cmin, int* cmax, const char* word, int len); - struct hentry* compound_check(const char* word, - int len, + struct hentry* compound_check(const std::string& word, short wordnum, short numsyllable, short maxwordnum, @@ -294,47 +287,37 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { hentry** words, hentry** rwords, char hu_mov_rule, - char** result, - char* partresult); + std::string& result, + const std::string* partresult); - int get_suffix_words(short unsigned* suff, + std::vector get_suffix_words(short unsigned* suff, int len, - const char* root_word, - char** slst); + const char* root_word); struct hentry* lookup(const char* word); - int get_numrep() const; - struct replentry* get_reptable() const; + const std::vector& get_reptable() const; RepList* get_iconvtable() const; RepList* get_oconvtable() const; struct phonetable* get_phonetable() const; - int get_nummap() const; - struct mapentry* get_maptable() const; - int get_numbreak() const; - char** get_breaktable() const; - char* get_encoding(); + const std::vector& get_maptable() const; + const std::vector& get_breaktable() const; + const std::string& get_encoding(); int get_langnum() const; char* get_key_string(); char* get_try_string() const; - const char* get_wordchars() const; + const std::string& get_wordchars() const; const std::vector& get_wordchars_utf16() const; - char* get_ignore() const; + const char* get_ignore() const; const std::vector& get_ignore_utf16() const; int get_compound() const; FLAG get_compoundflag() const; - FLAG get_compoundbegin() const; FLAG get_forbiddenword() const; FLAG get_nosuggest() const; FLAG get_nongramsuggest() const; FLAG get_needaffix() const; FLAG get_onlyincompound() const; - FLAG get_compoundroot() const; - FLAG get_lemma_present() const; - int get_checknum() const; - const char* get_prefix() const; - const char* get_suffix() const; const char* get_derived() const; - const char* get_version() const; + const std::string& get_version() const; int have_contclass() const; int get_utf8() const; int get_complexprefixes() const; @@ -355,26 +338,25 @@ class LIBHUNSPELL_DLL_EXPORTED AffixMgr { private: int parse_file(const char* affpath, const char* key); - int parse_flag(char* line, unsigned short* out, FileMgr* af); - int parse_num(char* line, int* out, FileMgr* af); - int parse_cpdsyllable(char* line, FileMgr* af); - int parse_reptable(char* line, FileMgr* af); - int parse_convtable(char* line, + bool parse_flag(const std::string& line, unsigned short* out, FileMgr* af); + bool parse_num(const std::string& line, int* out, FileMgr* af); + bool parse_cpdsyllable(const std::string& line, FileMgr* af); + bool parse_reptable(const std::string& line, FileMgr* af); + bool parse_convtable(const std::string& line, FileMgr* af, RepList** rl, - const char* keyword); - int parse_phonetable(char* line, FileMgr* af); - int parse_maptable(char* line, FileMgr* af); - int parse_breaktable(char* line, FileMgr* af); - int parse_checkcpdtable(char* line, FileMgr* af); - int parse_defcpdtable(char* line, FileMgr* af); - int parse_affix(char* line, const char at, FileMgr* af, char* dupflags); + const std::string& keyword); + bool parse_phonetable(const std::string& line, FileMgr* af); + bool parse_maptable(const std::string& line, FileMgr* af); + bool parse_breaktable(const std::string& line, FileMgr* af); + bool parse_checkcpdtable(const std::string& line, FileMgr* af); + bool parse_defcpdtable(const std::string& line, FileMgr* af); + bool parse_affix(const std::string& line, const char at, FileMgr* af, char* dupflags); void reverse_condition(std::string&); - void debugflag(char* result, unsigned short flag); std::string& debugflag(std::string& result, unsigned short flag); int condlen(const char*); - int encodeit(affentry& entry, const char* cs); + int encodeit(AffEntry& entry, const char* cs); int build_pfxtree(PfxEntry* pfxptr); int build_sfxtree(SfxEntry* sfxptr); int process_pfx_order(); diff --git a/src/spelling/hunspell/atypes.hxx b/src/spelling/hunspell/atypes.hxx index 60826af2..fe495f78 100644 --- a/src/spelling/hunspell/atypes.hxx +++ b/src/spelling/hunspell/atypes.hxx @@ -38,8 +38,8 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _ATYPES_HXX_ -#define _ATYPES_HXX_ +#ifndef ATYPES_HXX_ +#define ATYPES_HXX_ #ifndef HUNSPELL_WARNING #include @@ -55,15 +55,15 @@ static inline void HUNSPELL_WARNING(FILE*, const char*, ...) {} // HUNSTEM def. #define HUNSTEM -#include "hashmgr.hxx" #include "w_char.hxx" #include #include +#include #define SETSIZE 256 #define CONTSIZE 65536 -// affentry options +// AffEntry options #define aeXPRODUCT (1 << 0) #define aeUTF8 (1 << 1) #define aeALIASF (1 << 2) @@ -85,8 +85,6 @@ static inline void HUNSPELL_WARNING(FILE*, const char*, ...) {} #define SPELL_ORIGCAP (1 << 5) #define SPELL_WARN (1 << 6) -#define MAXLNLEN 8192 - #define MINCPDLEN 3 #define MAXCOMPOUND 10 #define MAXCONDLEN 20 @@ -100,46 +98,25 @@ static inline void HUNSPELL_WARNING(FILE*, const char*, ...) {} #define TESTAFF(a, b, c) (std::binary_search(a, a + c, b)) -struct affentry { - std::string strip; - std::string appnd; - char numconds; - char opts; - unsigned short aflag; - unsigned short* contclass; - short contclasslen; - union { - char conds[MAXCONDLEN]; - struct { - char conds1[MAXCONDLEN_1]; - char* conds2; - } l; - } c; - char* morphcode; -}; - struct guessword { char* word; bool allow; char* orig; }; -struct mapentry { - char** set; - int len; -}; - -struct flagentry { - FLAG* def; - int len; -}; +typedef std::vector mapentry; +typedef std::vector flagentry; struct patentry { - char* pattern; - char* pattern2; - char* pattern3; + std::string pattern; + std::string pattern2; + std::string pattern3; FLAG cond; FLAG cond2; + patentry() + : cond(FLAG_NULL) + , cond2(FLAG_NULL) { + } }; #endif diff --git a/src/spelling/hunspell/baseaffix.hxx b/src/spelling/hunspell/baseaffix.hxx index 59256e92..579c030b 100644 --- a/src/spelling/hunspell/baseaffix.hxx +++ b/src/spelling/hunspell/baseaffix.hxx @@ -38,18 +38,17 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _BASEAFF_HXX_ -#define _BASEAFF_HXX_ +#ifndef BASEAFF_HXX_ +#define BASEAFF_HXX_ -#include "hunvisapi.h" #include -class LIBHUNSPELL_DLL_EXPORTED AffEntry { +class AffEntry { private: AffEntry(const AffEntry&); AffEntry& operator=(const AffEntry&); - protected: + public: AffEntry() : numconds(0), opts(0), @@ -57,6 +56,7 @@ class LIBHUNSPELL_DLL_EXPORTED AffEntry { morphcode(0), contclass(NULL), contclasslen(0) {} + virtual ~AffEntry(); std::string appnd; std::string strip; unsigned char numconds; diff --git a/src/spelling/hunspell/csutil.cxx b/src/spelling/hunspell/csutil.cxx index 1948e4a3..ac5cd986 100644 --- a/src/spelling/hunspell/csutil.cxx +++ b/src/spelling/hunspell/csutil.cxx @@ -76,6 +76,7 @@ #include #include #include +#include #include "csutil.hxx" #include "atypes.hxx" @@ -122,26 +123,24 @@ static struct unicode_info2* utf_tbl = NULL; static int utf_tbl_count = 0; // utf_tbl can be used by multiple Hunspell instances -FILE* myfopen(const char* path, const char* mode) { -#ifdef _WIN32 +void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mode) +{ +#if defined(_WIN32) && defined(_MSC_VER) #define WIN32_LONG_PATH_PREFIX "\\\\?\\" if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); - wchar_t* buff = (wchar_t*)malloc(len * sizeof(wchar_t)); - wchar_t* buff2 = (wchar_t*)malloc(len * sizeof(wchar_t)); - FILE* f = NULL; - if (buff && buff2) { - MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); - if (_wfullpath(buff2, buff, len) != NULL) { - f = _wfopen(buff2, (strcmp(mode, "r") == 0) ? L"r" : L"rb"); - } - free(buff); - free(buff2); + wchar_t* buff = new wchar_t[len]; + wchar_t* buff2 = new wchar_t[len]; + MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); + if (_wfullpath(buff2, buff, len) != NULL) { + stream.open(buff2, mode); } - return f; + delete [] buff; + delete [] buff2; } + else #endif - return fopen(path, mode); + stream.open(path, mode); } std::string& u16_u8(std::string& dest, const std::vector& src) { @@ -218,7 +217,7 @@ int u8_u16(std::vector& dest, const std::string& src) { case 0xd0: { // 2-byte UTF-8 codes if ((*(u8 + 1) & 0xc0) == 0x80) { u2.h = (*u8 & 0x1f) >> 2; - u2.l = (*u8 << 6) + (*(u8 + 1) & 0x3f); + u2.l = (static_cast(*u8) << 6) + (*(u8 + 1) & 0x3f); ++u8; } else { HUNSPELL_WARNING(stderr, @@ -275,34 +274,35 @@ int u8_u16(std::vector& dest, const std::string& src) { return dest.size(); } -// strip strings into token based on single char delimiter -// acts like strsep() but only uses a delim char and not -// a delim string -// default delimiter: white space characters - -char* mystrsep(char** stringp, const char delim) { - char* mp = *stringp; - if (*mp != '\0') { - char* dp; - if (delim) { - dp = strchr(mp, delim); - } else { - // don't use isspace() here, the string can be in some random charset - // that's way different than the locale's - for (dp = mp; (*dp && *dp != ' ' && *dp != '\t'); dp++) - ; - if (!*dp) - dp = NULL; - } - if (dp) { - *stringp = dp + 1; - *dp = '\0'; - } else { - *stringp = mp + strlen(mp); - } - return mp; - } - return NULL; +namespace { +class is_any_of { + public: + explicit is_any_of(const std::string& in) : chars(in) {} + + bool operator()(char c) { return chars.find(c) != std::string::npos; } + + private: + std::string chars; +}; +} + +std::string::const_iterator mystrsep(const std::string &str, + std::string::const_iterator& start) { + std::string::const_iterator end = str.end(); + + is_any_of op(" \t"); + // don't use isspace() here, the string can be in some random charset + // that's way different than the locale's + std::string::const_iterator sp = start; + while (sp != end && op(*sp)) + ++sp; + + std::string::const_iterator dp = sp; + while (dp != end && !op(*dp)) + ++dp; + + start = dp; + return sp; } // replaces strdup with ansi version @@ -320,142 +320,98 @@ char* mystrdup(const char* s) { return d; } -// strcat for limited length destination string -char* mystrcat(char* dest, const char* st, int max) { - int len; - int len2; - if (dest == NULL || st == NULL) - return dest; - len = strlen(dest); - len2 = strlen(st); - if (len + len2 + 1 > max) - return dest; - strcpy(dest + len, st); - return dest; -} - // remove cross-platform text line end characters -void mychomp(char* s) { - size_t k = strlen(s); - if ((k > 0) && ((*(s + k - 1) == '\r') || (*(s + k - 1) == '\n'))) - *(s + k - 1) = '\0'; - if ((k > 1) && (*(s + k - 2) == '\r')) - *(s + k - 2) = '\0'; +void mychomp(std::string& s) { + size_t k = s.size(); + size_t newsize = k; + if ((k > 0) && ((s[k - 1] == '\r') || (s[k - 1] == '\n'))) + --newsize; + if ((k > 1) && (s[k - 2] == '\r')) + --newsize; + s.resize(newsize); } // break text to lines -// return number of lines -int line_tok(const char* text, char*** lines, char breakchar) { - int linenum = 0; - if (!text) { - return linenum; - } - char* dup = mystrdup(text); - char* p = strchr(dup, breakchar); - while (p) { - linenum++; - *p = '\0'; - p++; - p = strchr(p, breakchar); - } - linenum++; - *lines = (char**)malloc(linenum * sizeof(char*)); - if (!(*lines)) { - free(dup); - return 0; +std::vector line_tok(const std::string& text, char breakchar) { + std::vector ret; + if (text.empty()) { + return ret; } - p = dup; - int l = 0; - for (int i = 0; i < linenum; i++) { - if (*p != '\0') { - (*lines)[l] = mystrdup(p); - if (!(*lines)[l]) { - for (i = 0; i < l; i++) - free((*lines)[i]); - free(dup); - return 0; - } - l++; + std::stringstream ss(text); + std::string tok; + while(std::getline(ss, tok, breakchar)) { + if (!tok.empty()) { + ret.push_back(tok); } - p += strlen(p) + 1; - } - free(dup); - if (!l) { - free(*lines); - *lines = NULL; } - return l; + + return ret; } // uniq line in place -char* line_uniq(char* text, char breakchar) { - char** lines; - int linenum = line_tok(text, &lines, breakchar); - int i; - strcpy(text, lines[0]); - for (i = 1; i < linenum; i++) { - int dup = 0; - for (int j = 0; j < i; j++) { - if (strcmp(lines[i], lines[j]) == 0) { - dup = 1; +void line_uniq(std::string& text, char breakchar) +{ + std::vector lines = line_tok(text, breakchar); + text.clear(); + if (lines.empty()) { + return; + } + text = lines[0]; + for (size_t i = 1; i < lines.size(); ++i) { + bool dup = false; + for (size_t j = 0; j < i; ++j) { + if (lines[i] == lines[j]) { + dup = true; break; } } if (!dup) { - if ((i > 1) || (*(lines[0]) != '\0')) { - sprintf(text + strlen(text), "%c", breakchar); - } - strcat(text, lines[i]); + if (!text.empty()) + text.push_back(breakchar); + text.append(lines[i]); } } - for (i = 0; i < linenum; i++) { - free(lines[i]); - } - free(lines); - return text; } // uniq and boundary for compound analysis: "1\n\2\n\1" -> " ( \1 | \2 ) " -char* line_uniq_app(char** text, char breakchar) { - if (!strchr(*text, breakchar)) { - return *text; +void line_uniq_app(std::string& text, char breakchar) { + if (text.find(breakchar) == std::string::npos) { + return; } - char** lines; - int i; - int linenum = line_tok(*text, &lines, breakchar); - int dup = 0; - for (i = 0; i < linenum; i++) { - for (int j = 0; j < (i - 1); j++) { - if (strcmp(lines[i], lines[j]) == 0) { - *(lines[i]) = '\0'; - dup++; + std::vector lines = line_tok(text, breakchar); + text.clear(); + if (lines.empty()) { + return; + } + text = lines[0]; + for (size_t i = 1; i < lines.size(); ++i) { + bool dup = false; + for (size_t j = 0; j < i; ++j) { + if (lines[i] == lines[j]) { + dup = true; break; } } + if (!dup) { + if (!text.empty()) + text.push_back(breakchar); + text.append(lines[i]); + } } - if ((linenum - dup) == 1) { - strcpy(*text, lines[0]); - freelist(&lines, linenum); - return *text; + + if (lines.size() == 1) { + text = lines[0]; + return; } - char* newtext = (char*)malloc(strlen(*text) + 2 * linenum + 3 + 1); - if (newtext) { - free(*text); - *text = newtext; - } else { - freelist(&lines, linenum); - return *text; + + text.assign(" ( "); + for (size_t i = 0; i < lines.size(); ++i) { + text.append(lines[i]); + text.append(" | "); } - strcpy(*text, " ( "); - for (i = 0; i < linenum; i++) - if (*(lines[i])) { - sprintf(*text + strlen(*text), "%s%s", lines[i], " | "); - } - (*text)[strlen(*text) - 2] = ')'; // " ) " - freelist(&lines, linenum); - return *text; + text[text.size() - 2] = ')'; // " ) " } // append s to ends of every lines in text @@ -469,111 +425,6 @@ std::string& strlinecat(std::string& str, const std::string& apd) { return str; } -// morphcmp(): compare MORPH_DERI_SFX, MORPH_INFL_SFX and MORPH_TERM_SFX fields -// in the first line of the inputs -// return 0, if inputs equal -// return 1, if inputs may equal with a secondary suffix -// otherwise return -1 -int morphcmp(const char* s, const char* t) { - int se = 0; - int te = 0; - const char* sl; - const char* tl; - const char* olds; - const char* oldt; - if (!s || !t) - return 1; - olds = s; - sl = strchr(s, '\n'); - s = strstr(s, MORPH_DERI_SFX); - if (!s || (sl && sl < s)) - s = strstr(olds, MORPH_INFL_SFX); - if (!s || (sl && sl < s)) { - s = strstr(olds, MORPH_TERM_SFX); - olds = NULL; - } - oldt = t; - tl = strchr(t, '\n'); - t = strstr(t, MORPH_DERI_SFX); - if (!t || (tl && tl < t)) - t = strstr(oldt, MORPH_INFL_SFX); - if (!t || (tl && tl < t)) { - t = strstr(oldt, MORPH_TERM_SFX); - oldt = NULL; - } - while (s && t && (!sl || sl > s) && (!tl || tl > t)) { - s += MORPH_TAG_LEN; - t += MORPH_TAG_LEN; - se = 0; - te = 0; - while ((*s == *t) && !se && !te) { - s++; - t++; - switch (*s) { - case ' ': - case '\n': - case '\t': - case '\0': - se = 1; - } - switch (*t) { - case ' ': - case '\n': - case '\t': - case '\0': - te = 1; - } - } - if (!se || !te) { - // not terminal suffix difference - if (olds) - return -1; - return 1; - } - olds = s; - s = strstr(s, MORPH_DERI_SFX); - if (!s || (sl && sl < s)) - s = strstr(olds, MORPH_INFL_SFX); - if (!s || (sl && sl < s)) { - s = strstr(olds, MORPH_TERM_SFX); - olds = NULL; - } - oldt = t; - t = strstr(t, MORPH_DERI_SFX); - if (!t || (tl && tl < t)) - t = strstr(oldt, MORPH_INFL_SFX); - if (!t || (tl && tl < t)) { - t = strstr(oldt, MORPH_TERM_SFX); - oldt = NULL; - } - } - if (!s && !t && se && te) - return 0; - return 1; -} - -int get_sfxcount(const char* morph) { - if (!morph || !*morph) - return 0; - int n = 0; - const char* old = morph; - morph = strstr(morph, MORPH_DERI_SFX); - if (!morph) - morph = strstr(old, MORPH_INFL_SFX); - if (!morph) - morph = strstr(old, MORPH_TERM_SFX); - while (morph) { - n++; - old = morph; - morph = strstr(morph + 1, MORPH_DERI_SFX); - if (!morph) - morph = strstr(old + 1, MORPH_INFL_SFX); - if (!morph) - morph = strstr(old + 1, MORPH_TERM_SFX); - } - return n; -} - int fieldlen(const char* r) { int n = 0; while (r && *r != ' ' && *r != '\t' && *r != '\0' && *r != '\n') { @@ -615,33 +466,6 @@ std::string& mystrrep(std::string& str, return str; } -char* mystrrep(char* word, const char* pat, const char* rep) { - char* pos = strstr(word, pat); - if (pos) { - int replen = strlen(rep); - int patlen = strlen(pat); - while (pos) { - if (replen < patlen) { - char* end = word + strlen(word); - char* next = pos + replen; - char* prev = pos + strlen(pat); - for (; prev < end;* next = *prev, prev++, next++) - ; - *next = '\0'; - } else if (replen > patlen) { - char* end = pos + patlen; - char* next = word + strlen(word) + replen - patlen; - char* prev = next - replen + patlen; - for (; prev >= end;* next = *prev, prev--, next--) - ; - } - strncpy(pos, rep, replen); - pos = strstr(word, pat); - } - } - return word; -} - // reverse word size_t reverseword(std::string& word) { std::reverse(word.begin(), word.end()); @@ -657,35 +481,19 @@ size_t reverseword_utf(std::string& word) { return w.size(); } -int uniqlist(char** list, int n) { - int i; - if (n < 2) - return n; - for (i = 0; i < n; i++) { - for (int j = 0; j < i; j++) { - if (list[j] && list[i] && (strcmp(list[j], list[i]) == 0)) { - free(list[i]); - list[i] = NULL; - break; - } - } - } - int m = 1; - for (i = 1; i < n; i++) - if (list[i]) { - list[m] = list[i]; - m++; - } - return m; -} +void uniqlist(std::vector& list) { + if (list.size() < 2) + return; -void freelist(char*** list, int n) { - if (list && *list) { - for (int i = 0; i < n; i++) - free((*list)[i]); - free(*list); - *list = NULL; + std::vector ret; + ret.push_back(list[0]); + + for (size_t i = 1; i < list.size(); ++i) { + if (std::find(ret.begin(), ret.end(), list[i]) == ret.end()) + ret.push_back(list[i]); } + + list.swap(ret); } namespace { @@ -2457,9 +2265,9 @@ static void toAsciiLowerAndRemoveNonAlphanumeric(const char* pName, *pBuf = '\0'; } -struct cs_info* get_current_cs(const char* es) { - char* normalized_encoding = new char[strlen(es) + 1]; - toAsciiLowerAndRemoveNonAlphanumeric(es, normalized_encoding); +struct cs_info* get_current_cs(const std::string& es) { + char* normalized_encoding = new char[es.size() + 1]; + toAsciiLowerAndRemoveNonAlphanumeric(es.c_str(), normalized_encoding); struct cs_info* ccs = NULL; int n = sizeof(encds) / sizeof(encds[0]); @@ -2474,7 +2282,7 @@ struct cs_info* get_current_cs(const char* es) { if (!ccs) { HUNSPELL_WARNING(stderr, - "error: unknown encoding %s: using %s as fallback\n", es, + "error: unknown encoding %s: using %s as fallback\n", es.c_str(), encds[0].enc_name); ccs = encds[0].cs_table; } @@ -2485,7 +2293,7 @@ struct cs_info* get_current_cs(const char* es) { // XXX This function was rewritten for mozilla. Instead of storing the // conversion tables static in this file, create them when needed // with help the mozilla backend. -struct cs_info* get_current_cs(const char* es) { +struct cs_info* get_current_cs(const std::string& es) { struct cs_info* ccs = new cs_info[256]; // Initialze the array with dummy data so that we wouldn't need // to return null in case of failures. @@ -2500,7 +2308,7 @@ struct cs_info* get_current_cs(const char* es) { nsresult rv; - nsAutoCString label(es); + nsAutoCString label(es.c_str()); nsAutoCString encoding; if (!EncodingUtils::FindEncodingForLabelNoReplacement(label, encoding)) { return ccs; @@ -2565,21 +2373,18 @@ struct cs_info* get_current_cs(const char* es) { #endif // primitive isalpha() replacement for tokenization -char* get_casechars(const char* enc) { +std::string get_casechars(const char* enc) { struct cs_info* csconv = get_current_cs(enc); - char expw[MAXLNLEN]; - char* p = expw; - for (int i = 0; i <= 255; i++) { + std::string expw; + for (int i = 0; i <= 255; ++i) { if (cupper(csconv, i) != clower(csconv, i)) { - *p = static_cast(i); - p++; + expw.push_back(static_cast(i)); } } - *p = '\0'; #ifdef MOZILLA_CLIENT delete[] csconv; #endif - return mystrdup(expw); + return expw; } // language to encoding default map @@ -2606,10 +2411,10 @@ static struct lang_map lang2enc[] = {"tr_TR", LANG_tr}, // for back-compatibility {"ru", LANG_ru}, {"uk", LANG_uk}}; -int get_lang_num(const char* lang) { +int get_lang_num(const std::string& lang) { int n = sizeof(lang2enc) / sizeof(lang2enc[0]); for (int i = 0; i < n; i++) { - if (strcmp(lang, lang2enc[i].lang) == 0) { + if (strcmp(lang.c_str(), lang2enc[i].lang) == 0) { return lang2enc[i].num; } } @@ -2618,26 +2423,21 @@ int get_lang_num(const char* lang) { #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT -int initialize_utf_tbl() { +void initialize_utf_tbl() { utf_tbl_count++; if (utf_tbl) - return 0; - utf_tbl = (unicode_info2*)malloc(CONTSIZE * sizeof(unicode_info2)); - if (utf_tbl) { - size_t j; - for (j = 0; j < CONTSIZE; j++) { - utf_tbl[j].cletter = 0; - utf_tbl[j].clower = (unsigned short)j; - utf_tbl[j].cupper = (unsigned short)j; - } - for (j = 0; j < UTF_LST_LEN; j++) { - utf_tbl[utf_lst[j].c].cletter = 1; - utf_tbl[utf_lst[j].c].clower = utf_lst[j].clower; - utf_tbl[utf_lst[j].c].cupper = utf_lst[j].cupper; - } - } else - return 1; - return 0; + return; + utf_tbl = new unicode_info2[CONTSIZE]; + for (size_t j = 0; j < CONTSIZE; ++j) { + utf_tbl[j].cletter = 0; + utf_tbl[j].clower = (unsigned short)j; + utf_tbl[j].cupper = (unsigned short)j; + } + for (size_t j = 0; j < UTF_LST_LEN; ++j) { + utf_tbl[utf_lst[j].c].cletter = 1; + utf_tbl[utf_lst[j].c].clower = utf_lst[j].clower; + utf_tbl[utf_lst[j].c].cupper = utf_lst[j].cupper; + } } #endif #endif @@ -2646,7 +2446,7 @@ void free_utf_tbl() { if (utf_tbl_count > 0) utf_tbl_count--; if (utf_tbl && (utf_tbl_count == 0)) { - free(utf_tbl); + delete[] utf_tbl; utf_tbl = NULL; } } @@ -2775,18 +2575,6 @@ size_t remove_ignored_chars_utf(std::string& word, return w2.size(); } -namespace { -class is_any_of { - public: - is_any_of(const std::string& in) : chars(in) {} - - bool operator()(char c) { return chars.find(c) != std::string::npos; } - - private: - std::string chars; -}; -} - // strip all ignored characters in the string size_t remove_ignored_chars(std::string& word, const std::string& ignored_chars) { @@ -2796,54 +2584,48 @@ size_t remove_ignored_chars(std::string& word, return word.size(); } -int parse_string(char* line, char** out, int ln) { - char* tp = line; - char* piece; - int i = 0; - int np = 0; - if (*out) { +bool parse_string(const std::string& line, std::string& out, int ln) { + if (!out.empty()) { HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions\n", ln); - return 1; + return false; } - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; - } - case 1: { - *out = mystrdup(piece); - if (!*out) - return 1; - np++; - break; - } - default: - break; + int i = 0; + int np = 0; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + out.assign(start_piece, iter); + np++; + break; } - i++; + default: + break; } - // free(piece); - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", ln); - return 1; + return false; } - return 0; + return true; } -bool parse_array(char* line, - char** out, +bool parse_array(const std::string& line, + std::string& out, std::vector& out_utf16, int utf8, int ln) { - if (parse_string(line, out, ln)) + if (!parse_string(line, out, ln)) return false; if (utf8) { - u8_u16(out_utf16, *out); + u8_u16(out_utf16, out); std::sort(out_utf16.begin(), out_utf16.end()); } return true; diff --git a/src/spelling/hunspell/csutil.hxx b/src/spelling/hunspell/csutil.hxx index ce7091df..302d7e90 100644 --- a/src/spelling/hunspell/csutil.hxx +++ b/src/spelling/hunspell/csutil.hxx @@ -71,13 +71,14 @@ * SUCH DAMAGE. */ -#ifndef __CSUTILHXX__ -#define __CSUTILHXX__ +#ifndef CSUTIL_HXX_ +#define CSUTIL_HXX_ #include "hunvisapi.h" // First some base level utility routines +#include #include #include #include @@ -127,8 +128,9 @@ #define FORBIDDENWORD 65510 #define ONLYUPCASEFLAG 65511 -// fopen or optional _wfopen to fix long pathname problem of WIN32 -LIBHUNSPELL_DLL_EXPORTED FILE* myfopen(const char* path, const char* mode); +// fix long pathname problem of WIN32 by using w_char std::fstream::open override +LIBHUNSPELL_DLL_EXPORTED void myopen(std::ifstream& stream, const char* path, + std::ios_base::openmode mode); // convert UTF-16 characters to UTF-8 LIBHUNSPELL_DLL_EXPORTED std::string& u16_u8(std::string& dest, @@ -139,21 +141,16 @@ LIBHUNSPELL_DLL_EXPORTED int u8_u16(std::vector& dest, const std::string& src); // remove end of line char(s) -LIBHUNSPELL_DLL_EXPORTED void mychomp(char* s); +LIBHUNSPELL_DLL_EXPORTED void mychomp(std::string& s); // duplicate string LIBHUNSPELL_DLL_EXPORTED char* mystrdup(const char* s); -// strcat for limited length destination string -LIBHUNSPELL_DLL_EXPORTED char* mystrcat(char* dest, const char* st, int max); - // parse into tokens with char delimiter -LIBHUNSPELL_DLL_EXPORTED char* mystrsep(char** sptr, const char delim); +LIBHUNSPELL_DLL_EXPORTED std::string::const_iterator mystrsep(const std::string &str, + std::string::const_iterator& start); // replace pat by rep in word and return word -LIBHUNSPELL_DLL_EXPORTED char* mystrrep(char* word, - const char* pat, - const char* rep); LIBHUNSPELL_DLL_EXPORTED std::string& mystrrep(std::string& str, const std::string& search, const std::string& replace); @@ -163,13 +160,13 @@ LIBHUNSPELL_DLL_EXPORTED std::string& strlinecat(std::string& str, const std::string& apd); // tokenize into lines with new line -LIBHUNSPELL_DLL_EXPORTED int line_tok(const char* text, - char*** lines, - char breakchar); +LIBHUNSPELL_DLL_EXPORTED std::vector line_tok(const std::string& text, + char breakchar); // tokenize into lines with new line and uniq in place -LIBHUNSPELL_DLL_EXPORTED char* line_uniq(char* text, char breakchar); -LIBHUNSPELL_DLL_EXPORTED char* line_uniq_app(char** text, char breakchar); +LIBHUNSPELL_DLL_EXPORTED void line_uniq(std::string& text, char breakchar); + +LIBHUNSPELL_DLL_EXPORTED void line_uniq_app(std::string& text, char breakchar); // reverse word LIBHUNSPELL_DLL_EXPORTED size_t reverseword(std::string& word); @@ -178,10 +175,7 @@ LIBHUNSPELL_DLL_EXPORTED size_t reverseword(std::string& word); LIBHUNSPELL_DLL_EXPORTED size_t reverseword_utf(std::string&); // remove duplicates -LIBHUNSPELL_DLL_EXPORTED int uniqlist(char** list, int n); - -// free character array list -LIBHUNSPELL_DLL_EXPORTED void freelist(char*** list, int n); +LIBHUNSPELL_DLL_EXPORTED void uniqlist(std::vector& list); // character encoding information struct cs_info { @@ -190,7 +184,7 @@ struct cs_info { unsigned char cupper; }; -LIBHUNSPELL_DLL_EXPORTED int initialize_utf_tbl(); +LIBHUNSPELL_DLL_EXPORTED void initialize_utf_tbl(); LIBHUNSPELL_DLL_EXPORTED void free_utf_tbl(); LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetoupper(unsigned short c, int langnum); @@ -200,13 +194,13 @@ LIBHUNSPELL_DLL_EXPORTED unsigned short unicodetolower(unsigned short c, int langnum); LIBHUNSPELL_DLL_EXPORTED int unicodeisalpha(unsigned short c); -LIBHUNSPELL_DLL_EXPORTED struct cs_info* get_current_cs(const char* es); +LIBHUNSPELL_DLL_EXPORTED struct cs_info* get_current_cs(const std::string& es); // get language identifiers of language codes -LIBHUNSPELL_DLL_EXPORTED int get_lang_num(const char* lang); +LIBHUNSPELL_DLL_EXPORTED int get_lang_num(const std::string& lang); // get characters of the given 8bit encoding with lower- and uppercase forms -LIBHUNSPELL_DLL_EXPORTED char* get_casechars(const char* enc); +LIBHUNSPELL_DLL_EXPORTED std::string get_casechars(const char* enc); // convert std::string to all caps LIBHUNSPELL_DLL_EXPORTED std::string& mkallcap(std::string& s, @@ -256,10 +250,12 @@ LIBHUNSPELL_DLL_EXPORTED size_t remove_ignored_chars( std::string& word, const std::string& ignored_chars); -LIBHUNSPELL_DLL_EXPORTED int parse_string(char* line, char** out, int ln); +LIBHUNSPELL_DLL_EXPORTED bool parse_string(const std::string& line, + std::string& out, + int ln); -LIBHUNSPELL_DLL_EXPORTED bool parse_array(char* line, - char** out, +LIBHUNSPELL_DLL_EXPORTED bool parse_array(const std::string& line, + std::string& out, std::vector& out_utf16, int utf8, int ln); @@ -270,10 +266,6 @@ LIBHUNSPELL_DLL_EXPORTED bool copy_field(std::string& dest, const std::string& morph, const std::string& var); -LIBHUNSPELL_DLL_EXPORTED int morphcmp(const char* s, const char* t); - -LIBHUNSPELL_DLL_EXPORTED int get_sfxcount(const char* morph); - // conversion function for protected memory LIBHUNSPELL_DLL_EXPORTED void store_pointer(char* dest, char* source); diff --git a/src/spelling/hunspell/filemgr.cxx b/src/spelling/hunspell/filemgr.cxx index 2218bc79..b7c89b2b 100644 --- a/src/spelling/hunspell/filemgr.cxx +++ b/src/spelling/hunspell/filemgr.cxx @@ -86,33 +86,33 @@ int FileMgr::fail(const char* err, const char* par) { FileMgr::FileMgr(const char* file, const char* key) : hin(NULL), linenum(0) { in[0] = '\0'; - fin = myfopen(file, "r"); - if (!fin) { + myopen(fin, file, std::ios_base::in); + if (!fin.is_open()) { // check hzipped file std::string st(file); st.append(HZIP_EXTENSION); hin = new Hunzip(st.c_str(), key); } - if (!fin && !hin) + if (!fin.is_open() && !hin->is_open()) fail(MSG_OPEN, file); } FileMgr::~FileMgr() { - if (fin) - fclose(fin); - if (hin) - delete hin; + delete hin; } -char* FileMgr::getline() { - const char* l; - linenum++; - if (fin) - return fgets(in, BUFSIZE - 1, fin); - if (hin && ((l = hin->getline()) != NULL)) - return strcpy(in, l); - linenum--; - return NULL; +bool FileMgr::getline(std::string& dest) { + bool ret = false; + ++linenum; + if (fin.is_open()) { + ret = static_cast(std::getline(fin, dest)); + } else if (hin->is_open()) { + ret = hin->getline(dest); + } + if (!ret) { + --linenum; + } + return ret; } int FileMgr::getlinenum() { diff --git a/src/spelling/hunspell/filemgr.hxx b/src/spelling/hunspell/filemgr.hxx index 8b69931d..991e924a 100644 --- a/src/spelling/hunspell/filemgr.hxx +++ b/src/spelling/hunspell/filemgr.hxx @@ -72,21 +72,21 @@ */ /* file manager class - read lines of files [filename] OR [filename.hz] */ -#ifndef _FILEMGR_HXX_ -#define _FILEMGR_HXX_ - -#include "hunvisapi.h" +#ifndef FILEMGR_HXX_ +#define FILEMGR_HXX_ #include "hunzip.hxx" #include +#include +#include -class LIBHUNSPELL_DLL_EXPORTED FileMgr { +class FileMgr { private: FileMgr(const FileMgr&); FileMgr& operator=(const FileMgr&); protected: - FILE* fin; + std::ifstream fin; Hunzip* hin; char in[BUFSIZE + 50]; // input buffer int fail(const char* err, const char* par); @@ -95,7 +95,7 @@ class LIBHUNSPELL_DLL_EXPORTED FileMgr { public: FileMgr(const char* filename, const char* key = NULL); ~FileMgr(); - char* getline(); + bool getline(std::string&); int getlinenum(); }; #endif diff --git a/src/spelling/hunspell/hashmgr.cxx b/src/spelling/hunspell/hashmgr.cxx index c3cd9542..1de16901 100644 --- a/src/spelling/hunspell/hashmgr.cxx +++ b/src/spelling/hunspell/hashmgr.cxx @@ -98,20 +98,19 @@ HashMgr::HashMgr(const char* tpath, const char* apath, const char* key) numaliasm(0), aliasm(NULL) { langnum = 0; - lang = NULL; - enc = NULL; csconv = 0; - ignorechars = NULL; load_config(apath, key); int ec = load_tables(tpath, key); if (ec) { /* error condition - what should we do here */ HUNSPELL_WARNING(stderr, "Hash Manager Error : %d\n", ec); - if (tableptr) { - free(tableptr); - tableptr = NULL; + free(tableptr); + //keep tablesize to 1 to fix possible division with zero + tablesize = 1; + tableptr = (struct hentry**)calloc(tablesize, sizeof(struct hentry*)); + if (!tableptr) { + tablesize = 0; } - tablesize = 0; } } @@ -159,14 +158,6 @@ HashMgr::~HashMgr() { #endif #endif - if (enc) - free(enc); - if (lang) - free(lang); - - if (ignorechars) - free(ignorechars); - #ifdef MOZILLA_CLIENT delete[] csconv; #endif @@ -189,20 +180,21 @@ struct hentry* HashMgr::lookup(const char* word) const { } // add a word to the hash table (private) -int HashMgr::add_word(const char* word, - int wbl, +int HashMgr::add_word(const std::string& in_word, int wcl, unsigned short* aff, int al, - const char* desc, + const std::string* in_desc, bool onlyupcase) { + const std::string* word = &in_word; + const std::string* desc = in_desc; std::string *word_copy = NULL; std::string *desc_copy = NULL; - if (ignorechars || complexprefixes) { - word_copy = new std::string(word, wbl); + if (!ignorechars.empty() || complexprefixes) { + word_copy = new std::string(in_word); - if (ignorechars != NULL) { + if (!ignorechars.empty()) { if (utf8) { wcl = remove_ignored_chars_utf(*word_copy, ignorechars_utf16); } else { @@ -216,8 +208,8 @@ int HashMgr::add_word(const char* word, else reverseword(*word_copy); - if (desc && !aliasm) { - desc_copy = new std::string(desc); + if (in_desc && !aliasm) { + desc_copy = new std::string(*in_desc); if (complexprefixes) { if (utf8) @@ -225,19 +217,18 @@ int HashMgr::add_word(const char* word, else reverseword(*desc_copy); } - desc = desc_copy->c_str(); + desc = desc_copy; } } - wbl = word_copy->size(); - word = word_copy->c_str(); + word = word_copy; } bool upcasehomonym = false; - int descl = desc ? (aliasm ? sizeof(char*) : strlen(desc) + 1) : 0; + int descl = desc ? (aliasm ? sizeof(char*) : desc->size() + 1) : 0; // variable-length hash record with word and optional fields struct hentry* hp = - (struct hentry*)malloc(sizeof(struct hentry) + wbl + descl); + (struct hentry*)malloc(sizeof(struct hentry) + word->size() + descl); if (!hp) { delete desc_copy; delete word_copy; @@ -245,11 +236,11 @@ int HashMgr::add_word(const char* word, } char* hpw = hp->word; - strcpy(hpw, word); + strcpy(hpw, word->c_str()); int i = hash(hpw); - hp->blen = (unsigned char)wbl; + hp->blen = (unsigned char)word->size(); hp->clen = (unsigned char)wcl; hp->alen = (short)al; hp->astr = aff; @@ -261,9 +252,9 @@ int HashMgr::add_word(const char* word, hp->var = H_OPT; if (aliasm) { hp->var += H_OPT_ALIASM; - store_pointer(hpw + wbl + 1, get_aliasm(atoi(desc))); + store_pointer(hpw + word->size() + 1, get_aliasm(atoi(desc->c_str()))); } else { - strcpy(hpw + wbl + 1, desc); + strcpy(hpw + word->size() + 1, desc->c_str()); } if (strstr(HENTRY_DATA(hp), MORPH_PHON)) hp->var += H_OPT_PHON; @@ -334,7 +325,7 @@ int HashMgr::add_hidden_capitalized_word(const std::string& word, int wcl, unsigned short* flags, int flagslen, - char* dp, + const std::string* dp, int captype) { if (flags == NULL) flagslen = 0; @@ -359,12 +350,12 @@ int HashMgr::add_hidden_capitalized_word(const std::string& word, mkallsmall_utf(w, langnum); mkinitcap_utf(w, langnum); u16_u8(st, w); - return add_word(st.c_str(), st.size(), wcl, flags2, flagslen + 1, dp, true); + return add_word(st, wcl, flags2, flagslen + 1, dp, true); } else { std::string new_word(word); mkallsmall(new_word, csconv); mkinitcap(new_word, csconv); - int ret = add_word(new_word.c_str(), new_word.size(), wcl, flags2, flagslen + 1, dp, true); + int ret = add_word(new_word, wcl, flags2, flagslen + 1, dp, true); return ret; } } @@ -386,8 +377,8 @@ int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { } // remove word (personal dictionary function for standalone applications) -int HashMgr::remove(const char* word) { - struct hentry* dp = lookup(word); +int HashMgr::remove(const std::string& word) { + struct hentry* dp = lookup(word.c_str()); while (dp) { if (dp->alen == 0 || !TESTAFF(dp->astr, forbiddenword, dp->alen)) { unsigned short* flags = @@ -397,6 +388,7 @@ int HashMgr::remove(const char* word) { for (int i = 0; i < dp->alen; i++) flags[i] = dp->astr[i]; flags[dp->alen] = forbiddenword; + free(dp->astr); dp->astr = flags; dp->alen++; std::sort(flags, flags + dp->alen); @@ -426,6 +418,7 @@ int HashMgr::remove_forbidden_flag(const std::string& word) { flags2[j++] = dp->astr[i]; } dp->alen--; + free(dp->astr); dp->astr = flags2; // XXX allowed forbidden words } } @@ -436,36 +429,34 @@ int HashMgr::remove_forbidden_flag(const std::string& word) { // add a custom dic. word to the hash table (public) int HashMgr::add(const std::string& word) { - unsigned short* flags = NULL; - int al = 0; if (remove_forbidden_flag(word)) { int captype; - int wbl = word.size(); + int al = 0; + unsigned short* flags = NULL; int wcl = get_clen_and_captype(word, &captype); - add_word(word.c_str(), wbl, wcl, flags, al, NULL, false); + add_word(word, wcl, flags, al, NULL, false); return add_hidden_capitalized_word(word, wcl, flags, al, NULL, captype); } return 0; } -int HashMgr::add_with_affix(const char* word, const char* example) { +int HashMgr::add_with_affix(const std::string& word, const std::string& example) { // detect captype and modify word length for UTF-8 encoding - struct hentry* dp = lookup(example); + struct hentry* dp = lookup(example.c_str()); remove_forbidden_flag(word); if (dp && dp->astr) { int captype; - int wbl = strlen(word); int wcl = get_clen_and_captype(word, &captype); if (aliasf) { - add_word(word, wbl, wcl, dp->astr, dp->alen, NULL, false); + add_word(word, wcl, dp->astr, dp->alen, NULL, false); } else { unsigned short* flags = (unsigned short*)malloc(dp->alen * sizeof(unsigned short)); if (flags) { memcpy((void*)flags, (void*)dp->astr, dp->alen * sizeof(unsigned short)); - add_word(word, wbl, wcl, flags, dp->alen, NULL, false); + add_word(word, wcl, flags, dp->alen, NULL, false); } else return 1; } @@ -491,20 +482,14 @@ struct hentry* HashMgr::walk_hashtable(int& col, struct hentry* hp) const { // load a munched word list and build a hash table on the fly int HashMgr::load_tables(const char* tpath, const char* key) { - int al; - char* ap; - char* dp; - char* dp2; - unsigned short* flags; - char* ts; - // open dictionary file FileMgr* dict = new FileMgr(tpath, key); if (dict == NULL) return 1; // first read the first line of file to get hash table size */ - if ((ts = dict->getline()) == NULL) { + std::string ts; + if (!dict->getline(ts)) { HUNSPELL_WARNING(stderr, "error: empty dic file %s\n", tpath); delete dict; return 2; @@ -512,13 +497,11 @@ int HashMgr::load_tables(const char* tpath, const char* key) { mychomp(ts); /* remove byte order mark */ - if (strncmp(ts, "\xEF\xBB\xBF", 3) == 0) { - memmove(ts, ts + 3, strlen(ts + 3) + 1); - // warning: dic file begins with byte order mark: possible incompatibility - // with old Hunspell versions + if (ts.compare(0, 3, "\xEF\xBB\xBF", 3) == 0) { + ts.erase(0, 3); } - tablesize = atoi(ts); + tablesize = atoi(ts.c_str()); int nExtra = 5 + USERWORD; @@ -544,60 +527,65 @@ int HashMgr::load_tables(const char* tpath, const char* key) { // loop through all words on much list and add to hash // table and create word and affix strings - while ((ts = dict->getline()) != NULL) { + while (dict->getline(ts)) { mychomp(ts); // split each line into word and morphological description - dp = ts; - while ((dp = strchr(dp, ':')) != NULL) { - if ((dp > ts + 3) && (*(dp - 3) == ' ' || *(dp - 3) == '\t')) { - for (dp -= 4; dp >= ts && (*dp == ' ' || *dp == '\t'); dp--) + size_t dp_pos = 0; + while ((dp_pos = ts.find(':', dp_pos)) != std::string::npos) { + if ((dp_pos > 3) && (ts[dp_pos - 3] == ' ' || ts[dp_pos - 3] == '\t')) { + for (dp_pos -= 3; dp_pos > 0 && (ts[dp_pos-1] == ' ' || ts[dp_pos-1] == '\t'); --dp_pos) ; - if (dp < ts) { // missing word - dp = NULL; + if (dp_pos == 0) { // missing word + dp_pos = std::string::npos; } else { - *(dp + 1) = '\0'; - dp = dp + 2; + ++dp_pos; } break; } - dp++; + ++dp_pos; } // tabulator is the old morphological field separator - dp2 = strchr(ts, '\t'); - if (dp2 && (!dp || dp2 < dp)) { - *dp2 = '\0'; - dp = dp2 + 1; + size_t dp2_pos = ts.find('\t'); + if (dp2_pos != std::string::npos && (dp_pos == std::string::npos || dp2_pos < dp_pos)) { + dp_pos = dp2_pos + 1; + } + + std::string dp; + if (dp_pos != std::string::npos) { + dp.assign(ts.substr(dp_pos)); + ts.resize(dp_pos - 1); } // split each line into word and affix char strings // "\/" signs slash in words (not affix separator) // "/" at beginning of the line is word character (not affix separator) - ap = strchr(ts, '/'); - while (ap) { - if (ap == ts) { - ap++; + size_t ap_pos = ts.find('/'); + while (ap_pos != std::string::npos) { + if (ap_pos == 0) { + ++ap_pos; continue; - } else if (*(ap - 1) != '\\') + } else if (ts[ap_pos - 1] != '\\') break; // replace "\/" with "/" - for (char *sp = ap - 1; *sp; *sp = *(sp + 1), sp++) - ; - ap = strchr(ap, '/'); + ts.erase(ap_pos - 1, 1); + ap_pos = ts.find('/', ap_pos); } - if (ap) { - *ap = '\0'; + unsigned short* flags; + int al; + if (ap_pos != std::string::npos && ap_pos != ts.size()) { + std::string ap(ts.substr(ap_pos + 1)); + ts.resize(ap_pos); if (aliasf) { - int index = atoi(ap + 1); + int index = atoi(ap.c_str()); al = get_aliasf(index, &flags, dict); if (!al) { HUNSPELL_WARNING(stderr, "error: line %d: bad flag vector alias\n", dict->getlinenum()); - *ap = '\0'; } } else { - al = decode_flags(&flags, ap + 1, dict); + al = decode_flags(&flags, ap.c_str(), dict); if (al == -1) { HUNSPELL_WARNING(stderr, "Can't allocate memory.\n"); delete dict; @@ -607,16 +595,15 @@ int HashMgr::load_tables(const char* tpath, const char* key) { } } else { al = 0; - ap = NULL; flags = NULL; } int captype; - int wbl = strlen(ts); int wcl = get_clen_and_captype(ts, &captype); + const std::string *dp_str = dp.empty() ? NULL : &dp; // add the word and its index plus its capitalized form optionally - if (add_word(ts, wbl, wcl, flags, al, dp, false) || - add_hidden_capitalized_word(ts, wcl, flags, al, dp, captype)) { + if (add_word(ts, wcl, flags, al, dp_str, false) || + add_hidden_capitalized_word(ts, wcl, flags, al, dp_str, captype)) { delete dict; return 5; } @@ -639,15 +626,15 @@ int HashMgr::hash(const char* word) const { return (unsigned long)hv % tablesize; } -int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { +int HashMgr::decode_flags(unsigned short** result, const std::string& flags, FileMgr* af) const { int len; - if (*flags == '\0') { + if (flags.empty()) { *result = NULL; return 0; } switch (flag_mode) { case FLAG_LONG: { // two-character flags (1x2yZz -> 1x 2y Zz) - len = strlen(flags); + len = flags.size(); if (len % 2 == 1) HUNSPELL_WARNING(stderr, "error: line %d: bad flagvector\n", af->getlinenum()); @@ -656,29 +643,27 @@ int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { if (!*result) return -1; for (int i = 0; i < len; i++) { - (*result)[i] = (((unsigned short)flags[i * 2]) << 8) + - (unsigned short)flags[i * 2 + 1]; + (*result)[i] = ((unsigned short)((unsigned char)flags[i * 2]) << 8) + + (unsigned char)flags[i * 2 + 1]; } break; } case FLAG_NUM: { // decimal numbers separated by comma (4521,23,233 -> 4521 // 23 233) - int i; len = 1; - char* src = flags; unsigned short* dest; - char* p; - for (p = flags; *p; p++) { - if (*p == ',') + for (size_t i = 0; i < flags.size(); ++i) { + if (flags[i] == ',') len++; } *result = (unsigned short*)malloc(len * sizeof(unsigned short)); if (!*result) return -1; dest = *result; - for (p = flags; *p; p++) { + const char* src = flags.c_str(); + for (const char* p = src; *p; p++) { if (*p == ',') { - i = atoi(src); + int i = atoi(src); if (i >= DEFAULTFLAGS) HUNSPELL_WARNING( stderr, "error: line %d: flag id %d is too large (max: %d)\n", @@ -691,7 +676,7 @@ int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { dest++; } } - i = atoi(src); + int i = atoi(src); if (i >= DEFAULTFLAGS) HUNSPELL_WARNING(stderr, "error: line %d: flag id %d is too large (max: %d)\n", @@ -714,13 +699,13 @@ int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { } default: { // Ispell's one-character flags (erfg -> e r f g) unsigned short* dest; - len = strlen(flags); + len = flags.size(); *result = (unsigned short*)malloc(len * sizeof(unsigned short)); if (!*result) return -1; dest = *result; - for (unsigned char* p = (unsigned char*)flags; *p; p++) { - *dest = (unsigned short)*p; + for (size_t i = 0; i < flags.size(); ++i) { + *dest = (unsigned char)flags[i]; dest++; } } @@ -728,12 +713,77 @@ int HashMgr::decode_flags(unsigned short** result, char* flags, FileMgr* af) { return len; } -unsigned short HashMgr::decode_flag(const char* f) { +bool HashMgr::decode_flags(std::vector& result, const std::string& flags, FileMgr* af) const { + if (flags.empty()) { + return false; + } + switch (flag_mode) { + case FLAG_LONG: { // two-character flags (1x2yZz -> 1x 2y Zz) + size_t len = flags.size(); + if (len % 2 == 1) + HUNSPELL_WARNING(stderr, "error: line %d: bad flagvector\n", + af->getlinenum()); + len /= 2; + result.reserve(result.size() + len); + for (size_t i = 0; i < len; ++i) { + result.push_back(((unsigned short)((unsigned char)flags[i * 2]) << 8) + + (unsigned char)flags[i * 2 + 1]); + } + break; + } + case FLAG_NUM: { // decimal numbers separated by comma (4521,23,233 -> 4521 + // 23 233) + const char* src = flags.c_str(); + for (const char* p = src; *p; p++) { + if (*p == ',') { + int i = atoi(src); + if (i >= DEFAULTFLAGS) + HUNSPELL_WARNING( + stderr, "error: line %d: flag id %d is too large (max: %d)\n", + af->getlinenum(), i, DEFAULTFLAGS - 1); + result.push_back((unsigned short)i); + if (result.back() == 0) + HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", + af->getlinenum()); + src = p + 1; + } + } + int i = atoi(src); + if (i >= DEFAULTFLAGS) + HUNSPELL_WARNING(stderr, + "error: line %d: flag id %d is too large (max: %d)\n", + af->getlinenum(), i, DEFAULTFLAGS - 1); + result.push_back((unsigned short)i); + if (result.back() == 0) + HUNSPELL_WARNING(stderr, "error: line %d: 0 is wrong flag id\n", + af->getlinenum()); + break; + } + case FLAG_UNI: { // UTF-8 characters + std::vector w; + u8_u16(w, flags); + size_t len = w.size(); + size_t origsize = result.size(); + result.resize(origsize + len); + memcpy(&result[origsize], &w[0], len * sizeof(short)); + break; + } + default: { // Ispell's one-character flags (erfg -> e r f g) + result.reserve(flags.size()); + for (size_t i = 0; i < flags.size(); ++i) { + result.push_back((unsigned char)flags[i]); + } + } + } + return true; +} + +unsigned short HashMgr::decode_flag(const char* f) const { unsigned short s = 0; int i; switch (flag_mode) { case FLAG_LONG: - s = ((unsigned short)f[0] << 8) + (unsigned short)f[1]; + s = ((unsigned short)((unsigned char)f[0]) << 8) + (unsigned char)f[1]; break; case FLAG_NUM: i = atoi(f); @@ -750,14 +800,14 @@ unsigned short HashMgr::decode_flag(const char* f) { break; } default: - s = (unsigned short)*((unsigned char*)f); + s = *(unsigned char*)f; } if (s == 0) HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n"); return s; } -char* HashMgr::encode_flag(unsigned short f) { +char* HashMgr::encode_flag(unsigned short f) const { if (f == 0) return mystrdup("(NULL)"); std::string ch; @@ -780,7 +830,6 @@ char* HashMgr::encode_flag(unsigned short f) { // read in aff file and set flag mode int HashMgr::load_config(const char* affpath, const char* key) { - char* line; // io buffers int firstline = 1; // open the affix file @@ -794,29 +843,31 @@ int HashMgr::load_config(const char* affpath, const char* key) { // read in each line ignoring any that do not // start with a known line type indicator - while ((line = afflst->getline()) != NULL) { + std::string line; + while (afflst->getline(line)) { mychomp(line); /* remove byte order mark */ if (firstline) { firstline = 0; - if (strncmp(line, "\xEF\xBB\xBF", 3) == 0) - memmove(line, line + 3, strlen(line + 3) + 1); + if (line.compare(0, 3, "\xEF\xBB\xBF", 3) == 0) { + line.erase(0, 3); + } } /* parse in the try string */ - if ((strncmp(line, "FLAG", 4) == 0) && isspace(line[4])) { + if ((line.compare(0, 4, "FLAG", 4) == 0) && line.size() > 4 && isspace(line[4])) { if (flag_mode != FLAG_CHAR) { HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of the FLAG " "affix file parameter\n", afflst->getlinenum()); } - if (strstr(line, "long")) + if (line.find("long") != std::string::npos) flag_mode = FLAG_LONG; - if (strstr(line, "num")) + if (line.find("num") != std::string::npos) flag_mode = FLAG_NUM; - if (strstr(line, "UTF-8")) + if (line.find("UTF-8") != std::string::npos) flag_mode = FLAG_UNI; if (flag_mode == FLAG_CHAR) { HUNSPELL_WARNING( @@ -825,21 +876,22 @@ int HashMgr::load_config(const char* affpath, const char* key) { afflst->getlinenum()); } } - if (strncmp(line, "FORBIDDENWORD", 13) == 0) { - char* st = NULL; - if (parse_string(line, &st, afflst->getlinenum())) { + + if (line.compare(0, 13, "FORBIDDENWORD", 13) == 0) { + std::string st; + if (!parse_string(line, st, afflst->getlinenum())) { delete afflst; return 1; } - forbiddenword = decode_flag(st); - free(st); + forbiddenword = decode_flag(st.c_str()); } - if (strncmp(line, "SET", 3) == 0) { - if (parse_string(line, &enc, afflst->getlinenum())) { + + if (line.compare(0, 3, "SET", 3) == 0) { + if (!parse_string(line, enc, afflst->getlinenum())) { delete afflst; return 1; } - if (strcmp(enc, "UTF-8") == 0) { + if (enc == "UTF-8") { utf8 = 1; #ifndef OPENOFFICEORG #ifndef MOZILLA_CLIENT @@ -849,8 +901,9 @@ int HashMgr::load_config(const char* affpath, const char* key) { } else csconv = get_current_cs(enc); } - if (strncmp(line, "LANG", 4) == 0) { - if (parse_string(line, &lang, afflst->getlinenum())) { + + if (line.compare(0, 4, "LANG", 4) == 0) { + if (!parse_string(line, lang, afflst->getlinenum())) { delete afflst; return 1; } @@ -859,34 +912,36 @@ int HashMgr::load_config(const char* affpath, const char* key) { /* parse in the ignored characters (for example, Arabic optional diacritics * characters */ - if (strncmp(line, "IGNORE", 6) == 0) { - if (!parse_array(line, &ignorechars, ignorechars_utf16, + if (line.compare(0, 6, "IGNORE", 6) == 0) { + if (!parse_array(line, ignorechars, ignorechars_utf16, utf8, afflst->getlinenum())) { delete afflst; return 1; } } - if ((strncmp(line, "AF", 2) == 0) && isspace(line[2])) { - if (parse_aliasf(line, afflst)) { + if ((line.compare(0, 2, "AF", 2) == 0) && line.size() > 2 && isspace(line[2])) { + if (!parse_aliasf(line, afflst)) { delete afflst; return 1; } } - if ((strncmp(line, "AM", 2) == 0) && isspace(line[2])) { - if (parse_aliasm(line, afflst)) { + if ((line.compare(0, 2, "AM", 2) == 0) && line.size() > 2 && isspace(line[2])) { + if (!parse_aliasm(line, afflst)) { delete afflst; return 1; } } - if (strncmp(line, "COMPLEXPREFIXES", 15) == 0) + if (line.compare(0, 15, "COMPLEXPREFIXES", 15) == 0) complexprefixes = 1; - if (((strncmp(line, "SFX", 3) == 0) || (strncmp(line, "PFX", 3) == 0)) && - isspace(line[3])) + + if (((line.compare(0, 3, "SFX", 3) == 0) || + (line.compare(0, 3, "PFX", 3) == 0)) && line.size() > 3 && isspace(line[3])) break; } + if (csconv == NULL) csconv = get_current_cs(SPELL_ENCODING); delete afflst; @@ -894,57 +949,54 @@ int HashMgr::load_config(const char* affpath, const char* key) { } /* parse in the ALIAS table */ -int HashMgr::parse_aliasf(char* line, FileMgr* af) { +bool HashMgr::parse_aliasf(const std::string& line, FileMgr* af) { if (numaliasf != 0) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numaliasf = atoi(std::string(start_piece, iter).c_str()); + if (numaliasf < 1) { + numaliasf = 0; + aliasf = NULL; + aliasflen = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - case 1: { - numaliasf = atoi(piece); - if (numaliasf < 1) { - numaliasf = 0; - aliasf = NULL; - aliasflen = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - aliasf = - (unsigned short**)malloc(numaliasf * sizeof(unsigned short*)); - aliasflen = - (unsigned short*)malloc(numaliasf * sizeof(unsigned short)); - if (!aliasf || !aliasflen) { - numaliasf = 0; - if (aliasf) - free(aliasf); - if (aliasflen) - free(aliasflen); - aliasf = NULL; - aliasflen = NULL; - return 1; - } - np++; - break; + aliasf = + (unsigned short**)malloc(numaliasf * sizeof(unsigned short*)); + aliasflen = + (unsigned short*)malloc(numaliasf * sizeof(unsigned short)); + if (!aliasf || !aliasflen) { + numaliasf = 0; + if (aliasf) + free(aliasf); + if (aliasflen) + free(aliasflen); + aliasf = NULL; + aliasflen = NULL; + return false; } - default: - break; + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { numaliasf = 0; @@ -954,48 +1006,47 @@ int HashMgr::parse_aliasf(char* line, FileMgr* af) { aliasflen = NULL; HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numaliasf lines to read in the remainder of the table */ - char* nl; for (int j = 0; j < numaliasf; j++) { - if ((nl = af->getline()) == NULL) - return 1; + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; i = 0; aliasf[j] = NULL; aliasflen[j] = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "AF", 2) != 0) { - numaliasf = 0; - free(aliasf); - free(aliasflen); - aliasf = NULL; - aliasflen = NULL; - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - return 1; - } - break; - } - case 1: { - aliasflen[j] = - (unsigned short)decode_flags(&(aliasf[j]), piece, af); - std::sort(aliasf[j], aliasf[j] + aliasflen[j]); - break; + iter = nl.begin(); + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 2, "AF", 2) != 0) { + numaliasf = 0; + free(aliasf); + free(aliasflen); + aliasf = NULL; + aliasflen = NULL; + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + return false; } - default: - break; + break; } - i++; + case 1: { + std::string piece(start_piece, iter); + aliasflen[j] = + (unsigned short)decode_flags(&(aliasf[j]), piece, af); + std::sort(aliasf[j], aliasf[j] + aliasflen[j]); + break; + } + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(nl, iter); } if (!aliasf[j]) { free(aliasf); @@ -1005,17 +1056,17 @@ int HashMgr::parse_aliasf(char* line, FileMgr* af) { numaliasf = 0; HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; + return false; } } - return 0; + return true; } -int HashMgr::is_aliasf() { +int HashMgr::is_aliasf() const { return (aliasf != NULL); } -int HashMgr::get_aliasf(int index, unsigned short** fvec, FileMgr* af) { +int HashMgr::get_aliasf(int index, unsigned short** fvec, FileMgr* af) const { if ((index > 0) && (index <= numaliasf)) { *fvec = aliasf[index - 1]; return aliasflen[index - 1]; @@ -1027,45 +1078,42 @@ int HashMgr::get_aliasf(int index, unsigned short** fvec, FileMgr* af) { } /* parse morph alias definitions */ -int HashMgr::parse_aliasm(char* line, FileMgr* af) { +bool HashMgr::parse_aliasm(const std::string& line, FileMgr* af) { if (numaliasm != 0) { HUNSPELL_WARNING(stderr, "error: line %d: multiple table definitions\n", af->getlinenum()); - return 1; + return false; } - char* tp = line; - char* piece; int i = 0; int np = 0; - piece = mystrsep(&tp, 0); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - np++; - break; + std::string::const_iterator iter = line.begin(); + std::string::const_iterator start_piece = mystrsep(line, iter); + while (start_piece != line.end()) { + switch (i) { + case 0: { + np++; + break; + } + case 1: { + numaliasm = atoi(std::string(start_piece, iter).c_str()); + if (numaliasm < 1) { + HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", + af->getlinenum()); + return false; } - case 1: { - numaliasm = atoi(piece); - if (numaliasm < 1) { - HUNSPELL_WARNING(stderr, "error: line %d: bad entry number\n", - af->getlinenum()); - return 1; - } - aliasm = (char**)malloc(numaliasm * sizeof(char*)); - if (!aliasm) { - numaliasm = 0; - return 1; - } - np++; - break; + aliasm = (char**)malloc(numaliasm * sizeof(char*)); + if (!aliasm) { + numaliasm = 0; + return false; } - default: - break; + np++; + break; } - i++; + default: + break; } - piece = mystrsep(&tp, 0); + ++i; + start_piece = mystrsep(line, iter); } if (np != 2) { numaliasm = 0; @@ -1073,55 +1121,50 @@ int HashMgr::parse_aliasm(char* line, FileMgr* af) { aliasm = NULL; HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", af->getlinenum()); - return 1; + return false; } /* now parse the numaliasm lines to read in the remainder of the table */ - char* nl = line; for (int j = 0; j < numaliasm; j++) { - if ((nl = af->getline()) == NULL) - return 1; + std::string nl; + if (!af->getline(nl)) + return false; mychomp(nl); - tp = nl; - i = 0; aliasm[j] = NULL; - piece = mystrsep(&tp, ' '); - while (piece) { - if (*piece != '\0') { - switch (i) { - case 0: { - if (strncmp(piece, "AM", 2) != 0) { - HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", - af->getlinenum()); - numaliasm = 0; - free(aliasm); - aliasm = NULL; - return 1; - } - break; + iter = nl.begin(); + i = 0; + start_piece = mystrsep(nl, iter); + while (start_piece != nl.end()) { + switch (i) { + case 0: { + if (nl.compare(start_piece - nl.begin(), 2, "AM", 2) != 0) { + HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", + af->getlinenum()); + numaliasm = 0; + free(aliasm); + aliasm = NULL; + return false; } - case 1: { - // add the remaining of the line - if (*tp) { - *(tp - 1) = ' '; - tp = tp + strlen(tp); - } - std::string chunk(piece); - if (complexprefixes) { - if (utf8) - reverseword_utf(chunk); - else - reverseword(chunk); - } - aliasm[j] = mystrdup(chunk.c_str()); - break; + break; + } + case 1: { + // add the remaining of the line + std::string::const_iterator end = nl.end(); + std::string chunk(start_piece, end); + if (complexprefixes) { + if (utf8) + reverseword_utf(chunk); + else + reverseword(chunk); } - default: - break; + aliasm[j] = mystrdup(chunk.c_str()); + break; } - i++; + default: + break; } - piece = mystrsep(&tp, ' '); + ++i; + start_piece = mystrsep(nl, iter); } if (!aliasm[j]) { numaliasm = 0; @@ -1129,17 +1172,17 @@ int HashMgr::parse_aliasm(char* line, FileMgr* af) { aliasm = NULL; HUNSPELL_WARNING(stderr, "error: line %d: table is corrupt\n", af->getlinenum()); - return 1; + return false; } } - return 0; + return true; } -int HashMgr::is_aliasm() { +int HashMgr::is_aliasm() const { return (aliasm != NULL); } -char* HashMgr::get_aliasm(int index) { +char* HashMgr::get_aliasm(int index) const { if ((index > 0) && (index <= numaliasm)) return aliasm[index - 1]; HUNSPELL_WARNING(stderr, "error: bad morph. alias index: %d\n", index); diff --git a/src/spelling/hunspell/hashmgr.hxx b/src/spelling/hunspell/hashmgr.hxx index 95b06b13..812171af 100644 --- a/src/spelling/hunspell/hashmgr.hxx +++ b/src/spelling/hunspell/hashmgr.hxx @@ -71,10 +71,8 @@ * SUCH DAMAGE. */ -#ifndef _HASHMGR_HXX_ -#define _HASHMGR_HXX_ - -#include "hunvisapi.h" +#ifndef HASHMGR_HXX_ +#define HASHMGR_HXX_ #include #include @@ -86,7 +84,7 @@ enum flag { FLAG_CHAR, FLAG_LONG, FLAG_NUM, FLAG_UNI }; -class LIBHUNSPELL_DLL_EXPORTED HashMgr { +class HashMgr { int tablesize; struct hentry** tableptr; flag flag_mode; @@ -94,10 +92,10 @@ class LIBHUNSPELL_DLL_EXPORTED HashMgr { int utf8; unsigned short forbiddenword; int langnum; - char* enc; - char* lang; + std::string enc; + std::string lang; struct cs_info* csconv; - char* ignorechars; + std::string ignorechars; std::vector ignorechars_utf16; int numaliasf; // flag vector `compression' with aliases unsigned short** aliasf; @@ -114,35 +112,35 @@ class LIBHUNSPELL_DLL_EXPORTED HashMgr { struct hentry* walk_hashtable(int& col, struct hentry* hp) const; int add(const std::string& word); - int add_with_affix(const char* word, const char* pattern); - int remove(const char* word); - int decode_flags(unsigned short** result, char* flags, FileMgr* af); - unsigned short decode_flag(const char* flag); - char* encode_flag(unsigned short flag); - int is_aliasf(); - int get_aliasf(int index, unsigned short** fvec, FileMgr* af); - int is_aliasm(); - char* get_aliasm(int index); + int add_with_affix(const std::string& word, const std::string& pattern); + int remove(const std::string& word); + int decode_flags(unsigned short** result, const std::string& flags, FileMgr* af) const; + bool decode_flags(std::vector& result, const std::string& flags, FileMgr* af) const; + unsigned short decode_flag(const char* flag) const; + char* encode_flag(unsigned short flag) const; + int is_aliasf() const; + int get_aliasf(int index, unsigned short** fvec, FileMgr* af) const; + int is_aliasm() const; + char* get_aliasm(int index) const; private: int get_clen_and_captype(const std::string& word, int* captype); int load_tables(const char* tpath, const char* key); - int add_word(const char* word, - int wbl, + int add_word(const std::string& word, int wcl, unsigned short* ap, int al, - const char* desc, + const std::string* desc, bool onlyupcase); int load_config(const char* affpath, const char* key); - int parse_aliasf(char* line, FileMgr* af); + bool parse_aliasf(const std::string& line, FileMgr* af); int add_hidden_capitalized_word(const std::string& word, int wcl, unsigned short* flags, int al, - char* dp, + const std::string* dp, int captype); - int parse_aliasm(char* line, FileMgr* af); + bool parse_aliasm(const std::string& line, FileMgr* af); int remove_forbidden_flag(const std::string& word); }; diff --git a/src/spelling/hunspell/htypes.hxx b/src/spelling/hunspell/htypes.hxx index d2443944..1e6c1183 100644 --- a/src/spelling/hunspell/htypes.hxx +++ b/src/spelling/hunspell/htypes.hxx @@ -38,8 +38,8 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _HTYPES_HXX_ -#define _HTYPES_HXX_ +#ifndef HTYPES_HXX_ +#define HTYPES_HXX_ #define ROTATE_LEN 5 diff --git a/src/spelling/hunspell/hunspell.cxx b/src/spelling/hunspell/hunspell.cxx index f7c15810..abcdb8f3 100644 --- a/src/spelling/hunspell/hunspell.cxx +++ b/src/spelling/hunspell/hunspell.cxx @@ -75,35 +75,100 @@ #include #include +#include "affixmgr.hxx" #include "hunspell.hxx" +#include "suggestmgr.hxx" #include "hunspell.h" -#ifndef MOZILLA_CLIENT -#include "config.h" -#endif #include "csutil.hxx" #include #include -#define MAXWORDLEN 176 #define MAXWORDUTF8LEN (MAXWORDLEN * 3) -Hunspell::Hunspell(const char* affpath, const char* dpath, const char* key) { - encoding = NULL; +class HunspellImpl +{ +public: + HunspellImpl(const char* affpath, const char* dpath, const char* key); + ~HunspellImpl(); + int add_dic(const char* dpath, const char* key); + std::vector suffix_suggest(const std::string& root_word); + std::vector generate(const std::string& word, const std::vector& pl); + std::vector generate(const std::string& word, const std::string& pattern); + std::vector stem(const std::string& word); + std::vector stem(const std::vector& morph); + std::vector analyze(const std::string& word); + int get_langnum() const; + bool input_conv(const std::string& word, std::string& dest); + bool spell(const std::string& word, int* info = NULL, std::string* root = NULL); + std::vector suggest(const std::string& word); + const std::string& get_wordchars() const; + const std::vector& get_wordchars_utf16() const; + const std::string& get_dict_encoding() const; + int add(const std::string& word); + int add_with_affix(const std::string& word, const std::string& example); + int remove(const std::string& word); + const std::string& get_version() const; + struct cs_info* get_csconv(); + std::vector dic_encoding_vec; + +private: + AffixMgr* pAMgr; + std::vector m_HMgrs; + SuggestMgr* pSMgr; + char* affixpath; + std::string encoding; + struct cs_info* csconv; + int langnum; + int utf8; + int complexprefixes; + std::vector wordbreak; + +private: + void cleanword(std::string& dest, const std::string&, int* pcaptype, int* pabbrev); + size_t cleanword2(std::string& dest, + std::vector& dest_u, + const std::string& src, + int* pcaptype, + size_t* pabbrev); + void mkinitcap(std::string& u8); + int mkinitcap2(std::string& u8, std::vector& u16); + int mkinitsmall2(std::string& u8, std::vector& u16); + void mkallcap(std::string& u8); + int mkallsmall2(std::string& u8, std::vector& u16); + struct hentry* checkword(const std::string& source, int* info, std::string* root); + std::string sharps_u8_l1(const std::string& source); + hentry* + spellsharps(std::string& base, size_t start_pos, int, int, int* info, std::string* root); + int is_keepcase(const hentry* rv); + void insert_sug(std::vector& slst, const std::string& word); + void cat_result(std::string& result, const std::string& st); + std::vector spellml(const std::string& word); + std::string get_xml_par(const char* par); + const char* get_xml_pos(const char* s, const char* attr); + std::vector get_xml_list(const char* list, const char* tag); + int check_xml_par(const char* q, const char* attr, const char* value); +private: + HunspellImpl(const HunspellImpl&); + HunspellImpl& operator=(const HunspellImpl&); +}; + +Hunspell::Hunspell(const char* affpath, const char* dpath, const char* key) + : m_Impl(new HunspellImpl(affpath, dpath, key)) { +} + +HunspellImpl::HunspellImpl(const char* affpath, const char* dpath, const char* key) { csconv = NULL; utf8 = 0; complexprefixes = 0; affixpath = mystrdup(affpath); - maxdic = 0; /* first set up the hash manager */ - pHMgr[0] = new HashMgr(dpath, affpath, key); - if (pHMgr[0]) - maxdic = 1; + m_HMgrs.push_back(new HashMgr(dpath, affpath, key)); /* next set up the affix manager */ /* it needs access to the hash manager lookup methods */ - pAMgr = new AffixMgr(affpath, pHMgr, &maxdic, key); + pAMgr = new AffixMgr(affpath, m_HMgrs, key); /* get the preferred try string and the dictionary */ /* encoding from the Affix Manager for that dictionary */ @@ -116,6 +181,9 @@ Hunspell::Hunspell(const char* affpath, const char* dpath, const char* key) { complexprefixes = pAMgr->get_complexprefixes(); wordbreak = pAMgr->get_breaktable(); + dic_encoding_vec.resize(encoding.size()+1); + strcpy(&dic_encoding_vec[0], encoding.c_str()); + /* and finally set up the suggestion manager */ pSMgr = new SuggestMgr(try_string, MAXSUGGESTION, pAMgr); if (try_string) @@ -123,20 +191,20 @@ Hunspell::Hunspell(const char* affpath, const char* dpath, const char* key) { } Hunspell::~Hunspell() { + delete m_Impl; +} + +HunspellImpl::~HunspellImpl() { delete pSMgr; delete pAMgr; - for (int i = 0; i < maxdic; i++) - delete pHMgr[i]; - maxdic = 0; + for (size_t i = 0; i < m_HMgrs.size(); ++i) + delete m_HMgrs[i]; pSMgr = NULL; pAMgr = NULL; #ifdef MOZILLA_CLIENT delete[] csconv; #endif csconv = NULL; - if (encoding) - free(encoding); - encoding = NULL; if (affixpath) free(affixpath); affixpath = NULL; @@ -144,13 +212,14 @@ Hunspell::~Hunspell() { // load extra dictionaries int Hunspell::add_dic(const char* dpath, const char* key) { - if (maxdic == MAXDIC || !affixpath) - return 1; - pHMgr[maxdic] = new HashMgr(dpath, affixpath, key); - if (pHMgr[maxdic]) - maxdic++; - else + return m_Impl->add_dic(dpath, key); +} + +// load extra dictionaries +int HunspellImpl::add_dic(const char* dpath, const char* key) { + if (!affixpath) return 1; + m_HMgrs.push_back(new HashMgr(dpath, affixpath, key)); return 0; } @@ -161,16 +230,15 @@ int Hunspell::add_dic(const char* dpath, const char* key) { // set the capitalization type // return the length of the "cleaned" (and UTF-8 encoded) word -size_t Hunspell::cleanword2(std::string& dest, +size_t HunspellImpl::cleanword2(std::string& dest, std::vector& dest_utf, - const char* src, - int* nc, + const std::string& src, int* pcaptype, size_t* pabbrev) { dest.clear(); dest_utf.clear(); - const char* q = src; + const char* q = src.c_str(); // first skip over any leading blanks while ((*q != '\0') && (*q == ' ')) @@ -193,21 +261,20 @@ size_t Hunspell::cleanword2(std::string& dest, dest.append(q, nl); nl = dest.size(); if (utf8) { - *nc = u8_u16(dest_utf, dest); + u8_u16(dest_utf, dest); *pcaptype = get_captype_utf8(dest_utf, langnum); } else { *pcaptype = get_captype(dest, csconv); - *nc = nl; } return nl; } -void Hunspell::cleanword(std::string& dest, - const char* src, +void HunspellImpl::cleanword(std::string& dest, + const std::string& src, int* pcaptype, int* pabbrev) { dest.clear(); - const unsigned char* q = (const unsigned char*)src; + const unsigned char* q = (const unsigned char*)src.c_str(); int firstcap = 0; // first skip over any leading blanks @@ -277,7 +344,7 @@ void Hunspell::cleanword(std::string& dest, } } -void Hunspell::mkallcap(std::string& u8) { +void HunspellImpl::mkallcap(std::string& u8) { if (utf8) { std::vector u16; u8_u16(u16, u8); @@ -288,7 +355,7 @@ void Hunspell::mkallcap(std::string& u8) { } } -int Hunspell::mkallsmall2(std::string& u8, std::vector& u16) { +int HunspellImpl::mkallsmall2(std::string& u8, std::vector& u16) { if (utf8) { ::mkallsmall_utf(u16, langnum); u16_u8(u8, u16); @@ -299,19 +366,19 @@ int Hunspell::mkallsmall2(std::string& u8, std::vector& u16) { } // convert UTF-8 sharp S codes to latin 1 -std::string Hunspell::sharps_u8_l1(const std::string& source) { +std::string HunspellImpl::sharps_u8_l1(const std::string& source) { std::string dest(source); mystrrep(dest, "\xC3\x9F", "\xDF"); return dest; } // recursive search for right ss - sharp s permutations -hentry* Hunspell::spellsharps(std::string& base, +hentry* HunspellImpl::spellsharps(std::string& base, size_t n_pos, int n, int repnum, int* info, - char** root) { + std::string* root) { size_t pos = base.find("ss", n_pos); if (pos != std::string::npos && (n < MAXSHARPS)) { base[pos] = '\xC3'; @@ -326,36 +393,28 @@ hentry* Hunspell::spellsharps(std::string& base, return h; } else if (repnum > 0) { if (utf8) - return checkword(base.c_str(), info, root); + return checkword(base, info, root); std::string tmp(sharps_u8_l1(base)); - return checkword(tmp.c_str(), info, root); + return checkword(tmp, info, root); } return NULL; } -int Hunspell::is_keepcase(const hentry* rv) { +int HunspellImpl::is_keepcase(const hentry* rv) { return pAMgr && rv->astr && pAMgr->get_keepcase() && TESTAFF(rv->astr, pAMgr->get_keepcase(), rv->alen); } -/* insert a word to the beginning of the suggestion array and return ns */ -int Hunspell::insert_sug(char*** slst, const char* word, int ns) { - if (!*slst) - return ns; - char* dup = mystrdup(word); - if (!dup) - return ns; - if (ns == MAXSUGGESTION) { - ns--; - free((*slst)[ns]); - } - for (int k = ns; k > 0; k--) - (*slst)[k] = (*slst)[k - 1]; - (*slst)[0] = dup; - return ns + 1; +/* insert a word to the beginning of the suggestion array */ +void HunspellImpl::insert_sug(std::vector& slst, const std::string& word) { + slst.insert(slst.begin(), word); } -int Hunspell::spell(const char* word, int* info, char** root) { +bool Hunspell::spell(const std::string& word, int* info, std::string* root) { + return m_Impl->spell(word, info, root); +} + +bool HunspellImpl::spell(const std::string& word, int* info, std::string* root) { struct hentry* rv = NULL; int info2 = 0; @@ -365,15 +424,14 @@ int Hunspell::spell(const char* word, int* info, char** root) { *info = 0; // Hunspell supports XML input of the simplified API (see manual) - if (strcmp(word, SPELL_XML) == 0) - return 1; - int nc = strlen(word); + if (word == SPELL_XML) + return true; if (utf8) { - if (nc >= MAXWORDUTF8LEN) - return 0; + if (word.size() >= MAXWORDUTF8LEN) + return false; } else { - if (nc >= MAXWORDLEN) - return 0; + if (word.size() >= MAXWORDLEN) + return false; } int captype = NOCAP; size_t abbv = 0; @@ -383,17 +441,15 @@ int Hunspell::spell(const char* word, int* info, char** root) { std::vector sunicw; // input conversion - RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; + RepList* rl = pAMgr ? pAMgr->get_iconvtable() : NULL; { std::string wspace; - int convstatus = rl ? rl->conv(word, wspace) : 0; - if (convstatus < 0) - return 0; - else if (convstatus > 0) - wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + bool convstatus = rl ? rl->conv(word, wspace) : false; + if (convstatus) + wl = cleanword2(scw, sunicw, wspace, &captype, &abbv); else - wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + wl = cleanword2(scw, sunicw, word, &captype, &abbv); } #ifdef MOZILLA_CLIENT @@ -402,10 +458,10 @@ int Hunspell::spell(const char* word, int* info, char** root) { abbv = 1; #endif - if (wl == 0 || maxdic == 0) - return 1; + if (wl == 0 || m_HMgrs.empty()) + return true; if (root) - *root = NULL; + root->clear(); // allow numbers with dots, dashes and commas (but forbid double separators: // "..", "--" etc.) @@ -424,7 +480,7 @@ int Hunspell::spell(const char* word, int* info, char** root) { break; } if ((i == wl) && (nstate == NNUM)) - return 1; + return true; switch (captype) { case HUHCAP: @@ -433,22 +489,22 @@ int Hunspell::spell(const char* word, int* info, char** root) { *info += SPELL_ORIGCAP; /* FALLTHROUGH */ case NOCAP: - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if ((abbv) && !(rv)) { std::string u8buffer(scw); u8buffer.push_back('.'); - rv = checkword(u8buffer.c_str(), info, root); + rv = checkword(u8buffer, info, root); } break; case ALLCAP: { *info += SPELL_ORIGCAP; - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if (rv) break; if (abbv) { std::string u8buffer(scw); u8buffer.push_back('.'); - rv = checkword(u8buffer.c_str(), info, root); + rv = checkword(u8buffer, info, root); if (rv) break; } @@ -470,18 +526,18 @@ int Hunspell::spell(const char* word, int* info, char** root) { scw = part1 + part2; sunicw = part1u; sunicw.insert(sunicw.end(), part2u.begin(), part2u.end()); - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if (rv) break; } else { mkinitcap2(part2, sunicw); scw = part1 + part2; - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if (rv) break; } mkinitcap2(scw, sunicw); - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if (rv) break; } @@ -516,7 +572,7 @@ int Hunspell::spell(const char* word, int* info, char** root) { mkinitcap2(scw, sunicw); if (captype == INITCAP) *info += SPELL_INITCAP; - rv = checkword(scw.c_str(), info, root); + rv = checkword(scw, info, root); if (captype == INITCAP) *info -= SPELL_INITCAP; // forbid bad capitalization @@ -531,16 +587,16 @@ int Hunspell::spell(const char* word, int* info, char** root) { if (rv) break; - rv = checkword(u8buffer.c_str(), info, root); + rv = checkword(u8buffer, info, root); if (abbv && !rv) { u8buffer.push_back('.'); - rv = checkword(u8buffer.c_str(), info, root); + rv = checkword(u8buffer, info, root); if (!rv) { u8buffer = scw; u8buffer.push_back('.'); if (captype == INITCAP) *info += SPELL_INITCAP; - rv = checkword(u8buffer.c_str(), info, root); + rv = checkword(u8buffer, info, root); if (captype == INITCAP) *info -= SPELL_INITCAP; if (rv && is_keepcase(rv) && (captype == ALLCAP)) @@ -565,89 +621,86 @@ int Hunspell::spell(const char* word, int* info, char** root) { TESTAFF(rv->astr, pAMgr->get_warn(), rv->alen)) { *info += SPELL_WARN; if (pAMgr->get_forbidwarn()) - return 0; - return HUNSPELL_OK_WARN; + return false; + return true; } - return HUNSPELL_OK; + return true; } // recursive breaking at break points - if (wordbreak) { + if (!wordbreak.empty()) { int nbr = 0; wl = scw.size(); - int numbreak = pAMgr ? pAMgr->get_numbreak() : 0; // calculate break points for recursion limit - for (int j = 0; j < numbreak; j++) { - size_t len = strlen(wordbreak[j]); + for (size_t j = 0; j < wordbreak.size(); ++j) { size_t pos = 0; - while ((pos = scw.find(wordbreak[j], pos, len)) != std::string::npos) { + while ((pos = scw.find(wordbreak[j], pos)) != std::string::npos) { ++nbr; - pos += len; + pos += wordbreak[j].size(); } } if (nbr >= 10) - return 0; + return false; // check boundary patterns (^begin and end$) - for (int j = 0; j < numbreak; j++) { - size_t plen = strlen(wordbreak[j]); + for (size_t j = 0; j < wordbreak.size(); ++j) { + size_t plen = wordbreak[j].size(); if (plen == 1 || plen > wl) continue; if (wordbreak[j][0] == '^' && - scw.compare(0, plen - 1, wordbreak[j] + 1, plen -1) == 0 && spell(scw.c_str() + plen - 1)) - return 1; + scw.compare(0, plen - 1, wordbreak[j], 1, plen -1) == 0 && spell(scw.substr(plen - 1))) + return true; if (wordbreak[j][plen - 1] == '$' && - scw.compare(wl - plen + 1, plen - 1, wordbreak[j], plen - 1) == 0) { - char r = scw[wl - plen + 1]; - scw[wl - plen + 1] = '\0'; - if (spell(scw.c_str())) - return 1; - scw[wl - plen + 1] = r; + scw.compare(wl - plen + 1, plen - 1, wordbreak[j], 0, plen - 1) == 0) { + std::string suffix(scw.substr(wl - plen + 1)); + scw.resize(wl - plen + 1); + if (spell(scw)) + return true; + scw.append(suffix); } } // other patterns - for (int j = 0; j < numbreak; j++) { - size_t plen = strlen(wordbreak[j]); + for (size_t j = 0; j < wordbreak.size(); ++j) { + size_t plen = wordbreak[j].size(); size_t found = scw.find(wordbreak[j]); if ((found > 0) && (found < wl - plen)) { - if (!spell(scw.c_str() + found + plen)) + if (!spell(scw.substr(found + plen))) continue; - char r = scw[found]; - scw[found] = '\0'; + std::string suffix(scw.substr(found)); + scw.resize(found); // examine 2 sides of the break point - if (spell(scw.c_str())) - return 1; - scw[found] = r; + if (spell(scw)) + return true; + scw.append(suffix); // LANG_hu: spec. dash rule - if (langnum == LANG_hu && strcmp(wordbreak[j], "-") == 0) { - r = scw[found + 1]; - scw[found + 1] = '\0'; - if (spell(scw.c_str())) - return 1; // check the first part with dash - scw[found + 1] = r; + if (langnum == LANG_hu && wordbreak[j] == "-") { + suffix = scw.substr(found + 1); + scw.resize(found + 1); + if (spell(scw)) + return true; // check the first part with dash + scw.append(suffix); } // end of LANG specific region } } } - return 0; + return false; } -struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { - struct hentry* he = NULL; +struct hentry* HunspellImpl::checkword(const std::string& w, int* info, std::string* root) { bool usebuffer = false; - int len, i; std::string w2; const char* word; + int len; - char* ignoredchars = pAMgr ? pAMgr->get_ignore() : NULL; + const char* ignoredchars = pAMgr ? pAMgr->get_ignore() : NULL; if (ignoredchars != NULL) { w2.assign(w); if (utf8) { @@ -658,11 +711,12 @@ struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { remove_ignored_chars(w2, ignoredchars); } word = w2.c_str(); + len = w2.size(); usebuffer = true; - } else - word = w; - - len = strlen(word); + } else { + word = w.c_str(); + len = w.size(); + } if (!len) return NULL; @@ -684,8 +738,9 @@ struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { } // look word in hash table - for (i = 0; (i < maxdic) && !he; i++) { - he = (pHMgr[i])->lookup(word); + struct hentry* he = NULL; + for (size_t i = 0; (i < m_HMgrs.size()) && !he; ++i) { + he = m_HMgrs[i]->lookup(word); // check forbidden and onlyincompound words if ((he) && (he->astr) && (pAMgr) && @@ -736,40 +791,33 @@ struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { return NULL; } if (root) { - std::string word_root(he->word); + root->assign(he->word); if (complexprefixes) { if (utf8) - reverseword_utf(word_root); + reverseword_utf(*root); else - reverseword(word_root); + reverseword(*root); } - *root = mystrdup(word_root.c_str()); } // try check compound word } else if (pAMgr->get_compound()) { struct hentry* rwords[100]; // buffer for COMPOUND pattern checking - he = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 0, info); + he = pAMgr->compound_check(word, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 0, info); // LANG_hu section: `moving rule' with last dash if ((!he) && (langnum == LANG_hu) && (word[len - 1] == '-')) { - char* dup = mystrdup(word); - if (!dup) - return NULL; - dup[len - 1] = '\0'; - he = pAMgr->compound_check(dup, len - 1, -5, 0, 100, 0, NULL, (hentry**)&rwords, 1, 0, - info); - free(dup); + std::string dup(word, len - 1); + he = pAMgr->compound_check(dup, -5, 0, 100, 0, NULL, (hentry**)&rwords, 1, 0, info); } // end of LANG specific region if (he) { if (root) { - std::string word_root(he->word); + root->assign(he->word); if (complexprefixes) { if (utf8) - reverseword_utf(word_root); + reverseword_utf(*root); else - reverseword(word_root); + reverseword(*root); } - *root = mystrdup(word_root.c_str()); } if (info) *info += SPELL_COMPOUND; @@ -780,22 +828,27 @@ struct hentry* Hunspell::checkword(const char* w, int* info, char** root) { return he; } -int Hunspell::suggest(char*** slst, const char* word) { +std::vector Hunspell::suggest(const std::string& word) { + return m_Impl->suggest(word); +} + +std::vector HunspellImpl::suggest(const std::string& word) { + std::vector slst; + int onlycmpdsug = 0; - if (!pSMgr || maxdic == 0) - return 0; - *slst = NULL; + if (!pSMgr || m_HMgrs.empty()) + return slst; + // process XML input of the simplified API (see manual) - if (strncmp(word, SPELL_XML, sizeof(SPELL_XML) - 3) == 0) { - return spellml(slst, word); + if (word.compare(0, sizeof(SPELL_XML) - 3, SPELL_XML, sizeof(SPELL_XML) - 3) == 0) { + return spellml(word); } - int nc = strlen(word); if (utf8) { - if (nc >= MAXWORDUTF8LEN) - return 0; + if (word.size() >= MAXWORDUTF8LEN) + return slst; } else { - if (nc >= MAXWORDLEN) - return 0; + if (word.size() >= MAXWORDLEN) + return slst; } int captype = NOCAP; size_t abbv = 0; @@ -809,121 +862,102 @@ int Hunspell::suggest(char*** slst, const char* word) { { std::string wspace; - int convstatus = rl ? rl->conv(word, wspace) : 0; - if (convstatus < 0) - return 0; - else if (convstatus > 0) - wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + bool convstatus = rl ? rl->conv(word, wspace) : false; + if (convstatus) + wl = cleanword2(scw, sunicw, wspace, &captype, &abbv); else - wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + wl = cleanword2(scw, sunicw, word, &captype, &abbv); if (wl == 0) - return 0; + return slst; } - int ns = 0; int capwords = 0; // check capitalized form for FORCEUCASE if (pAMgr && captype == NOCAP && pAMgr->get_forceucase()) { int info = SPELL_ORIGCAP; - if (checkword(scw.c_str(), &info, NULL)) { + if (checkword(scw, &info, NULL)) { std::string form(scw); mkinitcap(form); - - char** wlst = (char**)malloc(MAXSUGGESTION * sizeof(char*)); - if (wlst == NULL) - return -1; - *slst = wlst; - wlst[0] = mystrdup(form.c_str()); - for (int i = 1; i < MAXSUGGESTION; ++i) { - wlst[i] = NULL; - } - - return 1; + slst.push_back(form); + return slst; } } switch (captype) { case NOCAP: { - ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); + pSMgr->suggest(slst, scw.c_str(), &onlycmpdsug); break; } case INITCAP: { capwords = 1; - ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); - if (ns == -1) - break; + pSMgr->suggest(slst, scw.c_str(), &onlycmpdsug); std::string wspace(scw); mkallsmall2(wspace, sunicw); - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); break; } case HUHINITCAP: capwords = 1; case HUHCAP: { - ns = pSMgr->suggest(slst, scw.c_str(), ns, &onlycmpdsug); - if (ns != -1) { - // something.The -> something. The - size_t dot_pos = scw.find('.'); - if (dot_pos != std::string::npos) { - std::string postdot = scw.substr(dot_pos + 1); - int captype_; - if (utf8) { - std::vector postdotu; - u8_u16(postdotu, postdot); - captype_ = get_captype_utf8(postdotu, langnum); - } else { - captype_ = get_captype(postdot, csconv); - } - if (captype_ == INITCAP) { - std::string str(scw); - str.insert(dot_pos + 1, 1, ' '); - ns = insert_sug(slst, str.c_str(), ns); - } + pSMgr->suggest(slst, scw.c_str(), &onlycmpdsug); + // something.The -> something. The + size_t dot_pos = scw.find('.'); + if (dot_pos != std::string::npos) { + std::string postdot = scw.substr(dot_pos + 1); + int captype_; + if (utf8) { + std::vector postdotu; + u8_u16(postdotu, postdot); + captype_ = get_captype_utf8(postdotu, langnum); + } else { + captype_ = get_captype(postdot, csconv); } + if (captype_ == INITCAP) { + std::string str(scw); + str.insert(dot_pos + 1, 1, ' '); + insert_sug(slst, str); + } + } - std::string wspace; + std::string wspace; - if (captype == HUHINITCAP) { - // TheOpenOffice.org -> The OpenOffice.org - wspace = scw; - mkinitsmall2(wspace, sunicw); - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); - } + if (captype == HUHINITCAP) { + // TheOpenOffice.org -> The OpenOffice.org wspace = scw; - mkallsmall2(wspace, sunicw); + mkinitsmall2(wspace, sunicw); + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); + } + wspace = scw; + mkallsmall2(wspace, sunicw); + if (spell(wspace.c_str())) + insert_sug(slst, wspace); + size_t prevns = slst.size(); + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); + if (captype == HUHINITCAP) { + mkinitcap2(wspace, sunicw); if (spell(wspace.c_str())) - ns = insert_sug(slst, wspace.c_str(), ns); - int prevns = ns; - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); - if (captype == HUHINITCAP) { - mkinitcap2(wspace, sunicw); - if (spell(wspace.c_str())) - ns = insert_sug(slst, wspace.c_str(), ns); - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); - } - // aNew -> "a New" (instead of "a new") - for (int j = prevns; j < ns; j++) { - char* space = strchr((*slst)[j], ' '); - if (space) { - size_t slen = strlen(space + 1); - // different case after space (need capitalisation) - if ((slen < wl) && strcmp(scw.c_str() + wl - slen, space + 1)) { - std::string first((*slst)[j], space + 1); - std::string second(space + 1); - std::vector w; - if (utf8) - u8_u16(w, second); - mkinitcap2(second, w); - // set as first suggestion - char* r = (*slst)[j]; - for (int k = j; k > 0; k--) - (*slst)[k] = (*slst)[k - 1]; - free(r); - (*slst)[0] = mystrdup((first + second).c_str()); - } + insert_sug(slst, wspace); + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); + } + // aNew -> "a New" (instead of "a new") + for (size_t j = prevns; j < slst.size(); ++j) { + const char* space = strchr(slst[j].c_str(), ' '); + if (space) { + size_t slen = strlen(space + 1); + // different case after space (need capitalisation) + if ((slen < wl) && strcmp(scw.c_str() + wl - slen, space + 1)) { + std::string first(slst[j].c_str(), space + 1); + std::string second(space + 1); + std::vector w; + if (utf8) + u8_u16(w, second); + mkinitcap2(second, w); + // set as first suggestion + slst.erase(slst.begin() + j); + slst.insert(slst.begin(), first + second); } } } @@ -933,28 +967,20 @@ int Hunspell::suggest(char*** slst, const char* word) { case ALLCAP: { std::string wspace(scw); mkallsmall2(wspace, sunicw); - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); - if (ns == -1) - break; + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); if (pAMgr && pAMgr->get_keepcase() && spell(wspace.c_str())) - ns = insert_sug(slst, wspace.c_str(), ns); + insert_sug(slst, wspace); mkinitcap2(wspace, sunicw); - ns = pSMgr->suggest(slst, wspace.c_str(), ns, &onlycmpdsug); - for (int j = 0; j < ns; j++) { - std::string form((*slst)[j]); - mkallcap(form); - + pSMgr->suggest(slst, wspace.c_str(), &onlycmpdsug); + for (size_t j = 0; j < slst.size(); ++j) { + mkallcap(slst[j]); if (pAMgr && pAMgr->get_checksharps()) { if (utf8) { - mystrrep(form, "\xC3\x9F", "SS"); + mystrrep(slst[j], "\xC3\x9F", "SS"); } else { - mystrrep(form, "\xDF", "SS"); + mystrrep(slst[j], "\xDF", "SS"); } } - - free((*slst)[j]); - (*slst)[j] = mystrdup(form.c_str()); - } break; } @@ -962,29 +988,27 @@ int Hunspell::suggest(char*** slst, const char* word) { // LANG_hu section: replace '-' with ' ' in Hungarian if (langnum == LANG_hu) { - for (int j = 0; j < ns; j++) { - char* pos = strchr((*slst)[j], '-'); - if (pos) { + for (size_t j = 0; j < slst.size(); ++j) { + size_t pos = slst[j].find('-'); + if (pos != std::string::npos) { int info; - *pos = '\0'; - std::string w((*slst)[j]); - w.append(pos + 1); - (void)spell(w.c_str(), &info, NULL); + std::string w(slst[j].substr(0, pos)); + w.append(slst[j].substr(pos + 1)); + (void)spell(w, &info, NULL); if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) { - *pos = ' '; + slst[j][pos] = ' '; } else - *pos = '-'; + slst[j][pos] = '-'; } } } // END OF LANG_hu section // try ngram approach since found nothing or only compound words - if (pAMgr && (ns == 0 || onlycmpdsug) && (pAMgr->get_maxngramsugs() != 0) && - (*slst)) { + if (pAMgr && (slst.empty() || onlycmpdsug) && (pAMgr->get_maxngramsugs() != 0)) { switch (captype) { case NOCAP: { - ns = pSMgr->ngsuggest(*slst, scw.c_str(), ns, pHMgr, maxdic); + pSMgr->ngsuggest(slst, scw.c_str(), m_HMgrs); break; } case HUHINITCAP: @@ -992,26 +1016,23 @@ int Hunspell::suggest(char*** slst, const char* word) { case HUHCAP: { std::string wspace(scw); mkallsmall2(wspace, sunicw); - ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); + pSMgr->ngsuggest(slst, wspace.c_str(), m_HMgrs); break; } case INITCAP: { capwords = 1; std::string wspace(scw); mkallsmall2(wspace, sunicw); - ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); + pSMgr->ngsuggest(slst, wspace.c_str(), m_HMgrs); break; } case ALLCAP: { std::string wspace(scw); mkallsmall2(wspace, sunicw); - int oldns = ns; - ns = pSMgr->ngsuggest(*slst, wspace.c_str(), ns, pHMgr, maxdic); - for (int j = oldns; j < ns; j++) { - std::string form((*slst)[j]); - mkallcap(form); - free((*slst)[j]); - (*slst)[j] = mystrdup(form.c_str()); + size_t oldns = slst.size(); + pSMgr->ngsuggest(slst, wspace.c_str(), m_HMgrs); + for (size_t j = oldns; j < slst.size(); ++j) { + mkallcap(slst[j]); } break; } @@ -1022,8 +1043,8 @@ int Hunspell::suggest(char*** slst, const char* word) { size_t dash_pos = scw.find('-'); if (dash_pos != std::string::npos) { int nodashsug = 1; - for (int j = 0; j < ns && nodashsug == 1; j++) { - if (strchr((*slst)[j], '-')) + for (size_t j = 0; j < slst.size() && nodashsug == 1; ++j) { + if (slst[j].find('-') != std::string::npos) nodashsug = 0; } @@ -1035,20 +1056,16 @@ int Hunspell::suggest(char*** slst, const char* word) { last = 1; std::string chunk = scw.substr(prev_pos, dash_pos - prev_pos); if (!spell(chunk.c_str())) { - char** nlst = NULL; - int nn = suggest(&nlst, chunk.c_str()); - for (int j = nn - 1; j >= 0; j--) { + std::vector nlst = suggest(chunk.c_str()); + for (std::vector::reverse_iterator j = nlst.rbegin(); j != nlst.rend(); ++j) { std::string wspace = scw.substr(0, prev_pos); - wspace.append(nlst[j]); + wspace.append(*j); if (!last) { wspace.append("-"); wspace.append(scw.substr(dash_pos + 1)); } - ns = insert_sug(slst, wspace.c_str(), ns); - free(nlst[j]); + insert_sug(slst, wspace); } - if (nlst != NULL) - free(nlst); nodashsug = 0; } if (!last) { @@ -1062,31 +1079,24 @@ int Hunspell::suggest(char*** slst, const char* word) { // word reversing wrapper for complex prefixes if (complexprefixes) { - for (int j = 0; j < ns; j++) { - std::string root((*slst)[j]); - free((*slst)[j]); + for (size_t j = 0; j < slst.size(); ++j) { if (utf8) - reverseword_utf(root); + reverseword_utf(slst[j]); else - reverseword(root); - (*slst)[j] = mystrdup(root.c_str()); + reverseword(slst[j]); } } // capitalize if (capwords) - for (int j = 0; j < ns; j++) { - std::string form((*slst)[j]); - free((*slst)[j]); - mkinitcap(form); - (*slst)[j] = mystrdup(form.c_str()); + for (size_t j = 0; j < slst.size(); ++j) { + mkinitcap(slst[j]); } // expand suggestions with dot(s) if (abbv && pAMgr && pAMgr->get_sugswithdots()) { - for (int j = 0; j < ns; j++) { - (*slst)[j] = (char*)realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv); - strcat((*slst)[j], word + strlen(word) - abbv); + for (size_t j = 0; j < slst.size(); ++j) { + slst[j].append(word.substr(word.size() - abbv)); } } @@ -1095,96 +1105,90 @@ int Hunspell::suggest(char*** slst, const char* word) { switch (captype) { case INITCAP: case ALLCAP: { - int l = 0; - for (int j = 0; j < ns; j++) { - if (!strchr((*slst)[j], ' ') && !spell((*slst)[j])) { + size_t l = 0; + for (size_t j = 0; j < slst.size(); ++j) { + if (slst[j].find(' ') == std::string::npos && !spell(slst[j])) { std::string s; std::vector w; if (utf8) { - u8_u16(w, (*slst)[j]); + u8_u16(w, slst[j]); } else { - s = (*slst)[j]; + s = slst[j]; } mkallsmall2(s, w); - free((*slst)[j]); - if (spell(s.c_str())) { - (*slst)[l] = mystrdup(s.c_str()); - if ((*slst)[l]) - l++; + if (spell(s)) { + slst[l] = s; + ++l; } else { mkinitcap2(s, w); - if (spell(s.c_str())) { - (*slst)[l] = mystrdup(s.c_str()); - if ((*slst)[l]) - l++; + if (spell(s)) { + slst[l] = s; + ++l; } } } else { - (*slst)[l] = (*slst)[j]; - l++; + slst[l] = slst[j]; + ++l; } } - ns = l; + slst.resize(l); } } } // remove duplications - int l = 0; - for (int j = 0; j < ns; j++) { - (*slst)[l] = (*slst)[j]; - for (int k = 0; k < l; k++) { - if (strcmp((*slst)[k], (*slst)[j]) == 0) { - free((*slst)[j]); - l--; + size_t l = 0; + for (size_t j = 0; j < slst.size(); ++j) { + slst[l] = slst[j]; + for (size_t k = 0; k < l; ++k) { + if (slst[k] == slst[j]) { + --l; break; } } - l++; + ++l; } - ns = l; + slst.resize(l); // output conversion rl = (pAMgr) ? pAMgr->get_oconvtable() : NULL; - for (int j = 0; rl && j < ns; j++) { + for (size_t j = 0; rl && j < slst.size(); ++j) { std::string wspace; - if (rl->conv((*slst)[j], wspace) > 0) { - free((*slst)[j]); - (*slst)[j] = mystrdup(wspace.c_str()); + if (rl->conv(slst[j], wspace)) { + slst[j] = wspace; } } - // if suggestions removed by nosuggest, onlyincompound parameters - if (l == 0 && *slst) { - free(*slst); - *slst = NULL; - } - return l; + return slst; } -void Hunspell::free_list(char*** slst, int n) { - freelist(slst, n); +const std::string& Hunspell::get_dict_encoding() const { + return m_Impl->get_dict_encoding(); } -char* Hunspell::get_dic_encoding() { +const std::string& HunspellImpl::get_dict_encoding() const { return encoding; } -int Hunspell::stem(char*** slst, char** desc, int n) { +std::vector Hunspell::stem(const std::vector& desc) { + return m_Impl->stem(desc); +} + +std::vector HunspellImpl::stem(const std::vector& desc) { + std::vector slst; std::string result2; - *slst = NULL; - if (n == 0) - return 0; - for (int i = 0; i < n; i++) { + if (desc.empty()) + return slst; + for (size_t i = 0; i < desc.size(); ++i) { std::string result; // add compound word parts (except the last one) - char* s = (char*)desc[i]; - char* part = strstr(s, MORPH_PART); + const char* s = desc[i].c_str(); + const char* part = strstr(s, MORPH_PART); if (part) { - char* nextpart = strstr(part + 1, MORPH_PART); + const char* nextpart = strstr(part + 1, MORPH_PART); while (nextpart) { std::string field; copy_field(field, part, MORPH_PART); @@ -1195,36 +1199,34 @@ int Hunspell::stem(char*** slst, char** desc, int n) { s = part; } - char** pl; std::string tok(s); size_t alt = 0; while ((alt = tok.find(" | ", alt)) != std::string::npos) { tok[alt + 1] = MSEP_ALT; } - int pln = line_tok(tok.c_str(), &pl, MSEP_ALT); - for (int k = 0; k < pln; k++) { + std::vector pl = line_tok(tok, MSEP_ALT); + for (size_t k = 0; k < pl.size(); ++k) { // add derivational suffixes - if (strstr(pl[k], MORPH_DERI_SFX)) { + if (pl[k].find(MORPH_DERI_SFX) != std::string::npos) { // remove inflectional suffixes - char* is = strstr(pl[k], MORPH_INFL_SFX); - if (is) - *is = '\0'; - char* sg = pSMgr->suggest_gen(&(pl[k]), 1, pl[k]); - if (sg) { - char** gen; - int genl = line_tok(sg, &gen, MSEP_REC); - free(sg); - for (int j = 0; j < genl; j++) { + const size_t is = pl[k].find(MORPH_INFL_SFX); + if (is != std::string::npos) + pl[k].resize(is); + std::vector singlepl; + singlepl.push_back(pl[k]); + std::string sg = pSMgr->suggest_gen(singlepl, pl[k]); + if (!sg.empty()) { + std::vector gen = line_tok(sg, MSEP_REC); + for (size_t j = 0; j < gen.size(); ++j) { result2.push_back(MSEP_REC); result2.append(result); result2.append(gen[j]); } - freelist(&gen, genl); } } else { result2.push_back(MSEP_REC); result2.append(result); - if (strstr(pl[k], MORPH_SURF_PFX)) { + if (pl[k].find(MORPH_SURF_PFX) != std::string::npos) { std::string field; copy_field(field, pl[k], MORPH_SURF_PFX); result2.append(field); @@ -1234,29 +1236,41 @@ int Hunspell::stem(char*** slst, char** desc, int n) { result2.append(field); } } - freelist(&pl, pln); } - int sln = line_tok(result2.c_str(), slst, MSEP_REC); - return uniqlist(*slst, sln); + slst = line_tok(result2, MSEP_REC); + uniqlist(slst); + return slst; } -int Hunspell::stem(char*** slst, const char* word) { - char** pl; - int pln = analyze(&pl, word); - int pln2 = stem(slst, pl, pln); - freelist(&pl, pln); - return pln2; +std::vector Hunspell::stem(const std::string& word) { + return m_Impl->stem(word); +} + +std::vector HunspellImpl::stem(const std::string& word) { + return stem(analyze(word)); +} + +const char* Hunspell::get_wordchars() const { + return m_Impl->get_wordchars().c_str(); +} + +const std::string& Hunspell::get_wordchars_cpp() const { + return m_Impl->get_wordchars(); } -const char* Hunspell::get_wordchars() { +const std::string& HunspellImpl::get_wordchars() const { return pAMgr->get_wordchars(); } -const std::vector& Hunspell::get_wordchars_utf16() { +const std::vector& Hunspell::get_wordchars_utf16() const { + return m_Impl->get_wordchars_utf16(); +} + +const std::vector& HunspellImpl::get_wordchars_utf16() const { return pAMgr->get_wordchars_utf16(); } -void Hunspell::mkinitcap(std::string& u8) { +void HunspellImpl::mkinitcap(std::string& u8) { if (utf8) { std::vector u16; u8_u16(u16, u8); @@ -1267,7 +1281,7 @@ void Hunspell::mkinitcap(std::string& u8) { } } -int Hunspell::mkinitcap2(std::string& u8, std::vector& u16) { +int HunspellImpl::mkinitcap2(std::string& u8, std::vector& u16) { if (utf8) { ::mkinitcap_utf(u16, langnum); u16_u8(u8, u16); @@ -1277,7 +1291,7 @@ int Hunspell::mkinitcap2(std::string& u8, std::vector& u16) { return u8.size(); } -int Hunspell::mkinitsmall2(std::string& u8, std::vector& u16) { +int HunspellImpl::mkinitsmall2(std::string& u8, std::vector& u16) { if (utf8) { ::mkinitsmall_utf(u16, langnum); u16_u8(u8, u16); @@ -1287,52 +1301,78 @@ int Hunspell::mkinitsmall2(std::string& u8, std::vector& u16) { return u8.size(); } -int Hunspell::add(const char* word) { - if (pHMgr[0]) - return (pHMgr[0])->add(word); +int Hunspell::add(const std::string& word) { + return m_Impl->add(word); +} + +int HunspellImpl::add(const std::string& word) { + if (!m_HMgrs.empty()) + return m_HMgrs[0]->add(word); return 0; } -int Hunspell::add_with_affix(const char* word, const char* example) { - if (pHMgr[0]) - return (pHMgr[0])->add_with_affix(word, example); +int Hunspell::add_with_affix(const std::string& word, const std::string& example) { + return m_Impl->add_with_affix(word, example); +} + +int HunspellImpl::add_with_affix(const std::string& word, const std::string& example) { + if (!m_HMgrs.empty()) + return m_HMgrs[0]->add_with_affix(word, example); return 0; } -int Hunspell::remove(const char* word) { - if (pHMgr[0]) - return (pHMgr[0])->remove(word); +int Hunspell::remove(const std::string& word) { + return m_Impl->remove(word); +} + +int HunspellImpl::remove(const std::string& word) { + if (!m_HMgrs.empty()) + return m_HMgrs[0]->remove(word); return 0; } -const char* Hunspell::get_version() { +const char* Hunspell::get_version() const { + return m_Impl->get_version().c_str(); +} + +const std::string& Hunspell::get_version_cpp() const { + return m_Impl->get_version(); +} + +const std::string& HunspellImpl::get_version() const { return pAMgr->get_version(); } -struct cs_info* Hunspell::get_csconv() { +struct cs_info* HunspellImpl::get_csconv() { return csconv; } -void Hunspell::cat_result(std::string& result, char* st) { - if (st) { +struct cs_info* Hunspell::get_csconv() { + return m_Impl->get_csconv(); +} + +void HunspellImpl::cat_result(std::string& result, const std::string& st) { + if (!st.empty()) { if (!result.empty()) result.append("\n"); result.append(st); - free(st); } } -int Hunspell::analyze(char*** slst, const char* word) { - *slst = NULL; - if (!pSMgr || maxdic == 0) - return 0; - int nc = strlen(word); +std::vector Hunspell::analyze(const std::string& word) { + return m_Impl->analyze(word); +} + +std::vector HunspellImpl::analyze(const std::string& word) { + std::vector slst; + if (!pSMgr || m_HMgrs.empty()) + return slst; if (utf8) { - if (nc >= MAXWORDUTF8LEN) - return 0; + if (word.size() >= MAXWORDUTF8LEN) + return slst; } else { - if (nc >= MAXWORDLEN) - return 0; + if (word.size() >= MAXWORDLEN) + return slst; } int captype = NOCAP; size_t abbv = 0; @@ -1346,13 +1386,11 @@ int Hunspell::analyze(char*** slst, const char* word) { { std::string wspace; - int convstatus = rl ? rl->conv(word, wspace) : 0; - if (convstatus < 0) - return 0; - else if (convstatus > 0) - wl = cleanword2(scw, sunicw, wspace.c_str(), &nc, &captype, &abbv); + bool convstatus = rl ? rl->conv(word, wspace) : false; + if (convstatus) + wl = cleanword2(scw, sunicw, wspace, &captype, &abbv); else - wl = cleanword2(scw, sunicw, word, &nc, &captype, &abbv); + wl = cleanword2(scw, sunicw, word, &captype, &abbv); } if (wl == 0) { @@ -1362,18 +1400,18 @@ int Hunspell::analyze(char*** slst, const char* word) { scw.push_back('.'); abbv = 0; } else - return 0; + return slst; } std::string result; size_t n = 0; - size_t n2 = 0; - size_t n3 = 0; - // test numbers // LANG_hu section: set dash information for suggestions if (langnum == LANG_hu) { + size_t n2 = 0; + size_t n3 = 0; + while ((n < wl) && (((scw[n] <= '9') && (scw[n] >= '0')) || (((scw[n] == '.') || (scw[n] == ',')) && (n > 0)))) { n++; @@ -1387,22 +1425,20 @@ int Hunspell::analyze(char*** slst, const char* word) { } if ((n == wl) && (n3 > 0) && (n - n3 > 3)) - return 0; + return slst; if ((n == wl) || ((n > 0) && ((scw[n] == '%') || (scw[n] == '\xB0')) && - checkword(scw.c_str() + n, NULL, NULL))) { + checkword(scw.substr(n), NULL, NULL))) { result.append(scw); result.resize(n - 1); if (n == wl) - cat_result(result, pSMgr->suggest_morph(scw.c_str() + n - 1)); + cat_result(result, pSMgr->suggest_morph(scw.substr(n - 1))); else { - char sign = scw[n]; - scw[n] = '\0'; - cat_result(result, pSMgr->suggest_morph(scw.c_str() + n - 1)); + std::string chunk = scw.substr(n - 1, 1); + cat_result(result, pSMgr->suggest_morph(chunk)); result.push_back('+'); // XXX SPEC. MORPHCODE - scw[n] = sign; - cat_result(result, pSMgr->suggest_morph(scw.c_str() + n)); + cat_result(result, pSMgr->suggest_morph(scw.substr(n))); } - return line_tok(result.c_str(), slst, MSEP_REC); + return line_tok(result, MSEP_REC); } } // END OF LANG_hu section @@ -1411,52 +1447,52 @@ int Hunspell::analyze(char*** slst, const char* word) { case HUHCAP: case HUHINITCAP: case NOCAP: { - cat_result(result, pSMgr->suggest_morph(scw.c_str())); + cat_result(result, pSMgr->suggest_morph(scw)); if (abbv) { std::string u8buffer(scw); u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); } break; } case INITCAP: { - wl = mkallsmall2(scw, sunicw); + mkallsmall2(scw, sunicw); std::string u8buffer(scw); mkinitcap2(scw, sunicw); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); - cat_result(result, pSMgr->suggest_morph(scw.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); + cat_result(result, pSMgr->suggest_morph(scw)); if (abbv) { u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); u8buffer = scw; u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); } break; } case ALLCAP: { - cat_result(result, pSMgr->suggest_morph(scw.c_str())); + cat_result(result, pSMgr->suggest_morph(scw)); if (abbv) { std::string u8buffer(scw); u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); } mkallsmall2(scw, sunicw); std::string u8buffer(scw); mkinitcap2(scw, sunicw); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); - cat_result(result, pSMgr->suggest_morph(scw.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); + cat_result(result, pSMgr->suggest_morph(scw)); if (abbv) { u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); u8buffer = scw; u8buffer.push_back('.'); - cat_result(result, pSMgr->suggest_morph(u8buffer.c_str())); + cat_result(result, pSMgr->suggest_morph(u8buffer)); } break; } @@ -1470,62 +1506,58 @@ int Hunspell::analyze(char*** slst, const char* word) { else reverseword(result); } - return line_tok(result.c_str(), slst, MSEP_REC); + return line_tok(result, MSEP_REC); } // compound word with dash (HU) I18n // LANG_hu section: set dash information for suggestions size_t dash_pos = langnum == LANG_hu ? scw.find('-') : std::string::npos; - int nresult = 0; if (dash_pos != std::string::npos) { + int nresult = 0; + std::string part1 = scw.substr(0, dash_pos); std::string part2 = scw.substr(dash_pos+1); // examine 2 sides of the dash if (part2.empty()) { // base word ending with dash - if (spell(part1.c_str())) { - char* p = pSMgr->suggest_morph(part1.c_str()); - if (p) { - int ret = line_tok(p, slst, MSEP_REC); - free(p); - return ret; + if (spell(part1)) { + std::string p = pSMgr->suggest_morph(part1); + if (!p.empty()) { + slst = line_tok(p, MSEP_REC); + return slst; } } } else if (part2.size() == 1 && part2[0] == 'e') { // XXX (HU) -e hat. - if (spell(part1.c_str()) && (spell("-e"))) { - char* st = pSMgr->suggest_morph(part1.c_str()); - if (st) { + if (spell(part1) && (spell("-e"))) { + std::string st = pSMgr->suggest_morph(part1); + if (!st.empty()) { result.append(st); - free(st); } result.push_back('+'); // XXX spec. separator in MORPHCODE st = pSMgr->suggest_morph("-e"); - if (st) { + if (!st.empty()) { result.append(st); - free(st); } - return line_tok(result.c_str(), slst, MSEP_REC); + return line_tok(result, MSEP_REC); } } else { // first word ending with dash: word- XXX ??? part1.push_back(' '); - nresult = spell(part1.c_str()); + nresult = spell(part1); part1.erase(part1.size() - 1); - if (nresult && spell(part2.c_str()) && + if (nresult && spell(part2) && ((part2.size() > 1) || ((part2[0] > '0') && (part2[0] < '9')))) { - char* st = pSMgr->suggest_morph(part1.c_str()); - if (st) { + std::string st = pSMgr->suggest_morph(part1); + if (!st.empty()) { result.append(st); - free(st); result.push_back('+'); // XXX spec. separator in MORPHCODE } - st = pSMgr->suggest_morph(part2.c_str()); - if (st) { + st = pSMgr->suggest_morph(part2); + if (!st.empty()) { result.append(st); - free(st); } - return line_tok(result.c_str(), slst, MSEP_REC); + return line_tok(result, MSEP_REC); } } // affixed number in correct word @@ -1550,37 +1582,38 @@ int Hunspell::analyze(char*** slst, const char* word) { continue; } std::string chunk = scw.substr(dash_pos - n); - if (checkword(chunk.c_str(), NULL, NULL)) { + if (checkword(chunk, NULL, NULL)) { result.append(chunk); - char* st = pSMgr->suggest_morph(chunk.c_str()); - if (st) { + std::string st = pSMgr->suggest_morph(chunk); + if (!st.empty()) { result.append(st); - free(st); } - return line_tok(result.c_str(), slst, MSEP_REC); + return line_tok(result, MSEP_REC); } } } } - return 0; + return slst; } -int Hunspell::generate(char*** slst, const char* word, char** pl, int pln) { - *slst = NULL; - if (!pSMgr || !pln) - return 0; - char** pl2; - int pl2n = analyze(&pl2, word); +std::vector Hunspell::generate(const std::string& word, const std::vector& pl) { + return m_Impl->generate(word, pl); +} + +std::vector HunspellImpl::generate(const std::string& word, const std::vector& pl) { + std::vector slst; + if (!pSMgr || pl.empty()) + return slst; + std::vector pl2 = analyze(word); int captype = NOCAP; int abbv = 0; std::string cw; cleanword(cw, word, &captype, &abbv); std::string result; - for (int i = 0; i < pln; i++) { - cat_result(result, pSMgr->suggest_gen(pl2, pl2n, pl[i])); + for (size_t i = 0; i < pl.size(); ++i) { + cat_result(result, pSMgr->suggest_gen(pl2, pl[i])); } - freelist(&pl2, pl2n); if (!result.empty()) { // allcap @@ -1588,50 +1621,42 @@ int Hunspell::generate(char*** slst, const char* word, char** pl, int pln) { mkallcap(result); // line split - int linenum = line_tok(result.c_str(), slst, MSEP_REC); + slst = line_tok(result, MSEP_REC); // capitalize if (captype == INITCAP || captype == HUHINITCAP) { - for (int j = 0; j < linenum; j++) { - std::string form((*slst)[j]); - free((*slst)[j]); - mkinitcap(form); - (*slst)[j] = mystrdup(form.c_str()); + for (size_t j = 0; j < slst.size(); ++j) { + mkinitcap(slst[j]); } } // temporary filtering of prefix related errors (eg. // generate("undrinkable", "eats") --> "undrinkables" and "*undrinks") - - int r = 0; - for (int j = 0; j < linenum; j++) { - if (!spell((*slst)[j])) { - free((*slst)[j]); - (*slst)[j] = NULL; - } else { - if (r < j) - (*slst)[r] = (*slst)[j]; - r++; + std::vector::iterator it = slst.begin(); + while (it != slst.end()) { + if (!spell(*it)) { + it = slst.erase(it); + } else { + ++it; } } - if (r > 0) - return r; - free(*slst); - *slst = NULL; } - return 0; + return slst; } -int Hunspell::generate(char*** slst, const char* word, const char* pattern) { - char** pl; - int pln = analyze(&pl, pattern); - int n = generate(slst, word, pl, pln); - freelist(&pl, pln); - return uniqlist(*slst, n); +std::vector Hunspell::generate(const std::string& word, const std::string& pattern) { + return m_Impl->generate(word, pattern); +} + +std::vector HunspellImpl::generate(const std::string& word, const std::string& pattern) { + std::vector pl = analyze(pattern); + std::vector slst = generate(word, pl); + uniqlist(slst); + return slst; } // minimal XML parser functions -std::string Hunspell::get_xml_par(const char* par) { +std::string HunspellImpl::get_xml_par(const char* par) { std::string dest; if (!par) return dest; @@ -1649,16 +1674,38 @@ std::string Hunspell::get_xml_par(const char* par) { } int Hunspell::get_langnum() const { + return m_Impl->get_langnum(); +} + +int HunspellImpl::get_langnum() const { return langnum; } +bool Hunspell::input_conv(const std::string& word, std::string& dest) { + return m_Impl->input_conv(word, dest); +} + int Hunspell::input_conv(const char* word, char* dest, size_t destsize) { - RepList* rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; - return (rl && rl->conv(word, dest, destsize) > 0); + std::string d; + bool ret = input_conv(word, d); + if (ret && d.size() < destsize) { + strncpy(dest, d.c_str(), destsize); + return 1; + } + return 0; +} + +bool HunspellImpl::input_conv(const std::string& word, std::string& dest) { + RepList* rl = pAMgr ? pAMgr->get_iconvtable() : NULL; + if (rl) { + return rl->conv(word, dest); + } + dest.assign(word); + return false; } // return the beginning of the element (attr == NULL) or the attribute -const char* Hunspell::get_xml_pos(const char* s, const char* attr) { +const char* HunspellImpl::get_xml_pos(const char* s, const char* attr) { const char* end = strchr(s, '>'); const char* p = s; if (attr == NULL) @@ -1671,7 +1718,7 @@ const char* Hunspell::get_xml_pos(const char* s, const char* attr) { return p + strlen(attr); } -int Hunspell::check_xml_par(const char* q, +int HunspellImpl::check_xml_par(const char* q, const char* attr, const char* value) { std::string cw = get_xml_par(get_xml_pos(q, attr)); @@ -1680,53 +1727,48 @@ int Hunspell::check_xml_par(const char* q, return 0; } -int Hunspell::get_xml_list(char*** slst, const char* list, const char* tag) { +std::vector HunspellImpl::get_xml_list(const char* list, const char* tag) { + std::vector slst; if (!list) - return 0; - int n = 0; - const char* p; - for (p = list; ((p = strstr(p, tag)) != NULL); p++) - n++; - if (n == 0) - return 0; - *slst = (char**)malloc(sizeof(char*) * n); - if (!*slst) - return 0; - for (p = list, n = 0; ((p = strstr(p, tag)) != NULL); p++, n++) { + return slst; + const char* p = list; + for (size_t n = 0; ((p = strstr(p, tag)) != NULL); ++p, ++n) { std::string cw = get_xml_par(p + strlen(tag) - 1); if (cw.empty()) { break; } - (*slst)[n] = mystrdup(cw.c_str()); + slst.push_back(cw); } - return n; + return slst; } -int Hunspell::spellml(char*** slst, const char* word) { +std::vector HunspellImpl::spellml(const std::string& in_word) { + std::vector slst; + + const char* word = in_word.c_str(); + const char* q = strstr(word, "'); if (!q2) - return 0; // bad XML input + return slst; // bad XML input q2 = strstr(q2, "')); if (!cw.empty()) - n = analyze(slst, cw.c_str()); - if (n == 0) - return 0; + slst = analyze(cw); + if (slst.empty()) + return slst; // convert the result to ana1ana2 format std::string r; r.append(""); - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < slst.size(); ++i) { r.append(""); - std::string entry((*slst)[i]); - free((*slst)[i]); + std::string entry(slst[i]); mystrrep(entry, "\t", " "); mystrrep(entry, "&", "&"); mystrrep(entry, "<", "<"); @@ -1735,36 +1777,101 @@ int Hunspell::spellml(char*** slst, const char* word) { r.append(""); } r.append(""); - (*slst)[0] = mystrdup(r.c_str()); - return 1; + slst.clear(); + slst.push_back(r); + return slst; } else if (check_xml_par(q, "type=", "stem")) { std::string cw = get_xml_par(strchr(q2, '>')); if (!cw.empty()) - return stem(slst, cw.c_str()); + return stem(cw); } else if (check_xml_par(q, "type=", "generate")) { std::string cw = get_xml_par(strchr(q2, '>')); if (cw.empty()) - return 0; + return slst; const char* q3 = strstr(q2 + 1, "')); if (!cw2.empty()) { - return generate(slst, cw.c_str(), cw2.c_str()); + return generate(cw, cw2); } } else { if ((q2 = strstr(q2 + 1, "'), ""); - if (n != 0) { - int n2 = generate(slst, cw.c_str(), slst2, n); - freelist(&slst2, n); - return uniqlist(*slst, n2); + std::vector slst2 = get_xml_list(strchr(q2, '>'), ""); + if (!slst2.empty()) { + slst = generate(cw, slst2); + uniqlist(slst); + return slst; } - freelist(&slst2, n); } } } - return 0; + return slst; +} + +int Hunspell::spell(const char* word, int* info, char** root) { + std::string sroot; + bool ret = m_Impl->spell(word, info, root ? &sroot : NULL); + if (root) { + if (sroot.empty()) { + *root = NULL; + } else { + *root = mystrdup(sroot.c_str()); + } + } + return ret; +} + +namespace { + int munge_vector(char*** slst, const std::vector& items) { + if (items.empty()) { + *slst = NULL; + return 0; + } else { + *slst = (char**)malloc(sizeof(char*) * items.size()); + if (!*slst) + return 0; + for (size_t i = 0; i < items.size(); ++i) + (*slst)[i] = mystrdup(items[i].c_str()); + } + return items.size(); + } +} + +void Hunspell::free_list(char*** slst, int n) { + Hunspell_free_list((Hunhandle*)(this), slst, n); +} + +int Hunspell::suggest(char*** slst, const char* word) { + return Hunspell_suggest((Hunhandle*)(this), slst, word); +} + +int Hunspell::suffix_suggest(char*** slst, const char* root_word) { + std::vector stems = m_Impl->suffix_suggest(root_word); + return munge_vector(slst, stems); +} + +char* Hunspell::get_dic_encoding() { + return &(m_Impl->dic_encoding_vec[0]); +} + +int Hunspell::stem(char*** slst, char** desc, int n) { + return Hunspell_stem2((Hunhandle*)(this), slst, desc, n); +} + +int Hunspell::stem(char*** slst, const char* word) { + return Hunspell_stem((Hunhandle*)(this), slst, word); +} + +int Hunspell::analyze(char*** slst, const char* word) { + return Hunspell_analyze((Hunhandle*)(this), slst, word); +} + +int Hunspell::generate(char*** slst, const char* word, char** pl, int pln) { + return Hunspell_generate2((Hunhandle*)(this), slst, word, pl, pln); +} + +int Hunspell::generate(char*** slst, const char* word, const char* pattern) { + return Hunspell_generate((Hunhandle*)(this), slst, word, pattern); } Hunhandle* Hunspell_create(const char* affpath, const char* dpath) { @@ -1774,46 +1881,56 @@ Hunhandle* Hunspell_create(const char* affpath, const char* dpath) { Hunhandle* Hunspell_create_key(const char* affpath, const char* dpath, const char* key) { - return (Hunhandle*)(new Hunspell(affpath, dpath, key)); + return reinterpret_cast(new Hunspell(affpath, dpath, key)); } void Hunspell_destroy(Hunhandle* pHunspell) { - delete (Hunspell*)(pHunspell); + delete reinterpret_cast(pHunspell); } int Hunspell_add_dic(Hunhandle* pHunspell, const char* dpath) { - return ((Hunspell*)pHunspell)->add_dic(dpath); + return reinterpret_cast(pHunspell)->add_dic(dpath); } int Hunspell_spell(Hunhandle* pHunspell, const char* word) { - return ((Hunspell*)pHunspell)->spell(word); + return reinterpret_cast(pHunspell)->spell(std::string(word)); } char* Hunspell_get_dic_encoding(Hunhandle* pHunspell) { - return ((Hunspell*)pHunspell)->get_dic_encoding(); + return reinterpret_cast(pHunspell)->get_dic_encoding(); } int Hunspell_suggest(Hunhandle* pHunspell, char*** slst, const char* word) { - return ((Hunspell*)pHunspell)->suggest(slst, word); + std::vector suggests = reinterpret_cast(pHunspell)->suggest(word); + return munge_vector(slst, suggests); } int Hunspell_analyze(Hunhandle* pHunspell, char*** slst, const char* word) { - return ((Hunspell*)pHunspell)->analyze(slst, word); + std::vector stems = reinterpret_cast(pHunspell)->analyze(word); + return munge_vector(slst, stems); } int Hunspell_stem(Hunhandle* pHunspell, char*** slst, const char* word) { - return ((Hunspell*)pHunspell)->stem(slst, word); + + std::vector stems = reinterpret_cast(pHunspell)->stem(word); + return munge_vector(slst, stems); } int Hunspell_stem2(Hunhandle* pHunspell, char*** slst, char** desc, int n) { - return ((Hunspell*)pHunspell)->stem(slst, desc, n); + std::vector morph; + for (int i = 0; i < n; ++i) + morph.push_back(desc[i]); + + std::vector stems = reinterpret_cast(pHunspell)->stem(morph); + return munge_vector(slst, stems); } int Hunspell_generate(Hunhandle* pHunspell, char*** slst, const char* word, - const char* word2) { - return ((Hunspell*)pHunspell)->generate(slst, word, word2); + const char* pattern) { + std::vector stems = reinterpret_cast(pHunspell)->generate(word, pattern); + return munge_vector(slst, stems); } int Hunspell_generate2(Hunhandle* pHunspell, @@ -1821,7 +1938,12 @@ int Hunspell_generate2(Hunhandle* pHunspell, const char* word, char** desc, int n) { - return ((Hunspell*)pHunspell)->generate(slst, word, desc, n); + std::vector morph; + for (int i = 0; i < n; ++i) + morph.push_back(desc[i]); + + std::vector stems = reinterpret_cast(pHunspell)->generate(word, morph); + return munge_vector(slst, stems); } /* functions for run-time modification of the dictionary */ @@ -1829,7 +1951,7 @@ int Hunspell_generate2(Hunhandle* pHunspell, /* add word to the run-time dictionary */ int Hunspell_add(Hunhandle* pHunspell, const char* word) { - return ((Hunspell*)pHunspell)->add(word); + return reinterpret_cast(pHunspell)->add(word); } /* add word to the run-time dictionary with affix flags of @@ -1840,25 +1962,35 @@ int Hunspell_add(Hunhandle* pHunspell, const char* word) { int Hunspell_add_with_affix(Hunhandle* pHunspell, const char* word, const char* example) { - return ((Hunspell*)pHunspell)->add_with_affix(word, example); + return reinterpret_cast(pHunspell)->add_with_affix(word, example); } /* remove word from the run-time dictionary */ int Hunspell_remove(Hunhandle* pHunspell, const char* word) { - return ((Hunspell*)pHunspell)->remove(word); + return reinterpret_cast(pHunspell)->remove(word); } -void Hunspell_free_list(Hunhandle*, char*** slst, int n) { - freelist(slst, n); +void Hunspell_free_list(Hunhandle*, char*** list, int n) { + if (list && *list) { + for (int i = 0; i < n; i++) + free((*list)[i]); + free(*list); + *list = NULL; + } } -int Hunspell::suffix_suggest(char*** slst, const char* root_word) { +std::vector Hunspell::suffix_suggest(const std::string& root_word) { + return m_Impl->suffix_suggest(root_word); +} + +std::vector HunspellImpl::suffix_suggest(const std::string& root_word) { + std::vector slst; struct hentry* he = NULL; int len; std::string w2; const char* word; - char* ignoredchars = pAMgr->get_ignore(); + const char* ignoredchars = pAMgr->get_ignore(); if (ignoredchars != NULL) { w2.assign(root_word); if (utf8) { @@ -1870,26 +2002,18 @@ int Hunspell::suffix_suggest(char*** slst, const char* root_word) { } word = w2.c_str(); } else - word = root_word; + word = root_word.c_str(); len = strlen(word); if (!len) - return 0; + return slst; - char** wlst = (char**)malloc(MAXSUGGESTION * sizeof(char*)); - if (wlst == NULL) - return -1; - *slst = wlst; - for (int i = 0; i < MAXSUGGESTION; i++) { - wlst[i] = NULL; - } - - for (int i = 0; (i < maxdic) && !he; i++) { - he = (pHMgr[i])->lookup(word); + for (size_t i = 0; (i < m_HMgrs.size()) && !he; ++i) { + he = m_HMgrs[i]->lookup(word); } if (he) { - return pAMgr->get_suffix_words(he->astr, he->alen, root_word, *slst); + slst = pAMgr->get_suffix_words(he->astr, he->alen, root_word.c_str()); } - return 0; + return slst; } diff --git a/src/spelling/hunspell/hunspell.h b/src/spelling/hunspell/hunspell.h index 726bbe20..3aca30ab 100644 --- a/src/spelling/hunspell/hunspell.h +++ b/src/spelling/hunspell/hunspell.h @@ -38,8 +38,8 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _MYSPELLMGR_H_ -#define _MYSPELLMGR_H_ +#ifndef MYSPELLMGR_H_ +#define MYSPELLMGR_H_ #include "hunvisapi.h" diff --git a/src/spelling/hunspell/hunspell.hxx b/src/spelling/hunspell/hunspell.hxx index 40147530..48dd278f 100644 --- a/src/spelling/hunspell/hunspell.hxx +++ b/src/spelling/hunspell/hunspell.hxx @@ -70,26 +70,30 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ +#ifndef MYSPELLMGR_HXX_ +#define MYSPELLMGR_HXX_ #include "hunvisapi.h" - -#include "hashmgr.hxx" -#include "affixmgr.hxx" -#include "suggestmgr.hxx" -#include "langnum.hxx" +#include "w_char.hxx" +#include "atypes.hxx" +#include #include #define SPELL_XML "" -#define MAXDIC 20 #define MAXSUGGESTION 15 #define MAXSHARPS 5 +#define MAXWORDLEN 176 + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define H_DEPRECATED __attribute__((__deprecated__)) +#elif defined(_MSC_VER) && (_MSC_VER >= 1300) +# define H_DEPRECATED __declspec(deprecated) +#else +# define H_DEPRECATED +#endif -#define HUNSPELL_OK (1 << 0) -#define HUNSPELL_OK_WARN (1 << 1) - -#ifndef _MYSPELLMGR_HXX_ -#define _MYSPELLMGR_HXX_ +class HunspellImpl; class LIBHUNSPELL_DLL_EXPORTED Hunspell { private: @@ -97,17 +101,7 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { Hunspell& operator=(const Hunspell&); private: - AffixMgr* pAMgr; - HashMgr* pHMgr[MAXDIC]; - int maxdic; - SuggestMgr* pSMgr; - char* affixpath; - char* encoding; - struct cs_info* csconv; - int langnum; - int utf8; - int complexprefixes; - char** wordbreak; + HunspellImpl* m_Impl; public: /* Hunspell(aff, dic) - constructor of Hunspell class @@ -118,7 +112,6 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { * long path names (without the long path prefix Hunspell will use fopen() * with system-dependent character encoding instead of _wfopen()). */ - Hunspell(const char* affpath, const char* dpath, const char* key = NULL); ~Hunspell(); @@ -126,7 +119,7 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { int add_dic(const char* dpath, const char* key = NULL); /* spell(word) - spellcheck word - * output: 0 = bad word, not 0 = good word + * output: false = bad word, true = good word * * plus output: * info: information bit array, fields: @@ -134,8 +127,8 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { * SPELL_FORBIDDEN = an explicit forbidden word * root: root (stem), when input is a word with affix(es) */ - - int spell(const char* word, int* info = NULL, char** root = NULL); + bool spell(const std::string& word, int* info = NULL, std::string* root = NULL); + H_DEPRECATED int spell(const char* word, int* info = NULL, char** root = NULL); /* suggest(suggestions, word) - search suggestions * input: pointer to an array of strings pointer and the (bad) word @@ -144,8 +137,8 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { * a newly allocated array of strings (*slts will be NULL when number * of suggestion equals 0.) */ - - int suggest(char*** slst, const char* word); + std::vector suggest(const std::string& word); + H_DEPRECATED int suggest(char*** slst, const char* word); /* Suggest words from suffix rules * suffix_suggest(suggestions, root_word) @@ -155,36 +148,37 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { * a newly allocated array of strings (*slts will be NULL when number * of suggestion equals 0.) */ - int suffix_suggest(char*** slst, const char* root_word); + std::vector suffix_suggest(const std::string& root_word); + H_DEPRECATED int suffix_suggest(char*** slst, const char* root_word); /* deallocate suggestion lists */ + H_DEPRECATED void free_list(char*** slst, int n); - void free_list(char*** slst, int n); - + const std::string& get_dict_encoding() const; char* get_dic_encoding(); /* morphological functions */ /* analyze(result, word) - morphological analysis of the word */ + std::vector analyze(const std::string& word); + H_DEPRECATED int analyze(char*** slst, const char* word); - int analyze(char*** slst, const char* word); + /* stem(word) - stemmer function */ + std::vector stem(const std::string& word); + H_DEPRECATED int stem(char*** slst, const char* word); - /* stem(result, word) - stemmer function */ - - int stem(char*** slst, const char* word); - - /* stem(result, analysis, n) - get stems from a morph. analysis + /* stem(analysis, n) - get stems from a morph. analysis * example: * char ** result, result2; * int n1 = analyze(&result, "words"); * int n2 = stem(&result2, result, n1); */ - - int stem(char*** slst, char** morph, int n); + std::vector stem(const std::vector& morph); + H_DEPRECATED int stem(char*** slst, char** morph, int n); /* generate(result, word, word2) - morphological generation by example(s) */ - - int generate(char*** slst, const char* word, const char* word2); + std::vector generate(const std::string& word, const std::string& word2); + H_DEPRECATED int generate(char*** slst, const char* word, const char* word2); /* generate(result, word, desc, n) - generation by morph. description(s) * example: @@ -193,66 +187,43 @@ class LIBHUNSPELL_DLL_EXPORTED Hunspell { * int n = generate(&result, "word", &affix, 1); * for (int i = 0; i < n; i++) printf("%s\n", result[i]); */ - - int generate(char*** slst, const char* word, char** desc, int n); + std::vector generate(const std::string& word, const std::vector& pl); + H_DEPRECATED int generate(char*** slst, const char* word, char** desc, int n); /* functions for run-time modification of the dictionary */ /* add word to the run-time dictionary */ - int add(const char* word); + int add(const std::string& word); /* add word to the run-time dictionary with affix flags of * the example (a dictionary word): Hunspell will recognize * affixed forms of the new word, too. */ - int add_with_affix(const char* word, const char* example); + int add_with_affix(const std::string& word, const std::string& example); /* remove word from the run-time dictionary */ - int remove(const char* word); + int remove(const std::string& word); /* other */ /* get extra word characters definied in affix file for tokenization */ - const char* get_wordchars(); - const std::vector& get_wordchars_utf16(); + const char* get_wordchars() const; + const std::string& get_wordchars_cpp() const; + const std::vector& get_wordchars_utf16() const; struct cs_info* get_csconv(); - const char* get_version(); + + const char* get_version() const; + const std::string& get_version_cpp() const; int get_langnum() const; /* need for putdic */ - int input_conv(const char* word, char* dest, size_t destsize); - - private: - void cleanword(std::string& dest, const char*, int* pcaptype, int* pabbrev); - size_t cleanword2(std::string& dest, - std::vector& dest_u, - const char*, - int* w_len, - int* pcaptype, - size_t* pabbrev); - void mkinitcap(std::string& u8); - int mkinitcap2(std::string& u8, std::vector& u16); - int mkinitsmall2(std::string& u8, std::vector& u16); - void mkallcap(std::string& u8); - int mkallsmall2(std::string& u8, std::vector& u16); - struct hentry* checkword(const char*, int* info, char** root); - std::string sharps_u8_l1(const std::string& source); - hentry* - spellsharps(std::string& base, size_t start_pos, int, int, int* info, char** root); - int is_keepcase(const hentry* rv); - int insert_sug(char*** slst, const char* word, int ns); - void cat_result(std::string& result, char* st); - char* stem_description(const char* desc); - int spellml(char*** slst, const char* word); - std::string get_xml_par(const char* par); - const char* get_xml_pos(const char* s, const char* attr); - int get_xml_list(char*** slst, const char* list, const char* tag); - int check_xml_par(const char* q, const char* attr, const char* value); + bool input_conv(const std::string& word, std::string& dest); + H_DEPRECATED int input_conv(const char* word, char* dest, size_t destsize); }; #endif diff --git a/src/spelling/hunspell/hunvisapi.h b/src/spelling/hunspell/hunvisapi.h index 503c20f6..eb2b3480 100644 --- a/src/spelling/hunspell/hunvisapi.h +++ b/src/spelling/hunspell/hunvisapi.h @@ -1,5 +1,5 @@ -#ifndef _HUNSPELL_VISIBILITY_H_ -#define _HUNSPELL_VISIBILITY_H_ +#ifndef HUNSPELL_VISIBILITY_H_ +#define HUNSPELL_VISIBILITY_H_ #if defined(HUNSPELL_STATIC) # define LIBHUNSPELL_DLL_EXPORTED diff --git a/src/spelling/hunspell/hunvisapi.h.in b/src/spelling/hunspell/hunvisapi.h.in index abf025ae..a1020c80 100644 --- a/src/spelling/hunspell/hunvisapi.h.in +++ b/src/spelling/hunspell/hunvisapi.h.in @@ -1,5 +1,5 @@ -#ifndef _HUNSPELL_VISIBILITY_H_ -#define _HUNSPELL_VISIBILITY_H_ +#ifndef HUNSPELL_VISIBILITY_H_ +#define HUNSPELL_VISIBILITY_H_ #if defined(HUNSPELL_STATIC) # define LIBHUNSPELL_DLL_EXPORTED diff --git a/src/spelling/hunspell/hunzip.cxx b/src/spelling/hunspell/hunzip.cxx index b2788a10..b96d06aa 100644 --- a/src/spelling/hunspell/hunzip.cxx +++ b/src/spelling/hunspell/hunzip.cxx @@ -59,7 +59,7 @@ int Hunzip::fail(const char* err, const char* par) { } Hunzip::Hunzip(const char* file, const char* key) - : fin(NULL), bufsiz(0), lastbit(0), inc(0), inbits(0), outc(0), dec(NULL) { + : bufsiz(0), lastbit(0), inc(0), inbits(0), outc(0) { in[0] = out[0] = line[0] = '\0'; filename = mystrdup(file); if (getcode(key) == -1) @@ -70,19 +70,19 @@ Hunzip::Hunzip(const char* file, const char* key) int Hunzip::getcode(const char* key) { unsigned char c[2]; - int i, j, n, p; + int i, j, n; int allocatedbit = BASEBITREC; const char* enc = key; if (!filename) return -1; - fin = myfopen(filename, "rb"); - if (!fin) + myopen(fin, filename, std::ios_base::in | std::ios_base::binary); + if (!fin.is_open()) return -1; // read magic number - if ((fread(in, 1, 3, fin) < MAGICLEN) || + if (!fin.read(in, 3) || !(strncmp(MAGIC, in, MAGICLEN) == 0 || strncmp(MAGIC_ENCRYPT, in, MAGICLEN) == 0)) { return fail(MSG_FORMAT, filename); @@ -93,7 +93,7 @@ int Hunzip::getcode(const char* key) { unsigned char cs; if (!key) return fail(MSG_KEY, filename); - if (fread(&c, 1, 1, fin) < 1) + if (!fin.read(reinterpret_cast(c), 1)) return fail(MSG_FORMAT, filename); for (cs = 0; *enc; enc++) cs ^= *enc; @@ -104,7 +104,7 @@ int Hunzip::getcode(const char* key) { key = NULL; // read record count - if (fread(&c, 1, 2, fin) < 2) + if (!fin.read(reinterpret_cast(c), 2)) return fail(MSG_FORMAT, filename); if (key) { @@ -115,16 +115,14 @@ int Hunzip::getcode(const char* key) { } n = ((int)c[0] << 8) + c[1]; - dec = (struct bit*)malloc(BASEBITREC * sizeof(struct bit)); - if (!dec) - return fail(MSG_MEMORY, filename); + dec.resize(BASEBITREC); dec[0].v[0] = 0; dec[0].v[1] = 0; // read codes for (i = 0; i < n; i++) { unsigned char l; - if (fread(c, 1, 2, fin) < 2) + if (!fin.read(reinterpret_cast(c), 2)) return fail(MSG_FORMAT, filename); if (key) { if (*(++enc) == '\0') @@ -134,14 +132,14 @@ int Hunzip::getcode(const char* key) { enc = key; c[1] ^= *enc; } - if (fread(&l, 1, 1, fin) < 1) + if (!fin.read(reinterpret_cast(&l), 1)) return fail(MSG_FORMAT, filename); if (key) { if (*(++enc) == '\0') enc = key; l ^= *enc; } - if (fread(in, 1, l / 8 + 1, fin) < (size_t)l / 8 + 1) + if (!fin.read(in, l / 8 + 1)) return fail(MSG_FORMAT, filename); if (key) for (j = 0; j <= l / 8; j++) { @@ -149,7 +147,7 @@ int Hunzip::getcode(const char* key) { enc = key; in[j] ^= *enc; } - p = 0; + int p = 0; for (j = 0; j < l; j++) { int b = (in[j / 8] & (1 << (7 - (j % 8)))) ? 1 : 0; int oldp = p; @@ -158,7 +156,7 @@ int Hunzip::getcode(const char* key) { lastbit++; if (lastbit == allocatedbit) { allocatedbit += BASEBITREC; - dec = (struct bit*)realloc(dec, allocatedbit * sizeof(struct bit)); + dec.resize(allocatedbit); } dec[lastbit].v[0] = 0; dec[lastbit].v[1] = 0; @@ -173,10 +171,6 @@ int Hunzip::getcode(const char* key) { } Hunzip::~Hunzip() { - if (dec) - free(dec); - if (fin) - fclose(fin); if (filename) free(filename); } @@ -185,16 +179,17 @@ int Hunzip::getbuf() { int p = 0; int o = 0; do { - if (inc == 0) - inbits = fread(in, 1, BUFSIZE, fin) * 8; + if (inc == 0) { + fin.read(in, BUFSIZE); + inbits = fin.gcount() * 8; + } for (; inc < inbits; inc++) { int b = (in[inc / 8] & (1 << (7 - (inc % 8)))) ? 1 : 0; int oldp = p; p = dec[p].v[b]; if (p == 0) { if (oldp == lastbit) { - fclose(fin); - fin = NULL; + fin.close(); // add last odd byte if (dec[lastbit].c[0]) out[o++] = dec[lastbit].c[1]; @@ -212,11 +207,11 @@ int Hunzip::getbuf() { return fail(MSG_FORMAT, filename); } -const char* Hunzip::getline() { +bool Hunzip::getline(std::string& dest) { char linebuf[BUFSIZE]; int l = 0, eol = 0, left = 0, right = 0; if (bufsiz == -1) - return NULL; + return false; while (l < bufsiz && !eol) { linebuf[l++] = out[outc]; switch (out[outc]) { @@ -251,7 +246,7 @@ const char* Hunzip::getline() { } if (++outc == bufsiz) { outc = 0; - bufsiz = fin ? getbuf() : -1; + bufsiz = fin.is_open() ? getbuf() : -1; } } if (right) @@ -259,5 +254,6 @@ const char* Hunzip::getline() { else linebuf[l] = '\0'; strcpy(line + left, linebuf); - return line; + dest.assign(line); + return true; } diff --git a/src/spelling/hunspell/hunzip.hxx b/src/spelling/hunspell/hunzip.hxx index 5082addd..f4b02bff 100644 --- a/src/spelling/hunspell/hunzip.hxx +++ b/src/spelling/hunspell/hunzip.hxx @@ -41,12 +41,14 @@ /* hunzip: file decompression for sorted dictionaries with optional encryption, * algorithm: prefix-suffix encoding and 16-bit Huffman encoding */ -#ifndef _HUNZIP_HXX_ -#define _HUNZIP_HXX_ +#ifndef HUNZIP_HXX_ +#define HUNZIP_HXX_ #include "hunvisapi.h" #include +#include +#include #define BUFSIZE 65536 #define HZIP_EXTENSION ".hz" @@ -68,9 +70,9 @@ class LIBHUNSPELL_DLL_EXPORTED Hunzip { protected: char* filename; - FILE* fin; + std::ifstream fin; int bufsiz, lastbit, inc, inbits, outc; - struct bit* dec; // code table + std::vector dec; // code table char in[BUFSIZE]; // input buffer char out[BUFSIZE + 1]; // Huffman-decoded buffer char line[BUFSIZE + 50]; // decoded line @@ -81,7 +83,8 @@ class LIBHUNSPELL_DLL_EXPORTED Hunzip { public: Hunzip(const char* filename, const char* key = NULL); ~Hunzip(); - const char* getline(); + bool is_open() { return fin.is_open(); } + bool getline(std::string& dest); }; #endif diff --git a/src/spelling/hunspell/langnum.hxx b/src/spelling/hunspell/langnum.hxx index af5c86e4..ef53f4ee 100644 --- a/src/spelling/hunspell/langnum.hxx +++ b/src/spelling/hunspell/langnum.hxx @@ -38,12 +38,12 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _LANGNUM_HXX_ -#define _LANGNUM_HXX_ +#ifndef LANGNUM_HXX_ +#define LANGNUM_HXX_ /* language numbers for language specific codes - see http://l10n.openoffice.org/languages.html + see https://wiki.openoffice.org/w/index.php?title=Languages&oldid=230199 */ enum { diff --git a/src/spelling/hunspell/phonet.cxx b/src/spelling/hunspell/phonet.cxx index 17350e74..b97bbe88 100644 --- a/src/spelling/hunspell/phonet.cxx +++ b/src/spelling/hunspell/phonet.cxx @@ -36,15 +36,13 @@ #include "phonet.hxx" void init_phonet_hash(phonetable& parms) { - int i, k; - - for (i = 0; i < HASHSIZE; i++) { + for (int i = 0; i < HASHSIZE; i++) { parms.hash[i] = -1; } - for (i = 0; parms.rules[i][0] != '\0'; i += 2) { + for (int i = 0; parms.rules[i][0] != '\0'; i += 2) { /** set hash value **/ - k = (unsigned char)parms.rules[i][0]; + int k = (unsigned char)parms.rules[i][0]; if (parms.hash[k] < 0) { parms.hash[k] = i; @@ -73,9 +71,8 @@ static int myisalpha(char ch) { std::string phonet(const std::string& inword, phonetable& parms) { int i, k = 0, p, z; - int k0, n0, p0 = -333, z0; + int k0, n0, p0 = -333; char c; - const char* s; typedef unsigned char uchar; size_t len = inword.size(); @@ -90,15 +87,15 @@ std::string phonet(const std::string& inword, phonetable& parms) { i = z = 0; while ((c = word[i]) != '\0') { int n = parms.hash[(uchar)c]; - z0 = 0; + int z0 = 0; - if (n >= 0) { + if (n >= 0 && !parms.rules[n].empty()) { /** check all rules for the same letter **/ while (parms.rules[n][0] == c) { /** check whole string **/ k = 1; /** number of found letters **/ p = 5; /** default priority **/ - s = parms.rules[n]; + const char*s = parms.rules[n].c_str(); s++; /** important for (see below) "*(s-1)" **/ while (*s != '\0' && word[i + k] == *s && !isdigit((unsigned char)*s) && @@ -142,13 +139,13 @@ std::string phonet(const std::string& inword, phonetable& parms) { n0 = parms.hash[(uchar)c0]; // if (parms.followup && k > 1 && n0 >= 0 - if (k > 1 && n0 >= 0 && p0 != (int)'-' && word[i + k] != '\0') { + if (k > 1 && n0 >= 0 && p0 != (int)'-' && word[i + k] != '\0' && !parms.rules[n0].empty()) { /** test follow-up rule for "word[i+k]" **/ while (parms.rules[n0][0] == c0) { /** check whole string **/ k0 = k; p0 = 5; - s = parms.rules[n0]; + s = parms.rules[n0].c_str(); s++; while (*s != '\0' && word[i + k0] == *s && !isdigit((unsigned char)*s) && @@ -206,9 +203,9 @@ std::string phonet(const std::string& inword, phonetable& parms) { } /** end of follow-up stuff **/ /** replace string **/ - s = parms.rules[n + 1]; - p0 = (parms.rules[n][0] != '\0' && - strchr(parms.rules[n] + 1, '<') != NULL) + s = parms.rules[n + 1].c_str(); + p0 = (!parms.rules[n].empty() && + strchr(parms.rules[n].c_str() + 1, '<') != NULL) ? 1 : 0; if (p0 == 1 && z == 0) { @@ -241,8 +238,8 @@ std::string phonet(const std::string& inword, phonetable& parms) { } /** new "actual letter" **/ c = *s; - if (parms.rules[n][0] != '\0' && - strstr(parms.rules[n] + 1, "^^") != NULL) { + if (!parms.rules[n].empty() && + strstr(parms.rules[n].c_str() + 1, "^^") != NULL) { if (c != '\0') { target.push_back(c); } diff --git a/src/spelling/hunspell/phonet.hxx b/src/spelling/hunspell/phonet.hxx index eb9fd0c6..2d58b3ba 100644 --- a/src/spelling/hunspell/phonet.hxx +++ b/src/spelling/hunspell/phonet.hxx @@ -27,8 +27,8 @@ Porting from Aspell to Hunspell using C-like structs */ -#ifndef __PHONETHXX__ -#define __PHONETHXX__ +#ifndef PHONET_HXX_ +#define PHONET_HXX_ #define HASHSIZE 256 #define MAXPHONETLEN 256 @@ -38,9 +38,7 @@ struct phonetable { char utf8; - cs_info* lang; - int num; - char** rules; + std::vector rules; int hash[HASHSIZE]; }; diff --git a/src/spelling/hunspell/replist.cxx b/src/spelling/hunspell/replist.cxx index b3e6b37d..89d4caa7 100644 --- a/src/spelling/hunspell/replist.cxx +++ b/src/spelling/hunspell/replist.cxx @@ -90,104 +90,122 @@ RepList::RepList(int n) { RepList::~RepList() { for (int i = 0; i < pos; i++) { - free(dat[i]->pattern); - free(dat[i]->pattern2); - free(dat[i]); + delete dat[i]; } free(dat); } -int RepList::get_pos() { - return pos; -} - replentry* RepList::item(int n) { return dat[n]; } -int RepList::near(const char* word) { +int RepList::find(const char* word) { int p1 = 0; - int p2 = pos; - while ((p2 - p1) > 1) { + int p2 = pos - 1; + while (p1 <= p2) { int m = (p1 + p2) / 2; - int c = strcmp(word, dat[m]->pattern); - if (c <= 0) { - if (c < 0) - p2 = m; - else - p1 = p2 = m; - } else - p1 = m; + int c = strncmp(word, dat[m]->pattern.c_str(), dat[m]->pattern.size()); + if (c < 0) + p2 = m - 1; + else if (c > 0) + p1 = m + 1; + else { // scan back for a longer match + for (p1 = m - 1; p1 >= 0; --p1) + if (!strncmp(word, dat[p1]->pattern.c_str(), dat[p1]->pattern.size())) + m = p1; + else if (dat[p1]->pattern.size() < dat[m]->pattern.size()) + break; + return m; + } } - return p1; + return -1; } -int RepList::match(const char* word, int n) { - if (strncmp(word, dat[n]->pattern, strlen(dat[n]->pattern)) == 0) - return strlen(dat[n]->pattern); - return 0; +std::string RepList::replace(const char* word, int ind, bool atstart) { + int type = atstart ? 1 : 0; + if (ind < 0) + return std::string(); + if (strlen(word) == dat[ind]->pattern.size()) + type = atstart ? 3 : 2; + while (type && dat[ind]->outstrings[type].empty()) + type = (type == 2 && !atstart) ? 0 : type - 1; + return dat[ind]->outstrings[type]; } -int RepList::add(char* pat1, char* pat2) { - if (pos >= size || pat1 == NULL || pat2 == NULL) +int RepList::add(const std::string& in_pat1, const std::string& pat2) { + if (pos >= size || in_pat1.empty() || pat2.empty()) { return 1; - replentry* r = (replentry*)malloc(sizeof(replentry)); + } + // analyse word context + int type = 0; + std::string pat1(in_pat1); + if (pat1[0] == '_') { + pat1.erase(0, 1); + type = 1; + } + if (!pat1.empty() && pat1[pat1.size() - 1] == '_') { + type = type + 2; + pat1.erase(pat1.size() - 1); + } + mystrrep(pat1, "_", " "); + + // find existing entry + int m = find(pat1.c_str()); + if (m >= 0 && dat[m]->pattern == pat1) { + // since already used + dat[m]->outstrings[type] = pat2; + mystrrep(dat[m]->outstrings[type], "_", " "); + return 0; + } + + // make a new entry if none exists + replentry* r = new replentry; if (r == NULL) return 1; - r->pattern = mystrrep(pat1, "_", " "); - r->pattern2 = mystrrep(pat2, "_", " "); - r->start = false; - r->end = false; + r->pattern = pat1; + r->outstrings[type] = pat2; + mystrrep(r->outstrings[type], "_", " "); dat[pos++] = r; - for (int i = pos - 1; i > 0; i--) { - r = dat[i]; - if (strcmp(r->pattern, dat[i - 1]->pattern) < 0) { - dat[i] = dat[i - 1]; - dat[i - 1] = r; - } else + // sort to the right place in the list + int i; + for (i = pos - 1; i > 0; i--) { + int c = strncmp(r->pattern.c_str(), dat[i-1]->pattern.c_str(), dat[i-1]->pattern.size()); + if (c > 0) + break; + else if (c == 0) { // subpatterns match. Patterns can't be identical since would catch earlier + for (int j = i - 2; j > 0 && !strncmp(dat[i-1]->pattern.c_str(), dat[j]->pattern.c_str(), dat[i-1]->pattern.size()); --j) + if (dat[j]->pattern.size() > r->pattern.size() || + (dat[j]->pattern.size() == r->pattern.size() && strncmp(dat[j]->pattern.c_str(), r->pattern.c_str(), r->pattern.size()) > 0)) { + i = j; + break; + } break; - } - return 0; -} - -int RepList::conv(const char* word, char* dest, size_t destsize) { - size_t stl = 0; - int change = 0; - for (size_t i = 0; i < strlen(word); i++) { - int n = near(word + i); - int l = match(word + i, n); - if (l) { - size_t replen = strlen(dat[n]->pattern2); - if (stl + replen >= destsize) - return -1; - strcpy(dest + stl, dat[n]->pattern2); - stl += replen; - i += l - 1; - change = 1; - } else { - if (stl + 1 >= destsize) - return -1; - dest[stl++] = word[i]; } } - dest[stl] = '\0'; - return change; + memmove(dat + i + 1, dat + i, (pos - i - 1) * sizeof(replentry *)); + dat[i] = r; + return 0; } -bool RepList::conv(const char* word, std::string& dest) { +bool RepList::conv(const std::string& in_word, std::string& dest) { dest.clear(); + size_t wordlen = in_word.size(); + const char* word = in_word.c_str(); + bool change = false; - for (size_t i = 0; i < strlen(word); i++) { - int n = near(word + i); - int l = match(word + i, n); - if (l) { - dest.append(dat[n]->pattern2); - i += l - 1; + for (size_t i = 0; i < wordlen; ++i) { + int n = find(word + i); + std::string l = replace(word + i, n, i == 0); + if (!l.empty()) { + dest.append(l); + i += dat[n]->pattern.size() - 1; change = true; } else { dest.push_back(word[i]); } } + return change; } + diff --git a/src/spelling/hunspell/replist.hxx b/src/spelling/hunspell/replist.hxx index 0c515362..2f9d350c 100644 --- a/src/spelling/hunspell/replist.hxx +++ b/src/spelling/hunspell/replist.hxx @@ -72,17 +72,15 @@ */ /* string replacement list class */ -#ifndef _REPLIST_HXX_ -#define _REPLIST_HXX_ - -#include "hunvisapi.h" +#ifndef REPLIST_HXX_ +#define REPLIST_HXX_ #include "w_char.hxx" #include #include -class LIBHUNSPELL_DLL_EXPORTED RepList { +class RepList { private: RepList(const RepList&); RepList& operator=(const RepList&); @@ -93,15 +91,13 @@ class LIBHUNSPELL_DLL_EXPORTED RepList { int pos; public: - RepList(int n); + explicit RepList(int n); ~RepList(); - int get_pos(); - int add(char* pat1, char* pat2); + int add(const std::string& pat1, const std::string& pat2); replentry* item(int n); - int near(const char* word); - int match(const char* word, int n); - int conv(const char* word, char* dest, size_t destsize); - bool conv(const char* word, std::string& dest); + int find(const char* word); + std::string replace(const char* word, int n, bool atstart); + bool conv(const std::string& word, std::string& dest); }; #endif diff --git a/src/spelling/hunspell/suggestmgr.cxx b/src/spelling/hunspell/suggestmgr.cxx index 17becd75..6dff02f1 100644 --- a/src/spelling/hunspell/suggestmgr.cxx +++ b/src/spelling/hunspell/suggestmgr.cxx @@ -82,7 +82,7 @@ const w_char W_VLINE = {'\0', '|'}; -SuggestMgr::SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr) { +SuggestMgr::SuggestMgr(const char* tryme, unsigned int maxn, AffixMgr* aptr) { // register affix manager and check in string of chars to // try when building candidate suggestions pAMgr = aptr; @@ -91,11 +91,9 @@ SuggestMgr::SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr) { ckeyl = 0; ckey = NULL; - ckey_utf = NULL; ctryl = 0; ctry = NULL; - ctry_utf = NULL; utf8 = 0; langnum = 0; @@ -116,22 +114,14 @@ SuggestMgr::SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr) { if (pAMgr->get_maxcpdsugs() >= 0) maxcpdsugs = pAMgr->get_maxcpdsugs(); if (!utf8) { - char* enc = pAMgr->get_encoding(); - csconv = get_current_cs(enc); - free(enc); + csconv = get_current_cs(pAMgr->get_encoding()); } complexprefixes = pAMgr->get_complexprefixes(); } if (ckey) { if (utf8) { - std::vector t; - ckeyl = u8_u16(t, ckey); - ckey_utf = (w_char*)malloc(ckeyl * sizeof(w_char)); - if (ckey_utf) - memcpy(ckey_utf, &t[0], ckeyl * sizeof(w_char)); - else - ckeyl = 0; + ckeyl = u8_u16(ckey_utf, ckey); } else { ckeyl = strlen(ckey); } @@ -142,13 +132,7 @@ SuggestMgr::SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr) { if (ctry) ctryl = strlen(ctry); if (ctry && utf8) { - std::vector t; - ctryl = u8_u16(t, tryme); - ctry_utf = (w_char*)malloc(ctryl * sizeof(w_char)); - if (ctry_utf) - memcpy(ctry_utf, &t[0], ctryl * sizeof(w_char)); - else - ctryl = 0; + ctryl = u8_u16(ctry_utf, tryme); } } } @@ -158,16 +142,10 @@ SuggestMgr::~SuggestMgr() { if (ckey) free(ckey); ckey = NULL; - if (ckey_utf) - free(ckey_utf); - ckey_utf = NULL; ckeyl = 0; if (ctry) free(ctry); ctry = NULL; - if (ctry_utf) - free(ctry_utf); - ctry_utf = NULL; ctryl = 0; maxSug = 0; #ifdef MOZILLA_CLIENT @@ -175,50 +153,38 @@ SuggestMgr::~SuggestMgr() { #endif } -int SuggestMgr::testsug(char** wlst, - const char* candidate, - int wl, - int ns, +void SuggestMgr::testsug(std::vector& wlst, + const std::string& candidate, int cpdsuggest, int* timer, clock_t* timelimit) { int cwrd = 1; - if (ns == maxSug) - return maxSug; - for (int k = 0; k < ns; k++) { - if (strcmp(candidate, wlst[k]) == 0) { + if (wlst.size() == maxSug) + return; + for (size_t k = 0; k < wlst.size(); ++k) { + if (wlst[k] == candidate) { cwrd = 0; break; } } - if ((cwrd) && checkword(candidate, wl, cpdsuggest, timer, timelimit)) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) { - for (int j = 0; j < ns; j++) - free(wlst[j]); - return -1; - } - ns++; + if ((cwrd) && checkword(candidate, cpdsuggest, timer, timelimit)) { + wlst.push_back(candidate); } - return ns; } // generate suggestions for a misspelled word // pass in address of array of char * pointers // onlycompoundsug: probably bad suggestions (need for ngram sugs, too) - -int SuggestMgr::suggest(char*** slst, +void SuggestMgr::suggest(std::vector& slst, const char* w, - int nsug, int* onlycompoundsug) { int nocompoundtwowords = 0; - char** wlst; std::vector word_utf; int wl = 0; - int nsugorig = nsug; + size_t nsugorig = slst.size(); std::string w2; const char* word = w; - int oldSug = 0; + size_t oldSug = 0; // word reversing wrapper for complex prefixes if (complexprefixes) { @@ -230,22 +196,10 @@ int SuggestMgr::suggest(char*** slst, word = w2.c_str(); } - if (*slst) { - wlst = *slst; - } else { - wlst = (char**)malloc(maxSug * sizeof(char*)); - if (wlst == NULL) - return -1; - for (int i = 0; i < maxSug; i++) { - wlst[i] = NULL; - } - } - if (utf8) { wl = u8_u16(word_utf, word); if (wl == -1) { - *slst = wlst; - return nsug; + return; } } @@ -253,139 +207,131 @@ int SuggestMgr::suggest(char*** slst, cpdsuggest++) { // limit compound suggestion if (cpdsuggest > 0) - oldSug = nsug; + oldSug = slst.size(); // suggestions for an uppercase word (html -> HTML) - if ((nsug < maxSug) && (nsug > -1)) { - nsug = (utf8) ? capchars_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : capchars(wlst, word, nsug, cpdsuggest); + if (slst.size() < maxSug) { + if (utf8) + capchars_utf(slst, &word_utf[0], wl, cpdsuggest); + else + capchars(slst, word, cpdsuggest); } // perhaps we made a typical fault of spelling - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = replchars(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + replchars(slst, word, cpdsuggest); } // perhaps we made chose the wrong char from a related set - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = mapchars(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && + (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + mapchars(slst, word, cpdsuggest); } // only suggest compound words when no other suggestion - if ((cpdsuggest == 0) && (nsug > nsugorig)) + if ((cpdsuggest == 0) && (slst.size() > nsugorig)) nocompoundtwowords = 1; // did we swap the order of chars by mistake - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? swapchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : swapchar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + swapchar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + swapchar(slst, word, cpdsuggest); } // did we swap the order of non adjacent chars by mistake - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? longswapchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : longswapchar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + longswapchar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + longswapchar(slst, word, cpdsuggest); } // did we just hit the wrong key in place of a good char (case and keyboard) - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? badcharkey_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : badcharkey(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + badcharkey_utf(slst, &word_utf[0], wl, cpdsuggest); + else + badcharkey(slst, word, cpdsuggest); } // did we add a char that should not be there - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? extrachar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : extrachar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + extrachar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + extrachar(slst, word, cpdsuggest); } // did we forgot a char - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? forgotchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : forgotchar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + forgotchar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + forgotchar(slst, word, cpdsuggest); } // did we move a char - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? movechar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : movechar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + movechar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + movechar(slst, word, cpdsuggest); } // did we just hit the wrong key in place of a good char - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? badchar_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : badchar(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + badchar_utf(slst, &word_utf[0], wl, cpdsuggest); + else + badchar(slst, word, cpdsuggest); } // did we double two characters - if ((nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = (utf8) ? doubletwochars_utf(wlst, &word_utf[0], wl, nsug, cpdsuggest) - : doubletwochars(wlst, word, nsug, cpdsuggest); + if ((slst.size() < maxSug) && (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + if (utf8) + doubletwochars_utf(slst, &word_utf[0], wl, cpdsuggest); + else + doubletwochars(slst, word, cpdsuggest); } // perhaps we forgot to hit space and two words ran together - if (!nosplitsugs && (nsug < maxSug) && (nsug > -1) && - (!cpdsuggest || (nsug < oldSug + maxcpdsugs))) { - nsug = twowords(wlst, word, nsug, cpdsuggest); + if (!nosplitsugs && (slst.size() < maxSug) && + (!cpdsuggest || (slst.size() < oldSug + maxcpdsugs))) { + twowords(slst, word, cpdsuggest); } } // repeating ``for'' statement compounding support - if (nsug < 0) { - // we ran out of memory - we should free up as much as possible - for (int i = 0; i < maxSug; i++) - if (wlst[i] != NULL) - free(wlst[i]); - free(wlst); - wlst = NULL; - } - - if (!nocompoundtwowords && (nsug > 0) && onlycompoundsug) + if (!nocompoundtwowords && (!slst.empty()) && onlycompoundsug) *onlycompoundsug = 1; - - *slst = wlst; - return nsug; } // suggestions for an uppercase word (html -> HTML) -int SuggestMgr::capchars_utf(char** wlst, - const w_char* word, - int wl, - int ns, - int cpdsuggest) { +void SuggestMgr::capchars_utf(std::vector& wlst, + const w_char* word, + int wl, + int cpdsuggest) { std::vector candidate_utf(word, word + wl); mkallcap_utf(candidate_utf, langnum); std::string candidate; u16_u8(candidate, candidate_utf); - return testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } // suggestions for an uppercase word (html -> HTML) -int SuggestMgr::capchars(char** wlst, - const char* word, - int ns, - int cpdsuggest) { +void SuggestMgr::capchars(std::vector& wlst, + const char* word, + int cpdsuggest) { std::string candidate(word); mkallcap(candidate, csconv); - return testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } // suggestions for when chose the wrong char out of a related set -int SuggestMgr::mapchars(char** wlst, +int SuggestMgr::mapchars(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate; clock_t timelimit; @@ -393,120 +339,108 @@ int SuggestMgr::mapchars(char** wlst, int wl = strlen(word); if (wl < 2 || !pAMgr) - return ns; + return wlst.size(); - int nummap = pAMgr->get_nummap(); - struct mapentry* maptable = pAMgr->get_maptable(); - if (maptable == NULL) - return ns; + const std::vector& maptable = pAMgr->get_maptable(); + if (maptable.empty()) + return wlst.size(); timelimit = clock(); timer = MINTIMER; - return map_related(word, candidate, 0, wlst, cpdsuggest, ns, - maptable, nummap, &timer, &timelimit); + return map_related(word, candidate, 0, wlst, cpdsuggest, + maptable, &timer, &timelimit); } int SuggestMgr::map_related(const char* word, std::string& candidate, int wn, - char** wlst, + std::vector& wlst, int cpdsuggest, - int ns, - const mapentry* maptable, - int nummap, + const std::vector& maptable, int* timer, clock_t* timelimit) { if (*(word + wn) == '\0') { int cwrd = 1; - for (int m = 0; m < ns; m++) { - if (candidate == wlst[m]) { + for (size_t m = 0; m < wlst.size(); ++m) { + if (wlst[m] == candidate) { cwrd = 0; break; } } - if ((cwrd) && checkword(candidate.c_str(), candidate.size(), cpdsuggest, timer, timelimit)) { - if (ns < maxSug) { - wlst[ns] = mystrdup(candidate.c_str()); - if (wlst[ns] == NULL) - return -1; - ns++; + if ((cwrd) && checkword(candidate, cpdsuggest, timer, timelimit)) { + if (wlst.size() < maxSug) { + wlst.push_back(candidate); } } - return ns; + return wlst.size(); } int in_map = 0; - for (int j = 0; j < nummap; j++) { - for (int k = 0; k < maptable[j].len; k++) { - int len = strlen(maptable[j].set[k]); - if (strncmp(maptable[j].set[k], word + wn, len) == 0) { + for (size_t j = 0; j < maptable.size(); ++j) { + for (size_t k = 0; k < maptable[j].size(); ++k) { + size_t len = maptable[j][k].size(); + if (strncmp(maptable[j][k].c_str(), word + wn, len) == 0) { in_map = 1; size_t cn = candidate.size(); - for (int l = 0; l < maptable[j].len; l++) { + for (size_t l = 0; l < maptable[j].size(); ++l) { candidate.resize(cn); - candidate.append(maptable[j].set[l]); - ns = map_related(word, candidate, wn + len, wlst, - cpdsuggest, ns, maptable, nummap, timer, timelimit); + candidate.append(maptable[j][l]); + map_related(word, candidate, wn + len, wlst, + cpdsuggest, maptable, timer, timelimit); if (!(*timer)) - return ns; + return wlst.size(); } } } } if (!in_map) { candidate.push_back(*(word + wn)); - ns = map_related(word, candidate, wn + 1, wlst, cpdsuggest, ns, - maptable, nummap, timer, timelimit); + map_related(word, candidate, wn + 1, wlst, cpdsuggest, + maptable, timer, timelimit); } - return ns; + return wlst.size(); } // suggestions for a typical fault of spelling, that // differs with more, than 1 letter from the right form. -int SuggestMgr::replchars(char** wlst, +int SuggestMgr::replchars(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate; int wl = strlen(word); if (wl < 2 || !pAMgr) - return ns; - int numrep = pAMgr->get_numrep(); - struct replentry* reptable = pAMgr->get_reptable(); - if (reptable == NULL) - return ns; - for (int i = 0; i < numrep; i++) { + return wlst.size(); + const std::vector& reptable = pAMgr->get_reptable(); + for (size_t i = 0; i < reptable.size(); ++i) { const char* r = word; // search every occurence of the pattern in the word - while ((r = strstr(r, reptable[i].pattern)) != NULL && - (!reptable[i].end || strlen(r) == strlen(reptable[i].pattern)) && - (!reptable[i].start || r == word)) { + while ((r = strstr(r, reptable[i].pattern.c_str())) != NULL) { + int type = (r == word) ? 1 : 0; + if (r - word + reptable[i].pattern.size() == strlen(word)) + type += 2; + while (type && reptable[i].outstrings[type].empty()) + type = (type == 2 && r != word) ? 0 : type - 1; + const std::string&out = reptable[i].outstrings[type]; + if (out.empty()) { + ++r; + continue; + } candidate.assign(word); candidate.resize(r - word); - candidate.append(reptable[i].pattern2); - int lenp = strlen(reptable[i].pattern); - candidate.append(r + lenp); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + candidate.append(reptable[i].outstrings[type]); + candidate.append(r + reptable[i].pattern.size()); + testsug(wlst, candidate, cpdsuggest, NULL, NULL); // check REP suggestions with space size_t sp = candidate.find(' '); if (sp != std::string::npos) { size_t prev = 0; while (sp != std::string::npos) { std::string prev_chunk = candidate.substr(prev, sp - prev); - if (checkword(prev_chunk.c_str(), prev_chunk.size(), 0, NULL, NULL)) { - int oldns = ns; + if (checkword(prev_chunk, 0, NULL, NULL)) { + size_t oldns = wlst.size(); std::string post_chunk = candidate.substr(sp + 1); - ns = testsug(wlst, post_chunk.c_str(), post_chunk.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; - if (oldns < ns) { - free(wlst[ns - 1]); - wlst[ns - 1] = mystrdup(candidate.c_str()); - if (!wlst[ns - 1]) - return -1; + testsug(wlst, post_chunk, cpdsuggest, NULL, NULL); + if (oldns < wlst.size()) { + wlst[wlst.size() - 1] = candidate; } } prev = sp + 1; @@ -516,47 +450,43 @@ int SuggestMgr::replchars(char** wlst, r++; // search for the next letter } } - return ns; + return wlst.size(); } // perhaps we doubled two characters (pattern aba -> ababa, for example vacation // -> vacacation) -int SuggestMgr::doubletwochars(char** wlst, +int SuggestMgr::doubletwochars(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { int state = 0; int wl = strlen(word); if (wl < 5 || !pAMgr) - return ns; + return wlst.size(); for (int i = 2; i < wl; i++) { if (word[i] == word[i - 2]) { state++; if (state == 3) { std::string candidate(word, word + i - 1); candidate.insert(candidate.end(), word + i + 1, word + wl); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); state = 0; } } else { state = 0; } } - return ns; + return wlst.size(); } // perhaps we doubled two characters (pattern aba -> ababa, for example vacation // -> vacacation) -int SuggestMgr::doubletwochars_utf(char** wlst, +int SuggestMgr::doubletwochars_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { int state = 0; if (wl < 5 || !pAMgr) - return ns; + return wlst.size(); for (int i = 2; i < wl; i++) { if (word[i] == word[i - 2]) { state++; @@ -565,24 +495,20 @@ int SuggestMgr::doubletwochars_utf(char** wlst, candidate_utf.insert(candidate_utf.end(), word + i + 1, word + wl); std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); state = 0; } } else { state = 0; } } - return ns; + return wlst.size(); } // error is wrong char in place of correct one (case and keyboard related // version) -int SuggestMgr::badcharkey(char** wlst, +int SuggestMgr::badcharkey(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); @@ -593,9 +519,7 @@ int SuggestMgr::badcharkey(char** wlst, // check with uppercase letters candidate[i] = csconv[((unsigned char)tmpc)].cupper; if (tmpc != candidate[i]) { - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); candidate[i] = tmpc; } // check neighbor characters in keyboard string @@ -605,29 +529,24 @@ int SuggestMgr::badcharkey(char** wlst, while (loc) { if ((loc > ckey) && (*(loc - 1) != '|')) { candidate[i] = *(loc - 1); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } if ((*(loc + 1) != '|') && (*(loc + 1) != '\0')) { candidate[i] = *(loc + 1); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } loc = strchr(loc + 1, tmpc); } candidate[i] = tmpc; } - return ns; + return wlst.size(); } // error is wrong char in place of correct one (case and keyboard related // version) -int SuggestMgr::badcharkey_utf(char** wlst, +int SuggestMgr::badcharkey_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::string candidate; std::vector candidate_utf(word, word + wl); @@ -639,73 +558,61 @@ int SuggestMgr::badcharkey_utf(char** wlst, candidate_utf[i] = upper_utf(candidate_utf[i], 1); if (tmpc != candidate_utf[i]) { u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); candidate_utf[i] = tmpc; } // check neighbor characters in keyboard string if (!ckey) continue; - w_char* loc = ckey_utf; - while ((loc < (ckey_utf + ckeyl)) && *loc != tmpc) - loc++; - while (loc < (ckey_utf + ckeyl)) { - if ((loc > ckey_utf) && *(loc - 1) != W_VLINE) { - candidate_utf[i] = *(loc - 1); + size_t loc = 0; + while ((loc < ckeyl) && ckey_utf[loc] != tmpc) + ++loc; + while (loc < ckeyl) { + if ((loc > 0) && ckey_utf[loc - 1] != W_VLINE) { + candidate_utf[i] = ckey_utf[loc - 1]; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } - if (((loc + 1) < (ckey_utf + ckeyl)) && (*(loc + 1) != W_VLINE)) { - candidate_utf[i] = *(loc + 1); + if (((loc + 1) < ckeyl) && (ckey_utf[loc + 1] != W_VLINE)) { + candidate_utf[i] = ckey_utf[loc + 1]; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } do { loc++; - } while ((loc < (ckey_utf + ckeyl)) && *loc != tmpc); + } while ((loc < ckeyl) && ckey_utf[loc] != tmpc); } candidate_utf[i] = tmpc; } - return ns; + return wlst.size(); } // error is wrong char in place of correct one -int SuggestMgr::badchar(char** wlst, const char* word, int ns, int cpdsuggest) { +int SuggestMgr::badchar(std::vector& wlst, const char* word, int cpdsuggest) { std::string candidate(word); clock_t timelimit = clock(); int timer = MINTIMER; // swap out each char one by one and try all the tryme // chars in its place to see if that makes a good word - for (int j = 0; j < ctryl; j++) { + for (size_t j = 0; j < ctryl; ++j) { for (std::string::reverse_iterator aI = candidate.rbegin(), aEnd = candidate.rend(); aI != aEnd; ++aI) { char tmpc = *aI; if (ctry[j] == tmpc) continue; *aI = ctry[j]; - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, &timer, &timelimit); if (!timer) - return ns; + return wlst.size(); *aI = tmpc; } } - return ns; + return wlst.size(); } // error is wrong char in place of correct one -int SuggestMgr::badchar_utf(char** wlst, +int SuggestMgr::badchar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); std::string candidate; @@ -713,34 +620,30 @@ int SuggestMgr::badchar_utf(char** wlst, int timer = MINTIMER; // swap out each char one by one and try all the tryme // chars in its place to see if that makes a good word - for (int j = 0; j < ctryl; j++) { + for (size_t j = 0; j < ctryl; ++j) { for (int i = wl - 1; i >= 0; i--) { w_char tmpc = candidate_utf[i]; if (tmpc == ctry_utf[j]) continue; candidate_utf[i] = ctry_utf[j]; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, - &timelimit); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, &timer, &timelimit); if (!timer) - return ns; + return wlst.size(); candidate_utf[i] = tmpc; } } - return ns; + return wlst.size(); } // error is word has an extra letter it does not need -int SuggestMgr::extrachar_utf(char** wlst, +int SuggestMgr::extrachar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); if (candidate_utf.size() < 2) - return ns; + return wlst.size(); // try omitting one char of word at a time for (size_t i = 0; i < candidate_utf.size(); ++i) { size_t index = candidate_utf.size() - 1 - i; @@ -748,39 +651,33 @@ int SuggestMgr::extrachar_utf(char** wlst, candidate_utf.erase(candidate_utf.begin() + index); std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); candidate_utf.insert(candidate_utf.begin() + index, tmpc); } - return ns; + return wlst.size(); } // error is word has an extra letter it does not need -int SuggestMgr::extrachar(char** wlst, +int SuggestMgr::extrachar(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); if (candidate.size() < 2) - return ns; + return wlst.size(); // try omitting one char of word at a time for (size_t i = 0; i < candidate.size(); ++i) { size_t index = candidate.size() - 1 - i; char tmpc = candidate[index]; candidate.erase(candidate.begin() + index); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); candidate.insert(candidate.begin() + index, tmpc); } - return ns; + return wlst.size(); } // error is missing a letter it needs -int SuggestMgr::forgotchar(char** wlst, +int SuggestMgr::forgotchar(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); clock_t timelimit = clock(); @@ -788,26 +685,23 @@ int SuggestMgr::forgotchar(char** wlst, // try inserting a tryme character before every letter (and the null // terminator) - for (int k = 0; k < ctryl; ++k) { + for (size_t k = 0; k < ctryl; ++k) { for (size_t i = 0; i <= candidate.size(); ++i) { size_t index = candidate.size() - i; candidate.insert(candidate.begin() + index, ctry[k]); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, &timelimit); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, &timer, &timelimit); if (!timer) - return ns; + return wlst.size(); candidate.erase(candidate.begin() + index); } } - return ns; + return wlst.size(); } // error is missing a letter it needs -int SuggestMgr::forgotchar_utf(char** wlst, +int SuggestMgr::forgotchar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); clock_t timelimit = clock(); @@ -815,36 +709,32 @@ int SuggestMgr::forgotchar_utf(char** wlst, // try inserting a tryme character at the end of the word and before every // letter - for (int k = 0; k < ctryl; ++k) { + for (size_t k = 0; k < ctryl; ++k) { for (size_t i = 0; i <= candidate_utf.size(); ++i) { size_t index = candidate_utf.size() - i; candidate_utf.insert(candidate_utf.begin() + index, ctry_utf[k]); std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, &timer, - &timelimit); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, &timer, &timelimit); if (!timer) - return ns; + return wlst.size(); candidate_utf.erase(candidate_utf.begin() + index); } } - return ns; + return wlst.size(); } /* error is should have been two words */ -int SuggestMgr::twowords(char** wlst, +int SuggestMgr::twowords(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { - int c1, c2; + int c2; int forbidden = 0; int cwrd; int wl = strlen(word); if (wl < 3) - return ns; + return wlst.size(); if (langnum == LANG_hu) forbidden = check_forbidden(word, wl); @@ -864,9 +754,9 @@ int SuggestMgr::twowords(char** wlst, if (utf8 && p[1] == '\0') break; // last UTF-8 character *p = '\0'; - c1 = checkword(candidate, strlen(candidate), cpdsuggest, NULL, NULL); + int c1 = checkword(candidate, cpdsuggest, NULL, NULL); if (c1) { - c2 = checkword((p + 1), strlen(p + 1), cpdsuggest, NULL, NULL); + c2 = checkword((p + 1), cpdsuggest, NULL, NULL); if (c2) { *p = ' '; @@ -880,24 +770,19 @@ int SuggestMgr::twowords(char** wlst, *p = '-'; cwrd = 1; - for (int k = 0; k < ns; k++) { - if (strcmp(candidate, wlst[k]) == 0) { + for (size_t k = 0; k < wlst.size(); ++k) { + if (wlst[k] == candidate) { cwrd = 0; break; } } - if (ns < maxSug) { + if (wlst.size() < maxSug) { if (cwrd) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) { - free(candidate); - return -1; - } - ns++; + wlst.push_back(candidate); } } else { free(candidate); - return ns; + return wlst.size(); } // add two word suggestion with dash, if TRY string contains // "a" or "-" @@ -905,48 +790,40 @@ int SuggestMgr::twowords(char** wlst, if (ctry && (strchr(ctry, 'a') || strchr(ctry, '-')) && mystrlen(p + 1) > 1 && mystrlen(candidate) - mystrlen(p) > 1) { *p = '-'; - for (int k = 0; k < ns; k++) { - if (strcmp(candidate, wlst[k]) == 0) { + for (size_t k = 0; k < wlst.size(); ++k) { + if (wlst[k] == candidate) { cwrd = 0; break; } } - if (ns < maxSug) { + if (wlst.size() < maxSug) { if (cwrd) { - wlst[ns] = mystrdup(candidate); - if (wlst[ns] == NULL) { - free(candidate); - return -1; - } - ns++; + wlst.push_back(candidate); } } else { free(candidate); - return ns; + return wlst.size(); } } } } } free(candidate); - return ns; + return wlst.size(); } // error is adjacent letter were swapped -int SuggestMgr::swapchar(char** wlst, +int SuggestMgr::swapchar(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); if (candidate.size() < 2) - return ns; + return wlst.size(); // try swapping adjacent chars one by one for (size_t i = 0; i < candidate.size() - 1; ++i) { std::swap(candidate[i], candidate[i+1]); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); std::swap(candidate[i], candidate[i+1]); } @@ -958,40 +835,33 @@ int SuggestMgr::swapchar(char** wlst, candidate[2] = word[2]; candidate[candidate.size() - 2] = word[candidate.size() - 1]; candidate[candidate.size() - 1] = word[candidate.size() - 2]; - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); if (candidate.size() == 5) { candidate[0] = word[0]; candidate[1] = word[2]; candidate[2] = word[1]; - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } } - return ns; + return wlst.size(); } // error is adjacent letter were swapped -int SuggestMgr::swapchar_utf(char** wlst, +int SuggestMgr::swapchar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); if (candidate_utf.size() < 2) - return ns; + return wlst.size(); std::string candidate; // try swapping adjacent chars one by one for (size_t i = 0; i < candidate_utf.size() - 1; ++i) { std::swap(candidate_utf[i], candidate_utf[i+1]); u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); std::swap(candidate_utf[i], candidate_utf[i+1]); } @@ -1004,76 +874,64 @@ int SuggestMgr::swapchar_utf(char** wlst, candidate_utf[candidate_utf.size() - 2] = word[candidate_utf.size() - 1]; candidate_utf[candidate_utf.size() - 1] = word[candidate_utf.size() - 2]; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); if (candidate_utf.size() == 5) { candidate_utf[0] = word[0]; candidate_utf[1] = word[2]; candidate_utf[2] = word[1]; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } } - return ns; + return wlst.size(); } // error is not adjacent letter were swapped -int SuggestMgr::longswapchar(char** wlst, +int SuggestMgr::longswapchar(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); // try swapping not adjacent chars one by one for (std::string::iterator p = candidate.begin(); p < candidate.end(); ++p) { for (std::string::iterator q = candidate.begin(); q < candidate.end(); ++q) { - if (abs(std::distance(q, p)) > 1) { + if (std::abs(std::distance(q, p)) > 1) { std::swap(*p, *q); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); std::swap(*p, *q); } } } - return ns; + return wlst.size(); } // error is adjacent letter were swapped -int SuggestMgr::longswapchar_utf(char** wlst, +int SuggestMgr::longswapchar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); // try swapping not adjacent chars for (std::vector::iterator p = candidate_utf.begin(); p < candidate_utf.end(); ++p) { for (std::vector::iterator q = candidate_utf.begin(); q < candidate_utf.end(); ++q) { - if (abs(std::distance(q, p)) > 1) { + if (std::abs(std::distance(q, p)) > 1) { std::swap(*p, *q); std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); std::swap(*p, *q); } } } - return ns; + return wlst.size(); } // error is a letter was moved -int SuggestMgr::movechar(char** wlst, +int SuggestMgr::movechar(std::vector& wlst, const char* word, - int ns, int cpdsuggest) { std::string candidate(word); if (candidate.size() < 2) - return ns; + return wlst.size(); // try moving a char for (std::string::iterator p = candidate.begin(); p < candidate.end(); ++p) { @@ -1081,9 +939,7 @@ int SuggestMgr::movechar(char** wlst, std::swap(*q, *(q - 1)); if (std::distance(p, q) < 2) continue; // omit swap char - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } std::copy(word, word + candidate.size(), candidate.begin()); } @@ -1093,25 +949,22 @@ int SuggestMgr::movechar(char** wlst, std::swap(*q, *(q - 1)); if (std::distance(p, q) < 2) continue; // omit swap char - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } std::copy(word, word + candidate.size(), candidate.begin()); } - return ns; + return wlst.size(); } // error is a letter was moved -int SuggestMgr::movechar_utf(char** wlst, +int SuggestMgr::movechar_utf(std::vector& wlst, const w_char* word, int wl, - int ns, int cpdsuggest) { std::vector candidate_utf(word, word + wl); if (candidate_utf.size() < 2) - return ns; + return wlst.size(); // try moving a char for (std::vector::iterator p = candidate_utf.begin(); p < candidate_utf.end(); ++p) { @@ -1121,39 +974,30 @@ int SuggestMgr::movechar_utf(char** wlst, continue; // omit swap char std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } std::copy(word, word + candidate_utf.size(), candidate_utf.begin()); } - for (std::vector::iterator p = candidate_utf.begin() + candidate_utf.size() - 1; p > candidate_utf.begin(); --p) { - for (std::vector::iterator q = p - 1; q >= candidate_utf.begin() && std::distance(q, p) < 10; --q) { - std::swap(*q, *(q + 1)); - if (std::distance(q, p) < 2) + for (std::vector::reverse_iterator p = candidate_utf.rbegin(); p < candidate_utf.rend(); ++p) { + for (std::vector::reverse_iterator q = p + 1; q < candidate_utf.rend() && std::distance(p, q) < 10; ++q) { + std::swap(*q, *(q - 1)); + if (std::distance(p, q) < 2) continue; // omit swap char std::string candidate; u16_u8(candidate, candidate_utf); - ns = testsug(wlst, candidate.c_str(), candidate.size(), ns, cpdsuggest, NULL, - NULL); - if (ns == -1) - return -1; + testsug(wlst, candidate, cpdsuggest, NULL, NULL); } std::copy(word, word + candidate_utf.size(), candidate_utf.begin()); } - return ns; + return wlst.size(); } // generate a set of suggestions for very poorly spelled words -int SuggestMgr::ngsuggest(char** wlst, +void SuggestMgr::ngsuggest(std::vector& wlst, const char* w, - int ns, - HashMgr** pHMgr, - int md) { - int i, j; + const std::vector& rHMgr) { int lval; int sc; int lp, lpphon; @@ -1165,7 +1009,7 @@ int SuggestMgr::ngsuggest(char** wlst, char* rootsphon[MAX_ROOTS]; int scores[MAX_ROOTS]; int scoresphon[MAX_ROOTS]; - for (i = 0; i < MAX_ROOTS; i++) { + for (int i = 0; i < MAX_ROOTS; i++) { roots[i] = NULL; scores[i] = -100 * i; rootsphon[i] = NULL; @@ -1225,8 +1069,8 @@ int SuggestMgr::ngsuggest(char** wlst, FLAG nongramsuggest = pAMgr ? pAMgr->get_nongramsuggest() : FLAG_NULL; FLAG onlyincompound = pAMgr ? pAMgr->get_onlyincompound() : FLAG_NULL; - for (i = 0; i < md; i++) { - while (0 != (hp = (pHMgr[i])->walk_hashtable(col, hp))) { + for (size_t i = 0; i < rHMgr.size(); ++i) { + while (0 != (hp = rHMgr[i]->walk_hashtable(col, hp))) { if ((hp->astr) && (pAMgr) && (TESTAFF(hp->astr, forbiddenword, hp->alen) || TESTAFF(hp->astr, ONLYUPCASEFLAG, hp->alen) || @@ -1267,7 +1111,7 @@ int SuggestMgr::ngsuggest(char** wlst, scores[lp] = sc; roots[lp] = hp; lval = sc; - for (j = 0; j < MAX_ROOTS; j++) + for (int j = 0; j < MAX_ROOTS; j++) if (scores[j] < lval) { lp = j; lval = scores[j]; @@ -1278,7 +1122,7 @@ int SuggestMgr::ngsuggest(char** wlst, scoresphon[lpphon] = scphon; rootsphon[lpphon] = HENTRY_WORD(hp); lval = scphon; - for (j = 0; j < MAX_ROOTS; j++) + for (int j = 0; j < MAX_ROOTS; j++) if (scoresphon[j] < lval) { lpphon = j; lval = scoresphon[j]; @@ -1293,6 +1137,7 @@ int SuggestMgr::ngsuggest(char** wlst, int thresh = 0; for (int sp = 1; sp < 4; sp++) { if (utf8) { + u8_u16(u8, word); for (int k = sp; k < n; k += 4) { u8[k].l = '*'; u8[k].h = 0; @@ -1316,7 +1161,7 @@ int SuggestMgr::ngsuggest(char** wlst, char* guess[MAX_GUESS]; char* guessorig[MAX_GUESS]; int gscore[MAX_GUESS]; - for (i = 0; i < MAX_GUESS; i++) { + for (int i = 0; i < MAX_GUESS; i++) { guess[i] = NULL; guessorig[i] = NULL; gscore[i] = -100 * i; @@ -1329,10 +1174,10 @@ int SuggestMgr::ngsuggest(char** wlst, if (!glst) { if (nonbmp) utf8 = 1; - return ns; + return; } - for (i = 0; i < MAX_ROOTS; i++) { + for (int i = 0; i < MAX_ROOTS; i++) { if (roots[i]) { struct hentry* rp = roots[i]; @@ -1361,7 +1206,7 @@ int SuggestMgr::ngsuggest(char** wlst, guess[lp] = glst[k].word; guessorig[lp] = glst[k].orig; lval = sc; - for (j = 0; j < MAX_GUESS; j++) + for (int j = 0; j < MAX_GUESS; j++) if (gscore[j] < lval) { lp = j; lval = gscore[j]; @@ -1400,7 +1245,7 @@ int SuggestMgr::ngsuggest(char** wlst, fact = (10.0 - maxd) / 5.0; } - for (i = 0; i < MAX_GUESS; i++) { + for (int i = 0; i < MAX_GUESS; i++) { if (guess[i]) { // lowering guess[i] std::string gl; @@ -1454,7 +1299,7 @@ int SuggestMgr::ngsuggest(char** wlst, // phonetic version if (ph) - for (i = 0; i < MAX_ROOTS; i++) { + for (int i = 0; i < MAX_ROOTS; i++) { if (rootsphon[i]) { // lowering rootphon[i] std::string gl; @@ -1482,12 +1327,12 @@ int SuggestMgr::ngsuggest(char** wlst, bubblesort(&rootsphon[0], NULL, &scoresphon[0], MAX_ROOTS); // copy over - int oldns = ns; + size_t oldns = wlst.size(); int same = 0; - for (i = 0; i < MAX_GUESS; i++) { + for (int i = 0; i < MAX_GUESS; i++) { if (guess[i]) { - if ((ns < oldns + maxngramsugs) && (ns < maxSug) && + if ((wlst.size() < oldns + maxngramsugs) && (wlst.size() < maxSug) && (!same || (gscore[i] > 1000))) { int unique = 1; // leave only excellent suggestions, if exists @@ -1496,35 +1341,34 @@ int SuggestMgr::ngsuggest(char** wlst, else if (gscore[i] < -100) { same = 1; // keep the best ngram suggestions, unless in ONLYMAXDIFF mode - if (ns > oldns || (pAMgr && pAMgr->get_onlymaxdiff())) { + if (wlst.size() > oldns || (pAMgr && pAMgr->get_onlymaxdiff())) { free(guess[i]); if (guessorig[i]) free(guessorig[i]); continue; } } - for (j = 0; j < ns; j++) { + for (size_t j = 0; j < wlst.size(); ++j) { // don't suggest previous suggestions or a previous suggestion with // prefixes or affixes - if ((!guessorig[i] && strstr(guess[i], wlst[j])) || - (guessorig[i] && strstr(guessorig[i], wlst[j])) || + if ((!guessorig[i] && strstr(guess[i], wlst[j].c_str())) || + (guessorig[i] && strstr(guessorig[i], wlst[j].c_str())) || // check forbidden words - !checkword(guess[i], strlen(guess[i]), 0, NULL, NULL)) { + !checkword(guess[i], 0, NULL, NULL)) { unique = 0; break; } } if (unique) { - wlst[ns++] = guess[i]; if (guessorig[i]) { - free(guess[i]); - wlst[ns - 1] = guessorig[i]; + wlst.push_back(guessorig[i]); + } else { + wlst.push_back(guess[i]); } - } else { - free(guess[i]); - if (guessorig[i]) - free(guessorig[i]); } + free(guess[i]); + if (guessorig[i]) + free(guessorig[i]); } else { free(guess[i]); if (guessorig[i]) @@ -1533,26 +1377,24 @@ int SuggestMgr::ngsuggest(char** wlst, } } - oldns = ns; + oldns = wlst.size(); if (ph) - for (i = 0; i < MAX_ROOTS; i++) { + for (int i = 0; i < MAX_ROOTS; i++) { if (rootsphon[i]) { - if ((ns < oldns + MAXPHONSUGS) && (ns < maxSug)) { + if ((wlst.size() < oldns + MAXPHONSUGS) && (wlst.size() < maxSug)) { int unique = 1; - for (j = 0; j < ns; j++) { + for (size_t j = 0; j < wlst.size(); ++j) { // don't suggest previous suggestions or a previous suggestion with // prefixes or affixes - if (strstr(rootsphon[i], wlst[j]) || + if (strstr(rootsphon[i], wlst[j].c_str()) || // check forbidden words - !checkword(rootsphon[i], strlen(rootsphon[i]), 0, NULL, NULL)) { + !checkword(rootsphon[i], 0, NULL, NULL)) { unique = 0; break; } } if (unique) { - wlst[ns++] = mystrdup(rootsphon[i]); - if (!wlst[ns - 1]) - return ns - 1; + wlst.push_back(rootsphon[i]); } } } @@ -1560,7 +1402,6 @@ int SuggestMgr::ngsuggest(char** wlst, if (nonbmp) utf8 = 1; - return ns; } // see if a candidate suggestion is spelled correctly @@ -1569,15 +1410,10 @@ int SuggestMgr::ngsuggest(char** wlst, // obsolote MySpell-HU modifications: // return value 2 and 3 marks compounding with hyphen (-) // `3' marks roots without suffix -int SuggestMgr::checkword(const char* word, - int len, +int SuggestMgr::checkword(const std::string& word, int cpdsuggest, int* timer, clock_t* timelimit) { - struct hentry* rv = NULL; - struct hentry* rv2 = NULL; - int nosuffix = 0; - // check time limit if (timer) { (*timer)--; @@ -1589,13 +1425,16 @@ int SuggestMgr::checkword(const char* word, } if (pAMgr) { + struct hentry* rv = NULL; + int nosuffix = 0; + if (cpdsuggest == 1) { if (pAMgr->get_compound()) { + struct hentry* rv2 = NULL; struct hentry* rwords[100]; // buffer for COMPOUND pattern checking - rv = pAMgr->compound_check(word, len, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 1, - 0); // EXT + rv = pAMgr->compound_check(word, 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, 1, 0); // EXT if (rv && - (!(rv2 = pAMgr->lookup(word)) || !rv2->astr || + (!(rv2 = pAMgr->lookup(word.c_str())) || !rv2->astr || !(TESTAFF(rv2->astr, pAMgr->get_forbiddenword(), rv2->alen) || TESTAFF(rv2->astr, pAMgr->get_nosuggest(), rv2->alen)))) return 3; // XXX obsolote categorisation + only ICONV needs affix @@ -1604,7 +1443,7 @@ int SuggestMgr::checkword(const char* word, return 0; } - rv = pAMgr->lookup(word); + rv = pAMgr->lookup(word.c_str()); if (rv) { if ((rv->astr) && @@ -1621,20 +1460,20 @@ int SuggestMgr::checkword(const char* word, break; } } else - rv = pAMgr->prefix_check(word, len, + rv = pAMgr->prefix_check(word.c_str(), word.size(), 0); // only prefix, and prefix + suffix XXX if (rv) { nosuffix = 1; } else { - rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, - NULL); // only suffix + rv = pAMgr->suffix_check(word.c_str(), word.size(), 0, NULL, + FLAG_NULL, FLAG_NULL, IN_CPD_NOT); // only suffix } if (!rv && pAMgr->have_contclass()) { - rv = pAMgr->suffix_check_twosfx(word, len, 0, NULL, FLAG_NULL); + rv = pAMgr->suffix_check_twosfx(word.c_str(), word.size(), 0, NULL, FLAG_NULL); if (!rv) - rv = pAMgr->prefix_check_twosfx(word, len, 1, FLAG_NULL); + rv = pAMgr->prefix_check_twosfx(word.c_str(), word.size(), 1, FLAG_NULL); } // check forbidden words @@ -1656,17 +1495,15 @@ int SuggestMgr::checkword(const char* word, } int SuggestMgr::check_forbidden(const char* word, int len) { - struct hentry* rv = NULL; - if (pAMgr) { - rv = pAMgr->lookup(word); + struct hentry* rv = pAMgr->lookup(word); if (rv && rv->astr && (TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) rv = NULL; if (!(pAMgr->prefix_check(word, len, 1))) - rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, - NULL); // prefix+suffix, suffix + rv = pAMgr->suffix_check(word, len, 0, NULL, + FLAG_NULL, FLAG_NULL, IN_CPD_NOT); // prefix+suffix, suffix // check forbidden words if ((rv) && (rv->astr) && TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen)) @@ -1675,32 +1512,25 @@ int SuggestMgr::check_forbidden(const char* word, int len) { return 0; } -char* SuggestMgr::suggest_morph(const char* w) { - char result[MAXLNLEN]; - char* r = (char*)result; - char* st; +std::string SuggestMgr::suggest_morph(const std::string& in_w) { + std::string result; struct hentry* rv = NULL; - *result = '\0'; - if (!pAMgr) - return NULL; + return std::string(); - std::string w2; - const char* word = w; + std::string w(in_w); // word reversing wrapper for complex prefixes if (complexprefixes) { - w2.assign(w); if (utf8) - reverseword_utf(w2); + reverseword_utf(w); else - reverseword(w2); - word = w2.c_str(); + reverseword(w); } - rv = pAMgr->lookup(word); + rv = pAMgr->lookup(w.c_str()); while (rv) { if ((!rv->astr) || @@ -1708,55 +1538,75 @@ char* SuggestMgr::suggest_morph(const char* w) { TESTAFF(rv->astr, pAMgr->get_needaffix(), rv->alen) || TESTAFF(rv->astr, pAMgr->get_onlyincompound(), rv->alen))) { if (!HENTRY_FIND(rv, MORPH_STEM)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, MORPH_STEM, MAXLNLEN); - mystrcat(result, word, MAXLNLEN); + result.append(" "); + result.append(MORPH_STEM); + result.append(w); } if (HENTRY_DATA(rv)) { - mystrcat(result, " ", MAXLNLEN); - mystrcat(result, HENTRY_DATA2(rv), MAXLNLEN); + result.append(" "); + result.append(HENTRY_DATA2(rv)); } - mystrcat(result, "\n", MAXLNLEN); + result.append("\n"); } rv = rv->next_homonym; } - st = pAMgr->affix_check_morph(word, strlen(word)); - if (st) { - mystrcat(result, st, MAXLNLEN); - free(st); + std::string st = pAMgr->affix_check_morph(w.c_str(), w.size()); + if (!st.empty()) { + result.append(st); } - if (pAMgr->get_compound() && (*result == '\0')) { + if (pAMgr->get_compound() && result.empty()) { struct hentry* rwords[100]; // buffer for COMPOUND pattern checking - pAMgr->compound_check_morph(word, strlen(word), 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, &r, + pAMgr->compound_check_morph(w.c_str(), w.size(), 0, 0, 100, 0, NULL, (hentry**)&rwords, 0, result, NULL); } - return (*result) ? mystrdup(line_uniq(result, MSEP_REC)) : NULL; + line_uniq(result, MSEP_REC); + + return result; +} + +static int get_sfxcount(const char* morph) { + if (!morph || !*morph) + return 0; + int n = 0; + const char* old = morph; + morph = strstr(morph, MORPH_DERI_SFX); + if (!morph) + morph = strstr(old, MORPH_INFL_SFX); + if (!morph) + morph = strstr(old, MORPH_TERM_SFX); + while (morph) { + n++; + old = morph; + morph = strstr(morph + 1, MORPH_DERI_SFX); + if (!morph) + morph = strstr(old + 1, MORPH_INFL_SFX); + if (!morph) + morph = strstr(old + 1, MORPH_TERM_SFX); + } + return n; } /* affixation */ -char* SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { - char result[MAXLNLEN]; - *result = '\0'; +std::string SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { + std::string result; int sfxcount = get_sfxcount(pattern); if (get_sfxcount(HENTRY_DATA(rv)) > sfxcount) - return NULL; + return result; if (HENTRY_DATA(rv)) { - char* aff = pAMgr->morphgen(HENTRY_WORD(rv), rv->blen, rv->astr, rv->alen, - HENTRY_DATA(rv), pattern, 0); - if (aff) { - mystrcat(result, aff, MAXLNLEN); - mystrcat(result, "\n", MAXLNLEN); - free(aff); + std::string aff = pAMgr->morphgen(HENTRY_WORD(rv), rv->blen, rv->astr, rv->alen, + HENTRY_DATA(rv), pattern, 0); + if (!aff.empty()) { + result.append(aff); + result.append("\n"); } } // check all allomorphs - char allomorph[MAXLNLEN]; char* p = NULL; if (HENTRY_DATA(rv)) p = (char*)strstr(HENTRY_DATA2(rv), MORPH_ALLOMORPH); @@ -1764,9 +1614,8 @@ char* SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { struct hentry* rv2 = NULL; p += MORPH_TAG_LEN; int plen = fieldlen(p); - strncpy(allomorph, p, plen); - allomorph[plen] = '\0'; - rv2 = pAMgr->lookup(allomorph); + std::string allomorph(p, plen); + rv2 = pAMgr->lookup(allomorph.c_str()); while (rv2) { // if (HENTRY_DATA(rv2) && get_sfxcount(HENTRY_DATA(rv2)) <= // sfxcount) { @@ -1774,12 +1623,11 @@ char* SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { char* st = (char*)strstr(HENTRY_DATA2(rv2), MORPH_STEM); if (st && (strncmp(st + MORPH_TAG_LEN, HENTRY_WORD(rv), fieldlen(st + MORPH_TAG_LEN)) == 0)) { - char* aff = pAMgr->morphgen(HENTRY_WORD(rv2), rv2->blen, rv2->astr, - rv2->alen, HENTRY_DATA(rv2), pattern, 0); - if (aff) { - mystrcat(result, aff, MAXLNLEN); - mystrcat(result, "\n", MAXLNLEN); - free(aff); + std::string aff = pAMgr->morphgen(HENTRY_WORD(rv2), rv2->blen, rv2->astr, + rv2->alen, HENTRY_DATA(rv2), pattern, 0); + if (!aff.empty()) { + result.append(aff); + result.append("\n"); } } } @@ -1788,27 +1636,28 @@ char* SuggestMgr::suggest_hentry_gen(hentry* rv, const char* pattern) { p = strstr(p + plen, MORPH_ALLOMORPH); } - return (*result) ? mystrdup(result) : NULL; + return result; } -char* SuggestMgr::suggest_gen(char** desc, int n, const char* pattern) { - if (n == 0 || !pAMgr) - return NULL; +std::string SuggestMgr::suggest_gen(const std::vector& desc, const std::string& in_pattern) { + if (desc.empty() || !pAMgr) + return std::string(); + const char* pattern = in_pattern.c_str(); std::string result2; std::string newpattern; struct hentry* rv = NULL; // search affixed forms with and without derivational suffixes while (1) { - for (int k = 0; k < n; k++) { + for (size_t k = 0; k < desc.size(); ++k) { std::string result; // add compound word parts (except the last one) - char* s = (char*)desc[k]; - char* part = strstr(s, MORPH_PART); + const char* s = desc[k].c_str(); + const char* part = strstr(s, MORPH_PART); if (part) { - char* nextpart = strstr(part + 1, MORPH_PART); + const char* nextpart = strstr(part + 1, MORPH_PART); while (nextpart) { std::string field; copy_field(field, part, MORPH_PART); @@ -1819,56 +1668,50 @@ char* SuggestMgr::suggest_gen(char** desc, int n, const char* pattern) { s = part; } - char** pl; std::string tok(s); size_t pos = tok.find(" | "); while (pos != std::string::npos) { tok[pos + 1] = MSEP_ALT; pos = tok.find(" | ", pos); } - int pln = line_tok(tok.c_str(), &pl, MSEP_ALT); - for (int i = 0; i < pln; i++) { + std::vector pl = line_tok(tok, MSEP_ALT); + for (size_t i = 0; i < pl.size(); ++i) { // remove inflectional and terminal suffixes - char* is = strstr(pl[i], MORPH_INFL_SFX); - if (is) - *is = '\0'; - char* ts = strstr(pl[i], MORPH_TERM_SFX); - while (ts) { - *ts = '_'; - ts = strstr(pl[i], MORPH_TERM_SFX); + size_t is = pl[i].find(MORPH_INFL_SFX); + if (is != std::string::npos) + pl[i].resize(is); + size_t ts = pl[i].find(MORPH_TERM_SFX); + while (ts != std::string::npos) { + pl[i][ts] = '_'; + ts = pl[i].find(MORPH_TERM_SFX); } - char* st = strstr(s, MORPH_STEM); + const char* st = strstr(s, MORPH_STEM); if (st) { copy_field(tok, st, MORPH_STEM); rv = pAMgr->lookup(tok.c_str()); while (rv) { std::string newpat(pl[i]); newpat.append(pattern); - char* sg = suggest_hentry_gen(rv, newpat.c_str()); - if (!sg) + std::string sg = suggest_hentry_gen(rv, newpat.c_str()); + if (sg.empty()) sg = suggest_hentry_gen(rv, pattern); - if (sg) { - char** gen; - int genl = line_tok(sg, &gen, MSEP_REC); - free(sg); - sg = NULL; - for (int j = 0; j < genl; j++) { + if (!sg.empty()) { + std::vector gen = line_tok(sg, MSEP_REC); + for (size_t j = 0; j < gen.size(); ++j) { result2.push_back(MSEP_REC); result2.append(result); - if (strstr(pl[i], MORPH_SURF_PFX)) { + if (pl[i].find(MORPH_SURF_PFX) != std::string::npos) { std::string field; copy_field(field, pl[i], MORPH_SURF_PFX); result2.append(field); } result2.append(gen[j]); } - freelist(&gen, genl); } rv = rv->next_homonym; } } } - freelist(&pl, pln); } if (!result2.empty() || !strstr(pattern, MORPH_DERI_SFX)) @@ -1878,7 +1721,7 @@ char* SuggestMgr::suggest_gen(char** desc, int n, const char* pattern) { mystrrep(newpattern, MORPH_DERI_SFX, MORPH_TERM_SFX); pattern = newpattern.c_str(); } - return (!result2.empty() ? mystrdup(result2.c_str()) : NULL); + return result2; } // generate an n-gram score comparing s1 and s2 @@ -1940,8 +1783,8 @@ int SuggestMgr::ngram(int n, for (int j = 1; j <= n; j++) { ns = 0; for (int i = 0; i <= (l1 - j); i++) { - std::string temp(s1.substr(i, j)); - if (t.find(temp) != std::string::npos) { + //t is haystack, s1[i..i+j) is needle + if (t.find(s1.c_str()+i, 0, j) != std::string::npos) { ns++; } else if (opt & NGRAM_WEIGHTED) { ns--; @@ -2054,7 +1897,7 @@ int SuggestMgr::commoncharacterpositions(const char* s1, } else { mkallsmall(t, csconv); } - for (i = 0; (*(s1 + i) != 0) && i < t.size(); i++) { + for (i = 0; i < t.size() && (*(s1 + i) != 0); ++i) { if (*(s1 + i) == t[i]) { num++; } else { diff --git a/src/spelling/hunspell/suggestmgr.hxx b/src/spelling/hunspell/suggestmgr.hxx index 675d98eb..ea6ad79e 100644 --- a/src/spelling/hunspell/suggestmgr.hxx +++ b/src/spelling/hunspell/suggestmgr.hxx @@ -71,8 +71,8 @@ * SUCH DAMAGE. */ -#ifndef _SUGGESTMGR_HXX_ -#define _SUGGESTMGR_HXX_ +#ifndef SUGGESTMGR_HXX_ +#define SUGGESTMGR_HXX_ #define MAX_ROOTS 100 #define MAX_WORDS 100 @@ -91,8 +91,6 @@ #define NGRAM_LOWERING (1 << 2) #define NGRAM_WEIGHTED (1 << 3) -#include "hunvisapi.h" - #include "atypes.hxx" #include "affixmgr.hxx" #include "hashmgr.hxx" @@ -101,22 +99,22 @@ enum { LCS_UP, LCS_LEFT, LCS_UPLEFT }; -class LIBHUNSPELL_DLL_EXPORTED SuggestMgr { +class SuggestMgr { private: SuggestMgr(const SuggestMgr&); SuggestMgr& operator=(const SuggestMgr&); private: char* ckey; - int ckeyl; - w_char* ckey_utf; + size_t ckeyl; + std::vector ckey_utf; char* ctry; - int ctryl; - w_char* ctry_utf; + size_t ctryl; + std::vector ctry_utf; AffixMgr* pAMgr; - int maxSug; + unsigned int maxSug; struct cs_info* csconv; int utf8; int langnum; @@ -126,62 +124,53 @@ class LIBHUNSPELL_DLL_EXPORTED SuggestMgr { int complexprefixes; public: - SuggestMgr(const char* tryme, int maxn, AffixMgr* aptr); + SuggestMgr(const char* tryme, unsigned int maxn, AffixMgr* aptr); ~SuggestMgr(); - int suggest(char*** slst, const char* word, int nsug, int* onlycmpdsug); - int ngsuggest(char** wlst, const char* word, int ns, HashMgr** pHMgr, int md); - int suggest_auto(char*** slst, const char* word, int nsug); - int suggest_stems(char*** slst, const char* word, int nsug); - int suggest_pos_stems(char*** slst, const char* word, int nsug); + void suggest(std::vector& slst, const char* word, int* onlycmpdsug); + void ngsuggest(std::vector& slst, const char* word, const std::vector& rHMgr); - char* suggest_morph(const char* word); - char* suggest_gen(char** pl, int pln, const char* pattern); - char* suggest_morph_for_spelling_error(const char* word); + std::string suggest_morph(const std::string& word); + std::string suggest_gen(const std::vector& pl, const std::string& pattern); private: - int testsug(char** wlst, - const char* candidate, - int wl, - int ns, - int cpdsuggest, - int* timer, - clock_t* timelimit); - int checkword(const char*, int, int, int*, clock_t*); + void testsug(std::vector& wlst, + const std::string& candidate, + int cpdsuggest, + int* timer, + clock_t* timelimit); + int checkword(const std::string& word, int, int*, clock_t*); int check_forbidden(const char*, int); - int capchars(char**, const char*, int, int); - int replchars(char**, const char*, int, int); - int doubletwochars(char**, const char*, int, int); - int forgotchar(char**, const char*, int, int); - int swapchar(char**, const char*, int, int); - int longswapchar(char**, const char*, int, int); - int movechar(char**, const char*, int, int); - int extrachar(char**, const char*, int, int); - int badcharkey(char**, const char*, int, int); - int badchar(char**, const char*, int, int); - int twowords(char**, const char*, int, int); - int fixstems(char**, const char*, int); - - int capchars_utf(char**, const w_char*, int wl, int, int); - int doubletwochars_utf(char**, const w_char*, int wl, int, int); - int forgotchar_utf(char**, const w_char*, int wl, int, int); - int extrachar_utf(char**, const w_char*, int wl, int, int); - int badcharkey_utf(char**, const w_char*, int wl, int, int); - int badchar_utf(char**, const w_char*, int wl, int, int); - int swapchar_utf(char**, const w_char*, int wl, int, int); - int longswapchar_utf(char**, const w_char*, int, int, int); - int movechar_utf(char**, const w_char*, int, int, int); - - int mapchars(char**, const char*, int, int); + void capchars(std::vector&, const char*, int); + int replchars(std::vector&, const char*, int); + int doubletwochars(std::vector&, const char*, int); + int forgotchar(std::vector&, const char*, int); + int swapchar(std::vector&, const char*, int); + int longswapchar(std::vector&, const char*, int); + int movechar(std::vector&, const char*, int); + int extrachar(std::vector&, const char*, int); + int badcharkey(std::vector&, const char*, int); + int badchar(std::vector&, const char*, int); + int twowords(std::vector&, const char*, int); + + void capchars_utf(std::vector&, const w_char*, int wl, int); + int doubletwochars_utf(std::vector&, const w_char*, int wl, int); + int forgotchar_utf(std::vector&, const w_char*, int wl, int); + int extrachar_utf(std::vector&, const w_char*, int wl, int); + int badcharkey_utf(std::vector&, const w_char*, int wl, int); + int badchar_utf(std::vector&, const w_char*, int wl, int); + int swapchar_utf(std::vector&, const w_char*, int wl, int); + int longswapchar_utf(std::vector&, const w_char*, int, int); + int movechar_utf(std::vector&, const w_char*, int, int); + + int mapchars(std::vector&, const char*, int); int map_related(const char*, std::string&, int, - char** wlst, - int, - int, - const mapentry*, + std::vector& wlst, int, + const std::vector&, int*, clock_t*); int ngram(int n, const std::string& s1, const std::string& s2, int opt); @@ -192,7 +181,7 @@ class LIBHUNSPELL_DLL_EXPORTED SuggestMgr { void lcs(const char* s, const char* s2, int* l1, int* l2, char** result); int lcslen(const char* s, const char* s2); int lcslen(const std::string& s, const std::string& s2); - char* suggest_hentry_gen(hentry* rv, const char* pattern); + std::string suggest_hentry_gen(hentry* rv, const char* pattern); }; #endif diff --git a/src/spelling/hunspell/w_char.hxx b/src/spelling/hunspell/w_char.hxx index 336c454f..c561ffc4 100644 --- a/src/spelling/hunspell/w_char.hxx +++ b/src/spelling/hunspell/w_char.hxx @@ -38,8 +38,10 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef __WCHARHXX__ -#define __WCHARHXX__ +#ifndef W_CHAR_HXX_ +#define W_CHAR_HXX_ + +#include #ifndef GCC struct w_char { @@ -66,10 +68,8 @@ struct __attribute__((packed)) w_char { // two character arrays struct replentry { - char* pattern; - char* pattern2; - bool start; - bool end; + std::string pattern; + std::string outstrings[4]; // med, ini, fin, isol }; #endif From 9df680c31c9ad65cb740236102f70cee1374d045 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 11 Dec 2016 08:21:50 -0500 Subject: [PATCH 330/630] Sync translations with Transifex. --- translations/focuswriter_ja.ts | 30 +++++++++++------------ translations/focuswriter_ko.ts | 28 +++++++++++----------- translations/focuswriter_lt.ts | 2 +- translations/focuswriter_pl.ts | 12 +++++----- translations/focuswriter_ru.ts | 44 +++++++++++++++++----------------- translations/focuswriter_uk.ts | 4 ++-- 6 files changed, 60 insertions(+), 60 deletions(-) diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index a59080c0..5ee2f83a 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -283,7 +283,7 @@ OpenDocument Flat XML - + OpenDocument Flat XML Office Open XML @@ -514,7 +514,7 @@ Remove current dictionary? - + 現在の辞書を削除しますか? Write byte order mark in plain text files @@ -526,19 +526,19 @@ User Interface - + ユーザインタフェース Always show scrollbar - + 常にスクロール・バーを表示 Always show top bar - + 常にトップ・バーを表示 Always show bottom bar - + 常にボトム・バーを表示 Reset Today @@ -1113,11 +1113,11 @@ Bitter Skies - + Bitter Skies Enchantment - + Enchantment Gentle Blues @@ -1133,11 +1133,11 @@ Spy Games - + Spy Games Tranquility - + Tranquility Writing Desk @@ -1433,7 +1433,7 @@ Overwrite newer file? - 新しいファイルを上書きしますか? + 新しいファイルの上から書き込みますか? Save Changes? @@ -1497,7 +1497,7 @@ Pa&ge Setup... - + ページ設定 &Close @@ -1717,7 +1717,7 @@ Update Document Smart Quotes - + 文書全体にスマート引用符を適用 Update &Selection @@ -1725,7 +1725,7 @@ Update Selection Smart Quotes - + 選択範囲にスマート引用符を適用 &Spelling... @@ -1817,7 +1817,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 50936de6..99009b95 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -283,7 +283,7 @@ OpenDocument Flat XML - + 오픈도큐먼트 플랫 XML Office Open XML @@ -514,7 +514,7 @@ Remove current dictionary? - + 이 사전을 지울까요? Write byte order mark in plain text files @@ -526,19 +526,19 @@ User Interface - + 사용자 인터페이스 Always show scrollbar - + 스크롤바 항상 보이기 Always show top bar - + 제목 줄 항상 보이기 Always show bottom bar - + 내용 표시 줄 항상 보이기 Reset Today @@ -1113,11 +1113,11 @@ Bitter Skies - + 비터 스카이 Enchantment - + 마법 Gentle Blues @@ -1133,11 +1133,11 @@ Spy Games - + 스파이 게임 Tranquility - + 고요 Writing Desk @@ -1497,7 +1497,7 @@ Pa&ge Setup... - + 쪽 설정... &Close @@ -1717,7 +1717,7 @@ Update Document Smart Quotes - + 지능형 따옴표 문서에 적용 Update &Selection @@ -1725,7 +1725,7 @@ Update Selection Smart Quotes - + 선택한 내용에 지능형 따옴표 적용 &Spelling... @@ -1817,7 +1817,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index 10ae3fa4..9d5b0ea8 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -1433,7 +1433,7 @@ Some files could not be opened. - Kai kurie failai negalėjo būti atidaryti. + Kai kurių failų nepavyko atverti. Some files were opened Read-Only. diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 867cb149..20e49967 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -1125,11 +1125,11 @@ Bitter Skies - + Gorzkie Nieba Enchantment - + Oczarowanie Gentle Blues @@ -1145,11 +1145,11 @@ Spy Games - + Szpiegowskie gry Tranquility - + Spokój Writing Desk @@ -1729,7 +1729,7 @@ Update Document Smart Quotes - + Aktualizuj cudzysłowy drukarskie dokumentu Update &Selection @@ -1737,7 +1737,7 @@ Update Selection Smart Quotes - + Aktualizuj cudzysłowy drukarskie wyboru &Spelling... diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index c1d6535a..6c5f4f81 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -295,7 +295,7 @@ OpenDocument Flat XML - + Открытый текстовый документ XML Office Open XML @@ -526,7 +526,7 @@ Remove current dictionary? - + Удалить текущий словарь? Write byte order mark in plain text files @@ -538,19 +538,19 @@ User Interface - + Интерфейс пользователя Always show scrollbar - + Всегда показывать полосу прокрутки Always show top bar - + Всегда показывать полосу вверху Always show bottom bar - + Всегда показывать полосу внизу Reset Today @@ -1125,11 +1125,11 @@ Bitter Skies - + Горькие небеса Enchantment - + Очарование Gentle Blues @@ -1145,11 +1145,11 @@ Spy Games - + Шпионские игры Tranquility - + Спокойствие Writing Desk @@ -1509,7 +1509,7 @@ Pa&ge Setup... - + Ус&тановки страницы... &Close @@ -1573,35 +1573,35 @@ &Heading - + &Заголовок Heading &1 - + Заголовок &1 Heading &2 - + Заголовок &2 Heading &3 - + Заголовок &3 Heading &4 - + Заголовок &4 Heading &5 - + Заголовок &5 Heading &6 - + Заголовок &6 &Normal - + &Нормальный &Bold @@ -1729,7 +1729,7 @@ Update Document Smart Quotes - + Обновить умные цитаты документа Update &Selection @@ -1737,7 +1737,7 @@ Update Selection Smart Quotes - + Обновить умные цитаты выделения &Spelling... @@ -1829,7 +1829,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` &Help diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 7e53b9b1..3e6e8541 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -1729,7 +1729,7 @@ Update Document Smart Quotes - + Оновити розумні цитати документу Update &Selection @@ -1737,7 +1737,7 @@ Update Selection Smart Quotes - + Оновити розумні цитати виділеного &Spelling... From 28b9002dcf80fe52a1ff3e6177ae3136b8f07b3f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 11 Dec 2016 08:28:20 -0500 Subject: [PATCH 331/630] Bump version number. --- NEWS | 8 ++++++++ focuswriter.pro | 2 +- mac_deploy.sh | 2 +- resources/windows/installer.nsi | 2 +- windows_deploy.bat | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 6b1950be..ef860ad2 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +1.6.3 +----- +* Updated included hunspell. +* FIXED: Line spacing was ignored when pasting in new documents. +* FIXED: Pasting text always made document rich text. +* FIXED: Possible delay on start when creating non-native printer. +* Translation updates: Chinese (China), Japanese, Korean, Lithuanian, Polish, Russian, Ukrainian. + 1.6.2 ----- * Generate binary translations at build time. diff --git a/focuswriter.pro b/focuswriter.pro index ab52ed32..027e1708 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -26,7 +26,7 @@ macx { } # Set program version -VERSION = 1.6.2 +VERSION = 1.6.3 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name diff --git a/mac_deploy.sh b/mac_deploy.sh index d252e818..efaf7227 100755 --- a/mac_deploy.sh +++ b/mac_deploy.sh @@ -2,7 +2,7 @@ APP='FocusWriter' BUNDLE="$APP.app" -VERSION='1.6.2' +VERSION='1.6.3' # Remove any previous disk folder or DMG echo -n 'Preparing... ' diff --git a/resources/windows/installer.nsi b/resources/windows/installer.nsi index 1c3ecb15..63cdac02 100644 --- a/resources/windows/installer.nsi +++ b/resources/windows/installer.nsi @@ -4,7 +4,7 @@ !define APPNAME "FocusWriter" !define VERSIONMAJOR 1 !define VERSIONMINOR 6 -!define VERSIONPATCH 2 +!define VERSIONPATCH 3 !define APPVERSION "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}" !define ABOUTURL "https://gottcode.org/focuswriter/" diff --git a/windows_deploy.bat b/windows_deploy.bat index c308c3f7..a51bfbf7 100644 --- a/windows_deploy.bat +++ b/windows_deploy.bat @@ -1,7 +1,7 @@ @ECHO OFF SET APP=FocusWriter -SET VERSION=1.6.2 +SET VERSION=1.6.3 ECHO Copying executable MKDIR %APP% From a45fc8c01edd051cc31b701162f3f398011a863f Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Sun, 11 Dec 2016 09:05:30 -0500 Subject: [PATCH 332/630] Log changes. --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 03fcac0f..85426301 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +focuswriter (1.6.3-1) unstable; urgency=medium + + * New upstream release + + -- Graeme Gott Sun, 11 Dec 2016 13:48:38 +0000 + focuswriter (1.6.2-1) unstable; urgency=medium * New upstream release From 10a54affc3ac2c004221f1f35469daa325d46834 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 3 Jan 2017 05:35:18 -0500 Subject: [PATCH 333/630] Update copyright year. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 9c6315a0..eb9f1102 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * - * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott + * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Graeme Gott * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -859,7 +859,7 @@ void Window::aboutClicked() "

    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 diff --git a/translations/focuswriter_sk.qm b/translations/focuswriter_sk.qm deleted file mode 100644 index 749672b68e00fc14c027aa233be850595f2a33c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36514 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�w9jmDkAe#AP9VW-UL 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 K&6|PR!2bmjT|6!T diff --git a/translations/focuswriter_sr.qm b/translations/focuswriter_sr.qm deleted file mode 100644 index 6a5bc2ee1da8628fcfbedcadd6013ea32d266c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34978 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 F{J+!F=q3OF diff --git a/translations/focuswriter_sv.qm b/translations/focuswriter_sv.qm deleted file mode 100644 index 2051dbc0892c6352237601140aeecba75cf4fb3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35477 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 diff --git a/translations/focuswriter_tr.qm b/translations/focuswriter_tr.qm deleted file mode 100644 index fff140431b8fdcf81e40f801b2640a4d57fde5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33954 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%0A{z)D_|Vl*xX=Nl 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 ShcfB8`0P>olq5lk82ukr=z$La diff --git a/translations/focuswriter_uk.qm b/translations/focuswriter_uk.qm deleted file mode 100644 index 9560c6478c192091c8524b5afecd7c1447ad094f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36144 zcmcJ23w&Hvx$jD{XOc`NlLw(KwUkY0rll=ylBR8%rfJipXHgCAqKE%@(|f;n=92qf`_X@XV!IHvD}<9=cr^Kj;^tzEcEN z;qN=!L|}A>5X&~<`3WHw4T!*P&jE*avGRS(gn0GMV&y02gg8&b9 z@C2N??}?Sqw&M3+id9#CUWlWoiB;F&y$gOXR^9Lre*d9Z^&mcf?TcdD!Y73YT_Xlp zyc28qso1>=YwF%8&OLCd5DPyh&i&GbLag|j*b~Rv2Rg+5cmJyp>9u0y!IeUcM#RB4 zUnRu$kE`e4CNX*ie&4lLoc9v&-F=HVlK24NpRb;$d|N$N*Qn>_o#M#-zxFpT zC(6pMe!URKca(+x^fMuHzbIS!$T}g0x0J1U^p`>`ez0tR`&)$={6yIWr({9r&1DyC z!PB_9EO+0RgqYhid%I^Hz9e@`o`^lA{(?#c$J>47-;`O5J z>Hg0MvGhY_zwTd!@xLhhZQ1vPXjxJAyAh0AbXj@ehIa|EwywPXEn`BgX)0fI7wFOQ zr}B|n;CJ-;^4LSK!+c*Uk52&pMYorqczjl0lfL@$I8EW@5h8V_NVf@uEKj4Y%l-v#5(N%o6Em^9oBJCuKdxh zYlLWjq5NOJj`>r+E`R)~W+BFRl|Q*WCd9~Z%K!X(;E_A6{H2FZ!QbCsVSE#Kv^`nT zxZ+wNF5XbFIt;i~w^nrA@(lK6b;ZV)zYV+|tJw6NC$S%QR~#jN2L>zN{&Vct&buq# z``V{~@3$&GFbH_NpRBlL`7gkK@2R+5EQ6fgTygthzV#;5j>w0LVOI*7x4QV@B|;mKa1x}cs_32`mQn|CMxkP$Fl=ZtZ(9Hc!EzS z!+3&UCO6@^8qWzl&%yIL9d{Y`lVp^X23tM5B%Gn4-3)R7I^%0?BBW12A&u{Lx^xB@WdCej)t!Xes=G@ z&{Gcwetq>tkcUqPE3VrGJTD4Xjx84Aw9#PIk}UYOHn?C6`0dRF7yjZ`kgE>|7aanh z1l}E7EY<-2DuMo((2X`6}$oW5MZb9|a!g2Tw$>PlLY?-uPG0edSy6#J+U@D){N^ zK<|osgWpItK_BFT-@OX*we6bVlXnBJ?&;w3XFd-3{IB5OzJTXBU#hHF2{}8xuCnp@ z2I$MN%CnxyVZAR`t~wEb9r$DA+8@P%|4r(-@1e^6w?qE6l~)e`;75>~!i(*CygVbsDOXor{Y&u2l`E>QzhWu& z{iUiK>pFxu@z<(P?uR^H^g`7GRdYg=eXr_)k?Vo)C#$~M0zRsHrRtl@AHx1$Q}ytJ z2KeIhRgeA(>)fhcFbuhV~69XS8>nE#&YrtSYBMAO@<7ksS; z`s0ae^Ci%wcU5&WpIh3iTaNw&c)eJCNlVGKJ4k= zs;^qJ4)VLG`i9*P!XCcA`sTwC%>M=TOy5y`OXXA0Q@2+C^V{DHyZ1!(SD(5O^72yk z!ymX7`kMNn|ntl@+@5H)Ke}5?c$PUQwrJg~Xz<6||U zH~k25(O6R#I1BrJbIrQl(A&o8HA5d=1HHMrX7sxA@%QPPi51wdwGY)K9)X>G{hw=& zZ+av6>HF&0_lufKn;_rY9;>;mc@}iIujcmKE1^%1*F3P~J+NDwYaYJ!N$9I7^=znC z&*f3|-1ML7Ib5!uqdU~|ysy^$%QMfw-%Qp#(|fiM(YMz;Gjm9YE6xoYH-fG+XNRl$ ztD&Fn2sfRIbshStdLC{LH}&B6!_S1x2Qlvjv*8V2xfA}u@o?vhHwzK@dbsDsKY%ZO z96s{hWzY}1!$&_9!hU`x9KRKG9lb4_*n1}Ad099&0lSvFAUs?CRoKH1hHv?&>%b=u zh41|%_US?+{BM0rzz;8kpZIzO@Ovu!^Os%*|BtEXXDN67KKOQR=S9!Ke!Qx-|J8qny^G-qd${o; zJOO{>Kh^dh3F7mQ)b6_DdgzP4)SlN3J2mw2+M}OX2f2DrZR$VMphu$ivitYKZ+Tbk zJN7TczTI7W_m3ZeoUE$7|5oV9g-2^2{8l&i>E7BWZ-{^{YiplB0=k{EFk;;G0`zfj zr1A0Z!w#&CG+mj(`+tdSzYzOS{^Q8d!%uX)8$XQ$Do$mm?N8T2B=iQ+D&}$>_d-|==8^OpeKLVUnpN)KW z!zSpHb0T+t?%zR|TO;@VtPA!s9(h9Qowr7w{P)G6^UlcA-+;Y6_Q}Xg7a8zZzE~H! z3wptPzHa%?Mxf6ht7}_xBlPf0-O$?rZ~gD;4%~Gr;5=4$_$Q#l&at}q8UKxS&ekP9 z54=~dugl(W3-;v(^^ASI?oBs)EUq0sq_UT{hzTI~U?BhLk&o_e}3(M-Bzv^1( z)i2h)5WWZWxG(`F`BQL!SY#|TT8%Dao6%`(H#&tWR)`kSCeE&+n!=umP+u~gjhic4 z+RlcEh(K>Lp2?MQY(2)VGkP#~i_yo?&X}scbTS#6$;Le+nhX=~Z!9t@xZ~29SZdre zCM^0yPGq1gR*8ORhG1VVlU&u$cS91Rq1aqJBhgx8oB@=2jIBVbmuRVl;dg$v9)DYJ zbQl}(a|{04=YXv3Ph_VP*{mty`9U@%X3*1JHcH;Jrz2M-~ zsNr-xof$8V(E>jz8Lh;{|4*I#QCvSLbXmh95*jIM2IGoz{TSaxc&+0srx zr{ryOeoAV;7fPkZGJvsFqx+ z*_0%&lQP@uP$?p5V%of45^9%mIuzU{z$Ft5{=cnaD4m*&XXmwwCd^0u(j#?GALzBk z=y5Qw*t@p3B)Y35lTgL%(umPRjfu}TVkzwa-s(|Z4VFNTQze*_=~$AJH0H6+Q0!Pd zDLH4U(I}B46cWW&klpgPJ_p(GNIYi_#Zr^Au}P`P>-!U9xkNe@%gkwvxYFY56~?Oo zYS36O`CzlL56_(vxP`7}R3hN>6~pn^_&NJh$vLUds`}Gov(w-eOO>rK8bC-WT433V zl><*px4O2ecEzDoE|E*d$4$#Tn>(wt3YW0zpwu_+KJo;8mr@Zqtz31gXCL+a;a5`id@ z&fcA?Ixq{y0!<5tEXELpZo3@D!5h?OIj97OYPn#}z9Ryu%$uo_+9@{0qGCGJp?!^}F#UF*Q3}%z(4Kk^9IDa3Kn>w< zg<9l{{>{K*TbLz{xP$P8N8 z;)6)kgNP(tI%AH>c;@8zEHaj14ys7kOi=5%);vs2Y4%AAAa$_sx)y72Xl!Y|H%tBH zh14HU#&hxFked8N+}YaTuE|t7BMo&CJpL|w;tQkSU5m2%5LSIf%4?%R9Rv&Q1?805 zqX*XtwZ+d|VO@35R{n4Yjzj&7D*~9u=FC_sjV;QUGYoKI(^8&%QQEJemoqWje#s@3^)=m3k?2s4i>L`dzH>)8peqooM}S)rSDz>{$4RG*FRMNofdGTOpZ_? z+o>LB4#^zKdTP;xGjsiL0^-1lO|`Q{*4HXlI1UWw>of+i*<6jE3h&X<1q)W}O`F-- zNhV>aJ(V7pX@i=<#N<>G|K}`L3L8zpmrj;$0xNpQrC(L>`f8wLN7HZacCk4!6Hg`?5Ur6mr2sfJ8WUs$rlP~4!uB35#K%;or*LU&7|K`) z275tPb`6N;yTqNEiC8iM2Y4)(hl@S4v>Am{{m*%q)%(VCnsXV1T#ahwl3=gQ1(G2e z_GjV~aYVmk@vO!bYQ$lO7b?{VX#vJydoz10@r?KXfL9dmg zEV0^FBo3HxL5@xmOs$T;ZG-lM*A5EM5n~Fm9dEhL?Sk#eG&CW6J1!EkGd7#amZa=5 zW3k+tA;3|dKjpm_H0%cK9^j#uD(VnkXJTU@nmGpNUE0nfe9&l|nGZyhtQrSQRti!P z5QC0RVsy3*j=iFU#~uJ*>8Iei6BOx{)FCg})eE<(xL8?=tYs;fWMg(DH#Z~IVi7zd zppn|)Ei`2gM^*Nvr>CtNX_28_h)Y@#M&@s14;UE*-Eyab{u-lMfp%5yJ;wW|Iu~n6xalbE@ zlxtgLA^lQ!vP5hP7Ijle0l;!$(C~B677~XEPVY}#k{FLO8KFxClM>m)r6u>r1U)x` zqtx_j0?He!cKbB?RjDadpi*Q}H2QS3C@Gr=!9g(CpPoe$wge^%WbjNUjRCYuEb2~7 z<&Nrt&y+IqRaghZO;@c| z=~c!ebkAUvVpJMFwdX1(as8?FQWbaLuPi=NQ4nEU7ph7L%TZu8{GFLV`U-Xd+gsjt zQwFE+Nu(0fv(qXYi4>0X5LHdPq&zERf-66Vs0U%mAN{(gFry>*j11j`W>cg9n zsNREGhuLrCBZ|hhJuH&Azh#qZN{iED7TP*r;zW3>KpqFT~vz$7^*~H@J5h^w135dg z^YWLgSQvb`T-3B5fu5;MYj1KgjoQ@IbP3Tc<|xtmquR=c9+J>c<|8%xI$sQ&C@qY~ z-7b;3{je`czRygZ)b*+dc{C6jr`I?@N-}#hv>P4GHVBJibxNbH4Q2MyVY5^AL%*O4 zA&D}i-H%X$jE!J?r3h%$WoF3%Rii~NB|$6%2&Mu~Qo%36J?#>OZn0cCl(vt-q??@u zVW~uOw+*)oW6^MYI!={pdDiAkIt$yVItGf&*Nh-SmACc4K`9Z%J9`}x)I0DI1)s$B z)k|M#GfcK>>~IYM8WEkP331cd%M~)Jzebj%Y$K2(epDhS;+b?Q4btT72|Y`1 z^I=fc;7cqtgoUagRHOO`;>nVpCwqOEiJ%=+#=~Ex8m!F2yd;WB#H+h$P&M7{uvgWH zrGHB-%@3Z(7C7*#ZFr?T40gXTm}QAbkAqxm&)`IIodY-wz{jmVwNkL_p{dx=LZh{f zeCt36j=*Cr>Gm!HUJNQ>&@n#^-B!wkrY>torkRm?-7L~(B^4$+Sk_4pb}uVI4gx&= zG;FnlR(NDOjan*PmQ=3P!cN|)XxwoXWU9UhD-VNNRJ*V$n3|$l_Bk{IQRV`P z@ImQ;wg5G^MMmW$=#tqX{w51`*M{^EQ5OxfxuvZcjaBH29iKyK7>t~CJyWN7MpZi# zxl*Qu0>}ox^<;8jNId97F;}TN<+kVXYvsXoI(aNsDh=5V^@1Fc)K1it1Vw$ybRhE< zJq8stBQdtrZsB_l12-H*a!YnzWy~zoBc;Uie=dJrWQ$vUJb6`gv|~lChOsw!E>Fx4 zGvPCT|9y$CukD2zl2A|Pw^NHrY&3}ua%4#(aSXet{8p5(q>fNN0A-GK8m_VpZ?Ij2 z83#thDwCWiH zz;+4J>dHbn^Pm{eRKaN|HbLUEPDOb5;DBr{l_Fm~oSV?<8J#kK?ZtZOe`23O2k0BD zj>4=WV)8cA-gIuPHEYwIc_@XB4rBu3o(%4x%x_F($rcq#!8 zQT1PICt5~u2q1yFbdIN6P)a^7QVvDyA;#vtj9TFl12C8ER=X#mJQ0}pl8Sy}Nd!&m)X7Xm2 z1~;O^^`&M9XhQjNO#!`5RkCCm#ioy~W8^9vyc-Z`fKfEM(2wvSUXKE<%Qgd|!x;{5 zo7^(c;WLUssO=QH!N5E>OF73U-KB)!x6UM^ z`z$34_pDP&E(%7@&`K-m&jFPqs?o}lk|mDxBH9*wUGg^D+_T*;*gtii`5x)L0Eihhqt8&O$QFbAU-66x1(i+qCaC0|8Oz~Rksotr+EPD;yJJEH!rb@s7MkEJx$;obZ<{BPvkiVmX7NqfOn$Sj#7 z3c+2ndyFFBJDF>x-E9l(we7LbkPUMG*P+F8y={tgTO{V8v<_K=bp~K_;BbHg2bNK2cBUZ?s_APk2 znJ%~b+O$16n^C>(+hb!FPiC0U_w<{RI216SesvSCx zbaFP}>7ap6T!{`-Lf{$1#;o#K0ZetUK%UsaqLeD5ZfG^McI!Q{3=FT-CItXMT}c)C z#jK4{H}2J_TeAl@;n2m2kNcB2ti?|5j=Ea8V8%uaka&h0IR3+Qe)O_{ z+k2CrKWK0oXG(H{QU!J!iLL~z^J;ws`@!R8%2y{LX?JVw46NXR9IBnNn*aDHz9f+OBlIdhb?(|_QcCVsGu_uF8QhyOzgoZ>08iN4DO>_z@?s`Ue zPR8F{%&U!{fC}~nTHB$%c%C+Y5!EBOWrqjq{ij?4z0K39vUdSAU?V>xP3l3H5}|{! zW9H$+xOFzN0ELiS8g~|Iumy zA@Vcbukrvl`@zuW$W#mmH+^w!wBk>7U?|^34ID&0$DgcKDjBT_K!63%;+nu}LIc(9 zK30~MRfPbx1}u&JsjgzFAGOYpm^hq>goi)mNZ#(cqk|>(veDTc60!^Px;nYxFpi3& zBjzN#6PEJKp*Yj?moA6FBkA;X5kfDPev<9MD{&i;)o2&%VBaj7 z*ko5_SgLWd!2dprCxG z$m@;v>pn$gWv#MKEx8cqC9oz;0SsY6(%7z7u|sCFL+>z~8JMx^k7wnrbv}S_j`o=7 zk?ld@&N^t|0@GMV8VHR%N(dOV zGn13=*9W17V=5ldM$D^#s=d#nJPfp))@i94SSVnJ);6t9T5GF)vWe9A8W>(Kp=HRO zRXK`Ud$(Q;;=eAO@t(%dtjIcVR}Bt!O;2}arG#lC79p>v8XZ+On2vgWe`;V4`n;uC z*M`kog=k~c@hy$w4sy8XA_utx%{>ekG?rs0-AZQ_U!*X3-m6mYY3_)e*Nb&2zfDJU zepC!gsm8r%XxN*R`MN0dl(WAw(WDw4Rc?0x-mE;+;;g#?v1^Wdo;5SGGGESh6~g7E zo>U0979vm8RN@jPTgRwTy6@A72BTu^P`yg$hr+QPGV_>MQ~~!Yhm~E2O7qhSS=@}( zx^Bz@RdzAs>PVlpM$47qdUZ5QRl^Grn>XVX4vokIC&ZcVwwuI849e86OL`r~C0a#L=>C~};$a#r~3^t&YsEy7Ux%4~;Y`zfP0>ESpt z2cp~4Ng0>uzuhfeL$0RtuYM-sU!2c7Z`~4rDvox>SLPmZsCos z?h4Up;Y?c>RR?~NQ<%)4D({`2u&CI`OKiHs?4Xv6?(8I<1FJsTA0LA|feRc|%FYX{ z-U8n zv0bk&Z1Bn7fDjUOtNw+&%U!jl;+R$8c3>`QS?0o+ z%+s0#osrd1I2()z3RKq`ZPApmZD3R->UO$PwOD$u5DG_SWfmZP7O?~fbpkL0T6K1f z%8a*5AmnzC3Pnd|k3m_W`sZaavWFE_d1x1ks^H3JR!Ukk7C_x=S0-FO31cAil3Tvh zx1PNp`RscSWLr4owDlPPvN zM@N~fl{^lr(yZp^QUe@Vz~LL5G!6T%lu}hUUh`1?MhQuloaONd#^N;HZcXMad6Oji ztWxpg=#bB$n?+qTqtGW(h2q(m=liWQa5ABQ`K4PE*Kpd7Kech+}Ef$ zpk0(!Eqx#}dZ2)tmpUT`tn1dY;xN7wA|dav$~ee0Co`WNvAdCgOiUDbOI(6nGMH4=50T-*J}BC|?WpL! zkSN&YL>+nF2*46Ed@L-0=7!}vKPX`fic=cV!8F_VFGxDL4x6k$d9=l%UhP_}sC`X? zj}-HGuiFKok{Bvs;h(%XRm)r;U!i3!bW{h?G@Zs(eRFcNC(-rJ8}_2OaZi29?@wsQ z_b;@HPQ*hhF4~EAWAbV6TSiwl!-|m^rMPW2+gn>Z&q3_8GZSN;b!R$P zz<>I8kaRoTroMxu+sh{U%dVfIUY7T#=?m0f-tB?ByASedbT%jSm%Zs6L zzytX}DagZ~mxsMC7wcDdt(e}g-aFsnuH5OvN4>*!@*ee|dbHHb7kXa4u++qixGBO6rUr6az?}w7Ihmw6%F@YTzBW za!@|7(fb0gS8#(sWtDp+@fEf591z|!Y$6&`1yUWCWgakF0fG*LYWP%lBDfJ%L;^xk z5WOUko-J^O7`AD*WjPD197sob1(tUWDu2mbr^?{C6@zMNK3Qw@j#)}K8Dv)%HrTeu z_7vSMh*%KN#KKM%FBn<>0~po-+0=;M0|(tYHMD57Wurh>k+(myMtv-L1*A%gV#CR=?-4! z<$_{^-NS6|;EwqYc3bYH4s|HiRL+avpu6$WXhp1;&oG z;IBEL8+qtXe&ffu^^H6Q%7&Lzl8c!~of=K#vF=w7gJm0X~#ZNt*@BgX1IQQi`U z)0^IX_{R^9>5KV$4}j&5wJtBAhOiW;o<*$Y%~?@DrMt4;DFj+^oL%1{1Fs&0TKiF-HpMzw0*-0-NUz10JuzWFj<3z)%>WQC zvpZ%YoiwqfrLAY@{vmT+_u5zw+HO&NQD6F?Jh+Q(*9^@zcvqhw<4~%xpW%qZ&V*i34f4LJPSNevcJb z2_>R?#Ra_Or~lbgqjHC~1=x&LgLSmDchhhp$`}@B-e^jZl)9nZ=Z5coVF99$@{iQ1-v0kr&{NV!%G!$vy%$zQd3Mw43m% zmsbl!_rz1P?)^df8oQYFg15rVrwx<>$hbw`cLQ+Dj&luq{#f@9YSkp#y*K&{dDn6Q z8eJE8F_)u5t!ueZDdD|bUJ7nQT*MYm?-!Tls~0Yx8GQTxOIOvbappN=1l^C4d3asr zELyi11K?`~)2LR()i>AZn2*YXScMSPHP2|UlvsI{92+l7eNUr{&zTxNNLbr=n7l_t zesyC(H1a+@3e{Guz8}Aoh1u;z>Mwu>kbjLVke>($8%FSF*G^lSvyF4;7c^W}RvsFXy>w%ft8a zxcKF-Die_pU8zO)B#k$eaMi^kcb)-xsK%bnOO2i)Q>hFTB^}+~k`H{B=Sa^&cfujm zU7gjNGdP5XYLQ)p1K39KvOgpR<#_; zR@q-u=-oQr6YDio9u9PX)E}A|kKr~dd=a4fX4&}wW4%k=kIsnG^-~&bV9J(S_pj=@ zI3;bd_mC+$NZEm{GF+jq!vYjv;b*>k4d?RjcCJ?+D(YAdoz%0QDnMGsRC&=nPX^$G zBz{uW(kGTNGk+_B>^^(}(wzJ*nN&e6&;fL_W*~2u3=wJAj5qcORMQEB>9qtMN9C zGcKORzrb4fc~~Z3l)@zUzhDgPH@)1H6; diff --git a/translations/focuswriter_vi.qm b/translations/focuswriter_vi.qm deleted file mode 100644 index db07f5c88d05151f7ce92a0692678904f4e4dc56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29356 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 VG?|eI-9mv;wirb89NHs?{|1u2(%b+5 diff --git a/translations/focuswriter_zh_CN.qm b/translations/focuswriter_zh_CN.qm deleted file mode 100644 index cea392b16b23f67ce43646b7413151e60ca5081e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28189 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 From e74ca4054a285e391be60e4135d4ca412fe73832 Mon Sep 17 00:00:00 2001 From: "Barak A. Pearlmutter" Date: Fri, 23 Sep 2016 19:10:24 +0100 Subject: [PATCH 305/630] log changes --- debian/changelog | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 7afb47dd..590db172 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ focuswriter (1.6.1-1) unstable; urgency=medium + [ Graeme Gott ] * New upstream release - -- Graeme Gott Mon, 19 Sep 2016 09:58:44 +0000 + [ Barak A. Pearlmutter ] + * use lrelease in debian/rules to regenerate tranlations/*.qm to + avoid issues with unrepresentable binary source files + + -- Barak A. Pearlmutter Fri, 23 Sep 2016 19:10:18 +0100 focuswriter (1.6.0-1) unstable; urgency=medium From 9254223f8c61e8e60d4f9a2ff55b05a4e88fafaf Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Sep 2016 08:45:47 -0400 Subject: [PATCH 306/630] Sync translations with Transifex. --- resources/unix/focuswriter.appdata.xml | 6 +- resources/unix/focuswriter.desktop | 3 + resources/unix/po/it.po | 30 ++- translations/focuswriter_it.qm | Bin 32769 -> 37867 bytes translations/focuswriter_it.ts | 320 ++++++++++++------------- 5 files changed, 190 insertions(+), 169 deletions(-) diff --git a/resources/unix/focuswriter.appdata.xml b/resources/unix/focuswriter.appdata.xml index 78a4670c..4c5f9cab 100644 --- a/resources/unix/focuswriter.appdata.xml +++ b/resources/unix/focuswriter.appdata.xml @@ -19,6 +19,7 @@ FocusWriter FocusWriter FocusWriter + FocusWriter FocusWriter 포커스 라이터 FocusWriter @@ -49,7 +50,7 @@

    מעבד תמלילים במסך מלא Լիէկրան տեքստային խմբագրիչ Layar Penuh - Un semplice editor di testo a pieno schermo + Un semplice elaboratore di testi a schermo intero フルスクリーン・ワードプロセッサ 풀스크린 워드 프로세서 Viso ekrano žodžių doroklė @@ -81,6 +82,7 @@

    ‏FocusWriter הינו מעבד תמלילים פשוט, נטול הפרעה. זה מנצל ממשק מחבוא (hide-away) אשר אליו ניגשים בעזרת הזזת עכבר על קצות המסך, מה שמתיר לתוכנית לקבל מראה ותחושה מוכרים בעוד שזה עדיין נותר באין מפריע כך שהתהא באפשרותך להשקיע את עצמך לתוך עבודתך.

    FocusWriter-ն արտաքին շեղումներից ուշադրությունը զերծ պահող պարզ տեքստային խմբագրիչ է։ Այն գործածում է թաքնվող միջերես, որը հասանելի է դառնում էկրանի ծայրերին մկնիկի շարժմամբ հպվելու միջոցով։ Սա թե՛ ծրագրին տալիս է գործածողի աչքի համար սովորական տեսք ու զգացողություն, թե՛ միաժամանակ նրան թույլ տալիս խորասուզվել աշխատանքի մեջ, առանց ուշադրությունն արտաքին հանգամանքներով շեղելու։

    FocusWriter merupakan pengolah kata yang bebas pengalihan dan sederhana. Menggunakan antarmuka yang Anda akses dengan cara menggerakkan mouse ke tepi layar, membuat program ini memilik tampilan yang familiar dan memudahkan Anda untuk menyelam ke dalam pekerjaan Anda.

    +

    FocusWriter è un elaboratore di testi semplice e senza distrazioni. Impiega un'interfaccia nascosta accessibile muovendo il puntatore del mouse ai lati dello schermo, dando al programma un aspetto familiare, rimanendo semplice e pulito, in modo che tu possa immergerti completamente nel tuo lavoro.

    FocusWriter はシンプルなディストラクション・フリーのワード・プロセッサーです。普段は隠されているインターフェイスにはマウスを画面端に動かすだけでアクセスできるようになっているので、プログラムの基本的なルック・アンド・フィールは維持したまま、作業に没頭することができるでしょう。

    포커스 라이터는, 글쓰기에 집중하게 해주는 간단한 워드 프로세서입니다. 마우스를 화면 끝에 대면 작동하는 하이드-어웨이 방식을 적용해서, 프로그램이 익숙한 모양과 느낌을 유지하게 해, 잠시 방해를 받아도 금방 하던 작업에 몰두하게 합니다.

    FocusWriter yra paprasta žodžių doroklė be išblaškymų. Ji naudoja besislepiančią sąsają, kurią galima pasiekti, nuvedant pelės žymeklį prie ekrano ribų. Ši sąsaja suteikia programai pažįstamą išvaizdą ir jausmą, todėl programa jums netrukdo, o jūs galite pilnai pasinerti į savo darbą.

    @@ -109,6 +111,7 @@

    ‏FocusWriter מאפשר לך להתאים את סביבתך על ידי יצירת ערכות נושא אשר שולטות על הגופן, הצבעים ועל תמונת הרקע כדי להוסיף אווירה. זה גם טומן בחובו עדכון סטטיסטיקה, יעדים יומיים, פתיחה מרובה של מסמכים, בדיקת-איות, ועוד הרבה יותר.

    FocusWriter-ը գործածողին թույլ է տալիս ստեղծել աշխատանքի սեփական միջավայր՝ թեմաների միջոցով, որոնցով կարելի է ընտրել տառատեսակը, գույները և որևէ նկարով խորապատկեր՝ որոշակի տրամադրություն ստեղծելու համար։ Այն նաև ցույց է տալիս մուտքագրվող նյութի մանրամասն վիճակագրությունը, թույլ տալիս սահմանել աշխատանքի օրական սահմանաքանակ, հնարավորություն ունի մեկ պատուհանում միանգամից շատ նիշքեր բացելու, ուղղագրությունը ստուգելու և այլն։

    FocusWriter membuat Anda untuk menciptakan lingkungan Anda sendiri dengan cara membuat tema yang mengatur jenis huruf, warna, dan gambar latar untuk menambah suasana. Program ini juga dilengkapi oleh statistika yang selalu diperbarui setiap saat, tujuan sehari-hari, membuka banyak dokumen sekaligus, pengecekan ejaan, dan masih banyak lagi.

    +

    FocusWriter ti consente di personalizzare il tuo ambiente di lavoro attraverso la creazione ti temi con carattere, colori, e immagine di sfondo scelti da te, creando un'atmosfera personale per immergerti nel tuo lavoro. Il programma include anche statistiche in tempo reale, obiettivi giornalieri, più documenti aperti contemporaneamente, controllo ortografico, e molto altro.

    FocusWriter ではフォント・色・背景画像などテーマとして作り、それを使って作業環境をカスタマイズすることができます。またリアルタイムな文書の統計情報の表示、進捗管理、複数文書の編集、スペル・チェッカーなどといった機能もあります。

    포커스 라이터는 폰트와, 색상을 조절하고, 배경 그림을 추가해 테마를 만들어서 작업 환경을 직접 만들 수 있게 되어있습니다. 포커스 라이터는 때에 따라서 이용할 수 있는 통계 업데이트, 오늘의 목표, 여러 건의 문서 열기, 맞춤법 검사, 등과 그 외에 아주 많은 기능을 갖고 있습니다.

    FocusWriter leidžia jums tinkinti savo aplinką, kuriant temas, kurios kontroliuoja šriftą, spalvas ir fono paveikslą bei sukuria norimą atmosferą. Programoje yra statistikos atnaujinimo, kasdienio tikslo, kelių atvertų dokumentų, rašybos tikrinimo ir daugybė kitų funkcijų.

    @@ -137,6 +140,7 @@

    נוסף על כך, כאשר תפתח את התוכנית העבודה שלך אשר מצויה בתהליך תיטען מחדש וימקם אותך היכן שנותרת בפעם אחרונה בה עזבת כך שתהא באפשרותך לקפוץ בחזרה מיידית.

    Բացի դրանից, ծրագիրը բացվելիս լռելյայն ցուցադրում է այն վերջին նիշքը, որի վրա գործածողն աշխատել է, և հենց այն հատվածում, որում նա վերջին անգամ փոփոխություն է կատարել, ինչը հնարավորություն է տալիս շարունակելու աշխատանքն այնտեղից, որտեղ այն վերջին անգամ ընդհատվել էր։

    Ditambah lagi, ketika Anda membuka program, pekerjaan Anda yang sedang dikerjaan akan otomatis dimuat dan memulai di mana Anda terakhir meninggalkannya sehingga Anda bisa memulainya lagi lebih cepat.

    +

    Inoltre, quando apri il programma il tuo lavoro in corso d'opera si apre automaticamente nella posizione in cui l'avevi lasciato, in modo che possa riprendere immediatamente a lavorarci.

    更には、現在のプロジェクトをプログラム開くと、以前の作業状況がカーソル位置も含め復元されるので、直ぐに続きを書き始めることが出来ます。

    그리고, 프로그램을 열면 작업하던 내용이 일을 멈추고 떠났던 그때 그대로 자동으로 복귀되어서 돌아오면 바로 하던 작업으로 다시 돌아갈 수 있습니다.

    Be to, kai atidarote programą, jūsų dabartinis darbas yra automatiškai įkeliamas toje vietoje, kurioje paskutinį kartą užbaigėte, todėl nedvejodami galite vėl kibti į darbą.

    diff --git a/resources/unix/focuswriter.desktop b/resources/unix/focuswriter.desktop index 6f24251f..f08444bc 100644 --- a/resources/unix/focuswriter.desktop +++ b/resources/unix/focuswriter.desktop @@ -16,6 +16,7 @@ Name[he]=FocusWriter Name[hu]=FocusWriter Name[hy]=FocusWriter Name[id]=FocusWriter +Name[it]=FocusWriter Name[ja]=FocusWriter Name[ko]=포커스 라이터 Name[lt]=FocusWriter @@ -49,6 +50,7 @@ GenericName[he]=מעבד תמלילים במסך מלא GenericName[hu]=Teljesképernyős szövegszerkesztő GenericName[hy]=Լիէկրան տեքստային խմբագրիչ GenericName[id]=Layar Penuh +GenericName[it]=Elaboratore di testi a schermo intero GenericName[ja]=フルスクリーン・ワードプロセッサ GenericName[ko]=풀스크린 워드 프로세서 GenericName[lt]=Viso ekrano žodžių doroklė @@ -82,6 +84,7 @@ Comment[he]=כתיבה ללא הסחות דעת Comment[hu]=Írjon zavartalanul Comment[hy]=Գրիր առանց ուշադրության շեղման Comment[id]=Menulis tanpa gangguan +Comment[it]=Scrivi senza distrazioni Comment[ja]=気を散らすことなく集中して文章を書けるワードプロセッサです Comment[ko]=글쓰기에 집중할 수 있는 Comment[lt]=Rašykite be blaškymosi diff --git a/resources/unix/po/it.po b/resources/unix/po/it.po index 39773bd6..81b8f8cf 100644 --- a/resources/unix/po/it.po +++ b/resources/unix/po/it.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Joe Potsdam, 2016 # marco , 2014 msgid "" msgstr "" "Project-Id-Version: FocusWriter\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 20:43+0000\n" -"PO-Revision-Date: 2014-10-04 19:01+0000\n" -"Last-Translator: marco \n" -"Language-Team: Italian (http://www.transifex.com/projects/p/focuswriter/" +"POT-Creation-Date: 2016-08-19 15:40+0000\n" +"PO-Revision-Date: 2016-09-26 10:44+0000\n" +"Last-Translator: Joe Potsdam\n" +"Language-Team: Italian (http://www.transifex.com/gottcode/focuswriter/" "language/it/)\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -21,11 +22,11 @@ msgstr "" #: ../focuswriter.appdata.xml.in.h:1 ../focuswriter.desktop.in.h:1 msgid "FocusWriter" -msgstr "" +msgstr "FocusWriter" #: ../focuswriter.appdata.xml.in.h:2 msgid "Fullscreen word processor" -msgstr "Un semplice editor di testo a pieno schermo" +msgstr "Un semplice elaboratore di testi a schermo intero" #: ../focuswriter.appdata.xml.in.h:3 msgid "" @@ -34,6 +35,10 @@ msgid "" "screen, allowing the program to have a familiar look and feel to it while " "still getting out of the way so that you can immerse yourself in your work." msgstr "" +"FocusWriter è un elaboratore di testi semplice e senza distrazioni. Impiega " +"un'interfaccia nascosta accessibile muovendo il puntatore del mouse ai lati " +"dello schermo, dando al programma un aspetto familiare, rimanendo semplice e " +"pulito, in modo che tu possa immergerti completamente nel tuo lavoro." #: ../focuswriter.appdata.xml.in.h:4 msgid "" @@ -42,6 +47,12 @@ msgid "" "features on-the-fly updating statistics, daily goals, multiple open " "documents, spell-checking, and much more." msgstr "" +"FocusWriter ti consente di personalizzare il tuo ambiente di lavoro " +"attraverso la creazione ti temi con carattere, colori, e immagine di sfondo " +"scelti da te, creando un'atmosfera personale per immergerti nel tuo lavoro. " +"Il programma include anche statistiche in tempo reale, obiettivi " +"giornalieri, più documenti aperti contemporaneamente, controllo ortografico, " +"e molto altro." #: ../focuswriter.appdata.xml.in.h:5 msgid "" @@ -49,11 +60,14 @@ msgid "" "automatically load and position you where you last left off so that you can " "immediately jump back in." msgstr "" +"Inoltre, quando apri il programma il tuo lavoro in corso d'opera si apre " +"automaticamente nella posizione in cui l'avevi lasciato, in modo che possa " +"riprendere immediatamente a lavorarci." #: ../focuswriter.desktop.in.h:2 msgid "Fullscreen Word Processor" -msgstr "" +msgstr "Elaboratore di testi a schermo intero" #: ../focuswriter.desktop.in.h:3 msgid "Write without distractions" -msgstr "" +msgstr "Scrivi senza distrazioni" diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index 35747c9db1a91510eefc253089453608c980f9b1..1424c881e6ace74ea3878cf4989fd89276856bcc 100644 GIT binary patch delta 9615 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 %1% of %Ln minute(s) - - - + + %1% minuti su %Ln + %1% minuti su %Ln %1% of %Ln word(s) - - - + + %1% su %Ln parole + %1% parole su %Ln %Ln word(s) - - - + + %Ln parole + %Ln parole %Ln minute(s) - - - + + %Ln minuti + %Ln minuti 0% - + 0% @@ -92,20 +92,20 @@ N/A - n.d. + n/d %n day(s) - - - + + %n giorni + %n giorni %1 &ndash; %2 - + %1 &ndash; %2 @@ -114,7 +114,7 @@ %1% of daily goal - + %1% dell'obiettivo giornaliero @@ -122,7 +122,7 @@ Set Language - Scegli lingua + Imposta lingua @@ -130,12 +130,12 @@ (Untitled %1) - (Senza nome %1) + (Senza titolo %1) %1 (Read-Only) - + %1 (sola lettura) @@ -164,7 +164,7 @@ Rename File - Rinomina File + Rinomina file @@ -174,17 +174,17 @@ Reload File? - Ricarica File? + Ricaricare il file? Reload the file '%1' from disk? - + Ricaricare il file '%1' dal disco? All unsaved changes will be lost. - Tutte le modifiche non salvate verranno perse. + Tutte le modifiche non salvate andranno perse. @@ -204,7 +204,7 @@ Saving as plain text will discard all formatting. Discard formatting? - Salvando come testo semplice la formattazione verrà persa. Eliminare la formattazione? + Se si salva nel formato solo testo, la formattazione andrà persa. Eliminare la formattazione? @@ -217,7 +217,7 @@ The file '%1' was changed by another program. - Il file %1 è stato modificato da un altro programma. + Il file '%1' è stato modificato da un altro programma. @@ -242,12 +242,12 @@ The file %1 was deleted by another program. - Il file %1 è stato modificato da un altro programma. + Il file '%1' è stato modificato da un altro programma. Do you want to save or close the file? - Vuoi salvare o chiudere il file? + Vuoi salvare il file o chiuderlo? @@ -255,7 +255,7 @@ Unable to open archive. - Impossibile aprire archivio. + Impossibile aprire l'archivio. @@ -268,7 +268,7 @@ Replace with: - Sostituire con: + Sostituisci con: @@ -356,32 +356,32 @@ OpenDocument Flat XML - + OpenDocument (*.xml) Office Open XML - + Office Open XML Rich Text Format - Rich Text (*. rtf) + Rich Text Format (*.rtf) Plain Text - Testo semplice (*.txt) + Documenti di testo (*.txt) All Files - Tutti i files + Tutti i file All Supported Files - Formati supportati + Tutti i formati supportati @@ -420,7 +420,7 @@ Select application language: - Selezionare una lingua per l'applicazione: + Seleziona una lingua da utilizzare per l'applicazione: @@ -435,7 +435,7 @@ Please restart this application for the change in language to take effect. - Per modificare la lingua riavviare l'applicazione. + Per modificare la lingua è necessario riavviare l'applicazione. @@ -443,7 +443,7 @@ Unable to open archive. - Impossibile aprire archivio. + Impossibile aprire l'archivio. @@ -466,7 +466,7 @@ Toolbar - Toolbar + Barra degli strumenti @@ -476,7 +476,7 @@ Select Dictionary - Selezionare Dizionario + Seleziona un dizionario @@ -487,7 +487,7 @@ Unable to open archive. - Impossibile aprire archivio. + Impossibile aprire l'archivio. @@ -505,12 +505,12 @@ Shortcuts - Scorciatioie + Tasti di scelta rapida One or more shortcuts conflict. Do you wish to proceed? - C'è un conflitto di scorciatoie. Continuare? + C'è un conflitto tra tra i tasti di scelta rapida. Continuare comunque? @@ -546,12 +546,12 @@ Always vertically center - Sempre centrato in verticale + Centra sempre in verticale Block insertion cursor - Blocca inserimento del cursore + Blocca cursore di inserimento @@ -641,42 +641,42 @@ Reset daily progress for today to zero? - Resettare a zero i progressi quotidiani? + Resettare a zero i progressi di oggi? Remove current dictionary? - + Rimuovere il dizionario attualmente in uso? Write byte order mark in plain text files - + Scrivi il BOM (Byte Order Mark) nei file di puro testo Default format: - Formato preimpostato: + Formato predefinito: User Interface - + Interfaccia utente Always show scrollbar - + Mostra sempre barra di scorrimento Always show top bar - + Mostra sempre barra superiore Always show bottom bar - + Mostra sempre barra inferiore @@ -701,22 +701,22 @@ Minimum progress for streaks: - Minimo progresso per sequenza: + Progresso minimo per sequenza: Detect word boundaries - Rileva limiti delle parole + Rileva spazi tra le parole Divide character count by six - Dividere per sei il conteggio caratteri + Dividi per sei il conteggio dei caratteri Count each letter as a word - Computa ciascuna lettera come parola + Conta ciascuna lettera come una parola @@ -741,7 +741,7 @@ Text Alongside Icons - Testo e icone allineate + Testo allineato alle icone @@ -781,7 +781,7 @@ Shortcut - Scorciatoia + Tasti di scelta rapida @@ -906,7 +906,7 @@ Default - Default + Predefinito @@ -969,7 +969,7 @@ Delete selected session? - Eliminare sessione selezionata? + Eliminare la sessione selezionata? @@ -989,22 +989,22 @@ &New... - &New... + &Nuova... Ctrl+Shift+N - Ctrl + Maiusc + N + Ctrl+Maiusc+N &Manage... - &Gestione... + &Gestisci... Ctrl+Shift+M - Ctrl + Maiusc + M + Ctrl+Maiusc+M @@ -1017,13 +1017,13 @@ Reset to Default - Ripristina default + Ripristina predefinito Shortcut: - Scorciatoia: + Tasto di scelta rapida: @@ -1031,7 +1031,7 @@ Replacing quotation marks... - Sostituzione virgolette ... + Sostituzione virgolette... @@ -1099,7 +1099,7 @@ Continue checking at beginning of file? - + Continuare il controllo dall'inizio del file? @@ -1171,7 +1171,7 @@ No Image - Nessuna Immagine + Nessuna immagine @@ -1188,7 +1188,7 @@ Stretched - Stirato + Allargato @@ -1213,34 +1213,34 @@ Width: - + Larghezza: Round Text Background Corners - + Angoli arrotondati sfondo del testo Radius: - + Raggio: Blur Text Background - + Sfondo del testo sfumato Text Background Drop Shadow - + Ombra sfondo del testo Vertical Offset: - + Orientamento verticale: @@ -1260,7 +1260,7 @@ Indent first line - Indenta prima linea + Applica rientro ad ogni prima riga @@ -1388,12 +1388,12 @@ Tab Width: - + Larghezza scheda: New Theme - + Nuovo tema @@ -1406,47 +1406,47 @@ Default - Default + Predefinito Bitter Skies - + Cieli amari Enchantment - + Incantesimo Gentle Blues - + Dolce blues Old School - + Vecchia scuola Space Dreams - + Sogni dallo spazio Spy Games - + Giochi da spia Tranquility - + Tranquillità Writing Desk - + Scrittoio @@ -1458,12 +1458,12 @@ Duplicate - Duplicato + Duplica Custom - Personalizzato + Personalizza @@ -1483,7 +1483,7 @@ Export - Export + Esporta @@ -1493,7 +1493,7 @@ Delete theme '%1'? - + Cancellare il tema '%1'? @@ -1504,12 +1504,12 @@ Import Theme - Importa Tema + Importa tema Export Theme - Esporta Tema + Esporta tema @@ -1527,27 +1527,27 @@ Delete timer? - Cancella timer? + Cancellare il conteggio del tempo? <b>Words:</b> %L1 - <b>Parole</b> %L1 + <b>Parole:</b> %L1 <b>Pages:</b> %L1 - <b>Pagine</b> %L1 + <b>Pagine:</b> %L1 <b>Paragraphs:</b> %L1 - <b>Paragrafi</b> %L1 + <b>Paragrafi:</b> %L1 <b>Characters:</b> %L1 / %L2 - <b>Caratteri</b> %L1 / %L2 + <b>Caratteri:</b> %L1 / %L2 @@ -1587,7 +1587,7 @@ Memo: - Memo: + Promemoria: @@ -1628,7 +1628,7 @@ Recent - Recenti + Documenti recenti @@ -1638,7 +1638,7 @@ Cancel editing timers? - Annulla modifica timer? + Annullare la modifica al timer? @@ -1656,12 +1656,12 @@ Loading themes - Caricamento temi + Carica tema Loading sounds - Caricamento suoni + Carica suoni @@ -1677,7 +1677,7 @@ About FocusWriter - A proposito di FocusWriter + Info su FocusWriter @@ -1688,7 +1688,7 @@ A simple fullscreen word processor - Un semplice editor di testo a pieno schermo + Un semplice elaboratore di testi a schermo intero @@ -1714,7 +1714,7 @@ Characters: %L1 / %L2 - Caratteri:%L1 / %L2 + Caratteri: %L1 / %L2 @@ -1738,7 +1738,7 @@ Opening %1 - Apertura %1 + Apertura di %1 @@ -1748,7 +1748,7 @@ List all documents - Lista tutti i documenti + Mostra tutti i documenti @@ -1778,12 +1778,12 @@ Loading settings - Caricamento impostazioni + Caricamento delle impostazioni Emergency cache is not writable. - La cache di emergenza non è scrivibile + La cache di emergenza non è scrivibile. @@ -1799,7 +1799,7 @@ Restore from the emergency cache? - Ripristinare dalla cache di emergenza? + Ripristinare i file dalla cache di emergenza? @@ -1814,7 +1814,7 @@ '%1' is newer than the cached copy. - '%1' è più recente della copia in cache. + '%1' è più recente della copia memorizzata nella cache. @@ -1829,17 +1829,17 @@ Save changes to the file '%1' before closing? - + Salvare le modifiche al file '%1' prima di chiudere? Your changes will be lost if you don't save them. - Le tue modifiche andranno perse se non le salvi. + Le modifiche apportate al file andranno perse se non vengono prima salvate. Unable to load typewriter sounds. - Impossibile caricare i suoni della macchina per scrivere. + Impossibile caricare i suoni della macchina da scrivere. @@ -1859,7 +1859,7 @@ Reloa&d - Ricarica + &Ricarica @@ -1874,12 +1874,12 @@ &Rename... - &Rinomina... + Rino&mina... Save A&ll - Salva + Salva &tutto @@ -1894,12 +1894,12 @@ &Print... - &Stampa... + Stam&pa... Pa&ge Setup... - + Imp&osta pagina @@ -1914,7 +1914,7 @@ Ctrl+Q - Ctrl + Q + Ctrl+Q @@ -1949,7 +1949,7 @@ Paste &Unformatted - Incolla &non formattato + Incolla senza &formattazione @@ -1979,37 +1979,37 @@ &Heading - + &Intestazione Heading &1 - + Intestazione &1 Heading &2 - + Intestazione &2 Heading &3 - + Intestazione &3 Heading &4 - + Intestazione &4 Heading &5 - + Intestazione &5 Heading &6 - + Intestazione &6 @@ -2039,7 +2039,7 @@ Ctrl+K - Ctrl + K + Ctrl+K @@ -2049,7 +2049,7 @@ Ctrl+^ - Ctrl + ^ + Ctrl+^ @@ -2059,77 +2059,77 @@ Ctrl+_ - Ctrl + _ + Ctrl+_ Align &Left - Allinea &Sinistra + Allinea a &sinistra Ctrl+{ - Ctrl + { + Ctrl+{ Align &Center - Allinea &Cenro + Allinea al &centro Ctrl+| - Ctrl + | + Ctrl+| Align &Right - Allinea &Right + Allinea a &destra Ctrl+} - Ctrl + } + Ctrl+} Align &Justify - Allineare &p;Giustificato + &Giustificato Ctrl+J - Ctrl + J + Ctrl+J &Decrease Indent - & Riduci rientro + &Riduci rientro Ctrl+< - Ctrl + < + Ctrl+< I&ncrease Indent - A&umentare rientro + A&umenta rientro Ctrl+> - Ctrl + > + Ctrl+> Le&ft to Right Block - Blocco da sinistra a destra + &Blocco da sinistra a destra Ri&ght to Left Block - Blocco da destra a sinistra + Blo&cco da destra a sinistra @@ -2149,7 +2149,7 @@ Find Pre&vious - Trova Pre&cedente + Trova pre&cedente @@ -2164,12 +2164,12 @@ Smart &Quotes - &Citazioni + &Virgolette Update &Document - Aggiorna &document + Aggiorna &documento @@ -2189,7 +2189,7 @@ Set &Language... - Scegli &lingua + Scegli la &lingua @@ -2289,7 +2289,7 @@ Ctrl+Shift+` - + Ctrl+Shift+` @@ -2304,22 +2304,22 @@ Some files were unsupported and could not be opened. - Qualche file non è supportato e non è stato aperto. + Alcuni file non sono supportati e pertanto non è possibile aprirli. &Off - Non attivo + Non &attivo One &Line - Una &Linea + Una &linea &Three Lines - &Tre Linee + &Tre linee From 62293467ba938517d15623f812479066f052dba6 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Sep 2016 18:01:33 -0400 Subject: [PATCH 307/630] Update strings. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 42082d64..9c6315a0 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1418,10 +1418,10 @@ void Window::initMenus() tools_menu->addSeparator(); QMenu* quotes_menu = tools_menu->addMenu(tr("Smart &Quotes")); m_replace_document_quotes = quotes_menu->addAction(tr("Update &Document"), m_documents, SLOT(updateSmartQuotes())); - m_replace_document_quotes->setStatusTip("Update Document Smart Quotes"); + m_replace_document_quotes->setStatusTip(tr("Update Document Smart Quotes")); ActionManager::instance()->addAction("SmartQuotesUpdateDocument", m_replace_document_quotes); m_replace_selection_quotes = quotes_menu->addAction(tr("Update &Selection"), m_documents, SLOT(updateSmartQuotesSelection())); - m_replace_selection_quotes->setStatusTip("Update Selection Smart Quotes"); + m_replace_selection_quotes->setStatusTip(tr("Update Selection Smart Quotes")); ActionManager::instance()->addAction("SmartQuotesUpdateSelection", m_replace_selection_quotes); tools_menu->addSeparator(); m_actions["CheckSpelling"] = tools_menu->addAction(QIcon::fromTheme("tools-check-spelling"), tr("&Spelling..."), m_documents, SLOT(checkSpelling()), tr("F7")); From d35f3621a433cfb91933da419690333fc071077c Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Mon, 26 Sep 2016 21:15:55 -0400 Subject: [PATCH 308/630] Sync translations with Transifex. --- translations/focuswriter_af_ZA.ts | 10 ++++ translations/focuswriter_ar.ts | 10 ++++ translations/focuswriter_ca.ts | 10 ++++ translations/focuswriter_cs.ts | 10 ++++ translations/focuswriter_da.ts | 10 ++++ translations/focuswriter_de.ts | 10 ++++ translations/focuswriter_el.ts | 10 ++++ translations/focuswriter_en.ts | 10 ++++ translations/focuswriter_en_GB.ts | 10 ++++ translations/focuswriter_eo.ts | 10 ++++ translations/focuswriter_es.ts | 10 ++++ translations/focuswriter_es_MX.ts | 10 ++++ translations/focuswriter_fi.ts | 10 ++++ translations/focuswriter_fr.ts | 10 ++++ translations/focuswriter_he.ts | 10 ++++ translations/focuswriter_hu.ts | 10 ++++ translations/focuswriter_hy.qm | Bin 37252 -> 37493 bytes translations/focuswriter_hy.ts | 10 ++++ translations/focuswriter_id.ts | 10 ++++ translations/focuswriter_it.qm | Bin 37867 -> 38352 bytes translations/focuswriter_it.ts | 86 +++++++++++++++++------------- translations/focuswriter_ja.ts | 10 ++++ translations/focuswriter_ko.ts | 10 ++++ translations/focuswriter_lt.ts | 10 ++++ translations/focuswriter_nl.ts | 10 ++++ translations/focuswriter_pl.ts | 10 ++++ translations/focuswriter_pt.ts | 10 ++++ translations/focuswriter_pt_BR.qm | Bin 37987 -> 38250 bytes translations/focuswriter_pt_BR.ts | 10 ++++ translations/focuswriter_ro.qm | Bin 37242 -> 37549 bytes translations/focuswriter_ro.ts | 10 ++++ translations/focuswriter_ru.ts | 10 ++++ translations/focuswriter_sk.ts | 10 ++++ translations/focuswriter_sr.ts | 10 ++++ translations/focuswriter_sv.ts | 10 ++++ translations/focuswriter_tr.ts | 10 ++++ translations/focuswriter_uk.ts | 10 ++++ translations/focuswriter_vi.ts | 10 ++++ translations/focuswriter_zh_CN.ts | 10 ++++ 39 files changed, 388 insertions(+), 38 deletions(-) diff --git a/translations/focuswriter_af_ZA.ts b/translations/focuswriter_af_ZA.ts index 10e4a6ba..dd8d8958 100644 --- a/translations/focuswriter_af_ZA.ts +++ b/translations/focuswriter_af_ZA.ts @@ -2171,11 +2171,21 @@ Update &Document + + + Update Document Smart Quotes + + Update &Selection + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index 12f9bdb6..e703267c 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -2195,11 +2195,21 @@ Update &Document + + + Update Document Smart Quotes + + Update &Selection + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 8ed0e21f..525faa5a 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -2171,11 +2171,21 @@ Update &Document Actualitza el document + + + Update Document Smart Quotes + + Update &Selection Actualitza la selecció + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index eac00052..a623f0e1 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -2177,11 +2177,21 @@ Update &Document Obnovit &dokument + + + Update Document Smart Quotes + + Update &Selection Obnovit &výběr + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index 3d5a0348..bc3069d4 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -2171,11 +2171,21 @@ Update &Document Opdater &dokument + + + Update Document Smart Quotes + + Update &Selection Opdater &markering + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index c93de7db..7db389f0 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -2171,11 +2171,21 @@ Update &Document &Dokument aktualisieren + + + Update Document Smart Quotes + + Update &Selection Aus&wahl aktualisieren + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index 1cdb157c..e9f7023d 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -2171,11 +2171,21 @@ Update &Document Ενη&μέρωση εγγράφου + + + Update Document Smart Quotes + + Update &Selection Ε&νημέρωση Επιλογής + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 90ddaa66..45fe3bca 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -2171,11 +2171,21 @@ Update &Document + + + Update Document Smart Quotes + + Update &Selection + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index dce6d573..355a1a20 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -2171,11 +2171,21 @@ Update &Document Update &Document + + + Update Document Smart Quotes + + Update &Selection Update &Selection + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index d8922805..7f400ec8 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -2171,11 +2171,21 @@ Update &Document Ĝisdatigi Dokumenton + + + Update Document Smart Quotes + + Update &Selection Ĝisdatigi Elekton + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 7b5f997f..7094ed01 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -2171,11 +2171,21 @@ Update &Document Actualizar &documento + + + Update Document Smart Quotes + + Update &Selection Actualizar &selección + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 700c0fa7..1b22cb46 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -2171,11 +2171,21 @@ Update &Document Actualizar &documento + + + Update Document Smart Quotes + + Update &Selection Actualizar &selección + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index f3b08796..999806e9 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -2171,11 +2171,21 @@ Update &Document Päivitä &asiakirja + + + Update Document Smart Quotes + + Update &Selection Päivitä &valinta + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 422b07ac..786ade89 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -2171,11 +2171,21 @@ Update &Document Mettre à jour le &document + + + Update Document Smart Quotes + + Update &Selection Mettre à jour la &sélection + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index b825b9e7..f3ed16fb 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -2171,11 +2171,21 @@ Update &Document עדכן &מסמך + + + Update Document Smart Quotes + + Update &Selection עדכן &בחירה + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index d7e5cfee..50d5a178 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -2165,11 +2165,21 @@ Update &Document &Dokumentum frissítése + + + Update Document Smart Quotes + + Update &Selection &Kijelölés frissítése + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_hy.qm b/translations/focuswriter_hy.qm index 70fb638b10f8d496d271e1ae9891e2f5f2ef8c66..97ab98195d286062d1ba4472e5d18d4cae61d218 100644 GIT binary patch delta 285 zcmZo!%=C2$(*zO585>0tndH~}W@cb$+{L)%&t?XO>PW_$^;a1f^4J)kDzP#!G`*kP z%Vf#!wb~e{#&`2krZ!fl7U|8t9P&(zk0$4G)iE{cZGOw;#>mvXX0s_zHX~EZ;mwP9 z0~>kGSUp&qSc`x#l{IH_L61l{g92+MYa(ktP@sXep0x~2XK*k80UHp@gchVEmZU1U z1m`9el_&(3=9i=vvx5|cXXd5kmooyL%V2{reey#$QI`^+!L_W}1gwyS WS`nO@lbT$TnV*MZ$L7a<3z-1+ds2@8 delta 72 zcmV-O0Js13qymJa0+18|h_Mx60+W6M76A^El>#}l)&hkE0)slUT?iin0RfYJ3Vs5C eO|$(9MganX%dUpdate &Document &Թարմացնել փաստաթուղթը + + + Update Document Smart Quotes + Ուղղել փաստաթղթի չակերտները + Update &Selection Թարմացնել &ընտրված հատվածը + + + Update Selection Smart Quotes + Ուղղել ընտրված մասի չակերտները + &Spelling... diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index 81c4dd48..cabb1c0b 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -2165,11 +2165,21 @@ Update &Document Perbarui &Dokumen + + + Update Document Smart Quotes + + Update &Selection Perbarui &Seleksi + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index 1424c881e6ace74ea3878cf4989fd89276856bcc..036012683f1f9ee18c7a101574dc68e6050ca0cf 100644 GIT binary patch delta 4617 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 QW^T^EmDpQmtgB}K57eIkEdT%j delta 4371 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 diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index 394dc5f0..b4b19fe9 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -351,12 +351,12 @@ OpenDocument Text - OpenDocument (*.odt) + OpenDocument Text OpenDocument Flat XML - OpenDocument (*.xml) + OpenDocument Flat XML @@ -366,12 +366,12 @@ Rich Text Format - Rich Text Format (*.rtf) + Rich Text Format Plain Text - Documenti di testo (*.txt) + Documenti di testo @@ -510,7 +510,7 @@ One or more shortcuts conflict. Do you wish to proceed? - C'è un conflitto tra tra i tasti di scelta rapida. Continuare comunque? + C'è un conflitto tra i tasti di scelta rapida. Continuare comunque? @@ -666,22 +666,22 @@ Always show scrollbar - Mostra sempre barra di scorrimento + Mostra sempre la barra di scorrimento Always show top bar - Mostra sempre barra superiore + Mostra sempre la barra superiore Always show bottom bar - Mostra sempre barra inferiore + Mostra sempre la barra inferiore Reset Today - Azzera Oggi + Azzera le statistiche di oggi @@ -691,7 +691,7 @@ Remember history - Ricorda cronologia + Salva cronologia @@ -741,7 +741,7 @@ Text Alongside Icons - Testo allineato alle icone + Allinea testo alle icone @@ -781,7 +781,7 @@ Shortcut - Tasti di scelta rapida + Tasto di scelta rapida @@ -832,7 +832,7 @@ Not a supported RTF file. - Non è un file RTF supportato. + Questo file non è un file RTF supportato. @@ -974,7 +974,7 @@ Session name: - Nome sessione: + Nome della sessione: @@ -984,7 +984,7 @@ The requested session name is already in use. - Il nome di sessione richiesto è già in uso. + Il nome della sessione richiesto è già in uso. @@ -1064,22 +1064,22 @@ &Change - &Cambia + &Sostituisci C&hange All - Cambia t&utto + Sostituisci t&utto Not in dictionary: - Non nel dizionario: + La parola evidenziata in rosso non è presente nel dizionario: Change to: - Cambia in: + Sostituisci con: @@ -1260,7 +1260,7 @@ Indent first line - Applica rientro ad ogni prima riga + Applica rientro ad ogni a capo @@ -1363,7 +1363,7 @@ 1.5 Lines - 1.5 linee + 1,5 righe @@ -1388,7 +1388,7 @@ Tab Width: - Larghezza scheda: + Rientro prima riga: @@ -1436,7 +1436,7 @@ Spy Games - Giochi da spia + Giochiamo alla spia @@ -1638,7 +1638,7 @@ Cancel editing timers? - Annullare la modifica al timer? + Annullare le modifiche al timer? @@ -1656,12 +1656,12 @@ Loading themes - Carica tema + Caricamento del tema Loading sounds - Carica suoni + Caricamento dei suoni @@ -1783,7 +1783,7 @@ Emergency cache is not writable. - La cache di emergenza non è scrivibile. + La cache di ripristino non è scrivibile. @@ -1799,7 +1799,7 @@ Restore from the emergency cache? - Ripristinare i file dalla cache di emergenza? + Ripristinare i file dalla cache? @@ -1974,7 +1974,7 @@ Fo&rmat - For&matta + For&mattazione @@ -2064,7 +2064,7 @@ Align &Left - Allinea a &sinistra + Allinea testo a &sinistra @@ -2074,7 +2074,7 @@ Align &Center - Allinea al &centro + &Centra testo @@ -2084,7 +2084,7 @@ Align &Right - Allinea a &destra + Allinea testo a &destra @@ -2094,7 +2094,7 @@ Align &Justify - &Giustificato + &Giustifica testo @@ -2124,12 +2124,12 @@ Le&ft to Right Block - &Blocco da sinistra a destra + &Blocca testo a sinistra Ri&ght to Left Block - Blo&cco da destra a sinistra + Blo&cca testo a destra @@ -2171,15 +2171,25 @@ Update &Document Aggiorna &documento + + + Update Document Smart Quotes + Aggiorna virgolette nel documento + Update &Selection Aggiorna &selezione + + + Update Selection Smart Quotes + Aggiorna virgolette nel testo selezionato + &Spelling... - &Ortografia... + Controllo &ortografico... @@ -2189,7 +2199,7 @@ Set &Language... - Scegli la &lingua + Imposta &lingua @@ -2219,7 +2229,7 @@ Show &Menu Icons - Mostra &icone del menu + Mostra &icone nei menu diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index f742114d..1aaf1630 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -2165,11 +2165,21 @@ Update &Document 文書全体に適用 (&D) + + + Update Document Smart Quotes + + Update &Selection 選択範囲に適用 (&S) + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index d7eb7636..036dd26a 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -2165,11 +2165,21 @@ Update &Document &문서에 적용 + + + Update Document Smart Quotes + + Update &Selection &선택한 내용 적용 + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index df68c9ce..d6720efc 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -2177,11 +2177,21 @@ Update &Document Atnaujinti &dokumentą + + + Update Document Smart Quotes + + Update &Selection Atnaujinti žymėji&mą + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 17187bd1..4bae9f7b 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -2171,11 +2171,21 @@ Update &Document &Dokument bijwerken + + + Update Document Smart Quotes + + Update &Selection Selecti&e bijwerken + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index d80e95ae..5d965520 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -2177,11 +2177,21 @@ Update &Document Aktualizuj &dokument + + + Update Document Smart Quotes + + Update &Selection Aktualizuj z&aznaczenie + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 962c8f0b..48693f0c 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -2171,11 +2171,21 @@ Update &Document Actualizar &documento + + + Update Document Smart Quotes + + Update &Selection Actualizar a &selecção + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm index 5f217e2d73340489b1227137582d737dfd53d871..0d4ac6e747c2b5546e777f14f8710766fcdd488c 100644 GIT binary patch delta 280 zcmaF7g6Y*NrU@d9Gd7AQGRd#`&CI~ia*T1ypUn&mb*zjx>#s5}6f`kDRbpjeXni=j zm&uadYqc>@jpyd0Ozo_Uzc>4G$T2as?U|g*Rmarou=y>Q8zWQOgw3Wr*^Er>8#gcF z^=)Bvo4jD6sB|JjF+%|Zh*V%mVJHQ%bD+Gu$$tIvdNQE}DTyVi3NHD{rManjB?`g0 ziA5y}fu;E+sm1IJ3=C}HnRzMs<%~c#GB|;Z48db0&}apqRjEKrQW>5zJZ8w}0BU1k a17caIMZu{#smUdo`FSWdZN5LTg$V%C)>K^p delta 90 zcmV-g0Hy!xssiJv0+18|h_Mx60vELWvj6~o1p(QA)c^o+f&t|s1pokq>XVfMIkVOR wh6Moxvt0-t0s@7_lYI()0)$Dk{R&0_0)?5gMGR{J0*1P?vJFjyv-Xm70^HysLI3~& diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index e1b0efcd..bae8caae 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -2171,11 +2171,21 @@ Update &Document Atualizar &documento + + + Update Document Smart Quotes + Atualizar aspas duplas no documento + Update &Selection Atualizar &seleção + + + Update Selection Smart Quotes + Atualizar aspas duplas na seleção + &Spelling... diff --git a/translations/focuswriter_ro.qm b/translations/focuswriter_ro.qm index 42913182bef6b5963a58c2027feb25af0380fd06..64a09253165cc4300b80ad79817872f50b07bbc4 100644 GIT binary patch delta 285 zcmeyhh-vLorU@d9Gd7AQGRd#`&CI~i_=0iEpUn&m)yj-F>#s5}eFF0PAqW5f diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 6395fb6f..03669e72 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -2177,11 +2177,21 @@ Update &Document Actualizare &document + + + Update Document Smart Quotes + Actualizare ghilimele inteligente în document + Update &Selection Actualizare &selecţie + + + Update Selection Smart Quotes + Actualizare ghilimele inteligente în selecţie + &Spelling... diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index bc61fcec..c6811e84 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -2177,11 +2177,21 @@ Update &Document Во всём &документе + + + Update Document Smart Quotes + + Update &Selection В &выделенном + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 7a30aa2a..3738a981 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -2177,11 +2177,21 @@ Update &Document Aktualizovať &dokument + + + Update Document Smart Quotes + + Update &Selection Aktualizovať &výber + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index ee518f23..a45bdfac 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -2177,11 +2177,21 @@ Update &Document Ажурирај &документ + + + Update Document Smart Quotes + + Update &Selection Ажурирај &одабир + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index d0cdb96c..34532664 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -2171,11 +2171,21 @@ Update &Document Uppdatera &dokument + + + Update Document Smart Quotes + + Update &Selection Uppdatera &markering + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index c51cbf6d..2be00def 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -2165,11 +2165,21 @@ Update &Document &Dökümanı Güncelle + + + Update Document Smart Quotes + + Update &Selection &Seçilimi Güncelle + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index 06194b08..fff4e594 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -2177,11 +2177,21 @@ Update &Document Оновити &документ + + + Update Document Smart Quotes + + Update &Selection Оновити &виділене + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 9ed429dc..01d8b557 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -2165,11 +2165,21 @@ Update &Document Cập nhật tà&i liệu + + + Update Document Smart Quotes + + Update &Selection Cập nhật v&ùng lựa chọn + + + Update Selection Smart Quotes + + &Spelling... diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index f4132bda..30553b4f 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -2165,11 +2165,21 @@ Update &Document 更新文档(&D) + + + Update Document Smart Quotes + + Update &Selection 更新所选(&S) + + + Update Selection Smart Quotes + + &Spelling... From f17e7d7ed63253455a381a333e0a236bf9002039 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Tue, 27 Sep 2016 14:26:41 -0400 Subject: [PATCH 309/630] Sync translations with Transifex. --- translations/focuswriter_lt.qm | Bin 37733 -> 38008 bytes translations/focuswriter_lt.ts | 34 ++++++++++++++++----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm index 3a4f00eb123ae352ff8338b2c29a782845e81fdb..04cc3495f15c6c77c2029a9ea40eda470a6079b2 100644 GIT binary patch delta 3352 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 DAaH}M diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index d6720efc..a409b789 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -572,7 +572,7 @@ Smart quotes: - Protingosios kabutės: + Išmaniosios kabutės: @@ -920,7 +920,7 @@ Manage Sessions - Tvarkyti sesijas + Tvarkyti seansus @@ -955,17 +955,17 @@ New Session - Nauja sesija + Naujas seansas Duplicate Session - Dubliuoti sesiją + Dubliuoti seansą Rename Session - Pervadinti sesiją + Pervadinti seansą @@ -975,12 +975,12 @@ Delete selected session? - Ištrinti pasirinktą sesiją? + Ištrinti pasirinktą seansą? Session name: - Sesijos pavadinimas: + Seanso pavadinimas: @@ -990,7 +990,7 @@ The requested session name is already in use. - Užklaustas sesijos pavadinimas jau yra naudojamas. + Užklaustas seanso pavadinimas jau yra naudojamas. @@ -1890,12 +1890,12 @@ Manage Sessions - Tvarkyti sesijas + Tvarkyti seansus New Session - Nauja sesija + Naujas seansas @@ -1925,7 +1925,7 @@ &Edit - &Keisti + &Taisa @@ -1965,12 +1965,12 @@ Select &All - Pažymėti &viską + Žymėti &viską Select &Scene - Pažymėti &sceną + Žymėti &sceną @@ -2170,7 +2170,7 @@ Smart &Quotes - Protingosios ka&butės + Išmaniosios ka&butės @@ -2180,7 +2180,7 @@ Update Document Smart Quotes - + Atnaujinti dokumento išmaniąsias kabutes @@ -2190,7 +2190,7 @@ Update Selection Smart Quotes - + Atnaujinti žymėjimo išmaniąsias kabutes @@ -2310,7 +2310,7 @@ &Help - &Pagalba + Ž&inynas From 6fad5f37dbed9065ad4eec9b8517fbb466435cb1 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 28 Sep 2016 14:47:11 -0400 Subject: [PATCH 310/630] FIXED: Was not properly loading Qt translations. --- src/locale_dialog.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/locale_dialog.cpp b/src/locale_dialog.cpp index 41c101f3..fc350861 100644 --- a/src/locale_dialog.cpp +++ b/src/locale_dialog.cpp @@ -114,13 +114,16 @@ void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadi } // Load translators - static QTranslator qt_translator; - if (translations.contains("qt_" + current) || translations.contains("qt_" + current.left(2))) { - qt_translator.load("qt_" + current, m_path); - } else { - qt_translator.load("qt_" + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + const QStringList qtbasenames({"qt_", "qtbase_", "qtmultimedia_"}); + for (const QString& basename : qtbasenames) { + QTranslator* qt_translator = new QTranslator(QCoreApplication::instance()); + if (translations.contains(basename + current) || translations.contains(basename + current.left(2))) { + qt_translator->load(basename + current, m_path); + } else { + qt_translator->load(basename + current, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + } + QCoreApplication::installTranslator(qt_translator); } - QCoreApplication::installTranslator(&qt_translator); static QTranslator translator; translator.load(m_appname + current, m_path); From ec071a4fbd47e1bd9efb2b3dac69ec27b9919584 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Wed, 28 Sep 2016 17:47:17 -0400 Subject: [PATCH 311/630] Sync translations with Transifex. --- translations/focuswriter_af_ZA.ts | 4 ++-- translations/focuswriter_ar.ts | 4 ++-- translations/focuswriter_ca.ts | 4 ++-- translations/focuswriter_cs.ts | 4 ++-- translations/focuswriter_da.ts | 4 ++-- translations/focuswriter_de.ts | 4 ++-- translations/focuswriter_el.ts | 4 ++-- translations/focuswriter_en.ts | 4 ++-- translations/focuswriter_en_GB.ts | 4 ++-- translations/focuswriter_eo.ts | 4 ++-- translations/focuswriter_es.ts | 4 ++-- translations/focuswriter_es_MX.ts | 4 ++-- translations/focuswriter_fi.ts | 4 ++-- translations/focuswriter_fr.ts | 4 ++-- translations/focuswriter_he.ts | 4 ++-- translations/focuswriter_hu.ts | 4 ++-- translations/focuswriter_hy.ts | 4 ++-- translations/focuswriter_id.ts | 4 ++-- translations/focuswriter_it.qm | Bin 38352 -> 38340 bytes translations/focuswriter_it.ts | 6 +++--- translations/focuswriter_ja.ts | 4 ++-- translations/focuswriter_ko.ts | 4 ++-- translations/focuswriter_lt.ts | 4 ++-- translations/focuswriter_nl.ts | 4 ++-- translations/focuswriter_pl.ts | 4 ++-- translations/focuswriter_pt.ts | 4 ++-- translations/focuswriter_pt_BR.ts | 4 ++-- translations/focuswriter_ro.ts | 4 ++-- translations/focuswriter_ru.ts | 4 ++-- translations/focuswriter_sk.ts | 4 ++-- translations/focuswriter_sr.ts | 4 ++-- translations/focuswriter_sv.ts | 4 ++-- translations/focuswriter_tr.ts | 4 ++-- translations/focuswriter_uk.ts | 4 ++-- translations/focuswriter_vi.ts | 4 ++-- translations/focuswriter_zh_CN.ts | 4 ++-- 36 files changed, 71 insertions(+), 71 deletions(-) diff --git a/translations/focuswriter_af_ZA.ts b/translations/focuswriter_af_ZA.ts index dd8d8958..3cd86673 100644 --- a/translations/focuswriter_af_ZA.ts +++ b/translations/focuswriter_af_ZA.ts @@ -428,12 +428,12 @@ <Sisteemtaal> - + Note Nota - + Please restart this application for the change in language to take effect. Herlaai asseblief hierdie toepassing vir die taalwysiging om pos te vat. diff --git a/translations/focuswriter_ar.ts b/translations/focuswriter_ar.ts index e703267c..a085fd1c 100644 --- a/translations/focuswriter_ar.ts +++ b/translations/focuswriter_ar.ts @@ -452,12 +452,12 @@ <لغة النظام> - + Note ملاحظة - + Please restart this application for the change in language to take effect. من فضلك، أعد تشغيل البرنامج ليتم تفعيل اللغة المختارة. diff --git a/translations/focuswriter_ca.ts b/translations/focuswriter_ca.ts index 525faa5a..57ef3a2b 100644 --- a/translations/focuswriter_ca.ts +++ b/translations/focuswriter_ca.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Call que reinicieu l'aplicació perquè tingui efecte el canvi d'idioma diff --git a/translations/focuswriter_cs.ts b/translations/focuswriter_cs.ts index a623f0e1..b1c07e09 100644 --- a/translations/focuswriter_cs.ts +++ b/translations/focuswriter_cs.ts @@ -434,12 +434,12 @@ <Jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. Spusťte program znovu, aby se změna jazyka projevila. diff --git a/translations/focuswriter_da.ts b/translations/focuswriter_da.ts index bc3069d4..2ebc1c42 100644 --- a/translations/focuswriter_da.ts +++ b/translations/focuswriter_da.ts @@ -428,12 +428,12 @@ <Systemsprog> - + Note Note - + Please restart this application for the change in language to take effect. Genstart programmet for at skifte til det valgte sprog. diff --git a/translations/focuswriter_de.ts b/translations/focuswriter_de.ts index 7db389f0..9cbcfbd8 100644 --- a/translations/focuswriter_de.ts +++ b/translations/focuswriter_de.ts @@ -428,12 +428,12 @@ <Systemsprache> - + Note Beachte - + Please restart this application for the change in language to take effect. Damit Änderungen an der Programmsprache in Kraft treten können, muss das Programm neu gestartet werden. diff --git a/translations/focuswriter_el.ts b/translations/focuswriter_el.ts index e9f7023d..79f1103a 100644 --- a/translations/focuswriter_el.ts +++ b/translations/focuswriter_el.ts @@ -428,12 +428,12 @@ <Γλώσσα Συστήματος> - + Note Σημείωση - + Please restart this application for the change in language to take effect. Επανεκκινήστε την εφαρμογή για να ισχύσει η αλλαγή γλώσσας. diff --git a/translations/focuswriter_en.ts b/translations/focuswriter_en.ts index 45fe3bca..07ee0c01 100644 --- a/translations/focuswriter_en.ts +++ b/translations/focuswriter_en.ts @@ -428,12 +428,12 @@ - + Note - + Please restart this application for the change in language to take effect. diff --git a/translations/focuswriter_en_GB.ts b/translations/focuswriter_en_GB.ts index 355a1a20..93360e37 100644 --- a/translations/focuswriter_en_GB.ts +++ b/translations/focuswriter_en_GB.ts @@ -428,12 +428,12 @@ <System Language> - + Note Note - + Please restart this application for the change in language to take effect. Please restart the application for the language change to take effect. diff --git a/translations/focuswriter_eo.ts b/translations/focuswriter_eo.ts index 7f400ec8..f99b01c4 100644 --- a/translations/focuswriter_eo.ts +++ b/translations/focuswriter_eo.ts @@ -428,12 +428,12 @@ <Lingvo de Sistemo> - + Note Noto - + Please restart this application for the change in language to take effect. Bonvolu relanĉi ĉi tiun aplikaĵon por la lingva ŝanĝo efiki. diff --git a/translations/focuswriter_es.ts b/translations/focuswriter_es.ts index 7094ed01..25b8dca3 100644 --- a/translations/focuswriter_es.ts +++ b/translations/focuswriter_es.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Reinicie la aplicación para que el cambio de idioma tenga efecto. diff --git a/translations/focuswriter_es_MX.ts b/translations/focuswriter_es_MX.ts index 1b22cb46..4bb39424 100644 --- a/translations/focuswriter_es_MX.ts +++ b/translations/focuswriter_es_MX.ts @@ -428,12 +428,12 @@ <Idioma del sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie esta aplicación para que los cambios de idioma se realicen. diff --git a/translations/focuswriter_fi.ts b/translations/focuswriter_fi.ts index 999806e9..39c5693f 100644 --- a/translations/focuswriter_fi.ts +++ b/translations/focuswriter_fi.ts @@ -428,12 +428,12 @@ <Järjestelmän kieli> - + Note Huomaa - + Please restart this application for the change in language to take effect. Ole hyvä ja käynnistä ohjelma uudelleen, jotta kielen muutos tulee voimaan. diff --git a/translations/focuswriter_fr.ts b/translations/focuswriter_fr.ts index 786ade89..fca6ba9f 100644 --- a/translations/focuswriter_fr.ts +++ b/translations/focuswriter_fr.ts @@ -428,12 +428,12 @@ <Langue du système> - + Note Note - + Please restart this application for the change in language to take effect. Veuillez redémarrer le programme pour que le changement de langue prenne effet. diff --git a/translations/focuswriter_he.ts b/translations/focuswriter_he.ts index f3ed16fb..60400050 100644 --- a/translations/focuswriter_he.ts +++ b/translations/focuswriter_he.ts @@ -428,12 +428,12 @@ <שפת מערכת> - + Note הערה - + Please restart this application for the change in language to take effect. נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. diff --git a/translations/focuswriter_hu.ts b/translations/focuswriter_hu.ts index 50d5a178..18211907 100644 --- a/translations/focuswriter_hu.ts +++ b/translations/focuswriter_hu.ts @@ -422,12 +422,12 @@ <A rendszer nyelve> - + Note Megjegyzés - + Please restart this application for the change in language to take effect. Indítsd újra az alkalmazást, hogy a változtatások érvénybe lépjenek. diff --git a/translations/focuswriter_hy.ts b/translations/focuswriter_hy.ts index a1193ba8..a99322fd 100644 --- a/translations/focuswriter_hy.ts +++ b/translations/focuswriter_hy.ts @@ -422,12 +422,12 @@ <Համակարգի լեզուն> - + Note Նշում - + Please restart this application for the change in language to take effect. Լեզվի փոփոխության կայացման համար ծրագիրը վերագործարկել diff --git a/translations/focuswriter_id.ts b/translations/focuswriter_id.ts index cabb1c0b..f79cf00b 100644 --- a/translations/focuswriter_id.ts +++ b/translations/focuswriter_id.ts @@ -422,12 +422,12 @@ <System Language> - + Note Catatan - + Please restart this application for the change in language to take effect. Silakan tutup dan buka kembali aplikasi ini untuk menerapkan perubahan bahasa. diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index 036012683f1f9ee18c7a101574dc68e6050ca0cf..51cccc9695dfca2c383116216da02d2be2b56103 100644 GIT binary patch delta 578 zcmWNNT}YE*7>4iXo%4I&Z<{(g7#*Z6(IK&hrIiGYLi;0GWM%{B*x9*^dj-3N<5x@}LefSw%tzc@QX3%fRRlLg-KFJ-T?{;pV>X*Tdr3u(-E}sF+JB z;kB@^J{^$l_;R=xXj~-fY5`jM$o%mRX!dZS2;}#Wb?XXnFhn;7jsR`HY2>dBIQNSl z{2SNb74)`s2B>{S^Q-N^`E>3R!IiC|%%!uccZ;g2I^gUdaV)IA>!SQsgxuNUO>ix+ z!7pZ>9tBSRnV)KxlJ8T0q!8s`vbeFA^Az>|Yj=hE&x!azgK`u|d zKwh3p9dM5s*$XjX-!5a#Xv-D8au*p%?`I&hPRiS3z?mstGB)biLg~xP zlf71^R`JXJ^a8E6N)GK6y5tKvDVqSgBqz)CFip$cA$`=$qcT8>=VXQVxw>N{fgLy1 z zYkts7YU;!jxtbp}k893rj%a?;{LX$eMBmslv&hBQ%u3bfOzAJtw%ge52vC9x9RU?{ z#=;}ovXdi@8k*%9N0c6MiL=3dJ*`V+0GsmDy5iNkv0lgNp+h|H^wC3hxhl!e5mzxe b#_zj!*19vW9Z}RH7ZFq;hUmDbWy13xl0vfU delta 574 zcmWO2T}abm6bA6;yxaW0?|+*%`WR9vCN?B&Sgw-55oF({BxW~dqRlJuBSqA<%CC&2 zH%Bj8g$ZRJF0$+*in?fu5D112>O!K{LZhhb%<8@Rap3UqoHI2p=ElXuF`_aqp_#0! zSl*ci$ZmW;Jp{B9Q8)yIM#=p35x9`eKH<%eQ1IRj;8ZD%j+_CyZ4_Ox0KHav_GeOW z*U*QHaiH-%CAZjszKuLA{OMs)?$lYeM@02>6L2|2oD1mfrcVALN?l&D;NK4H$`kQ7 zH9+e>F0r`PQL#F`R!>o`x46m0y_ON0<{WD!z2KmAOoWJYY<1Mb1GX7@!WAi3D32FY zMqDqA?By2V#9?Dwhpy1Jfd>pf74fW*=_)o7S>J$+CMoYf20GvIsNxpJ&b=#p_6lkEUqld*FBm=2SBrHA_Yk@V7fUX+zt3+jQ901nH%5dn${)Z6QWK(LxClvfR#djmK1Bjzot@6dkHwrZ2w=i0B@70xqD={E<>OiJflW|bOrSR=*y+T(1qdug71cCWhRXbD91 zmBUz(__J^9pm Ws8Mag0W_c)TY0W;^W?hFg!?}R7_e3V diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index b4b19fe9..f8789aed 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -428,12 +428,12 @@ <Lingua di sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Per modificare la lingua è necessario riavviare l'applicazione. @@ -1974,7 +1974,7 @@ Fo&rmat - For&mattazione + For&mato diff --git a/translations/focuswriter_ja.ts b/translations/focuswriter_ja.ts index 1aaf1630..1fc8e4bd 100644 --- a/translations/focuswriter_ja.ts +++ b/translations/focuswriter_ja.ts @@ -422,12 +422,12 @@ <システムの言語> - + Note 注意 - + Please restart this application for the change in language to take effect. 言語の変更を反映させるためにアプリケーションを再起動してください。 diff --git a/translations/focuswriter_ko.ts b/translations/focuswriter_ko.ts index 036dd26a..28144ca9 100644 --- a/translations/focuswriter_ko.ts +++ b/translations/focuswriter_ko.ts @@ -422,12 +422,12 @@ < 시스템 언어 > - + Note 노트 - + Please restart this application for the change in language to take effect. 바뀐 언어로 적용하기 위해 프로그램을 다시 시작 해주세요. diff --git a/translations/focuswriter_lt.ts b/translations/focuswriter_lt.ts index a409b789..bd79d5ad 100644 --- a/translations/focuswriter_lt.ts +++ b/translations/focuswriter_lt.ts @@ -434,12 +434,12 @@ <Sistemos kalba> - + Note Pastaba - + Please restart this application for the change in language to take effect. Kad įsigaliotų kalbos pakeitimai, prašome paleisti programą iš naujo. diff --git a/translations/focuswriter_nl.ts b/translations/focuswriter_nl.ts index 4bae9f7b..3cc31085 100644 --- a/translations/focuswriter_nl.ts +++ b/translations/focuswriter_nl.ts @@ -428,12 +428,12 @@ <Systeemtaal> - + Note Let op - + Please restart this application for the change in language to take effect. Graag de applicatie herstarten om de taalverandering door te voeren. diff --git a/translations/focuswriter_pl.ts b/translations/focuswriter_pl.ts index 5d965520..05fef73b 100644 --- a/translations/focuswriter_pl.ts +++ b/translations/focuswriter_pl.ts @@ -434,12 +434,12 @@ <Język systemowy> - + Note Informacja - + Please restart this application for the change in language to take effect. Zmiany zostaną uwzględnione przy następnym uruchomieniu programu. diff --git a/translations/focuswriter_pt.ts b/translations/focuswriter_pt.ts index 48693f0c..fdd614da 100644 --- a/translations/focuswriter_pt.ts +++ b/translations/focuswriter_pt.ts @@ -428,12 +428,12 @@ <Língua do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor reinicie o programa para a mudança da língua do programa ser aplicada. diff --git a/translations/focuswriter_pt_BR.ts b/translations/focuswriter_pt_BR.ts index bae8caae..ff95402f 100644 --- a/translations/focuswriter_pt_BR.ts +++ b/translations/focuswriter_pt_BR.ts @@ -428,12 +428,12 @@ <Linguagem do sistema> - + Note Nota - + Please restart this application for the change in language to take effect. Por favor, reinicie o programa para que as alterações no idioma tenham efeito. diff --git a/translations/focuswriter_ro.ts b/translations/focuswriter_ro.ts index 03669e72..3b886362 100644 --- a/translations/focuswriter_ro.ts +++ b/translations/focuswriter_ro.ts @@ -434,12 +434,12 @@ <Limbaj Sistem> - + Note Notă - + Please restart this application for the change in language to take effect. Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. diff --git a/translations/focuswriter_ru.ts b/translations/focuswriter_ru.ts index c6811e84..8c9302db 100644 --- a/translations/focuswriter_ru.ts +++ b/translations/focuswriter_ru.ts @@ -434,12 +434,12 @@ <Язык системы> - + Note Информация - + Please restart this application for the change in language to take effect. Перезапустите программу, чтобы применить изменение языка. diff --git a/translations/focuswriter_sk.ts b/translations/focuswriter_sk.ts index 3738a981..3dc9ef9b 100644 --- a/translations/focuswriter_sk.ts +++ b/translations/focuswriter_sk.ts @@ -434,12 +434,12 @@ <Predvolený jazyk systému> - + Note Poznámka - + Please restart this application for the change in language to take effect. K zmene jazyka dôjde po reštarte programu. diff --git a/translations/focuswriter_sr.ts b/translations/focuswriter_sr.ts index a45bdfac..515dd164 100644 --- a/translations/focuswriter_sr.ts +++ b/translations/focuswriter_sr.ts @@ -434,12 +434,12 @@ <Системски језик> - + Note Напомена - + Please restart this application for the change in language to take effect. Молимо рестартујте програм да би се видела промена језика. diff --git a/translations/focuswriter_sv.ts b/translations/focuswriter_sv.ts index 34532664..d941671c 100644 --- a/translations/focuswriter_sv.ts +++ b/translations/focuswriter_sv.ts @@ -428,12 +428,12 @@ <Systemspråk> - + Note Observera - + Please restart this application for the change in language to take effect. Starta om programmet för att språkändringen ska aktiveras. diff --git a/translations/focuswriter_tr.ts b/translations/focuswriter_tr.ts index 2be00def..a5184ef4 100644 --- a/translations/focuswriter_tr.ts +++ b/translations/focuswriter_tr.ts @@ -422,12 +422,12 @@ <Sistem Dili> - + Note Not - + Please restart this application for the change in language to take effect. Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. diff --git a/translations/focuswriter_uk.ts b/translations/focuswriter_uk.ts index fff4e594..deda6386 100644 --- a/translations/focuswriter_uk.ts +++ b/translations/focuswriter_uk.ts @@ -434,12 +434,12 @@ <System Language> - + Note Примітка - + Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набрала чинності. diff --git a/translations/focuswriter_vi.ts b/translations/focuswriter_vi.ts index 01d8b557..afff73ee 100644 --- a/translations/focuswriter_vi.ts +++ b/translations/focuswriter_vi.ts @@ -422,12 +422,12 @@ <Ngôn ngữ Hệ thống> - + Note Ghi chú - + Please restart this application for the change in language to take effect. Xin vui lòng khởi động lại ứng dụng này để áp dụng thao tác thay đổi ngôn ngữ. diff --git a/translations/focuswriter_zh_CN.ts b/translations/focuswriter_zh_CN.ts index 30553b4f..7a863983 100644 --- a/translations/focuswriter_zh_CN.ts +++ b/translations/focuswriter_zh_CN.ts @@ -422,12 +422,12 @@ <系统语言> - + Note 注意 - + Please restart this application for the change in language to take effect. 要使语言的变化生效,请重新启动该应用程序。 From 3db47c731a24f555b46afa1aeea2cebd40cdb6c3 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Thu, 29 Sep 2016 17:21:03 -0400 Subject: [PATCH 312/630] Sync translations with Transifex. --- translations/focuswriter_it.qm | Bin 38340 -> 38356 bytes translations/focuswriter_it.ts | 38 ++++++++++++++++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/translations/focuswriter_it.qm b/translations/focuswriter_it.qm index 51cccc9695dfca2c383116216da02d2be2b56103..4ca40b407b53813b4658cbb3b4454e42c3fc9a1a 100644 GIT binary patch delta 2194 zcmZ8idsGzX6~D9d*qPa#T@lR!6$emuYYHVb$(L~VqUXreaYK|C>9k(^_zHEB)LibyYP|LU2u`#ayvH~0R2 z_x`>+L*0t8ZpESHt^^?J1Avzr9O%{wVA=qXo7)53iI6b#GQiFzNUV7mU{j|9w{C~zN?e;GVEfEdfS5s2M9H2lV7cTC zU<`ttiavn&DA-Bkt~d6<8ysSME$OF%sL#n`$`ITP5B;?Od<{I>)do<;QdFZ2z}7{H z-`@q;Z=jZ5_XkLxp;nFE2XGsw;$Eo(*g8ba3Y}jkRr$N$0Bnz?PQ0H2P$N)1(=wW0bwrL>2PSyFyKQu>fz&WZn+CAjs&E-Veugr|mTt^Z`zu9)gt^nV zC{l;>0jfnsMkYqduOg2Xu}+?fv9MJDf&Pk{pW)lZG%?dU&sfFGurol>8JZcvy=$J( z>L$$O-%c<5c?&?nVp2!To(ejpvkO(I>H2%fFZvpNc=segQXAdA8Q+e1Oor(&>P^Bj za@H42>6=a!#bKU@63mj;=$eg3hsP6~noNX_5zJx@whSVfxbP98aA7EZ2 z*8!-XGPBWP0Es+HJw=<9)U))QPqy^4OfhyjX`E$`A#O@%)uxSz*ICW|k5J>+Y{WAS zz{cfl{KXvr%V_rCY1A0nMZRJUuJvrw<^Wt}vqx`40r;F?+Ye&@V)KZ^>6}K`<1xt8 zx6XmFACLe}cI{{TzAQk8e9exV-v@X#k-hEy3?R;#}TUr;_GXQE~jM-BV=&p8mxd> z&2{{UidNo6M8)gFh_BMH!-xC!>;r(X``k~Sx6!>c_xxkT)v}U)`A2}I1ImRzIRTVj zR4#j12(T?$=~K>P-Q1MM(F|lg>cGTbDkJKjV0{{t+ir|vuj5FsQfG2kmR8MThr^W} z{REj$E4w*#m0O0g=TGRA^>>w@WYXwSlXBAYub3^L=YNmYuDHqTtf(~c7QbY+1iN>Y zNW4M#g0E1ApeGYZC@;qc^KF$&@oa?h9ojVj2YvaIaSA*W6Z~bq41j9lFDJBNZVf-; zjn&uM_z}Y}fRhh@Wr)Gv+~UU`U_I7lIIy^h^zueeSHWYZ79et|;5CQqe=T^YOaM4r z1@$r0{8d4M5=|;lgAGz-xiR zm3DMXWd=zSWY-&_$1px!)+dI@i;#J{_-f`coG9a@S&*yh#J+s2&FVjkgH441!T-aA z!{V^Z5u6yM;*|qdbf%AZwGBIwxm&zCh&m$giIe5O08m{Mr^1nWb-MT>xeHI*unNll zg6I7VBF?FTeyb#%LlP>=R4myg>Q-!1 zWnISs^!5u?NpLkLTkOE7+p5w4>C z)-(zjV{MS8@pwA6HC)r&fU$PRYMRd?_qbNgk*PZTM7%|&)UsgH+?g|E^$3w9o#~!d z96$qkeWo?sO~4@#p!HjYmWa1&x4sjM?R`lbKd=}F&|~fE6PP!;MVlf22R~8YXtO>_ z#N&EEo1cn$N<&GGq@(IcowSnrnf+ra&*&ZqiI4$SD1=<_fK4*wp&4OKO6ncBBcf__-3yC*zRhrpobV->;n(GKCgwNH-es= zEe_K~VZ@^O99i?xF*4@T6R9MS(vyx7nIs)_u~(F2vd&BXkIvk-f9$UntQa5-FFmQM ztfuu)Kxo?v-71K{&{hmrh*uUA&j-#SMw<(HzF#13+VcI^fEfikp3e#NKng|3GHqUP z7G&d{JiK3kzrFMSnf7Nk1&c|{WVYrqViGxFbG3h4+eG6cm*mtRQtBPK>`X%h%j)M| Kx0_o^l>Y^A;&CMa delta 2172 zcmXX{3se(l7QT~tWM+~{M6e^Q7#@WzRpg}tR*E7Nf&@r;sIgEH!9xp%_tSv9EL31& zfAA<}k#4oSU7&0Yg+;BkDrM`dJ(X&;#deEyk87qsrMui;EMp^&zCcx$d>a9cR0Cf+kfyXpJ!+)va z-)tCV6LqZy`R8AtW;|Gcy;{P_qZC-k9YunJr(!aE1;A=w#h0h?*CoFYBQ3j!D`v+X@zh5%6Zq`PTeP|b zGX)WP;qTi33R%)f>)e4(?>&Ml)O6E#$Zz8Xx@+4sKuRZlFb01ef18Zc;Z!zZ8C}j8 z6VAXsF~^-cgGRZMP4JAl_#rXm-s7t_pC{vEZt_%bzZsG!tf^ zKMl{R%f>7vueWz#EY!v`ytf$1snND1F*q^ zHGQ-Nz>{X{-b0OHZY zG2zc-6{mAP!VX_3M2CFAUNs&9cs`!J?)nHI(ShV~vY=&u*!L=SZHTmTI%1I7bwpIWE{ymp^;>+n8>2S?!oTAlxL-&2QrvGx5&fN&^mF$CmX0VFK5#(y4=Fuw z6$89vP%f)vv2LQ$?{XHhzBrG`uPGy&?qYpjSHAT5W$bl48C1%K-zm#$o??dsmE9i@ zWd2au&!MYavXld#pi|aODUWB<=+RK+wEKTBTLI7i6{}q}&dWupH2Euj$eEDweN}MoP{+&bx&cvtu8NLF5YT?f$bplj8;U~PX z`r2xKLO%}Ru#7)fTvP?qnCUnKxf6rs-KZSRd)AmIseArYEQ2dQ>a=IJfg_Xj& zgXk7(3P}-k&X+{DalGp}EUwWxA@gSO`RpFtC=;Yr(ACt7!v$Cy|MTLBmSTX=|6@{@ zIKFs4Zj4g#+@2zIrjK~O6FZT;O+0@Bbwu3|rz>9pP+bydB9M7)viKzR2u|A>6;%8S z=e-XR_f+9DB62M9M!bobgE)gYfcOKz!lJt>dVeO02vPA(NF;cggo!%JK+;6nCr*{~ z87`o`KdH(>YcbiPd5r!_Rqlj#jkKt$JW5cgME)fDQ32$l=qJ>vneHgGOax(7e$Er> zkjK3M8lC!u$3I~S8`S0t&!TNj#Hf;eiq*y0xFV{W)g_9PIChKG@4k=53Hw!j>@JGl zaZG)6!xFTBinOY9lnWVD>4k43SAxyRk0etnouN^R-0}oxoN*zocCRTO0Pp@X5 zfH6V>H2eB?U|Rz6R5v^t>Gisf%TQg-hWbG)CB-wCXD~_On zJWgx%-zMP_SfveEftE16uZ?>>6x+K%YZ_UE3+T3X(>2Vyu|=Dudx(EgSF|}p$vCci zv;`Tcr`(t1NitPK8l~lw%63%B_oMvDfij&fCM-oH85z&mY|&RJ$Au6HC6EufkOP^J z0mWb;{@Z2SkbzcE-o!svww>E}-U;QH!GfRCy=`AN9HMCpUbZ&1EA4UY7oD0TS=JuJ+m_Z=ru-lK Cd2d(% diff --git a/translations/focuswriter_it.ts b/translations/focuswriter_it.ts index f8789aed..1c769b44 100644 --- a/translations/focuswriter_it.ts +++ b/translations/focuswriter_it.ts @@ -741,7 +741,7 @@ Text Alongside Icons - Allinea testo alle icone + Testo affiancato alle icone @@ -906,7 +906,7 @@ Default - Predefinito + Predefinita @@ -919,7 +919,7 @@ S&essions - S&essioni + Sess&ioni @@ -929,7 +929,7 @@ Duplicate - Duplicato + Duplica @@ -1198,7 +1198,7 @@ Zoomed - Zoommato + Zoomato @@ -1869,7 +1869,7 @@ Save &As... - Salva &con nome... + Sal&va con nome... @@ -1974,7 +1974,7 @@ Fo&rmat - For&mato + Fo&rmato @@ -2034,7 +2034,7 @@ Stri&kethrough - Bar&rato + B&arrato @@ -2064,7 +2064,7 @@ Align &Left - Allinea testo a &sinistra + A&llinea testo a sinistra @@ -2074,7 +2074,7 @@ Align &Center - &Centra testo + C&entra testo @@ -2094,7 +2094,7 @@ Align &Justify - &Giustifica testo + Giustifica &testo @@ -2129,7 +2129,7 @@ Ri&ght to Left Block - Blo&cca testo a destra + Bl&occa testo a destra @@ -2144,7 +2144,7 @@ Find &Next - Trova &successivo + Trova succ&essivo @@ -2234,7 +2234,7 @@ F&ocused Text - Testo a fuoco + Testo a &fuoco @@ -2254,7 +2254,7 @@ M&inimize - M&inimizza + &Minimizza @@ -2274,7 +2274,7 @@ Focus Off - Messa a fuoco disattivata + Disattiva messa a fuoco @@ -2294,7 +2294,7 @@ Focus Paragraph - Paragrafo a fuoco + Metti a fuoco il paragrafo @@ -2319,12 +2319,12 @@ &Off - Non &attivo + &Non attivo One &Line - Una &linea + &Una linea From 1c00c5f11de8e5774323fc8dcbd2e6b0d132dcb0 Mon Sep 17 00:00:00 2001 From: Graeme Gott Date: Fri, 30 Sep 2016 13:17:50 -0400 Subject: [PATCH 313/630] Generate binary translations at build time. --- .gitignore | 1 + focuswriter.pro | 9 +++++++++ translations/focuswriter_af_ZA.qm | Bin 10927 -> 0 bytes translations/focuswriter_ar.qm | Bin 14319 -> 0 bytes translations/focuswriter_ca.qm | Bin 33395 -> 0 bytes translations/focuswriter_cs.qm | Bin 35343 -> 0 bytes translations/focuswriter_da.qm | Bin 34571 -> 0 bytes translations/focuswriter_de.qm | Bin 37706 -> 0 bytes translations/focuswriter_el.qm | Bin 37505 -> 0 bytes translations/focuswriter_en.qm | Bin 776 -> 0 bytes translations/focuswriter_en_GB.qm | Bin 26906 -> 0 bytes translations/focuswriter_eo.qm | Bin 35187 -> 0 bytes translations/focuswriter_es.qm | Bin 30232 -> 0 bytes translations/focuswriter_es_MX.qm | Bin 28467 -> 0 bytes translations/focuswriter_fi.qm | Bin 36133 -> 0 bytes translations/focuswriter_fr.qm | Bin 38440 -> 0 bytes translations/focuswriter_he.qm | Bin 32661 -> 0 bytes translations/focuswriter_hu.qm | Bin 28932 -> 0 bytes translations/focuswriter_hy.qm | Bin 37493 -> 0 bytes translations/focuswriter_id.qm | Bin 34506 -> 0 bytes translations/focuswriter_it.qm | Bin 38356 -> 0 bytes translations/focuswriter_ja.qm | Bin 30280 -> 0 bytes translations/focuswriter_ko.qm | Bin 29454 -> 0 bytes translations/focuswriter_lt.qm | Bin 38008 -> 0 bytes translations/focuswriter_nl.qm | Bin 37145 -> 0 bytes translations/focuswriter_pl.qm | Bin 37114 -> 0 bytes translations/focuswriter_pt.qm | Bin 36813 -> 0 bytes translations/focuswriter_pt_BR.qm | Bin 38250 -> 0 bytes translations/focuswriter_ro.qm | Bin 37549 -> 0 bytes translations/focuswriter_ru.qm | Bin 35647 -> 0 bytes translations/focuswriter_sk.qm | Bin 36514 -> 0 bytes translations/focuswriter_sr.qm | Bin 34978 -> 0 bytes translations/focuswriter_sv.qm | Bin 35477 -> 0 bytes translations/focuswriter_tr.qm | Bin 33954 -> 0 bytes translations/focuswriter_uk.qm | Bin 36144 -> 0 bytes translations/focuswriter_vi.qm | Bin 29356 -> 0 bytes translations/focuswriter_zh_CN.qm | Bin 28189 -> 0 bytes 37 files changed, 10 insertions(+) delete mode 100644 translations/focuswriter_af_ZA.qm delete mode 100644 translations/focuswriter_ar.qm delete mode 100644 translations/focuswriter_ca.qm delete mode 100644 translations/focuswriter_cs.qm delete mode 100644 translations/focuswriter_da.qm delete mode 100644 translations/focuswriter_de.qm delete mode 100644 translations/focuswriter_el.qm delete mode 100644 translations/focuswriter_en.qm delete mode 100644 translations/focuswriter_en_GB.qm delete mode 100644 translations/focuswriter_eo.qm delete mode 100644 translations/focuswriter_es.qm delete mode 100644 translations/focuswriter_es_MX.qm delete mode 100644 translations/focuswriter_fi.qm delete mode 100644 translations/focuswriter_fr.qm delete mode 100644 translations/focuswriter_he.qm delete mode 100644 translations/focuswriter_hu.qm delete mode 100644 translations/focuswriter_hy.qm delete mode 100644 translations/focuswriter_id.qm delete mode 100644 translations/focuswriter_it.qm delete mode 100644 translations/focuswriter_ja.qm delete mode 100644 translations/focuswriter_ko.qm delete mode 100644 translations/focuswriter_lt.qm delete mode 100644 translations/focuswriter_nl.qm delete mode 100644 translations/focuswriter_pl.qm delete mode 100644 translations/focuswriter_pt.qm delete mode 100644 translations/focuswriter_pt_BR.qm delete mode 100644 translations/focuswriter_ro.qm delete mode 100644 translations/focuswriter_ru.qm delete mode 100644 translations/focuswriter_sk.qm delete mode 100644 translations/focuswriter_sr.qm delete mode 100644 translations/focuswriter_sv.qm delete mode 100644 translations/focuswriter_tr.qm delete mode 100644 translations/focuswriter_uk.qm delete mode 100644 translations/focuswriter_vi.qm delete mode 100644 translations/focuswriter_zh_CN.qm diff --git a/.gitignore b/.gitignore index b51a4c4f..08c4c42d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ Makefile build focuswriter +*.qm *~ diff --git a/focuswriter.pro b/focuswriter.pro index 305a6246..a6254f1d 100644 --- a/focuswriter.pro +++ b/focuswriter.pro @@ -217,6 +217,15 @@ SOURCES += src/action_manager.cpp \ # Allow for updating translations TRANSLATIONS = $$files(translations/focuswriter_*.ts) +isEmpty(QMAKE_LRELEASE) { + win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe + else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease +} +updateqm.input = TRANSLATIONS +updateqm.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm +updateqm.commands = $$QMAKE_LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm +updateqm.CONFIG += no_link target_predeps +QMAKE_EXTRA_COMPILERS += updateqm # Install program data RESOURCES = resources/images/images.qrc diff --git a/translations/focuswriter_af_ZA.qm b/translations/focuswriter_af_ZA.qm deleted file mode 100644 index 19474885cd4d63715bdc54b2932374cb2647e872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10927 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 OGSAtS<-xPfq5lJjb`1gm diff --git a/translations/focuswriter_ca.qm b/translations/focuswriter_ca.qm deleted file mode 100644 index 92ae669b67957d2213b2bf4f4ccb1348ecd248a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33395 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 Rwk82eROfx@DXOih`5#P-9>xFw diff --git a/translations/focuswriter_cs.qm b/translations/focuswriter_cs.qm deleted file mode 100644 index b177cf3b37f00e86920e5256d0d59b8ce7c923e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35343 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 I6{-*Y7n;v7$p8QV diff --git a/translations/focuswriter_da.qm b/translations/focuswriter_da.qm deleted file mode 100644 index ef32be714c765a0de2083c298addccc65add0d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34571 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 LO0)vi*3|qT9@jLn diff --git a/translations/focuswriter_de.qm b/translations/focuswriter_de.qm deleted file mode 100644 index 4dc52db099cfe7e05bb97eed5ac5cffa362c738f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37706 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 diff --git a/translations/focuswriter_el.qm b/translations/focuswriter_el.qm deleted file mode 100644 index 667757a623d73768f7fa86850594c61004aa664d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37505 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 diff --git a/translations/focuswriter_en.qm b/translations/focuswriter_en.qm deleted file mode 100644 index 77fc58d7df9295d769302002e7b6c33efae88078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 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 diff --git a/translations/focuswriter_eo.qm b/translations/focuswriter_eo.qm deleted file mode 100644 index 4ba501a00d4398877e9089f0d19c9faea1823f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35187 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 Ht*QCHRvlUQ diff --git a/translations/focuswriter_es.qm b/translations/focuswriter_es.qm deleted file mode 100644 index 5e3c2ab554960ed87472ebfff0b7e806979fb4a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30232 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 AWB>pF diff --git a/translations/focuswriter_es_MX.qm b/translations/focuswriter_es_MX.qm deleted file mode 100644 index 77b01c413078841e9932cecd65abd731cc5271f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28467 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 diff --git a/translations/focuswriter_fi.qm b/translations/focuswriter_fi.qm deleted file mode 100644 index 78f0279f28b1e7413b3a1c94fca6354812fce51c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36133 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 NsmhgT(yFbg`Tr}6;mZI3 diff --git a/translations/focuswriter_fr.qm b/translations/focuswriter_fr.qm deleted file mode 100644 index 96f1669de9e205f0c870f2a946076650cf03382f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38440 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 WU4pDD;|~(BObD+-V_qD`bu$@T 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

    `1@;t|6nXqlZ_mXmD<9kMA;5*_NuAwzDa=mt5w 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 diff --git a/translations/focuswriter_id.qm b/translations/focuswriter_id.qm deleted file mode 100644 index 8f839e95f289ffb0ac5c7402e8d73b5176011928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34506 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 diff --git a/translations/focuswriter_ja.qm b/translations/focuswriter_ja.qm deleted file mode 100644 index 9056e8b1d05e747dabbfa132504b19dcddda6898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30280 zcmb__34B!5_5V#WGntvpOeP`3h=>m~LjZvnHW3h;g|KCxK-eTsX5J)YCNpssARwZs z6#|M4F38_f>#x;Pw9>lbUd5$oh1T6xTo7B_x?q3xr>MX0z3~xwtJcLu&?aU-)_6<_oGKXdGSvlf2W!ddj%nR<%HxG5@NW8kfoOpGXH0U z6t&6Uk|shHR^j(`gw*dOWXYciX{iLvb%eA%Psq7<%HJPcBY*2&BIIa{5a;D2_b%WO zD@pGC7`LdJfc=s2C%>I^)zxf={c8H9>v!9R!*cTGxcnWxQ~pk>BrBc*-D75vmAUs5GUslxG7s?cW|37UeCPa0 z{?6+ltM-m3WW+0^!#E)K?Vg zT=A{B#$7uIIs3a@=ha?(#oV$7!HvkOe80?n;E_APuYueL2QY5& ztlUTaQz8F`+(&m}9qqevU%hY=A!CKy*Ph1wD?_<&9~%Q*Kb(7XtcQ^5{ki}640Lqt z&Hd)tVfg#Wd4}gfhpR5HxZ-+3meu8*YXe@>xV&k5Phg&ddFOrmJLpYa-uW*cg*wD3#;;Irt#uXca@f)ze<{0{e1B6V!->`oFYC?v6VA%93 z<{iJ>aOGPsgYPwl?K2>^>F*f^2kypxK4RFp;%w;q(}o-EkAfc+hFuFEBc#%4xO2t| zLS_sY_FexeA+2}d`#HXc@%@4jay`CZ;pbEMLJ!^J@cjngrG|Ywa`3$h-&}n6=u6uJ_@0aJ2l!5e{U|itU2zEfI$*f_T<~>*U;fU$M*h~kYq)#gMTE>f z$8i56orHK!7#=)O4t@EF{GIWz;XqCUA>{*x1DAI}zwb0W{o_%PchK;{o)GZ&8V+~E zj*v?Xhu2`AT)4_`WY*J!R5%T<90xxts|?>Ry@n9$X@>6>Ux<138*{#Zom{ogm`C^j zc`>7b!u?>l(RdraQ$I1<7S@1owMNGW_k!;~G1h*Cbyoh`*z)9ZLQd~AZvNHvgiP!+ zZo91w`dV(>K0O9`yXCKSo^gBKv(Tpj`8#Wqar=Vl7=M9r*OB?y-y!3zo9~Bx9A~`s z;4}DnkMXu$b1?rs#-D74evG}sczYw(FT5^)XM2se|6>XvO;;L!^$f;Wtv2qTvlH_+ z8}~nidHqw3_rDZ@{xlokX!r^EyVLmgnULS?myGZD&LYJ8u<@PWU>)|&#&;iigpdpB zjUR2h1pA@Xl(%ys=zPSK?;Qbssxz5KMq#i1WGeN7z6(A!o%a5R(1SBfWlNwZc~6)| zkV!a41k>c(@b^o%nWkKYb&+YNnO`-+j{M#XIk_%zP0b0R(^r~ zJ?>r8>K2Tj@qsBg>o#FOuYN9n_XFVj(x>zHneh9Pvi!TB!#Hw#klHn%)if4Qhkz;!fP$1znu&F(PI(50biz^w2YzO$#+}ISHFe7 zFSM+93hS78)Uu`k@*>2t{=R2mUp)z+ra<#t;;vT-W49T`etI?rF*T?;dvOh z$GYcg&@1|^_g@NpXRot9wjJvpf3EzU>$W~yb~DbIiPl3`L}3q}u)cVs5qA7?>x+-o z;O8r?$JTdXm8V;eSA!3}>#g5Xzen6%K>BemEPEW^5Agj8U#x5SdH8;aZw%k#`2HH- zkMRAxAn#@`)_q-pc?;;M*j`}W{0jC(aY3Q+Z0NJ8VCo{+?c65|>VG;3^zANKx^or& zK3d?ffV|H6c|qVX&e`sZ3f7)~CG_cs@^|{#1?x(%zo+ak*f1sz{+&^EVKB zM*awP;_HG#`;Nk1og;s3C*|*%Ps!hj4*C0oPvvjzqw=@z%Yr|gI01k0RKba=aX828 z3QqJbfgZkZGwcRmS6yW@*IHnow%JOCV_mgA`8)4wTghDfTsPY$9K^hfdu=lwyB~Zj zvd#Q@5A5={wz*$_4!yYDw&JC8U>}y*R{z+FeX-sq?E_!uIc$N((b&(^Y%xF1wT{2p z;<-=2E*ouof4viWa-Z#yzd=s*f499+GZOo!)b`HPd7y8b?Y(clg@1Xi{2jJK{+3U+ z{cS7cJ^UTpmzAK$@PzH#*TGl&%XUNbS2)M#+O2QaVqGijXYM?R{r-)8<|SW1-q+Y` zm;VFj-aGi>JRJWfzQ8}>EPL$=6VAJl_J#M|2>NaIWpi*&&GFb*|9mRuIolrk?=bk0 zXW#HtBkbSAA0jJFa<#;Twc ziRDn367f;-8Sx?UFXBlC=OS(n&Ri1?20eXINdsjVh;9^B?526^`aB_@W{i#0kQj-O zAelgFlVfXQk>G?{I@ZdlsQ2_s5k`t*o4;+5IC$yktv8Fy#ce8xy*3c-4Md{?8?Ogh z*3u2)%Sk;65uw%8IFbESNy=3mCFPanLf9{q*N24OKqwxQDx!=P_F7LM*xwupcSWRV zl+iJQ$L3x(utx`9F^6w$IO5BU&B0@9HK`QYzYi%+9+;A%f)`Nm>@ypP$Z;T7ET^o~ zTQ5@hSIFmycFz{dr%*)0QW#eo@C3tMjD2RHgBYaa zDzK$IB=|i23Xd`Z7DvBruMk5woV{^(`@c8Tb)9w7P8EftCLW1Mp_mYjMI=v8RsyWj z@t&7~XNtEy3D2k%5^~N8@9ZKst<|TZJ{;66v@Y zTJ!lOr;Fep6G~Enixh?PQFRr%!k!>SR-7V)dQYbmWHPW0kbym7Xt~Azg-U?UEyaX- zPpB*I>0}jpyU%2Gn5Kf(e%#BW#STXyXY5d#Y@Cm zO1&6{Dd-pd%PYkl_?ye|Q?9zA(N)2q5D!H?YkX1&?<#Iy%HlWoib;ey|qCcYm$PdLll-1BLL1BfXwj3?nBAI8NB_lfTnpkxBf8ctSj-F3{)>Msr!NV4Iw7lASO~9?B5Nao zm@GIQovq;J2+1N~dm}UU(j<0RO)5~T6FR8JaHt2_2F#4KB#D%6xlAan$=$DVuYlY7 z={)52O=7dH`2zf+yPcQyS+!xIKO7gS)Nn-bG7oC#xkjjS)iWU_3>xN9*_m? zS{L2yW2W(Pszw?-wNg-uNty8&s7Iy3m=<=0!Vz`==+0_Qnyw^F(&FjD%xHXF3}K6Z zCho_kc~9)Yb{$AiuUfHi>MFR+Frh7Bx^TFx#a8yoOAY{minGWj` zG4uNop%n^8#zd72We8^?f?74XvPxYO9^std@Tx0U{ZJI5WHLf$_q5Um`9+0`n+ zQhJ#NXn_oL8ddCuOt?oZA1htEvR&+6Rmi@B?pdwn&`ccKDsX|UXM)!wM-SSmO1Ewk zed1#1i9UCVn!6(a6(D|C?|8^3^F^~t!@5TXu2bhsImopWntQxkcWmj7eya{2)+%+y zgPw>Wt?Q%SKRf_-c4;9El$9z}eir^w=Lx=B<9|~K9Se4v0xQ5H4uqmHPsmFH5oWox zvzExGAt%NvPK@v&m=pyUoFHmawct()*s)ycx^}z!bwNdgD-8i1SC#d{kf<|kusM>nJeC>H&f<=S<3+j4Vc`^ni|9| z?;V`=b+&hhVSZ`w6cxg7V)dqR%G`%pQ+zs=eHQ9BE;s3d=|XsaNSMZ1Vd9 zUP)-8Hf32uJzbp+l@y(fpq7MzGERCKx)?&YYyDrU=!z(w#Gxv*!Mnlr* zkR0t%I0U@wI+OVUD-%B(Nja7VQ%vR{>vI4+e@_h2XpziKk~_!UAB{=9YP2|)qOjG6 zy`G@N9WjRBUp+}l85+YecBrHetWJib;-LHYegQjUC7k3A@k;m#cffP_So}413`;}N zXy>}Mt*^m+`o$*kVvMcj4(UbBL5ZFVFxW9q1b$$5AS!tJ`ho$khf0&W`phMik8YS* zA*cks)Mt!&dL%*e`z5a&9i|g&lZmC=H(U~LEM=wyUS`+Q5&d8I0hT6TjB^95 zVAj1dn^b9;s#p|HMO4%rk^B-oeyjRq--;kGWT!r%8y%LTXVJ8!y+CY=ZLC!ER0A|!N;6`C9{x) z?h5aPEt2>FX#X7oz0L6ZKBHEkqZ7x6vLZwto5VU*Xr#33xq=t&5wpq}WMiP9Dqw*M7-fo^0cfQ7Bs|zRD96P%1hYK}+m<4O z5wc~ADwd6g;WR>v_4hGTkO8+@yiYueWWeuKqVj9Py}e2fIRns0qC7Op_6*Uo=8A; zKr)b3BCCryi1TCy&epEh2*;%}YXfTnK8c1mybjSYCmL9ng-;Hw_P@j<(2S?VQ`}0; zGD6wK%RrK$ar=*cuX5K^8;&CZl4UN##=qYDoH{;#o-aW2H`xFh$>wvD0Q04g6p{0! znJ8K%^~90@3j$HtC*}@j0IH!g51XOBZ35z_?cz43K0~3V4!;nJ_jXE=tcIVSfa>bZe9kxn zUrPCOxftpqs|uUX;nd^IhCnFL8}F5)c!XN)l$LY(S*?(v)x@DO0}V(B? zuUlVJ7hq{XhE1qdB9{y+FgIE?VEGJe2@66p02vVRCJiebpink_Uc?S=8W-%t>F@&5 zgSGH)XbgM=KR<_kbrSg#>h;t@rbu*e+`Xlq{k%D2`t!V|kR-t2=|xIMh;}22@Wx|E zTZBV?I7BfdJC&4KAlgmcA7oLylH_9nXNED3hpLi!odI34xJ7C`Khm-b* z_@2tvl4dxif^2T9f?Z)`FuQxRD6BbwSH)mu7=}8%Og#@=eF1;)HN$2h71Y-~^ub3# z)#(aUz^n>n6Fda-|~!P6suLN}`l^jhrejc-%wSNdryw zsmn*fq!(K-%gUWy=Ss(0P2wPQjMk%HP+?J!h@x)Q7DfRv3j$Z;AzD16HNVJ%!QbN8 z6XCHa$aE4hV`a2*HI1bf6GkaUXQEqWy%Y&&+b4#U0*FbjLu4V*itUdINF&*Lm%2KW z8y;)cbKFX`5DVjDyCNkP`CgjnNVPiZ)MmG0EwYeYoC=#lx+MXh?IbBqJr}lg_b1a( zHXvB5)N`}pFf{E5)s_(W$YA&D|SDUK+<(D3*=*%-O0;yDv47po+`Ek_V_6AdxVH7qs!x0kaBc zb;l6RAkX2=My46FQg{Co70&36^=D;sancpKWW3mu5@M9Fd`(pl)$%BHGns#sMbFI4 zvFBYX3&SvkM`e@2sO{sV>|mhHilNKqb8}08(~!CZC&RKNgarJMZJOd`;8cIK5-El<5)TQC1}MsYeb=9A!|Q zYBGkEB2gzmXjCiKu~K1(5fPR?fCg8yY&$#)MAr>SP%nV5v3YYCW3^?~xs9u)8VTbDh>hiTQn)^@omHcRnn7=Et7AZiTD|&fOjG$0j7g5)1PL>anpHsu3AbEg{Ja zkex##hbbB)rj4s<1CKhd2~`UvJ*F8c$i4|Y{f}`HAdzv)YI;`dWk83|sTJe4`R?sg27;5Ef|Z zjdyZHgi>IOR9NKcSs^^rf>Ll$wNU3Tlm(tZz-+x96$YvcDpVdspK&gUrbB9zRI5-0 zfJ#i12|7z_fF4;^*;}IZ0d*P#uC#e7(+srcq4Z9tHPShhM!F%`nZ5nm;&#c>$jD3w zPXc$$+m(3*N9s*jjR8xAK0Mzi9F+UyBAuj5;M)V{KoGQ5mN_n&06JTcB%3{_Q z8nQByi{+?R46(kD)H3r(xv>M`A&YV4awv7hqKa|VB6H9(onn^x<`RQTsdL*{)X9R* zL?aU2APPtgS5wb-p{#@kT&f5$7DXw<6K2B8FNP?3#$A#a6XwH@I;(YeY-!s2p2^P!lTC`6}J{9SeerO&6xhm-AmUOo$5tkW>Fe4H#a?V)XBD4Oyyd@*(FvCWea zXh!yD-$rYdZIn*@s8rsI^&6|v6i&O*QiFlva^i*Y2a$PiA8odj1Aw&6k!%`z2x|9d zPVEY4pHH;Ew=*1Mw%qQP|IAhCQ}5Kk7efvp^I%$WR*i;fA*&-(CDTD{q9+@t)5gZc znV>VcxQp!g14`9im~8DLhPO(zz>b&*<`?cs*5%j|;3-+dd}ZAkNHr%)=gFn9LOJ7^ zO@VC)qdk-vLn~x>FI@UJxP)=O+Zze=$w@gKi0{#yY((y(SGKlR#JjIz3f_X`3w?og zk}R15Hk1>h8P~2Rk?GBLbpe*jNz>tkD_Pz&02As?J)Ce%Rh>wcGi}!yiztd8Ta5~%ERn;DEPgjKIOQ>AZ=C#Vr7b)3Wa}8^? zklT*aAk1{u%@J-k6K;|z9e`=04P*+(Fs?A1Hj?(3okDhZFr_qXr3bpeM4?ZABAv_8 zW2}Sa(`TJ&_nYDpZfO1ji8h2~7|eRMxcmxhxzZn7)2fE^wG+L+yxdxz2s-!LfS~jmin7^BKn}+X{W>ks#e;l zM&fkxc$H*w8l;&e(H|C1sxbKto(K*GwinZe+Z1#9u6TfBT|oox?a?Ds^69fAvu#SB zL5T*K2B<_?Xe5wX^foa1eXRW9luE4`{eQ{UIPD&`Hrj6}^gCAH$t}d(L|GN<*I$KF z+T_L?X=zh`u#*-gnNVnzf@g4%TA<7-8IvaAZAr;>r}51R^Y|HSNTt5&A?{GJ;W`{` zJViZFZj(rZHMtjcT+J;jzt!Ul#O3s1+F(s!oGkjKjWoGWrs%J+m2NQIy_;&sLRF0CO$S~Y_94}E1VkxS8+yH?K=dvNgxm%%uMD9WMFQQs7r*{Qal zW1=ZpkV;!;aeVeIo$3t!rkR%~dqOR4++?IzR5DHUr1<*kc^vPpZJth{J>XM%w$mm{ z?ea3v`h_k>)jnNnqt$&>$m$(K90bmkLnYL4sS19E23)9xY6=)Jy_ zGsW13+^Rl1Y;ue1k5WrLMw;%=u*=#vulYi59lY+Hn?K#NAM7!gL6Y6-cJX(uaI$Jr48@*aIoL>3ER)O^l|&O8kzp{klyFp8$|JRzU$)y(wQizEZ96Co zpmY?#^^Pv!sHH+DJ?hjpT5zNBd94&>cj42Kj3jeNCz;C%!gFvDo&H%M^1}$pYyFNn zopZ}8=S=RLD@;`G^}`7FD!HEVG7h8g(*~&9DYH@pXduqpFv%45wKE^Dmp8HP=jiej7n}5%YvwsAyWFshQcP7TeD!J zWXbi^3}l(n6@XjBoVCT%8=eR=wj3i&{_2}{a<<R_1%gT)@V?}c6SZ1m+ z*b|17ikaC^4m^W7;v#iqY@b0I$JZ?Ob1g1*NlY#T4!?tU~_6|G_9Ys zYjw(?g!jRb_&xb!W4jDD(a|!|&vF^1s^r2-pGIn{ND*R|7?oL6h{RcTj;d@;(@nFMQ@z)LnAc9cqah=%2G&?okEva)(=vawW7y$X`t$gQkK zImYSAc!JEdO4PKf)2RwNQ7K9%AdB+o3{L6!Mumr_w34h$p&_v_l?D?Nn_}~|B#+0< zT=^zllq4*;1WPWU^Tvl1rys_W-rwaj?IsuUJ#jWad`#*sGG%ZqAHT9)8D7ohRE@6c zaFBV({Aefl?vD$#(&U>PCKr47hb}J#04?mVqJLkehX*jaYQlYNC-LJ;k}s+#Ftywy zg)aG`1ft2V2 zAg(2;II-}V-j-8axGy%xZ6!-&;0bq1rPPp`Z%=PiXG@t5Lj%J`-fHW8wgP)np+NBO02p1Z zl8@DGd596oDtHn`vo_5zI!y!) zP6Yg`Wfm8XdFmghnIcWmC*yoJ7pv_6g&wJmR;Wq?b&Hb-)NNvQx#OMK@Tfs(Ri=~+ z3S6WuZIxD+98&1a>1ecUp-(E&^8J-yf9T~FbSyPD`sRah0cu5M4x8b zoF*4-)=cBAqp@J)+saH!I1;Tc)J%VSm*F4Za5R%rSH!+5)v3x;T?(6g7z+?41o-)Vxe#DB0s>RtZz$p&E zIqpMrORwqs5wZvIUlh?NjXUKl`)lDTL|F9OhcERSXoMG~zg1;BrV5wwXuVPJt7nLO z1CZU~i7NL+c>>Bv3&KXN!@(O03-dPwS4*093PZUsDq%%3jyk;h6=kiTti6J#qnK8V zyw8XW6v6T?hP?{+>qCM|E+A?5NOAl84GUW%jc+QDi#SbkD3FVgunPFoycFj}A8}LG zbAYJ6vMCc~5}s72`y>a&TS%J%r6#9&FcG5eV?w6yF?d+89%ipGxDXF}Sl}MVw+n(z z?b0Z#;x4PZ5|`_AcHl@g@RoyY{eXKo7i}ZP<|1vL+y!t8!yvaG+73e@u@Lr%uW+F*IGZq4pPZ2CYf-X}%o{y0+lDsW>4s{eGG;c4s=oXqSOcBMI6A@+1 zk9cT~ZhknHrepk@kaJXhGO_NxIa*cV2PYpVkO#9D3HSx_gBNKqFUp2_v1ah%Y=e^> zhcX$g*DwnnzQ{!N&Nc()4=HQ>zxdJNI_HhT4AEfRb5%17FPWFqtE5uz?5Z(cOb zd#C;Fdy)E~8GicgSO@2#@Xofq&P7c(S~wC#B3^|}I0q_8Wpbvv%1SM_3>b5sIwH63 zJnewu#0x?SJNZC@z0)Hgnve@r{M^Nf$AA>DrJNCW(5Ij9f~VwK69~uC-4FU`paRBQ z@%*~5i(bChQb^xGOfV~S>FCyEZQQ~RHd-Ch!Z;cUiuWp<$^eG~fs#6{tEYj{fJ6tZ zPzK8wl`yAI2d+ql%i{T!>YwE*!37M1{@Fc49~NFkxW`MM@hd0 z*U|2Hj6EKOcl0C=F3P7Vc$pjx;|YeKXe3!CiPysG2QdOXrfizKM=>IQ?Qx13z| z_bdn;DgyN;S&G^yb+XJ9s0d=TXqmPECw(TtU8*pSPtRByT=cyJ+)L4N>pyG1=gD=@ z)K0PsTV<2Bl|BWA+B=0l-k-M6R|i~rrp`c9HY#oldxVOM)+#Vp$-Ao`UbjZt3q=PMwFKgV7QWjHr(TyoTTHPr@>Cudiw|24p z(`Hv1&e_v!vO@8-6udOao@h(Fh{>-xaUGF8q@Zw{PZ{FAj10>z&1rXgN%H+V9atwV zDrO7hU8sP*h$PjiUB)$^vzy}b8$yFz(E!)#)P3h<7Xn=kQYfChd(N+BWFj|5?@)_8 z8a_8@m(g%Ht9cw{2om^b5@dezsUqdM1Z0-!dkI>exL~v8*K5=#GR1mW|4gslp5;bQ z5)(Cjo+gg=4(b=;q4qGc_>%m(D^K4f75`vD)8w<725Iz7da(<$Q71IDUwfh#lp8X}o2I1%Pt~jUl=0Tt_hLf{ zU2g9dv0crrF6K1FfhNL$t4E4;qkFrnTPvfI#sW>InlGH$@b0J!^<>>#b+NjsmFuNk zgXD1K+84bYrFdsLC-o?~+Zlav_dxgGXT8qr5?9DLY-LGob*$|jGh(b@<>xohK%zc)pg6l%LhJP& zmB+<(nmnL(mHrC_>={0qQNYc;f=EL_t@eh4OaGaIg15m%2^6v|R$eLMZNf6LQJ6p6Iq7@EzKB*INvORDFKaita?&R z1G!Nlz@DE|-5<_HYg*TjBop(|=pcI9%Dpc+!N@ zDD<6O`QP+l4};79!UN|bg!zBpL7l#Gc^J1+5)K0Yk9i0IKYLr!7Y>a@LV@~4bU7(1 F{l9bzzsLXp diff --git a/translations/focuswriter_ko.qm b/translations/focuswriter_ko.qm deleted file mode 100644 index b0435e97a5b8544675fde3078cf29a1bd1492239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29454 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 diff --git a/translations/focuswriter_lt.qm b/translations/focuswriter_lt.qm deleted file mode 100644 index 04cc3495f15c6c77c2029a9ea40eda470a6079b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38008 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 z zSnWPcQ)(X69e_Xrxdrz$!CRMn_NN6yC|sH!q_IsjVJAl2bH$MU z2h&5%>p~L30Cc{%U!IOvX(t&2C`-wo%6l-H656RsA56(fs**!{t9tysj2HowRHooF zUS*4znNO6V987F4s^C|rJ_{;*kJp=&lQNj-H3wz0k^Vljye3At+Q3|EjAAT1rF_sU zX*s=3qntnu7%b0J_>AT;K2A;nDQ^x5CUB0=vmvc`yWDXhV>-G!l7OqhIKrc<7Fb?Y z0`pWkM&(*~EFlZ(0O*6fvII#m_tRW8%96VXIpu^-9;1zIrR%_0*{<=WNv~ZDkSUKo5ua z+9|8jaiUT)96ML?a^FZj-i^ns9y2x6b+o3`_GB<-{Y&;02lnk5Pn7rIqCqZW9>n2@ z0uoE=CNp(lU;u_!wq@vR_@7?puftj|bs)4$>J>1Uw4oYLz z0|{RBm>0W%5Yx0sTiY-uDH!YVZ3uaJ7De_D>hl}mUv*WkQ@T!A9TE(Y9r0^y$2Eo- zBcZD9ZV6oK3nvA=#A^@wff??xm4Se|pg?bYh+B|1A(5LJ^7vY_d_c?7M6ytvfUR_p zL?ezwvQ#nFmpa=A4*fU(f>+FfWY@iPP&A(0ejW)Ti_@&B(pCbj&+1XR2AI~a-Pe~W z-BaSD4`}Nc#p|gR^$kG&DV3>OJ_T76EtjIB%R67xm0@5Jxd~L3@XoB995Tf$a09HUn>XOig2tw^=^p1;95fOX*wc-rix;mv88O+0T#^~> z4Y)AQ%`N(OEUmV=Rei_O>S`}Lw?L|w<<*b+Qgz6iT#z?agS^@G^5$wUJI59j8uGwG zB{a6XAaAb*x!3h_ulwanMAkz-nobx14><4Q~1C`fC{Hgp~~ z=1Er`GWOWj5GpS?qGT_yZe89J{4A7Cminp@T1XWL$To6J&QDZpoyx5`>5Ino30feu z0+veAI!lHSj4lyNoSD}zS>mQ^0Pmb?zfrsXRQC(KFH9M6w%xGpnFl(Z09sx&Z6HWf zrEqZqlbh*h&I$YNv3;x5oy<1ZFWOleN?E-`_t87fry+%bHD&q53}PI zd^An5bILu*iV01kitcu{U5hfC6!?mv=EN33$kqJ!NotlVPJFA}w#rUagM{GkK5ghx2#beoAGc~nPwrzl+GUR5`?>RS{T4=_`!l$#1}7%dR6y2X|1o2$X6HW4QC_^JHz zra|kA)I7>AfymYBVFqWj!b_ef=u%CjJhjl=jc*cTg%X`Hz8MDR>t$3TfB^k2Y>3-{ z?Asc2hIE5bt~tq2Uh=iU6xes+S>7x-;#>>`l?fiEG8GM3$Up;&W?Ld#61*W0=at=i z@IN~&sW0oFJM^eSm~M43I{KcmO1Z|5@P536pR%70?V@EEu{YL{7M%|Aig&*p@-%I< z+FjZlgcml)$?M_C9&H}&v{**zdV-9crc$t$h1Sv0Dlb#F*9iNZo;JeT$S% zsNK@FEuH72n5*t!N@*HDua=*T0Buh7P8mL~LBQC9z}pbZWI-Gk`QvBSWtFQa+a5JE z7U3)VSmqeSS0VDk3`nQ3I%yyUH}uZ7C2KbHbQ{Z7FG{XK7dZ-4>Z^Qo9C@LgI`mfh z4l<=$OAO<5FXJ0;@a2XHPyI+1{UG;N0vOmT2 z=k12RggUO{!`LLQaxc^s0xIRf%=(xs;nBeCGrljUbdXZtBJ1)WxV0rHeqXv1kr3Jw z>QtgWo}68d1$|7VAE=@k3h7(XC?ToShItR!`@x>vR1#VLUO1{Lnnm2NtA$z01o+LT zthKEa0n6L!ce2EU{d4?oPiz(Wf;vfkF=f9A(Zk66?mlx_QT!uB33nBpmEkB3FNB0ENvDhq$Ti^olRnzg)Rwg-9MqvToo{Xc5!4L*pm|$dHLI(dAT)q&nlV4FO^;4WiXVY_m@Nu4ImPPq+o3 z)z$87l_~9U@)}3~*z`PnkpR%qbXohASjZndbQb`%ov< Qym3;)TgQqw7DT7~f9h8^Dd{aqTPRSNWWFTRPG-Vf zT2eq1bVWeCfQpEC`7bKsx+sV@L{~so5W(BJxPl6ze^!Nc7Z+C+{QrLEe3vud_syjG zJpac>z9#w3d*1V&_x`@;eCxlQp8e=cx4r-IQ|5f*l8=A=>5W3PTq{IFmk{+&3laLD z5ZSdtZ2fy7W?iG6o#zPA*Mr~B6r%qoArAk85PMeOUA!~&h!AJBs^{Pz)$@Xzg?OeU z#LR0%{ipEG*;k1Ad-2}IZKD2*-^O!7gg*5nAr8GNLSG9BF>soCp7$ORda_rD)_05W z68ybyz6kHzEX0Bb@VrBa6MrwlpM6<~9j}VTA6Ov7g>MmyKRJcx(_%5e$S7ED9jRr4=onr zy#EkG*IXw=?~raKsY5XU}L7yFN&3vpRX-P|WuVQ)WJ*Zresh3LGz zZuiQ!V||6Xi%uwl-mP^Py$R2T|E?>2+ZVedp{$@yve#>_bvfH4b}a7-Qz-ZeW&iXgBUk^ZhiQc zcMGvRQQ!8q5g|^mtDk)z=##v%ey|1jr4H7o9==qFE0gu+DBw>#U4QJk^RT`p^*4Uw zbs-it)W84sJHTI0)!)8uyAVtJ>Ob{?hrlm;>p!#l{dj)5{)=Dzgb?O`*WY&?-n%4J z|FzLo;D>YTzjhPWG4byDAD!JT#2I7tKmHcxzx0v%pFTHVh_Sx?{8X{M$nvmjM6E9}jK*Sep=M?hGBcrbCF;FNLz@_dxE<&{Xz1 zA-42|j@^Awh?Bk_y6Q)mcg@>EZ++@}p#Qwk4Xd$#TP_d1@4C+lan8cfO$SaDV)Me# z%`IOO;>gEBxAfhQ-(MQ~(>aY+~zYX2@l`injv+B9^!=bO#?GR$+=FnH( zJSN1sr-Z)sk-6CSNa&w$&w>7nLr;uDzldDui6fAgf!jk*uKO0~cT?zx&x0Q4d^+^{ zzPAeze=+ozbI*pZd|$ZkW$4f1K)8W=VcWaIA&wiI2#0UOvv*E7-nR+Qw}%tY{v+uA zpW)s=W1T(g!+XAQz7VJUTlnhF-3UGVO8ENQhOmEs2;XpKNr=er)UzcSzG2J5;HO8_ zv%foh!?rW={{7)wp4?u z>tA|;dhXa6{@5Q@3X%Rz_;U~9{k?O;cdx$*^0FX&_m?p5RZoQP{cZvLvoHLU9UldK zpA7%>WbEILuY{jY&l95gl|&M`xhd&{t=jPd>>ibc`I~yB6`)$bO+0Bh#8*PC8Il1w< zQ~n+E-w};|8uUNRvqjUap6ny#n=*s{6gb)YriLSj8c(y(e-MaQgA!3u! zonOGur=AoYec^QQ>8GNX$Jc@H|0jCIhW`t?Jr=!!qr_S^u;F^mw(&cnx&g_@}1%d~SHGsq5fVLY$CqI`B=bXZxzABhA=PSl(mz zJP7-?xapc>-@|(Any%|!1^wL8bj$XKz<=jA-M&8oc{y7>3%51h+4vmjeqqzsue}EL z@qwlXp1T$H^leR#e&|N%i@i-Re(xQii z&HqGf-MkLaahRnUhWM`GzUSpVE?%zR=q-s_6p{x;xy_7`LKUJ7`p zUl6L(g9qd+h#A`1$tObH^@*+}#&@ zek15`<=@3#r@wUeOU+^mb|d#Pp5Wtr7oJ#GejlE{!t)(?K9A>@@%%NOFElrNU<7*T z#pdX>z+?4k&9SS02s`tO=GO43*#CDoui6g1-tfuh{*QM9zek#Pti1<%cidfS(V%5H}veyqBCAUw!|* z@LzrtU-RniLL_F!H@x~H_~U)?1K(W$J+dTz@FOwE$*#D07wCKbjq%LRQy}N*cxe>& z@95EZx&8s@?^yiK&))=o*%trmOW3c}qw$|?nghPLC;s%e8i3!`@n5|5I^cg>Jx|K1 z=Zb9nrFUZAPd+dHrxm~_a#H;De*s-*{A)|7_&MxDdrRzJd$F!i%gHxA1U>MxmPKd6 z?sYuevgXjsus7>lde8p@?Bqpw!hWu8z!USV-QLoBAcEiDh9~TN=HFWS?ztKI<{w(l zTMzrT^H|HlJ61v7jjQy#`Z^-aKc^?MW7 ze=H3->`c7toxuB|k;J>cg#FlgTH*uGza9Ezd*aR?0?y1w692GzE%eU3#Fswz8_?_e z#5aDv4)*py;%VxqEB}yq<~Nr_UcMWXIQ6Hd%z{MB5c`45m_#ju{~ji4SX@e?S`ZTske1#|aUxSJ z8WKVftOb%FT^M}?;|Zlp^vmZ27Lo(u%A!PSB&U6`R6(JRt`%KIe$?pd&lwY$T)AW} zDoP5s^rkY|sojPASivk7<$~r{g?&`y@xOvd*G9p4tpbI14TYomLb^Hv9o1Gn%lC)M zRkj?@^4c9B4xWlLZBjeGu0X$;uxsNT63a!Gv)lE{yST*x1n!gsHn52~k;Xn3#ke?2 z?)6G%bW7I?BbiI5isNS)T`LLbgo>T&&7`vVF}YuHfFr9A)EJl2rvIX15lvk=Bb}PE zNM99Vr`RTCG!3R30{{akn%MV@FdYOFo63cPnJXE^Qo&3eu8H9y(M#L_BMTUZAR>fE zCRhAa!r#d5V=i>LSi|Pan$SBTB62jKk{<%G?a$}N%;Irj8xcFj>7vKMrD5mkJv9;N zmiwtot=tOVa?@BYNZaUa`;psbMoKw|R~j!ZN8<45WGENQL0{{e}lotPWO#b^c2h9XnanXR8 zN-x`$%T7tH5$(;7lqazJ60=T#$w}NM0E$~$1ddX*J3v|%?ah@krL37YEZtrSW7I*! z04y+?G!Vmh9+i-xbntHjKaqis;lE>&3S=rW|1mJEMGO3N1iz&Ur?OIiCxd}W9DGjc z$!3jmu9!Lkj7G*mFtcbJ&ES{ArU4sN>gHZl;usVA0FQ87Mvd+%gRMYc|Lbj#B85gu zBJWNf88EZ?l(amRGZ@|>SPN;uy-tYgq!M}o8Vi&A@5t}GC4p@@)iw@XNa>M#5V)+Om56b6^+SkDw8ux z=4B2^FtLHm3jY<-8qT89}q`kS+Fu0?XH}Xf!!qGyeq*x_DhSt}d zxsqAPw!t&ba%Y4MA`_7_1ExEt=5*X*DiFnGwkippvcsK{N~79@v&B{bRMfI{qSS>B zwVE|W=--(Eu|tXqd6LxN)71b<5tup9iSccV7G9H@goHwsGZ%pOO#?chaHa4pu zwUA*;x8$i-TeI&^l}5%b7uT;%h=MMgc`=HKQ}{1`tNeRK1efuXp6MkS^95r>y8P2) zvB;-esIAoUb+e!;Noq%9lhp1~+Xk*~aTU0Jk@rIGHM3^PtPVK=PlBO=r7j#6i1dx+ z@&#$012H--%Mmzo)VCIzVLA+?RKSYxTe>9_YXf+yJ)=Ufl^l1K@fJO|5&XM^r|ShS z8L~|SoP?uLX=z0gV|dC)ubwfCY`=zqFaq z%?{z0Ip|7DMue5^Pyba2cZ+iYnhG(6NvI_0uuuYYB`RZ7Qq-CLL|2F8C(WFZDvXS0 zj+l}%F$mse^s+3Oiy=HXAXR~DkHg6=85OX`_z%sWYs1_7FjoP4Ow2R~B{^Wi&WuQI z^A3yKQ&gZCsy53yxF_V5QEb36_{fZ_O{_hK{~Ge&C23R(lH2%OKkqjy-Zw^4DqQ!X z)a{@|^NjGhf~thas6p|kZiHs+9xni-0j7iPEa%dSsvbH`>%w`_Su6(RGU#1$lWl*} z6qiXpqwy%pzqqc+2?OR>Ih!gN=4F$Ns^J|<55)_+y>iO{-DQ==8oRa_Bf7iXkqyS|}I@8Z)_KDU};x)&dz#W6HMYRg8>%puVnp}Ez+Ick;)+~ zRe7`38W>xksW>S1WoN%CeII>-6F9+Od2%vefDNuW)m%8~qxc^!7&R4Lc14i$;BNIh zIJfQ^9nFlG#x5%7^LF%e^#Pc7I{C;^r8nmrv>d?|d4?$lDw8pwGXelP zAV+6|LS>tVZfM+YXZbTWjhiEfjloGXn`JQ9E$xzT0()1;JBI+Q2x?SjP-1-(ke#BP z8gG_AZY-Bd`J9y>Qu}H{P!TMtsY^{v^0pkyeegl)6zj3nDN7Db>?Si0481qFOIklT zRVn}#_$YL2LUl7GpDmepfYl#DbY7o^z9wJ~!B z;aZQBDrUFml19f5{Qrla+O#WOs&G?#B))o35b2Q_M>55X-34>hM2tRS7ArWz8KtFk z8r3*yFsckZ9^tJrbS3zj8jB7q6I~QyWo_(=O-X8mAidB6yD5?6SL*Qhsupb=YwWsl)h^s)o9i5>4G|$)uw`W?SHq zXevPnv&fu}AQ5fWqSZ#Y8YrB}J)wGJG^~tQuy(MuiI(GV=I`t&V{;( z_+kP0g6U|c63KctlX0bGtg?u|6`VO{ZOrCjGvIV{kWkZ=dWge?EH7N~A6+GHd$)yz1A)))9cWBYLDL*k`m42%XUMFcllt@f!h{^z0 zi8PZcw#VXl)Xp?-*hE4bW(xif5=A6EFi%PMx(2Vz38i)IY(FT5GR4nkr`*J~Q=PYl|15=B<)OX=qVpsZ`lWg#?pQj4KpeFEVAY zUJNau;1Hju3KQ(m#duZFjsrp&`j~->yIYaod>JY78Z)=cB-l}mDuCUjd2;r; zadSGuNkz(@RWee^smPwDg>jfuR0rzz?}AF>C-2DQG85$qm8V6zO8T^_s$Wyj zw^@_ZvT~bTS2YTdXfdfdda0J6al?N*Bc*tebp%>ySFoFQpu%MIT8Ww}RM9~XgBB8m zqymMj8t6s|daum7Q~?|V&XkXmCK(84a<%087?@Nsv8s_M@l-`L>KASa`G`h_RTULw zO8K|ODKQ$w8x$#JF$s}*y&;TIo{X&$twJ~c=2l+bxGQHG2vjCebfAk_D2_nZ7EdSdPu7Ss^)?W3&5}sQFcPD}~?MdRyPZj@<}j z4P_d8vSWEv3&$sF2xKSn6)sF0Vx@wNNto05HHL)508`ZlSgs0&*SZ^a14WC;@oAl< zSstLHa@Sm0Xm&u=6o=&iqqvjOo0FT(Mj0}Q<5@`15hj-EJSH#7_SJF+Mf+npXY z$T?f~(W$_PnvAJ7YBpEKnzfj%2B2wE=~XyqF?2Xx`*EzJjMZrlFn*fEZ<$Y*IUi?@ zvj@xxlPc8mgpJ935f)K(T~wKe2{e5kF0z)1Yjfs6j6aR7n`PyxJ^cUMrn}5+4he(GVj%^v7U@q^{G7^zBmGT0(w4+ix z9sy7`0?}Ml27)ew#0MwxsCdJD%9Uy_xK^W16>Y{qt}+2lT}IkF3228A5;ED0z6T_p zYex;U0hKPTN{L9FD|fdvO zRLjV;LFIG%6cORWJA`T+%IA+Gx5`8pWA+qwpKT;m@^(j;@(*;iJYxtcFWFyLFp5l~ z)Dp^bAOV%#DgIVJIz@~+$P(4t?P~R{RN2}^vJcMXG3DE;}|*_135Ow&MVRI5rIkiNg|JuBIwnz1`7RnrnF=0>je z-zq7g(4k+>vpprPuzSkh9Qu2Z(=^klK|q(FT{3N$xirt&kRB4TI1n4kA2xFt_^Yx` zJJ&g2vi8Ch3FrLt$Bs_x4$(N>F>XoMnp! zMkO~qK-xg`4ETcFz;(J9M9{ur6;?cBmRs=;X;pxOME_5fY)DbpZa7E0oNesbM&n(i zD{W-44(F(sXNGmw42ol^_L*y^3{Y|yzcA~kQrc>d_*?F%i+`KU=qR_{$r*X(Ss6Hw z;tYLFEF>^uMPH$_mV^#JkhbSo(3x-GSn{As11a8g8|bP~(3xun0wS=GMmhREp2f6P zFw_=thBF+o0r_al83CitkmqNVW!0A)u#G^UM=x|DcPKZ1+6_%w3XEPfmGZO;9?Fj) z1Tf_G8D#kY)Y}2nQ{Hfv+-Q|EIIM9{wc$yrnT6i8jle%Y9y?& zdhb#@K&Vt8JFqKpfQVTYowPIw9qy*+tNkJ zh~IkjQ&VqQHDbs_OVHRk&REt&=w&nSVWH~~YK8*`HGbKyS#7xtpPli5qco4hNDjnS z#Vj^BX&Hm?vlGhTB4=y^*r(e3of_9s(*~`k8RPAVtHGHzcNc_gyY$uzkQXK(>2$fO z76~sN!>BeNHMdJQyL~4JP(lHkZUNMENe!eMg*Oc*)gD$QI)h#v8D&N$GOhdMN1n zsZhdo!@HfiWGj5Zyp+e+Tq%?*HrV52MMrS+%0=bM1g)rDws^7lMyHdS-Q|h!CiG6p zwhX3%WX*wfOsRu+%CMRN=$I!5=o)o;hu+FH*QC5g$E~lJ6G>bqE|DJ8w7-A)<4LDE zDKN59p$(;g&5 z4>S@yGLxm+(de2NE#u>zumcjqdQoueV<>6$KE`GCNG6Y*j!C;oM{Nf*sl!H%Ni>Dv z@FW@5Ka$51c49)(r_#41E<+4CKgHotSH@8%U6^>U~9JQ2%e~I1GF%yth_gpaeclG>Cl?;|tMV@YAl1J85 zXzCMmw}pciW(r%+OdQ(^T&>>Bw)^7L#Be?CPGHlbvuBi-76qL@^N5EqHjRZMg#mtdtcnyT#CJB2`AE+VW=(m~1yh z#1FHWo`w+gQi7@2Xi=@ok`hk4phsuP#z0B;xCLQH9!Kt^K}le?5$t^iN=NTdXdE0V zWF}Qf!ar)3L%oWl`;K6GkE@1}OPx>_ECH5dO+ADDf4zFsXiR1``zVV_lT^MQ$jLUw0|E02+$VU%5^3ucX!R8UMgsk815 zmpKb;V!T_OrSt>&ZZZ*l#twie&JMW;V!ZmQL*|N@5aiWPYFpjKMt700rK#YRCS-4r z-45lB3bS1)c*r6-q_RiJz}i{oP`ZUZSKuuN{TWV!QO#W@t81+_+J-e%)GdAVXa5zm zm#lqKCNp?4*Q#s$I40T9&a#I0q zxYfjIE2d)Zl@^f%a@Blfkf*AGO~f><6F$1MTlb;a;TQ@U4%$tFxW|cCJ_Jw20|qI$ zg9gMw*`hRvYic_g8%hlu`!i|lK(24{m<;(VOYkAqw*z-%{`9ujLA_O0$)_==Y#34W zWuVS$GwiYu&1#@=cP4m)X9A-a>~0K>r*L985c_s%yGb9C8r!Kk+f)q1RZyfRHi?)5%$r%HuU6CvahTT?mpCdK)m>p2mPK+K& z;z0k&A?u9&xWoWGLeuPAq5`O^MH|)dVEm)<%r>ev&TNqb`TRr`!q3HOsbQ6;r+lBX zr9gBW9^aUe$2bNLTW1&I(p*%Q270g+%J{Px78cn>VN)5Mg|gW-XdpGDGQ?B@y053# zGW;X|iX6Uw@M4RJG#!hLV|%9U%-J_bxjFoHD~DfVC?IdbQE|DC7;f&KJgHN%GI#Gs zi~PsCzc{Wk1`5%Kq}2HbDO=6eg7U$kCj0T*P6v~tOM7n8HguT<=qda0|E7f zW4C?F>6v8D??m#3hn;YGghSakgIo)Z5}G5a+j7f zS-7{sgyw>|KXy+FwHMpp-MxylcZBJ?Ub85#i1bfB2M5lF#RhrUeLe1!;lB;EL-2|d z_d3kP`r!>-E7qSryunyz-G>P~I$Enc~V(`^6T(B8yau+r0errM+m$N zaKO%zV66iRRbeMB*p)dSULd9ez!IOD_ z$w;X%Nqh6Juw2?G_E1t*sfwzVoLytpVjC;6i?mZ3sN*m*6>o1tmSG*HMy?S%?`q@d zwr%SsCe{_DjA|odI3`0on%5lV@D3afkX}p0i__dKslCfGjyg(Sgs$S9z@!6>9m9Y6 zo0TbB+$d9m1cLsa9c9u+0jf1T%Hb3?&uDt9YP9Q!*ls}ZBX%5?)eGDX#kn_{BdoIMF2Qwt6kkd4c5sTwEw?P7cMe{awoAEu z?tmmx!DZ>JAz)#cAsHo#SJ@`*_UVR`8}nHij_L1pK-a0e43iKqh6cJb5J}2w%89-{ zs2z4R2~npL;B}M2$xZo5DS!Hi#S$H!N2AnIm>3_^^Rc^Gog*~P%371^`i#PubyfHg} z7!3v~2UyM|3(PwB9HWeld(>Us3>q%AHDLLc6J?l03~ADo-^8jBS%Vkc8Z-f{2bP zPR#i>g{W596lXu1l5id9|NE5GVi_wbS4C}R5%9b%29?;yld@n9Z~^Fd0ALv)hOq#r z2a4OQV$Hj6L`QDp&CGRJN)CA-*vDPhl5 zJ00c4KJ7WCWm`{`7rmmPEoUCZ(S;HcKt^ws@s_u1RJ_fY`<}K0k{Cow6#xD3>mX z>CxUIk+CbT`ZDGNidI;v2`6sBacWLFAewTPQ)m<_<$ZRKcDG#8z5yga`sV|Hp6p<{ zq*{_=rk3GAUPH@n=tynD7Ey+#n@1H(FwtziyWp!!LQPyivd9joug7E5Kewx+LnuN^XaTycXF&P^F5^`rOp%dX-XHhTxl-6TD0u-y|}V zM>6@c&!eK1O=4^PZcyWve3DnH`EhnFt7Vj&B{oTW${MYA)O?V_w#Ph9#>*MmjzRlq znKTDV!h(VpAoc-yK`jUX#q@S?OxLP_RSoQd5L@LUMHC&xW++%S+~ZjqZb5EGvxE@r zaP$X{1ukB}VaRLWxT{*I$UqE&Xv;{{ZU^V2HlzI50i~xnUM|U-!|@#pGlh%Id}74% zirS^5#^f<8*I*=lysi&$OCat5S(wn7SRb&;LDwCy%DeCSfHMLHoKb7QnE?aNtTkYD zz<|}>0dzH(D^~#k6$z_n)MnmBy0*S#u4dATAM~&<+e}K4knMEX{px;SN57dIl?O+p z$A+>hZs7FdxDqZFwJJ3(eK+OOQ#VuH(Fvl5t0d8TPO_ax80D9J($=@LdXwus>3N*@4n2D8An!5758wgb;wVv(F7gJ z(--x(9In&Hw>v?fVmfqXI*i}M8`zRTDp=vpkWaOKD2>jY!vD4LypldBf4aOf+lnnv zuDQL-_NGt+5vrRUl~;k2dAfWWXoH)Sv`DHP3>`^3Dt9Zu{0&*ktwYS*<$MoH#os&^ zFUt@*;Zz>cZj`Wel_vv2qsj~8RE5?Gj~sf+3*(CG7!7%uX|5-$ zX;)*tAly6Rg5j(L910e%{7vGJ8`}cxoIE`wmB+Pvj^rvG^x9<})Ijz`-NkBsWJo7k zTI=Pb(AmV-r%~w>1BGBVWvfqljfyu(4%qhgga#$zCpWR#0zhs+xU8xQtOClN;n9;z8ks#7!p?97i>*qJSr z6=Uk07t~g!4w{*z#g|p=<9|B&SuN?o7#b`F4kVyI(c2^;^d!|;I(>Y%)g-1=6qT$a zm0oE0*_Hnm2~nMsEBc5%SraN}umc-c@7T>~o;Bc2yJDu8LYZh)!c!ZktJ7r?FLs0R zvya#|@&9>@p<-b36E^`gP1J#@eQrqul6W-XPjf zC6n>y)iRpc7(U=@qj{KiQ+=*VU+L&^U_>WV9sW?#LaLIV6u$hIeJeLxP?R~S#MZ^{ z6b(P5%5A(1UaKR&{OSvAZp2Qg3)by6#Y!(hVWCq)r#9)P#Pi~#p;O%3?U zho(PDG4Rah%ro1aXNx?~WY6ZM#JU<&(G^fP`_!K7M0c`&)Q6pw{WWvZI;i9jCAj*+ zw7Hlrsyf%|8tdX*+;85CRE>adaMy%{lFTPno$DaX4^X$j87XzO0M4)hDywQ;BdqJ*VQIPCYcuFgxcbVjJ_fth z{eh0PO3eki)=P2kT@|;we_Fr#T13tiB3@1AJ;-by&8JhKD(h6ObgH~Z@`D$$3%&4D zGN8|C5rPg&J15|1hBL67qLGpJ{5x*97AowzYzjGO87uH5dS0rtP^Uj{+~cy`b1Xcb zpr3kc+@C7&VgN5M=y&yTx$Cf8Ss8N>ly~(7hirdm<=j^J=ZD5IEsZgqZFNJX z>n_k$py(DZMrKrg0wtZ#Ekq8Io<9j$A)wcyJ*~d3 G?*9Quei8Qo diff --git a/translations/focuswriter_pl.qm b/translations/focuswriter_pl.qm deleted file mode 100644 index a9cf4515b069848ab5a75bb2e1a33dfe9672bd9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37114 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 diff --git a/translations/focuswriter_pt.qm b/translations/focuswriter_pt.qm deleted file mode 100644 index 71b5586964f62e06b8062ee7fb5098bcab1b902d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36813 zcmchA3wT^rx%NsjGf5_sN!o@|YAKu24y7%<10|F~n)FKArb%xUC`^)_WMD2~F0?5i z3iupu;)TlrM8tDc;DE|62m&7AKv6*y6uf|f){2S;`-@`kHF)pr%f#H9o)qGo5ixfkKJVWxPCfJ$AsXKhYiEB{ zh;8%5`ni`1aq=IPTrv9>~XYohC1NYUOHK_o4f2-!Klku#3 ztETwq*MzvpsJZx#PhsyD)O_|cyM*}QKiAy<_xpqx`+m)fmw-;`lWSg`5f0EuY{j^Iaik{-owV`!H_GDYfC7J|@J1=GxZF2ZT8G_1Y;9fF85H zP}|oG{LV?#CZ9YX^L?_`90L6GGqrmU>=5FJOKY!v^c^9N?ykMzw$Fo~{-gG`_Vq%{ z1^eB&5BN6K{@d|4;CXKCS0DZtAqMx=K5!M@+x0^2BSTBD|KZw4uERRgm)E{<%6uV~ zY^nX>ajkPZwm?6Z_n%Y;6P71MgcI_YD03H|IUHgwGCkZk7YF+4Cz+-WuZsP1~ zg~)8Hn->GzhG}(6?|KdU(pq=IJ5K?xeRU^(=N0V7Wp%rVU+)!lSNsC|wf5z@8_qd^ z-(z(*uLZo*epGkY(U8HdFV@{FW9q>h^!)HX&A?U-zpx);H~>x<41*6yo#;L(zx+h_aFKZLxxc>^JOCJY6eJ(VXzDkHyp9}51cNg}1dFYZCFz*RhhCck__aHC( zL)RRSeOvXj&?m3DM~G8;Lf7p)N{Fs&Lf1DxB1Gxep_|ry9iQJA`oi%$g;;%W=nVY7O!ekJr!%?2SBO$j~p!C}bjuF&J3o{oL{ZRp##WdZ-q(6b}ZBO)7m z_5#Ss=Bq-_wLcE}-4c5KRnX&KegyX;bGWdQ%xa)1K^VCdu^P{H=apbb_rC+*Mh?Ay-ufBDQ z5Ib)UUvpehh{$i%vw1Xp&FUwiho-6LX_@dfYmbBeeLj5Cb88^qbHX=YdOvjZ+2Nb_ zJ%Qhc!nfYE9CBO}{>-J|k0q~%Z{LXZ&-tc$cHa=b{SS+U7`QI{r6=%y-#5bdF24@* zelL9QgP8Y{b>aJ;$%B8s7XI;u&w##9gaJS{Ja|bxD|gtZ%JhFWmuPJk1Tt8BlOaPk@mW`urHsEta}M?!U>u>og=ziWs^>;_``P9++d%g)dT(P|Vk)b;1 znUB{WIP!Op>pwO$+zEQ`UeGY@-Q9p6Ygqh8$ouK58cw_z__Z!=Saag%+!V_8enH@Zf|&^?|R@nrQut%z(+0n8oqV(li2^UhNt(1 zz;{nIyzncm^TcP=^ZcJS{OPbC2=RfA#@Z)9ufyMJ44?Ty=#w>#Z7csIMB9~(lmBA{ z^l7Hi_y_2+a#rIEK2QE*<4x=LfxixGyls0NY_ml@^T#&cReu0_>e0r3zv42`aY5rZ4%`Cy`fB6T zH(x8no+lcA|Gj^Lo&9;^yYqJmG4Zv=cdx~MPdX+Vy>Bn{!J|>*NsK%4-Dvv}ZLn*{ zL{A#J72_5~Prn5EuI;bU!DU$Y;SWX4XIJ69%cHkl4t!VqB6|P%fH%K4`t@tD?h|&Z zXU`eYC#T$qeg0eY=?@j42UbMCbA1^02hXo}V*PJM59~c#h*)d%)s>*bMZb@}L%-*g zDNSMwb|G^B&tF0v8F*q{*|YHc6`r@?`6`}2#`D*(?`=(WHx6LkTbmlL03OG+H$^Xf z9(Lr;rk3zg*!Q8PCF`NL>+Wpo{_K3<_wA-_*PRKzsB0RUjs05id{gRK*x3(%qG|Vu zABLRwsb|-pn)b9ozB?Xkx^PAbbQo*8_uhKw(<_^vnDzf8dqeoZ|82J!w?{E`m9 z8H>fQZiHWP+%55|ZyyBzZH|BRO5l6ur1(c41l>1W9>4L`kHF8&#_xI_a1Qxd{ENq* z2z_!y{J}5%27I|H{^-x!p}#*Ce_86C)8nuFW-91h7k~Aeu(yNR_&?4KLC>Gw5`6%A z!T9f%qkrB9eZHq<(fnKBA3xmE{ZD{*{Kr~0KX3@({IzBKi=e~Wt6R(?{u}!Hw3gJD zf%lx6mcmVU!G3&4JqI?lTzV7ev-FvkM~>Z#efmtxQ=OCGH<~SfnE`rCe!k@|S6vIe zdTGnsv4=p9qf$a#dO0{iOctw!DF(!dNQ%5L#B4E3EE2~wP)T9OM6@%VE11UYS&NQ= zfQWEM+RPVgIC7%cAW|ZW|1A78eH!AVzPL7#*iPTKdh2<2mATFn9Eh>kFB>}`# zpE-bStwWw;(quMAPv*_{{k#2NfZ(lP$+v*Lt>(a z#O_>vurdm5l~z4D=nvWy&Er|13#1HFE@_GbzwA%i3{9M&I`$#4P|R{jU%PM?w>f~& zQziWj(2=Z}1P_gfljM#sc1AbPT4W@$gUQ0kNyei$LdsiVK}!Ny8uo&=}4o)0|{t+3t2H`^~i6 z+-XwF3;`n5AJt}Bydf8fO>veP>obc+cQQL%N)Ag!*xHpED5i4RWPVKJl<5}Z&4y~B zf}*M##ZOtugsvuzgZXCnn#sXqH)YdfQeQN59kSG7LpeLn}HD!%PbhXQ~0poG+=p(^SKY@__cz436Ha8 zft5?~hRr3g6)5Zl$NM`-em^^0g$9N`GN-3 zl)RA>r#PTv3be60l{QcD;s^79DL2 z<#QQhFjY7&0H39zL)&&zjIc?s3>HWF1uWNDY*Vk9O=e8FSpQn5h&3A15H_*RX!{WB z15?P+Mn}O9;Py%Y0E(Qt2mcbi0(Kz-fui*%&(e;U`v?2w2*vT_bnajd3_=w~58^kH z%je_sAm5_W`|hr}8&`5&ehjRH$vRK5M^9}eV z@^kmIfbD5@@S&VT#vIaz`*QjGn4e}Vp-h!Ta)l|ZXcSKxfHxolCZLdBC1}h7R-VHD zCCS5vxLY#VBf^#3!?tFV{otZv&d6P0=6B~)Ma5D961#C6^XeML&uVuAGiotI=r~Mv zae(b3vyrC*5LiAA1au`v1pG^GbEl)isx;Zu%39djp(afQ`}gVpUDF)Vl{3b2C1ZCI zE&;YEFLjz>%f95M7TbDkPZkG8EC+fS#0nlI*g@&Y99Vz?p~naTQm-kwglB3=s$AX} zkb%U(F_?jfq+EfPn;&Q$hm0|5QlnGa4XLpM*EBN#BAH!9F0`|Lm|bStESi;J#>G0= z5$ZxxON(RH4QF$CY3>7Yd0%!Y5YjHON$!l7R!U540r#yFV<_}W#2CQP6Xa*MN0^j~ z&lU8!TWo^?2V^&t*q|bf(LZJ+vpH;N-WX-blFUfSdr!!^hRa4+*8|GHj00VVA&zyB zmDY{uDz9SjJ)t`uMVW+}q(5#eE6U6HQeo1~bm@1ft2J_?X4XjN2S!pCn37geh~OUj zbe8l@MEIe6^8r9A=d5sIbxH-uQU0KLkdra05AS=_wnLPLM6U_UGa$LrJDA=Sx86Tt zsM35h%XuH%qrCmMVKxYcaj6^aHYtfP29hcr;6>ngcp20%TrHhO*R8Z!g1#`l13G(r zi!P>1-w8b+p2C^eU%+s95fPSQvoM;lH#2gzmsG`_$f|dG`;ja4=ZR|{ZI=b z1L0~aTPP;81I$`TL*iYUQDLTpbSTPntqnDSIDmH03u<}=P)aAXJ5+DB0qsr|N7{oR zO$MJ+MCq@|pj@((>oYa=nUqXpFtp70Nd)0CpspxHDl)MnJ15w5sM)%GBnP|7#7e=)A=(T=X{Hq>(t%`T zz<<4=kE;b58R*ekOJQhUEuGyB$t*%+mAPvl4>(Lg|5VYPzBw&~JIN$Y(pMTC&E;Xc zt4=o^)^o_hmpW$?fKtyGVh8e?-3}>QHVqA>225iURrih!-K0bS_A?v+UBHM+kRcLj zZD3t88gW2QAS~PWGPWQXr~tGL8_4bBruo4{dt@+CWxOGJF_xjIGa5gwmg+$UHx5dz zy(zFhK^baiDqz%(6vIZjuo1aL3KKVE7@sj@P{BozzIO8%lV@+t8HLg?GeA_1N@>e{ zM$_8V@JJf}7ae=pA%%4S>!AMEJ*~QqLFu0P1}zoafDTQwVn;iIBa<>GtP)@QoxjdU z$yPHbog?PJc}Cx;nNBknn=j3YZ<5KdfutcWc{SC)#!TvjG) zroigC{sTQx1uNt1NmR0&9LL@8K}d+@$QU_kC+viBml*JJFPI2QiWLsL3CsJ&3Pm&H zq@-35Y^*yskW8DJH_?C{&SAWpRtas)6{YXsfBAN>sB$KUFc}>mxhXvxeW)61~nUnb1w0(XnU#zuZk&-;*}!Ccq{alX(P1 zBdLOs934%k29o4M#@{kNQvM>0oRPM2cMPD4$@5IZ92znQR7%QEic?{#=xsAna<~;J zk9QHSF`L#04|||khMkRzv@1cAA3UaaR&Qq5g$+%#C!ywwKquuP6PgCiX>!AZuN z(33ZZOoZhFWD|e( zf`JT55sa8d@_7LHT(jDYYds-)5{sc$lPcYs!L~lcz_#sA%Aeu#kdK^^FmSEh5&sPG!ONJ!d1DPO2cQyQ7Ku^!TlnnOWW zHN7NwfXc1h>ux~~AfFrn;fw*q0MepX;D^apmbDC!aHX%w0acK~RsqbZJ}aXFLD#}0 zrG??{C*>+s-jR4qZgA)`Rau;ZWpS7%Wa_3kHY$~Fh56%HhT3!1tK5`GeP=F{u_~z* zhAx*w>6|ErwUs56Eej>eNoE*_Di1}EWVsXUHCS=Da0CIPf_)+b^@;m!; zcvtFz)S$`yhb|e+gA`JGs_YPB4TX@BY?q1+3Zx2dDl8|4(e%*ElK_#fTnX9YDznBA zX_Elu2Bm)0V2Ua6Dg&cXhg1hh964*RUt?y?yei^Vz;mKlOLAe8|AfKR%bEW}%8eWvOEoj=M0U*)EQFS!sLRkPXtFz?B4Je)%T~^Ma!kVL25(L`88CWj| zZk5S`3d3T0sOAiWGoP&{hv$O8bYn?K=4}ZBI;pQH6v9R zp)-zj^MGj%%H&gp#jk{Hq!FD_HxdcO8MY&#P_ZH|Am?iJ{TM?O;WRlUYwJNMXDD;m zksi*W)HRZ+B2+U1-Ir0Md;GAY686D-mSBfSd9H*?ZfCaC#kr*iS|2(2(UEaDL_Kmp z$^dEH-Q<9(%HXS|*{~h-{gUov4$_>~ldTeDANmtEgHe=Hl1-d#Fy#|-v zNbbFun(w(a_@mW?s=Y^6t8B$zBo0(6d(C{Vnnr2W!me_cJE98wRTdJ3`eTr&Yn4bJ zBE71f;rt321tnE(Fl;T}q3#4Le=sh&i9u1)(UrQ~0nyNBY2hl1it8ga)zfH?t>ytt zgRD>{RJ5VO=GUaofH85u)uy9EoJ@ zo4={xnZ0XTp+{4U&3zeWlFlz7JyumUE=CSGWhnur5X(a?rcjwZQ*E?V4mt@kITTsp zq-2ZLNHCrXK?VIW-xtc-dWxFNmoRmx8<$B^l;4pst?r{wfhOTz(`|S|{-hEi?lPl& zMdTll5gw?vNCpXnL!05c>*2oQSk+CQXXoHSSvwkMe4^B_`q%Hgx5<2XM;gtF1qM>m zm#-oZK_LOdNZEz7Q+Fjaba8n?6J&5wa9j185vX&#emgdg<+2* zO(jya$~m@XQKvpA83tuv0_~7n4R>q0$~ELV7)>Kq!vCt4K*8|oG`yqx2>WH~B(0_E z7qQ@PmDEwYL-!!-!0;T4?6gW6rGo5I8gyI;na-~u2>lZEU^G-G_zWO)F02ie!yceZ zW;CULtGs&?f29SYMC;}FH^i}ISFfmasFB^E&Cw68~H%0YZa=CPWvRcxy9j3Sh*_F!40h<9S)Gn(u zr<#o6zyPN6Cb}kUK}t(Disg+0QzO+x{r^`BMg>-QukizIg(qrvM80i1lR@K;A7)mF zA84d$Cb+Sh=9JJ67D1@evo>DSAQ3{SYQRR2CSVUn8a$wKR5QTdW0Lt*S&chSE6yZz zUYsW=C`!gv5zcLgrDdHVEwx?Qw6)p{O+1d-E*lE_$Iw*>?4WmGYnepWdnnn)T8)QJ z1tAYe#r7H|RS~Qg9TrKqAd9GEw!E_JRs|132@Kk#;MA6Tx2%?3v{Ick_7;bRX_`K0T^2}-@@JLnG~f$4*1(yqMV_|l z8%Yfn=h}&iM(MkDLrF=%bH)LffgzZ~0o$yBRcQ_?b|>VG#qpT7s{LztIl?!{~&WY zE10k)H;k~tkQ-=F3<8!CgAYd;mZb=1XuVa4;DGu*)gLBhh^>Drkxd0#-jfhbs7@KH z86j?s)7xiSF`RXK#xCW9>k}Kz-Bm_TsUW-?9GqjCsBR$QK?qa=voR3N#!6tS zZl!_kP+k-{`)~*Mk|hzQh?NcCZ{_8ADp*4^I#bjXMnTr!p;HTLgQT|=v}guhs@S38 z8COd+c9m3XflQJFjh*ftTaK_pwh0a-)T3oTVI>mGhWpB6F_d8IL?&RWSk@**dF8!D zv5*Z|+R`9gRZob1N~R7>RSA#D4kwmvfwQ6}jJ2n%1Y?|;xFBR1hq<+Gs%0uOwraze zI!GXe#S;US=3iJ12*4@Uv8f6Ma{$M!b1w(kEb7OE#h>My(%6?!`&@B5rb`0TH3&dN zbL^Te91N~hMutK38c*gRXdLP6wlI0*%^^o)A8JBuF3VLS^)?xGS^I+((G8-}=ZTyW za(T9UWXD}J<@@oTJtKEm4-!>e@48E}Cp>SS&$D5!OiP*=>;bZ3F1VJZf^waLR?Cu= zN-^oqNVpSSMKW$;s!G-^Sh18EeZD7qNynG!nGS>OUcm3vSY8u>6fKjZNJ(n8!VkVY z{pQxUob;RAaQ`?%dP&O1R8b4jVTIdj;BvOE$!eL}o=iyt7nS+0%}jU61yV+o+pLGW zDn3wJhyQYk1&>XdrrLFpG?Ljf)qq6@zhD_E?^JD&l@3tKO%Uk25K36RfH9eok_jox z=cQdNQwPrK>Jw=6zuWirNVu1$$_vg^9S5H=K+YdsaqxQr21>jh(3oWX_@omPu0<^h$q)3bqAbBnX4 zxCG?1O$HNn*?XVB!#Hhn8uE?ZE@Lr_pN2c6dskj^v>UPft)XrN#zY|d_o!O=uQzhj ziVB@bGokX!9t)KMHIhXfTpdnjvqaH~#-#V)$8RcP>IAGc6`zc7Fqe;0)+OX|qRO1I z*a>k}+~dYMY6Y&q?8huzm&*_n8Pr1Uxml~ zfE=RI&~guu`OA#**RxO66u5$Kodku|s-IHYOt903!*}leS?|1 zQ#RU)^feidbo8STE9KTVj^_u|I41+4k6ei}p}T`e&bM+8>?u%fm(+tiZm)Er`q$3e zxt6VMWxAAC=Ll9N2hJPLGt0}}_TknF?W}lAWx8A#4V|(9R-L`{jcbrvJ+H3=cgofyl7ueGB2-k%KLh)#x`5KywEtLtXpEEBC5nG5xDStH})%1p+SgDSNyGpcfR?y->uoUU;XjrjEt4?3~+ znNbyE4^vxY!zL25I2OFZIMj*T!sL=B%oe8LAq%xFb#vLuGvU8Pg~#BW4kl-dCOAz; zRd<+a0&bMuTH|8XSXL4B(SHgCa*vghtUNxMv3D?t;no`-Bt!3wY9#f+h$6sa4MX>- z>U)!esgf$D_y$x-Zn+ILzEN=~F$yHb5~AuL81AJ?2-HK}$emZz)}T9mMb=-b+bRFb z5#nBO8ftfS36gY_oCy!_r8@VjcNDhrXtoU&rdH@P)t13?sJb3N`wPw;1sjKPv~&2V zq%;moDpotYgLY#du0-Mu2f>rgfk{?MLMdHab5kq!gNls7R6m5vT+uDbeq(!T&^l}C zLni80+8s1Ptf2?)*0gH7<&1BUHTZ*=)wR$K+*;;ksKC`pDb;N+=`TOC+waC>(m&vt z*64y*7=0s29Fz@QO&esMyv07a0+8T_xYjqk1@)=mjUdsK@pK6tX302Mx6E^V6y_Jo zwTtJtji%ySw^=7`3>@r4nk5)^tA{6Cgd$aTore*0spAH)9e`CmaFMf<6Sm|0KKhyt zvX^nO-W{whp5&2ey0d3MS$pM(vTRByBtl(6Sp3^rU|*~yEe7D)Kr+6>b$gLc?YPBp80 zk+A?bb1vp~YxB*vaMoR5=1qJvIrvWibb7{xb{nt<q^Cd#T8r~=B&OH(&UOX92)m%=9V(gNgiWIflJiti%3=b_}B0QFBErQ!M$WJ(=sq*ioIK(lQE$Wl`KYm?hyxI)#{ z#E$yb-fhJ}vbErY4E}4!0$oXLSi818lW8wVS=2`GV2(Ut&&_a_7T$oKdTG?PSI4Pd zv=K8vw{xL7RU(*%kZuSoX{37j={npwQiPm>`W}L^w8w0q@)&F&RE_}RVBEmr6iLtM zDCi;I)K|y%ysNA3@o9@1CyirLKj88_v`LQ1{NPfMnkLO|F%9Ml6%Q*n2O*EMzzK+@ zi{y`jkuS-dK3D3Wg?GDB#duX%J#Nghb(b2Y`$rSedR2*a8t3Y~;~%>kX)tPEZW5*2 z-XaEXb}Y{X1@5KI%0yy^9c|Dxy%#BKU)!&{0;6Vo? z$qoA@f-ZV333ap@`HkT`It{!t&jGAn@RePCw|R@MwVN<3*CefpE^`2m3NF}C2|_PW zu3pQnYRj=bVtqMmhFT5OwQE$h5xhpo3xA430ClR0B2nH4)gbRrv&x0~WYZ*Sl#v6F z36&aA2TAlzZAz>zrPBp0(#(1%XLXwL*bl1l?h?;gn#5W(bz3<~ePWupgjCjgVkC^$ z)AC%W{w}#~9k^^ifR{(qs7Du*I40>uDvA-bGkVufh`nIm7r8ZjQQdgz`o3r!<6(K} z`0A)|wOv?gL83zYtn18B0)e%63ht-dEaKf4UUU<%FPx_b(1R0%(S(yB^v)K;K#Go3 zj1J#KFaQl8-j})iTn)>-Y@4!gH!erAC7~T448WD_r{W%!LTA3N96}=?q_V|;vD~OW ztW&Q8h7+4hDp2%No|36-yRzuIX6Q8sWtWXUhBumTfc0m#my%2`h$UxwMdcVq6RLA5 z07Vk14?w(q9_0X<06-p42!KHTExYm8*_Utv$LD<8G8ON053_P(cmgZHeM!IpVXWa( zVZ?V6MliE!=a#8P%khmRWPKO_0uZKDd{=5bikn*qjVAg^{ZIp_FM3&tT)qWlRpC|n zT+xII%K~O1?`#3Gzr(&(sB~a3^p0C1)Hj&dup}_t>+E`aZh(PwWh!7m(^UC{NF>1{ zB0f4(L=|7S1sazjqX~Ip$SxA;NRzr9psu&YCCni{9zNGe;TSm3uMQcorQ2J!RvwRG z)t!{*JAep4*-(`YrSzyI2jgxgi&Pq1nHsli>?nDGDEh;)=5CxmD57IWT@R(Y?FV3l zWsiZrs`q~byAI_XTVPyXc6om1bZRhmFV@!-(W~ry{qOzVVp+j*i9nj*o?68R9P$hpmyAPzosH zYw%`KW6zm%p!2Mq83~H>SZz%{$$apdT+zq5`Zv)mcX&yC6U}lj6X`Fz z7x1Z<<*j@A0`-^Idmyi`2KhA4%coU)+3n_6XvjYPN@#5MK;B#pa-ZkrUhm75P6l*1 z1N8$2^4mRh#3~Kn7C3yHcXpk;yPP442)nAie75K1v#Y&)q37ibtG#@Y=jDs4y?n9f z<%_*9tBb%?rUrh1^LnVWl<=|fE_nI}AP>rpGD}a};@gjq>}W9AXw8GUJpIW7xjxewL3D_z9qj8?6?_rRROwyWMsEm8 zKy@eS;Yai81PujR)a-Jr&Px&4nnhxfJIm@ti@fv<;hhtlH)>a(;C*4H6=}PHraI=p zW={5^(cozQA}^vg5O=BKuZ~R+pafK?1R&KNf-(n_xCDeSBymA1SMs@Htiz|8m)e1mwJMNRmHF7H=|YaOPVBvV2_0T7Xf3XI4SX? z3#$AmdhYy=1sXKff5DO=O_$;WSEv%&jPfRaN>pK_RFs!i;|mtdBrY2Bi53;8CpUrV z5}Fu9tptUU@JU0Z!Hb>EbqC9uiO%4a1}_O1yu`~Dl?J;93Ei2Oj(6~J0W%*r-oeKQ z3_jjFcpjY51UA&(KqVWLi>mpvb%|`%{Milwb-QC-C2SYt$TR$u|5B(mR}-Hond0Bn zTS4w)Teq1QlE+S@1Bn_hZte80ZYi8d`!FqI5eC?HmRaSR`5QH(y?%V^kZmH5O3E+0 z8MMB*%BRK{A*g^%$%3tzn0WN0XdJMu-T1yHmK@Q~5tt4*)$&eh*9g$XjU-ce6TI@M z)$gk9fg-7|Anr`%++UzG{Je2Y#OOw52ps$!phdPL_(;-*{7ph~k7{rz|Ek5t4GG?7 zhx54Jz53rd4yZ5hy&mk-$F|9+mh6|dR)ZdBhXjqZ4GA`MdRM`EmV3&KeC0cmp+Vs- z?Lq0`Hpy1hf{Y@_xrh{;aq_BdGSDoa{#%Ls2ERg%tfQJ5Y$I8god!VeX;4zaEwUW4 z$@!url~mwaeOY7C3B}Gtx6Kkgs1jM!uw8UjS(!1Dms->P8B-_&KM41FxI%jn9L952 z0u|FI07K;zhVZHFVR);F6J>tYKn6!$vTA*Oj=r{Y;Bt^gq$HEA{rI2mf_?iN9Vt>< zIT5sv_GRG9rRExu`!FO;3v|=L_&{XDmky;@jnTdjv$wSe`VH zMjJYL)}j?_db*7z%NHb9poJObB=yZCI;Jx`l1#_S*1Ale>REMsSqHu`F5#>AY_v*P zJR!`mUzq~xXj|zheT`xhR3>l8uxAKzu3bJl5(flvbsMra{PH%g3~EF7wtYOc1Ga;w z(x{s0;!&F_J3(h(rV-?)KI?!_%Wa3pwm3Z5)|*N&qQ$;#4eK^m+9jE~mbD%KMzBRyM(N?xAR7+wl1tWN`pHR+# zb2%9FlPaH3-%~r4H1NEuF0sMPmfSnC^cAo00jIbnpzgRoR1fyv(G#hhi*J_qTgZgG zb!U@4%VI$6kSdmKv2>+aI;nc4owEe%LOax+c%z+{&b@%kD^=OzO2}S*RHRYi&8U

    7=i6a2&WOTSafr zJ1ZKBQ@+$46v~>c;}D&HdbHEwRar&Wu1E|6wP>NnAf|FIB=1_NjUnZkj0WotctT;;N&SO#lhcHO1G&zNL0!? z4>oyU7u9L{2v=+|O-bv>F9Vie#=zVqJV|wPoloN3Q(4+~FFS10V1M7IcLP;Lj4Fqw z-@UaZQH2Lvw~h`baW5LaX;Xduvll3H5d4-5FHmJ~$O+1Rm-p~Yu)!*8Yu!1lYu$~A z;p|G}dv(>jt2pcPwpMi1yASHA_gF}2_wNHqCBynDfZzyX6N;!~5Dcm)_6+MW#8RMD zFjDdgf5+9-8&w;AS>{yOZo&s z(OXnC=>`REBiMSbKG=~|X4p0+G|4O_(w*iQ{*~U1`nxip%1}~qP}o%L!na-Hxajm8 m&ivZ$r2gIAMrufYlgVH%do&W2^vOx0GSRsLZEv+THU9&JSN%5t diff --git a/translations/focuswriter_pt_BR.qm b/translations/focuswriter_pt_BR.qm deleted file mode 100644 index 0d4ac6e747c2b5546e777f14f8710766fcdd488c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38250 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®?yiFSM9x`@spM@@3G(m*_aErc#}a_*pOBE({U1S)qP+GS8bS+$_w~Hk1gx zz1b7*s-9-QIQ3$9krXNAqxkvG${#r@>7n{+8R$?ia18%y$ZWtMGQ^JMWi_Ai#u0gy zD&KW{gC*zYaLU~Bo)4sPT?5<~ILo-xVpx73XegJRha@b65fZ3OgS;QTgSB-v{~rn$ BNVNa} diff --git a/translations/focuswriter_ro.qm b/translations/focuswriter_ro.qm deleted file mode 100644 index 64a09253165cc4300b80ad79817872f50b07bbc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37549 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 Vw9b|2lWVA{dAmluHNR%s{{d^AJR$%9 diff --git a/translations/focuswriter_ru.qm b/translations/focuswriter_ru.qm deleted file mode 100644 index 17e973e8ac109b9991877f98ffb62bb85e6e323f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35647 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