--- a/svghmi/svghmi.js Sun Feb 14 05:30:29 2021 +0100
+++ b/svghmi/svghmi.js Sun Feb 14 19:15:20 2021 +0100
@@ -1,9 +1,7 @@
var need_cache_apply = [];
function dispatch_value(index, value) {
let widgets = subscribers(index);
@@ -204,35 +202,42 @@
+function svg_text_to_multiline(elt) { + return(Array.prototype.map.call(elt.children, x=>x.textContent).join("\\\\n")); +function multiline_to_svg_text(elt, str) { + str.split('\\\\n').map((line,i) => {elt.children[i].textContent = line;}); function switch_langnum(langnum) {
if(langnum == current_lang) {
- for (let translation of translations) {
- let [objs] = translation;
- translation.push(Array.prototype.map.call(objs[0].children, x=>x.textContent).join("\\\\n"));
for (let translation of translations) {
let [objs, msgs, orig] = translation;
let msg = langnum == 0 ? orig : msgs[langnum - 1];
- msg.split('\\\\n').map((line,i) => {obj.children[i].textContent = line;});
+ multiline_to_svg_text(obj, msg); + obj.setAttribute("lang",langnum); +// backup original texts +for (let translation of translations) { + let [objs] = translation; + translation.push(svg_text_to_multiline(objs[0])); var lang_local_index = hmi_local_index("lang");
subscribers(lang_local_index).add({
indexes: [lang_local_index],
new_hmi_value: function(index, value, oldval) {
@@ -397,7 +402,6 @@
jumps_need_update = true;
jump_history.push([page_name, page_index]);
if(jump_history.length > 42)
--- a/svghmi/widget_display.ysl2 Sun Feb 14 05:30:29 2021 +0100
+++ b/svghmi/widget_display.ysl2 Sun Feb 14 19:15:20 2021 +0100
@@ -7,15 +7,20 @@
dispatch(value, oldval, index) {
this.fields[index] = value;
- this.element.textContent = this.args.length == 1 ? vsprintf(this.args[0],this.fields) : this.fields.join(' ');
+ this.request_animate(); template "widget[@type='Display']", mode="widget_defs" {
- if "$hmi_element[not(self::svg:text)]"
- error > Display Widget id="«$hmi_element/@id»" is not a svg::text element
+ const "format" optional_labels("format"); + const "has_format","string-length($format)>0"; + if "$hmi_element[not(self::svg:text)] and not($has_format)" + error > Display Widget id="«$hmi_element/@id»" must be a svg::text element itself or a group containing a svg:text element labelled "format" const "field_initializer" foreach "path" {
@@ -25,6 +30,28 @@
if "position()!=last()" > ,
| fields: [«$field_initializer»],
+ | if(this.format_elt.getAttribute("lang")) { + | this.format = svg_text_to_multiline(this.format_elt); + | this.format_elt.removeAttribute("lang"); + | let str = vsprintf(this.format,this.fields); + | multiline_to_svg_text(this.format_elt, str); + | let str = this.args.length == 1 ? vsprintf(this.args[0],this.fields) : this.fields.join(' '); + | multiline_to_svg_text(this.element, str); + | this.format = svg_text_to_multiline(this.format_elt); --- a/svghmi/widgets_common.ysl2 Sun Feb 14 05:30:29 2021 +0100
+++ b/svghmi/widgets_common.ysl2 Sun Feb 14 19:15:20 2021 +0100
@@ -65,6 +65,7 @@
emit "preamble:local-variable-indexes" {
var last_remote_index = hmitree_types.length - 1;
var next_available_index = hmitree_types.length;
@@ -95,6 +96,7 @@
var persistent_indexes = new Map();
var cache = hmitree_types.map(_ignored => undefined);
function page_local_index(varname, pagename){
let pagevars = hmi_locals[pagename];
@@ -155,11 +157,11 @@
for(let i = 0; i < this.indexes.length; i++) {
/* flush updates pending because of inhibition */
- let inhibition = this.inhibit[index];
+ let inhibition = this.inhibit[i]; if(inhibition != undefined){
clearTimeout(inhibition);
- this.lastapply[index] = undefined;
+ this.lastapply[i] = undefined; let index = this.indexes[i];
--- a/tests/svghmi_i18n/svghmi_0@svghmi/fr_FR.po Sun Feb 14 05:30:29 2021 +0100
+++ b/tests/svghmi_i18n/svghmi_0@svghmi/fr_FR.po Sun Feb 14 19:15:20 2021 +0100
@@ -5,8 +5,8 @@
-"POT-Creation-Date: 2021-01-22 10:38+CET\n"
-"PO-Revision-Date: 2021-01-22 10:39+0100\n"
+"POT-Creation-Date: 2021-02-14 18:36+CET\n" +"PO-Revision-Date: 2021-02-14 18:37+0100\n" @@ -14,9 +14,12 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: SVGHMI 1.0\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
+msgid "height is %d meters" +msgstr "la hauteur est de %d metres" msgid "This is an integer value : %d"
msgstr "C'est un nombre entier : %d"
--- a/tests/svghmi_i18n/svghmi_0@svghmi/messages.pot Sun Feb 14 05:30:29 2021 +0100
+++ b/tests/svghmi_i18n/svghmi_0@svghmi/messages.pot Sun Feb 14 19:15:20 2021 +0100
@@ -5,7 +5,7 @@
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2021-02-09 16:59+CET\n"
+"POT-Creation-Date: 2021-02-14 19:05+CET\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,6 +15,10 @@
"Generated-By: SVGHMI 1.0\n"
+#:svghmi.svg: format:text424 +msgid "height is %d meters" #:svghmi.svg: formatfortext:text5271
msgid "This is an integer value : %d"
--- a/tests/svghmi_i18n/svghmi_0@svghmi/sl_SI.po Sun Feb 14 05:30:29 2021 +0100
+++ b/tests/svghmi_i18n/svghmi_0@svghmi/sl_SI.po Sun Feb 14 19:15:20 2021 +0100
@@ -5,17 +5,21 @@
-"POT-Creation-Date: 2021-01-22 11:13+CET\n"
-"PO-Revision-Date: 2021-01-22 11:22+0100\n"
+"POT-Creation-Date: 2021-02-14 18:36+CET\n" +"PO-Revision-Date: 2021-02-14 18:38+0100\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: SVGHMI 1.0\n"
-"X-Generator: Poedit 2.3\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n%100<=4 ? 2 : 3);\n"
+"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n" +msgid "height is %d meters" +msgstr "To je celo število %d m" msgid "This is an integer value : %d"
msgstr "To je celo število %d"
--- a/tests/svghmi_i18n/svghmi_0@svghmi/svghmi.svg Sun Feb 14 05:30:29 2021 +0100
+++ b/tests/svghmi_i18n/svghmi_0@svghmi/svghmi.svg Sun Feb 14 19:15:20 2021 +0100
@@ -2415,12 +2415,12 @@
inkscape:document-units="px"
- inkscape:current-layer="hmi0"
+ inkscape:current-layer="g436"
- inkscape:cx="1015.4336"
- inkscape:cy="539.83485"
+ inkscape:zoom="0.70710678" + inkscape:cx="575.80285" + inkscape:cy="308.66839" inkscape:window-width="1939"
inkscape:window-height="844"
@@ -2613,4 +2613,20 @@
inkscape:transform-center-y="10.92088"
inkscape:label="button" />
+ inkscape:label="HMI:Display@/TARGETPRESSURE" + transform="translate(381.33428,-264.45794)"> + inkscape:label="_format" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="tspan438">height is %d meters</tspan></text>