当前位置: 首页>>代码示例>>PHP>>正文


PHP F::IncludeFile方法代码示例

本文整理汇总了PHP中F::IncludeFile方法的典型用法代码示例。如果您正苦于以下问题:PHP F::IncludeFile方法的具体用法?PHP F::IncludeFile怎么用?PHP F::IncludeFile使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在F的用法示例。


在下文中一共展示了F::IncludeFile方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: smarty_function_wgroup_show

/**
 * Plugin for Smarty
 * Display widget group
 *
 * @param   array                    $aParams
 * @param   Smarty_Internal_Template $oSmartyTemplate
 *
 * @return  string
 */
function smarty_function_wgroup_show($aParams, $oSmartyTemplate)
{
    if (isset($aParams['name'])) {
        if (!isset($aParams['group'])) {
            $aParams['group'] = $aParams['name'];
        } elseif (!isset($aParams['widget'])) {
            $aParams['widget'] = $aParams['name'];
        }
    }
    if (!isset($aParams['group'])) {
        $sError = 'Parameter "group" does not define in {wgroup_show ...} function';
        if ($oSmartyTemplate->template_resource) {
            $sError .= ' (template: ' . $oSmartyTemplate->template_resource . ')';
        }
        trigger_error($sError, E_USER_WARNING);
        return null;
    }
    $sWidgetGroup = $aParams['group'];
    $aWidgets = E::ModuleViewer()->GetWidgets();
    $sResult = '';
    if (isset($aWidgets[$sWidgetGroup])) {
        if (!function_exists('smarty_function_widget')) {
            F::IncludeFile('function.widget.php');
        }
        foreach ($aWidgets[$sWidgetGroup] as $oWidget) {
            $sResult .= smarty_function_widget(array('object' => $oWidget), $oSmartyTemplate);
        }
    }
    return $sResult;
}
开发者ID:hard990,项目名称:altocms,代码行数:39,代码来源:function.wgroup_show.php

示例2: _createTextParser

 /**
  * Create a typographer and load its configuration
  */
 protected function _createTextParser()
 {
     $sParser = C::Get('module.text.parser');
     $sClassName = 'TextParser' . $sParser;
     $sFileName = './parser/' . $sClassName . '.class.php';
     F::IncludeFile($sFileName);
     $this->oTextParser = new $sClassName();
 }
开发者ID:AlexSSN,项目名称:altocms,代码行数:11,代码来源:Text.class.php

示例3: smarty_function_wgroup

/**
 * Plugin for Smarty
 * Eval widget groups
 *
 * @param   array $aParams
 * @param   Smarty_Internal_Template $oSmartyTemplate
 *
 * @return  string
 */
function smarty_function_wgroup($aParams, $oSmartyTemplate)
{
    if (isset($aParams['name'])) {
        if (!isset($aParams['group'])) {
            $aParams['group'] = $aParams['name'];
        } elseif (!isset($aParams['widget'])) {
            $aParams['widget'] = $aParams['name'];
        }
    }
    if (!isset($aParams['group']) && !isset($aParams['name'])) {
        $sError = 'Parameter "group" does not define in {wgroup ...} function';
        if ($oSmartyTemplate->template_resource) {
            $sError .= ' (template: ' . $oSmartyTemplate->template_resource . ')';
        }
        trigger_error($sError, E_USER_WARNING);
        return null;
    }
    $sWidgetGroup = $aParams['group'];
    $aWidgetParams = isset($aParams['params']) ? $aParams['params'] : $aParams;
    // group parameter required
    if (!$sWidgetGroup) {
        return null;
    }
    if (isset($aParams['command'])) {
        $sWidgetCommand = $aParams['command'];
    } else {
        $sWidgetCommand = 'show';
    }
    if ($sWidgetCommand == 'show') {
        if (!function_exists('smarty_function_wgroup_show')) {
            F::IncludeFile('function.wgroup_show.php');
        }
        unset($aWidgetParams['group']);
        if (isset($aWidgetParams['command'])) {
            unset($aWidgetParams['command']);
        }
        return smarty_function_wgroup_show(array('group' => $sWidgetGroup, 'params' => $aWidgetParams), $oSmartyTemplate);
    } elseif ($sWidgetCommand == 'add') {
        if (!isset($aWidgetParams['widget'])) {
            trigger_error('Parameter "widget" does not define in {wgroup ...} function', E_USER_WARNING);
            return null;
        }
        if (!function_exists('smarty_function_wgroup_add')) {
            F::IncludeFile('function.wgroup_add.php');
        }
        $sWidgetName = $aWidgetParams['widget'];
        unset($aWidgetParams['group']);
        unset($aWidgetParams['widget']);
        if (isset($aWidgetParams['command'])) {
            unset($aWidgetParams['command']);
        }
        return smarty_function_wgroup_add(array('group' => $sWidgetGroup, 'widget' => $sWidgetName, 'params' => $aWidgetParams), $oSmartyTemplate);
    }
    return '';
}
开发者ID:hard990,项目名称:altocms,代码行数:64,代码来源:function.wgroup.php

示例4: smarty_function_wgroup_show

/**
 * Plugin for Smarty
 * Display widget group
 *
 * @param   array                    $aParams
 * @param   Smarty_Internal_Template $oSmartyTemplate
 *
 * @return  string
 */
function smarty_function_wgroup_show($aParams, $oSmartyTemplate)
{
    static $aStack = array();
    if (empty($aParams['group']) && empty($aParams['name'])) {
        $sError = 'Parameter "group" does not define in {wgroup_show ...} function';
        if ($oSmartyTemplate->template_resource) {
            $sError .= ' (template: ' . $oSmartyTemplate->template_resource . ')';
        }
        F::SysWarning($sError);
        return null;
    }
    if (empty($aParams['group']) && !empty($aParams['name'])) {
        $aParams['group'] = $aParams['name'];
        unset($aParams['name']);
    }
    $sWidgetGroup = $aParams['group'];
    $aWidgetParams = isset($aParams['params']) ? array_merge($aParams['params'], $aParams) : $aParams;
    if (isset($aStack[$sWidgetGroup])) {
        // wgroup nested in self
        $sError = 'Template function {wgroup group="' . $sWidgetGroup . '" nested in self ';
        if ($oSmartyTemplate->template_resource) {
            $sError .= ' (template: ' . $oSmartyTemplate->template_resource . ')';
        }
        F::SysWarning($sError);
        return null;
    }
    // add group into the stack
    $aStack[$sWidgetGroup] = $aWidgetParams;
    $aWidgets = E::ModuleViewer()->GetWidgets();
    $sResult = '';
    if (isset($aWidgets[$sWidgetGroup])) {
        if (!function_exists('smarty_function_widget')) {
            F::IncludeFile('function.widget.php');
        }
        foreach ($aWidgets[$sWidgetGroup] as $oWidget) {
            $sResult .= smarty_function_widget(array_merge($aWidgetParams, array('widget' => $oWidget)), $oSmartyTemplate);
        }
    }
    // Pop element off the stack
    array_pop($aStack);
    return $sResult;
}
开发者ID:AntiqS,项目名称:altocms,代码行数:51,代码来源:function.wgroup_show.php

示例5: _includeFile

 /**
  * @param string $sFile
  * @param string $sCheckClassname
  *
  * @return bool|mixed
  */
 protected static function _includeFile($sFile, $sCheckClassname = null)
 {
     if (class_exists('F', false)) {
         $xResult = F::IncludeFile($sFile);
     } else {
         $xResult = (include_once $sFile);
     }
     if ($sCheckClassname) {
         return class_exists($sCheckClassname, false);
     }
     return $xResult;
 }
开发者ID:Azany,项目名称:altocms,代码行数:18,代码来源:Loader.class.php

示例6: Init

 /**
  * Инициализация модуля
  */
 public function Init()
 {
     F::IncludeFile(Plugin::GetPath('ls') . 'libs/external/LiveImage/Image.php');
     $this->aParamsDefault = array('watermark_use' => false, 'round_corner' => false);
 }
开发者ID:AntiqS,项目名称:altocms,代码行数:8,代码来源:Image.class.php

示例7: _getSkinFromConfig

 protected function _getSkinFromConfig($sSkin)
 {
     $sSkinTheme = null;
     if (F::File_Exists($sFile = Config::Get('path.skins.dir') . $sSkin . '/settings/config/config.php')) {
         $aSkinConfig = F::IncludeFile($sFile, false, true);
         if (isset($aSkinConfig['view']) && isset($aSkinConfig['view']['theme'])) {
             $sSkinTheme = $aSkinConfig['view']['theme'];
         } elseif (isset($aSkinConfig['view.theme'])) {
             $sSkinTheme = $aSkinConfig['view.theme'];
         }
     }
     return $sSkinTheme;
 }
开发者ID:ZeoNish,项目名称:altocms,代码行数:13,代码来源:ActionAdmin.class.php

示例8: smarty_insert_block

/**
 * Плагин для Smarty
 * Подключает обработчик блоков шаблона (LS-compatible)
 *
 * @param array                    $aParams
 * @param Smarty_Internal_Template $oSmarty
 *
 * @return string
 */
function smarty_insert_block($aParams, &$oSmarty)
{
    if (!isset($aParams['block'])) {
        trigger_error('Parameter "block" not define in {insert name="block" ...}', E_USER_WARNING);
        return null;
    }
    $aParams['name'] = $aParams['block'];
    if (!function_exists('smarty_function_widget')) {
        F::IncludeFile(Config::Get('path.smarty.plug') . 'function.widget.php');
    }
    return smarty_function_widget($aParams, $oSmarty);
    /*
    $oEngine = Engine::getInstance();
    
    $sWidget = ucfirst(basename($aParams['block']));
    
    $sDelegatedClass = $oEngine->Plugin_GetDelegate('widget', $sWidget);
    if ($sDelegatedClass == $sWidget) {
        // Пробуем получить делегата по старинке, для совместимости с LS
        // * LS-compatible * //
        $sDelegatedClass = $oEngine->Plugin_GetDelegate('block', $sWidget);
    }
    
    // Если делегатов нет, то определаем класс виджета
    if ($sDelegatedClass == $sWidget) {
        // если указан плагин, то ищем там
        if (isset($aParams['params']) && isset($aParams['params']['plugin'])) {
            $sPlugin = $aParams['params']['plugin'];
        } else {
            $sPlugin = '';
        }
        // Проверяем наличие класса виджета штатными средствами
        $sWidgetClass = E::Widget_FileClassExists($sWidget, $sPlugin, true);
    
        if (!$sWidgetClass) {
            if ($sPlugin) {
                // Если класс виджета не найден, то пытаемся по старинке задать класс "LS-блока"
                $sWidgetClass = 'Plugin' . ucfirst($aParams['params']['plugin']) . '_Block' . $sWidget;
            } else {
                // Если класс виджета не найден, то пытаемся по старинке задать класс "LS-блока"
                $sWidgetClass = 'Block' . $sWidget;
            }
            // Проверяем делигирование найденного класса
            $sWidgetClass = E::Plugin_GetDelegate('block', $sWidgetClass);
        }
    
        // Проверяем делигирование найденного класса
        $sWidgetClass = $oEngine->Plugin_GetDelegate('widget', $sWidgetClass);
    } else {
        $sWidgetClass = $sDelegatedClass;
    }
    
    $sTemplate = $oEngine->Plugin_GetDelegate('template', 'widgets/widget.' . $aParams['block'] . '.tpl');
    if (!F::File_Exists($sTemplate)) {
        //$sTemplate = '';
        // * LS-compatible * //
        $sLsTemplate = $oEngine->Plugin_GetDelegate('template', 'blocks/block.' . $aParams['block'] . '.tpl');
        if (F::File_Exists($sLsTemplate)) {
            $sTemplate = $sLsTemplate;
        }
    }
    
    //  * параметры
    $aWidgetParams = array();
    if (isset($aParams['params'])) {
        $aWidgetParams = $aParams['params'];
    }
    
    // * Подключаем необходимый обработчик
    $oWidgetHandler = new $sWidgetClass($aWidgetParams);
    
    // * Запускаем обработчик
    $sResult = $oWidgetHandler->Exec();
    
    // Если обработчик ничего не вернул, то рендерим шаблон
    if (!$sResult && $sTemplate)
        $sResult = $oSmarty->fetch($sTemplate);
    
    return $sResult;
    */
}
开发者ID:AntiqS,项目名称:altocms,代码行数:90,代码来源:insert.block.php

