No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 24 | 25 | 26 |...| 57 | 58 | 59 || Next»

そういや Same Origin Policy とかってあったけなぁ

結局 javascript 単体で他のホストの Web Servide を REST アクセスで利用するのも無理と.ブラウザ側の設定かえてすべてアクセス許可とかやればいいけどそんな作業をやらせたくない.しゃーないからメインのページを php で書いて通信をリダイレクトさせるか… だいぶ面倒になってきた.

NP_SyntaxHighlighter を試す

http://wakka.xiffy.nl/syntaxhighlighter より入手.

PEARText_Highlighter を使っているらしい.とりあえず pre タグでソースを書いてしまうので div でなく pre にクラスを書いて動くように修正.このプラグイン無しでも普通に表示できるようにHTMLエスケープされた文字列を食うように変更.ついでに,<?php と ?> で囲まれてない php もハイライトするうにあほな修正を入れてみた.

<?php
   function parseString(&$content) {
      $chk = ' class="highlight';
      if (strpos($content['body'],$chk) > 0 ||  strpos($content['more'],$chk) > 0) {
         if ($this->_setupPEAR()) {
            $supportedRules = $this->getOption('highlight_rules');
            $supported_highlighter = explode(',',$supportedRules);
            if (is_array($supported_highlighter)) {
               foreach ($supported_highlighter AS $key=>$syntax) {
                   $supported_highlighter[$key] = trim(strtolower($syntax));
               }
            } else {
               // fallback with default settings
               $supported_highlighter = $this->supported_highlighter;
            }
            $this->counter = 1;
            $highlight_str = '';
            $content_part = array('body','more');
            foreach ($content_part as $key) {
               // now check for all allowed syntax highlighter
               foreach ($supported_highlighter AS $syntax) {
                  $pattern = "/<pre class=\"highlight_".$syntax."\">(.*?)<\/pre>/esi";
                  $replacement = "\$this->highlight_code('\\1','".$syntax."')";
                  $content[$key] = preg_replace($pattern,$replacement,$content[$key]);
               }
            } // end content_part
         } else {
            doError('Check your settings - can not include PEAR::Text_Highlighter');
         }
         // some cleanup code
         ini_restore('include_path');
         unset($this->hl);
      }
   }
   function highlight_code($string, $mode)
   {
      // remove possible br tags from nucleus automatic linebreak convertion
      $string = preg_replace('/<br \/>[\n|\r| ]/', '', $string);
      $string = stripslashes($string);
      $string = str_replace ( array ( '&amp;' , '&quot;', '&apos;' , '&lt;' , '&gt;', '&apos;' ), array ( '&', '"', "'", '<', '>', '?' ), $string );
      $normflag=false;
      $va = strpos($string, "<?");
      if(strcmp($mode, 'php')==0 &&  ($va==FALSE || $va > 5)) {
    $normflag = true;
    $string = "<?php ".$string."?>";
      }
      // check is there a cached object
      if (!isset($this->hl[$mode])) {
         // create new highlighter object
         $options = array('tag' => $this->tag_mode,'numbers'=>$this->line_numbers);
         $this->hl[$mode] = & Text_Highlighter::factory($mode,$options);
      }
      // retrieve highlighted string
      $highlight_str = $this->hl[$mode]->highlight($string);
      // if higlight_mode == save add a dummy id to exclude from further parsing
      $checkid = '';
      if ($this->rendermode == 'save') {
          $checkid = 'id="np_hl_'.$this->counter.'" ';
      }
      // enclose with div container
      //$highlight_str = '<div '.$checkid.'class="highlight_'.$mode.'">'.$highlight_str.'</div>';
      $highlight_str = $highlight_str;
      $this->counter++;
      if($normflag){
    $highlight_str = str_replace("<span class=\"hl-inlinetags\">?&gt;</span>", "", $highlight_str);    
    $highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?&lt;\\?php *\n(<\\/span>)?/", "", $highlight_str);    
      }
      return $highlight_str;
   }

追記:

Text_highlighter を新しくしたら <?php の後の空白とかの扱いが変わったらしい.なので最後のほうをちょっと書き換え.

<?php
    $highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?<\\?php *(<\\/span>)?(<.*?>) *\n/", "\\3", $highlight_str);

Nucleus の改行をちょっと頭よくする

編集画面での改行位置に自動で改行(<br />)を入れるようにしているのだけど Nucleus は <pre> タグの内部にまで改行を入れてくれる.結果として二重の改行となってしまいひじゃうに見栄えが悪い.

ということで,ソースをいじって <pre> タグの内部に改行入れないようにしてみた.nucleus/libs/globalfunctions.php にある addBreaks というのが編集後の保存時に改行を挿入している関数らしい.

function addBreaks($var) { return nl2br($var); }

php のnl2br という関数を使って一律に改行の挿入を行っているので,これを pre タグの内部と外部で挙動が変わるように変更.

function addBreaks($var) {
  $i=0;
  $v2="";
  $n=mb_strlen($var);
  while($i<$n){
    $p=mb_strpos($var,"<pre",$i);
    if($p==FALSE){
      $v2.=nl2br(mb_substr($var, $i));
      break;
    }
    $v2.=nl2br(mb_substr($var, $i,$p-$i));
    $i=$p;
    $p=mb_strpos($var,"</pre>",$i);
    if($p==FALSE){
      $v2.=mb_substr($var, $i);
      break;
    }
    $v2.=mb_substr($var, $i,$p-$i);
    $i=$p;
  }
  return $v2;
}

もっときれいに書けるだろうけど必要十分なので汚さはむし.

easy regex @sed

あなごるの新しい問題を毎度のごとく sed でがんばる.埋め込むと簡単なので埋め込まない方針で,括弧のネストがないと仮定して317bytes.ひとまずこれ以上縮めるのは面倒なので投げてしまう.

L system@sed

がんばってルールを適用するプログラムを書いたのだが埋め込みに勝てそうにない.どうせなので両方出してしまえ.

あなごる

自分の発表も終わったので増えてた問題をsedで解く.delete duplicate lines と Phone Key Pad はstatistics を見る限り ebanさんと同じコードになったもよう.palindromize は 57 bytes で shinhさんと並んだけどコードは微妙に違うらしい.もうチョイ考えてみやう.寝ながら.

«Prev || 1 | 2 | 3 |...| 24 | 25 | 26 |...| 57 | 58 | 59 || Next»
Search
Feeds

Page Top