removing lexer
							parent
							
								
									8098d75ae9
								
							
						
					
					
						commit
						e5f7bb8f98
					
				| @ -1,14 +0,0 @@ | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"log" | ||||
| 
 | ||||
| 	"github.com/therealfakemoot/wikilinks-parser/lexer" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 	_, tokens := lexer.Lex(`[[foo/bar/butts.png]]`) | ||||
| 	for t := range tokens { | ||||
| 		log.Printf("%#v\n", t) | ||||
| 	} | ||||
| } | ||||
| @ -1,116 +0,0 @@ | ||||
| package lexer | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	// "log"
 | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| type Token int | ||||
| 
 | ||||
| const ( | ||||
| 	LinkBeginToken = iota | ||||
| 	LinkEndToken | ||||
| 	LinkTextToken | ||||
| 	LinkAliasBeginToken | ||||
| 	LinkAliasTextToken | ||||
| 	LinkSectionBeginToken | ||||
| 	LinkSectionTextToken | ||||
| 	LinkBlockBeginToken | ||||
| 	LinkBlockTextToken | ||||
| ) | ||||
| 
 | ||||
| /* | ||||
| var ( | ||||
| 	LinkBeginToken        = Token{Raw: "[["} | ||||
| 	LinkEndToken          = Token{Raw: "]]"} | ||||
| 	LinkTextToken         = Token{} | ||||
| 	LinkAliasBeginToken   = Token{Raw: "|"} | ||||
| 	LinkAliasTextToken    = Token{} | ||||
| 	LinkSectionBeginToken = Token{Raw: "#"} | ||||
| 	LinkSectionTextToken  = Token{} | ||||
| 	LinkBlockBeginToken   = Token{Raw: "^"} | ||||
| 	LinkBlockTextToken    = Token{} | ||||
| ) | ||||
| */ | ||||
| 
 | ||||
| type Lexer struct { | ||||
| 	input  []string | ||||
| 	pos    int | ||||
| 	link   bool | ||||
| 	Tokens chan Token | ||||
| } | ||||
| 
 | ||||
| func Lex(input string) (*Lexer, chan Token) { | ||||
| 	l := &Lexer{ | ||||
| 		input:  make([]string, 0), | ||||
| 		pos:    0, | ||||
| 		Tokens: make(chan Token), | ||||
| 	} | ||||
| 
 | ||||
| 	scanner := bufio.NewScanner(strings.NewReader(input)) | ||||
| 	scanner.Split(bufio.ScanRunes) | ||||
| 
 | ||||
| 	for scanner.Scan() { | ||||
| 		l.input = append(l.input, scanner.Text()) | ||||
| 	} | ||||
| 
 | ||||
| 	go l.Run() | ||||
| 	return l, l.Tokens | ||||
| } | ||||
| 
 | ||||
| func (l *Lexer) Next() string { | ||||
| 	if l.pos > len(l.input)-1 { | ||||
| 		return "eof" | ||||
| 	} | ||||
| 	r := l.input[l.pos] | ||||
| 	l.pos++ | ||||
| 	return r | ||||
| } | ||||
| 
 | ||||
| func (l *Lexer) Backup() { | ||||
| 	l.pos-- | ||||
| } | ||||
| 
 | ||||
| func (l *Lexer) Peek() string { | ||||
| 	r := l.Next() | ||||
| 	l.Backup() | ||||
| 	return r | ||||
| } | ||||
| 
 | ||||
| func (l *Lexer) Emit(t Token) { | ||||
| 	// log.Printf("token emitted: %#v\n", t)
 | ||||
| 	l.Tokens <- t | ||||
| } | ||||
| 
 | ||||
| func (l *Lexer) Run() { | ||||
| 	defer close(l.Tokens) | ||||
| 	for { | ||||
| 		s := l.Next() | ||||
| 		if s == "eof" { | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		if s == "[" && l.Peek() == "[" { | ||||
| 			l.link = true | ||||
| 			l.Next() | ||||
| 			l.Emit(LinkBeginToken) | ||||
| 
 | ||||
| 			switch s { | ||||
| 			case "|": | ||||
| 				l.Emit(LinkAliasBeginToken) | ||||
| 			case "#": | ||||
| 				l.Emit(LinkSectionBeginToken) | ||||
| 			case "^": | ||||
| 				l.Emit(LinkBlockBeginToken) | ||||
| 			} | ||||
| 
 | ||||
| 			if s == "]" && l.Peek() == "]" { | ||||
| 				l.link = false | ||||
| 				l.Next() | ||||
| 				l.Emit(LinkEndToken) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| @ -1,50 +0,0 @@ | ||||
| package lexer | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func Test_LexerSimple(t *testing.T) { | ||||
| 	tt := []string{ | ||||
| 		"[[", | ||||
| 		"]]", | ||||
| 		"[[foo]]", | ||||
| 		"[[foo]]", | ||||
| 		"[[foo|bar]]", | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tc := range tt { | ||||
| 		t.Run(tc, func(t *testing.T) { | ||||
| 			t.Logf("checking %q", tc) | ||||
| 			_, tokens := Lex(tc) | ||||
| 			for tok := range tokens { | ||||
| 				t.Logf("found token: %#v", tok) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| 
 | ||||
| func Test_LexerFull(t *testing.T) { | ||||
| 	tt := []string{ | ||||
| 		`[[Regular Link]]`, | ||||
| 		`![[Transcluded Link]]`, | ||||
| 		`[[Regular Link|Alias]]`, | ||||
| 		`[[Regular Link#Subsection of page]]`, | ||||
| 		`[[Regular Link^link to block]]`, | ||||
| 		`[[Regular Link#Subsection of page|Alias]]`, | ||||
| 		`[[Regular Link^link to block|Alias]]`, | ||||
| 		`[[Regular Link\|Alias]]`, | ||||
| 		`[[Regular Link^link to block\|Alias]]`, | ||||
| 		`[[Regular Link#Subsection of page\|Alias]]`, | ||||
| 	} | ||||
| 
 | ||||
| 		for _, tc := range tt { | ||||
| 		t.Run(tc, func(t *testing.T) { | ||||
| 			t.Fail() | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| */ | ||||
					Loading…
					
					
				
		Reference in New Issue