ASCII字符也精彩——用PHP生成figlet文本 » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

ASCII字符也精彩——用PHP生成figlet文本

figlet文本在WP中的应用

先讲一下figlet文本在WP中的应用(这个大家应该比较感兴趣),如我以前用过的主题ASCIIwp中就是用figlet文本做博客标题的。
下面是我优化后的函数,用于显示figlet文本博客标题:

function header_code()
{
    $header_code_file=TEMPLATEPATH .'/header.txt';
    if(file_exists($header_code_file))
    {
        echo file_get_contents($header_code_file);
    }
    else
    {
        include_once 'figlet.php'; 
        $figlet = new Text_Figlet(); 
        $retcode  = $figlet->LoadFont(TEMPLATEPATH . "/fonts/graffiti.flf");
        if ($retcode === TRUE) 
        { 
            $header_code=$figlet->LineEcho(get_bloginfo('name'));
            file_put_contents($header_code_file,$header_code);
            echo $header_code;
        }
        else
        {
            echo 'Error: ', $retcode['message'];
        } 
    }
}

不单是在主题中可以应用,只要你想这样做,在日志里面也是可以使用的。
如:你可以添加一个名为figlet_it的短代码,然后再添加处理此短代码的相关函数:

// [figlet_it font="font-name" outputWidth="width"]the content[/figlet_it]
figlet_it_shortcode_handler( $atts, $content=null, $code="" ) {
        if( empty( $content ) )
         {
             return '';
         }
    extract( shortcode_atts( array(
        'font' => 'slant',
        'outputWidth' => 400,
    ), $atts ) );

          include_once 'figlet.php'; 
        $figlet = new Text_Figlet(); 
        $retcode  = $figlet->LoadFont(TEMPLATEPATH . "/fonts/{$font}.flf");
        if ($retcode === TRUE) 
        { 
            $the_code=$figlet->LineEcho($content);
            return "
{$the_code}

";
}
return 'Error: can not find the font!';
}
add_shortcode( 'figlet_it', 'figlet_it_shortcode_handler' );
最后,在日志中调用:
[figlet_it font="graffiti"]iHacklog[/figlet_it]

关于WP 短代码的相关文档:
http://codex.wordpress.org/Shortcode_API
Mastering WordPress Shortcodes

文章完了吗?还没完。。。
下面再说一下在其它地方生成figlet.


在Kohana或者zendframework中生成figlet文本

ZF自带的text组件中有Zend_Text_Figlet类,在ZF中就不说了,说下在Konaha中怎么用:
Kohana要先设置Zend目录到include目录(前面的文章介绍过的,这里不再述)。

class Controller_Figlet extends Controller {
    public function action_index()
    {
        $figlet = new Zend_Text_Figlet( 
            array('font'=>APPPATH .'vendors/Zend/Text/Figlet/slant.flf',
                'outputWidth'=>600,
                )
            );
        $text0 = $figlet->render('iHacklog');
        $figlet = new Zend_Text_Figlet( 
            array('outputWidth'=>600,
                )
            );
        $text1 = $figlet->render('iHacklog');       
        $this->response->body("
{$text0}
{$text1}

");
}

} // End Figlet
ok,看下生成的figlet文本:

    _ __  __           __   __           
   (_) / / /___ ______/ /__/ /___  ____ _
  / / /_/ / __ `/ ___/ //_/ / __ \/ __ `/
 / / __  / /_/ / /__/ ,< / / /_/ / /_/ / 
/_/_/ /_/\__,_/\___/_/|_/_/\____/\__, /  
                                /____/   
  ______   __   _      ___      _____     _  __  
 /_   _// | || | ||   / _ \\   / ____||  | |/ // 
  -| ||-  | '--' ||  / //\ \\ / //---`'  | ' //  
  _| ||_  | .--. || |  ___  ||\ \\___    | . \\  
 /_____// |_|| |_|| |_||  |_|| \_____||  |_|\_\\ 
 `-----`  `-`  `-`  `-`   `-`   `----`   `-` --` 
  __        ___      _____   
 | ||      / _ \\   /  ___|| 
 | ||     | / \ || | // __   
 | ||__   | \_/ || | \\_\ || 
 |____//   \___//   \____//  
 `----`    `---`     `---`   


在PHP中调用PEAR包中的Text_Figlet生成figlet文本

先安装Text_Figlet 包:

pear install Text_Figlet-1.0.2

然后开始干活:

LoadFont('slant.flf');
if (PEAR::isError($error)) {
    echo 'Error: ' . $error->getMessage() . "\n";
} else {
    echo $figlet->LineEcho('Hello, world!') . "\n";
}

字体可到figlet官方网址下载,或者到其FTP下载:
ftp://ftp.figlet.org/pub/figlet/


在Linux / windows中生成figlet 文本

以我的Archlinux为例:

sudo pacman -S figlet

安装后即可,不明白怎么用的可以man figlet .
windows的话,从其ftp下载可执行文件即可了。


最后,关于中文显示

这东西不是国人做的,在最新版本中虽然加入了多编码和UTF-8支持,不过我测试并不能显示中文。
参考了coolwanglu 的这篇文章《figlet中文支持》,
去http://archive.debian.net/en/source/slink/figfonts 下载了gb16st.flf , gb16fs.flf 和 unshift.flc 三个文件放到字体目录( *nix 下 : /usr/share/figlet/fonts/ ),还是没法搞定。 :arrow:

Tagged in : 短代码,shortcode,ASCII字符,figlet

All Comments (0)
Gravatar image
No Comments