Splux Linux

source-based Linux using SPS

splux-site · log · files · refs · tags · releases · people · languages · GitHub · file

tools/linguist-extract.awk


Awk

1554 bytes at 4c4f12c · GitHub

# Flatten github-linguist languages.yml into TSV.
# kind key name type color group
# kind is ext, filename, interpreter, or lang.

BEGIN {
	OFS = "\t"
}

function trim(s) {
	sub(/^[ \t]+/, "", s)
	sub(/[ \t]+$/, "", s)
	return s
}

function unquote(s) {
	s = trim(s)
	if (s ~ /^".*"$/) {
		s = substr(s, 2, length(s) - 2)
		gsub(/\\"/, "\"", s)
	}
	return s
}

function emit_lang() {
	if (name == "")
		return
	g = (group != "") ? group : name
	c = (color != "") ? color : ""
	t = (typ != "") ? typ : "data"
	print "lang", name, name, t, c, g
}

function emit(kind, key) {
	if (name == "" || key == "")
		return
	g = (group != "") ? group : name
	c = (color != "") ? color : ""
	t = (typ != "") ? typ : "data"
	print kind, key, name, t, c, g
}

/^---$/ { next }
/^#/ { next }
/^$/ { next }

/^[^ \t]/ {
	if ($0 ~ /:$/) {
		emit_lang()
		name = $0
		sub(/:$/, "", name)
		typ = ""
		color = ""
		group = ""
		section = ""
	}
	next
}

/^[ \t]+[a-z_]+:/ {
	key = trim($1)
	sub(/:$/, "", key)
	rest = $0
	sub(/^[ \t]+[a-z_]+:[ \t]*/, "", rest)
	rest = trim(rest)
	if (key == "type")
		typ = unquote(rest)
	else if (key == "color")
		color = unquote(rest)
	else if (key == "group")
		group = unquote(rest)
	if (key == "extensions")
		section = "ext"
	else if (key == "filenames")
		section = "filename"
	else if (key == "interpreters")
		section = "interpreter"
	else
		section = ""
	next
}

/^[ \t]+- / {
	item = $0
	sub(/^[ \t]+- [ \t]*/, "", item)
	item = unquote(item)
	if (section != "" && item != "")
		emit(section, item)
	next
}

END {
	emit_lang()
}