WebDialog encoding bug found!
-
@driven said:
... and a question? Is there code to get the Windows operating system details?
Get the default system Encoding:
Encoding::find("filesystem")
or
Encoding::find("locale")
(On my machine it returns the
#<Encoding:Windows-1252>
object reference.)If you want the Windows version:
%x[ver]
On my machine it returns:
"Microsoft Windows [Version 6.1.7601]"
XP is 5.1
Vista is 6.0
Win7 is 6.1What else do you want to know ?
-
@dan rathbun said:
What else do you want to know ?
does my last script run on your PC?
if swap these in, can you show me a screen shot?
a more complex input...@lang_hash = {'lid1'=> %Q(Γ©lan ε’γ Schwung ΠΈΠΌΠΏΡΠ»ΡΡ)} # I'm using a hash because it's what I use in my plugin...
and the widows versioning...
<p>Tested on #{RUBY_PLATFORM =~ /(darwin)/ ? ((%x(sw_vers).sub(/ProductName;/,'').sub(/ProductVersion;/,'').sub(/BuildVersion;/,'_'))) ; %x[ver]}</p>
also, did you try it without the fix? did you get both returns on v2014?
john
-
I had not actually run the code at all, before.
Here goes:@driven said:
..., did you try it without the fix? did you get both returns on v2014?
On SU2014, without the fix:
load "test/WebDialog_param_encoding_bug.rb" %(#004000)[true return using add_action_callback lid1 = Γ©lan return using get_element_value => Γ©lan]
- After hitting return the elements are NOT replaced in the WebDialog because
%(#8000BF)[element.textContent=]
does not work on MSIE.
You need a platform code branch and use%(#8000BF)[element.innerText=]
on PC.
On SU2014, WITH the fix, AFTER hitting return:
load "test/WebDialog_param_encoding_fix.rb" %(#004000)[true return using add_action_callback "lid1,\\u00E9lan \\uF8FF \\u00FCmlet" return using get_element_value => \u00E9lan \uF8FF \u00FCmlet]
First setting:
Encoding::default_internal="UTF-8" %(#404000)[UTF-8]
.. has not effect (no difference.) - After hitting return the elements are NOT replaced in the WebDialog because
-
With the two changes on SU2014.
Before hitting ENTER:
.. but when I click in the text control, and hit the END key, the ruby console shows:
%(#004000)[return using add_action_callback "lid1,\xC3\xA9lan \xE5\x8B\xA2\xE3\x81\x84 Schwung \xD0\xB8\xD0\xBC\xD0\xBF\xD1\x83\xD0\xBB\xD1\x8C\xD1\x81" return using get_element_value => Γ©lan ε’γ Schwung ΠΈΠΌΠΏΡΠ»ΡΡ]
After hitting ENTER:
.. and then the Ruby console shows:
%(#004000)[return using add_action_callback "lid1,\\u00E9lan \\u52E2\\u3044 Schwung \\u0438\\u043C\\u043F\\u0443\\u043B\\u044C\\u0441" return using get_element_value => \u00E9lan \u52E2\u3044 Schwung \u0438\u043C\u043F\u0443\u043B\u044C\u0441]
-
thanks dan
@unknownuser said:
You need a platform code branch and use element.innerText= on PC.
innerText works on mac, so I'll just change that...
can you run with the tweak...
and see if they show in the dialog...the extra // in your console return confuses me. I had to add more to escape ruby escaping javascript...
john
-
OK, that latest tweek, after hitting enter:
And the console, after hitting enter:
%(#004000)[load "test/show_encoding_issue.rb" true return using add_action_callback "lid1,\\u00E9lan \\u52E2\\u3044 Schwung \\u0438\\u043C\\u043F\\u0443\\u043B\\u044C\\u0441" return using get_element_value => \u00E9lan \u52E2\u3044 Schwung \u0438\u043C\u043F\u0443\u043B\u044C\u0441]
BTW.. if the WebDialog has focus after hitting ENTER, and I need to use the ALT key (for ALT+PrintScreen to copy the active window image to the clipboard, so I can save it from Paint.NET,) there is a whole bunch of repeated console output, like 15 times while I held the ALT key down.
-
yeh it works...
@dan rathbun said:
BTW.. if the WebDialog has focus after hitting ENTER, and I need to use the ALT key (for ALT+PrintScreen to copy the active window image to the clipboard, so I can save it from Paint.NET,) there is a whole bunch of repeated console output, like 15 times while I held the ALT key down.
with this should I just add a screen grab and dump it to desktop?
@dlg2.write_image(File.join((File.expand_path("~")), "Desktop", "dlg_test.png"))
what's the PC equiv...
EDIT: for completeness I'll add the unmodified pair back into the mix after sleep...
thanks again dan
john -
@driven said:
... should I just add a screen grab and dump it to desktop?
NO.
Replace the
%(#8000BF)[onkeydown=]
with:
%(#8000BF)[onkeyup=" if (event.keyCode == 13) { this.value=unicodeLiteral(this.value); trans_L8(); }"]
Notice that I enclose BOTH the following statements within a "curly block", so that the test only fires when ENTER key is released (after being pressed.)
The condition will not even be tested while any key is down, including any modifier key. -
FYI: I am one of those who hates programs putting stuff on MY Desktop.
-
@dan rathbun said:
FYI: I am one of those who hates programs putting stuff on MY Desktop.
so do I so I added it as a button...
NEW VERSION...
I split the input method to make it function the same in all versions of SU...
I can't get the raw code too display in the dialog, so here it is for v2014, the others are similarly wrong...
EDIT: made a small adjustment to get 'fixed' to display correctly [puts v p]true return using add_action_callback [id,value] "\xE2\x88\x9A\xC2\xA9lan \xC3\x82\xC3\xA3\xC2\xA2\xE2\x80\x9E\xC3\x85\xC3\x91 Schwung \xE2\x80\x93\xE2\x88\x8F\xE2\x80\x93\xC2\xBA\xE2\x80\x93\xC3\xB8\xE2\x80\x94\xC3\x89\xE2\x80\x93\xC2\xAA\xE2\x80\x94\xC3\xA5\xE2\x80\x94\xC3\x85" return using get_element_value => Γ©lan ε’γ Schwung ΠΈΠΌΠΏΡΠ»ΡΡ return using add_action_callback [id,value_fixed] \u00E9lan \u52E2\u3044 Schwung \u0438\u043C\u043F\u0443\u043B\u044C\u0441 return using get_element_value fixed => \u00E9lan \u52E2\u3044 Schwung \u0438\u043C\u043F\u0443\u043B\u044C\u0441
Please test the new script...with puts fix
john
-
Here are my PC results.
Win7 IE11.
Note how v2014 misses platform ?
Only the v8 Russian text seems to have a problem on get_element_value ??
-
Here you go.
I've got SU 7 Free, SU 8 Free, SU 2013 Trial, SU 2014 Trial
-
Sorry - missed clicking the button for SU 7
-
Thanks Tig and Garry,
from your images it appears that v8 had an issue with the standard call but shows correctly if SU is handed a Unicode charset string with it's separators gsub'd.
The ongoing v2014 (PC) handles both standard or 'fixed', where my mac's fail.
I'll write up a bug report for this, and at least I can now carry on with my language translator...
The only conditions, in this script, are for the 'extra' system info, which I won't need...
@garry, if you click into the text field, then hit return and then click the button, you'll see the default results as well...
I had to split them onto Two buttons for v8 to use the same code as the others...
john
-
Here are my results on SU14, Windows 7 64-bits, IE11
1) When starting Sketchup
2) After putting the focus in the field and typing Enter
Fredo
-
Thanks Fredo,
I updated the script since then to shows both the default and fixed returns...
the default shows with the return from the input box and the button shows the 'fix' i.e. Unicode literals with separators fixed...
on the PC it appears v8 may have an issue with the 'default' return for 'get_element_value' some of these chars, and mac has issues on all versions, but the Unicode literals appear to work on all, so far...
Thanks for taking the time.
-
Driven,
Here is the result with the updated script
1) Initial state
2) After hitting the button
Fredo
-
Sketchup 2014
Mac 10.9.2
testing text in Simplified Chinese
Advertisement