Autor | Zpráva | ||
---|---|---|---|
mimochodec Profil |
Někdy je kód rozpoznán jako kód, zafunguje podbarvení, funkce jsou klikací atd. Někdy ne. Co dělám špatně?
Aha, už to tam funguje! Pochopil jsem správně, že to zafunguje, když první použitý string je obalen uvozovkami, nikoliv apostrofy? |
||
Str4wberry Profil |
Aby formátování správně fungovalo, je nutné určit jazyk kódu.
Existuje k tomu nějaká automatická detekce na základě obvyklých rysů kódu a zohledňuje si i kategorie. Ne vždy to uhádne správně. V takových případech jde jazyk určit ručně – třeba jako [>prephp] . Na výběr je php|js|html|css|mysql|sqlite|pgsql|apache|none .
Je nutné dát pozor na to, že explicitní stanovení jazyku může v jistých případech dopadnout hůř, než by dopadla automatická detekce, takže ho skutečně používat až v případech, kdy autodetekce selže. Pro automatickou detekci se hledají následující výrazy v první znacích kódu: //konfigurace zacatku obvyklych jazyku (vrchni maji vetsi prioritu) var zacatky = { "jush-js":/^\s*(?:var\s+|\$[\(.]|(document|window)\.|function\s+[^\(\s]+\s*\(\s*[a-z]|\/\/js|\/\*js)/i, "jush-css":/^\s*(?:\.|#|[\w\d\s]+\{|\/\*css)/i, "jush-pgsql":/^\s*(?:-- ?pgsql|#pgsql)/i, "jush-sqlite":/^\s*(?:-- ?sqlite|#sqlite)/i, "jush-sql":/^\s*(?:-- mysql|#mysql|select|update|insert|delete|alter|where|create|truncate|drop|join)/i, "jush-php":/^\s*(\$|echo|\/\/php|#php|mysql_|function\s+[^\(\s]+\s*\(\s*\$)/i, "jush-cnf":/^\s*(rewrite|options|alias|redirect|<Directory|<IfModule|php_flag|#.htaccess|#apache)/i, "jush-htm":/^\s*(<)/i, "":/^\s*(http|ftp)/i }; |
||
Bubák Profil |
mimochodec:
Nic není dokonalé. Použij jako po PHP kódy, pokud se "nechytne" automatické rozpoznání jazyka kódu, použij na začátku namísto [>pre] BB značku [>prephp], koncová BB značka stačí [>/pre], systém ji opraví-doplní na odpovídající párovou značku. Další najdeš na stránce Diskuse JPW: DJPW 1.0 (2) v bodě 16, ale koukám, že přibylo barvení i pro další jazyky. Obarvená ukázka tvého kódu: if($sel->ulcp != $ulcp){$co .= ", ulcp = '$ulcp'";} if($sel->ulcp2 != $ulcp2){$co .= ", ulcp2 = '$ulcp2'";} if($sel->ulcp3 != $ulcp3){$co .= ", ulcp3 = '$ulcp3'";} .. $co = trim ($co, ','); if ($co) { $co = "UPDATE $this->address SET ".$co." WHERE id = '$adresa'"; // provedudotaz; } |
||
Alphard Profil |
Do klíčových slov pro odhad PHP by se mohlo přidat
class ( |
||
mimochodec Profil |
#5 · Zasláno: 28. 9. 2015, 17:54:42
Děkuju všem, nevěděl jsem. Trochu mě zmátlo to, že ten můj kód bez prvního řádku byl celozelený, přidání toho řádku ho obarvilo.
|
||
Str4wberry Profil |
#6 · Zasláno: 28. 9. 2015, 18:04:45
Reakce na Alpharda:
Mohlo by se přidat, ale nyní prý nemá smysl provádět úpravy ve starém djpw.js , tak by bylo dobré to nezapomenout.
|
||
Chamurappi Profil |
#7 · Zasláno: 29. 9. 2015, 01:46:06
Teď jsem si v kódu [#2] všiml…
„ (vrchni maji vetsi prioritu) “
Na to nelze spoléhat, pořadí průchodu členů struktury je nedefinované. Tuším, že Explorer si je srovnává podle abecedy. Reaguji na Alpharda: Takže třeba takhle? "jush-php":/^\s*(\$|echo|class\s+\w|\/\/php|#php|mysql_|function\s+[^\(\s]+\s*\(\s*\$)/i, |
||
Alphard Profil |
#8 · Zasláno: 29. 9. 2015, 12:24:17
Chamurappi [#7]:
Je to lepší a pro kódy začínající (nějakým bílým znakem) a class to funguje.
Nicméně, zkouším ještě nějak přejít úvodní komentáře, přidat pár klíčových slov a odchytat i ty if/while/for pro php. Využívám toho, že název php proměnné musí začínat písmenem (resp. podtržítkem), na základě toho se chci odlišit od jQuery. Nyní mám tohle: "jush-php":/^\s*(((\/\/|#)[^\n]*\n*)|(\/\*((?!\*\/)(.|\n))+\*\/)|\s)*\s*(\$|echo|class\s+\w|\/\/php|#php|mysql_|namespace|use|include|require|function\s+[^\(\s]+\s*\(\s*\$|((if|while|for|switch|foreach)\s*\(\s*\$\w))/i, Mělo by to zvládnout jak // Trida Message reprezentuje posilanou zpravu, # ale sama ji odeslat nemuze, to muze jen instance \Sender /** Message * Copyright */ class Message { private $text; } tak i kód začínající podmínkami, kvůli kterému toto vlákno vzniklo if($sel->ulcp != $ulcp){$co .= ", ulcp = '$ulcp'";} if($sel->ulcp2 != $ulcp2){$co .= ", ulcp2 = '$ulcp2'";} if($sel->ulcp3 != $ulcp3){$co .= ", ulcp3 = '$ulcp3'";} Vidí v tom někdo nějaký problém? Nějaké kolize s jinými jazyky? |
||
Str4wberry Profil |
#9 · Zasláno: 29. 9. 2015, 12:53:08
„Vidí v tom někdo nějaký problém? Nějaké kolize s jinými jazyky?“
Snad jen, že jsem zapomněl dodat, že ten test se provádí na první 25 znacích kódu (viz funkce pridejJushClass v djpw.js ).
Těžko říct, jestli to tam je kvůli řešení problémů s rychlostí určování tříd nebo jen jako prevence. Myslím, že to psal Kajman, tak by to třeba mohl vědět. |
||
Časová prodleva: 9 let
|
0