skipper.go 772 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package ini
  2. // skipper is used to skip certain blocks of an ini file.
  3. // Currently skipper is used to skip nested blocks of ini
  4. // files. See example below
  5. //
  6. // [ foo ]
  7. // nested = ; this section will be skipped
  8. // a=b
  9. // c=d
  10. // bar=baz ; this will be included
  11. type skipper struct {
  12. shouldSkip bool
  13. TokenSet bool
  14. prevTok Token
  15. }
  16. func newSkipper() skipper {
  17. return skipper{
  18. prevTok: emptyToken,
  19. }
  20. }
  21. func (s *skipper) ShouldSkip(tok Token) bool {
  22. if s.shouldSkip &&
  23. s.prevTok.Type() == TokenNL &&
  24. tok.Type() != TokenWS {
  25. s.Continue()
  26. return false
  27. }
  28. s.prevTok = tok
  29. return s.shouldSkip
  30. }
  31. func (s *skipper) Skip() {
  32. s.shouldSkip = true
  33. s.prevTok = emptyToken
  34. }
  35. func (s *skipper) Continue() {
  36. s.shouldSkip = false
  37. s.prevTok = emptyToken
  38. }