示例9: newTextParser

 /**
  * @param string $sType
  * @param bool   $bClear
  *
  * @return ITextParser
  */
 public static function newTextParser($sType = 'default', $bClear = true)
 {
     $sParser = C::Get('module.text.parser');
     $sClassName = 'TextParser' . $sParser;
     $sFileName = './parser/' . $sClassName . '.class.php';
     F::IncludeFile($sFileName);
     /** @var ITextParser $oTextParser */
     $oTextParser = new $sClassName();
     $oTextParser->loadConfig($sType, $bClear);
     return $oTextParser;
 }
开发者ID:AntiqS,项目名称:altocms,代码行数:17,代码来源:Text.class.php

示例10: define

define('ALTO_DEBUG_PROFILE', 1);
define('ALTO_DEBUG_FILES', 2);
if (is_file(__DIR__ . '/config.defines.php')) {
    include __DIR__ . '/config.defines.php';
}
defined('DEBUG') || define('DEBUG', 0);
// load basic config with paths
$config = (include __DIR__ . '/config.php');
if (!$config) {
    die('Fatal error: Cannot load file "' . __DIR__ . '/config.php"');
}
// load system functions
$sFuncFile = $config['path']['dir']['engine'] . 'include/Func.php';
if (!is_file($sFuncFile) || !(include $sFuncFile)) {
    die('Fatal error: Cannot load file "' . $sFuncFile . '"');
}
// load Storage class
F::IncludeFile($config['path']['dir']['engine'] . '/classes/core/Storage.class.php');
if (!isset($config['url']['request'])) {
    $config['url']['request'] = F::ParseUrl();
}
// load Config class
F::IncludeFile($config['path']['dir']['engine'] . '/classes/core/Config.class.php');
if (!defined('ALTO_NO_LOADER')) {
    // load Loder class
    F::IncludeFile($config['path']['dir']['engine'] . '/classes/core/Loader.class.php');
    Loader::Init($config);
}
// load Application class
F::IncludeFile($config['path']['dir']['engine'] . '/classes/core/Application.class.php');
// EOF
开发者ID:anp135,项目名称:altocms,代码行数:31,代码来源:loader.php

示例11: _initSkin

 /**
  * Initialization of skin
  *
  */
 protected function _initSkin()
 {
     $this->sViewSkin = $this->GetConfigSkin();
     // Load skin's config
     $aConfig = array();
     Config::ResetLevel(Config::LEVEL_SKIN);
     $aSkinConfigPaths['sSkinConfigCommonPath'] = Config::Get('path.smarty.template') . '/settings/config/';
     $aSkinConfigPaths['sSkinConfigAppPath'] = Config::Get('path.dir.app') . F::File_LocalPath($aSkinConfigPaths['sSkinConfigCommonPath'], Config::Get('path.dir.common'));
     // Может загружаться основной конфиг скина, так и внешние секции конфига,
     // которые задаются ключом 'config_load'
     // (обычно это 'classes', 'assets', 'jevix', 'widgets', 'menu')
     $aConfigNames = array('config') + F::Str2Array(Config::Get('config_load'));
     // Config section that are loaded for the current skin
     $aSkinConfigNames = array();
     // ** Old skin version compatibility
     $oSkin = E::ModuleSkin()->GetSkin($this->sViewSkin);
     if (!$oSkin || !$oSkin->GetCompatible() || $oSkin->SkinCompatible('1.1', '<')) {
         // 'head.default' may be used in skin config
         C::Set('head.default', C::Get('assets.default'));
     }
     // Load configs from paths
     foreach ($aConfigNames as $sConfigName) {
         foreach ($aSkinConfigPaths as $sPath) {
             $sFile = $sPath . $sConfigName . '.php';
             if (F::File_Exists($sFile)) {
                 $aSubConfig = F::IncludeFile($sFile, false, true);
                 if ($sConfigName != 'config' && !isset($aSubConfig[$sConfigName])) {
                     $aSubConfig = array($sConfigName => $aSubConfig);
                 } elseif ($sConfigName == 'config' && isset($aSubConfig['head'])) {
                     // ** Old skin version compatibility
                     $aSubConfig['assets'] = $aSubConfig['head'];
                     unset($aSubConfig['head']);
                 }
                 // загружаем конфиг, что позволяет сразу использовать значения
                 // в остальных конфигах скина (assets и кастомном config.php) через Config::Get()
                 Config::Load($aSubConfig, false, null, null, $sFile);
                 if ($sConfigName != 'config' && !isset($aSkinConfigNames[$sConfigName])) {
                     $aSkinConfigNames[$sConfigName] = $sFile;
                 }
             }
         }
     }
     if (!$oSkin || !$oSkin->GetCompatible() || $oSkin->SkinCompatible('1.1', '<')) {
         // 'head.default' may be used in skin config
         C::Set('head.default', false);
     }
     Config::ResetLevel(Config::LEVEL_SKIN_CUSTOM);
     $aStorageConfig = Config::ReadStorageConfig(null, true);
     // Reload sections changed by user
     if ($aSkinConfigNames) {
         foreach (array_keys($aSkinConfigNames) as $sConfigName) {
             if (isset($aStorageConfig[$sConfigName])) {
                 if (empty($aConfig)) {
                     $aConfig[$sConfigName] = $aStorageConfig[$sConfigName];
                 } else {
                     $aConfig = F::Array_MergeCombo($aConfig, array($sConfigName => $aStorageConfig[$sConfigName]));
                 }
             }
         }
     }
     // Checks skin's config from users settings
     $sUserConfigKey = 'skin.' . $this->sViewSkin . '.config';
     $aUserConfig = Config::Get($sUserConfigKey);
     if ($aUserConfig) {
         if (!$aConfig) {
             $aConfig = $aUserConfig;
         } else {
             $aConfig = F::Array_MergeCombo($aConfig, $aUserConfig);
         }
     }
     if ($aConfig) {
         Config::Load($aConfig, false, null, null, $sUserConfigKey);
     }
     // Check skin theme and set one in config if it was changed
     if ($this->GetConfigTheme() != Config::Get('view.theme')) {
         Config::Set('view.theme', $this->GetConfigTheme());
     }
     // Load lang files for skin
     E::ModuleLang()->LoadLangFileTemplate(E::ModuleLang()->GetLang());
     // Load template variables from config
     if (($aVars = Config::Get('view.assign')) && is_array($aVars)) {
         $this->Assign($aVars);
     }
 }
开发者ID:anp135,项目名称:altocms,代码行数:88,代码来源:Viewer.class.php

示例12:

/*---------------------------------------------------------------------------
 * @Project: Alto CMS
 * @Project URI: http://altocms.com
 * @Description: Advanced Community Engine
 * @Copyright: Alto CMS Team
 * @License: GNU GPL v2 & MIT
 *----------------------------------------------------------------------------
 * Based on
 *   LiveStreet Engine Social Networking by Mzhelskiy Maxim
 *   Site: www.livestreet.ru
 *   E-mail: rus.engine@gmail.com
 *----------------------------------------------------------------------------
 */
F::IncludeFile('Storage.class.php');
F::IncludeFile('DataArray.class.php');
/**
 * Управление простым конфигом в виде массива
 *
 * @package engine.lib
 * @since   1.0
 *
 * @method static Config getInstance
 */
class Config extends Storage
{
    const LEVEL_MAIN = 0;
    const LEVEL_APP = 1;
    const LEVEL_CUSTOM = 2;
    const LEVEL_ACTION = 3;
    const LEVEL_SKIN = 4;
开发者ID:ZeoNish,项目名称:altocms,代码行数:30,代码来源:Config.class.php

示例13: _initSkin

