still trying to get lexAlias working
							parent
							
								
									126dd495ba
								
							
						
					
					
						commit
						717e429efd
					
				| @ -0,0 +1,103 @@ | ||||
| package wikilink | ||||
| 
 | ||||
| import ( | ||||
| 	"log" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| func lexFragment(l *Lexer) stateFn { | ||||
| 	log.Println("entering lexFragment") | ||||
| 	for { | ||||
| 		if strings.HasPrefix(l.input[l.pos:], CloseLink) { | ||||
| 			return lexCloseLink | ||||
| 		} | ||||
| 
 | ||||
| 		if l.peek() == '^' { | ||||
| 			l.next() | ||||
| 			l.emit(ItemFragment) | ||||
| 			l.acceptRun("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -.,") | ||||
| 
 | ||||
| 			return lexInsideLink | ||||
| 		} | ||||
| 
 | ||||
| 		return lexInsideLink | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func lexAlias(l *Lexer) stateFn { | ||||
| 	// l.accept
 | ||||
| 	log.Println("entering lexAlias") | ||||
| 	if strings.HasPrefix(l.input[l.pos:], CloseLink) { | ||||
| 		return lexCloseLink | ||||
| 	} | ||||
| 	l.emit(ItemAlias) | ||||
| 
 | ||||
| 	return lexInsideLink | ||||
| } | ||||
| 
 | ||||
| func lexInsideLink(l *Lexer) stateFn { | ||||
| 	log.Println("entering lexInsideLink") | ||||
| 
 | ||||
| 	for { | ||||
| 		if strings.HasPrefix(l.input[l.pos:], CloseLink) { | ||||
| 			return lexCloseLink | ||||
| 		} | ||||
| 
 | ||||
| 		r := l.next() | ||||
| 		log.Printf("inspecting %q\n", string(r)) | ||||
| 
 | ||||
| 		switch { | ||||
| 		case r == EOF: | ||||
| 		case r == '\n': | ||||
| 			return l.errorf("unclosed link") | ||||
| 		case r == '#': | ||||
| 			l.emit(ItemText) | ||||
| 
 | ||||
| 			return lexFragment | ||||
| 		case r == '|': | ||||
| 			l.emit(ItemText) | ||||
| 
 | ||||
| 			return lexAlias | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func lexOpenLink(l *Lexer) stateFn { | ||||
| 	log.Println("entering lexOpenLink") | ||||
| 	l.pos += len(OpenLink) | ||||
| 	l.emit(ItemOpenLink) | ||||
| 
 | ||||
| 	return lexInsideLink | ||||
| } | ||||
| 
 | ||||
| func lexCloseLink(l *Lexer) stateFn { | ||||
| 	log.Println("entering lexCloseLink") | ||||
| 	l.pos += len(CloseLink) | ||||
| 	l.emit(ItemCloseLink) | ||||
| 
 | ||||
| 	return lexText | ||||
| } | ||||
| 
 | ||||
| func lexText(l *Lexer) stateFn { | ||||
| 	log.Println("entering lexText") | ||||
| 
 | ||||
| 	for { | ||||
| 		if strings.HasPrefix(l.input[l.pos:], OpenLink) { | ||||
| 			if l.pos > l.start { | ||||
| 				l.emit(ItemText) | ||||
| 			} | ||||
| 
 | ||||
| 			return lexOpenLink | ||||
| 		} | ||||
| 
 | ||||
| 		if l.next() == EOF { | ||||
| 			break | ||||
| 		} | ||||
| 		if l.pos > l.start { | ||||
| 			l.emit(ItemText) | ||||
| 		} | ||||
| 		l.emit(ItemEOF) | ||||
| 		return nil | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue