+
+const int EXTRA_SPACES = 5;
+
+string
+Long_option_init::table_string (Long_option_init *l)
+{
+ string tabstr = "";
+
+ size_t wid = 0;
+ for (int i = 0; l[i].shortname_char_ || l[i].longname_str0_; i++)
+ wid = max (wid, l[i].str_for_help ().length ());
+
+ for (int i = 0; l[i].shortname_char_ || l[i].longname_str0_; i++)
+ {
+ string s = " " + l[i].str_for_help ();
+ s += string (wid - s.length () + EXTRA_SPACES, ' ');
+
+ string help_text (gettext (l[i].help_str0_));
+ replace_all (&help_text, "\n",
+ "\n" + string (wid + EXTRA_SPACES + 2, ' '));
+ tabstr += s + help_text + "\n";
+ }
+
+ return tabstr;
+}
+
+int
+Long_option_init::compare (Long_option_init const &a, Long_option_init const &b)
+{
+ if (a.shortname_char_ && b.shortname_char_ && a.shortname_char_ - b.shortname_char_)
+ return a.shortname_char_ - b.shortname_char_;
+
+ if (b.shortname_char_ && a.longname_str0_)
+ {
+ char s[2] = {b.shortname_char_, 0};
+ return strcmp (a.longname_str0_, s);
+ }
+ if (a.shortname_char_ && b.longname_str0_)
+ {
+ char s[2] = {a.shortname_char_, 0};
+ return strcmp (s, b.longname_str0_);
+ }
+
+ return strcmp (a.longname_str0_, b.longname_str0_);
+}