diff --git a/backend/internal/api/api.go b/backend/internal/api/api.go index d19440b..0a4173b 100644 --- a/backend/internal/api/api.go +++ b/backend/internal/api/api.go @@ -18,6 +18,7 @@ import ( "oneblog/internal/hub" "oneblog/internal/model" "oneblog/internal/ratelimit" + "oneblog/internal/render" "oneblog/internal/storage" "oneblog/internal/store" "oneblog/internal/thumbs" @@ -128,6 +129,12 @@ func (a *API) listPosts(w http.ResponseWriter, r *http.Request) { httpx.ServerError(w, err) return } + // 时间线上短文直接铺正文:出口处做盘古之白(库里存的是原始渲染结果) + for i := range page.Items { + if page.Items[i].Kind == model.KindShort { + page.Items[i].ContentHTML = render.PanguHTML(page.Items[i].ContentHTML) + } + } httpx.OK(w, page) } @@ -156,6 +163,8 @@ func (a *API) getPost(w http.ResponseWriter, r *http.Request) { if err != nil { nb = nil } + // 详情正文出口做盘古之白(存库不动,改的是渲染层) + p.ContentHTML = render.PanguHTML(p.ContentHTML) httpx.OK(w, struct { model.Post Neighbors []model.Post `json:"neighbors"` @@ -255,7 +264,7 @@ func (a *API) RSS(w http.ResponseWriter, r *http.Request) { } desc := p.Summary if desc == "" { - desc = trimRunes(stripTags(p.ContentHTML), 160) + desc = trimRunes(stripTags(render.PanguHTML(p.ContentHTML)), 160) } item := rssItem{ Title: title, diff --git a/backend/internal/render/pangu.go b/backend/internal/render/pangu.go new file mode 100644 index 0000000..0f97a3d --- /dev/null +++ b/backend/internal/render/pangu.go @@ -0,0 +1,92 @@ +// 盘古之白:在 CJK 与拉丁字母/数字之间补一个空格,中文混排的阅读观感 +// 差别很大(「把MVP搬进仓库」→「把 MVP 搬进仓库」)。 +// 在 HTML 层做:标签原样保留,/
/