Lexer->addEntryPattern( ']*>(?=.*?)', $mode, 'plugin_sortablejs' ); } function postConnect() { $this->Lexer->addExitPattern( '', 'plugin_sortablejs' ); } function handle( $match, $state, $pos, Doku_Handler $handler ) { switch ( $state ) { case DOKU_LEXER_ENTER : $match = substr( $match, 9, -1 ); $match = trim( $match ); $scl = ""; if ( strlen( $match ) > 0 ) { $scl = $this->__validateOptions( $match ); } return array( $state, $scl ); case DOKU_LEXER_UNMATCHED : return array( $state, $match ); case DOKU_LEXER_EXIT : return array( $state, "" ); } return array(); } function render( $mode, Doku_Renderer $renderer, $data ) { list($state, $match) = $data; if ( $mode == 'xhtml' ) { switch ( $state ) { case DOKU_LEXER_ENTER : $renderer->doc .= "
"; break; case DOKU_LEXER_UNMATCHED : $instructions = p_get_instructions( $match ); foreach( $instructions as $instruction ) { call_user_func_array( array( &$renderer, $instruction[0] ), $instruction[1] ); } break; case DOKU_LEXER_EXIT : $renderer->doc .= "
"; break; } return true; } else if ( $mode == 'odt' ) { switch ( $state ) { case DOKU_LEXER_ENTER : // In ODT, tables must not be inside a paragraph. Make sure we // closed any opened paragraph $renderer->p_close(); break; case DOKU_LEXER_UNMATCHED : $instructions = array_slice( p_get_instructions( $match ), 1, -1 ); foreach( $instructions as $instruction ) { call_user_func_array( array( &$renderer, $instruction[0] ), $instruction[1] ); } break; case DOKU_LEXER_EXIT : //$renderer->p_open(); // DO NOT re-open the paragraph, it would cause an error if the table is the last content on a page break; } return true; } return false; } function __validateOptions( $opts ) { if ( empty( $opts ) ) { return ""; } $ret = ""; $oa = explode( " ", $opts ); foreach( $oa as $opt ) { $explodedOption = explode( "=", $opt ); $c = $explodedOption[0]; $v = $explodedOption[1] ?? null; if ( $c == "sumrow" ) { $c = $v; $v = "sumrow"; if ( $c == "" ) { $c = "1"; } } else if ( $c == "3phase" ) { $v = $c; $c = ""; } if ( $v != null ) { $cmpr = $v; } else { if ( preg_match( '/r?\d*/', $c, $matches ) ) { $cmpr = 'sort'; } } switch ( $cmpr ) { case '3phase': $ret .= " threephase"; break; case 'nosort': $ret .= " col_".$c."_nosort"; break; case 'numeric': $ret .= " col_".$c."_numeric"; break; case 'date': $ret .= " col_".$c."_date"; break; case 'alpha': case 'text': $ret .= " col_".$c."_alpha"; break; case 'sort': $ret .= ' sort'.$opt; break; case 'sumrow': $ret .= ' sortbottom_'.$c; break; } } return $ret; } }