diff --git a/src/Autoload/Import.gd b/src/Autoload/Import.gd index 4b18e431c..e01198e01 100644 --- a/src/Autoload/Import.gd +++ b/src/Autoload/Import.gd @@ -265,6 +265,7 @@ func import_patterns(priority_ordered_search_path: Array) -> void: func import_gpl(path : String) -> Palette: + # Refer to app/core/gimppalette-load.c of the GIMP for the "living spec" var result : Palette = null var file = File.new() if file.file_exists(path): @@ -280,6 +281,8 @@ func import_gpl(path : String) -> Palette: break else: result = Palette.new() + # Use filename as palette name in case reading old + # palette format (must read more to determine) var name_start = path.find_last('/') + 1 var name_end = path.find_last('.') if name_end > name_start: @@ -288,15 +291,27 @@ func import_gpl(path : String) -> Palette: # Comments if line.begins_with('#'): comments += line.trim_prefix('#') + '\n' + # Some programs output palette name in a comment for old format + if line.begins_with("#Palette Name: "): + result.name = line.replace("#Palette Name: ", "") pass - elif line_number > 0 && line.length() >= 12: + elif line.begins_with("Name: "): + result.name = line.replace("Name: ", "") + pass + elif line.begins_with("Columns: "): + # Number of colors in this palette. Unecessary and often wrong + pass + elif line_number > 0 && line.length() >= 9: line = line.replace("\t", " ") var color_data : PoolStringArray = line.split(" ", false, 4) var red : float = color_data[0].to_float() / 255.0 var green : float = color_data[1].to_float() / 255.0 var blue : float = color_data[2].to_float() / 255.0 var color = Color(red, green, blue) - result.add_color(color, color_data[3]) + if color_data.size() >= 4: + result.add_color(color, color_data[3]) + else: + result.add_color(color) line_number += 1 if result: