<?php 
/* 
 * markdown_preview.php 
 * 
 * @(#) $Id: markdown_preview.php,v 1.1 2016/02/03 06:23:45 mlemos Exp $ 
 * 
 */ 
 
    require('forms.php'); 
    require('form_layout_vertical.php'); 
    require('markup_parser.php'); 
    require('markdown_parser.php'); 
 
    $form = new form_class; 
    $form->NAME = 'preview_form'; 
    $form->METHOD = 'POST'; 
    $form->ACTION = ''; 
    $form->debug = 'trigger_error'; 
    $form->ShowAllErrors = 1; 
    $form->InvalidCLASS = 'invalid'; 
    $form->AddInput(array( 
        'TYPE'=>'textarea', 
        'NAME'=>'data', 
        'ID'=>'data', 
        'ROWS'=>10, 
        'COLS'=>60, 
        'ValidateAsNotEmpty'=>1, 
        'ValidationErrorMessage'=> 
            'It was not specified any markdown to preview.', 
        'LABEL'=>'<u>D</u>ata', 
        'ACCESSKEY'=>'D' 
    )); 
    $form->AddInput(array( 
        'TYPE'=>'textarea', 
        'NAME'=>'html', 
        'ID'=>'html', 
        'ROWS'=>10, 
        'COLS'=>60, 
        'LABEL'=>'HTML', 
    )); 
    $form->AddInput(array( 
        'TYPE'=>'submit', 
        'NAME'=>'preview', 
        'ID'=>'preview', 
        'VALUE'=>'Preview', 
        'ACCESSKEY'=>'P' 
    )); 
    $error = $warnings = $output = ''; 
    $form->LoadInputValues($form->WasSubmitted('preview')); 
    $verify=array(); 
    if($form->WasSubmitted('preview')) 
    { 
        if(($error_message = $form->Validate($verify)) === '') 
        { 
            $markdown = new markdown_parser_class; 
            $parameters=array( 
                'Data'=>$form->GetInputValue('data'), 
            ); 
            if(($success = $markdown->StartParsing($parameters))) 
            { 
                $markup = new markup_parser_class; 
                do 
                { 
                    if(!($success = $markdown->Parse($end, $elements))) 
                        break; 
                    $te = count($elements); 
                    for($e = 0; $e < $te; ++$e) 
                    { 
                        if(!($success = $markup->RewriteElement($elements[$e], $html))) 
                            break; 
                        $output .= $html; 
                    } 
                } 
                while(!$end); 
                if($success) 
                    $success = $markdown->FinishParsing(); 
                $done = 1; 
            } 
            if($success) 
                $form->SetInputValue('html', $output); 
            else 
            { 
                $error = $markdown->error.' at position '.$markdown->error_position; 
                if($markdown->track_lines 
                && $markdown->GetPositionLine($markdown->error_position, $line, $column)) 
                    $error .= ' line '.$line.' column '.$column; 
            } 
            for($warning = 0, Reset($markdown->warnings); $warning < count($markdown->warnings); Next($markdown->warnings), $warning++) 
            { 
                $w = Key($markdown->warnings); 
                $warnings .= $markdown->warnings[$w].' at position '.$w; 
                if($markdown->track_lines 
                && $markdown->GetPositionLine($w, $line, $column)) 
                    $warnings .= ' line '.$line.' column '.$column; 
                $warnings .= "\n"; 
            } 
        } 
        else 
        { 
            $done = 0; 
            $error_message = HtmlEntities($error_message); 
        } 
    } 
    else 
    { 
        $error_message = ''; 
        $done = 0; 
    } 
    $form->AddInput(array( 
        'ID'=>'layout', 
        'NAME'=>'layout', 
        'TYPE'=>'custom', 
        'CustomClass'=>'form_layout_vertical_class', 
        'Inputs'=>array( 
            'data', 
            'error', 
            'warnings', 
            'html', 
            'rendered', 
            'preview', 
        ), 
        'Data'=>array( 
            'error'=>'<tr><td>Error:</td><td class="invalid">'.HtmlSpecialChars($error).'</td></tr>', 
            'warnings'=>'<tr><td>Warnings:</td><td class="invalid">'.nl2br(HtmlSpecialChars($warnings)).'</td></tr>', 
            'rendered'=>'<tr><td>Rendered:</td><td class="html">'.$output.'</td></tr>' 
        ), 
        'Properties'=>array( 
            'rendered'=>array( 
                'Visible'=>$done, 
            ), 
            'error'=>array( 
                'Visible'=>(strlen($error) && $done), 
            ), 
            'warnings'=>array( 
                'Visible'=>(strlen($warnings) && $done), 
            ), 
            'rendered'=>array( 
                'Visible'=>(strlen($output) && $done), 
            ), 
        ), 
        'InvalidMark'=>'[Verify]', 
    )); 
 
    if(!$done) 
    { 
        if(strlen($error_message)) 
        { 
            Reset($verify); 
            $focus=Key($verify); 
        } 
        else 
            $focus='data'; 
        $form->ConnectFormToInput($focus, 'ONLOAD', 'Focus', array()); 
    } 
 
    $onload=HtmlSpecialChars($form->PageLoad()); 
 
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>Markdown Preview</title> 
<style type="text/css"><!-- 
.invalid { border-color: #ff0000; background-color: #ffcccc } 
.html { background-color: #ffffff ; border-width: 1px; border-style: solid; padding: 2px; margin: 1px; } 
body { background-color: #cccccc; } 
.center { text-align: center; } 
// --></style> 
</head> 
<body onload="<?php    echo $onload; ?>"> 
<h1 class="center">Markdown Preview</h1> 
<div align="center" style="max-width: 60"> 
<?php 
    $form->StartLayoutCapture(); 
    $form->AddInputPart('layout'); 
    $form->EndLayoutCapture(); 
    $form->DisplayOutput(); 
?> 
</div> 
</body> 
</html> 
 
 |