Seite 1 von 9

PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 21:51
von Kiffi
Hallo,

für ein Projekt (nennen wir es mal PB2Web) suche ich noch helfende Köpfe und Hände.

Ziel des Projektes ist es, PureBasic-Programme in Browsern laufen lassen zu können.

Dabei ist die Idee, für jeden(*) PB-Befehl ein entsprechendes JavaScript-Pendant zu
schreiben, damit ein (noch zu schreibender) Parser möglichst wenig Code wandeln muss.

Ich arbeite derzeit an der Umsetzung von Windows- und Gadget-Befehlen.
(siehe auch hier: http://www.purebasic.fr/german/viewtopi ... 63#p311963.)

Ein Fenster öffnet man z.B. so:

Code: Alles auswählen

frmPanelGadget = OpenWindow(PB_Any, PB_Ignore, PB_Ignore, 600, 400, "PanelGadget-Example", PB_Window_SystemMenu | PB_Window_ScreenCentered);
Bis auf die nicht vorhandenen Rautenzeichen (#) ist der Aufruf somit in JavaScript identisch.

Bis zur 'Serienreife' ist es aber noch ein langer Weg. Wie schon oben erwähnt
muss ein Großteil der PB-Befehle in entsprechendes JavaScript umgesetzt werden.

Zum Beispiel wäre hier das JS-Pendant zur PB-Left-Funktion:

Code: Alles auswählen

// Result$ = Left(String$, Length)
function Left(String, Length) {
    return String.substring(0, String.length - Length);
}

alert(Left("Hello World!", 7));
Wichtig ist, dass sich das JavaScript möglichst 'originalgetreu' verhält.

Ist keine Raketentechnik, sondern 'nur' ziemlich viel Fleißarbeit.

Mein Aufruf an Euch: Wann immer Ihr ein wenig Zeit und Muße habt,
könnt Ihr gerne den einen oder anderen Befehl übersetzen und hier
posten. Je mehr mitmachen, desto schneller kommen wir ans Ziel.

(*): natürlich nur PB-Befehle, die im Client ausgeführt werden können
(also keine Datenbank-, Datei- und ähnliche Befehle)

Danke im voraus & Grüße ... Kiffi

// Edit:

Was wir bisher schon haben, kann man hier nachlesen:

[Link entfernt erste Beta folgt...]

--

Wer PB-Konstanten benötigt: [Link entfernt erste Beta folgt...]

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 21:56
von RSBasic
Klingt toll. Ich würd gerne mitmachen, aber ich kann aufgrund des Zeitmangels nicht allzu viel umsetzen.
Wenn ich mal Zeit habe, werde ich hier was posten. ;)
Ansonsten gutes Gelingen an alle. :allright:

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 22:03
von RSBasic
Da du meinen Beitrag bereits gelesen hast, muss ich wohl (leider) einen Doppelpost machen. :D
Mir ist noch was eingefallen und zwar wäre es vorteilhaft, wenn im Eingangspost eine Art Tabelle oder eine reine Auflistung aller PB-Funktionen vorhanden ist, damit man leicht und schnell nachschauen kann, welche Funktion bereits umgesetzt wurde und welche noch nicht.

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 22:10
von Kiffi
RSBasic hat geschrieben:aber ich kann aufgrund des Zeitmangels nicht allzu viel umsetzen.
muss ja auch nicht. Ein Schnippselchen zwischendurch (wenn man
mal ganz viel Langeweile hat) reicht vollkommen aus. Wenn viele
mitmachen, kommt auch schnell was zusammen.
RSBasic hat geschrieben:wäre es vorteilhaft, wenn im Eingangspost eine Art Tabelle oder eine reine Auflistung aller PB-Funktionen vorhanden ist, damit man leicht und schnell nachschauen kann, welche Funktion bereits umgesetzt wurde und welche noch nicht.
gute Idee! :allright:

Hier nochmal Left() und Right():

Code: Alles auswählen

// Result$ = Right(String$, Length)
function Right(String, Length){
  return String.slice( -( Length ) );
}

// Result$ = Left(String$, Length)
function Left(String, Length) {
  return String.slice( 0, Length );
}

alert(Right("Hello World!", 2));
alert(Left("Hello World!", 2));
Ich muss auch dazu sagen, dass ich noch ein JS-Anfänger bin (aber ich gebe
mir Mühe ;-)). Also nicht schimpfen, wenn ich seltsamen JS-Code poste! :D

Grüße ... Kiffi

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 22:34
von RSBasic
Mid():

Code: Alles auswählen

// Ergebnis$ = Mid(String$, StartPosition [, Länge])
function Mid(String, StartPos, Length) {
  return typeof(Length) == "undefined" ? String.substring(StartPos-1) : String.substring(StartPos-1, StartPos+Length-1 );
}

alert(Mid("Hello World!", 1, 3));
alert(Mid("Hello World!", 1));
CountString():

Code: Alles auswählen

// Ergebnis = CountString(String$, StringToCount$)
function CountString(String, StringToCount) {
  return String.split(StringToCount).length-1;
}

alert(CountString("How many 'ow' contains Bow ?", "ow"));

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 22:54
von Kiffi
@RSBasic: :allright:

Hier noch mal was Aktuelles zum gucken: [Link entfernt]

Grüße ... Kiffi

Edit: Link entfernt. Beta-Ankündigung folgt...

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 22:55
von Derren
StringField():

Code: Alles auswählen

function StringField(string, index, separator){
	return string.split(separator)[index-1];
}

