clo/README.md

84 lines
No EOL
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# clo
- another personal draught of a typesetting language and engine.
- website: https://kianting.info/wiki/w/Project:Clo
- license: MIT
- docs : https://kianting.info/wiki/w/Project:Clo
- issue tracking mailing list: `clo@kianting.info`
## How to use
```
cd /path/to/clo
node . [.clo FILE] --output-js=[.js FILE]
node [.js FILE]
```
## changing journal
- 20230904 建立 thenDo、matchRange的函數、refactor harfbuzzjs 以及libpdf 等測試界面
- 20230905-06: 建立 : `toSome`, initial of basic tokenizer (`tokenize`),
`matchAny`, `notDo`, `orDo`, `zeroOrMoreDo`, `zeroOrOnceDo`
- 20230905-07:強化`tokenize`, 加強功能,加`Token`界面。
- 20230907-08:強化`tokenize`。
- 20230910 : add basic parser `CONST` rule, and add the grammar rule.
- 20230914-15: 追加一寡 tokenizer ê 功能。
- 20230918: 重新tuì下kàu頂起做parser. add rule
- 20230921-22:add rule, report issue
- 20230925-26: 試驗án-tsuánn解決[issue1](https://kianting.info/pipermail/clo_kianting.info/2023-September/000004.html), iáu-buē成功。
- 凡勢用?
```
FuncApp ::= Single FuncAppAux | Single
FuncAppAUx ::= FunCallee FuncAppAUx
FuncCallee ::= "(" ")" | "(" ARGS ")"
ARGS = SINGLE "," ARGS | SINGLE
```
- 20230928basically fix `issue1`。其他ê物件猶著做。
- 20230929add multi args parsing for `callee`.
- 20230930tîng khí parser, using `js-token`.
- 20231006: tîng siá parser, using `ts-parsec`.
- 20231010: 初步完成tsit ê階段ê Parser`。
- 20231012: clo->js converter successfully (maybe.)
- 20231016basic font guessing and `putText` function
- 20231023-24:fix .ttc bug.
- 20231026-27 : clo basic interface, preprocessor of stream of text,
add cjk-english splitter, etc.
- 20231029-30: hyphenating for english.
- 20231105-06: 利用fontkit算文字的對應px寬度 initially pushed.
- 20231109-10: Keng-kái oa̍h-chōa ián-sǹg-hoat.
- 20231113: the algorithm is basically fixed, and make a `bigFrame` to prepare for convert to boxes and positions.
- 20231115-16: grid and basic types laying.
- 20231120: fix the line-breaking algorithm
- 20231125: multiple paragraph basic
## 之後的做法
- 先做一個前處理註冊器,註冊下列的前處理
- 中英文間距
- 換行點
- 空白轉為 [glue]
- 前處理完成字串後,必須要:
- 算出字元的Box
- 利用 frame/box 資訊分行、分頁
- 然後算出每個Box的x, y, page
- 最後納入排版
## 排版語法
使用lisp表示但其實是陣列
```lisp
(hglue 寬度 伸展值)
(vglue 高度 伸展值)
(bp 原始模式 斷行模式) ; breakpoint
(br) ; force newline
(em 數字)
(ex 數字)
(span {"font-family" : "Noto Sans" , "font-size" : 16 })
(vbox 高度 內容)
```
## How to generate documents
- `typedoc /path/to/src1 [/path/to/another/src/or/.js ...]`
the generated page will be stored in `/docs`.
- set the referee source to my repo:
- `typedoc --sourceLinkTemplate "https://git.kianting.info/?p=clo;a=blob;f={path};hb=HEAD#l{line}" /path/to/src1 ...`
store the documents
- `rsync /path/to/docs host@/var/www/docs`