mirror of
https://github.com/tonytins/citylimits.git
synced 2025-03-16 04:41:24 +00:00
79 lines
2.2 KiB
GDScript3
79 lines
2.2 KiB
GDScript3
|
class_name License
|
||
|
extends Resource
|
||
|
## Holds AUTO GENERATED License information
|
||
|
|
||
|
## SPDX-License-Identifier or similar to it. CASE SENSITIVE[br]
|
||
|
## Like "CC0-1.0"[br]
|
||
|
## See [url=https://spdx.org/licenses/]SPDX Identifier List[/url]
|
||
|
var identifier: String = ""
|
||
|
|
||
|
## The License's Name. [br]
|
||
|
## Like "CC0 1.0 Universal"
|
||
|
var name: String = ""
|
||
|
|
||
|
## License Terms; The text of a license file
|
||
|
var terms: String = ""
|
||
|
|
||
|
## Returns a string containing this license's information, formatted to [url=https://spdx.dev/resources/use/]SPDX Standards[/url]
|
||
|
func to_formatted_string() -> String:
|
||
|
return "License: {identifier}\n{terms}".format({
|
||
|
'identifier': identifier,
|
||
|
'terms': _add_line_padding(terms)
|
||
|
})
|
||
|
|
||
|
|
||
|
# wouldn't recomend using this, unless you know what your doing
|
||
|
# but if you do, this loads and parses all licenses (.txt files) in a directory,
|
||
|
# plus Godot's built-in Licenses
|
||
|
static func _load_licenses_in(dir: String):
|
||
|
var dict = {}
|
||
|
|
||
|
# get game licenses
|
||
|
var names = DirAccess.get_files_at(dir)
|
||
|
if names.size() == 0:
|
||
|
print_verbose("\nSimple License: No License files found in dir\n", dir, "\nif you have no license files there, then this can be ignored\n")
|
||
|
for _name in names:
|
||
|
var ext = _name.rsplit('.', false, 1)
|
||
|
if ext.size() == 0 or ext[-1] != 'txt':
|
||
|
continue
|
||
|
|
||
|
var l = new()
|
||
|
l.identifier = _name.split('.', false, 1)[0]
|
||
|
l.name = l.identifier
|
||
|
l.terms = FileAccess.open(dir.path_join(_name), FileAccess.READ).get_as_text()
|
||
|
dict[l.identifier] = l
|
||
|
|
||
|
# get licenses built into the Godot Engine
|
||
|
var tmp = Engine.get_license_info()
|
||
|
for id in tmp:
|
||
|
if dict.has(id):
|
||
|
continue
|
||
|
|
||
|
var l = new()
|
||
|
l.identifier = id
|
||
|
l.terms = tmp[id]
|
||
|
dict[id] = l
|
||
|
|
||
|
return dict
|
||
|
|
||
|
|
||
|
# this is for formatting individual lines accoring to SPDX standards
|
||
|
static func _add_line_padding(combined_lines: String, padding: String = " ") -> String:
|
||
|
if combined_lines.is_empty():
|
||
|
return combined_lines
|
||
|
|
||
|
var lines = combined_lines.split("\n")
|
||
|
|
||
|
var s = ""
|
||
|
for i in len(lines):
|
||
|
if lines[i].is_empty() or lines[i] == "\n":
|
||
|
if i+1 < len(lines):
|
||
|
s += padding + "." + "\n"
|
||
|
else:
|
||
|
s += '\n'
|
||
|
else:
|
||
|
s += padding + lines[i] + "\n"
|
||
|
s = s.strip_edges(false)
|
||
|
s += '\n'
|
||
|
return s
|