/********************************************************************** Audacity: A Digital Audio Editor HelpText.cpp James Crook ********************************************************************//** \file HelpText.cpp \brief Given a key, returns some html. *//********************************************************************/ #include #include #include "Audacity.h" #include "HelpText.h" #include "FileNames.h" #include "AboutDialog.h" #include "AllThemeResources.h" wxString HtmlColourOfIndex( int i ){ wxColour c = theTheme.Colour(i); return wxString::Format("\"#%02X%02X%02X\"", c.Red(), c.Green(), c.Blue() ); } static wxString WrapText( const wxString & Text ) { return wxString(wxT(""))+ wxT("") + wxT("") + wxT("") + wxT("

") + Text + wxT("")+ wxT(""); } static wxString InnerLink( const wxString &Key, const wxString& Text ) { return wxString(wxT("")) + wxT("") + Text + wxT(""); } static wxString WikiLink( const wxString &Key, const wxString& Text ) { return wxString(wxT("")) + wxT("") + Text + wxT(""); } static wxString FileLink( const wxString &Key, const wxString& Text ) { return wxString(wxT("")) + wxT("") + Text + wxT(""); } static wxString TypedLink( const wxString &Key, const wxString& Text ) { return wxString(wxT("")) + wxT("") + Text + wxT(""); } static wxString LinkExpand( const wxString & Text ) { wxString Temp = Text; int i,j,k; while( (i=Temp.First( wxT("[[") ))!= wxNOT_FOUND ) { wxString Key = Temp.Mid(i+2); j = Key.First( wxT("|") ); if( j==wxNOT_FOUND ) return Temp; wxString LinkText = Key.Mid( j+1); k = LinkText.First( wxT("]]") ); if( k==wxNOT_FOUND ) return Temp; Key = Key.Mid( 0, j ); LinkText = LinkText.Mid( 0, k ); LinkText=wxString("") +LinkText+""; wxString Replacement; if( Key.StartsWith( wxT("wiki:") )) { Replacement = WikiLink( Key.Mid( 5 ), LinkText ); } else if( Key.StartsWith( wxT("file:") )) { Replacement = FileLink( Key.Mid( 5 ), LinkText ); } else if( Key.StartsWith( wxT("http:") )) { Replacement = TypedLink( Key, LinkText ); } else if( Key.StartsWith( wxT("https:") )) { Replacement = TypedLink( Key, LinkText ); } else if( Key.StartsWith( wxT("mailto:") )) { Replacement = TypedLink( Key, LinkText ); } else if( Key.StartsWith( wxT("*URL*") )) { Replacement = TypedLink( Key, LinkText ); } else { Replacement = InnerLink( Key, LinkText ); } Temp = Temp.Mid( 0, i ) + Replacement + Temp.Mid( i + j + k + 5 );// 5 for the [[|]] } return Temp; } wxString TitleText( const wxString & Key ) { if(Key==wxT("welcome")) { return _("Welcome!"); } if(Key ==wxT("play") ) { /* i18n-hint: Title for a topic.*/ return _("Playing Audio"); } if((Key ==wxT("record") ) || (Key ==wxT("norecord") )) { /* i18n-hint: Title for a topic.*/ return _("Recording Audio"); } if(Key ==wxT("inputdevice") ) { /* i18n-hint: Title for a topic.*/ return _("Recording - Choosing the Recording Device"); } if(Key ==wxT("inputsource") ) { /* i18n-hint: Title for a topic.*/ return _("Recording - Choosing the Recording Source"); } if(Key ==wxT("inputlevel") ) { /* i18n-hint: Title for a topic.*/ return _("Recording - Setting the Recording Level"); } if((Key ==wxT("edit") ) || (Key==wxT("grey"))) { /* i18n-hint: Title for a topic.*/ return _("Editing and greyed out Menus"); } if(Key ==wxT("export") ) { /* i18n-hint: Title for a topic.*/ return _("Exporting an Audio File"); } if(Key ==wxT("save") ) { /* i18n-hint: Title for a topic.*/ return _("Saving an Audacity Project"); } if(Key ==wxT("wma-proprietary") ) { /* i18n-hint: Title for a topic.*/ return _("Support for Other Formats"); } if(Key ==wxT("burncd") ) { /* i18n-hint: Title for a topic.*/ return _("Burn to CD" ); } if(Key == wxT("remotehelp") ) { return _("No Local Help"); } return Key; } namespace { // This is ugly transitional stuff for 2.2.0 only // The target string may have been localized but contains a link that we // need to change to fix remote help, while preserving the translated // material. // In future we should not put Wiki and HTML markup inside // internationalized strings! Descriptive text for the link should be // localized separately, then replaced using string formatting. wxString Substitute(wxString target, const wxString &given, const wxString &replacement) { target.Replace(given, replacement); return target; } } static wxString HelpTextBuiltIn( const wxString & Key ) { // PRL: Is it necessary to define these outside of conditional compilation so that both get into the .pot file? auto alphamsg = _("

The version of Audacity you are using is an Alpha test version."); auto betamsg = _("

The version of Audacity you are using is a Beta test version."); if (Key == wxT("welcome")) { /// TO-DO: Make the links to help here use the widgets/HelpSystem mechanism /// so that they are consistent /* i18n-hint: Preserve [[file:quick_help.html as it's the name of a file.*/ wxString result = wxString(wxT("")) + #if defined(IS_ALPHA) || defined(IS_BETA) wxT("


") + _("Get the Official Released Version of Audacity") + wxT("

") + VerCheckHtml() + #ifdef IS_ALPHA alphamsg #else betamsg #endif + " " + _("We strongly recommend that you use our latest stable released version, which has full documentation and support.

") + _("You can help us get Audacity ready for release by joining our [[http://www.audacityteam.org/community/|community]].


")+ #endif // DA: Support methods text. #ifdef EXPERIMENTAL_DA wxT("

DarkAudacity ") + AUDACITY_VERSION_STRING + wxT("

") + _("

DarkAudacity is based on Audacity:") + wxT("") + wxT("

Audacity has these support methods:") + wxT(""); #else wxT("

Audacity ") + AUDACITY_VERSION_STRING + wxT("

") + _("How to get help") + wxT("

") + _("These are our support methods:") + wxT("

") + wxT("") + _("More: Visit our [[http://wiki.audacityteam.org/index.php|Wiki]] for tips, tricks, extra tutorials and effects plug-ins.") + wxT("

"); #endif #ifdef USE_ALPHA_MANUAL result.Replace( "//manual.audacityteam.org/quick_help.html","//alphamanual.audacityteam.org/man/Quick_Help" ); result.Replace( "//manual.audacityteam.org/","//alphamanual.audacityteam.org/man/" ); #endif return WrapText( result ); } if(Key==wxT("wma-proprietary")) { return WrapText( wxString(wxT("

"))+ _("Audacity can import unprotected files in many other formats (such as M4A and WMA, \ compressed WAV files from portable recorders and audio from video files) if you download and install \ the optional [[http://manual.audacityteam.org/man/faq_opening_and_saving_files.html#foreign| \ FFmpeg library]] to your computer.") + wxT("

") + Substitute( _("You can also read our help on importing \ [[http://manual.audacityteam.org/man/faq_opening_and_saving_files.html#midi|MIDI files]] \ and tracks from [[http://manual.audacityteam.org/man/faq_opening_and_saving_files.html#fromcd| \ audio CDs]]."), wxT("faq_opening_and_saving_files.html#midi"), wxT("playing_and_recording.html#midi") ) + wxT("

") ); } // Remote help allows us to link to a local copy of the help if it exists, // or provide a message that takes you to the Internet if it does not. // It's used by the menu item Help > Index if(Key == wxT("remotehelp") ) { // *URL* will be replaced by whatever URL we are looking for. // DA: View the manual on line is expected. #ifdef EXPERIMENTAL_DA return WrapText(_("The Manual does not appear to be installed. \ Please [[*URL*|view the Manual online]].

\ To always view the Manual online, change \"Location of Manual\" in \ Interface Preferences to \"From Internet\".")); #else return WrapText(_("The Manual does not appear to be installed. \ Please [[*URL*|view the Manual online]] or \ [[http://manual.audacityteam.org/man/unzipping_the_manual.html| \ download the Manual]].

\ To always view the Manual online, change \"Location of Manual\" in \ Interface Preferences to \"From Internet\".")); #endif } return wxT(""); } wxString HelpText( const wxString & Key ) { // Possible future enhancement... // We could look for the text as a local file and use // that if we find it... // if( wxFileExists( Path+Key ) ) // ... wxString Text; Text = HelpTextBuiltIn( Key ); if( !Text.IsEmpty()) return LinkExpand( Text ); // Perhaps useful for debugging - we'll return key that we didn't find. return WrapText( Key ); } wxString FormatHtmlText( const wxString & Text ){ wxString localeStr = wxLocale::GetSystemEncodingName(); return wxT("") + WrapText( LinkExpand( Text ))+ wxT(""); }