Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- character_width_dots = { -- all characters are currently 1 to 6 dots wide
- "!',.:;i|",
- "`l",
- " \"()*I[]t{}",
- "<>fk",
- "AaBbCcDdEeFGgHhJjKLMmNnOoPpQqRrSsTUuVvWwXxYyZz1234567890#$£%^&_-+=\\?/",
- "@~",
- }
- character_spacing_width_dots = 1
- default_character_width = 5
- compatible = {
- max_dots_per_line: 114,
- max_lines_per_page: 14,
- max_characters_per_page: 798,
- }
- bedrock = {
- max_characters_per_book: 12800,
- max_pages_per_book: 50,
- }
- java = {
- max_characters_per_book: 79800,
- max_pages_per_book: 100,
- }
- copy = (...) ->
- output = {}
- for i = 1, select "#", ...
- for key, value in pairs select i, ...
- output[key] = value
- return output
- -- rebuild character_width_dots into a quicker/easier form
- character = {}
- character.default = default_character_width
- character["\n"] = -character_spacing_width_dots
- for i = 1, #character_width_dots
- line = character_width_dots[i]
- for j = 1, #line
- character[line\sub j, j] = i
- input = ""
- lines = {}
- for line in io.lines "input.txt"
- table.insert lines, line\gsub("\t", " ")
- input = table.concat lines, "\n"
- limits = copy compatible, bedrock
- -- lengths start at -1 to account for first extra dot
- lines = {}
- current_line_text = ""
- current_line_length = -character_spacing_width_dots
- next_line_text = ""
- next_line_length = -character_spacing_width_dots
- whitespace_encountered = false
- while #input > 0
- current_character = input\sub 1, 1
- current_character_dots = (character[current_character] or character.default) + character_spacing_width_dots
- if current_character == " "
- whitespace_encountered = true
- current_line_text ..= current_character
- current_line_length += current_character_dots
- input = input\sub 2
- if current_character == "\n"
- -- table.insert lines, current_line_text\sub(1, #current_line_text - 1) .. "\\n"
- table.insert lines, current_line_text
- current_line_text = next_line_text
- current_line_length = next_line_length
- next_line_text = ""
- next_line_length = -character_spacing_width_dots
- whitespace_encountered = false
- continue
- if current_line_length > limits.max_dots_per_line
- while " " != current_line_text\sub #current_line_text
- current_character = current_line_text\sub #current_line_text
- current_character_dots = (character[current_character] or character.default) + character_spacing_width_dots
- next_line_text = current_character .. next_line_text
- next_line_length += current_character_dots
- current_line_text = current_line_text\sub 1, #current_line_text - 1
- current_line_length -= current_character_dots
- unless whitespace_encountered
- -- print "Broke a huge line: #{current_line_text}"
- break
- table.insert lines, current_line_text
- current_line_text = next_line_text
- current_line_length = next_line_length
- next_line_text = ""
- next_line_length = -character_spacing_width_dots
- whitespace_encountered = false
- continue
- if #current_line_text > 0
- table.insert lines, current_line_text
- page_number = 1
- output = {
- string.rep("-", 40) .. " PAGE #{page_number}"
- }
- current_line = ""
- for i = 1, #lines
- line = lines[i]
- current_line ..= line
- if "\n" == line\sub #line
- table.insert output, current_line
- current_line = ""
- -- table.insert output, line
- if i % limits.max_lines_per_page == 0
- table.insert output, current_line\sub(1, #current_line - 1)
- if i < #lines
- current_line = ""
- page_number += 1
- table.insert output, string.rep("-", 40) .. " PAGE #{page_number}"
- if #current_line > 0
- table.insert output, current_line
- -- for line in *output
- -- print line
- -- print table.concat output
- file = io.open "output.txt", "w"
- file\write table.concat output, "\n"
- file\close!
Advertisement
Add Comment
Please, Sign In to add comment