diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8f5819e2c0b8f5440e24985102a6211fafcde72e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/deployment/build/ \ No newline at end of file diff --git a/.idea/runConfigurations/go_build_requirements_manager_and_run_create_table.xml b/.idea/runConfigurations/go_build_requirements_manager_and_run_create_meta.xml similarity index 72% rename from .idea/runConfigurations/go_build_requirements_manager_and_run_create_table.xml rename to .idea/runConfigurations/go_build_requirements_manager_and_run_create_meta.xml index fdf9d9eca86653aba0ab309cf90b8ea3f169c7f6..f96d00619dbefa0645e643873b00caea009cc258 100644 --- a/.idea/runConfigurations/go_build_requirements_manager_and_run_create_table.xml +++ b/.idea/runConfigurations/go_build_requirements_manager_and_run_create_meta.xml @@ -1,8 +1,8 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="go build requirements-manager and run create table" type="GoApplicationRunConfiguration" factoryName="Go Application"> + <configuration default="false" name="go build requirements-manager and run create meta" type="GoApplicationRunConfiguration" factoryName="Go Application"> <module name="requirements-manager" /> <working_directory value="$PROJECT_DIR$/application/source" /> - <parameters value="meta print -c id -c name -c percent -c YES -p $PROJECT_DIR$/development/examples/example1" /> + <parameters value="meta print -c ID -c Title -c Created -c Version -c File -p $PROJECT_DIR$/development/examples/example1" /> <kind value="DIRECTORY" /> <package value="gitlab.schukai.com/oss/utilities/requirements-manager" /> <directory value="$PROJECT_DIR$/application/source" /> diff --git a/.idea/runConfigurations/go_build_requirements_manager_and_run_print_overview.xml b/.idea/runConfigurations/go_build_requirements_manager_and_run_print_overview.xml index 64cef3c23fb852dc330cf53cbc1cef88a3c9638e..3f22cf19de72e3fcd8592c9265be7a505172c007 100644 --- a/.idea/runConfigurations/go_build_requirements_manager_and_run_print_overview.xml +++ b/.idea/runConfigurations/go_build_requirements_manager_and_run_print_overview.xml @@ -2,7 +2,7 @@ <configuration default="false" name="go build requirements-manager and run print overview" type="GoApplicationRunConfiguration" factoryName="Go Application"> <module name="requirements-manager" /> <working_directory value="$PROJECT_DIR$/application/source" /> - <parameters value="overview print -c ID -c Title -c Version -p $PROJECT_DIR$/development/examples/example1 -t $PROJECT_DIR$/development/examples/example1/overview.template" /> + <parameters value="overview print -c ID -c Title -c Version -p $PROJECT_DIR$/development/examples/example1 -o /tmp/overview.pdf -f pdf -t $PROJECT_DIR$/development/examples/example1/overview.template" /> <kind value="DIRECTORY" /> <package value="gitlab.schukai.com/oss/utilities/requirements-manager" /> <directory value="$PROJECT_DIR$/application/source" /> diff --git a/application/source/config.go b/application/source/config.go index 8829bc907fe2b278882aef12c45e4643695af189..189e3ec52960caf2d1caa7938b90e66fe8258ce5 100644 --- a/application/source/config.go +++ b/application/source/config.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "os" "os/user" "path" @@ -24,6 +23,28 @@ var ( } ) +const defaultTemplate = ` +## Overview + +Created: {{ .created }} + +{{.Meta}} + +## Tasks + +{{.Tasks}} + +## Items + +{{.Items}} + +## requirements + +{{.Requirements}} + + +` + // Exporting interface instead of struct //type Configuration interface{} @@ -40,7 +61,7 @@ type Configuration struct { } `yaml:"table"` Overview struct { - Template string `yaml:"columns"` + Template string `yaml:"template"` } `yaml:"overview"` } @@ -71,6 +92,8 @@ type commandLineOptions struct { Print struct { Columns []string `short:"c" long:"column" description:"defines the columns used"` TemplatePath string `short:"t" long:"template" description:"file name of the template of the overview page"` + Output string `short:"o" long:"output" description:"redirect output to a file"` + Format string `short:"f" long:"format" description:"the desired output format (pdf, md)"` } `command:"print"` } `command:"overview"` Version struct { @@ -138,11 +161,14 @@ func NewConfiguration() (*flags.Command, *commandLineOptions, *Configuration) { } if arguments.Overview.Print.TemplatePath != "" { - dat, err := os.ReadFile(arguments.Overview.Print.TemplatePath) + template, err := os.ReadFile(arguments.Overview.Print.TemplatePath) if err != nil { - printErrorAndExit(exitCodeCatchAll, "the specified template "+arguments.Overview.Print.TemplatePath+" was not found.") + printErrorAndExit(exitCodeCatchAll, + "the specified template", arguments.Overview.Print.TemplatePath) } - fmt.Print(string(dat)) + cfg.Overview.Template = string(template) + } else { + cfg.Overview.Template = defaultTemplate } } case "meta": @@ -160,6 +186,10 @@ func NewConfiguration() (*flags.Command, *commandLineOptions, *Configuration) { func validateColumns(columns []string) []string { + //for i, column := range columns { + // columns[i] = printer.Sprintf(column) + //} + // VALIDATE COLUMS NAME // @@ -176,15 +206,10 @@ func validateColumns(columns []string) []string { } -func processError(err error) { - fmt.Println(err) - os.Exit(2) -} - func readFile(cfg *Configuration, filename string) { f, err := os.Open(filename) if err != nil { - processError(err) + printErrorAndExit(2, err.Error()) } defer f.Close() @@ -192,6 +217,6 @@ func readFile(cfg *Configuration, filename string) { decoder := yaml.NewDecoder(f) err = decoder.Decode(cfg) if err != nil { - processError(err) + printErrorAndExit(2, err.Error()) } } diff --git a/application/source/files.go b/application/source/files.go index e0fc797b27f0e89476cdc43f94324a41dadb5c6b..b114593585348cce6f60bf8c5d889f7db850f58f 100644 --- a/application/source/files.go +++ b/application/source/files.go @@ -36,7 +36,7 @@ func GetPageData(directory string) (error, []pageData) { err, p := importData(content) if err != nil { - printError(cleanedPath + " does not contain a valid yaml definition") + printError("does not contain a valid yaml definition", cleanedPath) return nil } diff --git a/application/source/items.go b/application/source/items.go index de74d60056bbfcab4a90b566901a7ff10ff1ea5f..48ae39e5860ab9275ec08a0fb6f16254322b789c 100644 --- a/application/source/items.go +++ b/application/source/items.go @@ -12,8 +12,8 @@ type Item struct { Group string `yaml:"Group"` Description string `yaml:"Description"` DeliveryUntil time.Time `yaml:"Delivery until"` - providedOn time.Time `yaml:"Provided on"` - providedBy string `yaml:"Provided by"` + ProvidedOn time.Time `yaml:"Provided on"` + ProvidedBy string `yaml:"Provided by"` } func buildItemTable(config *Configuration, pageDataList []pageData) (error, string) { @@ -22,7 +22,14 @@ func buildItemTable(config *Configuration, pageDataList []pageData) (error, stri table := tablewriter.NewWriter(buf) - table.SetHeader([]string{"Group", "Description", "Delivery until", "Provided on", "Provided by", "File"}) + table.SetHeader([]string{ + printer.Sprintf("Group"), + printer.Sprintf("Description"), + printer.Sprintf("Delivery until"), + printer.Sprintf("Provided on"), + printer.Sprintf("Provided by"), + printer.Sprintf("File"), + }) table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false}) table.SetCenterSeparator("|") @@ -38,13 +45,18 @@ func buildItemTable(config *Configuration, pageDataList []pageData) (error, stri } else { db = info.DeliveryUntil.Format(config.Locale.DateFormat) } - if info.providedOn.IsZero() { - db = "—" + if info.ProvidedOn.IsZero() { + do = "—" } else { - db = info.providedOn.Format(config.Locale.DateFormat) + do = info.ProvidedOn.Format(config.Locale.DateFormat) } - tableData = append(tableData, []string{info.Group, info.Description, db, do, info.providedBy, pageData.File}) + //text := info.Description + ", " + //text += printer.Sprintf("Group") + ": " + info.Group + ", " + //text += printer.Sprintf("File") + ": " + pageData.File + + tableData = append(tableData, []string{info.Group, info.Description, db, do, info.ProvidedBy, pageData.File}) + //tableData = append(tableData, []string{text, db, do, info.ProvidedBy}) } } diff --git a/application/source/l10n.go b/application/source/l10n.go index bdd21fec38c849740a70eb96d17e51b221cd54c4..23e642a6a796517d548a680ac6a969367391dd9f 100644 --- a/application/source/l10n.go +++ b/application/source/l10n.go @@ -6,41 +6,224 @@ import ( "golang.org/x/text/message/catalog" ) -type l10nEntry struct { - tag, key string - msg interface{} +type l10nLocaleTranslation struct { + tag string + msg interface{} +} +type l10nKeyTranslation struct { + key string + tm []l10nLocaleTranslation } -var l10nEntries = [...]l10nEntry{ - {"en", "ToDo", "ToDo"}, - {"en", "Due", "Due"}, - {"en", "File", "File"}, - {"de", "ToDo", "Aufgabe"}, - {"de", "Due", "Erledigen bis"}, - {"de", "File", "Datei"}, - - //{"en", "%d task(s) remaining!", plural.Selectf(1, "%d", - // "=1", "One task remaining!", - // "=2", "Two tasks remaining!", - // "other", "[1]d tasks remaining!", - //)}, - //{"el", "%d task(s) remaining!", plural.Selectf(1, "%d", - // "=1", "Μία εργασία έμεινε!", - // "=2", "Μια-δυο εργασίες έμειναν!", - // "other", "[1]d εργασίες έμειναν!", - //)}, +var l10nMap = []l10nKeyTranslation{ + { + "does not contain a valid yaml definition", + []l10nLocaleTranslation{ + {"de", "\"%s\" enthält keine gültige yaml Struktur."}, + {"en", "\"%s\" does not contain a valid yaml definition."}, + }, + }, + { + "the specified template", + []l10nLocaleTranslation{ + {"de", "Das angegebene Template \"%s\" wurde nicht gefunden."}, + {"en", "the specified template \"%s\" was not found."}, + }, + }, + { + "the due of the todo cannot be parsed", + []l10nLocaleTranslation{ + {"de", "Das Datum %s der Aufgabe \"%s\" kann nicht verarbeitet werden."}, + {"en", "the due %s of the todo \"%s\" cannot be parsed."}, + }, + }, + { + "ToDo", + []l10nLocaleTranslation{ + {"de", "Aufgabe"}, + {"en", "task"}, + }, + }, + { + "Due", + []l10nLocaleTranslation{ + {"de", "Bis"}, + {"en", "due"}, + }, + }, { + "File", + []l10nLocaleTranslation{ + {"de", "Datei"}, + {"en", "file"}, + }, + }, { + "Group", + []l10nLocaleTranslation{ + {"de", "Gruppe"}, + {"en", "Group"}, + }, + }, + { + "Description", + []l10nLocaleTranslation{ + {"de", "Beschreibung"}, + {"en", "Description"}, + }, + }, + { + "Delivery until", + []l10nLocaleTranslation{ + {"de", "Bis"}, + {"en", "until"}, + }, + }, + { + "Provided on", + []l10nLocaleTranslation{ + {"de", "Am"}, + {"en", "on"}, + }, + }, + { + "Provided by", + []l10nLocaleTranslation{ + {"de", "Von"}, + {"en", "by"}, + }, + }, + { + "Type", + []l10nLocaleTranslation{ + {"de", "Typ"}, + {"en", "Type"}, + }, + }, + { + "Title", + []l10nLocaleTranslation{ + {"de", "Titel"}, + {"en", "Title"}, + }, + }, + { + "Alias", + []l10nLocaleTranslation{ + {"de", "Alias"}, + {"en", "Alias"}, + }, + }, + { + "Type", + []l10nLocaleTranslation{ + {"de", "Typ"}, + {"en", "Type"}, + }, + }, + { + "Keywords", + []l10nLocaleTranslation{ + {"de", "Schlüsselwörter"}, + {"en", "Keywords"}, + }, + }, + { + "Author", + []l10nLocaleTranslation{ + {"de", "Autor"}, + {"en", "Author"}, + }, + }, + { + "Status", + []l10nLocaleTranslation{ + {"de", "Status"}, + {"en", "Status"}, + }, + }, + { + "Complexity", + []l10nLocaleTranslation{ + {"de", "Komplexität"}, + {"en", "Complexity"}, + }, + }, + { + "Difficulty", + []l10nLocaleTranslation{ + {"de", "Schwierigkeit"}, + {"en", "Difficulty"}, + }, + }, + { + "Priority", + []l10nLocaleTranslation{ + {"de", "Priorität"}, + {"en", "Priority"}, + }, + }, + { + "Version", + []l10nLocaleTranslation{ + {"de", "Version"}, + {"en", "Version"}, + }, + }, + { + "Milestone", + []l10nLocaleTranslation{ + {"de", "Meilenstein"}, + {"en", "Milestone"}, + }, + }, + { + "Created", + []l10nLocaleTranslation{ + {"de", "Erstellt am"}, + {"en", "Created"}, + }, + }, + { + "LastUpdate", + []l10nLocaleTranslation{ + {"de", "Letzte Änderung"}, + {"en", "LastUpdate"}, + }, + }, + { + "The file cannot be read", + []l10nLocaleTranslation{ + {"de", "Die Datei \"%s\" kann nicht eingelesen werden."}, + {"en", "The file \"%s\" cannot be read."}, + }, + }, + { + "The output file cannot be written", + []l10nLocaleTranslation{ + {"de", "Die Ausgabedatei kann nicht geschrieben werden (%s)."}, + {"en", "The output file cannot be written (%s)."}, + }, + }, { + "A temporary file cannot be created", + []l10nLocaleTranslation{ + {"de", "Es kann keine temporäre Datei angelegt werden (%s)."}, + {"en", "A temporary file cannot be created (%s)."}, + }, + }, } func initL10n() { - for _, e := range l10nEntries { - tag := language.MustParse(e.tag) - switch msg := e.msg.(type) { - case string: - message.SetString(tag, e.key, msg) - case catalog.Message: - message.Set(tag, e.key, msg) - case []catalog.Message: - message.Set(tag, e.key, msg...) + for _, e := range l10nMap { + key := e.key + for _, f := range e.tm { + tag := language.MustParse(f.tag) + switch msg := f.msg.(type) { + case string: + message.SetString(tag, key, msg) + case catalog.Message: + message.Set(tag, key, msg) + case []catalog.Message: + message.Set(tag, key, msg...) + } } } } diff --git a/application/source/locales/en-US/out.gotext.json b/application/source/locales/en-US/out.gotext.json deleted file mode 100644 index da451f7bab1f94eb74ce0950a42d5886aee5fd64..0000000000000000000000000000000000000000 --- a/application/source/locales/en-US/out.gotext.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "language": "en-US", - "messages": null -} \ No newline at end of file diff --git a/application/source/main.go b/application/source/main.go index d34bea46b538db5d566367a27d82596df4bc66ae..076308f824e8dc3a24998ad91904a24732912868 100644 --- a/application/source/main.go +++ b/application/source/main.go @@ -2,6 +2,9 @@ package main import ( "fmt" + "os" + + "golang.org/x/text/language" "golang.org/x/text/message" ) @@ -16,11 +19,34 @@ var ( //sugar *zap.SugaredLogger ) +var serverLangs = []language.Tag{ + language.English, // en fallback + language.German, // de +} + +var matcher = language.NewMatcher(serverLangs) + +var userPrefs = []language.Tag{ + language.Make(os.Getenv("LANG")), + language.Make("en"), +} + func init() { - printer = message.NewPrinter(message.MatchLanguage("de")) + initEnvironment() + + tag, _, _ := matcher.Match(userPrefs...) + printer = message.NewPrinter(tag) + initL10n() + // + //p := message.NewPrinter(language.English) + //p.Printf("archive(noun)") // Prints "archive" + //p.Printf("archive(verb)") // Prints "archive" + // p2 := message.NewPrinter(language.German) + //fmt.Println(printer.Sprintf("Due")) // Prints "Archiv" + // p2.Printf("archive(verb)") // Prints "archivieren" //initLogger() } @@ -39,7 +65,7 @@ func initEnvironment() { */ func main() { - activeCommand, _, config := NewConfiguration() + activeCommand, arguments, config := NewConfiguration() version = "development" build = "1.1.1" @@ -52,7 +78,7 @@ func main() { subcommand := activeCommand.Active switch subcommand.Name { case "print": - err := PrintOverview(config) + err := PrintOverview(config, arguments) if err != nil { printErrorAndExit(2, err.Error()) } diff --git a/application/source/message.go b/application/source/message.go index 6f5c04a354ae1d0a67b8673d9c69b0362ae23d29..f9ecdfc63ed7c856551bb63d68a6f63a2304934a 100644 --- a/application/source/message.go +++ b/application/source/message.go @@ -9,15 +9,17 @@ import ( var lastBlock string // print error -func printErrorAndExit(code int, message string) { - printError(message) +func printErrorAndExit(code int, message string, a ...interface{}) { + printError(message, a...) if code == 0 { code = exitCodeCatchAll } os.Exit(code) } -func printError(message string) { +func printError(message string, a ...interface{}) { + + message = printer.Sprintf(message, a...) if lastBlock == "error" { color.Error.Println(" " + message) diff --git a/application/source/meta.go b/application/source/meta.go index 3f9ae24165eceee1ed6542a17348167c74eb43e9..92b63e55d758454ee3e125f5506b482a74066f4e 100644 --- a/application/source/meta.go +++ b/application/source/meta.go @@ -4,17 +4,32 @@ import ( "bytes" "fmt" "reflect" + "time" "github.com/olekukonko/tablewriter" ) +func translateMetaHeaders(columns []string) []string { + + result := []string{} + + for _, column := range columns { + result = append(result, printer.Sprintf(column)) + } + + return result + +} + func buildMeta(config *Configuration, pageDataList []pageData) (error, string) { buf := new(bytes.Buffer) table := tablewriter.NewWriter(buf) - table.SetHeader(config.Table.Columns) + translateMetaColumns := translateMetaHeaders(config.Table.Columns) + + table.SetHeader(translateMetaColumns) table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false}) table.SetCenterSeparator("|") @@ -40,6 +55,14 @@ func buildMeta(config *Configuration, pageDataList []pageData) (error, string) { case "string": found = true row = append(row, field.String()) + case "Time": + found = true + t := field.Interface().(time.Time) + if t.IsZero() { + row = append(row, "—") + } else { + row = append(row, field.Interface().(time.Time).Format(config.Locale.DateFormat)) + } case "int": found = true row = append(row, field.String()) @@ -84,8 +107,6 @@ func printMeta(config *Configuration) error { } err, table := buildMeta(config, pageData) - fmt.Println(table) - return err } diff --git a/application/source/overview.go b/application/source/overview.go index 761b26bb9f8a0b46b17641340dd089266bc1bb88..fb619e34eba26651e60bcf31e4453e80c299315a 100644 --- a/application/source/overview.go +++ b/application/source/overview.go @@ -2,15 +2,22 @@ package main import ( "html/template" + "io/ioutil" "os" + "strings" + "time" ) type Dataset struct { - Config *Configuration - Meta string + Config *Configuration + Meta string + Tasks string + Items string + Requirements string + Created time.Time } -func PrintOverview(config *Configuration) error { +func PrintOverview(config *Configuration, arguments *commandLineOptions) error { err, pageData := GetPageData(config.Path) if err != nil { @@ -22,21 +29,108 @@ func PrintOverview(config *Configuration) error { return err } - t, err := template.New("overview").Parse("You have a task named\n{{ .Meta}} ") + err, tasks := buildToDosTable(config, pageData) if err != nil { return err } + err, items := buildItemTable(config, pageData) + if err != nil { + return err + } + + t, err := template.New("overview").Parse(config.Overview.Template) + if err != nil { + return err + } + + requirements := "" + + for _, p := range pageData { + requirements = requirements + getOverviewContent(p.Absolute) + } + d := new(Dataset) d.Meta = meta + d.Tasks = tasks d.Config = config + d.Items = items + d.Requirements = requirements + d.Created = time.Now() //d.pageData = pageData - err = t.Execute(os.Stdout, d) - if err != nil { - return err + if arguments.Overview.Print.Output == "" { + err = t.Execute(os.Stdout, d) + if err != nil { + return err + } + } + + outputName := arguments.Overview.Print.Output + + if arguments.Overview.Print.Format == "pdf" { + file, err := ioutil.TempFile(os.TempDir(), "prefix") + if err != nil { + printErrorAndExit(2, "A temporary file cannot be created", err.Error()) + } + defer os.Remove(file.Name()) + + err = t.Execute(file, d) + if err != nil { + return err + } + + convertToPDF(file.Name(), outputName) + + } else { + + file, err := os.Create(outputName) + if err != nil { + printErrorAndExit(2, "The output file cannot be written", err.Error()) + } + + // close fo on exit and check for its returned error + defer func() { + if err := file.Close(); err != nil { + printErrorAndExit(2, "The output file cannot be written", err.Error()) + } + }() + + err = t.Execute(file, d) + if err != nil { + return err + } + } return nil } + +func getOverviewContent(absolute string) string { + + content, err := os.ReadFile(absolute) + if err != nil { + printError("The file cannot be read", absolute) + return "" + } + + s := string(content) + a := strings.Index(s, "\n---") + if a == -1 { + return s + } + + s = s[a+4 : len(s)-1] + b := strings.Index(s, "\n...") + + if b == -1 { + b = strings.Index(s, "\n---") + } + + if b > -1 { + s = s[b+4 : len(s)-1] + } + + return s +} diff --git a/application/source/pandoc.go b/application/source/pandoc.go new file mode 100644 index 0000000000000000000000000000000000000000..ed7fcdc3958c2032bb3ea1864f63e920a6ba2f68 --- /dev/null +++ b/application/source/pandoc.go @@ -0,0 +1,33 @@ +package main + +import ( + "fmt" + "os/exec" +) + +func convertToPDF(source string, output string) string { + + arguments := "/bin/env pandoc " + + arguments += "--number-sections " + arguments += "--variable \"geometry:a4paper,margin=2cm\" " + arguments += "--variable fontsize=12pt " + arguments += "--variable version=2.0 " + arguments += source + " " + arguments += "--pdf-engine=xelatex " + arguments += "--listings " + arguments += "--template /home/volker.schukai/Downloads/eisvogel/eisvogel.latex " + arguments += "--columns=5 " + arguments += "--toc " + arguments += "--output=" + output + + cmd, err := exec.Command("bash", "-c", arguments).Output() + if err != nil { + printErrorAndExit(2, err.Error()) + } + + fmt.Println(string(cmd)) + + return string(cmd) + +} diff --git a/application/source/todo.go b/application/source/todo.go index 4bfd2e03df582403524de1f144f617619ea88793..70e220a7c818b4353da15f86f8d5368a9be7fd98 100644 --- a/application/source/todo.go +++ b/application/source/todo.go @@ -18,9 +18,14 @@ const dateLayout = "2006-01-02 15:04:05 GMT" func newToDo(date string, text string) toDo { - d, err := time.Parse(dateLayout, date+" 00:00:00 GMT") - if err != nil { - printError("the due " + date + " of the todo " + text + " cannot be parsed.") + var d time.Time + var err error + + if date != "" { + d, err = time.Parse(dateLayout, date+" 00:00:00 GMT") + if err != nil { + printError("the due of the todo cannot be parsed", date, text) + } } t := toDo{ @@ -65,7 +70,10 @@ func buildToDosTable(config *Configuration, pageDataList []pageData) (error, str table := tablewriter.NewWriter(buf) - table.SetHeader([]string{printer.Sprint("ToDo"), printer.Sprint("Due"), printer.Sprint("File")}) + table.SetHeader([]string{ + printer.Sprintf("ToDo"), + printer.Sprintf("Due"), + printer.Sprintf("File")}) table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false}) table.SetCenterSeparator("|") diff --git a/deployment/build/go_build_requirements_manager_and_run_print_items b/deployment/build/go_build_requirements_manager_and_run_print_items deleted file mode 100755 index b5de84f59b3657125be4d6da3d85e51da5e64884..0000000000000000000000000000000000000000 Binary files a/deployment/build/go_build_requirements_manager_and_run_print_items and /dev/null differ diff --git a/deployment/build/go_build_requirements_manager_and_run_print_overview b/deployment/build/go_build_requirements_manager_and_run_print_overview deleted file mode 100755 index d1733397169a05db9d27537e6e6b38928b46f061..0000000000000000000000000000000000000000 Binary files a/deployment/build/go_build_requirements_manager_and_run_print_overview and /dev/null differ diff --git a/deployment/build/go_build_requirements_manager_and_run_print_todo b/deployment/build/go_build_requirements_manager_and_run_print_todo deleted file mode 100755 index d0b990817bd946848d2c7fe0e6168e3184050455..0000000000000000000000000000000000000000 Binary files a/deployment/build/go_build_requirements_manager_and_run_print_todo and /dev/null differ diff --git a/development/examples/example1/overview.template b/development/examples/example1/overview.template index 0e06eee79d455ccc1c6ef23baf5544ffeeff810c..74cc47694585773565dae453d15d91a5e5507580 100644 --- a/development/examples/example1/overview.template +++ b/development/examples/example1/overview.template @@ -1,3 +1,49 @@ +--- +Author: "Me" +title: "The Document Title" +author: [Example Author, Another Author] +date: "2017-02-20" +keywords: [Markdown, Example] +lang: de +titlepage: true +titlepage-color: "CE0000" +titlepage-text-color: "FFFFFF" +titlepage-rule-color: "FFFFFF" +titlepage-rule-height: 2 +logo: "/home/volker.schukai/projekte/local/marketing/logos/varianten/schukai-weiss-1000-210.png" +logo-width: "6cm" +toc-own-page: true +table-use-row-colors: true + +subtitle: document subtitle, included in HTML, EPUB, LaTeX, ConTeXt, and docx documents +abstract: document summary, included in LaTeX, ConTeXt, AsciiDoc, and docx documents +subject: document subject, included in ODT, PDF, docx, EPUB, and pptx metadata + +... + +## Overview + +Created: {{ .Created.Format "02.Jan.2006" }} + +{{.Meta}} + +## Tasks + +{{.Tasks}} + +## Items + +{{.Items}} + +## Requirements + +*** + +BBBBBB + +{{.Requirements}} + +AAAAAA +*** -TEMPLATE \ No newline at end of file diff --git a/development/examples/example1/req1/1425.md b/development/examples/example1/req1/1425.md index b463849a5025ff3f0cb94080987931ba654ad910..9293c45ce404198b16b2d0359f50c22a9cf5f55b 100644 --- a/development/examples/example1/req1/1425.md +++ b/development/examples/example1/req1/1425.md @@ -7,23 +7,24 @@ Title: Value1 Created: 2022-02-21 Version: Value1 ID: 9999 ---- +... + +## Anforderung 1425 das ist ein test @todo das ist das erste todo 1 -@todo 2020-12-02 das ist das erste todo 2 -@todo 2020-12-03 das ist das erste todo 3 +@todo 2020-12-02 das ist das erste todo 2 +@todo 2020-12-03 das ist das erste todo 3 -# Headline -## Headline 1 +### Headline 1 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. -## Headline 2 +### Headline 2 Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. diff --git a/development/examples/example1/req1/1426.md b/development/examples/example1/req1/1426.md index d917e557603c24826db210470f05c1cef6f4781e..a444c634b808d904ad9d541d39ff2b0c27fd7190 100644 --- a/development/examples/example1/req1/1426.md +++ b/development/examples/example1/req1/1426.md @@ -10,17 +10,21 @@ Version: 2.0.2 ID: 23423 --- -# Headline -## Headline 1 + +## Anforderung 1426 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. @todo 2020-12-01 das ist das erste todo 1 @todo 2020-12-02 das ist das erste todo 2 -@todo 2020-12-03 das ist das erste todo 3 +@todo 2020-12-03 das ist das erste todo 3 sdfkjasdfk jasdkfjasd löfjasdklöfj asdkjfasdf jasdklf jasdfklöjasdfklöjasdklö + + +### Headline 1111 +lorem in hendrerit in vulputate velit esse moles -## Headline 2 +### Headline 2222 Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. diff --git a/development/examples/example1/req2/test1.md b/development/examples/example1/req2/test1.md index 38165c28cbbf066b5fdc6b0701cf4a42442e4a1a..c2c5a4de8f561dcdb87f2a6fb864d907c14b4bbd 100644 --- a/development/examples/example1/req2/test1.md +++ b/development/examples/example1/req2/test1.md @@ -13,25 +13,25 @@ list: - entry 3 items: - - Group: Zielgruppendefinition - Description: Zielgruppendefinition + Group: A1 + Description: Großes Logo Delivery until: 2022-12-12 Provided by: Me Provided on: 2022-12-01 - Group: Logo (klein) - Description: offen + Description: kleines Logo ... -# Headline +## Anforderung test1 -## Headline 1 +### Headline 1XXXX Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. -## Headline 2 +### Headline 2XXX Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. diff --git a/development/examples/example2/overview.template b/development/examples/example2/overview.template new file mode 100644 index 0000000000000000000000000000000000000000..13e081eeac7e0485f5e8beb67c6dfee3638850b6 --- /dev/null +++ b/development/examples/example2/overview.template @@ -0,0 +1,19 @@ + + +Das ist mein TEMPLATE + +## Übersicht + +{{.Meta}} + +## Aufgaben + +{{.Tasks}} + +## Beistellungen + +{{.Items}} + +## Anforderungen + +{{.Requirements}} \ No newline at end of file