Ik probeer een syntax highlighter te maken met PHP.
Het lukt me al aardig, maar ik vraag me steeds af is er geen betere manier?
Er zijn wat probleempjes met tabs en "Strings" of //Comments.

The moment we've all be waiting for..:
<?php

$LoopCount = 0;

function JassToSyntaxEnum( $Keyword, $Letter, $Word ) {
global $LoopCount;
$KeywordArray = explode( ",", $Keyword );
$LoopCount = $LoopCount + 1;
for ( $i = 0; $i < count( $KeywordArray ); $i++ ) {
if ( $KeywordArray[ $i ] == $Word ) {
$Output = $Output . "<font class=keyword".$Letter.">".$Word."</font> ";
$LoopCount = -10;
}
}
if ( $LoopCount == 3 ) { $Output = $Output . $Word . " "; }
return $Output; }

function JassToSyntax( $Input ) {
global $LoopCount;
$KeywordsA = "endglobals,globals,endfunction,function,if,then,endif,loop,endloop";
$KeywordsB = "takes,returns,return,local,constant,set,exitwhen";
$KeywordsC = "boolean,integer,real,string,event,player,widget,unit,destructable,item,ability,buff,force,group,trigger,triggercondition,triggeraction,timer,location,region,rect,boolexpr,sound,conditionfunc,filterfunc,unitpool,itempool,race,alliancetype,racepreference,gamestate,igamestate,fgamestate,playerstate,playerscore,playergameresult,unitstate,aidifficulty,eventid,gameevent,playerevent,playerunitevent,unitevent,limitop,widgetevent,dialogevent,unittype,gamespeed,gamedifficulty,gametype,mapflag,mapvisibility,mapsettings,mapdensity,mapcontrol,playerslotstate,volumegroup,camerafield,camerasetup,playercolor,placement,startlocprio,raritycontrol,blendmode,texmapflags,effect,effectype,wearhereffect,terraindeformation,fogstate,fogmodifier,dialog,button,quest,questitem,defeatcondition,timerdialog,leaderboard,multiboard,multiboarditem,trackable,gamecache,version,itemtype,texttag,attacktype,damagetype,weapontype,soundtype,lightning,pathingtype,image,ubersplat";
$InputArray = explode( " ", $Input );
for ( $i = 0; $i < count($InputArray); $i++ ) {
$Output = $Output . JassToSyntaxEnum( $KeywordsA, "A", $InputArray[ $i ] );
$Output = $Output . JassToSyntaxEnum( $KeywordsB, "B", $InputArray[ $i ] );
$Output = $Output . JassToSyntaxEnum( $KeywordsC, "C", $InputArray[ $i ] );
$LoopCount = 0;
}
return $Output; }

echo JassToSyntax( "function Meh takes nothing returns boolean <br>\n local unit u = GetTriggerUnit() <br>\n return true <br>\n endfunction <br>\n" );
?>

Zoals ik al zei, het werkt maar ik denk dat er betere en andere manieren voor zijn.
Heeft 1 van jullie meschien een goede tip?
Ik denk dat het het makkelijkste gaat met een tokenizer, een soort van algoritme dat de lexicon ontleedt. Simpeler gezegd: een stel regular expressions of een lus die de code doorloopt en kijkt wat wat is, die snapt wat er staat. En die zijn best lastig te maken.

Je kan ook gewoon op safe spelen en kijken wie er al eentje heeft gemaakt.
De programeer taal die ik propeer te ontleden is Jass2.
Niet bekent, maar het word gebruikt als scripting language in games van Blizzard Entertainment ( wc3, wc3tft ).
Dus om google door te zoeken voor dat, zal geen enkel resultaat geven.

Of ik moet een "Java script" ombouwen voor deze syntax, maar om te kloten met iemand anders zijn code kan ik gewoon niet.

Een andere vraag.
Ik heb een textfield waar je de functie schrijft, en bij het posten word het weergegeven.

Maar alles is in 1 lijn, ik heb google door gezocht maar er is niet echt veel duidelijkheid hoe je de carriage return kan wijzigen naar <br>

Ik heb al geprobeerd of "/n" en "/r" te vervangen naar "<br>" maar dat pakt hij niet op.

.. Sorry

Reageren