for (var k=1;k<=6;k++) //Beispiel aus der PB Hilfe
{
	alert(StringField("Hello I am a splitted string", k, " "));
}
Mid():
JavaScript unterstützt keine optionalen Parameter. Zumindest nicht in der gängigen Definition function(var=1).
Funktionsname.arguments.lenght gibt die Anzahl der übergebenen Parameter zurück. Somit lässt sich ermitteln, ob der optinale Parameter Lenght übergeben wurde, oder nicht. Falls nicht, wird Length die Länge des übergebenen Strings zugeteilt.
edit: Uuuh, RSBasic, Tertiärer Operator. Das ist natürlich eleganter als ein krudes If/Else. Wenn sich ein PBler aber mal den Parser anschauen möchte hat er es mit If/Else wahrscheinlich leichter alles zu verstehen.

Code: Alles auswählen

function Mid(String, Start, Length){
	if (Mid.arguments.length==2){ Length= String.length; }	
	return String.substr(Start-1, Length);
}

alert(Mid("Hello", 2))    // wird "ello" anzeigen
alert(Mid("Hello", 2, 1)) // wird "e" anzeigen

LCase() & Ucase()

Code: Alles auswählen

function LCase(string){
	return string.toLowerCase();
}

function UCase(string){
	return string.toUpperCase();
}

alert(LCase("Alles Klein gesChrIeBen"));
alert(UCase("Alles Groß gesChrIeBen")); //Hier wird wohl versucht das neue große "ß" auszugeben. 
										//Mein Browser zeigt allerdings nur Murks an. Evtl. eine Weiche einbauen?
Len():

Code: Alles auswählen

function Len(string){
	return string.length;
}

alert(Len("Hallo")); //5
alert(Len("Hallo Welt")); //10
Chr() & Asc()

Code: Alles auswählen

function Chr(number){
	return String.fromCharCode(number)
}

function Asc(c){
	return c.charCodeAt(0)
}

alert(Chr(33));
alert(Asc("!"));

FindString():

Code: Alles auswählen

function FindString(Haystack, Needle, StartPosition, Modus){ //FindString(String$, SuchString$ [, StartPosition [, Modus]])
	if (FindString.arguments.length<4) {Modus = PB_String_CaseSensitive; } //CaseSensitive ist Standardmodus	
	if (FindString.arguments.length==2){ StartPosition=0; }  else { StartPosition-1;}	//Startposition is standardmäßig 0. "-1", weil PB bei 1 anfängt und JS bei 0
	
	switch (Modus){
		case PB_String_NoCase:
			Haystack=Haystack.toLowerCase(); 
			return Haystack.substr(StartPosition, Haystack.length).indexOf(Needle.toLowerCase())+StartPosition+1;			
		break;	
		
		default:
			return Haystack.substr(StartPosition, Haystack.length).indexOf(Needle)+StartPosition+1;
		break;
	}	
}

alert(FindString("Purebasic,Bas", "Bas")); // wird 11 ausgeben, da Case Sensitive Standard option ist
alert(FindString("Bas456789Bas", "bAs",7,PB_String_NoCase)); // wird 10 ausgeben
Wie handlest du Konstanten? Der Modus #PB_String_CaseSensitive/ #PB_String_NoCase fehlt hier noch. Das ist eine einfache If-Abfrage, aber ich weiß nicht welchen Input ich erwarten soll.
edit: OK. FindString angepasst. Es muss darauf geachtet werden dass die Konstanten auch definiert sind. Ansonsten klappt das nicht. Evtl sollte man die Funktion mit RSBasic's if (typeof(Param)=='undefined') erweitern.



Ich editier hier fleißig weiter^^

InsertString()

Code: Alles auswählen

function InsertString(String, Insert, Position){
	return String.substring(0,Position-1) + Insert + String.substr(Position-1, String.length);
}

alert (InsertString("Hello !", "World", 7))  ; //Wird "Hello World!" anzeigen
alert (InsertString("Hello !", "World", 1))  ; //Wird "WorldHello !" anzeigen

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 23:29
von Kiffi
@Derren: Super! :D

die Konstanten und deren Werte findest Du hier: [Link entfernt]

(einfach nur das '#' - Zeichen weglassen)

Grüße ... Kiffi

Edit: Link entfernt. Beta-Ankündigung folgt...

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 23:35
von Derren
Ja habe es grade in deiner constants.js gesehen. Allerdings solltest du das Schlüsselwort const verwenden, anstatt var. Dann kann niemand die Konstanten überschreiben, z.B. falls jemand selbst Hand an den JS Code legen möchte, aber nicht weiß, dass If-Abfrage == benötigen und mit = einfach ein neuer Wert zugewiesen wird und If() somit immer True ergibt.

Code: Alles auswählen

var PB_Konstante1 = 1;
const PB_Konstante2 = 1;

PB_Konstante1 = 4;
PB_Konstante2 = 4;

alert (PB_Konstante1 + ' << sollte 1 sein');
alert (PB_Konstante2 + ' << sollte 1 sein');

Re: PB2Web: Mitstreiter gesucht

Verfasst: 23.05.2013 23:52
von Kiffi
Derren hat geschrieben:Allerdings solltest du das Schlüsselwort const verwenden, anstatt var.
würde ich nur zu gerne. Allerdings haben ältere Browser (der IE sowieso) damit Schwierigkeiten.

Guckstu hier: https://developer.mozilla.org/de/docs/J ... ents/const

Grüße ... Kiffi