bbCode

Wil je nieuwe functies op het forum? Heb je fouten gevonden die moeten worden verbeterd? Hier kan je suggesties doen om het forum te verbeteren.
User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 26 Feb 2010, 18:46

Derde reactie :o achter elkaar...

Als bij BNF wel in aparte boxen moet, misschien kunnen we dan ook wel de hele string scheiden met + en - en -> om er "boxen" van te maken.

Ik wil dat BNF wel proberen, woelen. Al weet ik nog niet helemaal hoe het werkt (met Javascript), maar dan zou ik desnoods hier wel vragen kunnen stellen?
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 04 Mar 2010, 10:32

nee?
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Wouter
Krypton
Posts: 1980
Joined: 02 Aug 2008, 01:47
Chemistry interests: Organic
Location: Groesbeek, Gelderland
Contact:

Re: bbCode

Post by Wouter » 04 Mar 2010, 10:35

Wat mij betreft mag dat wel. :P Al ben ik geen voorstander van JavaScript, vanwege de zeer slechte cross-browser compatibiliteit
Organisch chemicus

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 04 Mar 2010, 10:53

Het zou ook in php moeten en niet javascript bedenk ik me net, want ik zou het graag via tags, bijvoorbeeld [formule], willen laten werken. Of zit ik nou rare dingen te zeggen?
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Wouter
Krypton
Posts: 1980
Joined: 02 Aug 2008, 01:47
Chemistry interests: Organic
Location: Groesbeek, Gelderland
Contact:

Re: bbCode

Post by Wouter » 04 Mar 2010, 12:26

Dat kan wel met JavaScript, maar PHP is daar veel flexibeler in. Bovendien loopt die via de server, en kan een browser dus geen roet in het eten gooien.

Voorbeeldje:

Code: Select all

<?php
if(preg_match('~\[([A-Za-z0-9])\](.+?)\[/([A-Za-z0-9])\]~im',$matches)){
 if($matches[0] == $matches[2]){
  echo "<". $matches[0] .">". $matches[1] ."</". $matches[0] .">";
 }else{
  echo 'Foutieve tags.';
}else{
 echo 'geen goede invoer';
}
?>
Organisch chemicus

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 04 Mar 2010, 12:57

Ik vond ook dit: http://php.comsci.us/syntax/statement/bnf.php.

Ik ben trouwens helemaal niet zo vloeiend in programmeren en PHP nog minder, maar ik zie altijd wel waar ik strand en je leert er weer wat van.

Wat ik me nu afvraag is het volgende:

Hoe makkelijk is het om de string (data) tussen de tags te krijgen in phpBB? dus laten we simpel beginnen, we hebben H2O2 en laten dat door php omzetten in H2O2 dan vul ik dit in:

[formule]H2O2[/formule]

de data is dan H2O2 en de formule tags moet ie weggooien. ook niet opslaan in de database. dat is dan ook me tweede punt. we kunnen wel echo doen, maar dat is toch naar de webpagina en niet wat naar de database gaat?

het handigst is denk ik het vinden van (bijvoorbeeld) de [img] tag en die kopiëren en dan aanpassen naar [formule]....

... of moet/werkt dit allemaal via add-ons / plug-ins/upgrades ???

edit: dit is iets: http://www.phpbb.com/kb/article/adding- ... in-phpbb3/.
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Wouter
Krypton
Posts: 1980
Joined: 02 Aug 2008, 01:47
Chemistry interests: Organic
Location: Groesbeek, Gelderland
Contact:

Re: bbCode

Post by Wouter » 04 Mar 2010, 15:35

De standaardmethode om BBCodes in het forum te krijgen is via het administratiepaneel en erg slecht. Het werkt voor hele simpele dingen, zoals de offtopic, s, sub, sup en youtube die er nu bij staan. Complexere (logische) reeksen kunnen niet door dit systeem worden aangepast. Hoe het systeem van phpBB precies in elkaar zit, dat vind ik iets te ingewikkeld om hier uit te leggen. In ieder geval is het weinig logisch, waardoor zelf dingen aanpassen (en toevoegen) best wel lastig is.
Organisch chemicus

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 04 Mar 2010, 16:05

Had jij een account op de phpBB forum's? Misschien kan je daar vragen hoe je zoiets het beste aanpakt? Als je dat wilt doen tenminste. :) Ik wil dan wel proberen de code te maken, maar nu weet ik niet echt waar ik moet beginnen (in phpBB/bbCode). Ik heb wel eens zo'n WAMP (apache/local) ding opgezet, daar zou ik dan phpBB kunnen installeren en code kunnen uitproberen. Nog handiger is denk ik als ik een complete kopie krijg van de website, maar ik kan wel begrijpen dat je dat niet wilt.
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Wouter
Krypton
Posts: 1980
Joined: 02 Aug 2008, 01:47
Chemistry interests: Organic
Location: Groesbeek, Gelderland
Contact:

Re: bbCode

Post by Wouter » 04 Mar 2010, 18:51

Ik weet wel hoe dat moet, maar is niet eenvoudig te realiseren. Voorlopig ga ik me eerst richten op andere aanpassingen van het forum.

Ik kan je inderdaad, omwille van privacy, niet de databank van phpBB geven. Alhoewel alles gecodeerd is, maak ik maar één kopie van de database, en dat is de backup waar nog minder mensen bij kunnen. Wel zou je een phpBB3-pakket kunnen installeren op een WAMP server, dan kan je zelf oordelen over de dramatische codering van phpBB3. :P
Organisch chemicus

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 24 Mar 2010, 20:09

Ik zit nu op Ubuntu, werkt wel grappig, en heb phpbb3 na ongeveer 10-15 min prutsen draaien. Voor wie het ook wil proberen, meer info hier: https://help.ubuntu.com/community/PhpBB3.

Nou nog ff kijken hoe ik dingen kan aanpassen... :P
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 28 Mar 2010, 01:07

Beetje laat, maar ik heb goed nieuws. :)

