/**********************************************************************
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("- ") +
_(" [[http://www.darkaudacity.com|www.darkaudacity.com]] - for differences between them.") + wxT("
- ") +
_(" email to [[mailto:james@audacityteam.org|james@audacityteam.org]] - for help using DarkAudacity.") + wxT("
- ") +
_(" [[http://www.darkaudacity.com/video.html|Tutorials]] - for getting started with DarkAudacity.") + wxT("
") +
wxT("
Audacity has these support methods:") + wxT("- ") +
wxT(" [[https://manual.audacityteam.org/|Manual]] - for comprehensive Audacity documentation") + wxT("
- ") +
wxT(" [[https://forum.audacityteam.org/|Forum]] - for large knowledge base on using Audacity.") + wxT("
");
#else
wxT("Audacity ") + AUDACITY_VERSION_STRING + wxT("
") +
_("How to get help") + wxT("
") +
_("These are our support methods:") + wxT("- ") +
_(" [[file:quick_help.html|Quick Help]] - if not installed locally, [[http://manual.audacityteam.org/quick_help.html|view online]]") + wxT("
- ") +
_(" [[file:index.html|Manual]] - if not installed locally, [[http://manual.audacityteam.org/|view online]]") + wxT("
- ") +
_(" [[http://forum.audacityteam.org/|Forum]] - ask your question directly, online.") + 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("");
}