View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0016001 | Scribus | Scripter | public | 2019-12-10 09:33 | 2020-08-11 20:56 |
| Reporter | ale | Assigned To | ale | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Product Version | 1.5.6.svn | ||||
| Fixed in Version | 1.5.6.svn | ||||
| Summary | 0016001: Scripter: add getCharacterStyle() | ||||
| Description | add getCharacterStyle() | ||||
| Tags | No tags attached. | ||||
| Attached Files | get-character-style.diff (4,746 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdobj.cpp b/scribus/plugins/scriptplugin/cmdobj.cpp
index 04534b865..6c29a9e9d 100644
--- a/scribus/plugins/scriptplugin/cmdobj.cpp
+++ b/scribus/plugins/scriptplugin/cmdobj.cpp
@@ -579,6 +579,39 @@ PyObject *scribus_objectexists(PyObject* /* self */, PyObject* args)
return PyBool_FromLong(static_cast<long>(false));
}
+/*!
+ */
+PyObject* scribus_getcharstyle(PyObject* /* self */, PyObject* args)
+{
+ char* name = const_cast<char*>("");
+ if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
+ return NULL;
+ if (!checkHaveDocument())
+ return NULL;
+ PageItem* item = GetUniqueItem(QString::fromUtf8(name));
+ if (item == NULL)
+ return NULL;
+ if ((item->itemType() != PageItem::TextFrame) && (item->itemType() != PageItem::PathText))
+ {
+ PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot get style of a non-text frame.", "python error").toLocal8Bit().constData());
+ return NULL;
+ }
+
+ int selectionLength = item->itemText.selectionLength();
+ if (selectionLength > 0)
+ {
+ int selectionStart = item->itemText.startOfSelection();
+ const CharStyle& currentStyle = item->itemText.charStyle(selectionStart);
+ if (currentStyle.hasParent())
+ return PyUnicode_FromString(currentStyle.parentStyle()->name().toUtf8());
+ }
+ else
+ {
+ PyErr_SetString(WrongFrameTypeError, QObject::tr("Selection length must be >0.", "python error").toLocal8Bit().constData());
+ return NULL;
+ }
+ Py_RETURN_NONE;
+};
/*
* Vaclav Smilauer, 2017-21-21
@@ -896,5 +929,5 @@ PV */
void cmdobjdocwarnings()
{
QStringList s;
- s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
+ s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getcharstyle__doc__ <<scribus_getstyle__doc__ <<scribus_setcharstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
}
diff --git a/scribus/plugins/scriptplugin/cmdobj.h b/scribus/plugins/scriptplugin/cmdobj.h
index d2296fb41..ff48c8c65 100644
--- a/scribus/plugins/scriptplugin/cmdobj.h
+++ b/scribus/plugins/scriptplugin/cmdobj.h
@@ -234,6 +234,17 @@ ObjectName is now optional. When none set, search for selection...
*/
PyObject *scribus_objectexists(PyObject * /*self*/, PyObject* args);
+PyDoc_STRVAR(scribus_getcharstyle__doc__,
+QT_TR_NOOP("getCharacterStyle([\"name\"])\n\
+\n\
+Return name of character style applied to object named \"name\". If \"name\" is not given,\n\
+the currently selected object is used. If current object has a text selection, \n\
+the name of character style applied to start of selection is returned. Otherwise an error is returned.\n\
+"));
+/**
+ * \author Michael Uhlenberg
+ */
+PyObject* scribus_getcharstyle(PyObject* /*self*/, PyObject* args);
/*! docstring */
diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp
index 49d87150e..72a4940af 100644
--- a/scribus/plugins/scriptplugin/scriptplugin.cpp
+++ b/scribus/plugins/scriptplugin/scriptplugin.cpp
@@ -391,6 +391,7 @@ PyMethodDef scribus_methods[] = {
{const_cast<char*>("getObjectAttributes"), scribus_getobjectattributes, METH_VARARGS, tr(scribus_getobjectattributes__doc__)},
{const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, tr(scribus_getselobjnam__doc__)},
{const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, tr(scribus_getsize__doc__)},
+ {const_cast<char*>("getCharacterStyle"), scribus_getcharstyle, METH_VARARGS, tr(scribus_getcharstyle__doc__) },
{const_cast<char*>("getStyle"), scribus_getstyle, METH_VARARGS, tr(scribus_getstyle__doc__) },
{const_cast<char*>("getTableRows"), scribus_gettablerows, METH_VARARGS, tr(scribus_gettablerows__doc__)},
{const_cast<char*>("getTableRowHeight"), scribus_gettablerowheight, METH_VARARGS, tr(scribus_gettablerowheight__doc__)},
| ||||
| Patch | Yes | ||||
|
|
i will propose a second version that does not require a selection... |
|
|
here is a new patch that also works when there is no selection get-character-style-2.diff (4,560 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdobj.cpp b/scribus/plugins/scriptplugin/cmdobj.cpp
index 04534b865..c681697fd 100644
--- a/scribus/plugins/scriptplugin/cmdobj.cpp
+++ b/scribus/plugins/scriptplugin/cmdobj.cpp
@@ -579,6 +579,33 @@ PyObject *scribus_objectexists(PyObject* /* self */, PyObject* args)
return PyBool_FromLong(static_cast<long>(false));
}
+/*!
+ */
+PyObject* scribus_getcharstyle(PyObject* /* self */, PyObject* args)
+{
+ char* name = const_cast<char*>("");
+ if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
+ return NULL;
+ if (!checkHaveDocument())
+ return NULL;
+ PageItem* item = GetUniqueItem(QString::fromUtf8(name));
+ if (item == NULL)
+ return NULL;
+ if ((item->itemType() != PageItem::TextFrame) && (item->itemType() != PageItem::PathText))
+ {
+ PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot get style of a non-text frame.", "python error").toLocal8Bit().constData());
+ return NULL;
+ }
+
+ const CharStyle& currentStyle = item->itemText.selectionLength() > 0 ?
+ item->itemText.charStyle(item->itemText.startOfSelection()) :
+ item->itemText.charStyle(item->itemText.cursorPosition());
+
+ if (currentStyle.hasParent())
+ return PyUnicode_FromString(currentStyle.parentStyle()->name().toUtf8());
+
+ Py_RETURN_NONE;
+};
/*
* Vaclav Smilauer, 2017-21-21
@@ -896,5 +923,5 @@ PV */
void cmdobjdocwarnings()
{
QStringList s;
- s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
+ s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getcharstyle__doc__ <<scribus_getstyle__doc__ <<scribus_setcharstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
}
diff --git a/scribus/plugins/scriptplugin/cmdobj.h b/scribus/plugins/scriptplugin/cmdobj.h
index d2296fb41..ff48c8c65 100644
--- a/scribus/plugins/scriptplugin/cmdobj.h
+++ b/scribus/plugins/scriptplugin/cmdobj.h
@@ -234,6 +234,17 @@ ObjectName is now optional. When none set, search for selection...
*/
PyObject *scribus_objectexists(PyObject * /*self*/, PyObject* args);
+PyDoc_STRVAR(scribus_getcharstyle__doc__,
+QT_TR_NOOP("getCharacterStyle([\"name\"])\n\
+\n\
+Return name of character style applied to object named \"name\". If \"name\" is not given,\n\
+the currently selected object is used. If current object has a text selection, \n\
+the name of character style applied to start of selection is returned. Otherwise an error is returned.\n\
+"));
+/**
+ * \author Michael Uhlenberg
+ */
+PyObject* scribus_getcharstyle(PyObject* /*self*/, PyObject* args);
/*! docstring */
diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp
index 49d87150e..72a4940af 100644
--- a/scribus/plugins/scriptplugin/scriptplugin.cpp
+++ b/scribus/plugins/scriptplugin/scriptplugin.cpp
@@ -391,6 +391,7 @@ PyMethodDef scribus_methods[] = {
{const_cast<char*>("getObjectAttributes"), scribus_getobjectattributes, METH_VARARGS, tr(scribus_getobjectattributes__doc__)},
{const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, tr(scribus_getselobjnam__doc__)},
{const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, tr(scribus_getsize__doc__)},
+ {const_cast<char*>("getCharacterStyle"), scribus_getcharstyle, METH_VARARGS, tr(scribus_getcharstyle__doc__) },
{const_cast<char*>("getStyle"), scribus_getstyle, METH_VARARGS, tr(scribus_getstyle__doc__) },
{const_cast<char*>("getTableRows"), scribus_gettablerows, METH_VARARGS, tr(scribus_gettablerows__doc__)},
{const_cast<char*>("getTableRowHeight"), scribus_gettablerowheight, METH_VARARGS, tr(scribus_gettablerowheight__doc__)},
|
|
|
feedback from jean in irc: cursor is not (really) defined when scribus is not in edit mode. third patch... get-character-style-3.diff (4,696 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdobj.cpp b/scribus/plugins/scriptplugin/cmdobj.cpp
index 04534b865..00a48406d 100644
--- a/scribus/plugins/scriptplugin/cmdobj.cpp
+++ b/scribus/plugins/scriptplugin/cmdobj.cpp
@@ -579,6 +579,36 @@ PyObject *scribus_objectexists(PyObject* /* self */, PyObject* args)
return PyBool_FromLong(static_cast<long>(false));
}
+/*!
+ */
+PyObject* scribus_getcharstyle(PyObject* /* self */, PyObject* args)
+{
+ char* name = const_cast<char*>("");
+ if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
+ return NULL;
+ if (!checkHaveDocument())
+ return NULL;
+ PageItem* item = GetUniqueItem(QString::fromUtf8(name));
+ if (item == NULL)
+ return NULL;
+ if ((item->itemType() != PageItem::TextFrame) && (item->itemType() != PageItem::PathText))
+ {
+ PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot get style of a non-text frame.", "python error").toLocal8Bit().constData());
+ return NULL;
+ }
+
+
+ auto currentDoc = ScCore->primaryMainWindow()->doc;
+ const auto storyText = item->itemText;
+ const CharStyle& currentStyle = storyText.selectionLength() > 0 ?
+ storyText.charStyle(storyText.startOfSelection()) :
+ (currentDoc->appMode == modeEdit ? storyText.charStyle() : storyText.defaultStyle().charStyle());
+
+ if (currentStyle.hasParent())
+ return PyUnicode_FromString(currentStyle.parentStyle()->name().toUtf8());
+
+ Py_RETURN_NONE;
+};
/*
* Vaclav Smilauer, 2017-21-21
@@ -896,5 +926,5 @@ PV */
void cmdobjdocwarnings()
{
QStringList s;
- s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
+ s << scribus_newrect__doc__ <<scribus_newellipse__doc__ << scribus_newimage__doc__ << scribus_newtext__doc__ << scribus_newtable__doc__ << scribus_newline__doc__ <<scribus_polyline__doc__ << scribus_polygon__doc__ << scribus_bezierline__doc__ <<scribus_pathtext__doc__ <<scribus_deleteobj__doc__ <<scribus_textflow__doc__ <<scribus_objectexists__doc__ <<scribus_getcharstyle__doc__ <<scribus_getstyle__doc__ <<scribus_setcharstyle__doc__ <<scribus_setstyle__doc__ <<scribus_getstylenames__doc__ <<scribus_getcharstylenames__doc__ <<scribus_duplicateobject__doc__ <<scribus_copyobject__doc__ <<scribus_pasteobject__doc__;
}
diff --git a/scribus/plugins/scriptplugin/cmdobj.h b/scribus/plugins/scriptplugin/cmdobj.h
index d2296fb41..e75f5f317 100644
--- a/scribus/plugins/scriptplugin/cmdobj.h
+++ b/scribus/plugins/scriptplugin/cmdobj.h
@@ -234,6 +234,17 @@ ObjectName is now optional. When none set, search for selection...
*/
PyObject *scribus_objectexists(PyObject * /*self*/, PyObject* args);
+PyDoc_STRVAR(scribus_getcharstyle__doc__,
+QT_TR_NOOP("getCharacterStyle([\"name\"])\n\
+\n\
+Return name of character style applied to object named \"name\". If \"name\" is not given,\n\
+the currently selected object is used. If current object has a text selection, \n\
+the name of character style applied to start of selection is returned. Otherwise an error is returned.\n\
+"));
+/**
+ * \author Michael Uhlenberg & Ale Rimoldi
+ */
+PyObject* scribus_getcharstyle(PyObject* /*self*/, PyObject* args);
/*! docstring */
diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp
index 49d87150e..72a4940af 100644
--- a/scribus/plugins/scriptplugin/scriptplugin.cpp
+++ b/scribus/plugins/scriptplugin/scriptplugin.cpp
@@ -391,6 +391,7 @@ PyMethodDef scribus_methods[] = {
{const_cast<char*>("getObjectAttributes"), scribus_getobjectattributes, METH_VARARGS, tr(scribus_getobjectattributes__doc__)},
{const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, tr(scribus_getselobjnam__doc__)},
{const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, tr(scribus_getsize__doc__)},
+ {const_cast<char*>("getCharacterStyle"), scribus_getcharstyle, METH_VARARGS, tr(scribus_getcharstyle__doc__) },
{const_cast<char*>("getStyle"), scribus_getstyle, METH_VARARGS, tr(scribus_getstyle__doc__) },
{const_cast<char*>("getTableRows"), scribus_gettablerows, METH_VARARGS, tr(scribus_gettablerows__doc__)},
{const_cast<char*>("getTableRowHeight"), scribus_gettablerowheight, METH_VARARGS, tr(scribus_gettablerowheight__doc__)},
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-12-10 09:33 | ale | New Issue | |
| 2019-12-10 09:33 | ale | File Added: get-character-style.diff | |
| 2019-12-10 09:33 | ale | Summary | SCripter: add getCharacterStyle() => [PATCH] Scripter: add getCharacterStyle() |
| 2019-12-10 09:33 | ale | Assigned To | => ale |
| 2019-12-10 09:33 | ale | Status | new => assigned |
| 2019-12-10 09:38 | ale | Note Added: 0047235 | |
| 2019-12-10 10:03 | ale | File Added: get-character-style-2.diff | |
| 2019-12-10 10:03 | ale | Note Added: 0047236 | |
| 2019-12-10 13:29 | ale | File Added: get-character-style-3.diff | |
| 2019-12-10 13:29 | ale | Note Added: 0047239 | |
| 2020-05-05 02:07 | jghali | Summary | [PATCH] Scripter: add getCharacterStyle() => Scripter: add getCharacterStyle() |
| 2020-05-05 02:07 | jghali | Status | assigned => resolved |
| 2020-05-05 02:07 | jghali | Resolution | open => fixed |
| 2020-05-05 02:07 | jghali | Fixed in Version | => 1.5.6.svn |
| 2020-08-11 20:56 | cbradney | Status | resolved => closed |