From a20612b0a8325c2abdbec29fb1f202907d1558e0 Mon Sep 17 00:00:00 2001 From: Quietust Date: Sat, 16 Jul 2022 10:17:46 -0600 Subject: [PATCH 1/7] Update structures --- library/xml | 2 +- plugins/strangemood.cpp | 214 ++++++++-------------------------------- 2 files changed, 43 insertions(+), 173 deletions(-) diff --git a/library/xml b/library/xml index 219676497..df19b880f 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 2196764977011991127244b28ff13b90cef19af3 +Subproject commit df19b880fb3cbaa1a31a12b058acf9936d7ddada diff --git a/plugins/strangemood.cpp b/plugins/strangemood.cpp index 5050b3621..de7fa426d 100644 --- a/plugins/strangemood.cpp +++ b/plugins/strangemood.cpp @@ -153,145 +153,40 @@ void selectWord (const df::language_word_table &table, int32_t &word, df::part_o } } -void generateName(df::language_name &output, int language, df::language_name_type mode, const df::language_word_table &table1, const df::language_word_table &table2) +void generateName(df::language_name &output, int language, const df::language_word_table &table1, const df::language_word_table &table2) { for (int i = 0; i < 100; i++) { - if (mode != 8 && mode != 9) - { - output = df::language_name(); - if (language == -1) - language = rng.df_trandom(world->raws.language.translations.size()); - output.type = mode; - output.language = language; - } + output = df::language_name(); + if (language == -1) + language = rng.df_trandom(world->raws.language.translations.size()); + output.type = language_name_type::Artifact; + output.language = language; output.has_name = 1; if (output.language == -1) output.language = rng.df_trandom(world->raws.language.translations.size()); int r, r2, r3; - switch (mode) + r = rng.df_trandom(3); + if (r == 0 || r == 1) { - case language_name_type::Figure: - case language_name_type::FigureNoFirst: - case language_name_type::FigureFirstOnly: - if (mode != 9) - { - int32_t word; df::part_of_speech part; - output.first_name.clear(); - selectWord(table1, word, part, 2); - if (word >= 0 && size_t(word) < world->raws.language.words.size()) - output.first_name = *world->raws.language.translations[language]->words[word]; - } - if (mode != 10) - { - case language_name_type::Site: - case language_name_type::Monument: - if (rng.df_trandom(2)) - { - selectWord(table2, output.words[0], output.parts_of_speech[0], 0); - selectWord(table1, output.words[1], output.parts_of_speech[1], 1); - } - else - { - selectWord(table1, output.words[0], output.parts_of_speech[0], 0); - selectWord(table2, output.words[1], output.parts_of_speech[1], 1); - } - } - break; - - case language_name_type::Artifact: - case language_name_type::Unk13: - case language_name_type::River: - r = rng.df_trandom(3); - if (r == 0 || r == 1) - { - if (rng.df_trandom(2)) - { - selectWord(table2, output.words[0], output.parts_of_speech[0], 0); - selectWord(table1, output.words[1], output.parts_of_speech[1], 1); - } - else - { - selectWord(table1, output.words[0], output.parts_of_speech[0], 0); - selectWord(table2, output.words[1], output.parts_of_speech[1], 1); - } - } - if (r == 1 || r == 2) + if (rng.df_trandom(2)) { - case language_name_type::Squad: - case language_name_type::LegendaryFigure: - case language_name_type::ArtImage: // this is not a typo either - r2 = rng.df_trandom(2); - if (r2) - selectWord(table1, output.words[5], output.parts_of_speech[5], 2); - else - selectWord(table2, output.words[5], output.parts_of_speech[5], 2); - r3 = rng.df_trandom(3); - if (rng.df_trandom(50)) - r3 = rng.df_trandom(2); - switch (r3) - { - case 0: - case 2: - if (r3 == 2) - r2 = rng.df_trandom(2); - if (r2) - selectWord(table2, output.words[6], output.parts_of_speech[6], 5); - else - selectWord(table1, output.words[6], output.parts_of_speech[6], 5); - if (r3 == 0) - break; - r2 = -r2; - case 1: - if (r2) - selectWord(table1, output.words[2], output.parts_of_speech[2], 3); - else - selectWord(table2, output.words[2], output.parts_of_speech[2], 3); - if (!(rng.df_trandom(100))) - selectWord(table1, output.words[3], output.parts_of_speech[3], 3); - break; - } + selectWord(table2, output.words[0], output.parts_of_speech[0], 0); + selectWord(table1, output.words[1], output.parts_of_speech[1], 1); } - if (rng.df_trandom(100)) + else { - if (rng.df_trandom(2)) - selectWord(table1, output.words[4], output.parts_of_speech[4], 4); - else - selectWord(table2, output.words[4], output.parts_of_speech[4], 4); + selectWord(table1, output.words[0], output.parts_of_speech[0], 0); + selectWord(table2, output.words[1], output.parts_of_speech[1], 1); } - if ((mode == 3) && (output.parts_of_speech[5] == part_of_speech::Noun) && (output.words[5] != -1) && (world->raws.language.words[output.words[5]]->forms[1].length())) - output.parts_of_speech[5] = part_of_speech::NounPlural; - break; - - case language_name_type::Civilization: - case language_name_type::World: - case language_name_type::Region: - case language_name_type::AdventuringGroup: - case language_name_type::SiteGovernment: - case language_name_type::NomadicGroup: - case language_name_type::Vessel: - case language_name_type::MilitaryUnit: - case language_name_type::Religion: - case language_name_type::MountainPeak: - case language_name_type::Temple: - case language_name_type::Keep: - case language_name_type::MeadHall: - case language_name_type::Unk24: - case language_name_type::Unk25: - case language_name_type::Unk26: - case language_name_type::Market: - case language_name_type::Tavern: - case language_name_type::War: - case language_name_type::Battle: - case language_name_type::Siege: - case language_name_type::Road: - case language_name_type::Wall: - case language_name_type::Bridge: - case language_name_type::Tunnel: - case language_name_type::PretentiousEntityPosition: - case language_name_type::Tomb: - case language_name_type::OutcastGroup: - selectWord(table1, output.words[5], output.parts_of_speech[5], 2); + } + if (r == 1 || r == 2) + { + r2 = rng.df_trandom(2); + if (r2) + selectWord(table1, output.words[5], output.parts_of_speech[5], 2); + else + selectWord(table2, output.words[5], output.parts_of_speech[5], 2); r3 = rng.df_trandom(3); if (rng.df_trandom(50)) r3 = rng.df_trandom(2); @@ -299,56 +194,31 @@ void generateName(df::language_name &output, int language, df::language_name_typ { case 0: case 2: - selectWord(table2, output.words[6], output.parts_of_speech[6], 5); + if (r3 == 2) + r2 = rng.df_trandom(2); + if (r2) + selectWord(table2, output.words[6], output.parts_of_speech[6], 5); + else + selectWord(table1, output.words[6], output.parts_of_speech[6], 5); if (r3 == 0) break; + r2 = -r2; case 1: - selectWord(table2, output.words[2], output.parts_of_speech[2], 3); - if (!(rng.df_trandom(100))) - selectWord(table2, output.words[3], output.parts_of_speech[3], 3); - break; - } - if (rng.df_trandom(100)) - selectWord(table2, output.words[4], output.parts_of_speech[4], 4); - break; - - case language_name_type::Dungeon: - r = rng.df_trandom(3); - if (r == 0 || r == 1) - { - selectWord(table2, output.words[0], output.parts_of_speech[0], 0); - selectWord(table1, output.words[1], output.parts_of_speech[1], 1); - } - if (r == 1 || r == 2) - { - r2 = rng.df_trandom(2); - if (r == 2 || r2 == 1) - selectWord(table1, output.words[5], output.parts_of_speech[5], 2); + if (r2) + selectWord(table1, output.words[2], output.parts_of_speech[2], 3); else - selectWord(table2, output.words[5], output.parts_of_speech[5], 2); - r3 = rng.df_trandom(3); - if (rng.df_trandom(50)) - r3 = rng.df_trandom(2); - switch (r3) - { - case 0: - case 2: - selectWord(table1, output.words[6], output.parts_of_speech[6], 5); - if (r3 == 0) - break; - case 1: selectWord(table2, output.words[2], output.parts_of_speech[2], 3); - if (!(rng.df_trandom(100))) - selectWord(table2, output.words[3], output.parts_of_speech[3], 3); - break; - } + if (!(rng.df_trandom(100))) + selectWord(table1, output.words[3], output.parts_of_speech[3], 3); + break; } - if (rng.df_trandom(100)) + } + if (rng.df_trandom(100)) + { + if (rng.df_trandom(2)) + selectWord(table1, output.words[4], output.parts_of_speech[4], 4); + else selectWord(table2, output.words[4], output.parts_of_speech[4], 4); - break; - default: - // not handled yet - break; } if (output.words[2] != -1 && output.words[3] != -1 && world->raws.language.words[output.words[3]]->adj_dist < world->raws.language.words[output.words[2]]->adj_dist) @@ -1351,10 +1221,10 @@ command_result df_strangemood (color_ostream &out, vector & parameters) // Generate the artifact's name if (type == mood_type::Fell || type == mood_type::Macabre) - generateName(unit->status.artifact_name, unit->name.language, language_name_type::Artifact, world->raws.language.word_table[0][2], world->raws.language.word_table[1][2]); + generateName(unit->status.artifact_name, unit->name.language, world->raws.language.word_table[0][2], world->raws.language.word_table[1][2]); else { - generateName(unit->status.artifact_name, unit->name.language, language_name_type::Artifact, world->raws.language.word_table[0][1], world->raws.language.word_table[1][1]); + generateName(unit->status.artifact_name, unit->name.language, world->raws.language.word_table[0][1], world->raws.language.word_table[1][1]); if (!rng.df_trandom(100)) unit->status.artifact_name = unit->name; } From e5961b45b4ef0e3f236d17374c6a988584114e7f Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Tue, 19 Jul 2022 07:17:31 +0000 Subject: [PATCH 2/7] Auto-update submodules library/xml: master --- library/xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/xml b/library/xml index df19b880f..1595cc1fe 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit df19b880fb3cbaa1a31a12b058acf9936d7ddada +Subproject commit 1595cc1fe1f4662eebffdb4a77355491aafacea6 From c9f69081a64f6b27a7604bd605c20ad2338f5dce Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Wed, 20 Jul 2022 07:17:41 +0000 Subject: [PATCH 3/7] Auto-update submodules scripts: master --- scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts b/scripts index ef5fc459c..bd21e9664 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit ef5fc459c4f0a65a9fd709c14fed0c5892c9eebd +Subproject commit bd21e9664abf9963d5cf5f0f86222dd0dadda2c5 From 64b793b409fedb38e42367ac9b6ec1543e84d18e Mon Sep 17 00:00:00 2001 From: myk002 Date: Wed, 20 Jul 2022 15:40:49 -0700 Subject: [PATCH 4/7] support EditField:setText() so scripts can use it and be compatible with both the develop and docs branch --- library/lua/gui/widgets.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index 1a1b4c6fb..ddd5a01d0 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -207,6 +207,10 @@ function EditField:getPreferredFocusState() return not self.key end +function EditField:setText(text, cursor) + self.text = text +end + function EditField:postUpdateLayout() self.text_offset = self.subviews[1]:getTextWidth() end From 837215ea647b4decdfdb3f320088974d5a89a048 Mon Sep 17 00:00:00 2001 From: myk002 Date: Wed, 20 Jul 2022 16:28:11 -0700 Subject: [PATCH 5/7] modify ci/script-docs.py to read new doc locations --- ci/script-docs.py | 69 +++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/ci/script-docs.py b/ci/script-docs.py index 7ef287f8a..0106a8f70 100755 --- a/ci/script-docs.py +++ b/ci/script-docs.py @@ -1,12 +1,13 @@ #!/usr/bin/env python3 import os -from os.path import basename, dirname, join, splitext +from os.path import basename, dirname, exists, join, splitext import sys SCRIPT_PATH = sys.argv[1] if len(sys.argv) > 1 else 'scripts' +DOCS_PATH = join(SCRIPT_PATH, 'docs') IS_GITHUB_ACTIONS = bool(os.environ.get('GITHUB_ACTIONS')) -def expected_cmd(path): +def get_cmd(path): """Get the command from the name of a script.""" dname, fname = basename(dirname(path)), splitext(basename(path))[0] if dname in ('devel', 'fix', 'gui', 'modtools'): @@ -14,16 +15,6 @@ def expected_cmd(path): return fname -def check_ls(fname, line): - """Check length & existence of leading comment for "ls" builtin command.""" - line = line.strip() - comment = '--' if fname.endswith('.lua') else '#' - if '[====[' in line or not line.startswith(comment): - print_error('missing leading comment (requred for `ls`)', fname) - return 1 - return 0 - - def print_error(message, filename, line=None): if not isinstance(line, int): line = 1 @@ -32,48 +23,42 @@ def print_error(message, filename, line=None): print('::error file=%s,line=%i::%s' % (filename, line, message)) +def check_ls(docfile, lines): + """Check length & existence of first sentence for "ls" builtin command.""" + # TODO + return 0 + + def check_file(fname): - errors, doclines = 0, [] - tok1, tok2 = ('=begin', '=end') if fname.endswith('.rb') else \ - ('[====[', ']====]') - doc_start_line = None - with open(fname, errors='ignore') as f: + errors, doc_start_line = 0, None + docfile = join(DOCS_PATH, get_cmd(fname)+'.rst') + if not exists(docfile): + print_error('missing documentation file: {!r}'.format(docfile), fname) + return 1 + with open(docfile, errors='ignore') as f: lines = f.readlines() if not lines: - print_error('empty file', fname) + print_error('empty documentation file', docfile) return 1 - errors += check_ls(fname, lines[0]) for i, l in enumerate(lines): - if doclines or l.strip().endswith(tok1): - if not doclines: - doc_start_line = i + 1 - doclines.append(l.rstrip()) - if l.startswith(tok2): - break - else: - if doclines: - print_error('docs start but do not end', fname, doc_start_line) - else: - print_error('no documentation found', fname) - return 1 - - if not doclines: - print_error('missing or malformed documentation', fname) - return 1 + l = l.strip() + if l and not doc_start_line and doc_start_line != 0: + doc_start_line = i + doc_end_line = i + lines[i] = l - title, underline = [d for d in doclines - if d and '=begin' not in d and '[====[' not in d][:2] - title_line = doc_start_line + doclines.index(title) + errors += check_ls(docfile, lines) + title, underline = lines[doc_start_line:doc_start_line+2] expected_underline = '=' * len(title) if underline != expected_underline: print_error('title/underline mismatch: expected {!r}, got {!r}'.format( expected_underline, underline), - fname, title_line + 1) + docfile, doc_start_line+1) errors += 1 - if title != expected_cmd(fname): + if title != get_cmd(fname): print_error('expected script title {!r}, got {!r}'.format( - expected_cmd(fname), title), - fname, title_line) + get_cmd(fname), title), + docfile, doc_start_line) errors += 1 return errors From 2f50d161d932d9aa9c8bc8c017869e8eebd8ee1a Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Wed, 20 Jul 2022 23:31:20 +0000 Subject: [PATCH 6/7] Auto-update submodules library/xml: master scripts: master --- library/xml | 2 +- scripts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/xml b/library/xml index 1595cc1fe..a04727cc4 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 1595cc1fe1f4662eebffdb4a77355491aafacea6 +Subproject commit a04727cc4ec350399ce4d2ded4425f33c50cea50 diff --git a/scripts b/scripts index bd21e9664..6f5c7edc4 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit bd21e9664abf9963d5cf5f0f86222dd0dadda2c5 +Subproject commit 6f5c7edc49beec38c41ac8c3f0b5bded519ab5ce From 738611383b3a465ee420742e0d44faed1fbc9ae0 Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Wed, 20 Jul 2022 23:33:08 +0000 Subject: [PATCH 7/7] Auto-update submodules scripts: master --- scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts b/scripts index 6f5c7edc4..dbdfacd33 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 6f5c7edc49beec38c41ac8c3f0b5bded519ab5ce +Subproject commit dbdfacd33a213f081fbb1d6c85c11424ce3df234