Detect theme and exercice language at runtime (not stored)
This commit is contained in:
parent
99cc79421f
commit
aa0e7406c1
17 changed files with 99 additions and 42 deletions
|
|
@ -153,7 +153,7 @@ func CheckExerciceFiles(i Importer, exercice *fic.Exercice, exceptions *CheckExc
|
|||
if f, exists := paramsFiles[fname]; exists {
|
||||
// Call checks hooks
|
||||
for _, hk := range hooks.mdTextHooks {
|
||||
for _, err := range hk(f.Disclaimer, exceptions) {
|
||||
for _, err := range hk(f.Disclaimer, exercice.Language, exceptions) {
|
||||
errs = append(errs, NewFileError(exercice, fname, err))
|
||||
}
|
||||
}
|
||||
|
|
@ -167,7 +167,7 @@ func CheckExerciceFiles(i Importer, exercice *fic.Exercice, exceptions *CheckExc
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.fileHooks {
|
||||
for _, e := range h(file, exceptions) {
|
||||
for _, e := range h(file, exercice, exceptions) {
|
||||
errs = append(errs, NewFileError(exercice, fname, e))
|
||||
}
|
||||
}
|
||||
|
|
@ -213,7 +213,7 @@ func SyncExerciceFiles(i Importer, exercice *fic.Exercice, exceptions *CheckExce
|
|||
|
||||
// Call checks hooks
|
||||
for _, hk := range hooks.mdTextHooks {
|
||||
for _, err := range hk(f.Disclaimer, exceptions) {
|
||||
for _, err := range hk(f.Disclaimer, exercice.Language, exceptions) {
|
||||
errs = append(errs, NewFileError(exercice, fname, err))
|
||||
}
|
||||
}
|
||||
|
|
@ -234,7 +234,7 @@ func SyncExerciceFiles(i Importer, exercice *fic.Exercice, exceptions *CheckExce
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.fileHooks {
|
||||
for _, e := range h(file, exceptions) {
|
||||
for _, e := range h(file, exercice, exceptions) {
|
||||
errs = append(errs, NewFileError(exercice, fname, e))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ func buildExerciceHints(i Importer, exercice *fic.Exercice, exceptions *CheckExc
|
|||
} else {
|
||||
// Call checks hooks
|
||||
for _, hk := range hooks.mdTextHooks {
|
||||
for _, err := range hk(h.Content, exceptions) {
|
||||
for _, err := range hk(h.Content, exercice.Language, exceptions) {
|
||||
errs = append(errs, NewHintError(exercice, h, n, err))
|
||||
}
|
||||
}
|
||||
|
|
@ -97,7 +97,7 @@ func buildExerciceHints(i Importer, exercice *fic.Exercice, exceptions *CheckExc
|
|||
|
||||
// Call checks hooks
|
||||
for _, hook := range hooks.hintHooks {
|
||||
for _, e := range hook(h, exceptions) {
|
||||
for _, e := range hook(h, exercice, exceptions) {
|
||||
errs = append(errs, NewHintError(exercice, h, n, e))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ func buildLabelFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, exc
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(flag.Label, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
for _, err := range h(flag.Label, exercice.Language, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, flagline, err))
|
||||
}
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ func buildLabelFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, exc
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.flagLabelHooks {
|
||||
for _, e := range h(f, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
for _, e := range h(f, exercice, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, flagline, e))
|
||||
}
|
||||
}
|
||||
|
|
@ -199,7 +199,7 @@ func buildKeyFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, defau
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.flagKeyHooks {
|
||||
for _, e := range h(fk, raw, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
for _, e := range h(fk, raw, exercice, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, flagline, e))
|
||||
}
|
||||
}
|
||||
|
|
@ -242,7 +242,7 @@ func buildKeyFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, defau
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.flagChoiceHooks {
|
||||
for _, e := range h(fc, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
for _, e := range h(fc, exercice, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, flagline, e))
|
||||
}
|
||||
}
|
||||
|
|
@ -263,7 +263,7 @@ func buildKeyFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, defau
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.flagKeyWithChoicesHooks {
|
||||
for _, e := range h(fk, raw, choices, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
for _, e := range h(fk, raw, choices, exercice, exceptions.Filter2ndCol(strconv.Itoa(flagline))) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, flagline, e))
|
||||
}
|
||||
}
|
||||
|
|
@ -441,7 +441,7 @@ func buildExerciceFlag(i Importer, exercice *fic.Exercice, flag ExerciceFlag, nl
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.flagMCQHooks {
|
||||
for _, e := range h(&addedFlag, addedFlag.Entries, exceptions) {
|
||||
for _, e := range h(&addedFlag, addedFlag.Entries, exercice, exceptions) {
|
||||
errs = append(errs, NewFlagError(exercice, &flag, nline+1, e))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,17 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]*
|
|||
exceptions = exceptions.GetExerciceExceptions(e)
|
||||
//log.Printf("Kept repochecker exceptions for this exercice: %v", exceptions)
|
||||
|
||||
e.Language = theme.Language
|
||||
// Overwrite language if language.txt exists
|
||||
if language, err := GetFileContent(i, path.Join(epath, "language.txt")); err == nil {
|
||||
language = strings.TrimSpace(language)
|
||||
if strings.Contains(language, "\n") {
|
||||
errs = append(errs, NewExerciceError(e, fmt.Errorf("language.txt: Language can't contain new lines"), theme))
|
||||
} else {
|
||||
e.Language = language
|
||||
}
|
||||
}
|
||||
|
||||
// Overwrite title if title.txt exists
|
||||
if myTitle, err := GetFileContent(i, path.Join(epath, "title.txt")); err == nil {
|
||||
myTitle = strings.TrimSpace(myTitle)
|
||||
|
|
@ -142,7 +153,7 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]*
|
|||
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(e.Overview, exceptions.GetFileExceptions("overview.md", "overview.txt")) {
|
||||
for _, err := range h(e.Overview, e.Language, exceptions.GetFileExceptions("overview.md", "overview.txt")) {
|
||||
errs = append(errs, NewExerciceError(e, fmt.Errorf("overview.md: %w", err)))
|
||||
}
|
||||
}
|
||||
|
|
@ -172,7 +183,7 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]*
|
|||
} else {
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(e.Statement, exceptions.GetFileExceptions("statement.md", "statement.txt")) {
|
||||
for _, err := range h(e.Statement, e.Language, exceptions.GetFileExceptions("statement.md", "statement.txt")) {
|
||||
errs = append(errs, NewExerciceError(e, fmt.Errorf("statement.md: %w", err)))
|
||||
}
|
||||
}
|
||||
|
|
@ -192,7 +203,7 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]*
|
|||
} else if len(e.Finished) > 0 {
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(e.Finished, exceptions.GetFileExceptions("finished.md", "finished.txt")) {
|
||||
for _, err := range h(e.Finished, e.Language, exceptions.GetFileExceptions("finished.md", "finished.txt")) {
|
||||
errs = append(errs, NewExerciceError(e, fmt.Errorf("finished.md: %w", err)))
|
||||
}
|
||||
}
|
||||
|
|
@ -291,7 +302,7 @@ func BuildExercice(i Importer, theme *fic.Theme, epath string, dmap *map[int64]*
|
|||
} else {
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(e.Resolution, exceptions.GetFileExceptions("resolution.md"), p.GetRawFlags()...) {
|
||||
for _, err := range h(e.Resolution, e.Language, exceptions.GetFileExceptions("resolution.md"), p.GetRawFlags()...) {
|
||||
errs = append(errs, NewExerciceError(e, fmt.Errorf("resolution.md: %w", err)))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,14 +9,14 @@ import (
|
|||
|
||||
var hooks = &CheckHooks{customHooks: map[string]CustomCheckHook{}}
|
||||
|
||||
type CheckFlagChoiceHook func(*fic.FlagChoice, *CheckExceptions) []error
|
||||
type CheckFlagKeyHook func(*fic.FlagKey, string, *CheckExceptions) []error
|
||||
type CheckFlagKeyWithChoicesHook func(*fic.FlagKey, string, []*fic.FlagChoice, *CheckExceptions) []error
|
||||
type CheckFlagLabelHook func(*fic.FlagLabel, *CheckExceptions) []error
|
||||
type CheckFlagMCQHook func(*fic.MCQ, []*fic.MCQ_entry, *CheckExceptions) []error
|
||||
type CheckFileHook func(*fic.EFile, *CheckExceptions) []error
|
||||
type CheckHintHook func(*fic.EHint, *CheckExceptions) []error
|
||||
type CheckMDTextHook func(string, *CheckExceptions, ...string) []error
|
||||
type CheckFlagChoiceHook func(*fic.FlagChoice, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckFlagKeyHook func(*fic.FlagKey, string, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckFlagKeyWithChoicesHook func(*fic.FlagKey, string, []*fic.FlagChoice, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckFlagLabelHook func(*fic.FlagLabel, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckFlagMCQHook func(*fic.MCQ, []*fic.MCQ_entry, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckFileHook func(*fic.EFile, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckHintHook func(*fic.EHint, *fic.Exercice, *CheckExceptions) []error
|
||||
type CheckMDTextHook func(string, string, *CheckExceptions, ...string) []error
|
||||
type CheckExerciceHook func(*fic.Exercice, *CheckExceptions) []error
|
||||
type CustomCheckHook func(interface{}, *CheckExceptions) []error
|
||||
|
||||
|
|
|
|||
|
|
@ -112,6 +112,16 @@ func BuildTheme(i Importer, tdir string) (th *fic.Theme, exceptions *CheckExcept
|
|||
// Get exceptions
|
||||
exceptions = LoadException(i, th)
|
||||
|
||||
// Overwrite language
|
||||
if language, err := GetFileContent(i, path.Join(tdir, "language.txt")); err == nil {
|
||||
language = strings.TrimSpace(language)
|
||||
if strings.Contains(language, "\n") {
|
||||
errs = append(errs, NewThemeError(th, fmt.Errorf("language.txt: Language can't contain new lines")))
|
||||
} else {
|
||||
th.Language = language
|
||||
}
|
||||
}
|
||||
|
||||
// Extract theme's label
|
||||
if tname, err := GetFileContent(i, path.Join(tdir, "title.txt")); err == nil {
|
||||
th.Name = fixnbsp(tname)
|
||||
|
|
@ -144,7 +154,7 @@ func BuildTheme(i Importer, tdir string) (th *fic.Theme, exceptions *CheckExcept
|
|||
} else {
|
||||
// Call checks hooks
|
||||
for _, h := range hooks.mdTextHooks {
|
||||
for _, err := range h(intro, exceptions.GetFileExceptions("overview.md", "overview.txt")) {
|
||||
for _, err := range h(intro, th.Language, exceptions.GetFileExceptions("overview.md", "overview.txt")) {
|
||||
errs = append(errs, NewThemeError(th, fmt.Errorf("overview.md: %w", err)))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue