Search Toolkit Book for CTableImportDataSource
CTableImportDataSource -. More...
#include <gui/widgets/loaders/table_import_data_source.hpp>
This is a data source for tabular data being read in from a (possibly) CSV formatted file. The data is assumed to be divided up into fields based on some (initially unknowen) delimiter or to be divided into fixed-length fields. As the data is read in it ia anyalyzed and a guess is made as to the most likely delimiter (which may be no delimiter implying the data is fixed-field format).
The data source also holds an array of CTableImport columns which are created and set to default values initially to match the number of fields but then can be updated to specify the datatype of the underying table.
Definition at line 329 of file table_import_data_source.hpp.
◆ EFieldSeparatorType ◆ ETableFileTypePossible file types - allows special processing for table types that are not totally generic.
Enumerator eBlastResultsFile eUndefinedFileDefinition at line 340 of file table_import_data_source.hpp.
◆ CTableImportDataSource() CTableImportDataSource::CTableImportDataSource ( ) ◆ ClearTable() void CTableImportDataSource::ClearTable ( )clears all columns rows and delimiters
Definition at line 722 of file table_import_data_source.cpp.
References eDelimitedTable, m_ColumnHeaderRow, m_Columns, m_DelimRules, m_ImportFromRow, m_MaxRowLen, m_NumImportedRows, m_TableEntries, m_TableType, m_UseCurrentDelimiters, CTableDelimiterRules::Reset(), and SetCommentChar().
Referenced by LoadTable().
◆ ConvertToSeqAnnot() void CTableImportDataSource::ConvertToSeqAnnot ( CRef< CSeq_annot > annot_container )Save data in table into annot_container.
Definition at line 1962 of file table_import_data_source.cpp.
References CUser_object::AddField(), CSeq_annot::AddUserObject(), map_checker< Container >::begin(), column, data, CSeqTable_multi_data_Base::e_Id, CSeqTable_multi_data_Base::e_Int, CSeq_id_Base::e_Local, CSeqFeatData_Base::e_not_set, CSeqTable_multi_data_Base::e_Real, CSeqTable_multi_data_Base::e_String, CTableImportColumn::eChromosome, CTableImportColumn::eChromosomeNumber, CTableImportColumn::eDataRegion, CSeqTable_column_info_Base::eField_id_comment, CSeqTable_column_info_Base::eField_id_data_region, CSeqTable_column_info_Base::eField_id_id_local, CSeqTable_column_info_Base::eField_id_location_from, CSeqTable_column_info_Base::eField_id_location_gi, CSeqTable_column_info_Base::eField_id_location_id, CSeqTable_column_info_Base::eField_id_location_strand, CSeqTable_column_info_Base::eField_id_location_to, CTableImportColumn::eGeneName, CTableImportColumn::eGenotype, CTableImportColumn::eLength, CTableImportColumn::eLocalID, CTableImportColumn::eLocationGI, CTableImportColumn::eLocationID, ctll::empty(), map_checker< Container >::end(), CTableImportColumn::eNumberColumn, CTableImportColumn::eRealNumberColumn, ERR_POST, Error(), CTableImportColumn::eRsid, CTableImportColumn::eSeqIdColumn, CTableImportColumn::eSkippedColumn, CTableImportColumn::eSnpName, CTableImportColumn::eStartPosition, CTableImportColumn::eStopPosition, CTableImportColumn::eStrand, CTableImportColumn::eTextColumn, CTableImportColumn::eUnspecifiedID, CTableImportColumn::eUnspecifiedInt, CTableImportColumn::eUnspecifiedReal, CTableImportColumn::eUnspecifiedText, CTableImportColumn::eVariationName, f, NStr::fAllowCommas, NStr::fConvErr_NoThrow, CSeq_id_Base::GetGi(), CTableImportColumn::GetStringFromDataType(), GI_TO, i, int, label, m_Columns, m_FileName, m_ImportFromRow, m_NumImportedRows, m_TableEntries, NStr::NumericToString(), CException::ReportThis(), CRef< C, Locker >::Reset(), CSeq_annot_Base::SetData(), CSeq_annot_Base::SetDesc(), CSeqTable_column_info_Base::SetField_id(), CObject_id_Base::SetStr(), CSeqTable_column_info_Base::SetTitle(), CSeq_annot::SetTitleDesc(), CUser_object_Base::SetType(), NStr::StringToDouble(), NStr::StringToUInt8_DataSize(), table, NStr::TruncateSpacesInPlace(), and val.
Referenced by CTestApplication::LoadTable(), CAttribTableColumnIdPanel::OnApplyNoCloseClick(), ReadTabDelimitedTable(), CQualTableLoadManager::x_ConvertToSeqAnnot(), and CTableImportWizard::x_ConvertToSeqAnnot().
◆ ExportTableParms() void CTableImportDataSource::ExportTableParms ( CUser_object & user_object )Export table load parameters in ASN user-data format.
Definition at line 2376 of file table_import_data_source.cpp.
References CUser_object::AddField(), column, columns, CRef< C, Locker >::GetObject(), i, m_ColumnHeaderRow, m_Columns, m_CommentChar, m_DelimRules, m_FileType, m_ImportFromRow, m_TableType, m_UseCurrentDelimiters, CTableDelimiterRules::SaveAsn(), CUser_field_Base::SetData(), CUser_object_Base::SetData(), and CUser_field_Base::SetLabel().
Referenced by CTableXformPanel::OnSaveImportParmsClick().
◆ ExtractFixedFields() void CTableImportDataSource::ExtractFixedFields ( ) ◆ GetColumn() [1/2] ◆ GetColumn() [2/2]Return the specified column.
Definition at line 419 of file table_import_data_source.hpp.
References _ASSERT, and m_Columns.
Referenced by CTableColumnTypeGuesser::GuessColumns(), CAttribTableColumnIdPanel::IsInputValid(), CAttribTableColumnIdPanel::OnAddQualBtnSelected(), CAttribTableColumnIdPanel::OnAppendBtnSelected(), CAttribTableColumnIdPanel::OnColonBtnSelected(), CAttribTableColumnIdPanel::OnCommaBtnSelected(), CAttribTableColumnIdPanel::OnCtableImportListctrlColLeftClick(), CAttribTableColumnIdPanel::OnEraseExistingValueBtnSelected(), CTableImportListCtrl::OnGetItemText(), CAttribTableColumnIdPanel::OnIgnoreBlanksBtnSelected(), CAttribTableColumnIdPanel::OnIgnoreBtnSelected(), CAttribTableColumnIdPanel::OnMatchColumnClick(), CAttribTableColumnIdPanel::OnMatchTypeSelected(), CAttribTableColumnIdPanel::OnMergeIDColsClick(), CAttribTableColumnIdPanel::OnNodelimiterBtnSelected(), CAttribTableColumnIdPanel::OnPrefixBtnSelected(), CAttribTableColumnIdPanel::OnReplaceBtnSelected(), CAttribTableColumnIdPanel::OnSemicolonBtnSelected(), CAttribTableColumnIdPanel::OnSkipBtnSelected(), CAttribTableColumnIdPanel::OnSpaceBtnSelected(), CAttribTableColumnIdPanel::OnSplitFirstColClick(), CAttribTableDelimitersPanel::PreviewData(), CAttribTableDelimitersPanel::Show(), CAttribTableColumnIdPanel::UpdateCol(), CAttribTableColumnIdPanel::x_GuessQualifiers(), and CAttribTableColumnIdPanel::x_TableReaderMacro().
◆ GetColumnHeaderRow() int CTableImportDataSource::GetColumnHeaderRow ( ) const inline ◆ GetColumnName() string CTableImportDataSource::GetColumnName ( size_t col ) const inline ◆ GetColumns() [1/2]return the array of column data
Definition at line 425 of file table_import_data_source.hpp.
References m_Columns.
Referenced by CTableImportListCtrl::ColumnWidthsUpdated(), CTableImportListCtrl::DivideColumn(), CTableImportListCtrl::GetColumnImageID(), CTableColumnTypeGuesser::GuessColumn(), CTableColumnTypeGuesser::GuessColumns(), CAttribTableColumnIdPanel::IsInputValid(), CTestApplication::LoadTable(), CTableImportListCtrl::MergeColumns(), CTableColumnIdPanel::NeedsAssemblyMapping(), CTableColumnIdPanel::OnAssemblyChanged(), CTableColumnIdPanel::OnColumnNametxtTextUpdated(), CTableColumnIdPanel::OnCtableImportListctrlColLeftClick(), CTableColumnIdPanel::OnDataTypePropertySelected(), CAttribTableDelimitersPanel::OnListctrlColLeftClick(), CAttribTableColumnIdPanel::OnMatchColumnClick(), CAttribTableDelimitersPanel::OnMergeColsBtnClick(), CAttribTableColumnIdPanel::OnMergeIDColsClick(), CTableColumnIdPanel::OnNumberFmtBtnSelected(), CTableColumnIdPanel::OnOneBasedIntCheckClick(), CTableColumnIdPanel::OnRealNumberFormatBtnSelected(), CTableColumnIdPanel::OnSeqidFormatBtnSelected(), CTableColumnIdPanel::OnSkipBtnSelected(), CAttribTableDelimitersPanel::OnSplitColBtnClick(), CAttribTableColumnIdPanel::OnSplitFirstColClick(), CTableColumnIdPanel::OnTextFmtBtnSelected(), CAttribTableDelimitersPanel::PreviewData(), ReadTabDelimitedTable(), CTableColumnIdPanel::Show(), CAttribTableDelimitersPanel::Show(), CTableImportListCtrl::SynchDataSourceColumnWidths(), CTableImportListCtrl::UpdateColumnImages(), CTableImportListCtrl::UpdateColumnNames(), CTableImportListCtrl::UpdateColumnWidths(), CAttribTableColumnIdPanel::x_GuessQualifiers(), CTableColumnIdPanel::x_OnColumnTypeUpdate(), CAttribTableColumnIdPanel::x_TableReaderMacro(), and CTableColumnIdPanel::x_UpdateAssemblyPanel().
◆ GetColumns() [2/2] ◆ GetColumnWidth() int CTableImportDataSource::GetColumnWidth ( size_t col ) const inline ◆ GetCommentChar() char CTableImportDataSource::GetCommentChar ( ) const inline ◆ GetDelimiterRules() [1/2] ◆ GetDelimiterRules() [2/2] ◆ GetDelimiters() const vector<char>& CTableImportDataSource::GetDelimiters ( ) const inline ◆ GetField() string CTableImportDataSource::GetField ( size_t row, size_t col ) const ◆ GetFileName() wxString CTableImportDataSource::GetFileName ( void ) const inline ◆ GetFirstImportRow() int CTableImportDataSource::GetFirstImportRow ( ) const inline ◆ GetMaxNonImportedRowLength() size_t CTableImportDataSource::GetMaxNonImportedRowLength ( ) const inline ◆ GetMaxRowLength() size_t CTableImportDataSource::GetMaxRowLength ( ) const inline ◆ GetNumImportedRows() int CTableImportDataSource::GetNumImportedRows ( ) const inline ◆ GetNumRows() size_t CTableImportDataSource::GetNumRows ( void ) const inline ◆ GetRow() [1/2] ◆ GetRow() [2/2] ◆ GetTableType() ◆ ImportTableParms() void CTableImportDataSource::ImportTableParms ( CUser_object & user_object )Import table load parameters in ASN user-data format.
Definition at line 2408 of file table_import_data_source.cpp.
References columns, CUser_field_Base::GetData(), CUser_object::GetField(), GetField(), CUser_object::HasField(), i, CUser_field_Base::C_Data::IsBool(), CUser_field_Base::C_Data::IsInt(), CTableDelimiterRules::LoadAsn(), CTableImportColumn::LoadAsn(), m_ColumnHeaderRow, m_Columns, m_CommentChar, m_DelimRules, m_FileType, m_ImportFromRow, m_TableType, m_UseCurrentDelimiters, and CUser_object::SetField().
Referenced by LoadTable().
◆ LoadTable() [1/2]Definition at line 736 of file table_import_data_source.cpp.
References eDelimitedTable, ExtractFixedFields(), CFile::GetLength(), ImportTableParms(), CDirEntry::IsFile(), LOG_POST, m_DelimRules, m_TableType, m_UseCurrentDelimiters, NULL, and RecomputeFields().
Referenced by CTestApplication::LoadTable(), CAttribTableDelimitersPanel::PreviewData(), CTableFormatPanel::PreviewData(), and ReadTabDelimitedTable().
◆ LoadTable() [2/2]Loads the entire table from ifs and updates delimiter and column data based on delimiter guess.
Definition at line 772 of file table_import_data_source.cpp.
References CCharHistogram::AddInitialRows(), ClearTable(), eDelimitedTable, eFixedWidthTable, file, CCharHistogram::GetCharCount(), CCharHistogram::GetDelimiterProbablities(), CCharHistogram::GetMaxRowLen(), Info(), int, NStr::IsBlank(), ICanceled::IsCanceled(), LOG_POST, CTableDelimiterRules::LogDelims(), m_Columns, m_DelimRules, m_FileName, m_ImportFromRow, m_MaxNonImportedRowLength, m_MaxRowLen, m_TableEntries, m_TableType, max(), NcbiGetline(), NULL, RecomputeFields(), CTableDelimiterRules::Reset(), row, CTableDelimiterRules::SetDelimiters(), CTableDelimiterRules::SetMergeDelimiters(), CTableImportColumn::SetName(), CCharHistogram::UpdateHistogram(), x_FindHeaderRows(), and x_PickFileType().
◆ LogColumnInfo() void CTableImportDataSource::LogColumnInfo ( ) const ◆ LogFixedFieldWidths() void CTableImportDataSource::LogFixedFieldWidths ( ) const ◆ MergeColumns() void CTableImportDataSource::MergeColumns ( vector< size_t > col_indices, char ch, bool no_merge_char =false
)
Replace all delimiter characters separating cols in the array 'col_indices' with the delimiter char 'ch' to merge the cols.
Definition at line 1670 of file table_import_data_source.cpp.
References first(), CTableDelimiterRules::GetMultipleSpacesOnly(), i, m_ColumnHeaderRow, m_Columns, m_DelimRules, m_ImportFromRow, m_TableEntries, RecomputeFields(), row, ct::sort(), and str().
Referenced by CAttribTableDelimitersPanel::OnMergeColsBtnClick(), and CAttribTableColumnIdPanel::OnMergeIDColsClick().
◆ RecomputeFields() void CTableImportDataSource::RecomputeFields ( bool recreate_columns, int recompute_count =-1
)
Updated the individual rows and columns to match the current delimiter choice.
Requires parsing all the rows (otherwise you can't know how many columns there are or wide those columns should be).
Definition at line 1310 of file table_import_data_source.cpp.
References count, NStr::eMergeDelims, NStr::eNoMergeDelims, CTableDelimiterRules::GetDelimiters(), CTableDelimiterRules::GetMergeDelimiters(), CTableDelimiterRules::GetMultipleSpacesOnly(), CTableDelimiterRules::GetQuoteChar(), i, m_ColumnHeaderRow, m_Columns, m_DelimRules, m_ImportFromRow, m_MaxNonImportedRowLength, m_TableEntries, max(), RecomputeHeaders(), CTableImportColumn::SetName(), ncbi::grid::netcache::search::fields::size, x_ParseEntry(), x_ParseQuotedEntry(), and x_RecomputeRowFields().
Referenced by LoadTable(), MergeColumns(), CAttribTableDelimitersPanel::PreviewData(), ReadTabDelimitedTable(), ReplaceSpaces(), SetFirstImportRow(), SetHeaderAndFirstRow(), SetTableType(), SplitColumn(), CAttribTableDelimitersPanel::UpdateDelimiters(), and CTableDelimitersPanel::UpdateDelimiters().
◆ RecomputeHeaders() void CTableImportDataSource::RecomputeHeaders ( )Update columns to genereated names or names parsed from row m_ColumnHeaderRow.
Definition at line 1472 of file table_import_data_source.cpp.
References eDelimitedTable, NStr::eMergeDelims, NStr::eNoMergeDelims, CTableDelimiterRules::GetDelimiters(), CTableDelimiterRules::GetMergeDelimiters(), CTableDelimiterRules::GetMultipleSpacesOnly(), CTableDelimiterRules::GetQuoteChar(), i, len, m_ColumnHeaderRow, m_Columns, m_CommentChar, m_DelimRules, m_TableEntries, m_TableType, max(), min(), NStr::NumericToString(), ncbi::grid::netcache::search::fields::size, NStr::TruncateSpaces(), x_ParseEntry(), and x_ParseQuotedEntry().
Referenced by CTableImportListCtrl::DivideColumn(), ExtractFixedFields(), CTableFixedWidthPanel::OnCTableImportListctrlColDragging(), CTableFormatPanel::OnListCtrlSelected(), CTableFormatPanel::OnParseColumnNamesBtnClick(), RecomputeFields(), and SetCommentChar().
◆ RecomputeRowFields() void CTableImportDataSource::RecomputeRowFields ( size_t row_idx )Do same but only for 1 row.
Definition at line 1283 of file table_import_data_source.cpp.
References NStr::eMergeDelims, NStr::eNoMergeDelims, CTableDelimiterRules::GetDelimiters(), CTableDelimiterRules::GetMergeDelimiters(), CTableDelimiterRules::GetMultipleSpacesOnly(), CTableDelimiterRules::GetQuoteChar(), m_DelimRules, m_TableEntries, ncbi::grid::netcache::search::fields::size, and x_RecomputeRowFields().
Referenced by CAttribTableColumnIdPanel::IsInputValid(), and CAttribTableDelimitersPanel::OnDelimRowTextUpdated().
◆ ReplaceSpaces() bool CTableImportDataSource::ReplaceSpaces ( )Replace all instances of multiple spaces with the current delimiter.
Definition at line 1874 of file table_import_data_source.cpp.
References delimiter, NStr::Find(), CTableDelimiterRules::GetDelimiters(), CTableDelimiterRules::GetMultipleSpacesOnly(), i, m_ColumnHeaderRow, m_DelimRules, m_ImportFromRow, m_TableEntries, NPOS, RecomputeFields(), result, row, str(), and string.
Referenced by CAttribTableColumnIdPanel::OnMultispaceToTabBtnClick().
◆ SaveTable() ◆ SetColumnHeaderRow() void CTableImportDataSource::SetColumnHeaderRow ( int c ) ◆ SetCommentChar() void CTableImportDataSource::SetCommentChar ( char c )set/get comment character (lines beginning with this are not imported)
Definition at line 1635 of file table_import_data_source.cpp.
References count, Info(), LOG_POST, m_ColumnHeaderRow, m_CommentChar, m_ImportFromRow, m_MaxNonImportedRowLength, m_NumImportedRows, m_TableEntries, max(), and RecomputeHeaders().
Referenced by ClearTable(), CTableFormatPanel::OnCommentCharTxtCtrlTextUpdated(), SetColumnHeaderRow(), SetFirstImportRow(), SetHeaderAndFirstRow(), x_FindHeaderRows(), and x_PickFileType().
◆ SetFirstImportRow() void CTableImportDataSource::SetFirstImportRow ( int r ) ◆ SetHeaderAndFirstRow() void CTableImportDataSource::SetHeaderAndFirstRow ( int column_header_row, int first_row ) ◆ SetTableType() ◆ SplitColumn() bool CTableImportDataSource::SplitColumn ( size_t col_idx, char ch, bool split_on_whitespace =false
)
Split column col_idx into 2 columns using the character 'ch' (if 'ch' does not appear in the column, no split occurs)
Definition at line 1744 of file table_import_data_source.cpp.
References chars, delimiter, CTableDelimiterRules::GetDelimiters(), CTableDelimiterRules::GetMultipleSpacesOnly(), i, m_ColumnHeaderRow, m_Columns, m_DelimRules, m_ImportFromRow, m_TableEntries, RecomputeFields(), row, str(), and string.
Referenced by CAttribTableDelimitersPanel::OnSplitColBtnClick(), and CAttribTableColumnIdPanel::OnSplitFirstColClick().
◆ x_FindHeaderRows() ◆ x_ParseEntry() ◆ x_ParseQuotedEntry() ◆ x_PickFileType() bool CTableImportDataSource::x_PickFileType ( ) protectedAfter loading rows, this tests for any distinctive file types (which would allow delimiter and header information to be set correctly).
This does not check for all standard file types (see CFormatGuesser), just ones intended to be loaded via table import. Returns true if type is not eUndefinedFile.
Definition at line 970 of file table_import_data_source.cpp.
References eBlastResultsFile, eUndefinedFile, i, m_CommentChar, m_DelimRules, m_FileType, m_ImportFromRow, m_TableEntries, SetCommentChar(), CTableDelimiterRules::SetDelimiters(), and CTableDelimiterRules::SetMergeDelimiters().
Referenced by LoadTable().
◆ x_RecomputeRowFields()Recompute the fields for the provided row.
Definition at line 1217 of file table_import_data_source.cpp.
References CTableImportColumn::GetName(), CTableDelimiterRules::GetQuoteChar(), i, m_ColumnHeaderRow, m_Columns, m_CommentChar, m_DelimRules, m_TableEntries, max(), NStr::NumericToString(), row, CTableImportColumn::SetName(), CTableImportColumn::SetWidth(), x_ParseEntry(), and x_ParseQuotedEntry().
Referenced by RecomputeFields(), and RecomputeRowFields().
◆ m_ColumnHeaderRow int CTableImportDataSource::m_ColumnHeaderRow protectedIf != -1, parse selected row to get column names.
Definition at line 549 of file table_import_data_source.hpp.
Referenced by ClearTable(), ExportTableParms(), GetColumnHeaderRow(), ImportTableParms(), MergeColumns(), RecomputeFields(), RecomputeHeaders(), ReplaceSpaces(), SetColumnHeaderRow(), SetCommentChar(), SetHeaderAndFirstRow(), SplitColumn(), and x_RecomputeRowFields().
◆ m_ColumnsDescriptors for columns.
Definition at line 526 of file table_import_data_source.hpp.
Referenced by ClearTable(), ConvertToSeqAnnot(), ExportTableParms(), ExtractFixedFields(), GetColumn(), GetColumnName(), GetColumns(), GetColumnWidth(), ImportTableParms(), LoadTable(), LogColumnInfo(), LogFixedFieldWidths(), MergeColumns(), RecomputeFields(), RecomputeHeaders(), SetTableType(), SplitColumn(), and x_RecomputeRowFields().
◆ m_CommentChar char CTableImportDataSource::m_CommentChar protected ◆ m_DelimRulesFor character-delimited tables, the delimiter character(s), merge rule, and quote-handling option.
Definition at line 523 of file table_import_data_source.hpp.
Referenced by ClearTable(), ExportTableParms(), GetDelimiterRules(), GetDelimiters(), ImportTableParms(), LoadTable(), MergeColumns(), RecomputeFields(), RecomputeHeaders(), RecomputeRowFields(), ReplaceSpaces(), SplitColumn(), x_PickFileType(), and x_RecomputeRowFields().
◆ m_FileName wxString CTableImportDataSource::m_FileName protected ◆ m_FileType ◆ m_ImportFromRow int CTableImportDataSource::m_ImportFromRow protectedA generic mechanism to avoid loading comment or header column rows at the top of the file - a user-settable parameter which is the first row to load.
Definition at line 534 of file table_import_data_source.hpp.
Referenced by ClearTable(), ConvertToSeqAnnot(), ExportTableParms(), ExtractFixedFields(), GetFirstImportRow(), ImportTableParms(), LoadTable(), MergeColumns(), RecomputeFields(), ReplaceSpaces(), SetCommentChar(), SetFirstImportRow(), SetHeaderAndFirstRow(), SplitColumn(), x_FindHeaderRows(), and x_PickFileType().
◆ m_MaxNonImportedRowLength size_t CTableImportDataSource::m_MaxNonImportedRowLength protected ◆ m_MaxRowLen size_t CTableImportDataSource::m_MaxRowLen protected ◆ m_NumImportedRows int CTableImportDataSource::m_NumImportedRows protected ◆ m_TableEntriesHolds a string and field position and size for each line from the file.
Definition at line 529 of file table_import_data_source.hpp.
Referenced by ClearTable(), ConvertToSeqAnnot(), ExtractFixedFields(), GetField(), GetNumRows(), GetRow(), LoadTable(), MergeColumns(), RecomputeFields(), RecomputeHeaders(), RecomputeRowFields(), ReplaceSpaces(), SaveTable(), SetCommentChar(), SplitColumn(), x_FindHeaderRows(), x_PickFileType(), and x_RecomputeRowFields().
◆ m_TableType ◆ m_UseCurrentDelimiters bool CTableImportDataSource::m_UseCurrentDelimiters protectedThe documentation for this class was generated from the following files:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4