You are not logged in.

  • Login

1

Sunday, December 4th 2011, 4:15pm

BBCode sqf Scriptformat, Woltlab Forum

Hallo,

hoffe meine Fragen sind hier erwünscht und auch im richtigen Forum.

Folgendes:
Ich betreibe eine (kleine) Editing und Scripting Supportseite für einen Taktikshooter bzw. Militärsimulation, es geht also vorwiegend um den Austausch und die Darstellung von Code im Forum. :)
Das Spiel bzw. die Gameengine benutzt eine spezielle Scriptsprache (.sqf), die sich stark an c++ orientiert.
Nun würde ich gerne einen BBCode für dieses .sqf Scriptformat erstellen, mit speziellem Syntaxhighlighting und einer Tooltipanzeige via mouseover. Ich muss aber gleich dazusagen, dass ich keinen Schimmer hab wie ich sowas am Besten anfange.

Was Coding generell angeht bin ich kein absoluter Noob, jedoch sind sql, php absolutes Neuland für mich. Vielleicht mag mich ja jemand auf dem Weg zum .sqf BBCode begleiten ?

2

Sunday, December 4th 2011, 5:12pm

Also im speziellen geht es ja um BBCodes für das Woltlab Burning Board.

Du musst also zum einen Wissen wie du ein Plugin für das Burning Board entwickelst, zum anderen wie du den Parser schreibst.
Deswegen solltest du das ganze auch in zwei Milestones angehen

Suche dir ein existierendes Plugin, das schon nahe an dem dran ist, was du kennst.
Nehmen wir zum Beispiel den Spoile BBCode, das ist von RouL, der schreibt gute Plugins
http://www.woltlab.com/de/pluginstore/pl…tml?pluginID=15

Du lädst dir die Datei also herunter und entpackst sie.
Dann änderst du die package.xml ab und packst einen Paketnamen in die Datei.
Nun kannst du sie wieder als Archiv packen und über den Woltlab Admin installieren.

Nächster Schritt: Syntax Highlighting.
Während der Entwicklung musst du das Paket immer wieder deinstallieren, neu packen und wieder installieren.
Schau dir die einzige enthaltene PHP Datei an, dort muss dein Parser rein. Du kannst dir den HTMLParser mal als Vorlage anschauen.
Alternativ halte mal GeSHi ausschau.

Feinschliff:
bbcode.xml und grafiken austauschen.

3

Sunday, December 4th 2011, 9:27pm

In den Dokumentationen von Woltlab findest du auch noch einige weitere Hinweise zu Plugins usw.

http://www.woltlab.com/de/support/documentations.html

4

Monday, December 5th 2011, 9:50am

Hallo,

vielen Dank für die Antworten und auch für die Anpassung des Threadnamens, hätte ich erwähnen müssen das es für Woltlab Board ist, klar :)

Ich habe schon diverse Sachen ausprobiert, unter anderem auch den BBCode für c++ von Jenso versucht für mich zu zerlegen, um da evtl. spicken zu können. Auch das c++ Plugin ist abhängig von GeSHi, welches im Woltlab Board ja auch standartmäßig beiliegt.

Leider habe ich keinen Plan wie ich Anfangen soll. ?(

Um die Scriptbefehle der Gameengine eigenen Scriptsprache highlighten zu können, müsste doch auch GeSHi um jene erweitert werden, oder? Ich denke ich werde die Umsetzung ohne Hilfe nicht hinbekommen, da es mir am nötigen Wissen fehlt.

5

Monday, December 5th 2011, 9:06pm

Hast du dich an meinen 2 Phasen Plan gehalten und bist mit Phase 1 fertig?

Wenns es nur noch an der Sprache liegt, hast du dir die GeSHi Syntax Dateien mal angeschaut. Die sind gar nicht so kompliziert.
Und poste doch mal ein Beispielcode. Bestimmt orientiert sich SQF an anderen Sprachen und ist zum großen Teil schon dadurch abgedeckt.

Lg

6

Tuesday, December 13th 2011, 3:46pm

Hallo Torben,

die sqf Syntax der ArmA 2 Engine ist mit c /c++ verwandt, teilweise werden entsprechende Befehle durch das c++ plugin auch abgedeckt. Es sind jedoch eine Vielzahl von engineeigenen Scriptbefehlen, die ich highlighten möchte. Eine liste der ArmA 2 Scriptbefehle und eine Übersicht über das ArmA 2 scripten generell.

Es lassen sich preprozessor Commands ähnlich wie bei C++ verwenden.

Meine Fragestellung ist nach wie vor die, wohin mit den Scriptbefehlen? Wo müssen die reingepackt werden, um als "zu highlightendes Objekt" erkannt zu werden.

Ich habe mir das C++ BBCode Plugin von Jenso entpackt, ebenso das Plugin von GeSHi Team, und versucht aus der Struktur schlau zu werden, allerdings ohne Erfolg.

Beispielcode für sqf Syntax:

C# Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
   fFindNearEnemies.sqf
 
   Description / Beschreibung:
   returns all enemys of  unit within a distance
   gibt alle Feindeinheiten aus, welche in bestimmter Distanz zu einer bestimmten Einheit sind
 
   Parameters /Parameter:
   _this select 0:   unit (Object)
   _this select 1:   distance (Number) Optional
 
   initialisation / pre-compile:
   fFindNearEnemies = compile preprocessFileLineNumbers "fFindNearEnemies.sqf"
 
   exection / Aufruf:
   _nearEnemies = _recon call fFindNearEnemies
 
   Returns/Ausgabe:
   Array - enemy units
   Array - Feindeinheiten
 
*/
private ["_unit", "_dist", "_nearUnits", "_nearEnemies"];
_unit = _this select 0;
_dist = viewdistance;
/*_dist = _this select 1;*/ //optinal, default is viewdistance
_nearUnits = nearestObjects [_unit, ["LandVehicle", "CAManBase"], _dist];
_nearEnemies = [];
{
   if ((alive _x) && ((side _x) getFriend (side _unit) < 0.6) && (_x != _unit)) then
   {
      _nearEnemies set [count _nearEnemies, _x];
   };
} foreach _nearUnits;
/*return / Ausgabe*/
_nearEnemies


Vielen Dank für die bisherige Hilfestellung :)

7

Tuesday, December 13th 2011, 6:56pm

Meine Fragestellung ist nach wie vor die, wohin mit den Scriptbefehlen? Wo müssen die reingepackt werden, um als "zu highlightendes Objekt" erkannt zu werden.
Ich habe mir das C++ BBCode Plugin von Jenso entpackt, ebenso das Plugin von GeSHi Team, und versucht aus der Struktur schlau zu werden, allerdings ohne Erfolg.


Also wie gesagt, du musst folgendes ändern:
* package.xml -> <package name="com.woltlab.community.roul.bbcode.spoiler"
* bbcodes.xml -> <bbcode name="spoiler"> und <classname>SpoilerBBCode</classname>
* dann musst du die Klasse unter "files.tar > lib > data > message > bbcode > SpoilerBBCode" entsprechend umbenennen

auch den Inhalt musst du ändern:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
	 * @see BBCode::getParsedTag()
	 */
	public function getParsedTag($openingTag, $content, $closingTag, BBCodeParser $parser) {
		return $this->getHighlighted($content);
	}
 
	private function getHighlighted($content) {
 
		// hier stattdessen code highlighting machen
		$content = htmlentities($content);
 
		return $content;
	}

Similar threads

Social bookmarks