BBCode::Parse( $string )
Description
Source
File: bp-forums/admin/parser.php
function Parse($string) { $this->lexer = new BBCodeLexer($string, $this->tag_marker); $this->lexer->debug = $this->debug; $old_output_limit = $this->output_limit; if ($this->output_limit > 0) { if (strlen($string) < $this->output_limit) { $this->output_limit = 0; } else if ($this->limit_precision > 0) { $guess_length = $this->lexer->GuessTextLength(); if ($guess_length < $this->output_limit * ($this->limit_precision + 1.0)) { $this->output_limit = 0; } else { } } } $this->stack = Array(); $this->start_tags = Array(); $this->lost_start_tags = Array(); $this->text_length = 0; $this->was_limited = false; if (strlen($this->pre_trim) > 0) $this->Internal_CleanupWSByEatingInput($this->pre_trim); $newline = $this->plain_mode ? "\n" : "<br />\n"; while (true) { if (($token_type = $this->lexer->NextToken()) == BBCODE_EOI) { break; } switch ($token_type) { case BBCODE_TEXT: if ($this->output_limit > 0 && $this->text_length + strlen($this->lexer->text) >= $this->output_limit) { $text = $this->Internal_LimitText($this->lexer->text, $this->output_limit - $this->text_length); if (strlen($text) > 0) { $this->text_length += strlen($text); $this->stack[] = Array( BBCODE_STACK_TOKEN => BBCODE_TEXT, BBCODE_STACK_TEXT => $this->FixupOutput($text), BBCODE_STACK_TAG => false, BBCODE_STACK_CLASS => $this->current_class, ); } $this->Internal_DoLimit(); break 2; } $this->text_length += strlen($this->lexer->text); $this->stack[] = Array( BBCODE_STACK_TOKEN => BBCODE_TEXT, BBCODE_STACK_TEXT => $this->FixupOutput($this->lexer->text), BBCODE_STACK_TAG => false, BBCODE_STACK_CLASS => $this->current_class, ); break; case BBCODE_WS: if ($this->output_limit > 0 && $this->text_length + strlen($this->lexer->text) >= $this->output_limit) { $this->Internal_DoLimit(); break 2; } $this->text_length += strlen($this->lexer->text); $this->stack[] = Array( BBCODE_STACK_TOKEN => BBCODE_WS, BBCODE_STACK_TEXT => $this->lexer->text, BBCODE_STACK_TAG => false, BBCODE_STACK_CLASS => $this->current_class, ); break; case BBCODE_NL: if ($this->ignore_newlines) { if ($this->output_limit > 0 && $this->text_length + 1 >= $this->output_limit) { $this->Internal_DoLimit(); break 2; } $this->text_length += 1; $this->stack[] = Array( BBCODE_STACK_TOKEN => BBCODE_WS, BBCODE_STACK_TEXT => "\n", BBCODE_STACK_TAG => false, BBCODE_STACK_CLASS => $this->current_class, ); } else { $this->Internal_CleanupWSByPoppingStack("s", $this->stack); if ($this->output_limit > 0 && $this->text_length + 1 >= $this->output_limit) { $this->Internal_DoLimit(); break 2; } $this->text_length += 1; $this->stack[] = Array( BBCODE_STACK_TOKEN => BBCODE_NL, BBCODE_STACK_TEXT => $newline, BBCODE_STACK_TAG => false, BBCODE_STACK_CLASS => $this->current_class, ); $this->Internal_CleanupWSByEatingInput("s"); } break; case BBCODE_TAG: $this->Internal_ParseStartTagToken(); break; case BBCODE_ENDTAG: $this->Internal_ParseEndTagToken(); break; default: break; } } if (strlen($this->post_trim) > 0) $this->Internal_CleanupWSByPoppingStack($this->post_trim, $this->stack); $result = $this->Internal_GenerateOutput(0); $result = $this->Internal_CollectTextReverse($result, count($result) - 1); $this->output_limit = $old_output_limit; if ($this->plain_mode) { $result = preg_replace("/[\\x00-\\x09\\x0B-\\x20]+/", " ", $result); $result = preg_replace("/(?:[\\x20]*\\n){2,}[\\x20]*/", "\n\n", $result); $result = trim($result); } return $result; }
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.