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

figlet文本在WP中的应用

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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的短代码,然后再添加处理此短代码的相关函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// [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 "<pre>{$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目录(前面的文章介绍过的,这里不再述)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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("<pre>{$text0}
1
{$text1}

");
}

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

1
2
3
4
5
6
    _ __  __           __   __          
   (_) / / /___ ______/ /__/ /___  ____ _
  / / /_/ / __ `/ ___/ //_/ / __ \/ __ `/
 / / __  / /_/ / /__/ ,< / / /_/ / /_/ /
/_/_/ /_/\__,_/\___/_/|_/_/\____/\__, /  
                                /____/
1
2
3
4
5
6
7
8
9
10
11
12
  ______   __   _      ___      _____     _  __  
 /_   _// | || | ||   / _ \\   / ____||  | |/ //
  -| ||-  | '--' ||  / //\ \\ / //---`'  | ' //  
  _| ||_  | .--. || |  ___  ||\ \\___    | . \\  
 /_____// |_|| |_|| |_||  |_|| \_____||  |_|\_\\
 `-----`  `-`  `-`  `-`   `-`   `----`   `-` --`
  __        ___      _____  
 | ||      / _ \\   /  ___||
 | ||     | / \ || | // __  
 | ||__   | \_/ || | \\_\ ||
 |____//   \___//   \____//  
 `----`    `---`     `---`

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

先安装Text_Figlet 包:

1
pear install Text_Figlet-1.0.2

然后开始干活:

1
2
3
4
5
6
7
8
9
10
<?php
require_once 'Text/Figlet.php';

$figlet = new Text_Figlet();
$error  = $figlet->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为例:

1
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:

更多
One Response Post a comment

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS