[Monkey] [HTML5] GetChar liefert keine Umlaute

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

Ratchet

Betreff: [HTML5] GetChar liefert keine Umlaute

BeitragMi, Jul 20, 2016 7:25
Antworten mit Zitat
Benutzer-Profile anzeigen
GetChar gibt keine Umlaute zurück. Der Beispielcode aus der Hilfe zu GetChar zeigt dies ganz klar.

BlitzMax: [AUSKLAPPEN]
Import mojo

Class MyApp Extends App

Field text$="Type something:"

Method OnCreate()
SetUpdateRate 30
End

Method OnUpdate()
Repeat
Local char=GetChar()
If Not char Exit
If char>=32
text+=String.FromChar( char )
EndIf
Forever
End

Method OnRender()
Cls
DrawText text,0,0
End
End

Function Main()
New MyApp
End
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

Farbfinsternis

BeitragMi, Jul 20, 2016 10:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat nichts mit Monkey zu tun, sondern mit dem Umstand dass die JavaScript Methode String.fromCharCode() nicht in der Lage ist ein komplettes UTF-8 zurückzugeben. Ein Umstieg auf MonkeyX Pro wird heir auch nichts bringen, da dort dieselbe Methode verwendet wird.

Teilweise Lösung:
Folgenden JavaScript Code als getChar.js sichern...
Code: [AUSKLAPPEN]

function fromCode(c){
   return String.fromCodePoint(c);
}


Hier der Code der teilweise mit obigem Script funktioniert:
BlitzBasic: [AUSKLAPPEN]

#If LANG="js"
Import "getChar.js"
#EndIf

Import mojo

Class MyApp Extends App

Field Text$="Type something:"

Method OnCreate()
SetUpdateRate 30
End

Method OnUpdate()
Repeat
Local char=GetChar()
If Not char Exit

If char>=32
Local utf8:String = FromCode(char)
Print utf8
Text+= FromCode(char) 'String.FromChar( char )
EndIf
Forever
End

Method OnRender()
Cls
DrawText Text,0,0
DrawText "ÄÖÜäöü", 0, 10
End
End

Function Main()
New MyApp
End

Extern

Function FromCode:String(char:Int) = "fromCode"

In der Konsole siehst Du dass die Zeichen jetzt korrekt zurückgegeben werden. Allerdings hast Du weiterhin das Problem dass DrawText den originalen Bitmapfont (mojo_font.png) verwendet, in welchem keine Sonderzeichen existieren.

Hier bleibt Dir nur der Umweg über ein Third-Party Modul wie AngelFont.

Ratchet

BeitragDo, Jul 21, 2016 7:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, werde ich testen. Für die Textausgabe nutze ich eh GLText aus dem Diddy-Modul, daher sollte die reine Darstellung von Umlauten kein Problem sein.

Unterstützen andere Targets denn UTF-8?

EDIT: Funktioniert leider nicht, es kommen trotzdem keine Umlaute an. GetChar gibt ja schon keinen Code zurück bzw 0, wenn ich einen Umlaut tippe.

NOCHMAL EDIT: Ich habe jetzt im Template des HTML5 Targets in der html5game.js die letzte Zeile in canvas.onkeydown auskommentiert, dann bekomme ich auch meine Umlaute:

Code: [AUSKLAPPEN]
   canvas.onkeydown=function( e ){
      game.KeyEvent( BBGameEvent.KeyDown,e.keyCode );
      var chr=keyToChar( e.keyCode );
      if( chr ) game.KeyEvent( BBGameEvent.KeyChar,chr );
      //if( e.keyCode<48 || (e.keyCode>111 && e.keyCode<122) ) eatEvent( e );
   }


Die Logik dahinter verstehe ich eh nicht ganz. Das < 48 (0) kann ich ja noch verstehen, aber warum > 111 (o) und < 122 (z)?
Warum zwischen o - z (111 - 122)?
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

Farbfinsternis

BeitragDo, Jul 21, 2016 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code den Du da zeigst ist das Ende der Kette. Ganz am Anfang steht eine JavaScript Funktion in \modules\monkey\native\lang.js. Dort wird die Javascript String-Methode fromCharCode verwendet welche keine Umlaute liefert.

Mein Beispiel oben habe ich getestet und es funktioniert.
Farbfinsternis.tv

Ratchet

BeitragFr, Jul 22, 2016 7:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist Firefox. Der behandelt die onKeyPress, onKeyDown und onKeyUp Events anders als IE oder andere.

Sehr schön zu testen hier -> http://www.asquare.net/javascr...yCode.html

In Safari klappt dein Code nämlich tatsächlich. Ist aber doof, wenn nur meine Firefox-User keine Umlaute eintippen können :/
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

Farbfinsternis

BeitragFr, Jul 22, 2016 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Problem gelöst:

Javascript:
Code: [AUSKLAPPEN]

var lastKey = '';

window.addEventListener('load', function(){
   document.addEventListener('keyup', function (e) {
      lastKey = e.key;
   });
});

function getKeyChar(){
   var result = lastKey;
   lastKey = '';
   
   return result;
}


Monkey:
Code: [AUSKLAPPEN]

#If LANG="js"
   Import "getChar.js"
#EndIf

Import mojo

Class MyApp Extends App

   Field text$="Type something:"

   Method OnCreate()
      SetUpdateRate 30
   End
   
   Method OnUpdate()
      Repeat
         Local char:String = KeyChar()
         If Not char Exit
         
         text+= char
         Print char
      Forever
   End
   
   Method OnRender()
      Cls
      DrawText text,0,0
   End
End

Function Main()
   New MyApp
End

Extern

Function KeyChar:String() = "getKeyChar"
Farbfinsternis.tv

Ratchet

BeitragMo, Jul 25, 2016 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert unter Firefox nicht
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

kog

BeitragDi, Aug 02, 2016 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde den keyCode oder charCode aus dem Event nutzen, vielleicht funktioniert es dann?
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group