Syntax Highlight のテスト

2018-10-28

言語別シンタックスハイライト

コード表示の見た目のテスト

Go

// Hugo's sample code
func GetTitleFunc(style string) func(s string) string {
  switch strings.ToLower(style) {
  case "go":
    return strings.Title
  case "chicago":
    tc := transform.NewTitleConverter(transform.ChicagoStyle)
    return tc.Title
  default:
    tc := transform.NewTitleConverter(transform.APStyle)
    return tc.Title
  }
}

HTML (go-html-template)

  <!-- Altotascal's main layout -->
  <div class="container-fluid">
    <div class="row">

      <nav class="col-md-2 d-none d-md-block bg-light sidebar">
        <div class="sidebar-sticky">
          {{- partial "section_menu" . }}
        </div>
      </nav>

      <main role="main" class="col-md-10 ml-sm-auto col-lg-10">
        <div class="row">
          <div class="col-md-10 main-content">
            {{- partial "main_content.html" . -}}
          </div>
          <div class="col-md-2 d-none d-md-block outline">
            <div class="outline-sticky">
              {{- partial "toc.html" . -}}
            </div>
          </div>
        </div>
      </main>
    </div>
  </div>

Bash

#!/bin/sh
# onupdate.sh

f="$1";
c="$2";
s="stat -f %m $f";
t=`$s`;
while [ 1 ];
do
    if [ $t -eq `$s` ]; then
        sleep 1;
    else
        echo "$c";
        echo `$c`;
        t=`$s`;
    fi;
done

Perl

#!/usr/bin/perl

=head1 DESCRIPTION

    Simulates Gacha drop rate. Open your eyes to reality.

=head1 SYNOPSIS

    gacha [-p price] [-s step] drop_percent

=head1 OPTIONS

    --help        : Show this help
    --price price : Price of single Gacha (default is 300)
    --step step   : Steps for print results (default is 10)

=cut

use strict;
use warnings;
use utf8;
use Getopt::Long;
use Pod::Usage;

binmode(STDOUT, ":utf8");

sub put_line {
    print "\033\[1;30m" . "-" x 59 . "\033\[0m\n";
}

my %opt;
$opt{price} = 300;
$opt{step}  = 10;

GetOptions(\%opt, qw/help price:i step:i/);
pod2usage(-verbose => 99, -sections => "DESCRIPTION|SYNOPSIS|OPTIONS") if $opt{help};

my $drop_percent = $ARGV[0] || 3;
my $drop_rate    = $drop_percent / 100;

print "\n【お目当てのドロップ率】: $drop_percent %\n\n";
print "\033\[32m1 個以上引ける確率 :\033\[0m\n";

my $miss_rate = 1;
my $num_gacha = 0;
for (1..5) {
    put_line();
    for (1..10) {
        For (1..$opt{step}) {
            $miss_rate *= (1 - $drop_rate);
            ++$num_gacha;
        }

        my $hit_rate     = (1 - $miss_rate) * 100;
        my $total_price  = $num_gacha * $opt{price};
        my $expected_try = 100 / $hit_rate;
        printf("%5d 連"
                   ." \033\[36m (%6d 円) \033\[0m:"
                   ." \033\[33m %6.3f % \033\[0m"
                   ." \033\[1;30m|\033\[0m"
                   ." %3d 連\033\[35m%5.1f \033\[0m回に 1 回\n",
               $num_gacha, $total_price, $hit_rate, $num_gacha, $expected_try);
    }
}

print "\n";

AS3