Het is me gelukt om de tekst tussen [formule] bbcode tag te kunnen aanpassen met php. Plus dat het een simpele hack/fix is waardoor jij em makkelijk kan weg halen als je dat wil, wouter.

Je hoeft alleen bij Administration Control Panel onder posting>bbcode een custom bbcode toe te voegen. In het eerste vak vul je:

Code: Select all

 [formula]{TEXT}[/formula]
in en in de tweede vul je:

Code: Select all

<script type="text/javascript" src="bbcode_formula.php?message={TEXT}"></script>
Waar bbcode_formula.php het bestand is dat ik je geef en je in de www folder doet of desnoods in een folder dieper, dat maakt allemaal niet uit.

De text tussen de bbcodes wordt dus via ?message= doorgegeven aan het bestand waarna die bewerkt via javascript weer terug stopt.

Als bijlage een minimaal voorbeeld van bbcode_formula.php

Morgen of later in de week maar ff kijken of ik die BNF kan 'ontdekken', tenminste als woelen zijn code nog wil delen.
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 28 Mar 2010, 12:15

Au, au, au, gigantisch probleem.

De '+' wordt door php op deze manier omgezet in een spatie.

Als dit niet valt op te lossen dan is het einde verhaal. :'(
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
Wouter
Krypton
Posts: 1980
Joined: 02 Aug 2008, 01:47
Chemistry interests: Organic
Location: Groesbeek, Gelderland
Contact:

Re: bbCode

Post by Wouter » 28 Mar 2010, 13:04

$HTTP_GET_VARS['']? Dat is wel erg oud en hoort niet meer te werken in PHP4.3+ om veiligheidsredenen. Met $_GET[''] kan je variabelen uit je URI halen. ;)

Een + hoort niet omgezet te worden naar een spatie, dat verwijt ik aan javascript, die plustekens gebruikt om string te verbinden. Variabelen buiten de quotes halen, strings binnen quotes zetten.
Organisch chemicus

User avatar
Z4x
Gallium
Posts: 1599
Joined: 03 Aug 2009, 15:29
Chemistry interests: Overall
Location: Grunn

Re: bbCode

Post by Z4x » 28 Mar 2010, 13:49

Wouter wrote:$HTTP_GET_VARS['']? Dat is wel erg oud en hoort niet meer te werken in PHP4.3+ om veiligheidsredenen. Met $_GET[''] kan je variabelen uit je URI halen. ;)

Een + hoort niet omgezet te worden naar een spatie, dat verwijt ik aan javascript, die plustekens gebruikt om string te verbinden. Variabelen buiten de quotes halen, strings binnen quotes zetten.
Ik heb zitten googlen en het blijkt dat het door php wel wordt omgezet naar spatie. Je hebt namelijk bijvoorbeeld links als "hallo-wereld.html" en "hallo+wereld.html" en dan wordt beide keren een spatie bedoeld.

Er is een javascript functie om variabelen/links om te zetten naar %20 etc. dingen zodat php het correct kan lezen, maar dat krijg ik niet aan de praat met 'src='file.php'.

