Skip to content

Commit

Permalink
Merge pull request #5 from kudrykv/daily-with-cal
Browse files Browse the repository at this point in the history
Add new tpl, refactor config, do stuff
  • Loading branch information
kudrykv committed Sep 16, 2021
2 parents 3153bb6 + 8948d23 commit 000fef7
Show file tree
Hide file tree
Showing 71 changed files with 1,875 additions and 643 deletions.
87 changes: 65 additions & 22 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app

import (
"bytes"
"errors"
"fmt"
"io/ioutil"
"os"
Expand Down Expand Up @@ -41,8 +42,8 @@ func action(c *cli.Context) error {
err error
)

pathConfig := c.Path(fConfig)
if cfg, err = config.New(pathConfig); err != nil {
pathConfigs := strings.Split(c.Path(fConfig), ",")
if cfg, err = config.New(pathConfigs...); err != nil {
return fmt.Errorf("config new: %w", err)
}

Expand All @@ -54,26 +55,47 @@ func action(c *cli.Context) error {
return fmt.Errorf("tex document: %w", err)
}

if err = ioutil.WriteFile("out/"+RootFilename(pathConfig), wr.Bytes(), 0600); err != nil {
if err = ioutil.WriteFile("out/"+RootFilename(pathConfigs[len(pathConfigs)-1]), wr.Bytes(), 0600); err != nil {
return fmt.Errorf("ioutil write file: %w", err)
}

for _, file := range cfg.RenderBlocks {
for _, file := range cfg.Pages {
wr.Reset()

if fn, ok = ComposerMap[file]; !ok {
continue
var mom []page.Modules
for _, block := range file.RenderBlocks {
if fn, ok = ComposerMap[block.FuncName]; !ok {
return fmt.Errorf("unknown func " + block.FuncName)
}

modules, err := fn(cfg, block.Tpls)
if err != nil {
return fmt.Errorf("%s: %w", block.FuncName, err)
}

mom = append(mom, modules)
}

for _, pag := range fn(cfg) {
pag.Cfg = cfg
if len(mom) == 0 {
return fmt.Errorf("modules of modules must have some modules")
}

allLen := len(mom[0])
for _, mods := range mom {
if len(mods) != allLen {
return errors.New("some modules are not aligned")
}
}

if err = t.Execute(wr, pag.Tpl, pag); err != nil {
return fmt.Errorf("tex execute: %w", err)
for i := 0; i < allLen; i++ {
for j, mod := range mom {
if err = t.Execute(wr, mod[i].Tpl, mod[i]); err != nil {
return fmt.Errorf("execute %s on %s: %w", file.RenderBlocks[i].FuncName, file.RenderBlocks[i].Tpls[j], err)
}
}
}

if err = ioutil.WriteFile("out/"+file+".tex", wr.Bytes(), 0600); err != nil {
if err = ioutil.WriteFile("out/"+file.Name+".tex", wr.Bytes(), 0600); err != nil {
return fmt.Errorf("ioutil write file: %w", err)
}
}
Expand All @@ -97,17 +119,38 @@ func RootFilename(pathconfig string) string {
return pathconfig + ".tex"
}

type Composer func(config.Config) []page.Page
type Composer func(cfg config.Config, tpls []string) (page.Modules, error)

var ComposerMap = map[string]Composer{
"title": compose.Title,
"annual": compose.Annual,
"quarterly": compose.Quarterly,
"monthly": compose.Monthly,
"weekly": compose.Weekly,
"daily": compose.Daily,
"dailyreflect": compose.DailyReflect,
"dailynotes": compose.DailyNotes,
"notesindexed": compose.NotesIndexed,
"todosindexed": compose.TodosIndexed,
"title": compose.Title,
"annual": compose.Annual,
"quarterly": compose.Quarterly,
"monthly": compose.Monthly,
"weekly": compose.Weekly,
"daily": compose.Daily,
"daily2": compose.DailyWMonth,
"daily_reflect": compose.DailyReflect,
"daily_notes": compose.DailyNotes,
"notes_indexed": compose.NotesIndexed,
"todos_indexed": compose.TodosIndexed,
"meetings_indexed": compose.MeetingsIndexed,
"header_annual": compose.HeaderAnnual,
"header_annual2": compose.HeaderAnnual2,
"header_quarterly": compose.HeaderQuarterly,
"header_quarterly2": compose.HeaderQuarterly2,
"header_monthly": compose.HeaderMonthly,
"header_monthly2": compose.HeaderMonthly2,
"header_weekly": compose.HeaderWeekly,
"header_weekly2": compose.HeaderWeekly2,
"header_daily": compose.HeaderDaily,
"header_daily2": compose.HeaderDaily2,
"header_daily_notes": compose.HeaderDailyNotes,
"header_daily_notes2": compose.HeaderDailyNotes2,
"header_daily_reflect": compose.HeaderDailyReflect,
"header_daily_reflect2": compose.HeaderDailyReflect2,
"header_notes_indexed": compose.HeaderNotesIndexed,
"header_notes_indexed2": compose.HeaderNotesIndexed2,
"header_todos_indexed": compose.HeaderTodosIndexed,
"header_todos_indexed2": compose.HeaderTodosIndexed2,
"header_meetings_indexed2": compose.HeaderMeetingsIndexed2,
}
8 changes: 4 additions & 4 deletions app/components/calendar/day_time.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ func (d DayTime) AddDate(years, months, days int) DayTime {
return DayTime{Time: d.Time.AddDate(years, months, days)}
}

func (t DayTime) Link() string {
return hyper.Link(t.Format(time.RFC3339), strconv.Itoa(t.Day()))
func (d DayTime) Link() string {
return hyper.Link(d.RefText(), strconv.Itoa(d.Day()))
}

func (t DayTime) RefText() string {
return t.Format(time.RFC3339)
func (d DayTime) RefText() string {
return d.Format(time.RFC3339)
}
63 changes: 63 additions & 0 deletions app/components/calendar/quarter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package calendar

import (
"strconv"
"time"
)

type Quarter struct {
Selected bool
YearMonths [3]YearMonth
}
type Quarters []Quarter

func NewQuarter(year int, qrtr int) Quarter {
quarter := Quarter{}
month := time.Month(qrtr*3 - 2)
for i := 0; i < 3; i++ {
quarter.YearMonths[i] = NewYearMonth(year, month)
month++
}

return quarter
}

func (q Quarter) Name() string {
return "Q" + strconv.Itoa(int(q.YearMonths[2].month/3))
}

func (q Quarter) Hyper() string {
text := `\hyperlink{` + q.Name() + `}{` + q.Name() + `}`

if q.Selected {
text = `\cellcolor{black}{\textcolor{white}{` + q.Name() + `}}`
}

return text
}

func NewYearInQuarters(year int) Quarters {
qrtrs := make(Quarters, 0, 4)

for qrtr := 1; qrtr <= 4; qrtr++ {
qrtrs = append(qrtrs, NewQuarter(year, qrtr))
}

return qrtrs
}

func (q Quarters) Reverse() Quarters {
out := make(Quarters, 0, len(q))

for i := len(q) - 1; i >= 0; i-- {
out = append(out, q[i])
}

return out
}

func (q Quarters) Selected(i int) Quarters {
q[i-1].Selected = true

return q
}
43 changes: 42 additions & 1 deletion app/components/calendar/year_month.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package calendar

import "time"
import (
"time"
)

type YearMonths []YearMonth
type YearMonth struct {
Selected bool

year int
month time.Month
}
Expand All @@ -14,10 +19,46 @@ func NewYearMonth(year int, month time.Month) YearMonth {
}
}

func NewYearInMonths(year int) YearMonths {
yim := make(YearMonths, 0, 12)

for month := time.January; month <= time.December; month++ {
yim = append(yim, NewYearMonth(year, month))
}

return yim
}

func (m YearMonth) Calendar(wd time.Weekday) Calendar {
return Calendar{
month: m.month,
wd: wd,
weeks: MonthWeeklies(wd, m.year, m.month),
}
}

func (m YearMonth) Hyper() string {
text := `\hyperlink{` + m.month.String() + `}{` + m.month.String()[:3] + `}`

if m.Selected {
text = `\cellcolor{black}{\textcolor{white}{` + m.month.String()[:3] + `}}`
}

return text
}

func (m YearMonths) Reverse() YearMonths {
out := make(YearMonths, 0, len(m))

for i := len(m) - 1; i >= 0; i-- {
out = append(out, m[i])
}

return out
}

func (m YearMonths) Selected(d DayTime) YearMonths {
m[d.Month()-1].Selected = true

return m
}
41 changes: 41 additions & 0 deletions app/components/header/cell_item.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package header

type CellItem struct {
Text string
Ref string
selected bool
}

func NewCellItem(text string) CellItem {
return CellItem{Text: text}
}

func (c CellItem) Select() CellItem {
c.selected = true

return c
}

func (c CellItem) Selected(selected bool) CellItem {
c.selected = selected

return c
}

func (c CellItem) Refer(ref string) CellItem {
c.Ref = ref

return c
}

func (c CellItem) Display() string {
if c.selected {
return `\cellcolor{black}{\textcolor{white}{` + c.Text + `}}`
}

if len(c.Ref) == 0 {
c.Ref = c.Text
}

return `\hyperlink{` + c.Ref + `}{` + c.Text + `}`
}
18 changes: 8 additions & 10 deletions app/components/page/page.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package page

import (
"github.com/kudrykv/latex-yearly-planner/app/components/header"
"github.com/kudrykv/latex-yearly-planner/app/config"
)

type PageTpl struct {
Cfg config.Config

Pages []Page
type Page struct {
Cfg config.Config
Modules Modules
}

type Page struct {
Cfg config.Config
Tpl string
Header header.Header
Body interface{}
type Modules []Module
type Module struct {
Cfg config.Config
Tpl string
Body interface{}
}
32 changes: 11 additions & 21 deletions app/compose/annual.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
package compose

import (
"fmt"
"time"

"github.com/kudrykv/latex-yearly-planner/app/components/calendar"
"github.com/kudrykv/latex-yearly-planner/app/components/header"
"github.com/kudrykv/latex-yearly-planner/app/components/page"
"github.com/kudrykv/latex-yearly-planner/app/config"
)

func Annual(cfg config.Config) []page.Page {
func Annual(cfg config.Config, tpls []string) (page.Modules, error) {
if len(tpls) != 1 {
return nil, fmt.Errorf("exppected one tpl, got %d %v", len(tpls), tpls)
}

return page.Modules{{Cfg: cfg, Tpl: tpls[0], Body: buildQuarters(cfg)}}, nil
}

func buildQuarters(cfg config.Config) [][]calendar.Calendar {
var quarters [][]calendar.Calendar

for quarter := time.January; quarter <= time.December; quarter += 3 {
Expand All @@ -22,23 +30,5 @@ func Annual(cfg config.Config) []page.Page {
quarters = append(quarters, cals)
}

return []page.Page{{
Tpl: cfg.Blocks.Annual.Tpl,
Body: quarters,
Header: header.Header{
Left: header.Items{
header.NewIntItem(cfg.Year).Ref(),
header.NewItemsGroup(
header.NewTextItem("Q1"),
header.NewTextItem("Q2"),
header.NewTextItem("Q3"),
header.NewTextItem("Q4"),
),
},
Right: header.Items{
header.NewTextItem("Notes").RefText("Notes Index"),
header.NewTextItem("Todos").RefText("Todos Index"),
},
},
}}
return quarters
}
Loading

0 comments on commit 000fef7

Please sign in to comment.