Yoxem / clo

mirror site for Clo, a personal draught of a typesetting engine.

Home Page:https://kianting.info/wiki/w/Project:Clo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

clo

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, iáu-buē成功。
    • 凡勢用?
    FuncApp ::= Single FuncAppAux | Single
    FuncAppAUx ::= FunCallee FuncAppAUx
    FuncCallee ::= "(" ")" | "(" ARGS ")"
    ARGS = SINGLE "," ARGS | SINGLE
    
  • 20230928:basically fix issue1。其他ê物件猶著做。
  • 20230929:add multi args parsing for callee.
  • 20230930:tîng khí parser, using js-token.
  • 20231006: tîng siá parser, using ts-parsec.
  • 20231010: 初步完成tsit ê階段ê Parser`。
  • 20231012: clo->js converter successfully (maybe.)
  • 20231016:basic 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表示,但其實是陣列

  (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

About

mirror site for Clo, a personal draught of a typesetting engine.

https://kianting.info/wiki/w/Project:Clo

License:MIT License


Languages

Language:TypeScript 56.2%Language:JavaScript 43.8%