[PHP] Geshi code highlight probleempje.

Pagina: 1
Acties:

  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 10-02 13:05
Ik gebruik Geshi (http://geshi.org/) om PHP code te highlighten, nu heb ik er een stukje aan toegevoegd om tekst tussen [ php] en [ /php] tags te highlighten, dit werkt prima.

Nu heb ik er de volgende CSS aangehangen om ervoor te zorgen dat de code niet buiten de layout gaat zitten:
code:
1
2
3
4
5
6
7
8
9
.sourceCode{
padding: 0px;
width: 440px;
height: 200px;
overflow-x: scroll;
overflow-y: scroll;
font-size: 12px;
display: block;
}


Nu valt dus alle inhoud van het bericht onder de class .sourceCode, wat dus niet de bedoeling is, alleen de inhoud tussen de [ php] en [ /php] tekst moet in die class komen.

Op de volgende manier highlight ik de code m.b.v. Geshi:
PHP:
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
$postContent = $cmtResult['content'];
                        
// Regex for the [ php] &  [ /php] tags.
$regex =  '/\[php\](.*?)\[\/php\]/si';

// Grab the php code we want to highlight in $matcher[1]
preg_match_all($regex, $postContent, $matches);

// now we have to loop through all our matches because we can have multiple php brackets in our post
$cnt = count($matches[1]);

for($i=0; $i < $cnt; $i++)
{
    // Allow HTML again, otherwise " will be &quot; etc.
    $parseCode = html_entity_decode($matches[1][$i]);

    // Call GeSHi.
    $geshi = new GeSHi($parseCode, 'PHP');
    
    // Set code style.
    $geshi->code_style = "font-size:12px;";
    
    // Header text.
    $geshi->set_header_content("<div style='font-size:12px;'>PHP Code</div>");
    
    // Enable line numbers.
    $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); 
    
    // Parse the code.
    $phpcode = $geshi->parse_code();

    // Replace the content, display below.
    $postContent = str_replace($matches[0][$i], $phpcode , "<div class='sourceCode'>" . $postContent . "</div>");
}


Op regel 33 voeg ik dus die <div class='sourceCode'> toe, wat er dus voor zorgt dat de gehele inhoud van $postContent; binnen die css class komt.

Heb al een hoop dingen geprobeerd om die <div> in de Geshi parser zelf alvast te openen, maar alles komt op hetzelfde uit.

Is het op één of andere manier mogelijk om de tekst die tussen [ php] en [ /php] staat te pakken en dat te highlighten en gebruik laten maken van die css class.

Voorbeeldje:
Afbeeldingslocatie: http://xenom.nl/GoT1.jpg

Bij voorbaat dank,

Edit: Dus net zoals PHP code wordt weergegeven hier op GoT.

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Je ziet wel dat je nu de <div class='sourceCode'> om de complete postContent heenzet en niet om de phpcode alleen (waarvan ik dus aanneem dat je het daaromheen wil hebben)?

[ Voor 24% gewijzigd door Shadowman op 08-09-2006 17:54 ]


  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 10-02 13:05
Ja dat is de bedoeling, maar hoe krijg ik die <div> alleen om het gedeelte tussen [ php] en [ /php]?

Dan zou [ php] er ook voor moeten zorgen dat de <div> geopend wordt en [ /php] dat de <div> gesloten wordt?

[ Voor 35% gewijzigd door Keess op 08-09-2006 19:26 ]


  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 11-02 09:47
PHP:
1
2
    // Replace the content, display below.
    $postContent = str_replace($matches[0][$i], $phpcode , "<div class='sourceCode'>" . $postContent . "</div>");

Veranderen in:
PHP:
1
2
    // Replace the content, display below.
    $postContent = str_replace($matches[0][$i], "<div class='sourceCode'>" . $phpcode . "</div>", $postContent);

Of denk ik te simpel?

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:35
CSS stuff (en alle client-side dingen) horen thuis bij de buren, in webdesign.
-> WEB

https://fgheysels.github.io/


  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 10-02 13:05
Mr. Bondt schreef op vrijdag 08 september 2006 @ 19:23:
PHP:
1
2
    // Replace the content, display below.
    $postContent = str_replace($matches[0][$i], "<div class='sourceCode'>" . $phpcode . "</div>", $postContent);

Of denk ik te simpel?
Dat lost het op, achteraf heel simpel ;) Bedankt.
Pagina: 1