Mon, 12 Dec 2022 16:55:43 +0100
Moved the Protobuf class browser to this plugin.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.ExtensionProtobuf.protoclbr.html Mon Dec 12 16:55:43 2022 +0100 @@ -0,0 +1,465 @@ +<!DOCTYPE html> +<html><head> +<title>Plugin_Extension_Protobuf.ExtensionProtobuf.protoclbr</title> +<meta charset="UTF-8"> +<link rel="stylesheet" href="styles.css"> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>Plugin_Extension_Protobuf.ExtensionProtobuf.protoclbr</h1> + +<p> +Parse a ProtoBuf protocol file and retrieve messages, enums, services and +rpc methods. +</p> +<p> +It is based on the Python class browser found in this package. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>_commentsub</td></tr><tr><td>_getnext</td></tr><tr><td>_normalize</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#Enum">Enum</a></td> +<td>Class to represent a ProtoBuf Enum.</td> +</tr> +<tr> +<td><a href="#Message">Message</a></td> +<td>Class to represent a ProtoBuf Message.</td> +</tr> +<tr> +<td><a href="#Service">Service</a></td> +<td>Class to represent a ProtoBuf Service.</td> +</tr> +<tr> +<td><a href="#ServiceMethod">ServiceMethod</a></td> +<td>Class to represent a ProtoBuf Service Method.</td> +</tr> +<tr> +<td><a href="#VisibilityMixin">VisibilityMixin</a></td> +<td>Mixin class implementing the notion of visibility.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> + +<tr> +<td><a href="#calculateEndline">calculateEndline</a></td> +<td>Function to calculate the end line.</td> +</tr> +<tr> +<td><a href="#readmodule_ex">readmodule_ex</a></td> +<td>Read a ProtoBuf protocol file and return a dictionary of messages, enums, services and rpc methods.</td> +</tr> +<tr> +<td><a href="#scan">scan</a></td> +<td>Public method to scan the given source text.</td> +</tr> +</table> +<hr /> +<hr /> +<a NAME="Enum" ID="Enum"></a> +<h2>Enum</h2> + +<p> + Class to represent a ProtoBuf Enum. +</p> +<h3>Derived from</h3> +ClbrBaseClasses.Enum, VisibilityMixin +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#Enum.__init__">Enum</a></td> +<td>Constructor</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="Enum.__init__" ID="Enum.__init__"></a> +<h4>Enum (Constructor)</h4> +<b>Enum</b>(<i>module, name, file, lineno</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>module</i> (str)</dt> +<dd> +name of the module containing this enum +</dd> +<dt><i>name</i> (str)</dt> +<dd> +name of this enum +</dd> +<dt><i>file</i> (str)</dt> +<dd> +filename containing this enum +</dd> +<dt><i>lineno</i> (int)</dt> +<dd> +linenumber of the message enum +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="Message" ID="Message"></a> +<h2>Message</h2> + +<p> + Class to represent a ProtoBuf Message. +</p> +<h3>Derived from</h3> +ClbrBaseClasses.Module, VisibilityMixin +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#Message.__init__">Message</a></td> +<td>Constructor</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="Message.__init__" ID="Message.__init__"></a> +<h4>Message (Constructor)</h4> +<b>Message</b>(<i>module, name, file, lineno</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>module</i> (str)</dt> +<dd> +name of the module containing this message +</dd> +<dt><i>name</i> (str)</dt> +<dd> +name of this message +</dd> +<dt><i>file</i> (str)</dt> +<dd> +filename containing this message +</dd> +<dt><i>lineno</i> (int)</dt> +<dd> +linenumber of the message definition +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="Service" ID="Service"></a> +<h2>Service</h2> + +<p> + Class to represent a ProtoBuf Service. +</p> +<h3>Derived from</h3> +ClbrBaseClasses.Class, VisibilityMixin +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#Service.__init__">Service</a></td> +<td>Constructor</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="Service.__init__" ID="Service.__init__"></a> +<h4>Service (Constructor)</h4> +<b>Service</b>(<i>module, name, file, lineno</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>module</i> (str)</dt> +<dd> +name of the module containing this service +</dd> +<dt><i>name</i> (str)</dt> +<dd> +name of this service +</dd> +<dt><i>file</i> (str)</dt> +<dd> +filename containing this service +</dd> +<dt><i>lineno</i> (int)</dt> +<dd> +linenumber of the service definition +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="ServiceMethod" ID="ServiceMethod"></a> +<h2>ServiceMethod</h2> + +<p> + Class to represent a ProtoBuf Service Method. +</p> +<h3>Derived from</h3> +ClbrBaseClasses.Function, VisibilityMixin +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#ServiceMethod.__init__">ServiceMethod</a></td> +<td>Constructor</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="ServiceMethod.__init__" ID="ServiceMethod.__init__"></a> +<h4>ServiceMethod (Constructor)</h4> +<b>ServiceMethod</b>(<i>name, file, lineno, signature, returns</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>name</i> (str)</dt> +<dd> +name of this service method +</dd> +<dt><i>file</i> (str)</dt> +<dd> +filename containing this service method +</dd> +<dt><i>lineno</i> (int)</dt> +<dd> +linenumber of the service method definition +</dd> +<dt><i>signature</i> (str)</dt> +<dd> +parameter list of the service method +</dd> +<dt><i>returns</i> (str)</dt> +<dd> +return type of the service method +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="VisibilityMixin" ID="VisibilityMixin"></a> +<h2>VisibilityMixin</h2> + +<p> + Mixin class implementing the notion of visibility. +</p> +<h3>Derived from</h3> +ClbrBaseClasses.ClbrVisibilityMixinBase +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#VisibilityMixin.__init__">VisibilityMixin</a></td> +<td>Constructor</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="VisibilityMixin.__init__" ID="VisibilityMixin.__init__"></a> +<h4>VisibilityMixin (Constructor)</h4> +<b>VisibilityMixin</b>(<i></i>) + +<p> + Constructor +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="calculateEndline" ID="calculateEndline"></a> +<h2>calculateEndline</h2> +<b>calculateEndline</b>(<i>lineno, lines</i>) + +<p> + Function to calculate the end line. +</p> +<dl> + +<dt><i>lineno</i> (int)</dt> +<dd> +line number to start at (one based) +</dd> +<dt><i>lines</i> (list of str)</dt> +<dd> +list of source lines +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +end line (one based) +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +int +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="readmodule_ex" ID="readmodule_ex"></a> +<h2>readmodule_ex</h2> +<b>readmodule_ex</b>(<i>module, path=None</i>) + +<p> + Read a ProtoBuf protocol file and return a dictionary of messages, enums, + services and rpc methods. +</p> +<dl> + +<dt><i>module</i> (str)</dt> +<dd> +name of the ProtoBuf protocol file +</dd> +<dt><i>path</i> (list of str)</dt> +<dd> +path the file should be searched in +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +the resulting dictionary +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="scan" ID="scan"></a> +<h2>scan</h2> +<b>scan</b>(<i>src, file, module</i>) + +<p> + Public method to scan the given source text. +</p> +<dl> + +<dt><i>src</i> (str)</dt> +<dd> +source text to be scanned +</dd> +<dt><i>file</i> (str)</dt> +<dd> +file name associated with the source text +</dd> +<dt><i>module</i> (str)</dt> +<dd> +module name associated with the source text +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +dictionary containing the extracted data +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.PluginExtensionProtobuf.html Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.PluginExtensionProtobuf.html Mon Dec 12 16:55:43 2022 +0100 @@ -95,6 +95,14 @@ <td>Public method to deactivate this plug-in.</td> </tr> <tr> +<td><a href="#ProtobufExtensionPlugin.getFileIcon">getFileIcon</a></td> +<td>Public method to get the name of a file icon.</td> +</tr> +<tr> +<td><a href="#ProtobufExtensionPlugin.getLexer">getLexer</a></td> +<td>Public method to instantiate a Pygments Protocol Buffer lexer object.</td> +</tr> +<tr> <td><a href="#ProtobufExtensionPlugin.getPreferences">getPreferences</a></td> <td>Public method to retrieve the various settings values.</td> </tr> @@ -163,6 +171,58 @@ <p> Public method to deactivate this plug-in. </p> +<a NAME="ProtobufExtensionPlugin.getFileIcon" ID="ProtobufExtensionPlugin.getFileIcon"></a> +<h4>ProtobufExtensionPlugin.getFileIcon</h4> +<b>getFileIcon</b>(<i>filename=""</i>) + +<p> + Public method to get the name of a file icon. +</p> +<dl> + +<dt><i>filename</i> (str (optional))</dt> +<dd> +file name (defaults to "") +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +name of a file icon +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<a NAME="ProtobufExtensionPlugin.getLexer" ID="ProtobufExtensionPlugin.getLexer"></a> +<h4>ProtobufExtensionPlugin.getLexer</h4> +<b>getLexer</b>(<i>parent=None</i>) + +<p> + Public method to instantiate a Pygments Protocol Buffer lexer object. +</p> +<dl> + +<dt><i>parent</i> (QObject)</dt> +<dd> +reference to the parent object +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +reference to the instanciated lexer object +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +QsciLexer +</dd> +</dl> <a NAME="ProtobufExtensionPlugin.getPreferences" ID="ProtobufExtensionPlugin.getPreferences"></a> <h4>ProtobufExtensionPlugin.getPreferences</h4> <b>getPreferences</b>(<i>key</i>)
--- a/ExtensionProtobuf/Documentation/source/index-Plugin_Extension_Protobuf.ExtensionProtobuf.html Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/Documentation/source/index-Plugin_Extension_Protobuf.ExtensionProtobuf.html Mon Dec 12 16:55:43 2022 +0100 @@ -27,5 +27,9 @@ <td><a href="Plugin_Extension_Protobuf.ExtensionProtobuf.ProjectProtocolsBrowser.html">ProjectProtocolsBrowser</a></td> <td>Module implementing the a class used to display the protocols (protobuf) part of the project.</td> </tr> +<tr> +<td><a href="Plugin_Extension_Protobuf.ExtensionProtobuf.protoclbr.html">protoclbr</a></td> +<td>Parse a ProtoBuf protocol file and retrieve messages, enums, services and rpc methods.</td> +</tr> </table> </body></html> \ No newline at end of file
--- a/ExtensionProtobuf/i18n/protobuf_de.ts Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/i18n/protobuf_de.ts Mon Dec 12 16:55:43 2022 +0100 @@ -1,334 +1,345 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="de_DE"> -<context> + <context> <name>ProjectProtocolsBrowser</name> <message> - <location filename="../ProjectProtocolsBrowser.py" line="79"/> - <source>Protocols (protobuf)</source> - <translation>Protokolle (protobuf)</translation> + <location filename="../ProjectProtocolsBrowser.py" line="79" /> + <source>Protocols (protobuf)</source> + <translation>Protokolle (protobuf)</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="82"/> - <source><b>Project Protocols Browser</b><p>This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.</p></source> - <translation><b>Projektprotokollebrowser</b><p>Dies bietet eine Übersicht aller im Projekt enthaltenen Protokolle (protobuf Dateien) an. Verschieden Aktionen können über das Kontextmenü ausgeführt werden.</p></translation> + <location filename="../ProjectProtocolsBrowser.py" line="82" /> + <source><b>Project Protocols Browser</b><p>This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.</p></source> + <translation><b>Projektprotokollebrowser</b><p>Dies bietet eine Übersicht aller im Projekt enthaltenen Protokolle (protobuf Dateien) an. Verschieden Aktionen können über das Kontextmenü ausgeführt werden.</p></translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="96"/> - <source>Protobuf Files ({0})</source> - <translation>Protobuf Dateien ({0})</translation> + <location filename="../ProjectProtocolsBrowser.py" line="96" /> + <source>Protobuf Files ({0})</source> + <translation>Protobuf Dateien ({0})</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="98"/> - <location filename="../ProjectProtocolsBrowser.py" line="97"/> - <source>Protobuf Files</source> - <translation>Protobuf Dateien</translation> + <location filename="../ProjectProtocolsBrowser.py" line="98" /> + <location filename="../ProjectProtocolsBrowser.py" line="97" /> + <source>Protobuf Files</source> + <translation>Protobuf Dateien</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="108"/> - <source>Protocols (protobuf) Browser</source> - <translation>Protokollebrowser (protobuf)</translation> + <location filename="../ProjectProtocolsBrowser.py" line="108" /> + <source>Protocols (protobuf) Browser</source> + <translation>Protokollebrowser (protobuf)</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="236"/> - <location filename="../ProjectProtocolsBrowser.py" line="188"/> - <source>Compile protocol</source> - <translation>Protokoll übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="236" /> + <location filename="../ProjectProtocolsBrowser.py" line="188" /> + <source>Compile protocol</source> + <translation>Protokoll übersetzen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="357"/> - <location filename="../ProjectProtocolsBrowser.py" line="325"/> - <location filename="../ProjectProtocolsBrowser.py" line="266"/> - <location filename="../ProjectProtocolsBrowser.py" line="238"/> - <location filename="../ProjectProtocolsBrowser.py" line="190"/> - <source>Compile all protocols</source> - <translation>Alle Protokolle übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="357" /> + <location filename="../ProjectProtocolsBrowser.py" line="325" /> + <location filename="../ProjectProtocolsBrowser.py" line="266" /> + <location filename="../ProjectProtocolsBrowser.py" line="238" /> + <location filename="../ProjectProtocolsBrowser.py" line="190" /> + <source>Compile all protocols</source> + <translation>Alle Protokolle übersetzen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="242"/> - <location filename="../ProjectProtocolsBrowser.py" line="194"/> - <source>Compile protocol as gRPC</source> - <translation>Protokoll als gRPC übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="242" /> + <location filename="../ProjectProtocolsBrowser.py" line="194" /> + <source>Compile protocol as gRPC</source> + <translation>Protokoll als gRPC übersetzen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="361"/> - <location filename="../ProjectProtocolsBrowser.py" line="329"/> - <location filename="../ProjectProtocolsBrowser.py" line="270"/> - <location filename="../ProjectProtocolsBrowser.py" line="246"/> - <location filename="../ProjectProtocolsBrowser.py" line="198"/> - <source>Compile all protocols as gRPC</source> - <translation>Alle Protokolle als gRPC übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="361" /> + <location filename="../ProjectProtocolsBrowser.py" line="329" /> + <location filename="../ProjectProtocolsBrowser.py" line="270" /> + <location filename="../ProjectProtocolsBrowser.py" line="246" /> + <location filename="../ProjectProtocolsBrowser.py" line="198" /> + <source>Compile all protocols as gRPC</source> + <translation>Alle Protokolle als gRPC übersetzen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="305"/> - <location filename="../ProjectProtocolsBrowser.py" line="250"/> - <location filename="../ProjectProtocolsBrowser.py" line="202"/> - <source>Open</source> - <translation>Öffnen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="305" /> + <location filename="../ProjectProtocolsBrowser.py" line="250" /> + <location filename="../ProjectProtocolsBrowser.py" line="202" /> + <source>Open</source> + <translation>Öffnen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="204"/> - <source>Rename file</source> - <translation>Datei umbenennen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="204" /> + <source>Rename file</source> + <translation>Datei umbenennen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="332"/> - <location filename="../ProjectProtocolsBrowser.py" line="307"/> - <location filename="../ProjectProtocolsBrowser.py" line="207"/> - <source>Remove from project</source> - <translation>Aus dem Projekt entfernen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="332" /> + <location filename="../ProjectProtocolsBrowser.py" line="307" /> + <location filename="../ProjectProtocolsBrowser.py" line="207" /> + <source>Remove from project</source> + <translation>Aus dem Projekt entfernen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="334"/> - <location filename="../ProjectProtocolsBrowser.py" line="309"/> - <location filename="../ProjectProtocolsBrowser.py" line="210"/> - <source>Delete</source> - <translation>Löschen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="334" /> + <location filename="../ProjectProtocolsBrowser.py" line="309" /> + <location filename="../ProjectProtocolsBrowser.py" line="210" /> + <source>Delete</source> + <translation>Löschen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="365"/> - <location filename="../ProjectProtocolsBrowser.py" line="337"/> - <location filename="../ProjectProtocolsBrowser.py" line="275"/> - <location filename="../ProjectProtocolsBrowser.py" line="252"/> - <location filename="../ProjectProtocolsBrowser.py" line="213"/> - <source>Add protocols...</source> - <translation>Protokolle hinzufügen...</translation> + <location filename="../ProjectProtocolsBrowser.py" line="365" /> + <location filename="../ProjectProtocolsBrowser.py" line="337" /> + <location filename="../ProjectProtocolsBrowser.py" line="275" /> + <location filename="../ProjectProtocolsBrowser.py" line="252" /> + <location filename="../ProjectProtocolsBrowser.py" line="213" /> + <source>Add protocols...</source> + <translation>Protokolle hinzufügen...</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="368"/> - <location filename="../ProjectProtocolsBrowser.py" line="339"/> - <location filename="../ProjectProtocolsBrowser.py" line="278"/> - <location filename="../ProjectProtocolsBrowser.py" line="254"/> - <location filename="../ProjectProtocolsBrowser.py" line="215"/> - <source>Add protocols directory...</source> - <translation>Protokolleverzeichnis hinzufügen...</translation> + <location filename="../ProjectProtocolsBrowser.py" line="368" /> + <location filename="../ProjectProtocolsBrowser.py" line="339" /> + <location filename="../ProjectProtocolsBrowser.py" line="278" /> + <location filename="../ProjectProtocolsBrowser.py" line="254" /> + <location filename="../ProjectProtocolsBrowser.py" line="215" /> + <source>Add protocols directory...</source> + <translation>Protokolleverzeichnis hinzufügen...</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="342"/> - <location filename="../ProjectProtocolsBrowser.py" line="219"/> - <source>Copy Path to Clipboard</source> - <translation>Pfad in die Zwischenablage kopieren</translation> + <location filename="../ProjectProtocolsBrowser.py" line="342" /> + <location filename="../ProjectProtocolsBrowser.py" line="219" /> + <source>Copy Path to Clipboard</source> + <translation>Pfad in die Zwischenablage kopieren</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="373"/> - <location filename="../ProjectProtocolsBrowser.py" line="344"/> - <location filename="../ProjectProtocolsBrowser.py" line="312"/> - <location filename="../ProjectProtocolsBrowser.py" line="282"/> - <location filename="../ProjectProtocolsBrowser.py" line="257"/> - <location filename="../ProjectProtocolsBrowser.py" line="223"/> - <source>Expand all directories</source> - <translation>Alle Verzeichnisse aufklappen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="373" /> + <location filename="../ProjectProtocolsBrowser.py" line="344" /> + <location filename="../ProjectProtocolsBrowser.py" line="312" /> + <location filename="../ProjectProtocolsBrowser.py" line="282" /> + <location filename="../ProjectProtocolsBrowser.py" line="257" /> + <location filename="../ProjectProtocolsBrowser.py" line="223" /> + <source>Expand all directories</source> + <translation>Alle Verzeichnisse aufklappen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="376"/> - <location filename="../ProjectProtocolsBrowser.py" line="346"/> - <location filename="../ProjectProtocolsBrowser.py" line="314"/> - <location filename="../ProjectProtocolsBrowser.py" line="284"/> - <location filename="../ProjectProtocolsBrowser.py" line="258"/> - <location filename="../ProjectProtocolsBrowser.py" line="226"/> - <source>Collapse all directories</source> - <translation>Alle Verzeichnisse einklappen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="376" /> + <location filename="../ProjectProtocolsBrowser.py" line="346" /> + <location filename="../ProjectProtocolsBrowser.py" line="314" /> + <location filename="../ProjectProtocolsBrowser.py" line="284" /> + <location filename="../ProjectProtocolsBrowser.py" line="258" /> + <location filename="../ProjectProtocolsBrowser.py" line="226" /> + <source>Collapse all directories</source> + <translation>Alle Verzeichnisse einklappen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="379"/> - <location filename="../ProjectProtocolsBrowser.py" line="348"/> - <location filename="../ProjectProtocolsBrowser.py" line="316"/> - <location filename="../ProjectProtocolsBrowser.py" line="286"/> - <location filename="../ProjectProtocolsBrowser.py" line="259"/> - <location filename="../ProjectProtocolsBrowser.py" line="228"/> - <source>Collapse all files</source> - <translation>Alle Dateien einklappen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="379" /> + <location filename="../ProjectProtocolsBrowser.py" line="348" /> + <location filename="../ProjectProtocolsBrowser.py" line="316" /> + <location filename="../ProjectProtocolsBrowser.py" line="286" /> + <location filename="../ProjectProtocolsBrowser.py" line="259" /> + <location filename="../ProjectProtocolsBrowser.py" line="228" /> + <source>Collapse all files</source> + <translation>Alle Dateien einklappen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="382"/> - <location filename="../ProjectProtocolsBrowser.py" line="350"/> - <location filename="../ProjectProtocolsBrowser.py" line="318"/> - <location filename="../ProjectProtocolsBrowser.py" line="288"/> - <location filename="../ProjectProtocolsBrowser.py" line="261"/> - <location filename="../ProjectProtocolsBrowser.py" line="230"/> - <source>Configure...</source> - <translation>Einstellungen...</translation> + <location filename="../ProjectProtocolsBrowser.py" line="382" /> + <location filename="../ProjectProtocolsBrowser.py" line="350" /> + <location filename="../ProjectProtocolsBrowser.py" line="318" /> + <location filename="../ProjectProtocolsBrowser.py" line="288" /> + <location filename="../ProjectProtocolsBrowser.py" line="261" /> + <location filename="../ProjectProtocolsBrowser.py" line="230" /> + <source>Configure...</source> + <translation>Einstellungen...</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="384"/> - <location filename="../ProjectProtocolsBrowser.py" line="352"/> - <location filename="../ProjectProtocolsBrowser.py" line="320"/> - <location filename="../ProjectProtocolsBrowser.py" line="290"/> - <location filename="../ProjectProtocolsBrowser.py" line="262"/> - <location filename="../ProjectProtocolsBrowser.py" line="232"/> - <source>Configure Protobuf...</source> - <translation>Protobuf-Einstellungen...</translation> + <location filename="../ProjectProtocolsBrowser.py" line="384" /> + <location filename="../ProjectProtocolsBrowser.py" line="352" /> + <location filename="../ProjectProtocolsBrowser.py" line="320" /> + <location filename="../ProjectProtocolsBrowser.py" line="290" /> + <location filename="../ProjectProtocolsBrowser.py" line="262" /> + <location filename="../ProjectProtocolsBrowser.py" line="232" /> + <source>Configure Protobuf...</source> + <translation>Protobuf-Einstellungen...</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="297"/> - <source>Compile protocols</source> - <translation>Protokolle übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="297" /> + <source>Compile protocols</source> + <translation>Protokolle übersetzen</translation> + </message> + <message> + <location filename="../ProjectProtocolsBrowser.py" line="301" /> + <source>Compile protocols as gRPC</source> + <translation>Protokolle als gRPC übersetzen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="301"/> - <source>Compile protocols as gRPC</source> - <translation>Protokolle als gRPC übersetzen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="571" /> + <source>Delete Protocols</source> + <translation>Protokolle löschen</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="571"/> - <source>Delete Protocols</source> - <translation>Protokolle löschen</translation> + <location filename="../ProjectProtocolsBrowser.py" line="572" /> + <source>Do you really want to delete these protocol files from the project?</source> + <translation>Wollen Sie wirklich diese Protokolldateien aus dem Projekt löschen?</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="572"/> - <source>Do you really want to delete these protocol files from the project?</source> - <translation>Wollen Sie wirklich diese Protokolldateien aus dem Projekt löschen?</translation> + <location filename="../ProjectProtocolsBrowser.py" line="688" /> + <location filename="../ProjectProtocolsBrowser.py" line="674" /> + <source>Protocol Compilation</source> + <translation>Protokollübersetzung</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="688"/> - <location filename="../ProjectProtocolsBrowser.py" line="674"/> - <source>Protocol Compilation</source> - <translation>Protokollübersetzung</translation> + <location filename="../ProjectProtocolsBrowser.py" line="675" /> + <source>The compilation of the protocol file was successful.</source> + <translation>Die Übersetzung der Protokolldatei war erfolgreich.</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="675"/> - <source>The compilation of the protocol file was successful.</source> - <translation>Die Übersetzung der Protokolldatei war erfolgreich.</translation> + <location filename="../ProjectProtocolsBrowser.py" line="689" /> + <source>The compilation of the protocol file failed.</source> + <translation>Die Übersetzung der Protokolldatei ist fehlgeschlagen.</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="689"/> - <source>The compilation of the protocol file failed.</source> - <translation>Die Übersetzung der Protokolldatei ist fehlgeschlagen.</translation> + <location filename="../ProjectProtocolsBrowser.py" line="743" /> + <source>Process Generation Error</source> + <translation>Fehler beim Prozessstart</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="743"/> - <source>Process Generation Error</source> - <translation>Fehler beim Prozessstart</translation> + <location filename="../ProjectProtocolsBrowser.py" line="744" /> + <source><p>Could not start {0}.<br>Ensure that it is in the search path.</p></source> + <translation><p>{0} konnte nicht gestartet werden.<br>Stellen Sie sicher, dass es über den Suchpfad verfügbar ist.</p></translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="744"/> - <source><p>Could not start {0}.<br>Ensure that it is in the search path.</p></source> - <translation><p>{0} konnte nicht gestartet werden.<br>Stellen Sie sicher, dass es über den Suchpfad verfügbar ist.</p></translation> + <location filename="../ProjectProtocolsBrowser.py" line="753" /> + <source>Compiler Invalid</source> + <translation>Compiler ungültig</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="753"/> - <source>Compiler Invalid</source> - <translation>Compiler ungültig</translation> + <location filename="../ProjectProtocolsBrowser.py" line="754" /> + <source>The configured compiler is invalid.</source> + <translation>Der konfigurierte Compiler ist ungültig.</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="754"/> - <source>The configured compiler is invalid.</source> - <translation>Der konfigurierte Compiler ist ungültig.</translation> + <location filename="../ProjectProtocolsBrowser.py" line="818" /> + <location filename="../ProjectProtocolsBrowser.py" line="781" /> + <source>Compiling Protocols...</source> + <translation>Protokolle übersetzen...</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="818"/> - <location filename="../ProjectProtocolsBrowser.py" line="781"/> - <source>Compiling Protocols...</source> - <translation>Protokolle übersetzen...</translation> + <location filename="../ProjectProtocolsBrowser.py" line="819" /> + <location filename="../ProjectProtocolsBrowser.py" line="782" /> + <source>Abort</source> + <translation>Abbruch</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="819"/> - <location filename="../ProjectProtocolsBrowser.py" line="782"/> - <source>Abort</source> - <translation>Abbruch</translation> - </message> - <message> - <location filename="../ProjectProtocolsBrowser.py" line="822"/> - <location filename="../ProjectProtocolsBrowser.py" line="785"/> - <source>%v/%m Protocols</source> - <translation>%v/%m Protokolle</translation> + <location filename="../ProjectProtocolsBrowser.py" line="822" /> + <location filename="../ProjectProtocolsBrowser.py" line="785" /> + <source>%v/%m Protocols</source> + <translation>%v/%m Protokolle</translation> </message> <message> - <location filename="../ProjectProtocolsBrowser.py" line="827"/> - <location filename="../ProjectProtocolsBrowser.py" line="790"/> - <source>Protocols</source> - <translation>Protokolle</translation> + <location filename="../ProjectProtocolsBrowser.py" line="827" /> + <location filename="../ProjectProtocolsBrowser.py" line="790" /> + <source>Protocols</source> + <translation>Protokolle</translation> </message> -</context> -<context> + </context> + <context> <name>ProtobufExtensionPlugin</name> <message> - <location filename="../../PluginExtensionProtobuf.py" line="73"/> - <location filename="../../PluginExtensionProtobuf.py" line="55"/> - <source>Protobuf Compiler</source> - <translation>Protobuf Compiler</translation> + <location filename="../../PluginExtensionProtobuf.py" line="74" /> + <location filename="../../PluginExtensionProtobuf.py" line="56" /> + <source>Protobuf Compiler</source> + <translation>Protobuf Compiler</translation> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="94" /> + <location filename="../../PluginExtensionProtobuf.py" line="59" /> + <source>Protobuf and gRPC Support plugin is not activated</source> + <translation>Das Protobuf und gRPC Plugin ist nicht aktiviert</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="93"/> - <location filename="../../PluginExtensionProtobuf.py" line="58"/> - <source>Protobuf and gRPC Support plugin is not activated</source> - <translation>Das Protobuf und gRPC Plugin ist nicht aktiviert</translation> + <location filename="../../PluginExtensionProtobuf.py" line="98" /> + <location filename="../../PluginExtensionProtobuf.py" line="63" /> + <source>(inactive)</source> + <translation>(inaktiv)</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="97"/> - <location filename="../../PluginExtensionProtobuf.py" line="62"/> - <source>(inactive)</source> - <translation>(inaktiv)</translation> - </message> - <message> - <location filename="../../PluginExtensionProtobuf.py" line="111"/> - <location filename="../../PluginExtensionProtobuf.py" line="90"/> - <source>gRPC Compiler</source> - <translation>gRPC Compiler</translation> + <location filename="../../PluginExtensionProtobuf.py" line="112" /> + <location filename="../../PluginExtensionProtobuf.py" line="91" /> + <source>gRPC Compiler</source> + <translation>gRPC Compiler</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="136"/> - <source>Protobuf and gRPC</source> - <translation>Protobuf und gRPC</translation> + <location filename="../../PluginExtensionProtobuf.py" line="137" /> + <source>Protobuf and gRPC</source> + <translation>Protobuf und gRPC</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="225"/> - <source>Protobuf and gRPC Extension</source> - <translation>Protobuf und gRPC Erweiterung</translation> + <location filename="../../PluginExtensionProtobuf.py" line="227" /> + <source>Protocol Buffer (protobuf)</source> + <translation>Protokoll-Puffer (protobuf)</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="231"/> - <location filename="../../PluginExtensionProtobuf.py" line="226"/> - <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> - <translation>Die Protobuf und gRPC Erweiterung kann nicht aktiviert werden, da sie eric7 23.1 oder neuer benötigt.</translation> + <location filename="../../PluginExtensionProtobuf.py" line="231" /> + <location filename="../../PluginExtensionProtobuf.py" line="230" /> + <source>Protocol Buffer Files (*.proto)</source> + <translation>Protokoll-Puffer Dateien (*.proto)</translation> </message> -</context> -<context> - <name>ProtobufPage</name> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source><b>Configure Protobuf support</b></source> - <translation><b>Protobuf-Unterstützung einstellen</b></translation> + <location filename="../../PluginExtensionProtobuf.py" line="248" /> + <source>Protobuf and gRPC Extension</source> + <translation>Protobuf und gRPC Erweiterung</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source>Protobuf Compiler</source> - <translation>Protobuf Compiler</translation> + <location filename="../../PluginExtensionProtobuf.py" line="254" /> + <location filename="../../PluginExtensionProtobuf.py" line="249" /> + <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> + <translation>Die Protobuf und gRPC Erweiterung kann nicht aktiviert werden, da sie eric7 23.1 oder neuer benötigt.</translation> + </message> + </context> + <context> + <name>ProtobufPage</name> + <message> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source><b>Configure Protobuf support</b></source> + <translation><b>Protobuf-Unterstützung einstellen</b></translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source>Enter the path to the protobuf compiler.</source> - <translation>Gib den Pfad zum protobuf-Compiler ein.</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source>Protobuf Compiler</source> + <translation>Protobuf Compiler</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source><b>Note:</b> Leave this entry empty to use the default value (protoc or protoc.exe).</source> - <translation><b>Hinweis:</b> Lasse diesen Eintrag leer, um den Standardwert (protoc bzw. protoc.exe) zu verwenden.</translation> - </message> - <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source>gRPC Compiler</source> - <translation>gRPC Compiler</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source>Enter the path to the protobuf compiler.</source> + <translation>Gib den Pfad zum protobuf-Compiler ein.</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source>Select the virtual environment containing the gRPC compiler.</source> - <translation>Wähle die Virtuelle Unmgebung, die den gRPC Compiler enthält, aus.</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source><b>Note:</b> Leave this entry empty to use the default value (protoc or protoc.exe).</source> + <translation><b>Hinweis:</b> Lasse diesen Eintrag leer, um den Standardwert (protoc bzw. protoc.exe) zu verwenden.</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source>Press to refresh the list of vitual environments.</source> - <translation>Drücken, um die Liste der Virtuellen Umgebungen zu aktualisieren.</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source>gRPC Compiler</source> + <translation>gRPC Compiler</translation> + </message> + <message> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source>Select the virtual environment containing the gRPC compiler.</source> + <translation>Wähle die Virtuelle Unmgebung, die den gRPC Compiler enthält, aus.</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.ui" line="0"/> - <source><b>Note:</b> Leave this entry empty to use the virtual environment used by the eric IDE.</source> - <translation><b>Hinweis:</b> Diesen Eintrag leer lassen, um die von der eric IDE genutzte Virtuelle Umgebung zu verwenden.</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source>Press to refresh the list of vitual environments.</source> + <translation>Drücken, um die Liste der Virtuellen Umgebungen zu aktualisieren.</translation> </message> <message> - <location filename="../ConfigurationPage/ProtobufPage.py" line="42"/> - <source>Press to select the Protobuf compiler via a file selection dialog.</source> - <translation>Den Protobuf-Compiler mittels eines Dateiauswahldialoges wählen.</translation> + <location filename="../ConfigurationPage/ProtobufPage.ui" line="0" /> + <source><b>Note:</b> Leave this entry empty to use the virtual environment used by the eric IDE.</source> + <translation><b>Hinweis:</b> Diesen Eintrag leer lassen, um die von der eric IDE genutzte Virtuelle Umgebung zu verwenden.</translation> </message> -</context> + <message> + <location filename="../ConfigurationPage/ProtobufPage.py" line="42" /> + <source>Press to select the Protobuf compiler via a file selection dialog.</source> + <translation>Den Protobuf-Compiler mittels eines Dateiauswahldialoges wählen.</translation> + </message> + </context> </TS>
--- a/ExtensionProtobuf/i18n/protobuf_empty.ts Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/i18n/protobuf_empty.ts Mon Dec 12 16:55:43 2022 +0100 @@ -243,42 +243,53 @@ <context> <name>ProtobufExtensionPlugin</name> <message> - <location filename="../../PluginExtensionProtobuf.py" line="73" /> - <location filename="../../PluginExtensionProtobuf.py" line="55" /> + <location filename="../../PluginExtensionProtobuf.py" line="74" /> + <location filename="../../PluginExtensionProtobuf.py" line="56" /> <source>Protobuf Compiler</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="93" /> - <location filename="../../PluginExtensionProtobuf.py" line="58" /> + <location filename="../../PluginExtensionProtobuf.py" line="94" /> + <location filename="../../PluginExtensionProtobuf.py" line="59" /> <source>Protobuf and gRPC Support plugin is not activated</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="97" /> - <location filename="../../PluginExtensionProtobuf.py" line="62" /> + <location filename="../../PluginExtensionProtobuf.py" line="98" /> + <location filename="../../PluginExtensionProtobuf.py" line="63" /> <source>(inactive)</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="111" /> - <location filename="../../PluginExtensionProtobuf.py" line="90" /> + <location filename="../../PluginExtensionProtobuf.py" line="112" /> + <location filename="../../PluginExtensionProtobuf.py" line="91" /> <source>gRPC Compiler</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="136" /> + <location filename="../../PluginExtensionProtobuf.py" line="137" /> <source>Protobuf and gRPC</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="225" /> + <location filename="../../PluginExtensionProtobuf.py" line="227" /> + <source>Protocol Buffer (protobuf)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="231" /> + <location filename="../../PluginExtensionProtobuf.py" line="230" /> + <source>Protocol Buffer Files (*.proto)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="248" /> <source>Protobuf and gRPC Extension</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="231" /> - <location filename="../../PluginExtensionProtobuf.py" line="226" /> + <location filename="../../PluginExtensionProtobuf.py" line="254" /> + <location filename="../../PluginExtensionProtobuf.py" line="249" /> <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> <translation type="unfinished" /> </message>
--- a/ExtensionProtobuf/i18n/protobuf_en.ts Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/i18n/protobuf_en.ts Mon Dec 12 16:55:43 2022 +0100 @@ -243,42 +243,53 @@ <context> <name>ProtobufExtensionPlugin</name> <message> - <location filename="../../PluginExtensionProtobuf.py" line="73" /> - <location filename="../../PluginExtensionProtobuf.py" line="55" /> + <location filename="../../PluginExtensionProtobuf.py" line="74" /> + <location filename="../../PluginExtensionProtobuf.py" line="56" /> <source>Protobuf Compiler</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="93" /> - <location filename="../../PluginExtensionProtobuf.py" line="58" /> + <location filename="../../PluginExtensionProtobuf.py" line="94" /> + <location filename="../../PluginExtensionProtobuf.py" line="59" /> <source>Protobuf and gRPC Support plugin is not activated</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="97" /> - <location filename="../../PluginExtensionProtobuf.py" line="62" /> + <location filename="../../PluginExtensionProtobuf.py" line="98" /> + <location filename="../../PluginExtensionProtobuf.py" line="63" /> <source>(inactive)</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="111" /> - <location filename="../../PluginExtensionProtobuf.py" line="90" /> + <location filename="../../PluginExtensionProtobuf.py" line="112" /> + <location filename="../../PluginExtensionProtobuf.py" line="91" /> <source>gRPC Compiler</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="136" /> + <location filename="../../PluginExtensionProtobuf.py" line="137" /> <source>Protobuf and gRPC</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="225" /> + <location filename="../../PluginExtensionProtobuf.py" line="227" /> + <source>Protocol Buffer (protobuf)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="231" /> + <location filename="../../PluginExtensionProtobuf.py" line="230" /> + <source>Protocol Buffer Files (*.proto)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="248" /> <source>Protobuf and gRPC Extension</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="231" /> - <location filename="../../PluginExtensionProtobuf.py" line="226" /> + <location filename="../../PluginExtensionProtobuf.py" line="254" /> + <location filename="../../PluginExtensionProtobuf.py" line="249" /> <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> <translation type="unfinished" /> </message>
--- a/ExtensionProtobuf/i18n/protobuf_es.ts Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/i18n/protobuf_es.ts Mon Dec 12 16:55:43 2022 +0100 @@ -47334,42 +47334,53 @@ <context> <name>ProtobufExtensionPlugin</name> <message> - <location filename="../../PluginExtensionProtobuf.py" line="73" /> - <location filename="../../PluginExtensionProtobuf.py" line="55" /> + <location filename="../../PluginExtensionProtobuf.py" line="74" /> + <location filename="../../PluginExtensionProtobuf.py" line="56" /> <source>Protobuf Compiler</source> <translation type="unfinished">Compilador de Protobuf</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="93" /> - <location filename="../../PluginExtensionProtobuf.py" line="58" /> + <location filename="../../PluginExtensionProtobuf.py" line="94" /> + <location filename="../../PluginExtensionProtobuf.py" line="59" /> <source>Protobuf and gRPC Support plugin is not activated</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="97" /> - <location filename="../../PluginExtensionProtobuf.py" line="62" /> + <location filename="../../PluginExtensionProtobuf.py" line="98" /> + <location filename="../../PluginExtensionProtobuf.py" line="63" /> <source>(inactive)</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="111" /> - <location filename="../../PluginExtensionProtobuf.py" line="90" /> + <location filename="../../PluginExtensionProtobuf.py" line="112" /> + <location filename="../../PluginExtensionProtobuf.py" line="91" /> <source>gRPC Compiler</source> <translation type="unfinished">Compilador gRPC</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="136" /> + <location filename="../../PluginExtensionProtobuf.py" line="137" /> <source>Protobuf and gRPC</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="225" /> - <source>Protobuf and gRPC Extension</source> - <translation type="unfinished" /> + <location filename="../../PluginExtensionProtobuf.py" line="227" /> + <source>Protocol Buffer (protobuf)</source> + <translation type="unfinished">Buffer de Protocolo (protobuf)</translation> </message> <message> <location filename="../../PluginExtensionProtobuf.py" line="231" /> - <location filename="../../PluginExtensionProtobuf.py" line="226" /> + <location filename="../../PluginExtensionProtobuf.py" line="230" /> + <source>Protocol Buffer Files (*.proto)</source> + <translation type="unfinished">Archivos de Buffer de Protocolo (*.proto)</translation> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="248" /> + <source>Protobuf and gRPC Extension</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="254" /> + <location filename="../../PluginExtensionProtobuf.py" line="249" /> <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> <translation type="unfinished" /> </message>
--- a/ExtensionProtobuf/i18n/protobuf_ru.ts Sun Dec 11 11:52:17 2022 +0100 +++ b/ExtensionProtobuf/i18n/protobuf_ru.ts Mon Dec 12 16:55:43 2022 +0100 @@ -243,42 +243,53 @@ <context> <name>ProtobufExtensionPlugin</name> <message> - <location filename="../../PluginExtensionProtobuf.py" line="73" /> - <location filename="../../PluginExtensionProtobuf.py" line="55" /> + <location filename="../../PluginExtensionProtobuf.py" line="74" /> + <location filename="../../PluginExtensionProtobuf.py" line="56" /> <source>Protobuf Compiler</source> <translation>Компилятор Protobuf</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="93" /> - <location filename="../../PluginExtensionProtobuf.py" line="58" /> + <location filename="../../PluginExtensionProtobuf.py" line="94" /> + <location filename="../../PluginExtensionProtobuf.py" line="59" /> <source>Protobuf and gRPC Support plugin is not activated</source> <translation>Плагин поддержки Protobuf и gRPC не активирован</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="97" /> - <location filename="../../PluginExtensionProtobuf.py" line="62" /> + <location filename="../../PluginExtensionProtobuf.py" line="98" /> + <location filename="../../PluginExtensionProtobuf.py" line="63" /> <source>(inactive)</source> <translation>(неактивен)</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="111" /> - <location filename="../../PluginExtensionProtobuf.py" line="90" /> + <location filename="../../PluginExtensionProtobuf.py" line="112" /> + <location filename="../../PluginExtensionProtobuf.py" line="91" /> <source>gRPC Compiler</source> <translation>Компилятор gRPC</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="136" /> + <location filename="../../PluginExtensionProtobuf.py" line="137" /> <source>Protobuf and gRPC</source> <translation>Protobuf и gRPC</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="225" /> + <location filename="../../PluginExtensionProtobuf.py" line="227" /> + <source>Protocol Buffer (protobuf)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="231" /> + <location filename="../../PluginExtensionProtobuf.py" line="230" /> + <source>Protocol Buffer Files (*.proto)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../../PluginExtensionProtobuf.py" line="248" /> <source>Protobuf and gRPC Extension</source> <translation>Расширение Protobuf и gRPC</translation> </message> <message> - <location filename="../../PluginExtensionProtobuf.py" line="231" /> - <location filename="../../PluginExtensionProtobuf.py" line="226" /> + <location filename="../../PluginExtensionProtobuf.py" line="254" /> + <location filename="../../PluginExtensionProtobuf.py" line="249" /> <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source> <translation>Расширение Protobuf и gRPC нельзя активировать, так как для этого требуется eric7 23.1 или новее.</translation> </message>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ExtensionProtobuf/protoclbr.py Mon Dec 12 16:55:43 2022 +0100 @@ -0,0 +1,394 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2022 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Parse a ProtoBuf protocol file and retrieve messages, enums, services and +rpc methods. + +It is based on the Python class browser found in this package. +""" + +import os +import re + +from eric7 import Utilities +from eric7.Utilities.ClassBrowsers import ClbrBaseClasses + +_getnext = re.compile( + r""" + (?P<String> + " [^"\\\n]* (?: \\. [^"\\\n]*)* " + ) + +| (?P<Comment> + ^ [ \t]* // .*? $ + | + ^ [ \t]* /\* .*? \*/ + ) + +| (?P<Message> + ^ + (?P<MessageIndent> [ \t]* ) + message [ \t]+ + (?P<MessageName> [a-zA-Z_] [a-zA-Z0-9_]* ) + [ \t]* { + ) + +| (?P<Enum> + ^ + (?P<EnumIndent> [ \t]* ) + enum [ \t]+ + (?P<EnumName> [a-zA-Z_] [a-zA-Z0-9_]* ) + [ \t]* { + ) + +| (?P<Service> + ^ + (?P<ServiceIndent> [ \t]* ) + service [ \t]+ + (?P<ServiceName> [a-zA-Z_] [a-zA-Z0-9_]* ) + [ \t]* { + ) + +| (?P<Method> + ^ + (?P<MethodIndent> [ \t]* ) + rpc [ \t]+ + (?P<MethodName> [a-zA-Z_] [a-zA-Z0-9_]* ) + [ \t]* + \( + (?P<MethodSignature> [^)]+? ) + \) + [ \t]+ + returns + [ \t]* + \( + (?P<MethodReturn> [^)]+? ) + \) + [ \t]* + ) + +| (?P<Begin> + [ \t]* { + ) + +| (?P<End> + [ \t]* } [ \t]* ;? + )""", + re.VERBOSE | re.DOTALL | re.MULTILINE, +).search + +# function to replace comments +_commentsub = re.compile(r"""//[^\n]*\n|//[^\n]*$""").sub +# function to normalize whitespace +_normalize = re.compile(r"""[ \t]{2,}""").sub + + +class VisibilityMixin(ClbrBaseClasses.ClbrVisibilityMixinBase): + """ + Mixin class implementing the notion of visibility. + """ + + def __init__(self): + """ + Constructor + """ + self.setPublic() + + +class Message(ClbrBaseClasses.Module, VisibilityMixin): + """ + Class to represent a ProtoBuf Message. + """ + + def __init__(self, module, name, file, lineno): + """ + Constructor + + @param module name of the module containing this message + @type str + @param name name of this message + @type str + @param file filename containing this message + @type str + @param lineno linenumber of the message definition + @type int + """ + ClbrBaseClasses.Module.__init__(self, module, name, file, lineno) + VisibilityMixin.__init__(self) + + +class Enum(ClbrBaseClasses.Enum, VisibilityMixin): + """ + Class to represent a ProtoBuf Enum. + """ + + def __init__(self, module, name, file, lineno): + """ + Constructor + + @param module name of the module containing this enum + @type str + @param name name of this enum + @type str + @param file filename containing this enum + @type str + @param lineno linenumber of the message enum + @type int + """ + ClbrBaseClasses.Enum.__init__(self, module, name, file, lineno) + VisibilityMixin.__init__(self) + + +class Service(ClbrBaseClasses.Class, VisibilityMixin): + """ + Class to represent a ProtoBuf Service. + """ + + def __init__(self, module, name, file, lineno): + """ + Constructor + + @param module name of the module containing this service + @type str + @param name name of this service + @type str + @param file filename containing this service + @type str + @param lineno linenumber of the service definition + @type int + """ + ClbrBaseClasses.Class.__init__(self, module, name, None, file, lineno) + VisibilityMixin.__init__(self) + + +class ServiceMethod(ClbrBaseClasses.Function, VisibilityMixin): + """ + Class to represent a ProtoBuf Service Method. + """ + + def __init__(self, name, file, lineno, signature, returns): + """ + Constructor + + @param name name of this service method + @type str + @param file filename containing this service method + @type str + @param lineno linenumber of the service method definition + @type int + @param signature parameter list of the service method + @type str + @param returns return type of the service method + @type str + """ + ClbrBaseClasses.Function.__init__( + self, + None, + name, + file, + lineno, + signature, + annotation="-> {0}".format(returns), + ) + VisibilityMixin.__init__(self) + + +def readmodule_ex(module, path=None): + """ + Read a ProtoBuf protocol file and return a dictionary of messages, enums, + services and rpc methods. + + @param module name of the ProtoBuf protocol file + @type str + @param path path the file should be searched in + @type list of str + @return the resulting dictionary + @rtype dict + """ + path = [] if path is None else path[:] + for p in path: # search in path + pathname = os.path.join(p, module) + if os.path.exists(pathname): + filename = pathname + try: + src = Utilities.readEncodedFile(filename)[0] + except (UnicodeError, OSError): + # can't do anything with this module + return {} + + return scan(src, filename, module) + return {} + + +def scan(src, file, module): + """ + Public method to scan the given source text. + + @param src source text to be scanned + @type str + @param file file name associated with the source text + @type str + @param module module name associated with the source text + @type str + @return dictionary containing the extracted data + @rtype dict + """ + + def calculateEndline(lineno, lines): + """ + Function to calculate the end line. + + @param lineno line number to start at (one based) + @type int + @param lines list of source lines + @type list of str + @return end line (one based) + @rtype int + """ + # convert lineno to be zero based + lineno -= 1 + # 1. search for opening brace '{' + while lineno < len(lines) and "{" not in lines[lineno]: + lineno += 1 + depth = lines[lineno].count("{") - lines[lineno].count("}") + # 2. search for ending line, i.e. matching closing brace '}' + while depth > 0 and lineno < len(lines) - 1: + lineno += 1 + depth += lines[lineno].count("{") - lines[lineno].count("}") + if depth == 0: + # found a matching brace + return lineno + 1 + else: + # nothing found + return -1 + + # convert eol markers the Python style + src = src.replace("\r\n", "\n").replace("\r", "\n") + srcLines = src.splitlines() + + dictionary = {} + + classstack = [] # stack of (class, indent) pairs + indent = 0 + + lineno, last_lineno_pos = 1, 0 + i = 0 + while True: + m = _getnext(src, i) + if not m: + break + start, i = m.span() + + if m.start("Method") >= 0: + # found a method definition or function + thisindent = indent + meth_name = m.group("MethodName") + meth_sig = m.group("MethodSignature") + meth_sig = meth_sig and meth_sig.replace("\\\n", "") or "" + meth_sig = _commentsub("", meth_sig) + meth_sig = _normalize(" ", meth_sig) + meth_return = m.group("MethodReturn") + meth_return = meth_return and meth_return.replace("\\\n", "") or "" + meth_return = _commentsub("", meth_return) + meth_return = _normalize(" ", meth_return) + lineno += src.count("\n", last_lineno_pos, start) + last_lineno_pos = start + # close all interfaces/modules indented at least as much + while classstack and classstack[-1][1] >= thisindent: + del classstack[-1] + if classstack: + # it's an interface/module method + cur_class = classstack[-1][0] + if isinstance(cur_class, Service): + # it's a method + f = ServiceMethod(meth_name, file, lineno, meth_sig, meth_return) + cur_class._addmethod(meth_name, f) + # else it's a nested def + else: + f = None + else: + # the file is incorrect, ignore the entry + continue + if f: + endline = calculateEndline(lineno, srcLines) + f.setEndLine(endline) + classstack.append((f, thisindent)) # Marker for nested fns + + elif m.start("String") >= 0 or m.start("Comment") >= 0: + pass + + elif m.start("Message") >= 0: + # we found a message definition + thisindent = indent + indent += 1 + lineno += src.count("\n", last_lineno_pos, start) + last_lineno_pos = start + message_name = m.group("MessageName") + # close all messages/services indented at least as much + while classstack and classstack[-1][1] >= thisindent: + del classstack[-1] + # remember this message + cur_class = Message(module, message_name, file, lineno) + endline = calculateEndline(lineno, srcLines) + cur_class.setEndLine(endline) + if not classstack: + dictionary[message_name] = cur_class + else: + msg = classstack[-1][0] + msg._addclass(message_name, cur_class) + classstack.append((cur_class, thisindent)) + + elif m.start("Enum") >= 0: + # we found a message definition + thisindent = indent + indent += 1 + # close all messages/services indented at least as much + while classstack and classstack[-1][1] >= thisindent: + del classstack[-1] + lineno += src.count("\n", last_lineno_pos, start) + last_lineno_pos = start + enum_name = m.group("EnumName") + # remember this Enum + cur_class = Enum(module, enum_name, file, lineno) + endline = calculateEndline(lineno, srcLines) + cur_class.setEndLine(endline) + if not classstack: + dictionary[enum_name] = cur_class + else: + enum = classstack[-1][0] + enum._addclass(enum_name, cur_class) + classstack.append((cur_class, thisindent)) + + elif m.start("Service") >= 0: + # we found a message definition + thisindent = indent + indent += 1 + # close all messages/services indented at least as much + while classstack and classstack[-1][1] >= thisindent: + del classstack[-1] + lineno += src.count("\n", last_lineno_pos, start) + last_lineno_pos = start + service_name = m.group("ServiceName") + # remember this Service + cur_class = Service(module, service_name, file, lineno) + endline = calculateEndline(lineno, srcLines) + cur_class.setEndLine(endline) + if not classstack: + dictionary[service_name] = cur_class + else: + service = classstack[-1][0] + service._addclass(service_name, cur_class) + classstack.append((cur_class, thisindent)) + + elif m.start("Begin") >= 0: + # a begin of a block we are not interested in + indent += 1 + + elif m.start("End") >= 0: + # an end of a block + indent -= 1 + + return dictionary
--- a/PKGLIST Sun Dec 11 11:52:17 2022 +0100 +++ b/PKGLIST Mon Dec 12 16:55:43 2022 +0100 @@ -11,4 +11,5 @@ ExtensionProtobuf/icons/gRPC48.svg ExtensionProtobuf/icons/protobuf.svg ExtensionProtobuf/icons/protobuf48.svg +ExtensionProtobuf/protoclbr.py PluginExtensionProtobuf.py
--- a/PluginExtensionProtobuf.py Sun Dec 11 11:52:17 2022 +0100 +++ b/PluginExtensionProtobuf.py Mon Dec 12 16:55:43 2022 +0100 @@ -14,6 +14,7 @@ from eric7 import Globals, Preferences from eric7.EricWidgets import EricMessageBox from eric7.EricWidgets.EricApplication import ericApp +from ExtensionProtobuf import protoclbr from ExtensionProtobuf.ProjectProtocolsBrowser import ProjectProtocolsBrowser # Start-Of-Header @@ -21,7 +22,7 @@ author = "Detlev Offenbach <detlev@die-offenbachs.de>" autoactivate = True deactivateable = True -version = "10.0.2" +version = "10.1.0" className = "ProtobufExtensionPlugin" packageName = "ExtensionProtobuf" shortDescription = "Support for the development of Protobuf and gRPC projects" @@ -210,6 +211,9 @@ @return tuple of None and activation status @rtype bool """ + from eric7.QScintilla import Lexers + from eric7.Utilities import ClassBrowsers + global error, protobufExtensionPluginObject error = "" # clear previous error @@ -218,6 +222,25 @@ self.__browser = ProjectProtocolsBrowser(self) + Lexers.registerLexer( + "Protocol Buffer", + self.tr("Protocol Buffer (protobuf)"), + "dummy.proto", + self.getLexer, + [self.tr("Protocol Buffer Files (*.proto)")], + [self.tr("Protocol Buffer Files (*.proto)")], + ["*.proto"], + os.path.join("ExtensionProtobuf", "icons", "protobuf"), + ) + + ClassBrowsers.registerClassBrowser( + "Protocol Buffer", + protoclbr.readmodule_ex, + protoclbr.scan, + self.getFileIcon, + [".proto"], + ) + return None, True else: EricMessageBox.warning( @@ -239,6 +262,12 @@ """ Public method to deactivate this plug-in. """ + from eric7.QScintilla import Lexers + from eric7.Utilities import ClassBrowsers + + Lexers.unregisterLexer("Protocol Buffer") + ClassBrowsers.registerClassBrowser("Protocol Buffer") + self.__browser.deactivate() self.__initialize() @@ -290,6 +319,34 @@ """ Preferences.Prefs.settings.setValue(self.PreferencesKey + "/" + key, value) + def getLexer(self, parent=None): + """ + Public method to instantiate a Pygments Protocol Buffer lexer object. + + @param parent reference to the parent object + @type QObject + @return reference to the instanciated lexer object + @rtype QsciLexer + """ + from eric7.QScintilla.Lexers.LexerPygments import LexerPygments + + lexer = LexerPygments(parent, name="Protocol Buffer") + if lexer.canStyle(): + return lexer + else: + return None + + def getFileIcon(self, filename=""): + """ + Public method to get the name of a file icon. + + @param filename file name (defaults to "") + @type str (optional) + @return name of a file icon + @rtype str + """ + return os.path.join("ExtensionProtobuf", "icons", "protobuf") + def installDependencies(pipInstall): """
--- a/PluginProtobuf.epj Sun Dec 11 11:52:17 2022 +0100 +++ b/PluginProtobuf.epj Mon Dec 12 16:55:43 2022 +0100 @@ -241,6 +241,7 @@ "PROGLANGUAGE": "Python3", "PROJECTTYPE": "E7Plugin", "PROJECTTYPESPECIFICDATA": {}, + "PROTOCOLS": [], "RCCPARAMS": { "CompressLevel": 0, "CompressionDisable": false, @@ -253,6 +254,7 @@ "ExtensionProtobuf/ConfigurationPage/__init__.py", "ExtensionProtobuf/ProjectProtocolsBrowser.py", "ExtensionProtobuf/__init__.py", + "ExtensionProtobuf/protoclbr.py", "PluginExtensionProtobuf.py", "__init__.py" ],