summaryrefslogtreecommitdiff
path: root/old/lipsum
blob: 7ae9b7e1ff289276098e385985c82e7689ffe7b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/awk -f

function printusage() {
	print "Usage: lipsum [# of] [w/words|s/sentences|p/paragraphs] [1/t/true|0/f/false output 'lorem ipsum' in first entry] [min words] [max words]\n"
	exit 1
}

function capitalize() {
	sub(/./, toupper(substr($0, 0, 1)))
}

function randrange(min, max) {
	return int((rand() * (max - min)) + min)
}

function isint(arg) {
	return arg ~ /^[0-9]+$/
}

function genwords(words, cmd) {
	if (words > 0 && cmd | getline) {
		capitalize(); print
		for (i = 1; cmd | getline && i < words; i++)
			print " "$0
		print "\n"
	}
}

function gensentences(sentences, delim, cmd, min, max) {
	for (; sentences > 0 && cmd | getline; sentences--) {
		capitalize(); print
		words = randrange(min, max) # Isn't possible to initialize or increment multiple variables in awk for loops
		for (i = 1; cmd | getline && i < words; i++)
			print (rand() < 0.10 ? ", " : " ")$0
		print delim
	}
}

function genparagraphs(paragraphs, cmd, min, max) {
	for (; paragraphs > 0; paragraphs--) {
		print "\t"
		gensentences(randrange(6, 10), ". ", cmd, min, max)
		print "\n"
	}
}

BEGIN {
	dictionary = "/home/timmy/.local/share/lorem-ipsum-dictionary" # List of lorem ipsum words separated by newlines
	cmd = "< "dictionary" shuf -r -n" # Command to generate random permutations of words from dictionary separated by newlines
	echolorem = "echo -n 'lorem\nipsum\ndolor\nsit\namet\n'"

	ORS = ""
	srand()

	# Parse Arguments
	!isint(ARGV[1]) && ARGV[1] && printusage()
	numof = ARGC > 1 ? ARGV[1] : 5
	mode = ARGC > 2 ? ARGV[2] : "p"
	litext = 1
	if (ARGV[3])
		switch (ARGV[3]) {
			case /^1$|^t$|^true$/: litext = 1; break
			case /^0$|^f$|^false$/: litext = 0; break
			default: printusage()
		}
	litext && cmd = echolorem "&&" cmd
	min = isint(ARGV[4]) ? ARGV[4] : 5
	max = isint(ARGV[5]) ? ARGV[5] : 12

	switch (mode) {
		case /^w$|^words$/:
			cmd = cmd numof
			genwords(numof, cmd)
			break
		case /^s$|^sentences$/:
			cmd = cmd (max * numof)
			gensentences(numof, ".\n", cmd, min, max)
			break
		case /^p$|^paragraphs$/:
			cmd = cmd (max * 10 * numof)
			genparagraphs(numof, cmd, min, max)
			break
		default:
			printusage()
	}
	close(cmd)
}