[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-1-9' - 47 commits - loleaflet/build loleaflet/dist loleaflet/po loleaflet/src loolwsd/Admin.cpp loolwsd/bundled loolwsd/ChildSession.cpp loolwsd/ChildSession.hpp loolwsd/ClientSession.cpp loolwsd/ClientSession.hpp loolwsd/common loolwsd/Common.hpp loolwsd/DocumentBroker.cpp loolwsd/DocumentBroker.hpp loolwsd/IoUtil.cpp loolwsd/IoUtil.hpp loolwsd/LibreOfficeKit.hpp loolwsd/Log.hpp loolwsd/LOOLForKit.cpp loolwsd/LOOLKit.cpp loolwsd/LOOLProtocol.hpp loolwsd/LOOLSession.cpp loolwsd/LOOLStress.cpp loolwsd/LOOLWebSocket.hpp loolwsd/LOOLWSD.cpp loolwsd/Makefile.am loolwsd/PrisonerSession.cpp loolwsd/PrisonerSession.hpp loolwsd/Storage.cpp loolwsd/test loolwsd/TileCache.cpp loolwsd/Unit.cpp loolwsd/Util.cpp loolwsd/Util.hpp rename.patch rename.sh
Jan Holesovsky
kendy at collabora.com
Tue Nov 15 14:37:03 UTC 2016
loleaflet/build/deps.js | 7
loleaflet/dist/admin/adminSettings.html | 2
loleaflet/dist/images/lc_insertsymbol.png |binary
loleaflet/dist/loleaflet.css | 16
loleaflet/dist/toolbar.css | 1
loleaflet/dist/toolbar/toolbar.js | 8
loleaflet/po/styles/ab.po | 4
loleaflet/po/styles/af.po | 312 ++++
loleaflet/po/styles/am.po | 236 +++
loleaflet/po/styles/an.po | 4
loleaflet/po/styles/ar.po | 896 +++++++++++
loleaflet/po/styles/as.po | 892 +++++++++++
loleaflet/po/styles/ast.po | 712 +++++++++
loleaflet/po/styles/be.po | 400 +++++
loleaflet/po/styles/bg.po | 1072 ++++++++++++++
loleaflet/po/styles/bn-IN.po | 812 ++++++++++
loleaflet/po/styles/bn.po | 384 +++++
loleaflet/po/styles/bo.po | 380 ++++
loleaflet/po/styles/br.po | 956 ++++++++++++
loleaflet/po/styles/brx.po | 12
loleaflet/po/styles/bs.po | 772 ++++++++++
loleaflet/po/styles/ca-valencia.po | 856 +++++++++++
loleaflet/po/styles/ca.po | 856 +++++++++++
loleaflet/po/styles/cs.po | 908 +++++++++++
loleaflet/po/styles/cy.po | 720 +++++++++
loleaflet/po/styles/da.po | 768 ++++++++++
loleaflet/po/styles/de.po | 856 +++++++++++
loleaflet/po/styles/dgo.po | 368 ++++
loleaflet/po/styles/dz.po | 380 ++++
loleaflet/po/styles/el.po | 1068 +++++++++++++
loleaflet/po/styles/en-GB.po | 16
loleaflet/po/styles/en-ZA.po | 4
loleaflet/po/styles/eo.po | 1012 +++++++++++++
loleaflet/po/styles/es.po | 896 +++++++++++
loleaflet/po/styles/et.po | 976 ++++++++++++
loleaflet/po/styles/eu.po | 828 ++++++++++
loleaflet/po/styles/fa.po | 64
loleaflet/po/styles/fi.po | 812 ++++++++++
loleaflet/po/styles/fr.po | 804 ++++++++++
loleaflet/po/styles/ga.po | 744 +++++++++
loleaflet/po/styles/gd.po | 812 ++++++++++
loleaflet/po/styles/gl.po | 832 ++++++++++
loleaflet/po/styles/gu.po | 896 +++++++++++
loleaflet/po/styles/gug.po | 68
loleaflet/po/styles/he.po | 496 ++++++
loleaflet/po/styles/hi.po | 892 +++++++++++
loleaflet/po/styles/hr.po | 752 +++++++++
loleaflet/po/styles/hu.po | 776 ++++++++++
loleaflet/po/styles/id.po | 672 ++++++++
loleaflet/po/styles/is.po | 820 ++++++++++
loleaflet/po/styles/it.po | 776 ++++++++++
loleaflet/po/styles/ja.po | 928 ++++++++++++
loleaflet/po/styles/ka.po | 336 ++++
loleaflet/po/styles/kk.po | 1064 +++++++++++++
loleaflet/po/styles/kl.po | 4
loleaflet/po/styles/km.po | 696 +++++++++
loleaflet/po/styles/kmr-Latn.po | 220 ++
loleaflet/po/styles/kn.po | 892 +++++++++++
loleaflet/po/styles/ko.po | 696 +++++++++
loleaflet/po/styles/kok.po | 356 ++++
loleaflet/po/styles/ks.po | 12
loleaflet/po/styles/ky.po | 4
loleaflet/po/styles/lb.po | 60
loleaflet/po/styles/lo.po | 16
loleaflet/po/styles/lt.po | 468 ++++++
loleaflet/po/styles/lv.po | 956 ++++++++++++
loleaflet/po/styles/mai.po | 52
loleaflet/po/styles/mk.po | 56
loleaflet/po/styles/ml.po | 892 +++++++++++
loleaflet/po/styles/mn.po | 56
loleaflet/po/styles/mni.po | 12
loleaflet/po/styles/mr.po | 892 +++++++++++
loleaflet/po/styles/my.po | 392 +++++
loleaflet/po/styles/nb.po | 784 ++++++++++
loleaflet/po/styles/ne.po | 108 +
loleaflet/po/styles/nl.po | 780 ++++++++++
loleaflet/po/styles/nn.po | 784 ++++++++++
loleaflet/po/styles/nr.po | 384 +++++
loleaflet/po/styles/nso.po | 360 ++++
loleaflet/po/styles/oc.po | 768 ++++++++++
loleaflet/po/styles/om.po | 380 ++++
loleaflet/po/styles/or.po | 888 +++++++++++
loleaflet/po/styles/pa-IN.po | 396 +++++
loleaflet/po/styles/pl.po | 880 +++++++++++
loleaflet/po/styles/pt-BR.po | 828 ++++++++++
loleaflet/po/styles/pt.po | 796 ++++++++++
loleaflet/po/styles/ro.po | 692 +++++++++
loleaflet/po/styles/ru.po | 1044 +++++++++++++
loleaflet/po/styles/rw.po | 44
loleaflet/po/styles/sa-IN.po | 368 ++++
loleaflet/po/styles/sat.po | 356 ++++
loleaflet/po/styles/sd.po | 376 ++++
loleaflet/po/styles/si.po | 360 ++++
loleaflet/po/styles/sid.po | 888 +++++++++++
loleaflet/po/styles/sk.po | 856 +++++++++++
loleaflet/po/styles/sl.po | 1044 +++++++++++++
loleaflet/po/styles/sq.po | 212 ++
loleaflet/po/styles/sr-Latn.po | 368 ++++
loleaflet/po/styles/sr.po | 388 +++++
loleaflet/po/styles/ss.po | 384 +++++
loleaflet/po/styles/st.po | 352 ++++
loleaflet/po/styles/sv.po | 764 +++++++++
loleaflet/po/styles/sw-TZ.po | 16
loleaflet/po/styles/ta.po | 1072 ++++++++++++++
loleaflet/po/styles/te.po | 884 +++++++++++
loleaflet/po/styles/tg.po | 52
loleaflet/po/styles/th.po | 244 +++
loleaflet/po/styles/ti.po | 4
loleaflet/po/styles/tn.po | 284 +++
loleaflet/po/styles/tr.po | 784 ++++++++++
loleaflet/po/styles/ts.po | 312 ++++
loleaflet/po/styles/tt.po | 332 ++++
loleaflet/po/styles/ug.po | 884 +++++++++++
loleaflet/po/styles/uk.po | 1072 ++++++++++++++
loleaflet/po/styles/ur.po | 4
loleaflet/po/styles/uz.po | 276 +++
loleaflet/po/styles/ve.po | 356 ++++
loleaflet/po/styles/vi.po | 380 ++++
loleaflet/po/styles/xh.po | 384 +++++
loleaflet/po/styles/zh-CN.po | 968 ++++++++++++
loleaflet/po/styles/zh-TW.po | 1064 +++++++++++++
loleaflet/po/styles/zu.po | 360 ++++
loleaflet/src/admin/AdminSocketSettings.js | 10
loleaflet/src/control/Control.CharacterMap.js | 256 +++
loleaflet/src/control/Control.ColumnHeader.js | 8
loleaflet/src/control/Control.DocumentRepair.js | 7
loleaflet/src/control/Control.Menubar.js | 392 ++---
loleaflet/src/control/Control.RowHeader.js | 8
loleaflet/src/control/Control.Tabs.js | 2
loleaflet/src/control/Control.js | 8
loleaflet/src/control/Parts.js | 1
loleaflet/src/layer/tile/TileLayer.js | 16
loleaflet/src/map/Map.js | 14
loleaflet/src/map/handler/Map.WOPI.js | 4
loolwsd/Admin.cpp | 23
loolwsd/ChildSession.cpp | 163 +-
loolwsd/ChildSession.hpp | 30
loolwsd/ClientSession.cpp | 32
loolwsd/ClientSession.hpp | 5
loolwsd/Common.hpp | 4
loolwsd/DocumentBroker.cpp | 13
loolwsd/DocumentBroker.hpp | 19
loolwsd/IoUtil.cpp | 107 -
loolwsd/IoUtil.hpp | 6
loolwsd/LOOLForKit.cpp | 23
loolwsd/LOOLKit.cpp | 114 -
loolwsd/LOOLProtocol.hpp | 6
loolwsd/LOOLSession.cpp | 4
loolwsd/LOOLStress.cpp | 6
loolwsd/LOOLWSD.cpp | 89 -
loolwsd/LOOLWebSocket.hpp | 89 -
loolwsd/LibreOfficeKit.hpp | 645 --------
loolwsd/Log.hpp | 2
loolwsd/Makefile.am | 7
loolwsd/PrisonerSession.cpp | 24
loolwsd/PrisonerSession.hpp | 10
loolwsd/Storage.cpp | 110 +
loolwsd/TileCache.cpp | 11
loolwsd/Unit.cpp | 2
loolwsd/Util.cpp | 366 ----
loolwsd/Util.hpp | 75
loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h | 2
loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx | 610 +++++++
loolwsd/common/FileUtil.cpp | 202 ++
loolwsd/common/FileUtil.hpp | 93 +
loolwsd/common/SigUtil.cpp | 288 +++
loolwsd/common/SigUtil.hpp | 51
loolwsd/test/Makefile.am | 2
loolwsd/test/WhiteBoxTests.cpp | 28
loolwsd/test/countloolkits.hpp | 21
loolwsd/test/helpers.hpp | 17
loolwsd/test/httpcrashtest.cpp | 50
loolwsd/test/integration-http-server.cpp | 5
rename.patch | 195 ++
rename.sh | 58
175 files changed, 66659 insertions(+), 1704 deletions(-)
New commits:
commit daa58dc963a5e4dacc016ee946082fb9801471f4
Author: Jan Holesovsky <kendy at collabora.com>
Date: Tue Nov 15 12:50:58 2016 +0100
LibreOfficeKit.hpp changed meaning of getPart(), update accordingly.
Change-Id: Ia346f4f838856040fa9aea26b3ac9c0b596b9218
(cherry picked from commit 72a5f35f30d2e9250795abf910a1456d7b62b78e)
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index ecd98c9..07b3a4c 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -100,7 +100,9 @@ bool ChildSession::_handleInput(const char *buffer, int length)
std::vector<int> viewIds(viewCount);
getLOKitDocument()->getViewIds(viewIds.data(), viewCount);
- const int curPart = getLOKitDocument()->getPart();
+ int curPart = 0;
+ if (getLOKitDocument()->getDocumentType() != LOK_DOCTYPE_TEXT)
+ curPart = getLOKitDocument()->getPart();
lockLokDoc.unlock();
@@ -919,7 +921,7 @@ bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, StringT
getLOKitDocument()->setView(_viewId);
- if (part != getLOKitDocument()->getPart())
+ if (getLOKitDocument()->getDocumentType() != LOK_DOCTYPE_TEXT && part != getLOKitDocument()->getPart())
{
getLOKitDocument()->setPart(part);
}
commit d4e3d55cd2d8524bafc364fb955984792c148f21
Author: Jan Holesovsky <kendy at collabora.com>
Date: Tue Nov 15 11:37:47 2016 +0100
Get rid of LibreOfficeKit.hpp, it's mostly a copy of LibreOfficeKit.hxx.
Change-Id: I55f9c28a3ac1ef2a36c18c29cc16209bedd48770
(cherry picked from commit 2069650ba64bf9bbb8a4b8f28add7502e1d24dc5)
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index c28cfbf..ecd98c9 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -83,7 +83,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
updateLastActivityTime();
}
- if (tokens.count() > 0 && tokens[0] == "useractive" && _loKitDocument != nullptr)
+ if (tokens.count() > 0 && tokens[0] == "useractive" && getLOKitDocument() != nullptr)
{
LOG_DBG("Handling message after inactivity of " << getInactivityMS() << "ms.");
setIsActive(true);
@@ -91,16 +91,16 @@ bool ChildSession::_handleInput(const char *buffer, int length)
// Client is getting active again.
// Send invalidation and other sync-up messages.
std::unique_lock<std::recursive_mutex> lock(Mutex); //TODO: Move to top of function?
- auto lockLokDoc(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lockLokDoc(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
// Get the list of view ids from the core
- const int viewCount = _loKitDocument->getViewsCount();
+ const int viewCount = getLOKitDocument()->getViewsCount();
std::vector<int> viewIds(viewCount);
- _loKitDocument->getViewIds(viewIds.data(), viewCount);
+ getLOKitDocument()->getViewIds(viewIds.data(), viewCount);
- const int curPart = _loKitDocument->getPart();
+ const int curPart = getLOKitDocument()->getPart();
lockLokDoc.unlock();
@@ -311,8 +311,8 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
std::unique_lock<std::recursive_mutex> lock(Mutex);
- _loKitDocument = _docManager.onLoad(getId(), _jailedFilePath, _userName, _docPassword, renderOpts, _haveDocPassword);
- if (!_loKitDocument || _viewId < 0)
+ bool loaded = _docManager.onLoad(getId(), _jailedFilePath, _userName, _docPassword, renderOpts, _haveDocPassword);
+ if (!loaded || _viewId < 0)
{
LOG_ERR("Failed to get LoKitDocument instance.");
return false;
@@ -321,19 +321,19 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
LOG_INF("Created new view with viewid: [" << _viewId << + "] for username: [" <<
_userName << "] in session: [" << getId() << "].");
- auto lockLokDoc(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lockLokDoc(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _docType = LOKitHelper::getDocumentTypeAsString(_loKitDocument->get());
+ _docType = LOKitHelper::getDocumentTypeAsString(getLOKitDocument()->get());
if (_docType != "text" && part != -1)
{
- _loKitDocument->setPart(part);
+ getLOKitDocument()->setPart(part);
}
// Respond by the document status
LOG_DBG("Sending status after loading view " << _viewId << ".");
- const auto status = LOKitHelper::documentStatus(_loKitDocument->get());
+ const auto status = LOKitHelper::documentStatus(getLOKitDocument()->get());
if (status.empty() || !sendTextFrame("status: " + status))
{
LOG_ERR("Failed to get/forward document status [" << status << "].");
@@ -341,9 +341,9 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
}
// Get the list of view ids from the core
- const int viewCount = _loKitDocument->getViewsCount();
+ const int viewCount = getLOKitDocument()->getViewsCount();
std::vector<int> viewIds(viewCount);
- _loKitDocument->getViewIds(viewIds.data(), viewCount);
+ getLOKitDocument()->getViewIds(viewIds.data(), viewCount);
lockLokDoc.unlock();
@@ -379,11 +379,11 @@ bool ChildSession::sendFontRendering(const char* /*buffer*/, int /*length*/, Str
unsigned char* ptrFont = nullptr;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- ptrFont = _loKitDocument->renderFont(decodedFont.c_str(), text.c_str(), &width, &height);
+ ptrFont = getLOKitDocument()->renderFont(decodedFont.c_str(), text.c_str(), &width, &height);
}
LOG_TRC("renderFont [" << font << "] rendered in " << (timestamp.elapsed()/1000.) << "ms");
@@ -403,11 +403,11 @@ bool ChildSession::getStatus(const char* /*buffer*/, int /*length*/)
{
std::string status;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- status = LOKitHelper::documentStatus(_loKitDocument->get());
+ status = LOKitHelper::documentStatus(getLOKitDocument()->get());
}
if (status.empty())
@@ -462,16 +462,16 @@ bool ChildSession::getCommandValues(const char* /*buffer*/, int /*length*/, Stri
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
if (command == ".uno:DocumentRepair")
{
char* pUndo;
const std::string jsonTemplate("{\"commandName\":\".uno:DocumentRepair\",\"Redo\":%s,\"Undo\":%s}");
- pValues = _loKitDocument->getCommandValues(".uno:Redo");
- pUndo = _loKitDocument->getCommandValues(".uno:Undo");
+ pValues = getLOKitDocument()->getCommandValues(".uno:Redo");
+ pUndo = getLOKitDocument()->getCommandValues(".uno:Undo");
std::string json = Poco::format(jsonTemplate,
std::string(pValues == nullptr ? "" : pValues),
std::string(pUndo == nullptr ? "" : pUndo));
@@ -484,7 +484,7 @@ bool ChildSession::getCommandValues(const char* /*buffer*/, int /*length*/, Stri
}
else
{
- pValues = _loKitDocument->getCommandValues(command.c_str());
+ pValues = getLOKitDocument()->getCommandValues(command.c_str());
success = sendTextFrame("commandvalues: " + std::string(pValues == nullptr ? "" : pValues));
std::free(pValues);
}
@@ -496,10 +496,10 @@ bool ChildSession::getPartPageRectangles(const char* /*buffer*/, int /*length*/)
{
char* partPage = nullptr;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
- partPage = _loKitDocument->getPartPageRectangles();
+ getLOKitDocument()->setView(_viewId);
+ partPage = getLOKitDocument()->getPartPageRectangles();
}
sendTextFrame("partpagerectangles: " + std::string(partPage));
@@ -521,11 +521,11 @@ bool ChildSession::clientZoom(const char* /*buffer*/, int /*length*/, StringToke
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->setClientZoom(tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight);
+ getLOKitDocument()->setClientZoom(tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight);
return true;
}
@@ -546,11 +546,11 @@ bool ChildSession::clientVisibleArea(const char* /*buffer*/, int /*length*/, Str
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->setClientVisibleArea(x, y, width, height);
+ getLOKitDocument()->setClientVisibleArea(x, y, width, height);
return true;
}
@@ -584,9 +584,9 @@ bool ChildSession::downloadAs(const char* /*buffer*/, int /*length*/, StringToke
const auto url = JAILED_DOCUMENT_ROOT + tmpDir + "/" + filenameParam.getFileName();
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->saveAs(url.c_str(),
+ getLOKitDocument()->saveAs(url.c_str(),
format.size() == 0 ? nullptr :format.c_str(),
filterOptions.size() == 0 ? nullptr : filterOptions.c_str());
}
@@ -615,11 +615,11 @@ bool ChildSession::getTextSelection(const char* /*buffer*/, int /*length*/, Stri
char* textSelection = nullptr;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- textSelection = _loKitDocument->getTextSelection(mimeType.c_str(), nullptr);
+ textSelection = getLOKitDocument()->getTextSelection(mimeType.c_str(), nullptr);
}
sendTextFrame("textselectioncontent: " + std::string(textSelection));
@@ -641,11 +641,11 @@ bool ChildSession::paste(const char* buffer, int length, StringTokenizer& tokens
const char* data = buffer + firstLine.size() + 1;
const size_t size = length - firstLine.size() - 1;
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->paste(mimeType.c_str(), data, size);
+ getLOKitDocument()->paste(mimeType.c_str(), data, size);
return true;
}
@@ -671,11 +671,11 @@ bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, StringToke
"\"value\":\"" + fileName + "\""
"}}";
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->postUnoCommand(command.c_str(), arguments.c_str(), false);
+ getLOKitDocument()->postUnoCommand(command.c_str(), arguments.c_str(), false);
}
return true;
@@ -711,11 +711,11 @@ bool ChildSession::keyEvent(const char* /*buffer*/, int /*length*/, StringTokeni
return true;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->postKeyEvent(type, charcode, keycode);
+ getLOKitDocument()->postKeyEvent(type, charcode, keycode);
return true;
}
@@ -756,11 +756,11 @@ bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringToke
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->postMouseEvent(type, x, y, count, buttons, modifier);
+ getLOKitDocument()->postMouseEvent(type, x, y, count, buttons, modifier);
return true;
}
@@ -776,9 +776,9 @@ bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringToke
// we need to get LOK_CALLBACK_UNO_COMMAND_RESULT callback when saving
const bool bNotify = (tokens[1] == ".uno:Save");
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
if (tokens.count() == 2 && tokens[1] == ".uno:fakeDiskFull")
{
@@ -786,11 +786,11 @@ bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringToke
}
else if (tokens.count() == 2)
{
- _loKitDocument->postUnoCommand(tokens[1].c_str(), nullptr, bNotify);
+ getLOKitDocument()->postUnoCommand(tokens[1].c_str(), nullptr, bNotify);
}
else
{
- _loKitDocument->postUnoCommand(tokens[1].c_str(),
+ getLOKitDocument()->postUnoCommand(tokens[1].c_str(),
Poco::cat(std::string(" "), tokens.begin() + 2, tokens.end()).c_str(),
bNotify);
}
@@ -814,11 +814,11 @@ bool ChildSession::selectText(const char* /*buffer*/, int /*length*/, StringToke
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->setTextSelection(type, x, y);
+ getLOKitDocument()->setTextSelection(type, x, y);
return true;
}
@@ -838,11 +838,11 @@ bool ChildSession::selectGraphic(const char* /*buffer*/, int /*length*/, StringT
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->setGraphicSelection(type, x, y);
+ getLOKitDocument()->setGraphicSelection(type, x, y);
return true;
}
@@ -855,11 +855,11 @@ bool ChildSession::resetSelection(const char* /*buffer*/, int /*length*/, String
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->resetSelection();
+ getLOKitDocument()->resetSelection();
return true;
}
@@ -887,11 +887,11 @@ bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, StringTokenize
bool success = false;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- success = _loKitDocument->saveAs(url.c_str(),
+ success = getLOKitDocument()->saveAs(url.c_str(),
format.size() == 0 ? nullptr :format.c_str(),
filterOptions.size() == 0 ? nullptr : filterOptions.c_str());
}
@@ -915,13 +915,13 @@ bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, StringT
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- if (part != _loKitDocument->getPart())
+ if (part != getLOKitDocument()->getPart())
{
- _loKitDocument->setPart(part);
+ getLOKitDocument()->setPart(part);
}
return true;
@@ -937,11 +937,11 @@ bool ChildSession::setPage(const char* /*buffer*/, int /*length*/, StringTokeniz
return false;
}
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
- _loKitDocument->setView(_viewId);
+ getLOKitDocument()->setView(_viewId);
- _loKitDocument->setPart(page);
+ getLOKitDocument()->setPart(page);
return true;
}
diff --git a/loolwsd/ChildSession.hpp b/loolwsd/ChildSession.hpp
index 624090c..871de23 100644
--- a/loolwsd/ChildSession.hpp
+++ b/loolwsd/ChildSession.hpp
@@ -12,13 +12,15 @@
#include <mutex>
+#define LOK_USE_UNSTABLE_API
+#include <LibreOfficeKit/LibreOfficeKit.hxx>
+
#include <Poco/NotificationQueue.h>
#include <Poco/Thread.h>
#include "Common.hpp"
#include "LOOLKit.hpp"
#include "LOOLSession.hpp"
-#include "LibreOfficeKit.hpp"
class ChildSession;
@@ -28,23 +30,31 @@ class IDocumentManager
{
public:
/// Reqest loading a document, or a new view, if one exists.
- virtual std::shared_ptr<lok::Document> onLoad(const std::string& sessionId,
- const std::string& jailedFilePath,
- const std::string& userName,
- const std::string& docPassword,
- const std::string& renderOpts,
- const bool haveDocPassword)
+ virtual bool onLoad(const std::string& sessionId,
+ const std::string& jailedFilePath,
+ const std::string& userName,
+ const std::string& docPassword,
+ const std::string& renderOpts,
+ const bool haveDocPassword)
= 0;
/// Unload a client session, which unloads the document
/// if it is the last and only.
virtual void onUnload(const ChildSession& session) = 0;
+ /// Access to the document instance.
+ virtual std::shared_ptr<lok::Document> getLOKitDocument() = 0;
+
/// Send updated view info to all active sessions
virtual void notifyViewInfo(const std::vector<int>& viewIds) = 0;
/// Get a view ID <-> UserInfo map.
virtual std::map<int, UserInfo> getViewInfo() = 0;
virtual std::mutex& getMutex() = 0;
+
+ /// Mutex guarding the document - so that we can lock operations like
+ /// setting a view followed by a tile render, etc.
+ virtual std::mutex& getDocumentMutex() = 0;
+
virtual std::shared_ptr<TileQueue>& getTileQueue() = 0;
virtual bool sendTextFrame(const std::string& message) = 0;
@@ -115,6 +125,11 @@ private:
virtual void disconnect() override;
virtual bool _handleInput(const char* buffer, int length) override;
+ std::shared_ptr<lok::Document> getLOKitDocument()
+ {
+ return _docManager.getLOKitDocument();
+ }
+
private:
const std::string _jailId;
IDocumentManager& _docManager;
@@ -125,7 +140,6 @@ private:
/// Whether document has been opened succesfuly
bool _isDocLoaded;
- std::shared_ptr<lok::Document> _loKitDocument;
std::string _docType;
std::map<std::string, std::string> _lastDocStates;
std::map<int, std::string> _lastDocEvents;
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 48902cb..4577003 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -31,6 +31,7 @@
#define LOK_USE_UNSTABLE_API
#include <LibreOfficeKit/LibreOfficeKitInit.h>
+#include <LibreOfficeKit/LibreOfficeKit.hxx>
#include <Poco/Exception.h>
#include <Poco/JSON/Object.h>
@@ -55,7 +56,6 @@
#include "LOOLKit.hpp"
#include "LOOLProtocol.hpp"
#include "LOOLWebSocket.hpp"
-#include "LibreOfficeKit.hpp"
#include "Log.hpp"
#include "Png.hpp"
#include "Rectangle.hpp"
@@ -295,10 +295,11 @@ public:
_docPasswordType(PasswordType::ToView),
_stop(false),
_mutex(),
+ _documentMutex(),
_isLoading(0)
{
LOG_INF("Document ctor for url [" << _url << "] on child [" << _jailId << "].");
- assert(_loKit && _loKit->get());
+ assert(_loKit);
_callbackThread.start(*this);
}
@@ -479,7 +480,7 @@ public:
return;
}
- std::unique_lock<std::mutex> lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_documentMutex);
if (_loKitDocument->getViewsCount() <= 0)
{
LOG_ERR("Tile rendering requested without views.");
@@ -550,7 +551,7 @@ public:
return;
}
- std::unique_lock<std::mutex> lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_documentMutex);
if (_loKitDocument->getViewsCount() <= 0)
{
LOG_ERR("Tile rendering requested without views.");
@@ -739,12 +740,12 @@ private:
}
/// Load a document (or view) and register callbacks.
- std::shared_ptr<lok::Document> onLoad(const std::string& sessionId,
- const std::string& uri,
- const std::string& userName,
- const std::string& docPassword,
- const std::string& renderOpts,
- const bool haveDocPassword) override
+ bool onLoad(const std::string& sessionId,
+ const std::string& uri,
+ const std::string& userName,
+ const std::string& docPassword,
+ const std::string& renderOpts,
+ const bool haveDocPassword) override
{
std::unique_lock<std::mutex> lock(_mutex);
@@ -765,13 +766,13 @@ private:
load(sessionId, uri, userName, docPassword, renderOpts, haveDocPassword);
if (!_loKitDocument || !_loKitDocument->get())
{
- return nullptr;
+ return false;
}
}
catch (const std::exception& exc)
{
LOG_ERR("Exception while loading [" << uri << "] : " << exc.what());
- return nullptr;
+ return false;
}
// Done loading, let the next one in (if any).
@@ -780,7 +781,7 @@ private:
--_isLoading;
_cvLoading.notify_one();
- return _loKitDocument;
+ return true;
}
void onUnload(const ChildSession& session) override
@@ -797,7 +798,7 @@ private:
return;
}
- std::unique_lock<std::mutex> lockLokDoc(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lockLokDoc(_documentMutex);
_loKitDocument->setView(viewId);
_loKitDocument->registerCallback(nullptr, nullptr);
@@ -907,7 +908,7 @@ private:
std::map<std::string, int> viewColors;
{
- auto lock(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> lock(_documentMutex);
char* pValues = _loKitDocument->getCommandValues(".uno:TrackedChangeAuthors");
colorValues = std::string(pValues == nullptr ? "" : pValues);
@@ -965,16 +966,12 @@ private:
// This is the first time we are loading the document
LOG_INF("Loading new document from URI: [" << uri << "] for session [" << sessionId << "].");
- auto lock(_loKit->getLock());
+ _loKit->registerCallback(GlobalCallback, this);
- if (LIBREOFFICEKIT_HAS(_loKit->get(), registerCallback))
- {
- _loKit->get()->pClass->registerCallback(_loKit->get(), GlobalCallback, this);
- const auto flags = LOK_FEATURE_DOCUMENT_PASSWORD
- | LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY
- | LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK;
- _loKit->setOptionalFeatures(flags);
- }
+ const auto flags = LOK_FEATURE_DOCUMENT_PASSWORD
+ | LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY
+ | LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK;
+ _loKit->setOptionalFeatures(flags);
// Save the provided password with us and the jailed url
_haveDocPassword = haveDocPassword;
@@ -983,9 +980,9 @@ private:
_isDocPasswordProtected = false;
LOG_DBG("Calling lokit::documentLoad.");
- _loKitDocument = _loKit->documentLoad(uri.c_str());
+ _loKitDocument.reset(_loKit->documentLoad(uri.c_str()));
LOG_DBG("Returned lokit::documentLoad.");
- auto l(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> l(_documentMutex);
lockLokDoc.swap(l);
if (!_loKitDocument || !_loKitDocument->get())
@@ -1022,7 +1019,7 @@ private:
}
else
{
- auto l(_loKitDocument->getLock());
+ std::unique_lock<std::mutex> l(_documentMutex);
lockLokDoc.swap(l);
// Check if this document requires password
@@ -1236,6 +1233,18 @@ private:
LOG_DBG("Thread finished.");
}
+ /// Return access to the lok::Document instance.
+ std::shared_ptr<lok::Document> getLOKitDocument() override
+ {
+ return _loKitDocument;
+ }
+
+ /// Return access to the lok::Document instance.
+ std::mutex& getDocumentMutex() override
+ {
+ return _documentMutex;
+ }
+
private:
std::shared_ptr<lok::Office> _loKit;
const std::string _jailId;
@@ -1259,6 +1268,11 @@ private:
std::atomic<bool> _stop;
mutable std::mutex _mutex;
+
+ /// Mutex guarding the lok::Document so that we can lock operations
+ /// like setting a view followed by a tile render, etc.
+ std::mutex _documentMutex;
+
std::condition_variable _cvLoading;
std::atomic_size_t _isLoading;
std::map<int, std::unique_ptr<CallbackDescriptor>> _viewIdToCallbackDescr;
@@ -1435,14 +1449,14 @@ void lokit_main(const std::string& childRoot,
}
loKit = std::make_shared<lok::Office>(kit);
- if (!loKit || !loKit->get())
+ if (!loKit)
{
LOG_FTL("LibreOfficeKit initialization failed. Exiting.");
std::_Exit(Application::EXIT_SOFTWARE);
}
}
- assert(loKit && loKit->get());
+ assert(loKit);
LOG_INF("Process is ready.");
// Open websocket connection between the child process and WSD.
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index a87599d..865d3e7 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -98,7 +98,6 @@ noinst_HEADERS = Admin.hpp \
common/FileUtil.hpp \
common/SigUtil.hpp \
IoUtil.hpp \
- LibreOfficeKit.hpp \
Log.hpp \
LOKitHelper.hpp \
LOOLKit.hpp \
diff --git a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
index c7a2130..0b9535a 100644
--- a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
@@ -61,6 +61,7 @@ struct _LibreOfficeKitClass
void (*freeError) (char* pFree);
#if defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
+ /// @see lok::Office::registerCallback().
void (*registerCallback) (LibreOfficeKit* pThis,
LibreOfficeKitCallback pCallback,
void* pData);
diff --git a/loolwsd/LibreOfficeKit.hpp b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
similarity index 69%
rename from loolwsd/LibreOfficeKit.hpp
rename to loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
index fe54938..447f44b 100644
--- a/loolwsd/LibreOfficeKit.hpp
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -7,15 +7,20 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#ifndef INCLUDED_LIBREOFFICEKIT_HPP
-#define INCLUDED_LIBREOFFICEKIT_HPP
+#ifndef INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKIT_HXX
+#define INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKIT_HXX
-#define LOK_USE_UNSTABLE_API
-#include <LibreOfficeKit/LibreOfficeKit.h>
-#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <cstddef>
-#include "Log.hpp"
+#include "LibreOfficeKit.h"
+#include "LibreOfficeKitInit.h"
+/*
+ * The reasons this C++ code is not as pretty as it could be are:
+ * a) provide a pure C API - that's useful for some people
+ * b) allow ABI stability - C++ vtables are not good for that.
+ * c) avoid C++ types as part of the API.
+ */
namespace lok
{
@@ -23,31 +28,17 @@ namespace lok
class Document
{
private:
- LibreOfficeKitDocument* _pDoc;
- std::mutex _mutex;
+ LibreOfficeKitDocument* mpDoc;
public:
/// A lok::Document is typically created by the lok::Office::documentLoad() method.
inline Document(LibreOfficeKitDocument* pDoc) :
- _pDoc(pDoc),
- _mutex()
- {
- Log::trace("lok::Document ctor.");
- }
+ mpDoc(pDoc)
+ {}
inline ~Document()
{
- Log::trace("lok::~Document dtor.");
- _pDoc->pClass->destroy(_pDoc);
- }
-
- /// This lock must be held while calling
- /// one or more members of this class if
- /// the client is multi-threaded.
- /// No member function takes this lock otherwise.
- std::unique_lock<std::mutex> getLock()
- {
- return std::unique_lock<std::mutex>(_mutex);
+ mpDoc->pClass->destroy(mpDoc);
}
/**
@@ -65,16 +56,11 @@ public:
*/
inline bool saveAs(const char* pUrl, const char* pFormat = NULL, const char* pFilterOptions = NULL)
{
- Log::trace() << "lok::Document: saveAs: URL: [" << pUrl << "], Format: [" << pFormat
- << "], FilterOptions: " << pFilterOptions << "." << Log::end;
- return _pDoc->pClass->saveAs(_pDoc, pUrl, pFormat, pFilterOptions) != 0;
+ return mpDoc->pClass->saveAs(mpDoc, pUrl, pFormat, pFilterOptions) != 0;
}
/// Gives access to the underlying C pointer.
- inline LibreOfficeKitDocument *get()
- {
- return _pDoc;
- }
+ inline LibreOfficeKitDocument *get() { return mpDoc; }
#if defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
/**
@@ -84,7 +70,7 @@ public:
*/
inline int getDocumentType()
{
- return _pDoc->pClass->getDocumentType(_pDoc);
+ return mpDoc->pClass->getDocumentType(mpDoc);
}
/**
@@ -95,7 +81,7 @@ public:
*/
inline int getParts()
{
- return _pDoc->pClass->getParts(_pDoc);
+ return mpDoc->pClass->getParts(mpDoc);
}
/**
@@ -109,40 +95,36 @@ public:
*/
inline char* getPartPageRectangles()
{
- return _pDoc->pClass->getPartPageRectangles(_pDoc);
+ return mpDoc->pClass->getPartPageRectangles(mpDoc);
}
/// Get the current part of the document.
- /// Note: For Writer documents this always returns 0
- /// since text docs have a single coordinate system.
inline int getPart()
{
- return getDocumentType() == LOK_DOCTYPE_TEXT ? 0 : _pDoc->pClass->getPart(_pDoc);
+ return mpDoc->pClass->getPart(mpDoc);
}
/// Set the current part of the document.
inline void setPart(int nPart)
{
- Log::trace() << "lok::Document: setPart: Part: " << nPart << "." << Log::end;
- _pDoc->pClass->setPart(_pDoc, nPart);
+ mpDoc->pClass->setPart(mpDoc, nPart);
}
/// Get the current part's name.
inline char* getPartName(int nPart)
{
- return _pDoc->pClass->getPartName(_pDoc, nPart);
+ return mpDoc->pClass->getPartName(mpDoc, nPart);
}
/// Get the current part's hash.
inline char* getPartHash(int nPart)
{
- return _pDoc->pClass->getPartHash(_pDoc, nPart);
+ return mpDoc->pClass->getPartHash(mpDoc, nPart);
}
inline void setPartMode(int nMode)
{
- Log::trace() << "lok::Document: setPartMode: Mode: " << nMode << "." << Log::end;
- _pDoc->pClass->setPartMode(_pDoc, nMode);
+ mpDoc->pClass->setPartMode(mpDoc, nMode);
}
/**
@@ -168,7 +150,7 @@ public:
const int nTileWidth,
const int nTileHeight)
{
- return _pDoc->pClass->paintTile(_pDoc, pBuffer, nCanvasWidth, nCanvasHeight,
+ return mpDoc->pClass->paintTile(mpDoc, pBuffer, nCanvasWidth, nCanvasHeight,
nTilePosX, nTilePosY, nTileWidth, nTileHeight);
}
@@ -179,13 +161,13 @@ public:
*/
inline int getTileMode()
{
- return _pDoc->pClass->getTileMode(_pDoc);
+ return mpDoc->pClass->getTileMode(mpDoc);
}
/// Get the document sizes in TWIPs.
inline void getDocumentSize(long* pWidth, long* pHeight)
{
- _pDoc->pClass->getDocumentSize(_pDoc, pWidth, pHeight);
+ mpDoc->pClass->getDocumentSize(mpDoc, pWidth, pHeight);
}
/**
@@ -210,8 +192,7 @@ public:
*/
inline void initializeForRendering(const char* pArguments = NULL)
{
- Log::trace() << "lok::Document: initializeForRendering: Arguments: [" << pArguments << "]." << Log::end;
- _pDoc->pClass->initializeForRendering(_pDoc, pArguments);
+ mpDoc->pClass->initializeForRendering(mpDoc, pArguments);
}
/**
@@ -223,7 +204,7 @@ public:
*/
inline void registerCallback(LibreOfficeKitCallback pCallback, void* pData)
{
- _pDoc->pClass->registerCallback(_pDoc, pCallback, pData);
+ mpDoc->pClass->registerCallback(mpDoc, pCallback, pData);
}
/**
@@ -235,9 +216,7 @@ public:
*/
inline void postKeyEvent(int nType, int nCharCode, int nKeyCode)
{
- Log::trace() << "lok::Document: postKeyEvent: Type=" << nType
- << ", CharCode=" << nCharCode << ", KeyCode=" << nKeyCode << Log::end;
- _pDoc->pClass->postKeyEvent(_pDoc, nType, nCharCode, nKeyCode);
+ mpDoc->pClass->postKeyEvent(mpDoc, nType, nCharCode, nKeyCode);
}
/**
@@ -252,10 +231,7 @@ public:
*/
inline void postMouseEvent(int nType, int nX, int nY, int nCount, int nButtons, int nModifier)
{
- Log::trace() << "lok::Document: postMouseEvent: Type=" << nType
- << ", X=" << nX << ", nY=" << nY << ", Count=" << nCount
- << ", Buttons=" << nButtons << ", Modifier=" << nModifier << Log::end;
- _pDoc->pClass->postMouseEvent(_pDoc, nType, nX, nY, nCount, nButtons, nModifier);
+ mpDoc->pClass->postMouseEvent(mpDoc, nType, nX, nY, nCount, nButtons, nModifier);
}
/**
@@ -281,10 +257,7 @@ public:
*/
inline void postUnoCommand(const char* pCommand, const char* pArguments = NULL, bool bNotifyWhenFinished = false)
{
- Log::trace() << "lok::Document: postUnoCommand: Command=" << pCommand
- << ", Args=" << (pArguments ? pArguments : "''")
- << ", NotifyWhenFinished=" << bNotifyWhenFinished << Log::end;
- _pDoc->pClass->postUnoCommand(_pDoc, pCommand, pArguments, bNotifyWhenFinished);
+ mpDoc->pClass->postUnoCommand(mpDoc, pCommand, pArguments, bNotifyWhenFinished);
}
/**
@@ -296,7 +269,7 @@ public:
*/
inline void setTextSelection(int nType, int nX, int nY)
{
- _pDoc->pClass->setTextSelection(_pDoc, nType, nX, nY);
+ mpDoc->pClass->setTextSelection(mpDoc, nType, nX, nY);
}
/**
@@ -307,7 +280,7 @@ public:
*/
inline char* getTextSelection(const char* pMimeType, char** pUsedMimeType = NULL)
{
- return _pDoc->pClass->getTextSelection(_pDoc, pMimeType, pUsedMimeType);
+ return mpDoc->pClass->getTextSelection(mpDoc, pMimeType, pUsedMimeType);
}
/**
@@ -319,7 +292,7 @@ public:
*/
inline bool paste(const char* pMimeType, const char* pData, size_t nSize)
{
- return _pDoc->pClass->paste(_pDoc, pMimeType, pData, nSize);
+ return mpDoc->pClass->paste(mpDoc, pMimeType, pData, nSize);
}
/**
@@ -331,7 +304,7 @@ public:
*/
inline void setGraphicSelection(int nType, int nX, int nY)
{
- _pDoc->pClass->setGraphicSelection(_pDoc, nType, nX, nY);
+ mpDoc->pClass->setGraphicSelection(mpDoc, nType, nX, nY);
}
/**
@@ -339,7 +312,7 @@ public:
*/
inline void resetSelection()
{
- _pDoc->pClass->resetSelection(_pDoc);
+ mpDoc->pClass->resetSelection(mpDoc);
}
/**
@@ -350,7 +323,7 @@ public:
*/
inline char* getCommandValues(const char* pCommand)
{
- return _pDoc->pClass->getCommandValues(_pDoc, pCommand);
+ return mpDoc->pClass->getCommandValues(mpDoc, pCommand);
}
/**
@@ -367,11 +340,7 @@ public:
int nTileTwipWidth,
int nTileTwipHeight)
{
- Log::trace() << "lok::Document: setClientZoom: TilePixelWidth: " << nTilePixelWidth
- << ", TilePixelHeight: " << nTileTwipHeight
- << ", TileTwipWidth: " << nTileTwipWidth
- << ", TileTwipHeight: " << nTileTwipHeight << "." << Log::end;
- _pDoc->pClass->setClientZoom(_pDoc, nTilePixelWidth, nTilePixelHeight, nTileTwipWidth, nTileTwipHeight);
+ mpDoc->pClass->setClientZoom(mpDoc, nTilePixelWidth, nTilePixelHeight, nTileTwipWidth, nTileTwipHeight);
}
/**
@@ -386,10 +355,7 @@ public:
*/
inline void setClientVisibleArea(int nX, int nY, int nWidth, int nHeight)
{
- Log::trace() << "lok::Document: setClientVisibleArea: X: " << nX
- << ", Y: " << nY << ", Width: " << nWidth
- << ", Height: " << nHeight << "." << Log::end;
- _pDoc->pClass->setClientVisibleArea(_pDoc, nX, nY, nWidth, nHeight);
+ mpDoc->pClass->setClientVisibleArea(mpDoc, nX, nY, nWidth, nHeight);
}
/**
@@ -399,8 +365,7 @@ public:
*/
int createView()
{
- Log::trace() << "lok::Document: createView" << Log::end;
- return _pDoc->pClass->createView(_pDoc);
+ return mpDoc->pClass->createView(mpDoc);
}
/**
@@ -409,8 +374,7 @@ public:
*/
void destroyView(int nId)
{
- Log::trace() << "lok::Document: destroyView: " << nId << Log::end;
- _pDoc->pClass->destroyView(_pDoc, nId);
+ mpDoc->pClass->destroyView(mpDoc, nId);
}
/**
@@ -419,9 +383,7 @@ public:
*/
void setView(int nId)
{
- Log::trace() << "lok::Document: setView: " << nId << Log::end;
- assert(nId >= 0 && "ViewID must be non-negative.");
- _pDoc->pClass->setView(_pDoc, nId);
+ mpDoc->pClass->setView(mpDoc, nId);
}
/**
@@ -430,7 +392,7 @@ public:
*/
int getView()
{
- return _pDoc->pClass->getView(_pDoc);
+ return mpDoc->pClass->getView(mpDoc);
}
/**
@@ -438,26 +400,11 @@ public:
*/
inline int getViewsCount()
{
- return _pDoc->pClass->getViewsCount(_pDoc);
- }
-
- /**
- * Returns the viewID for each existing view. Since viewIDs are not reused,
- * viewIDs are not the same as the index of the view in the view array over
- * time. Use getViewsCount() to know the minimal nSize that's large enough.
- *
- * @param pArray the array to write the viewIDs into
- * @param nSize the size of pArray
- * @returns true if pArray was large enough and result is written, false
- * otherwise.
- */
- inline int getViewIds(int* pArray, size_t nSize)
- {
- return _pDoc->pClass->getViewIds(_pDoc, pArray, nSize);
+ return mpDoc->pClass->getViewsCount(mpDoc);
}
/**
- * Paints a font name to be displayed in the font list
+ * Paints a font name or character if provided to be displayed in the font list
* @param pFontName the font to be painted
*/
inline unsigned char* renderFont(const char *pFontName,
@@ -465,7 +412,7 @@ public:
int *pFontWidth,
int *pFontHeight)
{
- return _pDoc->pClass->renderFont(_pDoc, pFontName, pChar, pFontWidth, pFontHeight);
+ return mpDoc->pClass->renderFont(mpDoc, pFontName, pChar, pFontWidth, pFontHeight);
}
/**
@@ -483,12 +430,28 @@ public:
const int nTileWidth,
const int nTileHeight)
{
- return _pDoc->pClass->paintPartTile(_pDoc, pBuffer, nPart,
+ return mpDoc->pClass->paintPartTile(mpDoc, pBuffer, nPart,
nCanvasWidth, nCanvasHeight,
nTilePosX, nTilePosY,
nTileWidth, nTileHeight);
}
+ /**
+ * Returns the viewID for each existing view. Since viewIDs are not reused,
+ * viewIDs are not the same as the index of the view in the view array over
+ * time. Use getViewsCount() to know the minimal nSize that's large enough.
+ *
+ * @param pArray the array to write the viewIDs into
+ * @param nSize the size of pArray
+ * @returns true if pArray was large enough and result is written, false
+ * otherwise.
+ */
+ inline bool getViewIds(int* pArray,
+ size_t nSize)
+ {
+ return mpDoc->pClass->getViewIds(mpDoc, pArray, nSize);
+ }
+
#endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
};
@@ -496,44 +459,17 @@ public:
class Office
{
private:
- LibreOfficeKit* _pOffice;
- std::mutex _mutex;
+ LibreOfficeKit* mpThis;
public:
/// A lok::Office is typically created by the lok_cpp_init() function.
inline Office(LibreOfficeKit* pThis) :
- _pOffice(pThis),
- _mutex()
- {
- Log::trace("lok::Office ctor.");
- assert(_pOffice);
- }
+ mpThis(pThis)
+ {}
inline ~Office()
{
- std::unique_lock<std::mutex> lock(_mutex);
- Log::trace("lok::~Office dtor.");
- try
- {
- _pOffice->pClass->destroy(_pOffice);
- }
- catch (const std::exception& ex)
- {
- LOG_ERR("Exception while destroying LibreOfficeKit instance: " << ex.what());
- }
- }
-
- /// This lock must be held while calling
- /// one or more member of this class.
- std::unique_lock<std::mutex> getLock()
- {
- return std::unique_lock<std::mutex>(_mutex);
- }
-
- /// Gives access to the underlying C pointer.
- inline LibreOfficeKit* get()
- {
- return _pOffice;
+ mpThis->pClass->destroy(mpThis);
}
/**
@@ -541,37 +477,53 @@ public:
*
* @param pUrl the URL of the document to load
* @param pFilterOptions options for the import filter, e.g. SkipImages.
+ * @since pFilterOptions argument added in LibreOffice 5.0
*/
- inline std::shared_ptr<Document> documentLoad(const char* pUrl, const char* pFilterOptions = NULL)
+ inline Document* documentLoad(const char* pUrl, const char* pFilterOptions = NULL)
{
- Log::trace() << "lok::Office: documentLoad: URL: [" << pUrl
- << "], FilterOptions: [" << pFilterOptions
- << "]." << Log::end;
LibreOfficeKitDocument* pDoc = NULL;
- if (LIBREOFFICEKIT_HAS(_pOffice, documentLoadWithOptions))
- pDoc = _pOffice->pClass->documentLoadWithOptions(_pOffice, pUrl, pFilterOptions);
+ if (LIBREOFFICEKIT_HAS(mpThis, documentLoadWithOptions))
+ pDoc = mpThis->pClass->documentLoadWithOptions(mpThis, pUrl, pFilterOptions);
else
- pDoc = _pOffice->pClass->documentLoad(_pOffice, pUrl);
+ pDoc = mpThis->pClass->documentLoad(mpThis, pUrl);
- return std::make_shared<lok::Document>(pDoc);
+ if (pDoc == NULL)
+ return NULL;
+
+ return new Document(pDoc);
}
/// Returns the last error as a string, the returned pointer has to be freed by the caller.
inline char* getError()
{
- return _pOffice->pClass->getError(_pOffice);
+ return mpThis->pClass->getError(mpThis);
}
- /// Frees the memory pointed to by pFree.
+ /**
+ * Frees the memory pointed to by pFree.
+ *
+ * @since LibreOffice 5.2
+ */
inline void freeError(char* pFree)
{
- _pOffice->pClass->freeError(pFree);
+ mpThis->pClass->freeError(pFree);
}
-
#if defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
/**
+ * Registers a callback. LOK will invoke this function when it wants to
+ * inform the client about events.
+ *
+ * @param pCallback the callback to invoke
+ * @param pData the user data, will be passed to the callback on invocation
+ */
+ inline void registerCallback(LibreOfficeKitCallback pCallback, void* pData)
+ {
+ mpThis->pClass->registerCallback(mpThis, pCallback, pData);
+ }
+
+ /**
* Returns details of filter types.
*
* Example returned string:
@@ -587,7 +539,7 @@ public:
*/
inline char* getFilterTypes()
{
- return _pOffice->pClass->getFilterTypes(_pOffice);
+ return mpThis->pClass->getFilterTypes(mpThis);
}
/**
@@ -597,7 +549,7 @@ public:
*/
void setOptionalFeatures(uint64_t features)
{
- return _pOffice->pClass->setOptionalFeatures(_pOffice, features);
+ return mpThis->pClass->setOptionalFeatures(mpThis, features);
}
/**
@@ -621,26 +573,38 @@ public:
*/
inline void setDocumentPassword(char const* pURL, char const* pPassword)
{
- _pOffice->pClass->setDocumentPassword(_pOffice, pURL, pPassword);
+ mpThis->pClass->setDocumentPassword(mpThis, pURL, pPassword);
}
/**
* Get version information of the LOKit process
*
- * @returns string containing version information in format:
- * PRODUCT_NAME PRODUCT_VERSION PRODUCT_EXTENSION BUILD_ID
+ * @returns JSON string containing version information in format:
+ * {ProductName: <>, ProductVersion: <>, ProductExtension: <>, BuildId: <>}
*
- * Eg: LibreOffice 5.3 .0.0 alpha0 <commit hash>
+ * Eg: {"ProductName": "LibreOffice",
+ * "ProductVersion": "5.3",
+ * "ProductExtension": ".0.0.alpha0",
+ * "BuildId": "<full 40 char git hash>"}
*/
inline char* getVersionInfo()
{
- return _pOffice->pClass->getVersionInfo(_pOffice);
+ return mpThis->pClass->getVersionInfo(mpThis);
}
#endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
};
+/// Factory method to create a lok::Office instance.
+inline Office* lok_cpp_init(const char* pInstallPath, const char* pUserProfileUrl = NULL)
+{
+ LibreOfficeKit* pThis = lok_init_2(pInstallPath, pUserProfileUrl);
+ if (pThis == NULL || pThis->pClass->nSize == 0)
+ return NULL;
+ return new ::lok::Office(pThis);
+}
+
}
-#endif // INCLUDED_LIBREOFFICEKIT_HPP
+#endif // INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKIT_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/test/WhiteBoxTests.cpp b/loolwsd/test/WhiteBoxTests.cpp
index fd3814a..2224619 100644
--- a/loolwsd/test/WhiteBoxTests.cpp
+++ b/loolwsd/test/WhiteBoxTests.cpp
@@ -154,26 +154,33 @@ class DummyDocument : public IDocumentManager
{
std::shared_ptr<TileQueue> _tileQueue;
std::mutex _mutex;
+ std::mutex _documentMutex;
public:
DummyDocument()
: _tileQueue(new TileQueue()),
- _mutex()
+ _mutex(),
+ _documentMutex()
{
}
- std::shared_ptr<lok::Document> onLoad(const std::string& /*sessionId*/,
- const std::string& /*jailedFilePath*/,
- const std::string& /*userName*/,
- const std::string& /*docPassword*/,
- const std::string& /*renderOpts*/,
- const bool /*haveDocPassword*/) override
+ bool onLoad(const std::string& /*sessionId*/,
+ const std::string& /*jailedFilePath*/,
+ const std::string& /*userName*/,
+ const std::string& /*docPassword*/,
+ const std::string& /*renderOpts*/,
+ const bool /*haveDocPassword*/) override
{
- return nullptr;
+ return false;
}
void onUnload(const ChildSession& /*session*/) override
{
}
+ std::shared_ptr<lok::Document> getLOKitDocument() override
+ {
+ return nullptr;
+ }
+
void notifyViewInfo(const std::vector<int>& /*viewIds*/) override
{
}
@@ -188,6 +195,11 @@ public:
return _mutex;
}
+ std::mutex& getDocumentMutex() override
+ {
+ return _mutex;
+ }
+
std::shared_ptr<TileQueue>& getTileQueue() override
{
return _tileQueue;
commit cba0d38db64c97e7b5fd5a24f731d0836722f68f
Author: Andras Timar <andras.timar at collabora.com>
Date: Tue Nov 15 10:27:45 2016 +0100
loleaflet: Translation of Special Characters dialog from LibreOffice core
(cherry picked from commit d02f4bf753cceb575677d248edf36b89f83983f9)
diff --git a/loleaflet/po/styles/ab.po b/loleaflet/po/styles/ab.po
index 16be6d2..1243e06 100644
--- a/loleaflet/po/styles/ab.po
+++ b/loleaflet/po/styles/ab.po
@@ -1904,3 +1904,5 @@ msgid "Last column"
msgstr ""
# Translations of Unicode subsets from LibreOffice core
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/af.po b/loleaflet/po/styles/af.po
index 015b0e7..7510056 100644
--- a/loleaflet/po/styles/af.po
+++ b/loleaflet/po/styles/af.po
@@ -2260,3 +2260,13 @@ msgstr "Bopomofo uitgebrei"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "Katakana fonetiese simbole"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Fontnaam:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Spesiale karakters"
diff --git a/loleaflet/po/styles/am.po b/loleaflet/po/styles/am.po
index c74c68e..658a307 100644
--- a/loleaflet/po/styles/am.po
+++ b/loleaflet/po/styles/am.po
@@ -2231,3 +2231,17 @@ msgstr "Shorthand አቀራረብ መቆጣጠሪያ"
#: ucsubset.src
msgid "Supplemental Arrows-C"
msgstr "ተጨማሪ ቀስቶች-C"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "የፊደሉ ስም:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "የተለዩ ባህሪዎች"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "ቅድመ እይታ:"
diff --git a/loleaflet/po/styles/an.po b/loleaflet/po/styles/an.po
index 711a1c3..8cc53fc 100644
--- a/loleaflet/po/styles/an.po
+++ b/loleaflet/po/styles/an.po
@@ -1944,3 +1944,5 @@ msgid "Last column"
msgstr ""
# Translations of Unicode subsets from LibreOffice core
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/ar.po b/loleaflet/po/styles/ar.po
index 40641a7..c2fd110 100644
--- a/loleaflet/po/styles/ar.po
+++ b/loleaflet/po/styles/ar.po
@@ -2900,3 +2900,17 @@ msgstr "سُنداني تكميلي"
#: ucsubset.src
msgid "Takri"
msgstr "تاكري"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "اسم الخط:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "أحرف خاصة"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "معاينة:"
diff --git a/loleaflet/po/styles/as.po b/loleaflet/po/styles/as.po
index 5418693..9a06e20 100644
--- a/loleaflet/po/styles/as.po
+++ b/loleaflet/po/styles/as.po
@@ -2884,3 +2884,13 @@ msgstr "চুণ্ডানিচ পৰিপূৰিকা"
#: ucsubset.src
msgid "Takri"
msgstr "টাক্ৰি"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ফন্টৰ নাম:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "বিশেষ আখৰসমূহ"
diff --git a/loleaflet/po/styles/ast.po b/loleaflet/po/styles/ast.po
index ad3fd18..ee81f3a 100644
--- a/loleaflet/po/styles/ast.po
+++ b/loleaflet/po/styles/ast.po
@@ -2704,3 +2704,13 @@ msgstr "Xeroglíficos meroíticos"
#: ucsubset.src
msgid "Sundanese Supplement"
msgstr "Suplementu de sundanés"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nome de fonte:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caráuteres especiales"
diff --git a/loleaflet/po/styles/be.po b/loleaflet/po/styles/be.po
index 8b9e97a..0a7afbf 100644
--- a/loleaflet/po/styles/be.po
+++ b/loleaflet/po/styles/be.po
@@ -2361,3 +2361,9 @@ msgstr "Старажытнагрэчаскія лічбы"
#: ucsubset.src
msgid "Arabic Supplement"
msgstr "Арабскія, дадатак"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Адмысловыя знакі"
diff --git a/loleaflet/po/styles/bg.po b/loleaflet/po/styles/bg.po
index 9f4b606..afef181 100644
--- a/loleaflet/po/styles/bg.po
+++ b/loleaflet/po/styles/bg.po
@@ -3063,3 +3063,21 @@ msgstr "Допълнителни символи и пиктограми"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Жестово писмо на Сътън"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Име на шрифт:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Специални знаци"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Шестнайсетично:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Мостра:"
diff --git a/loleaflet/po/styles/bn-IN.po b/loleaflet/po/styles/bn-IN.po
index 3856972..9017b2f 100644
--- a/loleaflet/po/styles/bn-IN.po
+++ b/loleaflet/po/styles/bn-IN.po
@@ -2796,3 +2796,17 @@ msgstr "সুদানিজ সাপ্লিমেন্ট"
#: ucsubset.src
msgid "Takri"
msgstr "টাকরি"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ফন্টের নাম:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "বিশেষ অক্ষর"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "প্রাকদর্শন:"
diff --git a/loleaflet/po/styles/bn.po b/loleaflet/po/styles/bn.po
index 370cf89..e199c9b 100644
--- a/loleaflet/po/styles/bn.po
+++ b/loleaflet/po/styles/bn.po
@@ -2367,3 +2367,13 @@ msgstr "বোপোমোফো বর্ধিত"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "কাটাকানা ফনেটিক্স"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ফন্টের নাম:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "বিশেষ অক্ষর"
diff --git a/loleaflet/po/styles/bo.po b/loleaflet/po/styles/bo.po
index ddc96a8..8b4e234 100644
--- a/loleaflet/po/styles/bo.po
+++ b/loleaflet/po/styles/bo.po
@@ -2223,3 +2223,9 @@ msgstr "ཞོར་སྣོན་གྱི་སྒྲ་སྦྱོར་མ
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "སྒྲ་བཀོད་ཀྱི་གཞུང་སྤྱོད་ཀྱི་ཡི་གེ།"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ཡིག་གཟུགས།:"
diff --git a/loleaflet/po/styles/br.po b/loleaflet/po/styles/br.po
index d975fa2..ae27928 100644
--- a/loleaflet/po/styles/br.po
+++ b/loleaflet/po/styles/br.po
@@ -2956,3 +2956,21 @@ msgstr "Arouezioù ha keallunioù ouzhpenn"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Skrivadur an arouezioù mod Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Anv an nodrezh:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Arouezennoù arbennik"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "C'hwezekredel :"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Alberz :"
diff --git a/loleaflet/po/styles/brx.po b/loleaflet/po/styles/brx.po
index 6083c15..a6ce800 100644
--- a/loleaflet/po/styles/brx.po
+++ b/loleaflet/po/styles/brx.po
@@ -1934,3 +1934,9 @@ msgstr "थोंगोरै थानाय बिमुं, थोंगो
#: ucsubset.src
msgid "Thai"
msgstr "थाइ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फन्टनि मुं:"
diff --git a/loleaflet/po/styles/bs.po b/loleaflet/po/styles/bs.po
index dfe978c..18330f6 100644
--- a/loleaflet/po/styles/bs.po
+++ b/loleaflet/po/styles/bs.po
@@ -2754,3 +2754,13 @@ msgstr "Šarada"
#: ucsubset.src
msgid "Sundanese Supplement"
msgstr "Sundanski dodatni"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Vrsta slova:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Posebni znakovi"
diff --git a/loleaflet/po/styles/ca-valencia.po b/loleaflet/po/styles/ca-valencia.po
index 9f5babd..2b0d3f4 100644
--- a/loleaflet/po/styles/ca-valencia.po
+++ b/loleaflet/po/styles/ca-valencia.po
@@ -2860,3 +2860,17 @@ msgstr "Símbols i pictogrames suplementaris"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Transcripció Sutton de llengües de signes"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nom del tipus de lletra:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caràcters especials"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Previsualització:"
diff --git a/loleaflet/po/styles/ca.po b/loleaflet/po/styles/ca.po
index d2471aa..7b25fae 100644
--- a/loleaflet/po/styles/ca.po
+++ b/loleaflet/po/styles/ca.po
@@ -2860,3 +2860,17 @@ msgstr "Símbols i pictogrames suplementaris"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Transcripció Sutton de llengües de signes"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nom del tipus de lletra:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caràcters especials"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Previsualització:"
diff --git a/loleaflet/po/styles/cs.po b/loleaflet/po/styles/cs.po
index 800dd4d..879897f 100644
--- a/loleaflet/po/styles/cs.po
+++ b/loleaflet/po/styles/cs.po
@@ -2899,3 +2899,21 @@ msgstr "Doplňkové symboly a piktogramy"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Znakopis Suttonové"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Název písma:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Speciální znaky"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Še_stnáctkově:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Náhled:"
diff --git a/loleaflet/po/styles/cy.po b/loleaflet/po/styles/cy.po
index 819e369..564b7b5 100644
--- a/loleaflet/po/styles/cy.po
+++ b/loleaflet/po/styles/cy.po
@@ -2720,3 +2720,21 @@ msgstr "Symbolau a Phictograffau Ychwanegol"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Ysgrif Arwydd Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Enw Ffont:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Nodau Arbennig"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hecsadegol:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Rhagolwg:"
diff --git a/loleaflet/po/styles/da.po b/loleaflet/po/styles/da.po
index 2a9a710..0f80e28 100644
--- a/loleaflet/po/styles/da.po
+++ b/loleaflet/po/styles/da.po
@@ -2768,3 +2768,17 @@ msgstr "Supplerende symboler og pictogrammer"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton tegnsprogskrift"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Skrifttypenavn:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Specialtegn"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Forhåndsvisning:"
diff --git a/loleaflet/po/styles/de.po b/loleaflet/po/styles/de.po
index 7f1c17e..36f5ade 100644
--- a/loleaflet/po/styles/de.po
+++ b/loleaflet/po/styles/de.po
@@ -2843,3 +2843,21 @@ msgstr "Verschiedene piktografische Symbole, Ergänzung"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton-Zeichenschrift"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Schriftart:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Sonderzeichen"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexadezimal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Vorschau:"
diff --git a/loleaflet/po/styles/dgo.po b/loleaflet/po/styles/dgo.po
index 6fa33b5..5e2c43d 100644
--- a/loleaflet/po/styles/dgo.po
+++ b/loleaflet/po/styles/dgo.po
@@ -2341,3 +2341,9 @@ msgstr "कोप्टिक"
#: ucsubset.src
msgid "Emoticons"
msgstr "भाव-आइकन"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फॉट-नांऽ :"
diff --git a/loleaflet/po/styles/dz.po b/loleaflet/po/styles/dz.po
index e78450c..c91fb53 100644
--- a/loleaflet/po/styles/dz.po
+++ b/loleaflet/po/styles/dz.po
@@ -2329,3 +2329,9 @@ msgstr "བོ་པོ་མོ་ཕོ་རྒྱ་བསྐྱེད་ཅ
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "ཀ་ཊ་ཀ་ན་སྒྲ་རྟགས་ཚུ།"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ཡིག་གཟུགས་མིང་།:"
diff --git a/loleaflet/po/styles/el.po b/loleaflet/po/styles/el.po
index 0d39340..80deea4 100644
--- a/loleaflet/po/styles/el.po
+++ b/loleaflet/po/styles/el.po
@@ -3068,3 +3068,21 @@ msgstr "Συμπλήρωμα συμβόλων και εικονογραμμάτ
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Γραφή συμβόλων Σάτον"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Όνομα γραμματοσειράς:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Ειδικοί χαρακτήρες"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Δεκαεξαδικό:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Προεπισκόπηση:"
diff --git a/loleaflet/po/styles/en-GB.po b/loleaflet/po/styles/en-GB.po
index 4263d97..cc43ef0 100644
--- a/loleaflet/po/styles/en-GB.po
+++ b/loleaflet/po/styles/en-GB.po
@@ -1920,3 +1920,5 @@ msgstr "Canadian Aboriginal Syllables"
#: ucsubset.src
msgid "Kangxi Radicals"
msgstr "Kanxi Radicals"
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/en-ZA.po b/loleaflet/po/styles/en-ZA.po
index 3f1e509..3968d02 100644
--- a/loleaflet/po/styles/en-ZA.po
+++ b/loleaflet/po/styles/en-ZA.po
@@ -1923,3 +1923,5 @@ msgid "Last column"
msgstr "Last column"
# Translations of Unicode subsets from LibreOffice core
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/eo.po b/loleaflet/po/styles/eo.po
index fcad752..00096d6 100644
--- a/loleaflet/po/styles/eo.po
+++ b/loleaflet/po/styles/eo.po
@@ -3012,3 +3012,21 @@ msgstr "Suplementaj simboloj kaj bildsimboloj"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton-gestoskribo"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Tipara nomo:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Specialaj signoj"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Deksesuma:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Antaŭvido:"
diff --git a/loleaflet/po/styles/es.po b/loleaflet/po/styles/es.po
index 83ef998..3b7e237 100644
--- a/loleaflet/po/styles/es.po
+++ b/loleaflet/po/styles/es.po
@@ -2900,3 +2900,17 @@ msgstr "Símbolos y pictogramas suplementarios"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Transcripción de lenguas de señas de Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nombre del tipo de letra:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caracteres especiales"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Previsualización:"
diff --git a/loleaflet/po/styles/et.po b/loleaflet/po/styles/et.po
index c4b5937..846ced1 100644
--- a/loleaflet/po/styles/et.po
+++ b/loleaflet/po/styles/et.po
@@ -2976,3 +2976,21 @@ msgstr "Täiendavad sümbolid ja piktogrammid"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Suttoni viipekiri"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Fondi nimi:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Erimärgid"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "16ndkood:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Eelvaade:"
diff --git a/loleaflet/po/styles/eu.po b/loleaflet/po/styles/eu.po
index 2735f40..28ebd0e 100644
--- a/loleaflet/po/styles/eu.po
+++ b/loleaflet/po/styles/eu.po
@@ -2828,3 +2828,21 @@ msgstr "Ikur eta piktografia osagarriak"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton keinu-idazkera"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Letra-tipoaren izena:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Karaktere bereziak"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexadezimala:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Aurrebista:"
diff --git a/loleaflet/po/styles/fa.po b/loleaflet/po/styles/fa.po
index 0a2427a..dbb4456 100644
--- a/loleaflet/po/styles/fa.po
+++ b/loleaflet/po/styles/fa.po
@@ -2037,3 +2037,13 @@ msgstr "خمری"
#: ucsubset.src
msgid "Mongolian"
msgstr "مغولی"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "نام قلم:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "نویسههای ویژه"
diff --git a/loleaflet/po/styles/fi.po b/loleaflet/po/styles/fi.po
index 41c5293..e03a28a 100644
--- a/loleaflet/po/styles/fi.po
+++ b/loleaflet/po/styles/fi.po
@@ -2812,3 +2812,21 @@ msgstr "Symboleita ja piktogrammeja (laajennus)"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Suttonin viittomakirjoitus"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Fontin nimi:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Lisää erikoismerkki"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadesimaali:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Esikatselu:"
diff --git a/loleaflet/po/styles/fr.po b/loleaflet/po/styles/fr.po
index 1406191..dbb036c 100644
--- a/loleaflet/po/styles/fr.po
+++ b/loleaflet/po/styles/fr.po
@@ -2795,3 +2795,21 @@ msgstr "Hongrois ancien"
#: ucsubset.src
msgid "Supplemental Symbols And Pictographs"
msgstr "Symboles et pictogrammes additionnels"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nom de police:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caractères spéciaux"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexadécimal :"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Aperçu :"
diff --git a/loleaflet/po/styles/ga.po b/loleaflet/po/styles/ga.po
index 7244bab..2854c8e 100644
--- a/loleaflet/po/styles/ga.po
+++ b/loleaflet/po/styles/ga.po
@@ -2724,3 +2724,17 @@ msgstr "Mongais"
#: ucsubset.src
msgid "Sundanese Supplement"
msgstr "Forlíonadh Sundánach"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Ainm an Chló:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Carachtair Speisialta"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Réamhamharc:"
diff --git a/loleaflet/po/styles/gd.po b/loleaflet/po/styles/gd.po
index b6c2c1b..cf8448d 100644
--- a/loleaflet/po/styles/gd.po
+++ b/loleaflet/po/styles/gd.po
@@ -2812,3 +2812,21 @@ msgstr "Foirlionadh Shamhlaidhean is Dealbhan"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Comharran Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Ainm a' chruth-chlò:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caractaran sònraichte"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Sia-dheicheach:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Ro-shealladh:"
diff --git a/loleaflet/po/styles/gl.po b/loleaflet/po/styles/gl.po
index 92b8781..8ce76dd 100644
--- a/loleaflet/po/styles/gl.po
+++ b/loleaflet/po/styles/gl.po
@@ -2836,3 +2836,17 @@ msgstr "Símbolos e pictogramas suplementarios"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Escrita de sinais de Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nome de tipo de letra:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caracteres especiais"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Visualización:"
diff --git a/loleaflet/po/styles/gu.po b/loleaflet/po/styles/gu.po
index ad16c35..b85e838 100644
--- a/loleaflet/po/styles/gu.po
+++ b/loleaflet/po/styles/gu.po
@@ -2888,3 +2888,13 @@ msgstr "સુદાનિઝ પૂર્તિ"
#: ucsubset.src
msgid "Takri"
msgstr "તકરી"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ફોન્ટનું નામ:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "વિશિષ્ટ અક્ષરો"
diff --git a/loleaflet/po/styles/gug.po b/loleaflet/po/styles/gug.po
index 0b52984..6b008c4 100644
--- a/loleaflet/po/styles/gug.po
+++ b/loleaflet/po/styles/gug.po
@@ -2042,3 +2042,17 @@ msgstr "Javanés"
#: ucsubset.src
msgid "Transport And Map Symbols"
msgstr "Transporte ha Símbolos de Mapa"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Téra Letra Háicha:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Teko Poravopyre kuéra"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Techauka Mboyve:"
diff --git a/loleaflet/po/styles/he.po b/loleaflet/po/styles/he.po
index 48dc486..343dfbc 100644
--- a/loleaflet/po/styles/he.po
+++ b/loleaflet/po/styles/he.po
@@ -2500,3 +2500,17 @@ msgstr "סמלי הבעה"
#: ucsubset.src
msgid "Sundanese Supplement"
msgstr "השלמה לסונדית"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "שם גופן:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "תווים מיוחדים"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "תצוגה מקדימה:"
diff --git a/loleaflet/po/styles/hi.po b/loleaflet/po/styles/hi.po
index 2d4c61c..fc43d62 100644
--- a/loleaflet/po/styles/hi.po
+++ b/loleaflet/po/styles/hi.po
@@ -2843,3 +2843,13 @@ msgstr "सुडानी संपूरक"
#: ucsubset.src
msgid "Takri"
msgstr "तकरी"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फ़ॉन्ट नाम:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "विशिष्ट अक्षर"
diff --git a/loleaflet/po/styles/hr.po b/loleaflet/po/styles/hr.po
index ed73b4d..a8823c7 100644
--- a/loleaflet/po/styles/hr.po
+++ b/loleaflet/po/styles/hr.po
@@ -2752,3 +2752,21 @@ msgstr "Nadomjesni simboli i piktografi"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton znakovno pismo"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Naziv fonta:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Posebni znakovi"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadecimalno:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Pregled:"
diff --git a/loleaflet/po/styles/hu.po b/loleaflet/po/styles/hu.po
index 41431b4..bf85e78 100644
--- a/loleaflet/po/styles/hu.po
+++ b/loleaflet/po/styles/hu.po
@@ -2776,3 +2776,21 @@ msgstr "Kiegészítő szimbólumok és piktogramok"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton-féle jelnyelv"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Betűkészlet neve:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Különleges karakterek"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexadecimális:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Előnézet:"
diff --git a/loleaflet/po/styles/id.po b/loleaflet/po/styles/id.po
index 636b482..1708018 100644
--- a/loleaflet/po/styles/id.po
+++ b/loleaflet/po/styles/id.po
@@ -2655,3 +2655,21 @@ msgstr "Permik Kuno"
#: ucsubset.src
msgid "Supplemental Arrows-C"
msgstr "Suplemen Panah-C"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nama Fonta:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Karakter Khusus"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadesimal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Pratilik:"
diff --git a/loleaflet/po/styles/is.po b/loleaflet/po/styles/is.po
index e519266..97beef1 100644
--- a/loleaflet/po/styles/is.po
+++ b/loleaflet/po/styles/is.po
@@ -2820,3 +2820,21 @@ msgstr "Ýmis aukaleg tákn og myndmerki"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton táknskrift"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Heiti leturgerðar:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Sértákn"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Sextándakerfis:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Forskoðun:"
diff --git a/loleaflet/po/styles/it.po b/loleaflet/po/styles/it.po
index f10f284..78c3300 100644
--- a/loleaflet/po/styles/it.po
+++ b/loleaflet/po/styles/it.po
@@ -2763,3 +2763,21 @@ msgstr "Simboli e pittogrammi supplementari"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sign Writing di Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nome del carattere:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caratteri speciali"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Esadecimale:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Anteprima:"
diff --git a/loleaflet/po/styles/ja.po b/loleaflet/po/styles/ja.po
index 3fca189..cfed9db 100644
--- a/loleaflet/po/styles/ja.po
+++ b/loleaflet/po/styles/ja.po
@@ -2923,3 +2923,17 @@ msgstr "補助矢印C"
#: ucsubset.src
msgid "CJK Unified Ideographs Extension E"
msgstr "CJK統合漢字拡張E"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "フォント名:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "特殊文字"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "プレビュー:"
diff --git a/loleaflet/po/styles/ka.po b/loleaflet/po/styles/ka.po
index d181020..ab3f6bc 100644
--- a/loleaflet/po/styles/ka.po
+++ b/loleaflet/po/styles/ka.po
@@ -2270,3 +2270,13 @@ msgstr "კატაკანას ფონეტიკა"
#: ucsubset.src
msgid "Emoticons"
msgstr "სიცილაკი"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "შრიფტის სახელი:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "სპეციალური სიმბოლოები"
diff --git a/loleaflet/po/styles/kk.po b/loleaflet/po/styles/kk.po
index 7f93ad3..a960ee5 100644
--- a/loleaflet/po/styles/kk.po
+++ b/loleaflet/po/styles/kk.po
@@ -3055,3 +3055,21 @@ msgstr "Қосымша таңбалар және пиктограммалар"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Саттон ым жазуы"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Қаріп аты:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Арнайы таңбалар"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Оналтылық:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Алдын-ала қарау:"
diff --git a/loleaflet/po/styles/kl.po b/loleaflet/po/styles/kl.po
index 083ba41..046d643 100644
--- a/loleaflet/po/styles/kl.po
+++ b/loleaflet/po/styles/kl.po
@@ -1904,3 +1904,5 @@ msgid "Last column"
msgstr ""
# Translations of Unicode subsets from LibreOffice core
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/km.po b/loleaflet/po/styles/km.po
index 92463ba..31c4fd9 100644
--- a/loleaflet/po/styles/km.po
+++ b/loleaflet/po/styles/km.po
@@ -2688,3 +2688,13 @@ msgstr "ផ្នែកបន្ថែមរបស់ Meetei Mayek"
#: ucsubset.src
msgid "Sundanese Supplement"
msgstr "ស៊ូដង់បង្គ្រប់"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ឈ្មោះពុម្ពអក្សរ:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "តួអក្សរពិសេស"
diff --git a/loleaflet/po/styles/kmr-Latn.po b/loleaflet/po/styles/kmr-Latn.po
index aaf51b4..e9ddfd1 100644
--- a/loleaflet/po/styles/kmr-Latn.po
+++ b/loleaflet/po/styles/kmr-Latn.po
@@ -2155,3 +2155,13 @@ msgstr "Sembolên Matematîkî ên Cûr Bi Cûr-A"
#: ucsubset.src
msgid "Bopomofo Extended"
msgstr "Bopomofoya Berfirehkirî"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Navê Fontê:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Tîpa Taybet"
diff --git a/loleaflet/po/styles/kn.po b/loleaflet/po/styles/kn.po
index 2e6e3e4..71ceaa2 100644
--- a/loleaflet/po/styles/kn.po
+++ b/loleaflet/po/styles/kn.po
@@ -2880,3 +2880,13 @@ msgstr "ಸುಂಡಾನೀಸ್ ಪೂರಕ"
#: ucsubset.src
msgid "Takri"
msgstr "ಟಕ್ರಿ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ಅಕ್ಷರ ಶೈಲಿ ಹೆಸರು:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "ವಿಶೇಷ ಅಕ್ಷರಗಳು"
diff --git a/loleaflet/po/styles/ko.po b/loleaflet/po/styles/ko.po
index 7bd702f..84b8030 100644
--- a/loleaflet/po/styles/ko.po
+++ b/loleaflet/po/styles/ko.po
@@ -2694,3 +2694,13 @@ msgstr "메이테이 문자 확장"
#: ucsubset.src
msgid "Meroitic Cursive"
msgstr "메로에 문자 흘림체"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "글꼴 이름:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "특수문자"
diff --git a/loleaflet/po/styles/kok.po b/loleaflet/po/styles/kok.po
index ada66eb..41e1666 100644
--- a/loleaflet/po/styles/kok.po
+++ b/loleaflet/po/styles/kok.po
@@ -2263,3 +2263,9 @@ msgstr "बोपोमोफो विस्तृत"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "कटकना फोनेटिक्स"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "अक्षरसंच नांव:"
diff --git a/loleaflet/po/styles/ks.po b/loleaflet/po/styles/ks.po
index 6772c93..d718378 100644
--- a/loleaflet/po/styles/ks.po
+++ b/loleaflet/po/styles/ks.po
@@ -1945,3 +1945,9 @@ msgstr "كھڈا عنوان، كھڈا مواد"
#: ucsubset.src
msgid "Thai"
msgstr "تھائی لینڈ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "فانٹ نام:"
diff --git a/loleaflet/po/styles/ky.po b/loleaflet/po/styles/ky.po
index 16be6d2..1243e06 100644
--- a/loleaflet/po/styles/ky.po
+++ b/loleaflet/po/styles/ky.po
@@ -1904,3 +1904,5 @@ msgid "Last column"
msgstr ""
# Translations of Unicode subsets from LibreOffice core
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/lb.po b/loleaflet/po/styles/lb.po
index 9cd12a6..0aef916 100644
--- a/loleaflet/po/styles/lb.po
+++ b/loleaflet/po/styles/lb.po
@@ -1984,3 +1984,5 @@ msgstr "Ethiopesch"
#: ucsubset.src
msgid "Mongolian"
msgstr "Mongolesch"
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/lo.po b/loleaflet/po/styles/lo.po
index d5cd540..7ba7df4 100644
--- a/loleaflet/po/styles/lo.po
+++ b/loleaflet/po/styles/lo.po
@@ -1965,3 +1965,9 @@ msgstr "ໄທ"
#: ucsubset.src
msgid "Arrows"
msgstr "ລູກສອນ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ຊື່ແບບຕົວອັກສອນ:"
diff --git a/loleaflet/po/styles/lt.po b/loleaflet/po/styles/lt.po
index 4d5e37f..38efedb 100644
--- a/loleaflet/po/styles/lt.po
+++ b/loleaflet/po/styles/lt.po
@@ -2464,3 +2464,21 @@ msgstr "Lotynų plėtinys E"
#: ucsubset.src
msgid "Supplemental Arrows-C"
msgstr "Papildomos rodyklės-C"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Šrifto pavadinimas:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Specialieji rašmenys"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Šešioliktainis:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Peržiūra:"
diff --git a/loleaflet/po/styles/lv.po b/loleaflet/po/styles/lv.po
index 7e53d1c..b71e417 100644
--- a/loleaflet/po/styles/lv.po
+++ b/loleaflet/po/styles/lv.po
@@ -2956,3 +2956,21 @@ msgstr "Papildu simboli un piktogrammas"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutona zīmju rakstība"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Fonta nosaukums:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Īpašās rakstzīmes"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadecimālais:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Priekšskatījums:"
diff --git a/loleaflet/po/styles/mai.po b/loleaflet/po/styles/mai.po
index cf735f0..e0d5e6f 100644
--- a/loleaflet/po/styles/mai.po
+++ b/loleaflet/po/styles/mai.po
@@ -1984,3 +1984,9 @@ msgstr "ख्मेर"
#: ucsubset.src
msgid "Mongolian"
msgstr "मंगोलियाइ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फंट नाम:"
diff --git a/loleaflet/po/styles/mk.po b/loleaflet/po/styles/mk.po
index baf4654..de60f2c 100644
--- a/loleaflet/po/styles/mk.po
+++ b/loleaflet/po/styles/mk.po
@@ -1988,3 +1988,9 @@ msgstr "Монголски"
#: ucsubset.src
msgid "Tagalog"
msgstr "Тагалог"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Име на фонт:"
diff --git a/loleaflet/po/styles/ml.po b/loleaflet/po/styles/ml.po
index a18458a..d7e0f0a 100644
--- a/loleaflet/po/styles/ml.po
+++ b/loleaflet/po/styles/ml.po
@@ -2875,3 +2875,13 @@ msgstr "സുഡാനീസ് സപ്ലിമെന്റ്"
#: ucsubset.src
msgid "Takri"
msgstr "തക്രി"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ഫോണ്ഡിന്റെ പേര്:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "പ്രത്യേക അക്ഷരങ്ങള്"
diff --git a/loleaflet/po/styles/mn.po b/loleaflet/po/styles/mn.po
index 7bb73dd..9dd8877 100644
--- a/loleaflet/po/styles/mn.po
+++ b/loleaflet/po/styles/mn.po
@@ -2006,3 +2006,9 @@ msgstr "Монгол хэл"
#: ucsubset.src
msgid "Tagalog"
msgstr "Тагалог хэл"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Фонтын нэр:"
diff --git a/loleaflet/po/styles/mni.po b/loleaflet/po/styles/mni.po
index 6bbcfab..efa8524 100644
--- a/loleaflet/po/styles/mni.po
+++ b/loleaflet/po/styles/mni.po
@@ -1978,3 +1978,9 @@ msgstr "ময়ুং ওইবা মিংথোল, ময়ুং ওইবা
#: ucsubset.src
msgid "Thai"
msgstr "থাই"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ফোন্ত মমিং:"
diff --git a/loleaflet/po/styles/mr.po b/loleaflet/po/styles/mr.po
index 9cfbeff..1fe5b3a 100644
--- a/loleaflet/po/styles/mr.po
+++ b/loleaflet/po/styles/mr.po
@@ -2880,3 +2880,13 @@ msgstr "सुदानिज् सप्लिमेंट"
#: ucsubset.src
msgid "Takri"
msgstr "तक्रि"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फाँट् नाव:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "विशेष अक्षरे"
diff --git a/loleaflet/po/styles/my.po b/loleaflet/po/styles/my.po
index 68d089c..2bc9157 100644
--- a/loleaflet/po/styles/my.po
+++ b/loleaflet/po/styles/my.po
@@ -2362,3 +2362,13 @@ msgstr "ကော့တစ်"
#: ucsubset.src
msgid "Emoticons"
msgstr "အသုံးပြုသူ၏ စိတ်ခံစားမှုပြ ပရိုဂရမ်သင်္ကေတ(အိုင်ကွန်)များ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ဖောင့်အမည်:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "အထူး အက္ခရာ၊သင်္ကေတများ"
diff --git a/loleaflet/po/styles/nb.po b/loleaflet/po/styles/nb.po
index 772c47d..f292065 100644
--- a/loleaflet/po/styles/nb.po
+++ b/loleaflet/po/styles/nb.po
@@ -2784,3 +2784,21 @@ msgstr "Tilleggssymbol og -piktogram"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton signwriting"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Skriftnavn:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Spesialtegn"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadesimal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Forhåndsvisning:"
diff --git a/loleaflet/po/styles/ne.po b/loleaflet/po/styles/ne.po
index 21e7980..95a5cbb 100644
--- a/loleaflet/po/styles/ne.po
+++ b/loleaflet/po/styles/ne.po
@@ -2034,3 +2034,13 @@ msgstr "कोप्टिक"
#: ucsubset.src
msgid "Emoticons"
msgstr "इमोटाइकोनहरू"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "फन्ट नाम:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "विशेष क्यारेक्टरहरू"
diff --git a/loleaflet/po/styles/nl.po b/loleaflet/po/styles/nl.po
index 2e24f72..f7d4cd1 100644
--- a/loleaflet/po/styles/nl.po
+++ b/loleaflet/po/styles/nl.po
@@ -2780,3 +2780,21 @@ msgstr "Oud Hongaars"
#: ucsubset.src
msgid "Supplemental Symbols And Pictographs"
msgstr "Aanvullende symbolen en pictogrammen"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Lettertype:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Speciale tekens"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexadecimaal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Voorbeeld:"
diff --git a/loleaflet/po/styles/nn.po b/loleaflet/po/styles/nn.po
index 8ade3dd..c53577e 100644
--- a/loleaflet/po/styles/nn.po
+++ b/loleaflet/po/styles/nn.po
@@ -2765,3 +2765,21 @@ msgstr "Tilleggs-symbol og -piktogram"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Sutton signwriting"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Skriftnamn:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Spesialteikn"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadesimal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Førehandsvising:"
diff --git a/loleaflet/po/styles/nr.po b/loleaflet/po/styles/nr.po
index b845fd7..27f4af2 100644
--- a/loleaflet/po/styles/nr.po
+++ b/loleaflet/po/styles/nr.po
@@ -2293,3 +2293,13 @@ msgstr "I-Bopomofo elulweko"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "I-fonetiki ye-Katakana"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Gama Lefonti:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Amakharektha Akhethekileko"
diff --git a/loleaflet/po/styles/nso.po b/loleaflet/po/styles/nso.po
index baea1b8..ce17be3 100644
--- a/loleaflet/po/styles/nso.po
+++ b/loleaflet/po/styles/nso.po
@@ -2304,3 +2304,9 @@ msgstr "Bopomogo e okeditšwego"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "Sefonetiki sa Katakana"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Leina la fonte:"
diff --git a/loleaflet/po/styles/oc.po b/loleaflet/po/styles/oc.po
index e50f2f8..3265304 100644
--- a/loleaflet/po/styles/oc.po
+++ b/loleaflet/po/styles/oc.po
@@ -2758,3 +2758,21 @@ msgstr "Simbòls e pictogramas suplementaris"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Transcripcion Sutton de lengas de signes"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nom de poliça:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caractèrs especials"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Exadecimal :"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Apercebut :"
diff --git a/loleaflet/po/styles/om.po b/loleaflet/po/styles/om.po
index 3b8fb28..1da6e27 100644
--- a/loleaflet/po/styles/om.po
+++ b/loleaflet/po/styles/om.po
@@ -2310,3 +2310,13 @@ msgstr "Bopoomoofoo Dheerate"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "Xinsagalee Katakaanaa"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Maqaa bocquu:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Arfiilee Addaa"
diff --git a/loleaflet/po/styles/or.po b/loleaflet/po/styles/or.po
index 443612d..77c0ad0 100644
--- a/loleaflet/po/styles/or.po
+++ b/loleaflet/po/styles/or.po
@@ -2866,3 +2866,13 @@ msgstr "ସଣ୍ଡାନିଜ ଅନୁପୁରକ"
#: ucsubset.src
msgid "Takri"
msgstr "ତାକ୍ରି"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ଅକ୍ଷରରୂପ ନାମ:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "ବିଶେଷ ଅକ୍ଷରଗୁଡିକ"
diff --git a/loleaflet/po/styles/pa-IN.po b/loleaflet/po/styles/pa-IN.po
index d519ff3..ca56b07 100644
--- a/loleaflet/po/styles/pa-IN.po
+++ b/loleaflet/po/styles/pa-IN.po
@@ -2384,3 +2384,13 @@ msgstr "ਕੋਪਟੀਕ"
#: ucsubset.src
msgid "Emoticons"
msgstr "ਭਾਵ-ਆਈਕਾਨ"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "ਫੋਂਟ ਨਾਂ:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "ਖਾਸ ਅੱਖਰ"
diff --git a/loleaflet/po/styles/pl.po b/loleaflet/po/styles/pl.po
index 307dada..2572dd4 100644
--- a/loleaflet/po/styles/pl.po
+++ b/loleaflet/po/styles/pl.po
@@ -2880,3 +2880,21 @@ msgstr "Uzupełnienie symboli i piktogramów"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Język migowy Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nazwa czcionki:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Znaki specjalne"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Heksadecymalny:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Podgląd:"
diff --git a/loleaflet/po/styles/pt-BR.po b/loleaflet/po/styles/pt-BR.po
index 00c5251..99b3766 100644
--- a/loleaflet/po/styles/pt-BR.po
+++ b/loleaflet/po/styles/pt-BR.po
@@ -2828,3 +2828,17 @@ msgstr "Símbolos e pictogramas suplementares"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Escrita de sinais de Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nome da fonte:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caracteres especiais"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Visualizar:"
diff --git a/loleaflet/po/styles/pt.po b/loleaflet/po/styles/pt.po
index 6d61f1a..6b700a2 100644
--- a/loleaflet/po/styles/pt.po
+++ b/loleaflet/po/styles/pt.po
@@ -2800,3 +2800,17 @@ msgstr "Símbolos e pictogramas suplementares"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Escrita de Sutton"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Nome do tipo de letra:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caracteres especiais"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Pré-visualizar:"
diff --git a/loleaflet/po/styles/ro.po b/loleaflet/po/styles/ro.po
index 8f254eb..961205a 100644
--- a/loleaflet/po/styles/ro.po
+++ b/loleaflet/po/styles/ro.po
@@ -2692,3 +2692,21 @@ msgstr "Simboluri și pictograme suplimentare"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Limbaj mimico-gestual (transcriere Sutton)"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Numele fontului:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Caractere speciale"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Hexazecimal:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Previzualizare:"
diff --git a/loleaflet/po/styles/ru.po b/loleaflet/po/styles/ru.po
index a372684..4f09719 100644
--- a/loleaflet/po/styles/ru.po
+++ b/loleaflet/po/styles/ru.po
@@ -3044,3 +3044,21 @@ msgstr "Дополнительные символы и пиктограммы"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Жестовое письмо Саттон"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Гарнитура:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Выбор символа"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Шестнадцатеричное:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Просмотр:"
diff --git a/loleaflet/po/styles/rw.po b/loleaflet/po/styles/rw.po
index b6253d1..fa3c17b 100644
--- a/loleaflet/po/styles/rw.po
+++ b/loleaflet/po/styles/rw.po
@@ -2004,3 +2004,9 @@ msgstr "Kumeri"
#: ucsubset.src
msgid "Mongolian"
msgstr "Nyamongoliya"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Izina ry'Umukono:"
diff --git a/loleaflet/po/styles/sa-IN.po b/loleaflet/po/styles/sa-IN.po
index 5daf166..13424a3 100644
--- a/loleaflet/po/styles/sa-IN.po
+++ b/loleaflet/po/styles/sa-IN.po
@@ -2360,3 +2360,9 @@ msgstr "कोप्टोपिक्"
#: ucsubset.src
msgid "Emoticons"
msgstr "भावचिह्नानि"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "अक्षरगणनाम:"
diff --git a/loleaflet/po/styles/sat.po b/loleaflet/po/styles/sat.po
index 582844f..4c0de5d 100644
--- a/loleaflet/po/styles/sat.po
+++ b/loleaflet/po/styles/sat.po
@@ -2293,3 +2293,5 @@ msgstr "बोपोमोफो ओसार"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "काटाकाना साडे आड़ाङ"
+
+# Translation of Special Characters dialog from LibreOffice core
diff --git a/loleaflet/po/styles/sd.po b/loleaflet/po/styles/sd.po
index 36f7780..c23fc43 100644
--- a/loleaflet/po/styles/sd.po
+++ b/loleaflet/po/styles/sd.po
@@ -2367,3 +2367,9 @@ msgstr "ڪوپٽڪ"
#: ucsubset.src
msgid "Emoticons"
msgstr "ترنگون"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "فانٽ جو نالو:"
diff --git a/loleaflet/po/styles/si.po b/loleaflet/po/styles/si.po
index b29c9b6..65fcaf5 100644
--- a/loleaflet/po/styles/si.po
+++ b/loleaflet/po/styles/si.po
@@ -2304,3 +2304,13 @@ msgstr "කොප්ටික්"
#: ucsubset.src
msgid "Emoticons"
msgstr "ඉමොටිකොන"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "අකුරු නාමය:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "විශේෂ අකුරු"
diff --git a/loleaflet/po/styles/sid.po b/loleaflet/po/styles/sid.po
index 590ebc1..d3e013c 100644
--- a/loleaflet/po/styles/sid.po
+++ b/loleaflet/po/styles/sid.po
@@ -2857,3 +2857,13 @@ msgstr "Sundaanesete Ledo"
#: ucsubset.src
msgid "Takri"
msgstr "Takiri"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Borrangichu Su'ma:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Baxxino fikiima"
diff --git a/loleaflet/po/styles/sk.po b/loleaflet/po/styles/sk.po
index d787eeb..a3673bc 100644
--- a/loleaflet/po/styles/sk.po
+++ b/loleaflet/po/styles/sk.po
@@ -2856,3 +2856,21 @@ msgstr "Doplnkové symboly a piktogramy"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Suttonovej posunková abeceda"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Názov písma:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Špeciálne znaky"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Šestnástkovo:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Náhľad:"
diff --git a/loleaflet/po/styles/sl.po b/loleaflet/po/styles/sl.po
index 6a08994..9f99660 100644
--- a/loleaflet/po/styles/sl.po
+++ b/loleaflet/po/styles/sl.po
@@ -3044,3 +3044,21 @@ msgstr "Dodatni simboli in piktogrami"
#: ucsubset.src
msgid "Sutton Signwriting"
msgstr "Zapis znakovnega jezika"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Ime pisave:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Posebni znaki"
+
+#: specialcharacters.ui
+msgid "Hexadecimal:"
+msgstr "Šestnajstiško:"
+
+#: asianphoneticguidedialog.ui
+msgid "Preview:"
+msgstr "Predogled:"
diff --git a/loleaflet/po/styles/sq.po b/loleaflet/po/styles/sq.po
index 2860611..2c5b294 100644
--- a/loleaflet/po/styles/sq.po
+++ b/loleaflet/po/styles/sq.po
@@ -2201,3 +2201,13 @@ msgstr "Pllaka Domino"
#: ucsubset.src
msgid "Old Turkic"
msgstr "Turke e vjetër"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Emri i shkronjave:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
+msgstr "Shkronja të veçanta"
diff --git a/loleaflet/po/styles/sr-Latn.po b/loleaflet/po/styles/sr-Latn.po
index 72af7b1..7c3bc7e 100644
--- a/loleaflet/po/styles/sr-Latn.po
+++ b/loleaflet/po/styles/sr-Latn.po
@@ -2382,3 +2382,13 @@ msgstr "Produženi Bopomofo"
#: ucsubset.src
msgid "Katakana Phonetics"
msgstr "katakana"
+
+# Translation of Special Characters dialog from LibreOffice core
+
+#: GenericCommands.xcu
+msgid "Font Name:"
+msgstr "Ime fonta:"
+
+#: specialcharacters.ui
+msgid "Special Characters"
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list