| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // package src_rune -- руна исходника
- package src_rune
- import (
- мФорм "fmt"
- мЮникод "unicode"
- )
- const ( // Класс литеры
- буква = "буква"
- цифра = "цифра"
- пробел = "пробел"
- точка = "точка"
- новСтрока = "\n"
- )
- // ИсхРуна -- руна исходника
- type ИсхРуна struct {
- знач rune // Хранимая руна
- тип string // Тип руны
- }
- // НовИсхРуна -- возвращае тновую руну исходника
- func НовИсхРуна(руна rune) (*ИсхРуна, error) {
- сам := &ИсхРуна{
- знач: руна,
- }
- if ош := сам.типУст(); ош != nil {
- return nil, мФорм.Errorf("НовИсхРуна(): при проверке типа, ош=\n\t%w", ош)
- }
- return сам, nil
- }
- // Устанавливает тип руны
- func (сам *ИсхРуна) типУст() error {
- if мЮникод.IsLetter(сам.знач) {
- сам.тип = буква
- }
- if мЮникод.IsDigit(сам.знач) {
- сам.тип = цифра
- }
- if сам.тип == "" {
- сам.тип = "неизвестно"
- return мФорм.Errorf("ИсхРуна.типУст(): неизвестный тип руны (%v)", сам.знач)
- }
- return nil
- }
|