PB2Web: Mitstreiter gesucht

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

PB2Web: Mitstreiter gesucht

Beitrag 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...]
Zuletzt geändert von Kiffi am 29.12.2013 20:12, insgesamt 5-mal geändert.
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB2Web: Mitstreiter gesucht

Beitrag 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:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB2Web: Mitstreiter gesucht

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web: Mitstreiter gesucht

Beitrag 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
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB2Web: Mitstreiter gesucht

Beitrag 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"));
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web: Mitstreiter gesucht

Beitrag von Kiffi »

@RSBasic: :allright:

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

Grüße ... Kiffi

Edit: Link entfernt. Beta-Ankündigung folgt...
Zuletzt geändert von Kiffi am 29.12.2013 20:38, insgesamt 1-mal geändert.
Hygge
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB2Web: Mitstreiter gesucht

Beitrag 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
Zuletzt geändert von Derren am 24.05.2013 00:08, insgesamt 2-mal geändert.
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web: Mitstreiter gesucht

Beitrag 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...
Zuletzt geändert von Kiffi am 29.12.2013 20:39, insgesamt 1-mal geändert.
Hygge
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB2Web: Mitstreiter gesucht

Beitrag 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');
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web: Mitstreiter gesucht

Beitrag 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
Hygge
Antworten