Plugin Directory

Changeset 669333


Ignore:
Timestamp:
02/17/2013 06:09:14 PM (13 years ago)
Author:
amit
Message:

added v4.2

Location:
igsyntax-hiliter/trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • igsyntax-hiliter/trunk/MANUAL.txt

    r661663 r669333  
    44
    55
    6 Version: 4.1
     6Version: 4.2
    77Author: Amit Gupta
    88Plugin URI: http://blog.igeek.info/wp-plugins/igsyntax-hiliter/
     
    43432. WHAT's NEW
    4444-----------------------------------------------------------------------------------------
     45v4.2
     46-------------
     47BUGFIX: Shorthand tags for all languages supported now - props to Karol Kuczmarski for spotting it
     48NEW: Added C++ language file
     49
     50
    4551v4.1
    4652-------------
     
    189195[ENABLE GITHUB GIST EMBED IN COMMENTS] : This option allows you to tell the plugin whether to embed Github Gist in comments. If disabled then a Gist posted in comments is linked to Github.
    190196
     197[REBUILD SHORTHAND TAGS] : Language files in the plugin's directory and current theme (parent & child) directory are scanned and their names are cached to allow shorthand tag usage for all languages. This cache is rebuilt automatically every 3 days. But if you wish to rebuild it manually you can do so by clicking this button.
     198
    191199
    192200
  • igsyntax-hiliter/trunk/class-ig-syntax-hiliter-admin.php

    r660809 r669333  
    136136                    </td>
    137137                </tr>
     138                <tr>
     139                    <td colspan="2">&nbsp;</td>
     140                </tr>
     141                <tr>
     142                    <td colspan="2">
     143                        <button id="igsh_refresh_languages" name="igsh_refresh_languages" class="button button-primary" value="rebuild">Rebuild Shorthand Tags</button>
     144                        <p>Click the button above to rebuild the list of shorthand tags. This is needed if you have added any new language file or
     145                        removed any existing language file.</p>
     146                        <p><strong>Note:</strong> This will be automatically done in <span id="igsh-time-to-rebuild"><?php echo $this->human_time_diff( time(), ( $this->_get_language_build_time() + parent::languages_cache_life ) ); ?></span></p>
     147                    </td>
     148                </tr>
    138149            </table>
    139150        </div>
     
    190201        $_POST['option_value'] = sanitize_text_field( strtolower( trim($_POST['option_value']) ) );
    191202
    192         if( ! $this->_is_yesno( $_POST['option_value'] ) || ! $this->_get_option( $_POST['option_name'] ) ) {
     203        if( $_POST['option_name'] == 'igsh_refresh_languages' && $_POST['option_value'] == 'rebuild' ) {
     204            //rebuild language file list
     205            $this->_get_languages( 'yes' );
     206            $response['error'] = 0;
     207            $response['msg'] = $this->_create_ajax_message( 'Shorthand Tags rebuilt successfully', 'success' );
     208            $response['time'] = $this->human_time_diff( time(), ( $this->_get_language_build_time() + parent::languages_cache_life ) );
     209        } elseif( ! $this->_is_yesno( $_POST['option_value'] ) || ! $this->_get_option( $_POST['option_name'] ) ) {
    193210            $response['msg'] = $this->_create_ajax_message( 'Invalid request sent, please refresh the page and try again', 'error' );
    194211            $this->_send_ajax_response($response);
     
    212229
    213230        //load stylesheet
    214         wp_enqueue_style( parent::plugin_id . '-admin', plugins_url( 'css/admin.css', __FILE__ ), false );
     231        wp_enqueue_style( parent::plugin_id . '-admin', plugins_url( 'css/admin.css', __FILE__ ), false, IG_SYNTAX_HILITER_VERSION );
    215232        //load jQuery::msg stylesheet
    216         wp_enqueue_style( parent::plugin_id . '-jquery-msg', plugins_url( 'css/jquery.msg.css', __FILE__ ), false );
     233        wp_enqueue_style( parent::plugin_id . '-jquery-msg', plugins_url( 'css/jquery.msg.css', __FILE__ ), false, IG_SYNTAX_HILITER_VERSION );
    217234
    218235        //load jQuery::center script
    219         wp_enqueue_script( parent::plugin_id . '-jquery-center', plugins_url( 'js/jquery.center.min.js', __FILE__ ), array( 'jquery' ) );
     236        wp_enqueue_script( parent::plugin_id . '-jquery-center', plugins_url( 'js/jquery.center.min.js', __FILE__ ), array( 'jquery' ), IG_SYNTAX_HILITER_VERSION );
    220237        //load jQuery::msg script
    221         wp_enqueue_script( parent::plugin_id . '-jquery-msg', plugins_url( 'js/jquery.msg.min.js', __FILE__ ), array( parent::plugin_id . '-jquery-center' ) );
     238        wp_enqueue_script( parent::plugin_id . '-jquery-msg', plugins_url( 'js/jquery.msg.min.js', __FILE__ ), array( parent::plugin_id . '-jquery-center' ), IG_SYNTAX_HILITER_VERSION );
    222239        //load our script
    223         wp_enqueue_script( parent::plugin_id . '-admin', plugins_url( 'js/admin.js', __FILE__ ), array( parent::plugin_id . '-jquery-msg' ) );
     240        wp_enqueue_script( parent::plugin_id . '-admin', plugins_url( 'js/admin.js', __FILE__ ), array( parent::plugin_id . '-jquery-msg' ), IG_SYNTAX_HILITER_VERSION );
    224241
    225242        //some vars in JS that we'll need
  • igsyntax-hiliter/trunk/class-ig-syntax-hiliter-frontend.php

    r661663 r669333  
    7070    protected $__geshi_language = array(
    7171        'as' => 'actionscript',
    72         'actionscript' => 'actionscript',
    73         'actionscript3' => 'actionscript3',
    74         'apache' => 'apache',
    75         'applescript' => 'applescript',
    76         'asp' => 'asp',
    77         'bash' => 'bash',
    78         'c' => 'c',
    79         'code' => 'code',
    80         'csharp' => 'csharp',
    81         'css' => 'css',
    82         'c_mac' => 'c_mac',
    83         'diff' => 'diff',
    84         'groovy' => 'groovy',
    8572        'html' => 'html4strict',
    86         'html4strict' => 'html4strict',
    87         'html5' => 'html5',
    88         'ini' => 'ini',
    89         'java' => 'java',
    90         'java5' => 'java5',
    9173        'js' => 'javascript',
    92         'jquery' => 'jquery',
    93         'mysql' => 'mysql',
    94         'oracle11' => 'oracle11',
    95         'pcre' => 'pcre',
    96         'perl' => 'perl',
    97         'perl6' => 'perl6',
    98         'php' => 'php',
    99         'postgresql' => 'postgresql',
    100         'python' => 'python',
    101         'rails' => 'rails',
    102         'ruby' => 'ruby',
    103         'sql' => 'sql',
    104         'text' => 'text',
    105         'vb' => 'vb',
    106         'vbnet' => 'vbnet',
    107         'xml' => 'xml',
    108         'yaml' => 'yaml',
     74    );
     75
     76    /**
     77     * @var Array Contains display names for some languages, like C# for csharp, VB.NET for vbnet
     78     */
     79    protected $__geshi_language_display = array(
     80        'cpp' => 'C++',
     81        'cfm' => 'Cold Fusion',
     82        'csharp' => 'C#',
     83        'vbnet' => 'VB.NET',
     84        'as' => 'ActionScript',
     85        'c_mac' => 'CMac',
     86        'html' => 'HTML4',
     87        'html4strict' => 'HTML4',
    10988    );
    11089
     
    11594        //init options
    11695        $this->_init_options();
     96
     97        $this->_build_tags_array();
    11798
    11899        //setup our style/script enqueuing for front-end
     
    182163
    183164        //load stylesheet
    184         wp_enqueue_style( self::plugin_id, plugins_url( 'css/front-end.css', __FILE__ ), false );
     165        wp_enqueue_style( self::plugin_id, plugins_url( 'css/front-end.css', __FILE__ ), false, IG_SYNTAX_HILITER_VERSION );
    185166        //load utility lib
    186         wp_enqueue_script( 'igeek-utils', plugins_url( 'js/igeek-utils.js', __FILE__ ), array() );
     167        wp_enqueue_script( 'igeek-utils', plugins_url( 'js/igeek-utils.js', __FILE__ ), array(), IG_SYNTAX_HILITER_VERSION );
    187168        //load script
    188         wp_enqueue_script( self::plugin_id, plugins_url( 'js/front-end.js', __FILE__ ), array( 'igeek-utils', 'jquery' ) );
     169        wp_enqueue_script( self::plugin_id, plugins_url( 'js/front-end.js', __FILE__ ), array( 'igeek-utils', 'jquery' ), IG_SYNTAX_HILITER_VERSION );
    189170
    190171        //vars for front-end js
     
    195176            )
    196177        ) );
     178    }
     179
     180    /**
     181     * This function builds the array for shorthand tags for all language files
     182     * available in supported directories
     183     */
     184    protected function _build_tags_array() {
     185        $languages = $this->_get_languages();
     186        if( empty( $languages ) ) {
     187            return;
     188        }
     189
     190        $keys = array_unique( array_merge( array_keys( $this->__geshi_language ), array_keys( $languages ) ) );
     191
     192        $tags = array();
     193
     194        foreach( $keys as $key ) {
     195            if( array_key_exists( $key, $this->__geshi_language ) ) {
     196                $tags[$key] = $this->__geshi_language[$key];
     197                continue;
     198            }
     199
     200            if( array_key_exists( $key, $languages ) ) {
     201                $tags[$key] = $languages[$key];
     202                continue;
     203            }
     204        }
     205
     206        ksort( $tags );
     207
     208        $this->__geshi_language = $tags;
     209
     210        unset( $tags, $keys, $languages );
    197211    }
    198212
     
    277291
    278292        $language = sanitize_title( $language );
    279         $language_display = $language;
     293        $language_display = ( array_key_exists( $language, $this->__geshi_language_display ) ) ? $this->__geshi_language_display[$language] : $language;
    280294        $language = ( array_key_exists( $language, $this->__geshi_language ) ) ? $this->__geshi_language[$language] : $language;
    281295
     
    323337
    324338        $is_language = true;    //assume we have a valid language
     339        $dir_path = parent::$__dirs['geshi'];       //set default path to our geshi dir
     340
    325341        if( function_exists('file_exists') ) {
    326             if( ! file_exists( parent::$__geshi_dir . '/' . $language . '.php' ) ) {
     342            foreach( parent::$__dirs as $key => $dir ) {
     343                if( file_exists( $dir . '/' . $language . '.php' ) ) {
     344                    $is_language = true;    //language file exists
     345                    $dir_path = $dir;   //set language file dir
     346                    break;
     347                }
     348
    327349                $is_language = false;   //language file doesn't exist
    328             }
    329 
    330             //check for language file in theme directory
    331             if( $is_language === false ) {
    332                 if( ! file_exists( get_template_directory() . '/geshi/' . $language . '.php' ) ) {
    333                     $is_language = false;   //language file doesn't exist
    334                 } else {
    335                     $is_language = true;
    336                     $dir_path = get_template_directory() . '/geshi/';
    337                 }
    338             }
    339 
    340             //check for language file in child theme directory
    341             if( $is_language === false && get_template_directory() !== get_stylesheet_directory() ) {
    342                 if( ! file_exists( get_stylesheet_directory() . '/geshi/' . $language . '.php' ) ) {
    343                     $is_language = false;   //language file doesn't exist
    344                 } else {
    345                     $is_language = true;
    346                     $dir_path = get_stylesheet_directory() . '/geshi/';
    347                 }
    348350            }
    349351        }
     
    398400
    399401        if( isset($dir_path) && ! empty($dir_path) ) {
    400             //language file is not in plugin folder, load from theme
     402            //we have a path to language file
    401403            $geshi->set_language_path( $dir_path );
    402404        }
     
    429431            $geshi->set_highlight_lines_extra_style( 'background-color:#FFFFBC;' ); //set bg color for special lines
    430432        }
     433
     434        $geshi->enable_strict_mode();
     435
    431436        $hilited_code = $geshi->parse_code();   //get it all
    432437
  • igsyntax-hiliter/trunk/class-ig-syntax-hiliter.php

    r660809 r669333  
    1818    const plugin_name = "iG:Syntax Hiliter";
    1919    /**
     20     * @var const Class constant containing life of language name cache in seconds
     21     */
     22    const languages_cache_life = 259200;        //3 days
     23    /**
    2024     * @var String Static var containing path to GeSHi language file folder
    2125     */
    22     protected static $__geshi_dir;
     26    protected static $__dirs;
    2327
    2428    /**
     
    2630     */
    2731    private $_options;
     32
     33    /**
     34     * This function returns time difference in human readable format
     35     * like 2 days 13 hours 28 minutes
     36     */
     37    public function human_time_diff( $from, $to = '' ) {
     38        if( empty( $to ) ) {
     39            $to = time();
     40        }
     41
     42        $minute_in_seconds = 60;
     43        $hour_in_seconds = 60 * $minute_in_seconds;
     44        $day_in_seconds = 24 * $hour_in_seconds;
     45
     46        $diff = (int) abs( $to - $from );
     47
     48        $since = array();
     49
     50        if( $diff >= $day_in_seconds ) {
     51            $days = intval( $diff / $day_in_seconds );
     52            $since[] = sprintf( _n( '%s day', '%s days', $days ), $days );
     53            $diff = $diff - ( $days * $day_in_seconds );
     54        }
     55
     56        if( $diff >= $hour_in_seconds ) {
     57            $hours = intval( $diff / $hour_in_seconds );
     58            $since[] = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
     59            $diff = $diff - ( $hours * $hour_in_seconds );
     60        }
     61
     62        if( $diff >= $minute_in_seconds ) {
     63            $minutes = intval( $diff / $minute_in_seconds );
     64            $since[] = sprintf( _n( '%s minute', '%s minutes', $minutes ), $minutes );
     65        }
     66
     67        return implode( ' ', $since );
     68    }
     69
     70    /**
     71     * This function scans the validated language file directories, retrieves the
     72     * names of all files with .php extension and returns an array with unique
     73     * file names
     74     */
     75    public function build_language_list() {
     76        if( empty( self::$__dirs ) ) {
     77            return false;
     78        }
     79
     80        $tags = array();
     81
     82        foreach( self::$__dirs as $dir ) {
     83            $tags = array_merge( $tags, glob( $dir . "/*.php" ) );
     84        }
     85
     86        $tags = array_unique( array_filter( array_map( array( $this, '_file_to_tag_name' ), $tags ) ) );
     87        sort( $tags );
     88
     89        $this->_set_language_build_time();  //set language list built time
     90
     91        return $tags;
     92    }
     93
     94    /**
     95     * This function uses WP TLC class to fetch the language file names from supported directories
     96     * and schedules a refresh of the transient cache. It also allows a force rebuild of
     97     * transient cache via the optional $force_rebuild parameter.
     98     */
     99    protected function _get_languages( $force_rebuild = 'no' ) {
     100        $force_rebuild = ( ! $this->_is_yesno( $force_rebuild ) ) ? 'no' : strtolower( $force_rebuild );
     101
     102        $transient = new TLC_Transient( self::plugin_id . '-languages' );
     103
     104        if( $force_rebuild == 'yes' ) {
     105            $transient->delete();   //delete existing cache so we'll get fresh one below
     106        }
     107
     108        $languages = $transient->updates_with( array( $this, 'build_language_list' ) )
     109                                ->expires_in( self::languages_cache_life )
     110                                ->get();
     111
     112        if( empty( $languages ) ) {
     113            return;
     114        }
     115
     116        return array_combine( $languages, $languages );
     117    }
     118
     119    /**
     120     * Returns the timestamp when language file name cache was last built. If no timestamp
     121     * found then it sets current timestamp and returns that.
     122     */
     123    protected function _get_language_build_time() {
     124        $time = get_option( self::plugin_id . '-lang-time' );
     125        if( $time === false ) {
     126            return $this->_set_language_build_time();
     127        }
     128
     129        return $time;
     130    }
     131
     132    /**
     133     * Sets the timestamp to mark when language file name cache was built
     134     */
     135    protected function _set_language_build_time() {
     136        $time = time();
     137        update_option( self::plugin_id . '-lang-time', $time );
     138        return $time;
     139    }
     140
     141    /**
     142     * Returns the file name of a php file from the physical file path
     143     */
     144    protected function _file_to_tag_name( $file_path ) {
     145        $file_path = str_replace( '\\', '/', $file_path );
     146        $file_path = ( empty($file_path) || strpos( $file_path, '.php' ) === false ) ? '' : ltrim( rtrim( substr( $file_path, strrpos( $file_path, '/' ) ), '.php' ), '/' );
     147        return $file_path;
     148    }
    28149
    29150    /**
     
    110231
    111232    /**
     233     * This function stores geshi language file directory paths in an array. Besides
     234     * the directory in the plugin's directory, it looks for geshi directory in parent
     235     * and child theme directories, and whichever exists is stored.
     236     */
     237    protected function _setup_dir_paths() {
     238        self::$__dirs['geshi'] = dirname( __FILE__ ) . "/geshi";    //setup geshi dir path
     239        self::$__dirs['theme'] = get_template_directory() . "/geshi";   //setup geshi dir path in current theme folder
     240        self::$__dirs['child_theme'] = get_stylesheet_directory() . "/geshi";   //setup geshi dir path in child theme folder
     241
     242        if( ! is_dir( self::$__dirs['child_theme'] ) || self::$__dirs['theme'] == self::$__dirs['child_theme'] ) {
     243            unset( self::$__dirs['child_theme'] );  //no geshi dir in child theme
     244        }
     245
     246        if( ! is_dir( self::$__dirs['theme'] ) ) {
     247            unset( self::$__dirs['theme'] );    //no geshi dir in current theme
     248        }
     249    }
     250
     251    /**
    112252     * This function is to be run in the constructor of the sub-class. It initializes
    113253     * the options storing them in the $_options class var. If the options are not in
     
    116256     */
    117257    protected function _init_options() {
    118         //setup geshi dir path
    119         self::$__geshi_dir = __DIR__ . "/geshi";
     258        $this->_setup_dir_paths();  //setup valid language dir paths
    120259
    121260        $default_options = array(
  • igsyntax-hiliter/trunk/css/admin.css

    r660809 r669333  
    44 * @author: Amit Gupta
    55 * @since: 2012-08-25
    6  * @version: 2012-08-25
     6 * @version: 2013-02-17
    77 */
    88
     
    3838    font-weight: bold; color: #AA0000;
    3939}
     40
     41#igsh-time-to-rebuild {
     42    font-style: italic;
     43}
  • igsyntax-hiliter/trunk/ig-syntax-hiliter.php

    r661663 r669333  
    44Plugin URI: http://blog.igeek.info/wp-plugins/igsyntax-hiliter/
    55Description: Syntax Highlighter plugin to colourize source code for various supported programming languages. See the MANUAL for more instructions.
    6 Version: 4.1
     6Version: 4.2
    77Author: Amit Gupta
    88Author URI: http://blog.igeek.info/
     
    1010
    1111if( ! defined('IG_SYNTAX_HILITER_VERSION') ) {
    12     define( 'IG_SYNTAX_HILITER_VERSION', 4.1 );
     12    define( 'IG_SYNTAX_HILITER_VERSION', 4.2 );
    1313}
    1414
     
    1818function ig_syntax_hiliter_loader() {
    1919    $igsh_plugin_dir = dirname( __FILE__ );
     20
     21    //load up TLC Transient class
     22    require_once( $igsh_plugin_dir . "/tlc-transients.php" );
    2023
    2124    //load up GeSHi
  • igsyntax-hiliter/trunk/js/admin.js

    r660809 r669333  
    44 * @author: Amit Gupta
    55 * @since: 2012-08-25
    6  * @version: 2013-01-29
     6 * @version: 2013-02-17
    77 */
    88
     
    6161        );
    6262    });
     63   
     64    $('#igsh_refresh_languages').on('click', function(){
     65        var ui_name = $(this).attr('name');
     66        var ui_value = $(this).val();
     67        $.msg({
     68            msgID : 1,
     69            bgPath : ig_sh.plugins_url + 'images/',
     70            autoUnblock : false,
     71            clickUnblock : false,
     72            klass : 'black-on-white',
     73            content : 'Rebuilding &nbsp;&nbsp; <img src="' + ig_sh.plugins_url + 'images/ajax-loader.gif" id="loading-img" />'
     74        });
     75        $.post(
     76            ajaxurl,
     77            {
     78                action: 'ig-sh-save-options',
     79                _ig_sh_nonce: ig_sh.nonce,
     80                option_name: ui_name,
     81                option_value: ui_value
     82            },
     83            function(data) {
     84                setTimeout( hide_jq_msg, 1000 );
     85                if( ! data || ! data.nonce || ! data.msg || ! data.time ) {
     86                    $.msg( 'replace', '<strong>Error:</strong> Unable to build tags' );
     87                } else {
     88                    ig_sh.nonce = data.nonce;
     89                    $.msg( 'replace', data.msg );
     90                    $('#igsh-time-to-rebuild').html( data.time );
     91                }
     92            },
     93            "json"
     94        );
     95    });
    6396
    6497    function hide_jq_msg() {
  • igsyntax-hiliter/trunk/readme.txt

    r661712 r669333  
    3838
    3939**See Also:** ["Installing Plugins" article on the WP Codex](http://codex.wordpress.org/Managing_Plugins#Installing_Plugins)
     40
     41== Other Notes ==
    4042
    4143###Plugin Usage###
     
    8688== ChangeLog ==
    8789
     90= v4.2 =
     91
     92* BUGFIX: Shorthand tags for all languages supported now - props to Karol Kuczmarski for spotting it
     93* NEW: Added C++ language file
     94
    8895= v4.1 =
    8996
     
    105112* IMPROVED: Simpler and faster options page in wp-admin
    106113
    107 = v3.5 =
    108114
    109 * BUGFIX: BB Tags except the ones of iG:Syntax Hiliter are allowed. The language file's existence is checked before parsing the code. If the language file does not exist then the code is not parsed.
    110 * BUGFIX: 'C' code hiliting is now fixed.
    111 * BUGFIX: 'Plain Text' has been improved to strip the extra blank lines and spaces in Opera and FireFox.
    112 * NEW: The latest stable GeSHi core(v1.0.7.6).
    113 * NEW: Code Hiliting for Comments has been implemented. This feature can be Enabled/Disabled from the admin interface for iG:Syntax Hiliter. The tags are same for hiliting the code.
    114 * NEW: A cross-browser Colour Picker(tested in IE6, FireFox1.5 and Opera8.5) is now available to easily set the line colours displayed in the code box.
    115 * NEW: A new type of view implemented for seeing "Plain Text" code. Besides opening the plain text code in a new window, you can have it displayed in the code box itself with an option to display the hilited HTML code back again. The "Plain Text" view type can be set in the admin interface.
    116 * NEW: The language file for Ruby that I created a while back is now bundled with the plugin and its also a part of the default GeSHi package.
    117 
    118 = v3.1 =
    119 
    120 * BUGFIX: Critical bug, which broke the plugin when the square brackets([ & ]) were used in the posts in places other than tags, has been fixed.
    121 * BUGFIX: Another bug, which allowed any attribute in the tags besides the 'num' and also allowed any attribute value for it, affecting the processing. Now only the 'num' attribute is accepted and if you specify the 'num' attribute then its value must be a positive number otherwise your code won't be hilited. The 'num' attribute is optional and you can leave it out without any problems.
    122 * BUGFIX: Fixed the unclosed <select> tags in the Plugin GUI code.
    123 * GeSHi BUGFIX: Fixed a bug in GeSHi where the first line colour was not used when using FANCY LINE NUMBERS thus resulting in just one colour being used for the alternate lines.
    124 * There's a problem in WordPress due to which the starting delimiters of ASP, PHP were not displayed correctly, as whitespace was inserted between the '<' and the rest of the delimiter. This has been patched so that its displayed correctly, but its not saved in the database, so the database still contains the delimiters as formatted by WordPress.
    125 
    126 = v3.0 =
    127 
    128 * NEW LICENSE: iG:Syntax Hiliter is now licensed under GNU GPL.
    129 * New GeSHi Core(v1.0.7) which has some bug-fixes, please see GeSHi Website for its changelog.
    130 * New languages added are C#, Delphi, Smarty & VB.NET.
    131 * ASP language file structure updated & more keywords added.
    132 * Drag-n-Drop usage of new languages. The plugin now supports all languages that GeSHi(v1.0.7) supports. You just need to drop the language file in the "geshi" directory & use the filename as the tag for the language(like if file is "pascal.php", then the filename is "pascal" & the tags will be [pascal] & [/pascal]).
    133 * Language name which is displayed in the Code-Box can now be turned ON or OFF easily.
    134 * No more need to set the physical-path to the "geshi" directory if you are doing a default installation.
    135 * Plain-Text View of the code hilited in the code-box is now possible. This feature can be enabled/disabled easily in the Configuration Interface in WordPress Administration.
    136 * NO NEED TO EDIT THE PLUGIN FILE ANYMORE. You can now configure the plugin settings from a GUI located under the OPTIONS menu in your WordPress Administration(WordPress 1.5 & above only).
    137 
    138 
    139 Changelog of versions prior to v3.0 is available in the [manual](http://plugins.svn.wordpress.org/igsyntax-hiliter/trunk/MANUAL.txt).
     115Changelog of versions prior to v4.0 is available in the [manual](http://plugins.svn.wordpress.org/igsyntax-hiliter/trunk/MANUAL.txt).
    140116
    141117== Upgrade Notice ==
    142118
    143 = 4.1 =
    144 This version fixes a security related bug and a PHP 5.2 compatibility bug. Upgrade immediately.
     119= 4.2 =
     120This version fixes the bug due to which shorthand tags for all included languages and user added languages did not work.
    145121
    146122
Note: See TracChangeset for help on using the changeset viewer.