presets.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package options
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. var presets map[string]urlOptions
  7. func ParsePresets(presetStrs []string) error {
  8. for _, presetStr := range presetStrs {
  9. if err := parsePreset(presetStr); err != nil {
  10. return err
  11. }
  12. }
  13. return nil
  14. }
  15. func parsePreset(presetStr string) error {
  16. presetStr = strings.Trim(presetStr, " ")
  17. if len(presetStr) == 0 || strings.HasPrefix(presetStr, "#") {
  18. return nil
  19. }
  20. parts := strings.Split(presetStr, "=")
  21. if len(parts) != 2 {
  22. return fmt.Errorf("Invalid preset string: %s", presetStr)
  23. }
  24. name := strings.Trim(parts[0], " ")
  25. if len(name) == 0 {
  26. return fmt.Errorf("Empty preset name: %s", presetStr)
  27. }
  28. value := strings.Trim(parts[1], " ")
  29. if len(value) == 0 {
  30. return fmt.Errorf("Empty preset value: %s", presetStr)
  31. }
  32. optsStr := strings.Split(value, "/")
  33. opts, rest := parseURLOptions(optsStr)
  34. if len(rest) > 0 {
  35. return fmt.Errorf("Invalid preset value: %s", presetStr)
  36. }
  37. if presets == nil {
  38. presets = make(map[string]urlOptions)
  39. }
  40. presets[name] = opts
  41. return nil
  42. }
  43. func ValidatePresets() error {
  44. for name, opts := range presets {
  45. po := NewProcessingOptions()
  46. if err := applyURLOptions(po, opts, name); err != nil {
  47. return fmt.Errorf("Error in preset `%s`: %s", name, err)
  48. }
  49. }
  50. return nil
  51. }