| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // package litera -- руна исходника
- package litera
- import (
- мФорм "fmt"
- мЮникод "unicode"
- мАлиас "p78git.ddns.net/svi/odeft/pkg/alias"
- мКонст "p78git.ddns.net/svi/odeft/pkg/cons"
- )
- // Литера -- руна исходника
- type Литера struct {
- знач мАлиас.Литера // Хранимая руна
- тип мАлиас.РунаТип // Тип руны
- }
- // НовЛитера -- возвращает новую литеру
- func НовЛитера(литера мАлиас.Литера) (*Литера, error) {
- if литера == "" {
- return nil, мФорм.Errorf("НовЛитера(): литера пустая")
- }
- сам := &Литера{
- знач: литера,
- }
- if ош := сам.типУст(); ош != nil {
- return nil, мФорм.Errorf("НовЛитера(): при проверке типа, ош=\n\t%w", ош)
- }
- return сам, nil
- }
- // Устанавливает тип руны
- func (сам *Литера) типУст() error {
- руна := []rune(сам.знач)[0]
- switch {
- case мЮникод.IsLetter(руна):
- сам.тип = мКонст.Буква
- case мЮникод.IsDigit(руна):
- сам.тип = мКонст.Цифра
- case сам.знач == " ":
- сам.тип = мКонст.Разделитель
- case сам.знач == ".":
- сам.тип = мКонст.Точка
- case сам.знач == "\n":
- сам.тип = мКонст.ПереводСтроки
- case сам.знач == "-":
- сам.тип = мКонст.Дефис
- case сам.знач == ":":
- сам.тип = мКонст.Двоеточие
- case сам.знач == "#":
- сам.тип = мКонст.КомментСтроч
- case сам.знач == "=":
- сам.тип = мКонст.Равно
- case сам.знач == ";":
- сам.тип = мКонст.ТчкЗпт
- case сам.знач == "{":
- сам.тип = мКонст.СкобкаФигурОткр
- case сам.знач == "}":
- сам.тип = мКонст.СкобкаФигурЗакр
- case сам.знач == "'":
- сам.тип = мКонст.КавычОдинар
- case сам.знач == "/":
- сам.тип = мКонст.СлэшАп
- case сам.знач == "\\":
- сам.тип = мКонст.СлэшДаун
- case сам.знач == "*":
- сам.тип = мКонст.Звезда
- case сам.знач == "(":
- сам.тип = мКонст.СкобкаКругОткр
- case сам.знач == ")":
- сам.тип = мКонст.СкобкаКругЗакр
- case сам.знач == "[":
- сам.тип = мКонст.СкобкаКвадрОткр
- case сам.знач == "]":
- сам.тип = мКонст.СкобкаКвадрЗакр
- case сам.знач == ",":
- сам.тип = мКонст.Запятая
- case сам.знач == "!":
- сам.тип = мКонст.ЗнакВоскл
- case сам.знач == "?":
- сам.тип = мКонст.ЗнакВопр
- default:
- return мФорм.Errorf("Литера.типУст(): неизвестный тип руны('%v')", string(сам.знач))
- }
- return nil
- }
- // Знач -- возвращает хранимое значение руны
- func (сам *Литера) Знач() мАлиас.Литера {
- return мАлиас.Литера(сам.знач)
- }
- // Тип -- возвращае ттип руны
- func (сам *Литера) Тип() мАлиас.РунаТип {
- return сам.тип
- }
|