package dessert_knife.tools.async {

    import flash.utils.setTimeout;

    /**
     * Simple Promise implementation for AS3.
     *
     * <p>Usage:</p>
     * <listing>
     *     // Make sure async function returns Promise.
     *     function asyncTask_1():Promise {
     *         return new Promise(function(resolve:Function, reject:Function):void {
     *             setTimeout(function():void {
     *                 if (TASK_IS_SUCCEEDED) {
     *                     resolve(RESULT);
     *                 } else {
     *                     reject(REASON);
     *                 }
     *             }, 0);
     *         });
     *     }
     * 
     *     // How to write async sequence and error handling:
     *     asyncTask_1()
     *         .then(asyncTask_2)
     *         .then(asyncTask_3)
     *         .otherwise(onErrorOf_1_or_2_or_3)  // Same as cacth() of Promise in ECMAScript6
     *         .then(function(result_1_to_3:*):void {
     *             var result_4 = result_1_to_3 + 1;
     *             return result_4;
     *         })
     *         .then(function(result_4:*):void { ... })
     *         .otherwise(function(errorObject:*):void { ... });
     * </listing>
     */
    public class Promise {

        private const PENDING   :uint = 1;
        private const FULFILLED :uint = 2;
        private const REJECTED  :uint = 3;

        private var _state:uint = PENDING;
        private var _value:*    = null;
        private var _handlers:Vector.<Handler> = new Vector.<Handler>();

        // options
        private var _throwException:Boolean = false;
        private var _ensureAsync:Boolean    = true;

        //----------------------------------------------------------------------
        // public methods
        //----------------------------------------------------------------------

        /**
         * Returns new Promise object.
         * @param throwException - If true, throws Error when exception is caught.
         *                         It's handy for unit testing.
         * @param ensureAsync - If true, tasks of then() are surely invoked in next frame.
         */
        public function Promise(task:Function, throwException:Boolean=false, ensureAsync:Boolean=true) {
            _throwException = throwException;
            _ensureAsync    = ensureAsync;

            _kickoff(task);
        }

        public function then(onFulfilled:Function=null, onRejected:Function=null):Promise {
            return new Promise(function(resolve:Function, reject:Function):void {
                _doHandle(
                    // onFulfilled
                    function(result:*):* {
                        if (onFulfilled == null) {
                            return resolve(result);
                        }
                        return resolve(onFulfilled(result));
                    },
                    // onRejected
                    function(error:*):* {
                        if (onRejected == null) {
                            return reject(error);
                        }
                        return resolve(onRejected(error));
                    }
                );
            }, _throwException, _ensureAsync);
        }

        //----------------------------------------------------------------------
        // syntax sugars
        //----------------------------------------------------------------------

        /**
         * Same as cacth() of Promise in ECMAScript6.
         * (Reserved word 'catch' cannot be used for identifier in AS3.)
         */
        public function otherwise(onRejected:Function):Promise {
            return then(null, onRejected);
        }

        public static function resolve(result:*,
                                       throwException:Boolean=false,
                                       ensureAsync:Boolean=true):Promise
        {
            return new Promise(function(resolve:Function, reject:Function):void {
                resolve(result);
            }, throwException, ensureAsync);
        }

        public static function reject(error:*,
                                      throwException:Boolean=false,
                                      ensureAsync:Boolean=true):Promise
        {
            return new Promise(function(resolve:Function, reject:Function):void {
                reject(error);
            }, throwException, ensureAsync);
        }

        //----------------------------------------------------------------------
        // state transition
        //----------------------------------------------------------------------

        private function _resolve(result:*):void {
            try {
                if (result is Promise) {
                    _kickoff(result.then);
                    return;
                }
                _fulfill(result);
            } catch (ex:Error) {
                _handleException(ex);
            }
        }

        private function _reject(error:*):void {
            _state = REJECTED;
            _value = error;
            for each (var handler:Handler in _handlers) {
                _handle(handler);
            }
            _handlers = null;
        }

        private function _fulfill(result:*):void {
            _state = FULFILLED;
            _value = result;
            for each (var handler:Handler in _handlers) {
                _handle(handler);
            }
            _handlers = null;
        }

        //----------------------------------------------------------------------
        // private jobs
        //----------------------------------------------------------------------

        private function _kickoff(task:Function):void {
            var isAlreadyDone:Boolean = false;
            try {
                task(
                    // resolver
                    function(result:*):void {
                        if (isAlreadyDone) { return; }
                        isAlreadyDone = true;
                        _resolve(result);
                    },
                    // rejector
                    function(error:*):void {
                        if (isAlreadyDone) { return; }
                        isAlreadyDone = true;
                        _reject(error);
                    }
                );
            } catch (ex:Error) {
                if (isAlreadyDone) { return; }
                isAlreadyDone = true;
                _handleException(ex);
            }
        }

        private function _handleException(ex:Error):void {
            TART::LOG_ERROR {
                trace("[Error :: Promise]", ex.getStackTrace());
            }

            if (_throwException) { throw ex; }
            _reject(ex);
        }

        private function _doHandle(onFulfilled:Function, onRejected:Function):void {
            // If option is true, ensure invoking then() is always asynchronous.
            if (_ensureAsync) {
                setTimeout(function():void {
                    _handle(new Handler(onFulfilled, onRejected));
                }, 0);
                return;
            }

            _handle(new Handler(onFulfilled, onRejected));
        }

        private function _handle(handler:Handler):void {
            if (_state == PENDING) {
                _handlers.push(handler);
                return;
            }
            if (_state == FULFILLED && handler.onFulfilled != null) {
                handler.onFulfilled(_value);
                return;
            }
            if (_state == REJECTED && handler.onRejected != null) {
                handler.onRejected(_value);
                return;
            }
        }

    }
}

class Handler {

    public var onFulfilled:Function;
    public var onRejected:Function;

    public function Handler(onFulfilled:Function=null, onRejected:Function=null) {
        this.onFulfilled = onFulfilled;
        this.onRejected  = onRejected;
    }

}