Class: ModpackLocalizer::SNBT::Reader

Inherits:
Object
  • Object
show all
Includes:
DescriptionExtractor, SubtitleExtractor, TitleExtractor
Defined in:
lib/modpack_localizer/snbt/reader.rb

Overview

.snbtファイルからタイトル、サブタイトル、説明を抽出するクラス

Constant Summary collapse

DESC_START_LENGTH =
14
DESC_END_LENGTH =
-2

Instance Method Summary collapse

Methods included from IndentHelper

#count_indent, #create_indent, #middle_indent

Constructor Details

#initialize(file_path) ⇒ ModpackLocalizer::SNBT::Reader

Parameters:

  • file_path (String)

    ファイルのパス



21
22
23
# File 'lib/modpack_localizer/snbt/reader.rb', line 21

def initialize(file_path)
  @file_path = file_path
end

Instance Method Details

#extract_allArray<Array<Hash>>

タイトル、サブタイトル、説明を抽出する

Returns:

  • (Array<Array<Hash>>)

    タイトル、サブタイトル、説明の配列



28
29
30
31
32
33
34
# File 'lib/modpack_localizer/snbt/reader.rb', line 28

def extract_all
  titles = extract_titles
  subtitles = extract_subtitles
  descriptions = extract_descriptions

  [titles, subtitles, descriptions]
end

#extract_descriptionsArray<Hash>

説明を抽出する

Returns:

  • (Array<Hash>)

    説明、開始行、終了行、インデントの配列



53
54
55
# File 'lib/modpack_localizer/snbt/reader.rb', line 53

def extract_descriptions
  super(@file_path)
end

#extract_oneline(line, is_desc: false) ⇒ String

title: “some title”のような形式から、“some title”を抽出する 説明の場合は、description: [“some description”]のような形式から、“some description”を抽出する

Parameters:

  • line (String)

  • is_desc (Boolean) (defaults to: false)

    説明かどうか

Returns:

  • (String)

    タイトル or サブタイトル or 説明



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/modpack_localizer/snbt/reader.rb', line 63

def extract_oneline(line, is_desc: false)
  stripped_line = line.strip
  return stripped_line.split(":", 2)[1] unless is_desc

  if oneline_description?(line)
    stripped_line[DESC_START_LENGTH..DESC_END_LENGTH]
  elsif start_of?(line, key: :description)
    stripped_line.split("[", 2)[1]
  else
    stripped_line.split("]", 2)[0]
  end
end

#extract_subtitlesArray<Hash>

サブタイトルを抽出する

Returns:

  • (Array<Hash>)

    サブタイトル、行番号、インデントの配列



46
47
48
# File 'lib/modpack_localizer/snbt/reader.rb', line 46

def extract_subtitles
  super(@file_path)
end

#extract_titlesArray<Hash>

タイトルを抽出する

Returns:

  • (Array<Hash>)

    タイトル、行番号、インデントの配列



39
40
41
# File 'lib/modpack_localizer/snbt/reader.rb', line 39

def extract_titles
  super(@file_path)
end

#oneline_description?(line) ⇒ Boolean

1行の説明かどうか

Parameters:

  • line (String)

Returns:

  • (Boolean)


80
81
82
83
# File 'lib/modpack_localizer/snbt/reader.rb', line 80

def oneline_description?(line)
  stripped_line = line.strip
  start_of?(line, key: :description) && stripped_line.end_with?("]")
end

#start_of?(line, key:) ⇒ Boolean

どのコンテンツの開始行か

Parameters:

  • line (String)

  • key (Symbol)

    コンテンツの種類

Returns:

  • (Boolean)


90
91
92
93
94
95
96
97
98
99
# File 'lib/modpack_localizer/snbt/reader.rb', line 90

def start_of?(line, key:)
  stripped_line = line.strip
  sections = {
    title: "title:",
    subtitle: "subtitle:",
    description: "description: ["
  }

  stripped_line.start_with?(sections[key])
end