lib/jp_quest/snbt/formatter.rb in jp_quest-0.3.0 vs lib/jp_quest/snbt/formatter.rb in jp_quest-0.3.1
- old
+ new
@@ -10,11 +10,11 @@
#
# @param [Hash] content コンテンツ
# @param [String] indent インデント
# @return [String] SNBT形式に整形したコンテンツ
def format_overwritable_lines(content, indent)
- full_lines = add_missing_lines(content)
+ full_lines = adjust_line_length(content)
format_for_snbt(full_lines, indent, content)
end
# SNBT形式に整形
#
@@ -26,21 +26,20 @@
lines = prepare_lines_for_snbt(lines, content)
formatted_lines = format_lines(lines, indent, content)
"#{indent}#{content[:type]}: #{formatted_lines}"
end
- # 不足している行を追加
+ # 行数をstart_line~end_lineと一致させる
#
# @param [Hash] content コンテンツ
# @return [void]
- def add_missing_lines(content)
+ def adjust_line_length(content)
required_lines = extract_required_line_counts(content)
lines = content[:text].split("\n")
- while lines.length < required_lines
- lines << empty_middle_line(content[:indent])
- end
+ delete_over_lines(lines, required_lines)
+ add_missing_lines(lines, required_lines, content[:indent])
lines
end
private
@@ -84,9 +83,38 @@
# start_lineが1、end_lineが5の場合、必要な行数はブラケットを抜いて3行
# そのため、(end(5) - start(1)) + 1行 - ブラケット2行 = 3行となる
line_offset, without_brackets = 1, 2
(content[:end_line] - content[:start_line]) + line_offset - without_brackets
+ end
+
+ # 不要な行を削除
+ #
+ # @param [Array<String>] lines 行
+ # @param [Integer] required_lines 必要な行数
+ # @return [void]
+ def delete_over_lines(lines, required_lines)
+ return unless lines.length > required_lines
+
+ gap_length = lines.length - required_lines
+ gap_length.times do
+ index = lines.index("")
+ lines.delete_at(index) if index
+ end
+ end
+
+ # 不足している行を追加
+ #
+ # @param [Array<String>] lines 行
+ # @param [Integer] required_lines 必要な行数
+ # @param [String] indent インデント
+ # @return [void]
+ def add_missing_lines(lines, required_lines, indent)
+ return unless lines.length < required_lines
+
+ while lines.length < required_lines
+ lines << empty_middle_line(indent)
+ end
end
# 中間行の空行を作成
#
# @return [String] 空行