Skip to content

Commit

Permalink
feat: yaml2md 渲染gh全部type,而不是之前标识了md: true的才渲染
Browse files Browse the repository at this point in the history
  • Loading branch information
xbpk3t committed Jul 24, 2024
1 parent 5edb483 commit 165da1e
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 74 deletions.
89 changes: 44 additions & 45 deletions pkg/gh/gh.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@ package gh
import (
"bytes"
"errors"
"fmt"
"io"
"log"
"net/url"
"path"
"slices"
"strings"
"time"
Expand All @@ -19,21 +16,23 @@ const (
GhURL = "https://github.com/"
)

type ConfigRepos []struct {
type ConfigRepos []ConfigRepo

type ConfigRepo struct {
Type string `yaml:"type"`
Repos []Repository `yaml:"repo"`
Qs Qs `yaml:"qs,omitempty"`
Md bool `yaml:"md,omitempty"`
// Md bool `yaml:"md,omitempty"`
}

type Repository struct {
LastUpdated time.Time
Doc string `yaml:"doc,omitempty"`
URL string `yaml:"url"`
Doc string `yaml:"doc,omitempty"` // 该repo的官方文档URL
URL string `yaml:"url"` // 该repo的gh URL
Name string `yaml:"name,omitempty"`
User string
Des string `yaml:"des,omitempty"`
Tag string // used to mark Type
Des string `yaml:"des,omitempty"` // 描述
Tag string `yaml:"tag"` // used to mark Type
Qs Qs `yaml:"qs,omitempty"`
Cmd Cmd `yaml:"cmd,omitempty"`
// Pix []string `yaml:"pix"`
Expand All @@ -42,7 +41,7 @@ type Repository struct {
// Des string `yaml:"des,omitempty"`
// } `yaml:"use,omitempty"`
Qq `yaml:"qq,omitempty"`
IsStar bool
IsStar bool // 用来标识gh上star的repo
}

type Qq []struct {
Expand Down Expand Up @@ -187,49 +186,49 @@ func (rs Repos) QueryReposByTag(tag string) Repos {
func (cr *ConfigRepos) FilterReposMD() ConfigRepos {
var filteredConfig ConfigRepos
for _, crv := range *cr {
if crv.Md {
var filteredRepos []Repository
for _, repo := range crv.Repos {
if repo.Qs != nil {
// repo.Pix = addMarkdownPicFormat(repo.Pix)
filteredRepos = append(filteredRepos, repo)
}
// if crv.Md {
var filteredRepos []Repository
for _, repo := range crv.Repos {
if repo.Qs != nil {
// repo.Pix = addMarkdownPicFormat(repo.Pix)
filteredRepos = append(filteredRepos, repo)
}
crv.Repos = filteredRepos
filteredConfig = append(filteredConfig, crv)
}
crv.Repos = filteredRepos
filteredConfig = append(filteredConfig, crv)
// }
}
return filteredConfig
}

func (cr *ConfigRepos) FilterWorksMD() ConfigRepos {
var filteredConfig ConfigRepos
for _, crv := range *cr {
if crv.Md {
var filteredRepos []Repository
crv.Repos = filteredRepos
filteredConfig = append(filteredConfig, crv)
}
}
return filteredConfig
}
// func (cr *ConfigRepos) FilterWorksMD() ConfigRepos {
// var filteredConfig ConfigRepos
// for _, crv := range *cr {
// // if crv.Md {
// var filteredRepos []Repository
// crv.Repos = filteredRepos
// filteredConfig = append(filteredConfig, crv)
// // }
// }
// return filteredConfig
// }

// GetFileNameFromURL 从给定的 URL 中提取并返回文件名。
func GetFileNameFromURL(urlString string) (string, error) {
// 解析 URL
parsedURL, err := url.Parse(urlString)
if err != nil {
return "", fmt.Errorf("error parsing URL: %v", err)
}

// 获取路径
urlPath := parsedURL.Path

// 获取文件名
fileName := path.Base(urlPath)

return fileName, nil
}
// func GetFileNameFromURL(urlString string) (string, error) {
// // 解析 URL
// parsedURL, err := url.Parse(urlString)
// if err != nil {
// return "", fmt.Errorf("error parsing URL: %v", err)
// }
//
// // 获取路径
// urlPath := parsedURL.Path
//
// // 获取文件名
// fileName := path.Base(urlPath)
//
// return fileName, nil
// }

// 用来渲染pic
// func addMarkdownPicFormat(URLs []string) []string {
Expand Down
75 changes: 46 additions & 29 deletions yaml2md/cmd/gh.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,43 +95,37 @@ var ghCmd = &cobra.Command{

dfo := gh.NewConfigRepos(f)
df := dfo.FilterReposMD()
// tmpl := template.Must(template.New("").Parse(ghTpl))
//
// file, err := os.Create(targetFile)
// if err != nil {
// log.Fatal(err)
// }
// defer file.Close()
//
// err = tmpl.Execute(file, df)
// if err != nil {
// log.Fatal(err)
// }

// 清理掉 Qs == nil 的 Type
dfr := FilterRepos(df)

var res strings.Builder

for _, d := range df {
if d.Md {
res.WriteString(fmt.Sprintf("## %s \n", d.Type))
if d.Qs != nil {
res.WriteString(addMarkdownQsFormat(d.Qs))
for _, d := range dfr {

res.WriteString(fmt.Sprintf("## %s \n", d.Type))
if d.Qs != nil {
res.WriteString(addMarkdownQsFormat(d.Qs))
}

for _, repo := range d.Repos {
repoName, f := strings.CutPrefix(repo.URL, gh.GhURL)
if !f {
repoName = ""
}

for _, repo := range d.Repos {
res.WriteString(fmt.Sprintf("\n\n### %s\n\n", repo.URL))
if repo.Qs != nil {
res.WriteString(addMarkdownQsFormat(repo.Qs))
}
if repo.Qq != nil {
for _, s := range repo.Qq {
if s.Qs != nil {
res.WriteString(fmt.Sprintf("\n\n#### %s \n\n", s.Topic))
res.WriteString(addMarkdownQsFormat(s.Qs))
}
res.WriteString(fmt.Sprintf("\n\n### [%s](%s)\n\n", repoName, repo.URL))
if repo.Qs != nil {
res.WriteString(addMarkdownQsFormat(repo.Qs))
}
if repo.Qq != nil {
for _, s := range repo.Qq {
if s.Qs != nil {
res.WriteString(fmt.Sprintf("\n\n#### %s \n\n", s.Topic))
res.WriteString(addMarkdownQsFormat(s.Qs))
}
}
}

}
}

Expand Down Expand Up @@ -167,6 +161,29 @@ func addMarkdownQsFormat(qs gh.Qs) string {
return builder.String()
}

// FilterRepos 过滤掉Repo中Qs为nil的ConfigRepos
func FilterRepos(configRepos gh.ConfigRepos) (filteredRepos gh.ConfigRepos) {
for _, repoGroup := range configRepos {
// 过滤掉qs为nil的Repository
filteredGroup := gh.ConfigRepo{
Type: repoGroup.Type,
Repos: make([]gh.Repository, 0),
Qs: make(gh.Qs, 0),
}
filteredGroup.Type = repoGroup.Type
for _, repo := range repoGroup.Repos {
if repo.Qs != nil { // 假设Qs的零值是Qs{}
filteredGroup.Repos = append(filteredGroup.Repos, repo)
}
}
if len(filteredGroup.Repos) > 0 {
// 只有当过滤后的Repositories不为空时,才添加到结果中
filteredRepos = append(filteredRepos, filteredGroup)
}
}
return filteredRepos
}

func init() {
rootCmd.AddCommand(ghCmd)

Expand Down

0 comments on commit 165da1e

Please sign in to comment.