public Template(Reader templateReader) throws IOException {
		template = buildTileTemplate(convertTemplateReaderToCharacters(new BufferedReader(templateReader)));
		
		width = template.length;
		height = template[0].length;
		
		horizontalWordStartingPoints = recordHorizontalStartingPoints();
		
		for(int x = 0; x < width; x++) {
			int wordLength = -1;
			
			for(int y = 0; y < height; y++) {
				if(template[x][y].type == TileType.Open) {
					if(wordLength == -1) {
						wordLength = 0;
					}
					
					wordLength++;
				}
				else { // closed
					if(wordLength != -1) {
						for(int dy = 1; dy <= wordLength; dy++) {
							template[x][y - dy].verticalWordLength = wordLength;
						}
						
						wordLength = -1;
					}
				}
			}
			
			if(wordLength != -1) {
				for(int dy = 1; dy <= wordLength; dy++) {
					template[x][height - dy].verticalWordLength = wordLength;
				}
				
				wordLength = -1;
			}
		}
	}