src_rune.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // package src_rune -- руна исходника
  2. package src_rune
  3. import (
  4. мФорм "fmt"
  5. мЮникод "unicode"
  6. )
  7. const ( // Класс литеры
  8. буква = "буква"
  9. цифра = "цифра"
  10. пробел = "пробел"
  11. точка = "точка"
  12. новСтрока = "\n"
  13. )
  14. // ИсхРуна -- руна исходника
  15. type ИсхРуна struct {
  16. знач rune // Хранимая руна
  17. тип string // Тип руны
  18. }
  19. // НовИсхРуна -- возвращае тновую руну исходника
  20. func НовИсхРуна(руна rune) (*ИсхРуна, error) {
  21. сам := &ИсхРуна{
  22. знач: руна,
  23. }
  24. if ош := сам.типУст(); ош != nil {
  25. return nil, мФорм.Errorf("НовИсхРуна(): при проверке типа, ош=\n\t%w", ош)
  26. }
  27. return сам, nil
  28. }
  29. // Устанавливает тип руны
  30. func (сам *ИсхРуна) типУст() error {
  31. if мЮникод.IsLetter(сам.знач) {
  32. сам.тип = буква
  33. }
  34. if мЮникод.IsDigit(сам.знач) {
  35. сам.тип = цифра
  36. }
  37. if сам.тип == "" {
  38. сам.тип = "неизвестно"
  39. return мФорм.Errorf("ИсхРуна.типУст(): неизвестный тип руны (%v)", сам.знач)
  40. }
  41. return nil
  42. }