summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/tools/json_writer.hxx77
-rw-r--r--sw/source/core/crsr/viscrs.cxx2
-rw-r--r--sw/source/uibase/uno/loktxdoc.cxx24
-rw-r--r--tools/qa/cppunit/test_json_writer.cxx2
-rw-r--r--tools/source/misc/json_writer.cxx50
5 files changed, 33 insertions, 122 deletions
diff --git a/include/tools/json_writer.hxx b/include/tools/json_writer.hxx
index c5faf542f1d8..b885cb5e55a3 100644
--- a/include/tools/json_writer.hxx
+++ b/include/tools/json_writer.hxx
@@ -24,15 +24,14 @@
*/
namespace tools
{
-class ScopedJsonWriterNode;
-class ScopedJsonWriterArray;
-class ScopedJsonWriterStruct;
-
class TOOLS_DLLPUBLIC JsonWriter
{
- friend class ScopedJsonWriterNode;
- friend class ScopedJsonWriterArray;
- friend class ScopedJsonWriterStruct;
+ // Auto-closes the node.
+ template <char closing> struct ScopedJsonWriterNode
+ {
+ JsonWriter& mrWriter;
+ ~ScopedJsonWriterNode() { mrWriter.endNode(closing); }
+ };
char* mpBuffer;
char* mPos;
@@ -45,9 +44,9 @@ public:
JsonWriter();
~JsonWriter();
- [[nodiscard]] ScopedJsonWriterNode startNode(std::string_view);
- [[nodiscard]] ScopedJsonWriterArray startArray(std::string_view);
- [[nodiscard]] ScopedJsonWriterStruct startStruct();
+ [[nodiscard]] ScopedJsonWriterNode<'}'> startNode(std::string_view nodeName);
+ [[nodiscard]] ScopedJsonWriterNode<']'> startArray(std::string_view nodeName);
+ [[nodiscard]] ScopedJsonWriterNode<'}'> startStruct();
void put(std::u16string_view pPropName, const OUString& rPropValue);
@@ -83,9 +82,7 @@ public:
bool isDataEquals(std::string_view) const;
private:
- void endNode();
- void endArray();
- void endStruct();
+ void endNode(char closing);
void addCommaBeforeField();
void writeEscapedOUString(const OUString& rPropVal);
void closeDocument();
@@ -111,59 +108,5 @@ private:
#endif
}
};
-
-/**
- * Auto-closes the node.
- */
-class ScopedJsonWriterNode
-{
- friend class JsonWriter;
-
- JsonWriter& mrWriter;
-
- ScopedJsonWriterNode(JsonWriter& rWriter)
- : mrWriter(rWriter)
- {
- }
-
-public:
- ~ScopedJsonWriterNode() { mrWriter.endNode(); }
-};
-
-/**
- * Auto-closes the node.
- */
-class ScopedJsonWriterArray
-{
- friend class JsonWriter;
-
- JsonWriter& mrWriter;
-
- ScopedJsonWriterArray(JsonWriter& rWriter)
- : mrWriter(rWriter)
- {
- }
-
-public:
- ~ScopedJsonWriterArray() { mrWriter.endArray(); }
-};
-
-/**
- * Auto-closes the node.
- */
-class ScopedJsonWriterStruct
-{
- friend class JsonWriter;
-
- JsonWriter& mrWriter;
-
- ScopedJsonWriterStruct(JsonWriter& rWriter)
- : mrWriter(rWriter)
- {
- }
-
-public:
- ~ScopedJsonWriterStruct() { mrWriter.endStruct(); }
-};
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sw/source/core/crsr/viscrs.cxx b/sw/source/core/crsr/viscrs.cxx
index 0385ce85f71c..2dd958b0c42b 100644
--- a/sw/source/core/crsr/viscrs.cxx
+++ b/sw/source/core/crsr/viscrs.cxx
@@ -708,7 +708,7 @@ void SwSelPaintRects::HighlightContentControl()
if (pContentControl && (pContentControl->GetComboBox() || pContentControl->GetDropDown()))
{
- tools::ScopedJsonWriterArray aItems = aJson.startArray("items");
+ auto aItems = aJson.startArray("items");
for (const auto& rItem : pContentControl->GetListItems())
{
aJson.putSimpleValue(rItem.ToString());
diff --git a/sw/source/uibase/uno/loktxdoc.cxx b/sw/source/uibase/uno/loktxdoc.cxx
index 47527605f69a..36c7de04e848 100644
--- a/sw/source/uibase/uno/loktxdoc.cxx
+++ b/sw/source/uibase/uno/loktxdoc.cxx
@@ -70,7 +70,7 @@ void GetTextFormFields(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
SwDoc* pDoc = pDocShell->GetDoc();
IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
- tools::ScopedJsonWriterArray aFields = rJsonWriter.startArray("fields");
+ auto aFields = rJsonWriter.startArray("fields");
for (auto it = pMarkAccess->getFieldmarksBegin(); it != pMarkAccess->getFieldmarksEnd(); ++it)
{
auto pFieldmark = dynamic_cast<sw::mark::IFieldmark*>(*it);
@@ -93,7 +93,7 @@ void GetTextFormFields(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
continue;
}
- tools::ScopedJsonWriterStruct aField = rJsonWriter.startStruct();
+ auto aField = rJsonWriter.startStruct();
rJsonWriter.put("type", aType);
rJsonWriter.put("command", aCommand);
}
@@ -175,7 +175,7 @@ void GetDocumentProperties(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell
uno::Reference<beans::XPropertyAccess> xUDP(xDP->getUserDefinedProperties(), uno::UNO_QUERY);
auto aUDPs = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(
xUDP->getPropertyValues());
- tools::ScopedJsonWriterArray aProperties = rJsonWriter.startArray("userDefinedProperties");
+ auto aProperties = rJsonWriter.startArray("userDefinedProperties");
for (const auto& rUDP : aUDPs)
{
if (!rUDP.Name.startsWith(aNamePrefix))
@@ -191,7 +191,7 @@ void GetDocumentProperties(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell
OUString aValue;
rUDP.Value >>= aValue;
- tools::ScopedJsonWriterStruct aProperty = rJsonWriter.startStruct();
+ auto aProperty = rJsonWriter.startStruct();
rJsonWriter.put("name", rUDP.Name);
rJsonWriter.put("type", "string");
rJsonWriter.put("value", aValue);
@@ -216,7 +216,7 @@ void GetBookmarks(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
}
IDocumentMarkAccess& rIDMA = *pDocShell->GetDoc()->getIDocumentMarkAccess();
- tools::ScopedJsonWriterArray aBookmarks = rJsonWriter.startArray("bookmarks");
+ auto aBookmarks = rJsonWriter.startArray("bookmarks");
for (auto it = rIDMA.getBookmarksBegin(); it != rIDMA.getBookmarksEnd(); ++it)
{
sw::mark::IMark* pMark = *it;
@@ -225,7 +225,7 @@ void GetBookmarks(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
continue;
}
- tools::ScopedJsonWriterStruct aProperty = rJsonWriter.startStruct();
+ auto aProperty = rJsonWriter.startStruct();
rJsonWriter.put("name", pMark->GetName());
}
}
@@ -251,7 +251,7 @@ void GetBookmark(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
SwPosition& rCursor = *pWrtShell->GetCursor()->GetPoint();
sw::mark::IMark* pBookmark = rIDMA.getOneInnermostBookmarkFor(rCursor);
- tools::ScopedJsonWriterNode aBookmark = rJsonWriter.startNode("bookmark");
+ auto aBookmark = rJsonWriter.startNode("bookmark");
if (!pBookmark)
{
return;
@@ -298,7 +298,7 @@ void GetFields(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
}
SwDoc* pDoc = pDocShell->GetDoc();
- tools::ScopedJsonWriterArray aBookmarks = rJsonWriter.startArray("setRefs");
+ auto aBookmarks = rJsonWriter.startArray("setRefs");
std::vector<const SwFormatRefMark*> aRefMarks;
for (sal_uInt16 i = 0; i < pDoc->GetRefMarks(); ++i)
{
@@ -321,7 +321,7 @@ void GetFields(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
continue;
}
- tools::ScopedJsonWriterStruct aProperty = rJsonWriter.startStruct();
+ auto aProperty = rJsonWriter.startStruct();
rJsonWriter.put("name", pRefMark->GetRefName());
}
}
@@ -363,7 +363,7 @@ void GetField(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
SwTextNode* pTextNode = rCursor.GetNode().GetTextNode();
std::vector<SwTextAttr*> aAttrs
= pTextNode->GetTextAttrsAt(rCursor.GetContentIndex(), RES_TXTATR_REFMARK);
- tools::ScopedJsonWriterNode aRefmark = rJsonWriter.startNode("setRef");
+ auto aRefmark = rJsonWriter.startNode("setRef");
if (aAttrs.empty())
{
return;
@@ -396,7 +396,7 @@ void GetSections(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
}
SwDoc* pDoc = pDocShell->GetDoc();
- tools::ScopedJsonWriterArray aBookmarks = rJsonWriter.startArray("sections");
+ auto aBookmarks = rJsonWriter.startArray("sections");
for (const auto& pSection : pDoc->GetSections())
{
if (!pSection->GetName().startsWith(aNamePrefix))
@@ -404,7 +404,7 @@ void GetSections(tools::JsonWriter& rJsonWriter, SwDocShell* pDocShell,
continue;
}
- tools::ScopedJsonWriterStruct aProperty = rJsonWriter.startStruct();
+ auto aProperty = rJsonWriter.startStruct();
rJsonWriter.put("name", pSection->GetName());
}
}
diff --git a/tools/qa/cppunit/test_json_writer.cxx b/tools/qa/cppunit/test_json_writer.cxx
index a82fc769be31..05f19515e1e4 100644
--- a/tools/qa/cppunit/test_json_writer.cxx
+++ b/tools/qa/cppunit/test_json_writer.cxx
@@ -81,7 +81,7 @@ void JsonWriterTest::testArray()
{
tools::JsonWriter aJson;
{
- tools::ScopedJsonWriterArray aArray = aJson.startArray("items");
+ auto aArray = aJson.startArray("items");
aJson.putSimpleValue("foo");
aJson.putSimpleValue("bar");
}
diff --git a/tools/source/misc/json_writer.cxx b/tools/source/misc/json_writer.cxx
index e3e27bf756b4..277164ee12cc 100644
--- a/tools/source/misc/json_writer.cxx
+++ b/tools/source/misc/json_writer.cxx
@@ -40,78 +40,46 @@ JsonWriter::~JsonWriter()
free(mpBuffer);
}
-ScopedJsonWriterNode JsonWriter::startNode(std::string_view pNodeName)
+JsonWriter::ScopedJsonWriterNode<'}'> JsonWriter::startNode(std::string_view pNodeName)
{
putLiteral(pNodeName, "{ ");
mStartNodeCount++;
mbFirstFieldInNode = true;
- return ScopedJsonWriterNode(*this);
+ return { *this };
}
-void JsonWriter::endNode()
+void JsonWriter::endNode(char closing)
{
assert(mStartNodeCount && "mismatched StartNode/EndNode somewhere");
--mStartNodeCount;
ensureSpace(1);
- *mPos = '}';
+ *mPos = closing;
++mPos;
mbFirstFieldInNode = false;
validate();
}
-ScopedJsonWriterArray JsonWriter::startArray(std::string_view pNodeName)
+JsonWriter::ScopedJsonWriterNode<']'> JsonWriter::startArray(std::string_view pNodeName)
{
putLiteral(pNodeName, "[ ");
mStartNodeCount++;
mbFirstFieldInNode = true;
- return ScopedJsonWriterArray(*this);
+ return { *this };
}
-void JsonWriter::endArray()
+JsonWriter::ScopedJsonWriterNode<'}'> JsonWriter::startStruct()
{
- assert(mStartNodeCount && "mismatched StartNode/EndNode somewhere");
- --mStartNodeCount;
- ensureSpace(1);
- *mPos = ']';
- ++mPos;
- mbFirstFieldInNode = false;
+ putRaw("{ ");
- validate();
-}
-
-ScopedJsonWriterStruct JsonWriter::startStruct()
-{
- ensureSpace(6);
-
- addCommaBeforeField();
-
- *mPos = '{';
- ++mPos;
- *mPos = ' ';
- ++mPos;
mStartNodeCount++;
mbFirstFieldInNode = true;
- validate();
-
- return ScopedJsonWriterStruct(*this);
-}
-
-void JsonWriter::endStruct()
-{
- assert(mStartNodeCount && "mismatched StartNode/EndNode somewhere");
- --mStartNodeCount;
- ensureSpace(1);
- *mPos = '}';
- ++mPos;
- mbFirstFieldInNode = false;
-
- validate();
+ return { *this };
}
static char getEscapementChar(char ch)