summaryrefslogtreecommitdiff
path: root/old/lipsum.~1~
blob: efa71b58d5e8d207895b53000ffa65e43dfd3c44 (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
88
89
90
#!/usr/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(word) {
	sub(/./, toupper(substr(word, 0, 1)), word)
	print word
}

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

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

function genword() {
	wc++ # There's gotta be a more efficient way of doing this
	return (wc > 5 || !litextout) ? word[randrange(0, dictlen)] : litext[wc - 1]
}

function genwords(words) {
	if (words > 0) {
		capitalize(genword())
		for (i = 1; i < words; i++)
			print " " genword()
		print "\n"
	}
}

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

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

BEGIN {
	dictionary = "/home/timmy/.local/share/lorem-ipsum-dictionary" # List of lorem ipsum words separated by newlines
	litext[0] = "lorem"; litext[1] = "ipsum"; litext[2] = "dolor"; litext[3] = "sit"; litext[4] = "amet"

	ORS = ""
	srand()

	for (dictlen = 0; getline < dictionary; dictlen++)
		word[dictlen] = $0

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

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