void TOpts::PrintCmdLine(const TStringBuf& program, IOutputStream& os, const NColorizer::TColors& colors) const { os << colors.BoldColor() << "Usage" << colors.OldColor() << ": " << program << " "; if (CustomCmdLineDescr) { os << CustomCmdLineDescr << Endl; return; } os << "[OPTIONS]"; for (ui32 i = 0; i < FreeArgsMin_; ++i) os << ' ' << GetFreeArgTitle(i); if (FreeArgsMax_ > FreeArgsMin_) { if (FreeArgsMax_ == Max<ui32>()) { // print all described args for (ui32 i = FreeArgsMin_; i < FreeArgSpecs_.size(); ++i) os << " [" << GetFreeArgTitle(i) << "]"; os << " [" << DefaultFreeArgSpec.Title << "]..."; } else { for (ui32 i = FreeArgsMin_; i < FreeArgsMax_; ++i) os << " [" << GetFreeArgTitle(i) << "]"; } } os << Endl; }
void TOpts::PrintFreeArgsDesc(IOutputStream& os, const NColorizer::TColors& colors) const { if (0 == FreeArgsMax_) return; size_t leftFreeWidth = 0; for (size_t i = 0; i < FreeArgSpecs_.size(); ++i) { leftFreeWidth = Max(leftFreeWidth, GetFreeArgTitle(i).size()); } if (CustomDefaultArg_) { leftFreeWidth = Max(leftFreeWidth, DefaultFreeArgSpec.Title.size()); } leftFreeWidth = Min(leftFreeWidth, size_t(30)); os << Endl << colors.BoldColor() << "Free args"<< colors.OldColor() <<":"; os << " min: " << colors.GreenColor() << FreeArgsMin_ << colors.OldColor() << ","; os << " max: " << colors.GreenColor(); if (FreeArgsMax_ != Max<ui32>()) { os << FreeArgsMax_; } else { os << "unlimited"; } os << colors.OldColor(); os << " (listed described args only)" << Endl; const size_t limit = FreeArgSpecs_.empty() ? 0 : FreeArgSpecs_.rbegin()->first; for (size_t i = 0; i <= limit; ++i) { const TString& help = GetFreeArgHelp(i); os << " " << colors.GreenColor() << RightPad(GetFreeArgTitle(i), leftFreeWidth, ' ') << colors.OldColor(); if (!help.Empty()) os << " " << help; os << Endl; } if (CustomDefaultArg_) { os << " " << colors.GreenColor() << RightPad(DefaultFreeArgSpec.Title, leftFreeWidth, ' ') << colors.OldColor(); os << " " << (!DefaultFreeArgSpec.Help ? DefaultHelp : DefaultFreeArgSpec.Help); os << Endl; } }
void TOpts::PrintFreeArgsDesc(TOutputStream& os) const { if (0 == FreeArgsMax_) return; size_t leftFreeWidth = 0; for (size_t i = 0; i < FreeArgSpecs_.size(); ++i) { leftFreeWidth = Max(leftFreeWidth, GetFreeArgTitle(i).size()); } if (CustomDefaultArg_) { leftFreeWidth = Max(leftFreeWidth, DefaultArgTitle_.size()); } leftFreeWidth = Min(leftFreeWidth, size_t(30)); os << Endl << "Free args:"; os << " min: " << FreeArgsMin_ << ","; os << " max: "; if (FreeArgsMax_ != Max<ui32>()) { os << FreeArgsMax_; } else { os << "unlimited"; } os << " (listed described args only)" << Endl; for (size_t i = 0; i < FreeArgSpecs_.size(); ++i) { const Stroka& help = GetFreeArgHelp(i); os << " " << RightPad(GetFreeArgTitle(i), leftFreeWidth, ' '); if (!help.Empty()) os << " " << help; os << Endl; } if (CustomDefaultArg_) { os << " " << RightPad(DefaultArgTitle_, leftFreeWidth, ' '); if (!DefaultArgHelp_.Empty()) os << " " << (!DefaultArgHelp_ ? DefaultHelp : DefaultArgHelp_); os << Endl; } }
void TOpts::PrintCmdLine(const TStringBuf& program, TOutputStream& os) const { os << "Usage: " << program << " [OPTIONS]"; for (ui32 i = 0; i < FreeArgsMin_; ++i) os << ' ' << GetFreeArgTitle(i); if (FreeArgsMax_ > FreeArgsMin_) { if (FreeArgsMax_ == Max<ui32>()) { // print all described args for (ui32 i = FreeArgsMin_; i < FreeArgSpecs_.size(); ++i) os << " [" << GetFreeArgTitle(i) << "]"; os << " [" << DefaultArgTitle_ << "]..."; } else { for (ui32 i = FreeArgsMin_; i < FreeArgsMax_; ++i) os << " [" << GetFreeArgTitle(i) << "]"; } } os << Endl; }