public function execute()
 {
     $paths = $this->getFiles($this->sourceFilesDir);
     $prefixLength = strlen($this->sourceFilesDir);
     $modules = array();
     $indexModule = null;
     for ($i = 0; $i < count($paths); $i++) {
         $path = $paths[$i];
         $filename = trim(substr(substr($path, 0, -3), $prefixLength), "/\\.");
         $moduleName = str_replace(DS, '.', $filename);
         if (!empty($this->rootModuleName)) {
             $moduleName = $this->rootModuleName . '.' . $moduleName;
         }
         $skip = false;
         foreach ($this->excludes as $key => $value) {
             $len = strlen($value);
             if (substr($moduleName, 0, $len) == $value) {
                 $skip = true;
                 break;
             }
         }
         if ($skip) {
             continue;
         }
         $module = array('path' => $path, 'filename' => $filename, 'moduleName' => $moduleName, 'outputFilename' => strtolower($moduleName) . '.html');
         if ($moduleName == $this->indexModuleName) {
             $module['outputFilename'] = 'index.html';
             $indexModule = $module;
         } else {
             $modules[] = $module;
         }
     }
     usort($modules, array($this, 'compareTwoModule'));
     if (!$indexModule) {
         printf("\nnot found index module.\n");
         return false;
     }
     array_unshift($modules, $indexModule);
     foreach ($modules as $module) {
         printf("create %s\n", $module['moduleName']);
         $parser = new FileParser($this->title, $module['moduleName'], $indexModule['outputFilename']);
         $parser->parse($module['path']);
         $outputPath = $this->outputDir . DS . $module['outputFilename'];
         file_put_contents($outputPath, $parser->html($modules));
         // print("ok\n");
     }
     $this->copyfile('luadocx-style.css');
     $this->copyfile('luadocx-style-monokai.css');
     $this->copyfile('luadocx-highlight.min.js');
     print "copy assets file.\n";
     print "\n";
     return true;
 }