Xmipp  v3.23.11-Nereus
Public Member Functions | Protected Attributes | List of all members
AutocompletePrinter Class Reference

#include <argsprinter.h>

Inheritance diagram for AutocompletePrinter:
Inheritance graph
[legend]
Collaboration diagram for AutocompletePrinter:
Collaboration graph
[legend]

Public Member Functions

 AutocompletePrinter (const char *scriptfile, bool programGui=false)
 
virtual ~AutocompletePrinter ()
 
virtual void printProgram (const ProgramDef &program, int v=0)
 
virtual void printSection (const SectionDef &section, int v=0)
 
virtual void printParam (const ParamDef &param, int v=0)
 
virtual void printArgument (const ArgumentDef &argument, int v=0)
 
virtual void printCommentList (const CommentList &comments, int v=0)
 
- Public Member Functions inherited from Printer
virtual ~Printer ()
 
virtual void printToken (ArgToken *token)
 

Protected Attributes

FILE * output
 

Detailed Description

Print out to create Protocol header script

Definition at line 103 of file argsprinter.h.

Constructor & Destructor Documentation

◆ AutocompletePrinter()

AutocompletePrinter::AutocompletePrinter ( const char *  scriptfile,
bool  programGui = false 
)

Constructor

Definition at line 496 of file argsprinter.cpp.

497 {
498  output = fopen(scriptfile, "a");
499  if (output == NULL)
500  REPORT_ERROR(ERR_IO, "Couldn't open file to write program autocomplete script");
501 }
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
Input/Output general error.
Definition: xmipp_error.h:134

◆ ~AutocompletePrinter()

AutocompletePrinter::~AutocompletePrinter ( )
virtual

Definition at line 503 of file argsprinter.cpp.

504 {
505  fclose(output);
506 }

Member Function Documentation

◆ printArgument()

void AutocompletePrinter::printArgument ( const ArgumentDef argument,
int  v = 0 
)
virtual

Implements Printer.

Definition at line 590 of file argsprinter.cpp.

591 {}

◆ printCommentList()

void AutocompletePrinter::printCommentList ( const CommentList comments,
int  v = 0 
)
virtual

Implements Printer.

Definition at line 593 of file argsprinter.cpp.

594 {}

◆ printParam()

void AutocompletePrinter::printParam ( const ParamDef param,
int  v = 0 
)
virtual

Implements Printer.

Definition at line 561 of file argsprinter.cpp.

562 {
563  String caseStr = param.name;
564  StringVector::const_iterator iter;
565 
566  for (iter = param.aliases.begin(); iter != param.aliases.end(); iter++)
567  caseStr += " | " + *iter;
568  fprintf(output, " %s)\n", caseStr.c_str());
569 
570  if (param.arguments.size())
571  {
572  ArgumentDef &arg = *(param.arguments[0]);
573  if (!arg.subParams.empty())
574  {
575  String where_opts = "";
576  for (size_t j = 0; j < arg.subParams.size(); ++j)
577  where_opts += arg.subParams[j]->name + " ";
578  fprintf(output, " local where_opts=\"%s\"\n", where_opts.c_str());
579  fprintf(output, " COMPREPLY=( $(compgen -W \"${where_opts}\" -- ${cur}) )\n");
580  fprintf(output, " return 0\n");
581  }
582  else if (isArgFile(arg.name))
583  fprintf(output, " return 0\n");
584  }
585  else
586  fprintf(output, " COMPREPLY=()\n");
587  fprintf(output, " ;;\n");
588 }
String name
Definition: argsparser.h:152
bool isArgFile(const String &argName)
glob_prnt iter
std::vector< ParamDef * > subParams
Definition: argsparser.h:175
std::vector< ArgumentDef * > arguments
Definition: argsparser.h:198
#define j
std::string String
Definition: xmipp_strings.h:34
fprintf(glob_prnt.io, "\)
StringVector aliases
Definition: argsparser.h:204

◆ printProgram()

void AutocompletePrinter::printProgram ( const ProgramDef program,
int  v = 0 
)
virtual

Implements Printer.

Definition at line 509 of file argsprinter.cpp.

510 {
511 
512  const char * progStr = program.name.c_str();
513  fprintf(output, "_%s()\n", progStr);
514  fprintf(output, "{ \n");
515  fprintf(output, "local cur prev opts base \n");
516  fprintf(output, "COMPREPLY=() \n");
517  fprintf(output, "cur=\"${COMP_WORDS[COMP_CWORD]}\" \n");
518  fprintf(output, "prev=\"${COMP_WORDS[COMP_CWORD-1]}\" \n");
519 
520  StringVector::const_iterator iter;
521  std::vector<SectionDef*>::const_iterator siter;
522  std::vector<ParamDef*>::const_iterator piter;
523 
524  String opts = "";
525  fprintf(output, "# Autocomplete options: \n");
526  fprintf(output, "case \"${prev}\" in\n");
527 
528  for (siter = program.sections.begin(); siter != program.sections.end(); siter++)
529  {
530  SectionDef &section = **siter;
531  if (section.visible < v)
532  {
533  for (piter = section.params.begin(); piter != section.params.end(); ++piter)
534  {
535  ParamDef &param = **piter;
536  opts += param.name + " ";
537  for (iter = param.aliases.begin(); iter != param.aliases.end(); iter++)
538  opts += *iter + " ";
539  printParam(param, v);
540  }
541  }
542  }
543 
544  fprintf(output, " *)\n ;;\nesac\n");
545 
546  fprintf(output, "# Options: \n");
547  fprintf(output, "opts=\"%s\" \n", opts.c_str());
548 
549  fprintf(output, "COMPREPLY=($(compgen -W \"${opts}\" -- ${cur}))\n");
550  fprintf(output, "return 0 \n");
551  fprintf(output, "} \n");
552 
553  fprintf(output, "complete -o bashdefault -o default -o filenames -F _%s %s \n",
554  progStr, progStr);
555 
556 }
virtual void printParam(const ParamDef &param, int v=0)
String name
Definition: argsparser.h:152
glob_prnt iter
std::vector< SectionDef * > sections
Definition: argsparser.h:241
int visible
Definition: argsparser.h:153
struct _parameter * param
std::vector< ParamDef * > params
All params defined for the program.
Definition: argsparser.h:224
std::string String
Definition: xmipp_strings.h:34
fprintf(glob_prnt.io, "\)
StringVector aliases
Definition: argsparser.h:204

◆ printSection()

void AutocompletePrinter::printSection ( const SectionDef section,
int  v = 0 
)
virtual

Implements Printer.

Definition at line 558 of file argsprinter.cpp.

559 {}

Member Data Documentation

◆ output

FILE* AutocompletePrinter::output
protected

Definition at line 106 of file argsprinter.h.


The documentation for this class was generated from the following files: