This page contains what hikaru do when you run a command.
It's really simple because it is just a function that make directories and copy files ... and I don't think you need to extend this function.
This is also a simple function that remove files in docs directory, you don't need to modify this function.
So those are complex functions and Hikaru does them by different modules. You should remind that Hikaru is designed as a command line program instead of a library, so you cannot take parts of Hikaru and use only this part, they are not designed for this.
At first you see a class called
Hikaru, but it just a collection of instances of modules and variables. When you enter a command, you will get an instance of Hikaru and run different methods, if you use
serve, it first load config files and prepare variables, then create different instances of modules, and it register some internal methods to those modules to provide basic functions for creating a site. To allow you to modify it, Hikaru will then load plugins and script, it will pass itself to plugins and allow them register methods to different modules. Then it is prepared for making the site.
Your theme's language files will be loaded by
Translator here, and theme's layout templates will be compiled by
Compiler and loaded by
Decorator here too.
Making the site is done by a special module called
Router, it is special because it call other modules to create a site. Hikaru call
Router::serve to start this process. First router will read files in srcs directory and theme srcs directory, and detect whether a file is binary or text (to make it easier only support UTF-8 encoding), and then classify them to
page by file type or layout property in front matter.
Router will call first module
Renderer, it contains registered functions, and will render file content by different extend names of file's srcPath, after rendering it replaces file extend name, and save it in file's docPath.
Processor to edit some page with other libs.
Router will call
Generator. Though Hikaru builds routes with directory structures, some output files don't have source files like sitemap files. So we create
File objects manually in generator functions before saving.
Finally if you called
Router will save them to doc directory with their
docPath, posts and pages will be decorated with different templates, which is depend on their layout. And if you called
Router will build an object with
docPath and files, then start a http server, if you request a path, it will find it in the object and return a page, posts and pages will be decorated before return, too. Also it will watch file and reload them automatically.