WordPress.org

Make WordPress Core

Ticket #9716: 9716.patch

File 9716.patch, 4.2 KB (added by kurtpayne, 4 years ago)

Give the user option of line endings

  • wp-admin/theme-editor.php

     
    8383 
    8484        $newcontent = stripslashes($_POST['newcontent']); 
    8585        $theme = urlencode($theme); 
     86 
     87        $neweol = (isset($_POST['neweol']) ? $_POST['neweol'] : ''); 
     88        $pattern = "/ 
     89                                ([^\r\n]|^)         # non-whitespace char, backreference 1 
     90                                (?: 
     91                                        [\r](?![\n])  | # +CR -LF 
     92                                        (?<![\r])[\n] | # -CR +LF 
     93                                        [\n][\r]      | # +LF +CR 
     94                                        [\r][\n]        # +CR +LF 
     95                                ) 
     96                        /xm"; 
     97        switch ($neweol) { 
     98                case 'windows' :                         
     99                        $newcontent = preg_replace($pattern, "$1\r\n", $newcontent); 
     100                        break; 
     101                case 'unix' : 
     102                        $newcontent = preg_replace($pattern, "$1\n", $newcontent); 
     103                        break; 
     104        }        
     105         
    86106        if (is_writeable($file)) { 
    87107                //is_writable() not always reliable, check return value. see comments @ http://uk.php.net/is_writable 
    88                 $f = fopen($file, 'w+'); 
     108                $f = fopen($file, 'w+b'); 
    89109                if ($f !== FALSE) { 
    90110                        fwrite($f, $newcontent); 
    91111                        fclose($f); 
     
    231251                 <input type="hidden" name="file" value="<?php echo esc_attr($file) ?>" /> 
    232252                 <input type="hidden" name="theme" value="<?php echo esc_attr($theme) ?>" /> 
    233253                 <input type="hidden" name="scrollto" id="scrollto" value="<?php echo $scrollto; ?>" /> 
     254                 <div id="line-endings"> 
     255                        <label for="neweol"><?php _e('Line endings:'); ?></label> 
     256                        <select name="neweol" id="neweol"> 
     257                                <?php $windows_eol = (false !== strpos($content, "\r\n")); ?> 
     258                                <option <?php if ($windows_eol) : ?>selected="selected"<?php endif; ?>value="windows">Windows</option> 
     259                                <option <?php if (!$windows_eol) : ?>selected="selected"<?php endif; ?>value="unix">Unix / Linux / Mac OS X</option> 
     260                        </select> 
     261                 </div> 
    234262                 </div> 
    235263        <?php if ( isset($functions ) && count($functions) ) { ?> 
    236264                <div id="documentation" class="hide-if-no-js"> 
  • wp-admin/plugin-editor.php

     
    5353        check_admin_referer('edit-plugin_' . $file); 
    5454 
    5555        $newcontent = stripslashes($_POST['newcontent']); 
     56 
     57        $neweol = (isset($_POST['neweol']) ? $_POST['neweol'] : ''); 
     58        $pattern = "/ 
     59                                ([^\r\n]|^)         # non-whitespace char, backreference 1 
     60                                (?: 
     61                                        [\r](?![\n])  | # +CR -LF 
     62                                        (?<![\r])[\n] | # -CR +LF 
     63                                        [\n][\r]      | # +LF +CR 
     64                                        [\r][\n]        # +CR +LF 
     65                                ) 
     66                        /xm"; 
     67        switch ($neweol) { 
     68                case 'windows' :                         
     69                        $newcontent = preg_replace($pattern, "$1\r\n", $newcontent); 
     70                        break; 
     71                case 'unix' : 
     72                        $newcontent = preg_replace($pattern, "$1\n", $newcontent); 
     73                        break; 
     74        } 
     75         
    5676        if ( is_writeable($real_file) ) { 
    57                 $f = fopen($real_file, 'w+'); 
     77                $f = fopen($real_file, 'w+b'); 
    5878                fwrite($f, $newcontent); 
    5979                fclose($f); 
    6080 
     
    230250                <input type="hidden" name="file" value="<?php echo esc_attr($file) ?>" /> 
    231251                <input type="hidden" name="plugin" value="<?php echo esc_attr($plugin) ?>" /> 
    232252                <input type="hidden" name="scrollto" id="scrollto" value="<?php echo $scrollto; ?>" /> 
     253                <div id="line-endings"> 
     254                        <label for="neweol"><?php _e('Line endings:'); ?></label> 
     255                        <select name="neweol" id="neweol"> 
     256                                <?php $windows_eol = (false !== strpos($content, "\r\n")); ?> 
     257                                <option <?php if ($windows_eol) : ?>selected="selected"<?php endif; ?>value="windows">Windows</option> 
     258                                <option <?php if (!$windows_eol) : ?>selected="selected"<?php endif; ?>value="unix">Unix / Linux / Mac OS X</option> 
     259                        </select> 
     260                </div> 
    233261                </div> 
    234262                <?php if ( !empty( $docs_select ) ) : ?> 
    235263                <div id="documentation" class="hide-if-no-js"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Lookup' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'http://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( $wp_version ) ?>&amp;redirect=true'); }" /></div>