Syntax_Highlighter()
Description #
The syntax highlighter class.
Source #
File: addons/syntaxhighlighter/syntaxhighlighter.php
class Syntax_Highlighter extends \AnsPress\Singleton {
/**
* Instance of this class.
*
* @var object
* @since 4.1.8
*/
protected static $instance = null;
/**
* The brushes.
*
* @var array
*/
public $brushes = array();
/**
* Initialize the addon.
*/
protected function __construct() {
$this->brush();
anspress()->add_filter( 'wp_enqueue_scripts', $this, 'scripts' );
anspress()->add_filter( 'tiny_mce_before_init', $this, 'mce_before_init' );
anspress()->add_filter( 'ap_editor_buttons', $this, 'editor_buttons', 10, 2 );
anspress()->add_filter( 'ap_allowed_shortcodes', $this, 'allowed_shortcodes' );
add_shortcode( 'apcode', array( $this, 'shortcode' ) );
}
/**
* Register scripts and styles.
*
* @return void
*/
public function scripts() {
$js_url = ANSPRESS_URL . 'addons/syntaxhighlighter/syntaxhighlighter/scripts/';
$css_url = ANSPRESS_URL . 'addons/syntaxhighlighter/syntaxhighlighter/styles/';
echo '<script type="text/javascript">AP_Brushes = ' . wp_json_encode( $this->brushes ) . ';</script>';
wp_enqueue_script( 'syntaxhighlighter-core', $js_url . 'shCore.js', array( 'jquery', 'anspress-common' ), AP_VERSION, true );
wp_enqueue_script( 'syntaxhighlighter-autoloader', $js_url . 'shAutoloader.js', array( 'syntaxhighlighter-core' ), AP_VERSION, true );
wp_enqueue_script( 'syntaxhighlighter', ANSPRESS_URL . 'addons/syntaxhighlighter/script.js', array( 'syntaxhighlighter-core' ), AP_VERSION, true );
// Register theme stylesheets.
wp_enqueue_style( 'syntaxhighlighter-core', $css_url . 'shCore.css', array(), AP_VERSION );
wp_enqueue_style( 'syntaxhighlighter-theme-default', $css_url . 'shThemeDefault.css', array( 'syntaxhighlighter-core' ), AP_VERSION );
ob_start();
?>
aplang = aplang||{};
aplang.shLanguage = '<?php esc_attr_e( 'Language', 'anspress-question-answer' ); ?>';
aplang.shInline = '<?php esc_attr_e( 'Is inline?', 'anspress-question-answer' ); ?>';
aplang.shTxtPlholder = '<?php esc_attr_e( 'Insert code snippet here ...', 'anspress-question-answer' ); ?>';
aplang.shButton = '<?php esc_attr_e( 'Insert to editor', 'anspress-question-answer' ); ?>';
aplang.shTitle = '<?php esc_attr_e( 'Insert code', 'anspress-question-answer' ); ?>';
window.apBrushPath = "<?php echo esc_url( ANSPRESS_URL . 'addons/syntaxhighlighter/syntaxhighlighter/scripts/' ); ?>";
<?php
$script = ob_get_clean();
wp_add_inline_script( 'syntaxhighlighter', $script, 'before' );
}
/**
* Define all brush.
*
* @return void
*/
public function brush() {
$this->brushes = array(
'php' => 'PHP',
'css' => 'CSS',
'xml' => 'XML/HTML',
'jscript' => 'Javascript',
'sql' => 'SQL',
'bash' => 'Bash/Shell',
'clojure' => 'Clojure',
'cpp' => 'C++/C',
'csharp' => 'C#',
'delphi' => 'Delphi',
'diff' => 'Diff',
'erlang' => 'Erlang',
'fsharp' => 'F#',
'groovy' => 'Groovy',
'java' => 'Java',
'javafx' => 'JavaFX',
'latex' => 'Latex',
'plain' => 'Plain text',
'matlab' => 'Matlabkey',
'objc' => 'Object',
'perl' => 'Perl',
'powershell' => 'PowerShell',
'python' => 'Python',
'r' => 'R',
'ruby' => 'Ruby/Rails',
'scala' => 'Scala',
'vb' => 'VisualBasic',
);
}
/**
* Modify tinyMCE options so that we can add our pre tags along with language code.
*
* Our language code is stored in a custom attribute `aplang`. Also whitelist
* `contenteditable` attribute so that we can prevent editing `pre` tag in editor.
*
* @param array $options TinyMCE options.
* @return array
*
* @since 4.1.8 Fixed: SCRIPT5022: InvalidCharacterError showing in Edge browser.
*/
public function mce_before_init( $options ) {
if ( ! isset( $options['extended_valid_elements'] ) ) {
$options['extended_valid_elements'] = '';
} else {
$options['extended_valid_elements'] .= ',';
}
$options['extended_valid_elements'] = 'pre,code';
return $options;
}
/**
* Add insert code button before editor.
*
* @param string $name Field name.
* @param object $field Field object.
* @return void
* @since 4.1.8
*/
public function editor_buttons( $name, $field ) {
$field->add_html( '<button type="button" class="ap-btn-insertcode ap-btn-small ap-btn mb-10 ap-mr-5" apinsertcode><i class="apicon-code ap-mr-3"></i>' . __( 'Insert Code', 'anspress-question-answer' ) . '</button>' );
}
/**
* Add `apcode` to allowed shortcode.
*
* @param array $allowed Allowed shortcode.
* @return array
* @since 4.1.8
*/
public function allowed_shortcodes( $allowed ) {
$allowed[] = 'apcode';
return $allowed;
}
/**
* Render shortcode `[apcode]`.
*
* @param array $atts Attributes.
* @param string $content Content.
* @return string
*/
public function shortcode( $atts, $content = '' ) {
$atts = wp_parse_args(
$atts,
array(
'language' => 'plain',
'inline' => false,
)
);
$tag = $atts['inline'] ? 'code' : 'pre';
$content = preg_replace( '/<br(\s+)?\/?>/i', '', $content );
$klass = 'class="brush: ' . esc_attr( $atts['language'] ) . '"';
$content = str_replace( array( '<pre', '<code' ), array( '<pre ' . $klass, '<code ' . $klass ), $content );
return $content;
}
}
Expand full source code Collapse full source code View on GitHub: addons/syntaxhighlighter/syntaxhighlighter.php:28
Anspress’te kod ile ilgili yorum ve yanıtlarda herhangi bir buton istemiyorum. Ne yapmalıyım? apcode nasıl iptal edilir?