 /**
  * Initialization of skin
  *
  */
 protected function _initSkin()
 {
     $this->sViewSkin = $this->GetConfigSkin();
     // Load skin's config
     $aConfig = array();
     if (F::File_Exists($sFile = Config::Get('path.smarty.template') . '/settings/config/config.php')) {
         $aConfig = F::IncludeFile($sFile, FALSE, TRUE);
     }
     if (F::File_Exists($sFile = Config::Get('path.smarty.template') . '/settings/config/menu.php')) {
         $aConfig = F::Array_MergeCombo($aConfig, F::IncludeFile($sFile, false, true));
     }
     //        $aConfigLoad = F::Str2Array(Config::Get('config_load'));
     //        if ($aConfigLoad) {
     //            foreach ($aConfigLoad as $sConfigName) {
     //                if (F::File_Exists($sFile = Config::Get('path.smarty.template') . "/settings/config/$sConfigName.php")) {
     //                    $aConfig = array_merge($aConfig, F::IncludeFile($sFile, false, true));
     //                }
     //            }
     //        }
     // Checks skin's config in app dir
     $sFile = Config::Get('path.dir.app') . F::File_LocalPath($sFile, Config::Get('path.dir.common'));
     if (F::File_Exists($sFile)) {
         $aConfig = F::Array_MergeCombo($aConfig, F::IncludeFile($sFile, false, true));
     }
     // Checks skin's config from users settings
     $aUserConfig = Config::Get('skin.' . $this->sViewSkin . '.config');
     if ($aUserConfig) {
         if (!$aConfig) {
             $aConfig = $aUserConfig;
         } else {
             $aConfig = F::Array_MergeCombo($aConfig, $aUserConfig);
         }
     }
     Config::ResetLevel(Config::LEVEL_SKIN);
     if ($aConfig) {
         Config::Load($aConfig, false, null, null, 'skin');
     }
     // Check skin theme and set one in config if it was changed
     if ($this->GetConfigTheme() != Config::Get('view.theme')) {
         Config::Set('view.theme', $this->GetConfigTheme());
     }
     // Load lang files for skin
     E::ModuleLang()->LoadLangFileTemplate(E::ModuleLang()->GetLang());
     // Skip skin widgets for local viewer
     if (!$this->bLocal) {
         // * Load skin widgets
         if (F::File_Exists($sFile = Config::Get('path.smarty.template') . '/settings/config/widgets.php')) {
             $aSkinWidgets = F::IncludeFile($sFile, false, true);
             if (isset($aSkinWidgets['widgets']) && is_array($aSkinWidgets['widgets']) && count($aSkinWidgets['widgets'])) {
                 $aWidgets = array_merge(Config::Get('widgets'), $aSkinWidgets['widgets']);
                 Config::Set('widgets', $aWidgets);
             }
         }
     }
     // Load template variables from config
     if (($aVars = Config::Get('view.assign')) && is_array($aVars)) {
         $this->Assign($aVars);
     }
 }
开发者ID:ZeoNish,项目名称:altocms,代码行数:63,代码来源:Viewer.class.php

示例14: IsAvailable

<?php

F::IncludeFile(LS_DKCACHE_PATH . 'Zend/Cache.php');
F::IncludeFile(LS_DKCACHE_PATH . 'Zend/Cache/Backend/Interface.php');
interface ICacheBackend
{
    /**
     * @return bool
     */
    public static function IsAvailable();
    /**
     * @param $sName
     *
     * @return mixed
     */
    public function Load($sName);
    /**
     * @param $data
     * @param $sName
     * @param $aTags
     * @param $nTimeLife
     *
     * @return mixed
     */
    public function Save($data, $sName, $aTags = array(), $nTimeLife = false);
    /**
     * @param $sName
     *
     * @return mixed
     */
    public function Remove($sName);
开发者ID:AntiqS,项目名称:altocms,代码行数:31,代码来源:ICacheBackend.php

示例15: array

<?php

/*---------------------------------------------------------------------------
 * @Project: Alto CMS
 * @Project URI: http://altocms.com
 * @Description: Advanced Community Engine
 * @Copyright: Alto CMS Team
 * @License: GNU GPL v2 & MIT
 *----------------------------------------------------------------------------
 */
F::IncludeFile('Action.class.php');
F::IncludeFile('ActionPlugin.class.php');
/**
 * Класс роутинга
 * Инициализирует ядро, определяет какой экшен запустить согласно URL'у и запускает его
 *
 * @package engine
 * @since 1.0
 */
class Router extends LsObject
{
    const BACKWARD_COOKIE = 'route_backward';
    /**
     * Конфигурация роутинга, получается из конфига
     *
     * @var array
     */
    protected $aConfigRoute = array();
    /**
     * Текущий экшен
     *
开发者ID:hard990,项目名称:altocms,代码行数:31,代码来源:Router.class.php


注:本文中的F::IncludeFile方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。