diff options
3 files changed, 55 insertions, 11 deletions
diff --git a/src/linguist/lupdate/python.cpp b/src/linguist/lupdate/python.cpp index d6a4065f7..d134d3187 100644 --- a/src/linguist/lupdate/python.cpp +++ b/src/linguist/lupdate/python.cpp @@ -70,6 +70,9 @@ static int yyParenDepth; static int yyLineNo; static int yyCurLineNo; +static QByteArray extraComment; +static QByteArray id; + // the file to read from (if reading from a file) static FILE *yyInFile; @@ -267,6 +270,18 @@ static Token parseString() return Tok_String; } +static QByteArray readLine() +{ + QByteArray result; + while (true) { + yyCh = getChar(); + if (yyCh == EOF || yyCh == '\n') + break; + result.append(char(yyCh)); + } + return result; +} + static Token getToken() { yyIdentLen = 0; @@ -337,10 +352,22 @@ static Token getToken() } switch (yyCh) { case '#': - yyCh = getChar(); - do { - yyCh = getChar(); - } while (yyCh != EOF && yyCh != '\n'); + switch (getChar()) { + case ':': + extraComment = readLine().trimmed(); + break; + case '=': + id = readLine().trimmed(); + break; + case EOF: + case '\n': + break; + default: + do { + yyCh = getChar(); + } while (yyCh != EOF && yyCh != '\n'); + break; + } break; case '"': case '\'': @@ -564,6 +591,18 @@ static bool parseTranslate(QByteArray *text, QByteArray *context, QByteArray *co return true; } +static inline void setMessageParameters(TranslatorMessage *message) +{ + if (!extraComment.isEmpty()) { + message->setExtraComment(QString::fromUtf8(extraComment)); + extraComment.clear(); + } + if (!id.isEmpty()) { + message->setId(QString::fromUtf8(id)); + id.clear(); + } +} + static void parse(Translator &tor, ConversionData &cd, const QByteArray &initialContext = {}, const QByteArray &defaultContext = {}) @@ -627,6 +666,7 @@ static void parse(Translator &tor, ConversionData &cd, QString::fromUtf8(comment), {}, yyFileName, yyLineNo, {}, TranslatorMessage::Unfinished, plural); + setMessageParameters(&message); tor.extend(message, cd); } } @@ -640,6 +680,7 @@ static void parse(Translator &tor, ConversionData &cd, QString::fromUtf8(comment), {}, yyFileName, yyLineNo, {}, TranslatorMessage::Unfinished, plural); + setMessageParameters(&message); tor.extend(message, cd); } } diff --git a/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py b/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py index 0e6b60c5b..ec7ecf552 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py +++ b/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py @@ -13,7 +13,9 @@ import linguist_rc class Window(QMainWindow): def __init__(self): super().__init__() + #: File menu file_menu = self.menuBar().addMenu(self.tr("&File")) + #= quit_id quit_action = file_menu.addAction(self.tr("Quit")) quit_action.setShortcut(self.tr("CTRL+Q")) quit_action.triggered.connect(self.close) diff --git a/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result index ef3ecaeca..629b0a72b 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result @@ -4,32 +4,33 @@ <context> <name>Window</name> <message> - <location filename="main.py" line="16"/> + <location filename="main.py" line="17"/> <source>&File</source> + <extracomment>File menu</extracomment> <translation type="unfinished"></translation> </message> - <message> - <location filename="main.py" line="17"/> + <message id="quit_id"> + <location filename="main.py" line="19"/> <source>Quit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="main.py" line="18"/> + <location filename="main.py" line="20"/> <source>CTRL+Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="main.py" line="20"/> + <location filename="main.py" line="22"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> - <location filename="main.py" line="21"/> + <location filename="main.py" line="23"/> <source>About Qt</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="main.py" line="35"/> + <location filename="main.py" line="37"/> <source>%n language(s) selected</source> <translation type="unfinished"> <numerusform></numerusform> |