This list is closed, nobody may subscribe to it.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(13) |
Nov
(40) |
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(17) |
Mar
(25) |
Apr
(144) |
May
(18) |
Jun
|
Jul
(1) |
Aug
|
Sep
(130) |
Oct
(134) |
Nov
(72) |
Dec
(14) |
2006 |
Jan
|
Feb
(17) |
Mar
(90) |
Apr
(169) |
May
(21) |
Jun
(16) |
Jul
(1) |
Aug
(16) |
Sep
(125) |
Oct
(131) |
Nov
(64) |
Dec
(47) |
2007 |
Jan
(249) |
Feb
(247) |
Mar
(254) |
Apr
(86) |
May
(64) |
Jun
(10) |
Jul
(4) |
Aug
(17) |
Sep
(58) |
Oct
(144) |
Nov
(124) |
Dec
(13) |
2008 |
Jan
(58) |
Feb
|
Mar
(5) |
Apr
(19) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(24) |
Dec
|
2009 |
Jan
(1) |
Feb
(10) |
Mar
(29) |
Apr
(14) |
May
(62) |
Jun
(48) |
Jul
(27) |
Aug
(43) |
Sep
(44) |
Oct
(34) |
Nov
(10) |
Dec
(10) |
2010 |
Jan
(1) |
Feb
(26) |
Mar
(53) |
Apr
(41) |
May
(19) |
Jun
(52) |
Jul
(36) |
Aug
(24) |
Sep
(114) |
Oct
(73) |
Nov
(48) |
Dec
(139) |
2011 |
Jan
(54) |
Feb
(48) |
Mar
(45) |
Apr
(32) |
May
(121) |
Jun
(46) |
Jul
(3) |
Aug
(19) |
Sep
(146) |
Oct
(142) |
Nov
(48) |
Dec
(77) |
2012 |
Jan
(17) |
Feb
(5) |
Mar
(39) |
Apr
(31) |
May
(37) |
Jun
(7) |
Jul
|
Aug
(23) |
Sep
(40) |
Oct
(68) |
Nov
(68) |
Dec
(13) |
2013 |
Jan
(32) |
Feb
(47) |
Mar
(86) |
Apr
(82) |
May
(23) |
Jun
(1) |
Jul
(3) |
Aug
(1) |
Sep
|
Oct
(4) |
Nov
(3) |
Dec
(3) |
2014 |
Jan
|
Feb
|
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(1) |
Jul
|
Aug
(2) |
Sep
(65) |
Oct
(119) |
Nov
(82) |
Dec
(84) |
2015 |
Jan
(94) |
Feb
(46) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
2016 |
Jan
(4) |
Feb
(4) |
Mar
(2) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(3) |
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
From: Thomas F. <tho...@ru...> - 2014-12-09 18:45:20
|
Git commit b61ed835cadf3674d388c74e5134e3ef8a48710d by Thomas Friedrichsmeier. Committed on 09/12/2014 at 18:10. Pushed by tfry into branch 'master'. Add FAQ item on missing menus. M +5 -0 rkward/pages/rkward_trouble_shooting.rkh http://commits.kde.org/rkward/b61ed835cadf3674d388c74e5134e3ef8a48710d diff --git a/rkward/pages/rkward_trouble_shooting.rkh b/rkward/pages/rkward_trouble_shooting.rkh index bfbf61a..f846ba3 100644 --- a/rkward/pages/rkward_trouble_shooting.rkh +++ b/rkward/pages/rkward_trouble_shooting.rkh @@ -4,6 +4,11 @@ <summary> RKWard is far from complete and certainly there are many issues that need to be fixed. However, some of the things you notice are not due to the nature of RKWard but R or something else. This section will try to cover some common issues. See also <link href="http://p.sf.net/rkward/faq">the online FAQ</link>. </summary> + <section title="The "Analysis" menu is missing, or shows up as "(no label)"" shorttitle="Missing menu items" id="missing_menu_items"> + This problem will often occur, when moving an RKWard installation to a different path, esp. on Windows and Mac. You may have to visit + Settings->Configure RKWard->Plugins and re-add the relevant ".pluginmap"-files. Starting with version 0.6.3, RKWard should detect + a changed installation path, and adjust paths, automatically. + </section> <section title="People tend to ask me what RKWard means. What should I answer?" shorttitle="What does "RKWard" mean?" id="the_name_problems"> Yes, it's a very odd name. ;) However, R comes obviously from the <link href="http://www.r-project.org/">R-language</link> which is the statistical basis of RKWard. K is derived from <link href="http://kde.org/">KDE</link> which delivered the basic GUI technologies for RKWard. And <link href="http://en.wikipedia.org/wiki/Ward">Ward</link>? That's another story. </section> |
From: Thomas F. <tho...@ru...> - 2014-12-08 20:12:57
|
Git commit ceae35991fcdf9a547ce8065ff9dbdfc9e499c24 by Thomas Friedrichsmeier. Committed on 08/12/2014 at 19:39. Pushed by tfry into branch 'master'. Also document menu item grouping in the reference. M +22 -4 doc/rkwardplugins/index.docbook http://commits.kde.org/rkward/ceae35991fcdf9a547ce8065ff9dbdfc9e499c24 diff --git a/doc/rkwardplugins/index.docbook b/doc/rkwardplugins/index.docbook index 4984ef5..c522026 100644 --- a/doc/rkwardplugins/index.docbook +++ b/doc/rkwardplugins/index.docbook @@ -4056,8 +4056,8 @@ Child elements: <listitem><para>A label for the menu.</para></listitem> </varlistentry> <varlistentry> - <term>index</term> - <listitem><para>Useful, when menu definitions are read from several &pluginmap; files, to have control over the order in which (sub-)menus are placed inside a hierarchy level. Note that the index is not absolute (since more than one &pluginmap; file may be read, more than one element at this hierarchy level may have the same id), but you can safely assume that an element with index="4" will be placed somewhere below an element which index="3" and above one with index="5" (optional, default is "-1", for add at end).</para></listitem> + <term>group</term> + <listitem><para>Allows to control ordering of menu entries. See <link linkend="pluginmap_grouping">menu item ordering</link>. Optional.</para></listitem> </varlistentry> </variablelist></para></listitem> </varlistentry> @@ -4070,8 +4070,26 @@ Child elements: <listitem><para>The ID of the component that should be invoked, when this menu entry is activated.</para></listitem> </varlistentry> <varlistentry> - <term>index</term> - <listitem><para>See <menu index="..."> above.</para></listitem> + <term>group</term> + <listitem><para>Allows to control ordering of menu entries. See <link linkend="pluginmap_grouping">menu item ordering</link>. Optional.</para></listitem> + </varlistentry> + </variablelist></para></listitem> +</varlistentry> +<varlistentry> +<term><group></term> +<listitem><para>Declares a group of items in the menu. See <link linkend="pluginmap_grouping">menu item ordering</link>. Attributes: + <variablelist> + <varlistentry> + <term>id</term> + <listitem><para>The name of this group.</para></listitem> + </varlistentry> + <varlistentry> + <term>separated</term> + <listitem><para>Optional. If set to "true" the item in this group will be visually separated from surrounding items.</para></listitem> + </varlistentry> + <varlistentry> + <term>group</term> + <listitem><para>The name of the group to append this group to (optional).</para></listitem> </varlistentry> </variablelist></para></listitem> </varlistentry> |
From: Thomas F. <tho...@ru...> - 2014-12-08 20:12:53
|
Git commit 46d25e14368b4b1ee07aba0a715caccdf057e1ff by Thomas Friedrichsmeier. Committed on 08/12/2014 at 20:09. Pushed by tfry into branch 'master'. Remove one layer of parsing / deparsing while resolving <link>-elements. M +29 -22 rkward/windows/rkhtmlwindow.cpp M +1 -1 rkward/windows/rkhtmlwindow.h http://commits.kde.org/rkward/46d25e14368b4b1ee07aba0a715caccdf057e1ff diff --git a/rkward/windows/rkhtmlwindow.cpp b/rkward/windows/rkhtmlwindow.cpp index 8936cba..c85d3c1 100644 --- a/rkward/windows/rkhtmlwindow.cpp +++ b/rkward/windows/rkhtmlwindow.cpp @@ -697,56 +697,63 @@ QString RKHTMLWindow::renderHelpFragment (QDomElement &fragment, const XMLHelper QString ret; while ((npos = text.indexOf ("<link", pos)) >= 0) { ret += text.mid (pos, npos - pos); + + QString href; + int href_start = text.indexOf (" href=\"", npos + 5); + if (href_start >= 0) { + href_start += 7; + int href_end = text.indexOf ("\"", href_start); + href = text.mid (href_start, href_end - href_start); + } + QString linktext; int end = text.indexOf (">", npos) + 1; if (text[end-2] != QChar ('/')) { - end = text.indexOf ("</link>", end) + 7; + int nend = text.indexOf ("</link>", end); + linktext = text.mid (end, nend - end); + end = nend + 7; } - QDomDocument doc; // TODO: simplify prepareHelpLink() to work on a QString, rather than QDomElement - doc.setContent (text.mid (npos, end - npos)); - QDomElement element = doc.firstChildElement ("link"); - RK_ASSERT (!element.isNull ()); // may happen on malformed page, though - prepareHelpLink (&element); - ret += doc.toString (); - - pos = end + 1; + ret += prepareHelpLink (href, linktext); + pos = end; } ret += text.mid (pos); - RK_DEBUG (APP, DL_DEBUG, "%s", ret.toLatin1 ().data ()); + RK_DEBUG (APP, DL_DEBUG, "%s", qPrintable (ret)); return ret; } -void RKHTMLWindow::prepareHelpLink (QDomElement *link_element) { +QString RKHTMLWindow::prepareHelpLink (const QString &href, const QString &text) { RK_TRACE (APP); - link_element->setTagName ("a"); - if (link_element->text ().isEmpty ()) { - QString text; - KUrl url = link_element->attribute ("href"); + QString ret = "<a href=\"" + href + "\">"; + if (!text.isEmpty ()) { + ret += text; + } else { + QString ltext; + KUrl url (href); if (url.protocol () == "rkward") { if (url.host () == "component") { RKComponentHandle *chandle = componentPathToHandle (url.path ()); - if (chandle) text = chandle->getLabel (); + if (chandle) ltext = chandle->getLabel (); } else if (url.host () == "rhelp") { - text = i18n ("R Reference on '%1'", url.path ().mid (1)); + ltext = i18n ("R Reference on '%1'", url.path ().mid (1)); } else if (url.host () == "page") { QString help_base_dir = RKCommonFunctions::getRKWardDataDir () + "pages/"; XMLHelper xml (help_base_dir + url.path () + ".rkh", RKMessageCatalog::getCatalog ("rkward__pages", RKCommonFunctions::getRKWardDataDir () + "po/")); QDomElement doc_element = xml.openXMLFile (DL_WARNING); QDomElement title_element = xml.getChildElement (doc_element, "title", DL_WARNING); - text = xml.i18nElementText (title_element, false, DL_WARNING); + ltext = xml.i18nElementText (title_element, false, DL_WARNING); } - if (text.isEmpty ()) { - text = i18n ("BROKEN REFERENCE"); + if (ltext.isEmpty ()) { + ltext = i18n ("BROKEN REFERENCE"); RK_DEBUG (APP, DL_WARNING, "Broken reference to %s", url.path ().toLatin1 ().data ()); } - - link_element->appendChild (link_element->ownerDocument ().createTextNode (text)); } + ret.append (ltext); } + return (ret + "</a>"); } QString RKHTMLWindow::componentPathToId (QString path) { diff --git a/rkward/windows/rkhtmlwindow.h b/rkward/windows/rkhtmlwindow.h index 62ed8a7..35e8697 100644 --- a/rkward/windows/rkhtmlwindow.h +++ b/rkward/windows/rkhtmlwindow.h @@ -138,7 +138,7 @@ private: // for dealing with rkward://[page|component]-pages bool renderRKHelp (const KUrl &url); QString renderHelpFragment (QDomElement &fragment, const XMLHelper *xml); - void prepareHelpLink (QDomElement *link_element); + QString prepareHelpLink (const QString &href, const QString &text); QString componentPathToId (QString path); RKComponentHandle *componentPathToHandle (QString path); QString startSection (const QString &name, const QString &title, const QString &shorttitle, QStringList *anchors, QStringList *anchor_names); |
From: Thomas F. <tho...@ru...> - 2014-12-08 18:57:58
|
Git commit 4f8e2ba0ae14931e05f27942c912c404e80ee39d by Thomas Friedrichsmeier. Committed on 08/12/2014 at 11:39. Pushed by tfry into branch 'master'. Simplify M +3 -5 scripts/update_plugin_messages.py http://commits.kde.org/rkward/4f8e2ba0ae14931e05f27942c912c404e80ee39d diff --git a/scripts/update_plugin_messages.py b/scripts/update_plugin_messages.py index cfb7e2b..f74d77d 100755 --- a/scripts/update_plugin_messages.py +++ b/scripts/update_plugin_messages.py @@ -91,15 +91,13 @@ if (len (toplevel_sources) < 1): # The second thing we do is hacking line number information into the parsed XML tree def parseFile (filename): f = codecs.open (filename, 'r', 'utf-8') - content = f.read ().replace ("&", "&").split ("\n") - f.close () - l = 0 enriched = list () - for line in content: + for line in f: l += 1 enriched.append (re.sub (r'<(\w+)', r'<\1 ' + LINE_DUMMY_ATTR + '="' + str (l) + '"', line)) - content = "\n".join (enriched) + content = "".join (enriched).replace ("&", "&") + f.close () try: return minidom.parseString (content) |
From: Thomas F. <tho...@ru...> - 2014-12-08 11:06:19
|
Git commit 72017cfed8dc80494d952c1ce0c7c8cf1551105a by Thomas Friedrichsmeier. Committed on 08/12/2014 at 10:03. Pushed by tfry into branch 'master'. Minor cleanup M +3 -7 rkward/misc/xmlhelper.cpp http://commits.kde.org/rkward/72017cfed8dc80494d952c1ce0c7c8cf1551105a diff --git a/rkward/misc/xmlhelper.cpp b/rkward/misc/xmlhelper.cpp index d9dba22..d18c068 100644 --- a/rkward/misc/xmlhelper.cpp +++ b/rkward/misc/xmlhelper.cpp @@ -247,8 +247,8 @@ QString XMLHelper::i18nStringAttribute (const QDomElement& element, const QStrin displayError (&element, i18n ("'%1'-attribute not given. Assuming '%2'", name, def), debug_level); return def; } - const QString context_element ("i18n_context"); - if (element.hasAttribute (context_element)) return (catalog->translate (element.attribute (context_element), element.attribute (name))); + const QString context = element.attribute ("i18n_context", QString ()); + if (!context.isNull ()) return (catalog->translate (context, element.attribute (name))); return (catalog->translate (element.attribute (name))); } @@ -331,11 +331,7 @@ QString XMLHelper::i18nElementText (const QDomElement &element, bool with_paragr return QString (); } - const QString context_attr ("i18n_context"); - QString context; - if (element.hasAttribute (context_attr)) { - context = element.attribute (context_attr); - } + QString context = element.attribute ("i18n_context", QString ()); // if (!with_paragraphs), text should better not contain double newlines. We treat all the same, though, just as the message extraction script does. QStringList paras = ret.split ("\n\n"); |
From: Thomas F. <tho...@ru...> - 2014-12-08 11:06:19
|
Git commit 4174de709b5d3894fe65c01bfd180bd578eeeb50 by Thomas Friedrichsmeier. Committed on 08/12/2014 at 11:04. Pushed by tfry into branch 'master'. Provide line number information for messages extracted from xml files. Unfortunately, there seems to be no clean way to do this. This hack works by inserting dummy attributes into the document before parsing. M +27 -6 scripts/update_plugin_messages.py http://commits.kde.org/rkward/4174de709b5d3894fe65c01bfd180bd578eeeb50 diff --git a/scripts/update_plugin_messages.py b/scripts/update_plugin_messages.py index 90b8f63..cfb7e2b 100755 --- a/scripts/update_plugin_messages.py +++ b/scripts/update_plugin_messages.py @@ -30,6 +30,7 @@ import subprocess from xml.dom import minidom import HTMLParser import copy +import re # You might want to adjust the following values (can also be overridden from environment variable): BUGADDR = "http://p.sf.net/rkward/bugs" # Technically, this is for bugs _in the translation_ @@ -52,6 +53,8 @@ attributes_to_extract_for_tag={ 'about': { "attributes" : ['name', 'shortinfo', 'category'], "context": ''}, 'author': { "attributes" : ['name', 'given', 'family'], "context": 'Author name'} } +# HACK for preserving line number information in the DOM tree. This string should be unique enough to not clash with the files' contents! +LINE_DUMMY_ATTR = '_DUMMY_LINE' def usage (): print ("Usage: " + sys.argv[0] + " [--default_po=PO_ID] [--outdir=DIR] files") @@ -84,10 +87,20 @@ if (len (toplevel_sources) < 1): # For crying out loud! So we are not strictly using XML, because we allow the use of (X)HTML entities, esp. inside <text>-elements, # without formally declaring these entities. Python seems to make a point of making it real hard to deal with this. So what we do is # escaping all entities before parsing, then passing all through HTMLParser.unescape () before writing the output. +# +# The second thing we do is hacking line number information into the parsed XML tree def parseFile (filename): f = codecs.open (filename, 'r', 'utf-8') - content = f.read ().replace ("&", "&") + content = f.read ().replace ("&", "&").split ("\n") f.close () + + l = 0 + enriched = list () + for line in content: + l += 1 + enriched.append (re.sub (r'<(\w+)', r'<\1 ' + LINE_DUMMY_ATTR + '="' + str (l) + '"', line)) + content = "\n".join (enriched) + try: return minidom.parseString (content) except: @@ -107,7 +120,7 @@ def getElementShort (element, dot_attribute=""): # Try to extract helpful file context information def getFileContext (element, attribute=""): - ret = "i18n: file: " + infile["infile"] + "\n" + ret = "i18n: file: " + infile["infile"] + ":" + str (getLineOf (element, 0)) + "\n" ret += "i18n: ectx: " if (infile["caption"] != ""): ret += "(" + infile["caption"] + ") " @@ -137,6 +150,14 @@ def quote (text): text = HTMLParser.HTMLParser ().unescape (text) # unescape character entities, Qt does so while parsing the xml return "\"" + text.replace ("\\", "\\\\").replace ("\"", "\\\"") + "\"" +def stripLineDummy (text): + return re.sub (r' ' + LINE_DUMMY_ATTR + '="\d+"', '', text) + +def getLineOf (element, default=-1): + if element.hasAttribute (LINE_DUMMY_ATTR): + return element.getAttribute (LINE_DUMMY_ATTR) + return default + # Normalizes larger text fragments. TODO: Do we want to protect <pre>-blocks? def normalize (text): lines = text.split ("\n") @@ -150,7 +171,7 @@ def getFullText (element): rc = [] for cn in element.childNodes: if cn.nodeType != cn.COMMENT_NODE: - rc.append(cn.toxml ("utf-8")) + rc.append(stripLineDummy (cn.toxml ("utf-8"))) return ''.join (rc).strip ().replace ("&", "&") # get the content of all text nodes inside this node (does not include xml tags) @@ -158,7 +179,7 @@ def getText (node): rc = [] for cn in node.childNodes: if cn.nodeType in [cn.TEXT_NODE, cn.CDATA_SECTION_NODE]: - rc.append(cn.data) + rc.append(stripLineDummy (cn.data)) return ''.join (rc).strip () # Look for an i18n comment in the given node, and add automatically extracted file context information @@ -168,7 +189,7 @@ def getI18nComment (node, attribute=""): if cn.nodeType == cn.COMMENT_NODE: comment = normalize (cn.data.strip ()) if (comment.lower ().startswith ("i18n:") or comment.lower ().startswith ("translators:")): - ret += "i18n: " + comment + "\n" + ret += "i18n: " + stripLineDummy (comment) + "\n" ret += getFileContext (node, attribute) + " */\n" return (ret) @@ -202,7 +223,7 @@ def handleNode (node): else: handleSubFile (filename, node.tagName == "component", node.tagName == "include") if (node.tagName == "script"): - handleJSChunk (getText (node), infile["infile"], -1, infile["caption"]) + handleJSChunk (getText (node), infile["infile"], getLineOf (node), infile["caption"]) elif (node.tagName in text_containers): textchunks = getFullText (node).split ("\n\n") for chunk in textchunks: |
From: <ts...@ya...> - 2014-12-07 08:56:26
|
Is this really needed? The *.cpp should include rc.cpp too, no? Enviat des del meu telèfon intel·ligent BlackBerry 10. Missatge original De: Yuri Chornoivan Enviat: domingo, 7 de diciembre de 2014 09:06 Per a: kde...@kd... A/c: i18...@kd... Tema: [rkward] /: Extract messages from rc.cpp Git commit 92f36fb9520ec3fd4cc0888a728a66353007761a by Yuri Chornoivan. Committed on 07/12/2014 at 08:05. Pushed by yurchor into branch 'master'. Extract messages from rc.cpp M +1 -1 Messages.sh http://commits.kde.org/rkward/92f36fb9520ec3fd4cc0888a728a66353007761a diff --git a/Messages.sh b/Messages.sh index 91ca2f3..75d636d 100755 --- a/Messages.sh +++ b/Messages.sh @@ -6,7 +6,7 @@ $EXTRACTRC `find rkward -name \*.rc -a \! -name rkward_windows_icon.rc -o -name # # call xgettext on all source files. If your sources have other filename # extensions besides .cc, .cpp, and .h, just add them in the find call. -$XGETTEXT `find rkward -name \*.cpp -o -name \*.h -name \*.c` -o $podir/rkward.pot +$XGETTEXT `find rkward -name \*.cpp -o -name \*.h -name \*.c` rc.cpp -o $podir/rkward.pot # extract messages from analysis plugins: >> rkward__analysis.pot python scripts/update_plugin_messages.py --extract-only --outdir=$podir rkward/plugins/analysis.pluginmap |
From: Thomas F. <tho...@ru...> - 2014-12-07 08:11:40
|
Git commit a9e4924816d0afd68205332a64fa0cb16d086b68 by Thomas Friedrichsmeier. Committed on 07/12/2014 at 08:10. Pushed by tfry into branch 'master'. Fix two i18n lookup failures M +1 -1 rkward/misc/xmlhelper.cpp M +1 -1 rkward/plugin/rkradio.cpp http://commits.kde.org/rkward/a9e4924816d0afd68205332a64fa0cb16d086b68 diff --git a/rkward/misc/xmlhelper.cpp b/rkward/misc/xmlhelper.cpp index 61d606b..d9dba22 100644 --- a/rkward/misc/xmlhelper.cpp +++ b/rkward/misc/xmlhelper.cpp @@ -248,7 +248,7 @@ QString XMLHelper::i18nStringAttribute (const QDomElement& element, const QStrin return def; } const QString context_element ("i18n_context"); - if (element.hasAttribute (context_element)) return (catalog->translate (context_element, element.attribute (name))); + if (element.hasAttribute (context_element)) return (catalog->translate (element.attribute (context_element), element.attribute (name))); return (catalog->translate (element.attribute (name))); } diff --git a/rkward/plugin/rkradio.cpp b/rkward/plugin/rkradio.cpp index 3fe40a3..42d79c96 100644 --- a/rkward/plugin/rkradio.cpp +++ b/rkward/plugin/rkradio.cpp @@ -42,7 +42,7 @@ RKRadio::RKRadio (const QDomElement &element, RKComponent *parent_component, QWi // create ButtonGroup group = new QButtonGroup (this); - group_box = new QGroupBox (xml->getStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this); + group_box = new QGroupBox (xml->i18nStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this); new QVBoxLayout (group_box); addOptionsAndInit (element); |
From: Yuri C. <yu...@uk...> - 2014-12-07 08:06:33
|
Git commit 92f36fb9520ec3fd4cc0888a728a66353007761a by Yuri Chornoivan. Committed on 07/12/2014 at 08:05. Pushed by yurchor into branch 'master'. Extract messages from rc.cpp M +1 -1 Messages.sh http://commits.kde.org/rkward/92f36fb9520ec3fd4cc0888a728a66353007761a diff --git a/Messages.sh b/Messages.sh index 91ca2f3..75d636d 100755 --- a/Messages.sh +++ b/Messages.sh @@ -6,7 +6,7 @@ $EXTRACTRC `find rkward -name \*.rc -a \! -name rkward_windows_icon.rc -o -name # # call xgettext on all source files. If your sources have other filename # extensions besides .cc, .cpp, and .h, just add them in the find call. -$XGETTEXT `find rkward -name \*.cpp -o -name \*.h -name \*.c` -o $podir/rkward.pot +$XGETTEXT `find rkward -name \*.cpp -o -name \*.h -name \*.c` rc.cpp -o $podir/rkward.pot # extract messages from analysis plugins: >> rkward__analysis.pot python scripts/update_plugin_messages.py --extract-only --outdir=$podir rkward/plugins/analysis.pluginmap |
From: Thomas F. <tho...@ru...> - 2014-12-06 21:58:43
|
Git commit 4d411e445cda80357e44b5eb45b23f391eedcc27 by Thomas Friedrichsmeier. Committed on 06/12/2014 at 21:57. Pushed by tfry into branch 'master'. Work around the startup-wrapper eating the DESKTOP_STARTUP_ID, instead of passing it to rkward.frontend M +1 -5 rkward/rkward.desktop M +2 -0 rkward/rkward_startup_wrapper.cpp http://commits.kde.org/rkward/4d411e445cda80357e44b5eb45b23f391eedcc27 diff --git a/rkward/rkward.desktop b/rkward/rkward.desktop index 669af6c..be55546 100644 --- a/rkward/rkward.desktop +++ b/rkward/rkward.desktop @@ -23,12 +23,8 @@ Comment[sk]=GUI pre R-project Comment[uk]=Графічний інтерфейс проекту R Comment[x-test]=xxGUI for the R-projectxx Icon=rkward -Exec=rkward -caption "%c" %i +Exec=STARTUP_ID_COPY=${DESKTOP_STARTUP_ID} rkward -caption "%c" %i Terminal=false Type=Application X-DocPath=rkward/index.html Categories=Qt;KDE;Science;Math;NumericalAnalysis; -# Startup notification broken, as startup id is not passed to rkward.frontend. -# It may be possible to fix this in Qt 5.4. See https://git.reviewboard.kde.org/r/121230/ -StartupNotify=false -# vi: encoding=utf-8 diff --git a/rkward/rkward_startup_wrapper.cpp b/rkward/rkward_startup_wrapper.cpp index 0307e7a..2a723d5 100644 --- a/rkward/rkward_startup_wrapper.cpp +++ b/rkward/rkward_startup_wrapper.cpp @@ -99,6 +99,8 @@ int main (int argc, char *argv[]) { QApplication app (argc, argv); QStringList args = app.arguments (); if (!args.isEmpty ()) args.pop_front (); // The command itself + qputenv ("DESKTOP_STARTUP_ID", qgetenv ("STARTUP_ID_COPY")); // for startup notifications (set via rkward.desktop) + qputenv ("STARTUP_ID_COPY", ""); // Parse arguments that need handling in the wrapper bool usage = false; |
From: Thomas F. <tho...@ru...> - 2014-12-06 21:55:33
|
Git commit cb6336cd765c7f57ccae284a3e67d18da80f1138 by Thomas Friedrichsmeier. Committed on 06/12/2014 at 21:52. Pushed by tfry into branch 'master'. Don't do too much (error-prone) parsing on i18n'ed help fragments. Single out, and replace <link>-elements, only. M +19 -12 rkward/windows/rkhtmlwindow.cpp http://commits.kde.org/rkward/cb6336cd765c7f57ccae284a3e67d18da80f1138 diff --git a/rkward/windows/rkhtmlwindow.cpp b/rkward/windows/rkhtmlwindow.cpp index 43472ad..8936cba 100644 --- a/rkward/windows/rkhtmlwindow.cpp +++ b/rkward/windows/rkhtmlwindow.cpp @@ -688,23 +688,30 @@ bool RKHTMLWindow::renderRKHelp (const KUrl &url) { QString RKHTMLWindow::renderHelpFragment (QDomElement &fragment, const XMLHelper *xml) { RK_TRACE (APP); - QString ret = xml->i18nElementText (fragment, true, DL_WARNING); + QString text = xml->i18nElementText (fragment, true, DL_WARNING); // Can't resolve links based on the already parsed dom-tree, because they can be inside string to be translated. // I.e. resolving links before doing i18n will cause i18n-lookup to fail - QDomDocument doc; - if (doc.setContent (ret)) { - QDomNodeList link_nodes = doc.elementsByTagName ("link"); - for (int i=link_nodes.count (); i >= 0; --i) { - QDomElement element = link_nodes.item (i).toElement (); - if (element.isNull ()) continue; - - prepareHelpLink (&element); + int pos = 0; + int npos; + QString ret; + while ((npos = text.indexOf ("<link", pos)) >= 0) { + ret += text.mid (pos, npos - pos); + int end = text.indexOf (">", npos) + 1; + if (text[end-2] != QChar ('/')) { + end = text.indexOf ("</link>", end) + 7; } - ret = doc.toString (); - } else { - RK_DEBUG (APP, DL_ERROR, "Translated help fragment failed to parse: %s", qPrintable (ret)); + + QDomDocument doc; // TODO: simplify prepareHelpLink() to work on a QString, rather than QDomElement + doc.setContent (text.mid (npos, end - npos)); + QDomElement element = doc.firstChildElement ("link"); + RK_ASSERT (!element.isNull ()); // may happen on malformed page, though + prepareHelpLink (&element); + ret += doc.toString (); + + pos = end + 1; } + ret += text.mid (pos); RK_DEBUG (APP, DL_DEBUG, "%s", ret.toLatin1 ().data ()); return ret; |
From: Yuri C. <yu...@uk...> - 2014-12-06 19:28:24
|
Git commit 0f6ae5361cae2e5c5de70ce821f111f448de1566 by Yuri Chornoivan. Committed on 06/12/2014 at 19:27. Pushed by yurchor into branch 'master'. Make the string translatable M +3 -1 rkward/plugin/rkvarselector.cpp http://commits.kde.org/rkward/0f6ae5361cae2e5c5de70ce821f111f448de1566 diff --git a/rkward/plugin/rkvarselector.cpp b/rkward/plugin/rkvarselector.cpp index 1d61ed3..b67aeed 100644 --- a/rkward/plugin/rkvarselector.cpp +++ b/rkward/plugin/rkvarselector.cpp @@ -20,6 +20,8 @@ #include <QVBoxLayout> #include <qlabel.h> +#include <klocale.h> + #include "../misc/xmlhelper.h" #include "../rkglobals.h" #include "../misc/rkobjectlistview.h" @@ -40,7 +42,7 @@ RKVarSelector::RKVarSelector (const QDomElement &element, RKComponent *parent_co QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); - QLabel *label = new QLabel (element.attribute ("label", "Select Variable(s)"), this); + QLabel *label = new QLabel (element.attribute ("label", i18n ("Select Variable(s)")), this); vbox->addWidget (label); list_view = new RKObjectListView (this); |
From: Yuri C. <yu...@uk...> - 2014-12-06 18:36:15
|
Git commit aadfc52e060ded445cab1deab6c6496e3e647a5e by Yuri Chornoivan. Committed on 06/12/2014 at 18:35. Pushed by yurchor into branch 'master'. Fix typos M +1 -1 rkward/plugins/analysis/crosstab.rkh M +1 -1 rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh http://commits.kde.org/rkward/aadfc52e060ded445cab1deab6c6496e3e647a5e diff --git a/rkward/plugins/analysis/crosstab.rkh b/rkward/plugins/analysis/crosstab.rkh index 716920a..6d87e35 100644 --- a/rkward/plugins/analysis/crosstab.rkh +++ b/rkward/plugins/analysis/crosstab.rkh @@ -13,7 +13,7 @@ For complete crosstabulation of three or more variables against each other (into <settings> <caption id="variables_tab"/> <setting id="x">Select any vector that can be interpreted as a factor. This variable will be present in all tables.</setting> - <setting id="y">Select one or more vector that can be interpreted as a factor. Each of these will be cross-tabulated against the "dependent" variable.</setting> + <setting id="y">Select one or more vectors that can be interpreted as a factor. Each of these will be cross-tabulated against the "dependent" variable.</setting> <setting id="chisq">Should a chisquare test be performed (for each pair)?</setting> <setting id="barplot">Should a barplot be produced (for each pair)?</setting> <setting id="preview">Allows to preview the barplot(s). Only the first of the barplots is shown in the preview, even if more than one table is produced.</setting> diff --git a/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh b/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh index 90ea7b5..5b110f0 100644 --- a/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh +++ b/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh @@ -19,7 +19,7 @@ <setting id="confint">Check this if you want the confidence interval to be computed/printed.</setting> <setting id="conflevel">Confidence level of the printed confidence interval.</setting> <setting id="mu">The location / location shift to form the null hypothesis.</setting> - <setting id="exact">Should an exact p-value be computed? By default ("Automatic") an asymptomatic p-value is calculated if and only if you have less than 50 cases per group without binding than an exact test should be performed.</setting> + <setting id="exact">Should an exact p-value be computed? By default ("Automatic") an asymptomatic p-value is calculated if and only if you have less than 50 cases per group without binding when an exact test should be performed.</setting> <setting id="ties">Check this option to compute an exact p-value even in the presence of ties.</setting> <setting id="correct">If checked a continuity correction in the normal approximation for the p-value is applied.</setting> </settings> |
From: Pino T. <pi...@kd...> - 2014-12-06 10:09:45
|
Git commit 847237293daddc419cda647b1cca918465660e8b by Pino Toscano. Committed on 06/12/2014 at 10:09. Pushed by pino into branch 'master'. i18n: handle translations of vnd.rkward.r.xml A +22 -0 XmlMessages.sh http://commits.kde.org/rkward/847237293daddc419cda647b1cca918465660e8b diff --git a/XmlMessages.sh b/XmlMessages.sh new file mode 100755 index 0000000..5f6cb77 --- /dev/null +++ b/XmlMessages.sh @@ -0,0 +1,22 @@ +function get_files +{ + echo rkward/vnd.rkward.r.xml +} + +function po_for_file +{ + case "$1" in + rkward/vnd.rkward.r.xml) + echo rkward_xml_mimetypes.po + ;; + esac +} + +function tags_for_file +{ + case "$1" in + rkward/vnd.rkward.r.xml) + echo comment + ;; + esac +} |
From: Pino T. <pi...@kd...> - 2014-12-06 10:04:02
|
Git commit 8d42282a940e87651a69fd955249d0535a2308b9 by Pino Toscano. Committed on 06/12/2014 at 10:03. Pushed by pino into branch 'master'. rkward.desktop: add Qt and KDE categories M +1 -1 rkward/rkward.desktop http://commits.kde.org/rkward/8d42282a940e87651a69fd955249d0535a2308b9 diff --git a/rkward/rkward.desktop b/rkward/rkward.desktop index 8fe9c74..669af6c 100644 --- a/rkward/rkward.desktop +++ b/rkward/rkward.desktop @@ -27,7 +27,7 @@ Exec=rkward -caption "%c" %i Terminal=false Type=Application X-DocPath=rkward/index.html -Categories=Science;Math;NumericalAnalysis; +Categories=Qt;KDE;Science;Math;NumericalAnalysis; # Startup notification broken, as startup id is not passed to rkward.frontend. # It may be possible to fix this in Qt 5.4. See https://git.reviewboard.kde.org/r/121230/ StartupNotify=false |
From: Thomas F. <tho...@ru...> - 2014-12-05 13:46:13
|
Git commit 83f198d223d302b68fb44580790b7a3f7a2d755d by Thomas Friedrichsmeier. Committed on 05/12/2014 at 13:45. Pushed by tfry into branch 'master'. Fix i18n-lookup of messages that contain <link>-elements M +15 -8 rkward/windows/rkhtmlwindow.cpp http://commits.kde.org/rkward/83f198d223d302b68fb44580790b7a3f7a2d755d diff --git a/rkward/windows/rkhtmlwindow.cpp b/rkward/windows/rkhtmlwindow.cpp index 3e80d4a..43472ad 100644 --- a/rkward/windows/rkhtmlwindow.cpp +++ b/rkward/windows/rkhtmlwindow.cpp @@ -688,16 +688,23 @@ bool RKHTMLWindow::renderRKHelp (const KUrl &url) { QString RKHTMLWindow::renderHelpFragment (QDomElement &fragment, const XMLHelper *xml) { RK_TRACE (APP); - // prepare all internal links - QDomNodeList link_nodes = fragment.elementsByTagName ("link"); - for (int i=link_nodes.count (); i >= 0; --i) { - QDomElement element = link_nodes.item (i).toElement (); - if (element.isNull ()) continue; + QString ret = xml->i18nElementText (fragment, true, DL_WARNING); - prepareHelpLink (&element); - } + // Can't resolve links based on the already parsed dom-tree, because they can be inside string to be translated. + // I.e. resolving links before doing i18n will cause i18n-lookup to fail + QDomDocument doc; + if (doc.setContent (ret)) { + QDomNodeList link_nodes = doc.elementsByTagName ("link"); + for (int i=link_nodes.count (); i >= 0; --i) { + QDomElement element = link_nodes.item (i).toElement (); + if (element.isNull ()) continue; - QString ret = xml->i18nElementText (fragment, true, DL_WARNING); + prepareHelpLink (&element); + } + ret = doc.toString (); + } else { + RK_DEBUG (APP, DL_ERROR, "Translated help fragment failed to parse: %s", qPrintable (ret)); + } RK_DEBUG (APP, DL_DEBUG, "%s", ret.toLatin1 ().data ()); return ret; |
From: Thomas F. <tho...@ru...> - 2014-12-05 13:46:10
|
Git commit 538bf93e2151ed5285148e0a026a28c8aaff8c17 by Thomas Friedrichsmeier. Committed on 05/12/2014 at 13:24. Pushed by tfry into branch 'master'. Fix message install location (for external plugins) M +1 -1 scripts/update_plugin_messages.py http://commits.kde.org/rkward/538bf93e2151ed5285148e0a026a28c8aaff8c17 diff --git a/scripts/update_plugin_messages.py b/scripts/update_plugin_messages.py index 93d21a6..90b8f63 100755 --- a/scripts/update_plugin_messages.py +++ b/scripts/update_plugin_messages.py @@ -509,7 +509,7 @@ for po_id in initialized_pot_files: else: os.remove (abstrans) os.rename (abstrans + ".new", abstrans) - m_outdir = os.path.join (po_file_install_locations[po_id], lang, "MESSAGES") + m_outdir = os.path.join (po_file_install_locations[po_id], lang, "LC_MESSAGES") if (not os.path.exists (m_outdir)): os.makedirs (m_outdir, 0755) res = subprocess.call (MSGFMT.split () + [abstrans, "-o", os.path.join (m_outdir, templatename + ".mo")]) |
From: Thomas F. <tho...@ru...> - 2014-12-05 12:51:20
|
Git commit 695395eeb0202cbfdbe9fbef7e28ab82005f024a by Thomas Friedrichsmeier. Committed on 05/12/2014 at 12:50. Pushed by tfry into branch 'master'. Fix parameter order and semantics in rk.edit.files() M +1 -0 ChangeLog M +16 -15 rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R M +6 -5 rkward/rbackend/rpackages/rkward/man/rk.edit.Rd http://commits.kde.org/rkward/695395eeb0202cbfdbe9fbef7e28ab82005f024a diff --git a/ChangeLog b/ChangeLog index ceb6ba3..282d6c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +- Fixed: Error when using fix() or trace(...edit=TRUE) with default settings on some systems - When the RKWard installation has moved on disk, try to adjust stored .pluginmaps paths, accordingly - TODO: Actually test this on Windows - Fixed: Freezes when using RKWard-functionality (such as the RK()-device) from tcl/tk (e.g. Rcmdr) diff --git a/rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R b/rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R index 8e99cd8..c925384 100644 --- a/rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R +++ b/rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R @@ -6,11 +6,12 @@ #' is edit asynchronously. #' #' \code{rk.edit.files}, \code{rk.show.files}, and \code{rk.show.html} are -#' equivalent to \link{file.edit}, \link{file.show}, and \link{browseURL}, +#' equivalent to \link{edit}, \link{file.show}, and \link{browseURL}, #' respectively, but use RKWard as text/html editor/viewer. Generally it is -#' recommended to use \link{file.edit}, \link{file.show}, and \link{browseURL}, -#' instead. These will call the respective RKWard functions by default, when -#' run inside an RKWard session. +#' recommended to use \link{edit}, \link{file.edit}, \link{file.show}, +#' and \link{browseURL}, instead. These will call the respective RKWard functions +#' by default, when run inside an RKWard session. (via \code{getOption("editor")}, +#' and \code{getOption("browser")}. #' #' @aliases rk.edit rk.edit.files rk.show.files rk.show.html #' @param x an object to edit. @@ -45,18 +46,18 @@ #' @export #' @rdname rk.edit -"rk.edit.files" <- function (file = file, title = file, name = NULL, prompt = TRUE) -{ - if (!is.character (file)) { - nfile = tempfile() - env = environment (file) - dput (file, file=nfile, control=c ("useSource", "keepNA", "keepInteger", "showAttributes")) - .Call("rk.edit.files", nfile, title, name, prompt, PACKAGE="(embedding)") - x <- dget (nfile) - environment (x) <- env - return (x) +"rk.edit.files" <- function (name=NULL, file="", title=NULL, prompt = TRUE) { + if (!is.null(name)) { + if (is.null (title)) title = deparse (substitute (name)) + if (file == "") file = tempfile() + env = environment(name) + dput (name, file = file, control = c("useSource", "keepNA", "keepInteger", "showAttributes")) + .Call ("rk.edit.files", file, title, "", prompt, PACKAGE = "(embedding)") + x <- dget(file) + environment(x) <- env + return(x) } - invisible (.Call ("rk.edit.files", as.character (file), as.character (title), as.character (name), isTRUE (prompt), PACKAGE="(embedding)")) + invisible (.Call ("rk.edit.files", as.character (file), as.character (title), as.character (name), isTRUE (prompt), PACKAGE="(embedding)")) } #' @export diff --git a/rkward/rbackend/rpackages/rkward/man/rk.edit.Rd b/rkward/rbackend/rpackages/rkward/man/rk.edit.Rd index 9e796e9..458cbfa 100644 --- a/rkward/rbackend/rpackages/rkward/man/rk.edit.Rd +++ b/rkward/rbackend/rpackages/rkward/man/rk.edit.Rd @@ -8,7 +8,7 @@ \usage{ rk.edit(x) -rk.edit.files(file = file, title = file, name = NULL, prompt = TRUE) +rk.edit.files(name = NULL, file = "", title = NULL, prompt = TRUE) rk.show.files(file = file, header = file, title = NULL, delete.file = FALSE, prompt = TRUE, delete = delete.file) @@ -45,11 +45,12 @@ is edit asynchronously. } \details{ \code{rk.edit.files}, \code{rk.show.files}, and \code{rk.show.html} are -equivalent to \link{file.edit}, \link{file.show}, and \link{browseURL}, +equivalent to \link{edit}, \link{file.show}, and \link{browseURL}, respectively, but use RKWard as text/html editor/viewer. Generally it is -recommended to use \link{file.edit}, \link{file.show}, and \link{browseURL}, -instead. These will call the respective RKWard functions by default, when -run inside an RKWard session. +recommended to use \link{edit}, \link{file.edit}, \link{file.show}, +and \link{browseURL}, instead. These will call the respective RKWard functions +by default, when run inside an RKWard session. (via \code{getOption("editor")}, +and \code{getOption("browser")}. } \examples{ ## Not run |
From: Thomas F. <tho...@ru...> - 2014-12-05 11:00:33
|
Git commit 735e77c414a08cb4bfea850b2efb72c88e9ee905 by Thomas Friedrichsmeier. Committed on 05/12/2014 at 10:59. Pushed by tfry into branch 'master'. Correct some XML problems detected by the message extraction script. M +2 -1 rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh M +2 -1 rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh M +2 -1 rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh M +2 -1 rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh M +2 -1 rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh M +1 -1 rkward/plugins/distributions/clt/plot_gamma_clt.xml M +1 -1 rkward/plugins/distributions/plot_gamma_distribution.xml M +1 -1 rkward/plugins/plots/histogram_options.xml http://commits.kde.org/rkward/735e77c414a08cb4bfea850b2efb72c88e9ee905 diff --git a/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh b/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh index 7b69593..585402b 100644 --- a/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh +++ b/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh @@ -60,4 +60,5 @@ <ul> <li>The two factor solution of the <code>ltm()</code> function is not yet fully implemented (quadratic term is missing).</li> </ul> - </technical> \ No newline at end of file + </technical> +</document> diff --git a/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh b/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh index ec1a146..ec4c713 100644 --- a/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh +++ b/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh @@ -70,4 +70,5 @@ <ul> <li>The <code>parscale</code> control element is not yet implemented.</li> </ul> - </technical> \ No newline at end of file + </technical> +</document> diff --git a/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh b/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh index bd1411d..b266902 100644 --- a/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh +++ b/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh @@ -44,4 +44,5 @@ <li><link href="rkward://rhelp/eRm-package"/></li> <li><link href="rkward://rhelp/LLTM"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh b/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh index 890776e..676bafd 100644 --- a/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh +++ b/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh @@ -51,4 +51,5 @@ <li><link href="rkward://rhelp/ltm-package"/></li> <li><link href="rkward://rhelp/rasch"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh index 064e31e..3e9a9ac 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh @@ -70,4 +70,5 @@ <ul> <li>The <code>parscale</code> control element is not yet implemented.</li> </ul> - </technical> \ No newline at end of file + </technical> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh index 4e1c54f..3eae304 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh @@ -64,4 +64,5 @@ <ul> <li>The <code>parscale</code> control element is not yet implemented.</li> </ul> - </technical> \ No newline at end of file + </technical> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh index a751afb..4f5bad9 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh @@ -44,4 +44,5 @@ <li><link href="rkward://rhelp/eRm-package"/></li> <li><link href="rkward://rhelp/LPCM"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh index 3a19557..979b83e 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh @@ -44,4 +44,5 @@ <li><link href="rkward://rhelp/eRm-package"/></li> <li><link href="rkward://rhelp/LRSM"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh index c1a1d4d..09234d1 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh @@ -38,4 +38,5 @@ <li><link href="rkward://rhelp/eRm-package"/></li> <li><link href="rkward://rhelp/PCM"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh b/rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh index 4a95626..b110774 100644 --- a/rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh +++ b/rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh @@ -38,4 +38,5 @@ <li><link href="rkward://rhelp/eRm-package"/></li> <li><link href="rkward://rhelp/RSM"/></li> </ul> - </related> \ No newline at end of file + </related> +</document> diff --git a/rkward/plugins/distributions/clt/plot_gamma_clt.xml b/rkward/plugins/distributions/clt/plot_gamma_clt.xml index 2150d9c..2f2762f 100644 --- a/rkward/plugins/distributions/clt/plot_gamma_clt.xml +++ b/rkward/plugins/distributions/clt/plot_gamma_clt.xml @@ -6,7 +6,7 @@ <snippet id="dist_options"> <frame id="frame_gammaparam" label="Gamma Parameters"> <spinbox default_precision="1" type="real" id="shape" initial="1" min="0.01" label="Shape" /> - <spinbox default_precision="1" type="real" id="rate" initial="1" min="0.01" label="Rate (lambda)" label="Rate or 1/Scale" /> + <spinbox default_precision="1" type="real" id="rate" initial="1" min="0.01" label="Rate (lambda) or 1/Scale" /> </frame> </snippet> <include file="plot_clt_snippets.xml"/> diff --git a/rkward/plugins/distributions/plot_gamma_distribution.xml b/rkward/plugins/distributions/plot_gamma_distribution.xml index 0324138..9e06a5e 100644 --- a/rkward/plugins/distributions/plot_gamma_distribution.xml +++ b/rkward/plugins/distributions/plot_gamma_distribution.xml @@ -16,7 +16,7 @@ <snippet id="dist_options"> <frame label="Parameters"> <spinbox default_precision="2" type="real" id="shape" initial="1" min="0.01" label="Shape" /> - <spinbox default_precision="2" type="real" id="rate" initial="1" min="0.01" label="Rate (lambda)" label="Rate or 1/Scale" /> + <spinbox default_precision="2" type="real" id="rate" initial="1" min="0.01" label="Rate (lambda) or 1/Scale" /> </frame> </snippet> <include file="plot_dist_common_snippets.xml"/> diff --git a/rkward/plugins/plots/histogram_options.xml b/rkward/plugins/plots/histogram_options.xml index 9017b6b..fb6404e 100644 --- a/rkward/plugins/plots/histogram_options.xml +++ b/rkward/plugins/plots/histogram_options.xml @@ -31,7 +31,7 @@ <connect client="density.enabled" governor="ishistlty_notblank"/> <convert id="isdensityGT0ishistlty_notblank" mode="and" sources="isdensityGT0;ishistlty_notblank" /> - <connect client="angle.enabled" governor="isdensityGT0ishistlty_notblank"/>--> + <connect client="angle.enabled" governor="isdensityGT0ishistlty_notblank"/> <connect client="frame_histborderoptions.enabled" governor="ishistlty_notblank"/> <connect client="histbordercol.color.enabled" governor="doborder.state" /> |
From: Thomas F. <tho...@ru...> - 2014-12-05 11:00:29
|
Git commit eaae490c07368fd59a5f9b3926a31507557a7116 by Thomas Friedrichsmeier. Committed on 05/12/2014 at 10:57. Pushed by tfry into branch 'master'. Fix handling of included files. Better error reporting. M +20 -9 scripts/update_plugin_messages.py http://commits.kde.org/rkward/eaae490c07368fd59a5f9b3926a31507557a7116 diff --git a/scripts/update_plugin_messages.py b/scripts/update_plugin_messages.py index 7f5ecaa..93d21a6 100755 --- a/scripts/update_plugin_messages.py +++ b/scripts/update_plugin_messages.py @@ -86,9 +86,13 @@ if (len (toplevel_sources) < 1): # escaping all entities before parsing, then passing all through HTMLParser.unescape () before writing the output. def parseFile (filename): f = codecs.open (filename, 'r', 'utf-8') - content = f.read () + content = f.read ().replace ("&", "&") f.close () - return minidom.parseString (content.replace ("&", "&")) + try: + return minidom.parseString (content) + except: + sys.stderr.write ("ERROR: Failed to parse file " + filename + "\n") + raise # Where available, include the labels of parent elements. Particularly helpful for radio-options def getElementShort (element, dot_attribute=""): @@ -110,7 +114,7 @@ def getFileContext (element, attribute=""): refer_to = "" if ((element.tagName in referring_elements) and (element.hasAttribute ("id"))): if (not (element.getAttribute ("id") in infile["id_labels"])): - sys.stderr.write ("WARNING in " + infile["infile"] + ": Reference to unknown element id '" + element.getAttribute ("id") + "'") + sys.stderr.write ("WARNING in " + infile["infile"] + ": Reference to unknown (or unnamed) element id '" + element.getAttribute ("id") + "'\n") else: refer_to = " (refers to element labelled " + quote (infile["id_labels"][element.getAttribute ("id")]) + ")" tag_stack = [getElementShort (element, attribute)] @@ -196,7 +200,7 @@ def handleNode (node): handleJSChunk (jsfile.read (), filename, 0, getFileCaption (None, infile["caption"])) jsfile.close () else: - handleSubFile (filename, node.tagName == "component") + handleSubFile (filename, node.tagName == "component", node.tagName == "include") if (node.tagName == "script"): handleJSChunk (getText (node), infile["infile"], -1, infile["caption"]) elif (node.tagName in text_containers): @@ -207,6 +211,7 @@ def handleNode (node): writeouti18n ("i18n (" + quote (normalize (chunk)) + ");") elif (getText (node) != ""): sys.stderr.write ("WARNING: Found text content where none expected: " + getFileContext (node) + "\n") + sys.stderr.write (quote (getText (node))) if (not ((node.nodeType == node.ELEMENT_NODE) and (node.tagName in text_containers))): # Don't go looking into the contents of text containers any further (may contain HTML markup) for child in node.childNodes: @@ -406,13 +411,16 @@ def handleJSChunk (buf, filename, offset, caption): # When we encounter a "file"-attribute, we generally dive right into parsing that file, i.e. we do depth first # Advantage is that strings in all files belonging to one plugin will be in direct succession in the .pot file # The exception is if the referenced file declares an own (different) po_id. In this case it will be handled, later. -def handleSubFile (filename, fetch_ids = False): +def handleSubFile (filename, fetch_ids = False, is_include=False): global toplevel_sources global infile cdir = os.path.dirname (infile["infile"]) - filename = os.path.join (cdir, infile["file_prefix"], filename) + if (is_include): + filename = os.path.join (cdir, filename) + else: + filename = os.path.join (cdir, infile["file_prefix"], filename) if (not os.path.isfile (filename)): - sys.stderr.write (getFileContext (node) + " WARNING: File " + filename + " does not exist\n") + sys.stderr.write (" WARNING: File " + filename + " (referenced from " + infile["infile"] + ") does not exist\n") return xmldoc = parseFile (filename) if (xmldoc.documentElement.hasAttribute ("po_id") and (xmldoc.documentElement.getAttribute ("po_id") != current_po_id)): @@ -424,8 +432,11 @@ def handleSubFile (filename, fetch_ids = False): infile["infile"] = filename infile["file_prefix"] = xmldoc.documentElement.getAttribute ("base_prefix") infile["caption"] = getFileCaption (xmldoc.documentElement, oldinfile["caption"]) - if (fetch_ids): - infile["id_labels"] = getElementLabelsRecursive (xmldoc.documentElement) + if (fetch_ids or is_include): + if (is_include): + infile["id_labels"].update (getElementLabelsRecursive (xmldoc.documentElement).items ()) + else: + infile["id_labels"] = getElementLabelsRecursive (xmldoc.documentElement) handleNode (xmldoc.documentElement) infile = oldinfile |
From: Thomas F. <tho...@ru...> - 2014-12-04 20:25:45
|
Git commit b357a4fab49e77e8ba54d932c1843e7d06c10730 by Thomas Friedrichsmeier. Committed on 04/12/2014 at 20:24. Pushed by tfry into branch 'master'. Keep xgettext from assuming c-format on strings containing '%'. There are no c-format strings in rkward plugins. M +9 -4 scripts/update_plugin_messages.py http://commits.kde.org/rkward/b357a4fab49e77e8ba54d932c1843e7d06c10730 diff --git a/scripts/update_plugin_messages.py b/scripts/update_plugin_messages.py index d408477..7f5ecaa 100755 --- a/scripts/update_plugin_messages.py +++ b/scripts/update_plugin_messages.py @@ -124,6 +124,11 @@ def getFileContext (element, attribute=""): tag_stack = [tag_stack[0], "[...]"] + tag_stack[-2:] return (ret + ' '.join (tag_stack) + refer_to) +def writeouti18n (call): + if (call.find ("%") >= 0): + outfile.write ("/* xgettext:no-c-format */ ") + outfile.write (call + "\n") + def quote (text): text = HTMLParser.HTMLParser ().unescape (text) # unescape character entities, Qt does so while parsing the xml return "\"" + text.replace ("\\", "\\\\").replace ("\"", "\\\"") + "\"" @@ -180,9 +185,9 @@ def handleNode (node): if (node.hasAttribute ("i18n_context")): context = node.getAttribute ("i18n_context") if (context != ''): - outfile.write ("i18nc (" + quote (context) + ", " + quote (attrv) + ");\n") + writeouti18n ("i18nc (" + quote (context) + ", " + quote (attrv) + ");") else: - outfile.write ("i18n (" + quote (attrv) + ");\n") + writeouti18n ("i18n (" + quote (attrv) + ");") if (node.hasAttribute ("file")): filename = node.getAttribute ("file") if (filename.endswith (".js")): @@ -199,7 +204,7 @@ def handleNode (node): for chunk in textchunks: if (chunk != ""): outfile.write (getI18nComment (node)) - outfile.write ("i18n (" + quote (normalize (chunk)) + ");\n") + writeouti18n ("i18n (" + quote (normalize (chunk)) + ");") elif (getText (node) != ""): sys.stderr.write ("WARNING: Found text content where none expected: " + getFileContext (node) + "\n") if (not ((node.nodeType == node.ELEMENT_NODE) and (node.tagName in text_containers))): @@ -396,7 +401,7 @@ def handleJSChunk (buf, filename, offset, caption): call = "i18nc" # for xgettext parameters = parameters.replace ('(', '("R code comment", ', 1) text += call + normalizeQuotes (parameters) + ";\n" - outfile.write (text) + writeouti18n (text) # When we encounter a "file"-attribute, we generally dive right into parsing that file, i.e. we do depth first # Advantage is that strings in all files belonging to one plugin will be in direct succession in the .pot file |
From: Thomas F. <tho...@ru...> - 2014-12-04 20:25:43
|
Git commit e43d0cdae25aa290d8c0b86cf3068430a8f1249b by Thomas Friedrichsmeier. Committed on 04/12/2014 at 18:07. Pushed by tfry into branch 'master'. Add an example on when R_ParseVector does not return M +1 -0 rkward/rbackend/rkrbackend.cpp http://commits.kde.org/rkward/e43d0cdae25aa290d8c0b86cf3068430a8f1249b diff --git a/rkward/rbackend/rkrbackend.cpp b/rkward/rbackend/rkrbackend.cpp index 7e74b6a..2656a04 100644 --- a/rkward/rbackend/rkrbackend.cpp +++ b/rkward/rbackend/rkrbackend.cpp @@ -1140,6 +1140,7 @@ SEXP parseCommand (const QString &command_qstring, RKRBackend::RKWardRError *err SET_STRING_ELT(wrap.cv, 0, Rf_mkChar(command)); // Yes, if there is an error in the parse, R does jump back to toplevel! + // trying to parse list(""=1) is an example in R 3.1.1 R_ToplevelExec (safeParseVector, &wrap); SEXP pr = wrap.pr; UNPROTECT(1); |
Hi, On Thursday 04 December 2014 14:41:01 m. eik michalke wrote: > oops, setting an empty label for <browser> also made .addFromUI() produce an > empty variable name and by that an infinte loop. hm. Two issues, here: 1) When parsing a command like list(""=1) R seems to resort to a strange hack to make this fail. In essence, this causes R to jump back to its top-level loop, while we did not expect it (other parse errors are handled in a less drastic manner). Should now be fixed, i.e. only a regular error, not RKWard going into an endless loop. Fortunately this only affected commands that are _not_ treated as user-commands in RKWard. 2) I got confused about where the label comes from. What I meant to suggest was rather: Keep the label on the <browser>, drop the "Save to"-label from the <frame> around it. That would allow you to continue using addFromUI(). However, it really does not matter, either way. Regards Thomas |
From: Yuri C. <yu...@uk...> - 2014-12-04 17:55:32
|
Git commit 64f78f092870105ee702e0c7404391ffd9579908 by Yuri Chornoivan. Committed on 04/12/2014 at 17:54. Pushed by yurchor into branch 'master'. Fix typos M +1 -1 rkward/plugins/analysis/moments/moment.rkh M +1 -1 rkward/plugins/analysis/t_test.rkh http://commits.kde.org/rkward/64f78f092870105ee702e0c7404391ffd9579908 diff --git a/rkward/plugins/analysis/moments/moment.rkh b/rkward/plugins/analysis/moments/moment.rkh index a7f5b71..0f2692d 100644 --- a/rkward/plugins/analysis/moments/moment.rkh +++ b/rkward/plugins/analysis/moments/moment.rkh @@ -5,7 +5,7 @@ This test computes the sample moment of specified order. </summary> <usage> -Choose the data to computes the sample moments. You can choose multiple data. See <link href="rkward://rhelp/moment"/>. +Choose the data to compute the sample moments. You can choose multiple data. See <link href="rkward://rhelp/moment"/>. </usage> <settings> diff --git a/rkward/plugins/analysis/t_test.rkh b/rkward/plugins/analysis/t_test.rkh index ea204e8..e9a1747 100644 --- a/rkward/plugins/analysis/t_test.rkh +++ b/rkward/plugins/analysis/t_test.rkh @@ -5,7 +5,7 @@ t-Test (two variable paired or independent samples, or one variable). </summary> <usage> -Choose two numeric vectors or one vector an a constant to compare against each other. For two samples, specify whether the variables are paired or independent samples. For details, see below. +Choose two numeric vectors or one vector and a constant to compare against each other. For two samples, specify whether the variables are paired or independent samples. For details, see below. </usage> <settings> |
From: Thomas F. <tho...@ru...> - 2014-12-04 16:46:20
|
Git commit 2988466a099adb0fca39ef79588016db90cbd760 by Thomas Friedrichsmeier. Committed on 04/12/2014 at 16:44. Pushed by tfry into branch 'master'. Don't get all confused, in an error (not strictly syntax error) makes R jump straight out of R_ParseVector to toplevel REPL. M +25 -11 rkward/rbackend/rkrbackend.cpp http://commits.kde.org/rkward/2988466a099adb0fca39ef79588016db90cbd760 diff --git a/rkward/rbackend/rkrbackend.cpp b/rkward/rbackend/rkrbackend.cpp index 2158eb1..7e74b6a 100644 --- a/rkward/rbackend/rkrbackend.cpp +++ b/rkward/rbackend/rkrbackend.cpp @@ -1114,34 +1114,48 @@ void RKRBackend::enterEventLoop () { // NOTE: Do NOT run Rf_endEmbeddedR(). It does more that we want. We rely on RCleanup, instead. } +struct SafeParseWrap { + SEXP cv; + SEXP pr; + ParseStatus status; +}; + +void safeParseVector (void *data) { + SafeParseWrap *wrap = static_cast<SafeParseWrap*> (data); + wrap->pr = 0; + // TODO: Maybe we can use R_ParseGeneral instead. Then we could find the exact character, where parsing fails. Nope: not exported API + wrap->pr = R_ParseVector (wrap->cv, -1, &(wrap->status), R_NilValue); +} + SEXP parseCommand (const QString &command_qstring, RKRBackend::RKWardRError *error) { RK_TRACE (RBACKEND); - ParseStatus status = PARSE_NULL; - SEXP cv, pr; + SafeParseWrap wrap; + wrap.status = PARSE_NULL; QByteArray localc = RKRBackend::this_pointer->current_locale_codec->fromUnicode (command_qstring); // needed so the string below does not go out of scope const char *command = localc.data (); - PROTECT(cv=Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(cv, 0, Rf_mkChar(command)); + PROTECT(wrap.cv=Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(wrap.cv, 0, Rf_mkChar(command)); - // TODO: Maybe we can use R_ParseGeneral instead. Then we could find the exact character, where parsing fails. Nope: not exported API - pr=R_ParseVector(cv, -1, &status, R_NilValue); + // Yes, if there is an error in the parse, R does jump back to toplevel! + R_ToplevelExec (safeParseVector, &wrap); + SEXP pr = wrap.pr; UNPROTECT(1); if ((!pr) || (TYPEOF (pr) == NILSXP)) { // got a null SEXP. This means parse was *not* ok, even if R_ParseVector told us otherwise - if (status == PARSE_OK) { - status = PARSE_ERROR; + if (wrap.status == PARSE_OK) { + wrap.status = PARSE_ERROR; printf ("weird parse error\n"); } } - if (status != PARSE_OK) { - if ((status == PARSE_INCOMPLETE) || (status == PARSE_EOF)) { + if (wrap.status != PARSE_OK) { + if ((wrap.status == PARSE_INCOMPLETE) || (wrap.status == PARSE_EOF)) { *error = RKRBackend::Incomplete; - } else if (status == PARSE_ERROR) { + } else if (wrap.status == PARSE_ERROR) { //extern SEXP parseError (SEXP call, int linenum); //parseError (R_NilValue, 0); *error = RKRBackend::SyntaxError; |