Een andere manier die ik nu heb ontdekt en een stuk veiliger is voor je website (want het zomaar inlezen van javascript variabele in php geeft inject gevaren) is gewoon de hele omzetting van de formule tag door javascript laten gebeuren. Enig nadeel hiervan is dat de code voor het omzetten dan vrij is (iedereen kan em downloaden en veranderen), misschien dat woelen dat niet wil (als we BNF gebruiken (als dat tenminste kan met javascript)).

Een voorbeeld met javascript heb ik ook al. Het werkt met mijn oude script in dit topic.

Bij custom bbcode weer een formula tag aanmaken. Eerste vak vul je dit in:

Code: Select all

[formula]{TEXT}[/formula]
bij tweede dit:

Code: Select all

<script language="JavaScript" src="formula.js"></script>

<script language="JavaScript">process('{TEXT}');</script>
Waarbij de eerste lijn natuurlijk ook aan het begin van php pagina's gezet kan worden en niet ergens midden in de pagina. Nadeel van deze methode is ook dat iedere keer dat je formula tag gebruikt ie die eerste lijn ook onnodig erin doet. Dit valt dus nog wel wat mooier te maken.

Dan met de bijlage (script) in de www folder en het zou moeten werken. Let wel er op dat dit mijn simpele bbcode formule script is en dus alleen bijvoorbeeld H2O en Fe2+ ondersteund, er is geen C23 ondersteuning, maar dit is dan ook ff om te testen en te laten zien dat het werkt. :)

Oh, bij de custom bbcode pagina wel "Display on posting page" aanvinken anders zie je/wij em niet.

Will you tell me how it works? :)

//edit: Ik weet niet of je de vorige bbcode_formula.php in je www folder hebt gezet, maar verwijder hem daar maar wel. Er zit geen controle op de invoer en ik wil niet dat je last krijgt van "code injects", dus gewoon weggooien die .php. ;)
De kunst is om te blijven oefenen, oefenen en oefenen...

User avatar
woelen
Kobalt
Posts: 1300
Joined: 13 Jan 2009, 20:05
Chemistry interests: --------------
Location: Groningen
Contact:

Re: bbCode

Post by woelen » 28 Mar 2010, 18:34

Z4x, BNF is niet een code die je zo kunt verwerken, maar het is een beschrijving van een grammatica. Op basis van een BNF kun je echter wel gemakkelijk tot een vertaler komen, die formules kan inlezen en vertalen naar een ander formaat. Ik was helemaal vergeten dat je hier nog mee bezig was :$ .

De BNF beschrijving van een chemische formule op basis waarvan mijn chemeq programma werkt en rekent is de volgende:

formula ::= <topformula> | "e"
topformula ::= <simple_formula> ["." <simple_formula>]
simple_formula ::= [<digit>] <factor> [<factor>]
factor ::= <element_count> | "(" <topformula> ")" [<digit>] | "[" <topformula> "]" [<digit>]
element_count ::= <element> [<digit>]
digit ::= "0" | "1" ... "9"
element ::= "+" | "-" | "H" | "He" | "Li" ... | "Mt" | "Uun" | "Uuu" | <pseudoelement>
pseudoelement ::= <uppercase> {<lowercase>} {<lowercase>}
uppercase ::= "A" | "B" | ... "Z"
lowercase ::= "'" | "*" | "a" | "b" | .... "z"

Zoals je ziet, ook lading behandel ik als een element, er moet nl. in reactievergelijkingen behoud van ieder element en behoud van lading zijn om kloppend te zijn.

Op basis van deze BNF kun je een parser uitschrijven in bijv. Java of JavaScript en iedere keer als je een bepaalde method in gaat of uit gaat emitteer je een token dat onderdeel wordt van jouw output. Op deze manier kun je een gegarandeerd goede parser ontwikkelen. Ik denk dat je een paar dagen nodig zult hebben om die code te ontwikkelen.

Als je wilt, dan kan ik je de parser/emitter voor mijn chemeq programma wel mailen. Ik heb een implementatie in C en eentje in Java. Uiteraard geeft de emitter in mijn geval geen BB-code, maar genereert deze vectoren voor een wiskundig algoritme om de vergelijkingen op te lossen, maar jij zou de structuur van de software wel moeten kunnen doorgronden.

Er zijn zelfs programma's als lex en yacc waarin je dergelijke formele beschrijvingen kunt invoeren en dan genereren deze een scanner en parser voor jouw grammatica. Jij hoeft dan alleen nog maar de emitter code er in te hangen. Je moet je dan wel verdiepen in lex en yacc.
Als dit je echt interesseert, dan zou ik eens wat gaan lezen over zgn. vertalerbouw (Engels: compiler construction).
The art of wondering makes life worth living...
Want to wonder? http://www.oelen.net/science

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest