clienti18n.cc #1

  • //
  • guest/
  • perforce_software/
  • p4/
  • 2014-2/
  • client/
  • clienti18n.cc
  • View
  • Commits
  • Open Download .zip Download (3 KB)
/*
 * Copyright 1995, 1996 Perforce Software.  All rights reserved.
 *
 * This file is part of Perforce - the FAST SCM System.
 */

# include <stdhdrs.h>

# include <debug.h>
# include <strbuf.h>
# include <strdict.h>
# include <strtable.h>
# include <error.h>
# include <i18napi.h>
# include <charset.h>
# include <charcvt.h>
# include <transdict.h>
# include <options.h>
# include <handler.h>
# include <rpc.h>
# include <ident.h>
# include <enviro.h>

# include <filesys.h>

# include <msgclient.h>
# include <p4tags.h>

# include "clientuser.h"
# include "clientservice.h"
# include "clientmerge.h"
# include "client.h"
# include "regexp.h"

void
Client::SetTrans( int output,
		  int content,
		  int fnames,
		  int dialog )
{
	CharSetCvt *converter = NULL;

	// SetTrans called, don't do server mode discovery
	unknownUnicode = 0;

	if (dialog == -2)
	    dialog = output;
	if (content == -2)
	    content = output;
	if (fnames == -2)
	    fnames = content;

	// if we were already in unicode mode, take that down
	if( is_unicode )
	    CleanupTrans();

	// if all args are 0, disable translation
	if( !( output | content | fnames | dialog ) )
	{
	    content_charset = 0;
	    GlobalCharSet::Set( 0 );
	    return;
	}

	// we are in unicode mode now...
	is_unicode = 1;

	enviro->SetCharSet(output);
	content_charset = content;
	output_charset = output;
	GlobalCharSet::Set(fnames);
	// our concept of current directory could change at this point
	cwd = "";
	enviro->Config( GetCwd() );

	if (output != 0)
	{
	    converter = CharSetCvt::FindCvt( CharSetCvt::UTF_8,
				     (CharSetCvt::CharSet)output );
	    if (converter)
	    {
                    // TransDict will delete the converter
		translated = new TransDict( this, converter );
                if (fnames == output)
                    transfname = translated;
	    }
	}
	if( fnames != 0 && fnames != output )
	{
	    converter = CharSetCvt::FindCvt( CharSetCvt::UTF_8,
				     (CharSetCvt::CharSet)fnames );
	    if (converter)
	    {
                // TransDict will delete the converter
		transfname = new TransDict( this, converter );
 	    }
	}
	if ( dialog != 0 )
	{
	    fromTransDialog = CharSetCvt::FindCvt( CharSetCvt::UTF_8,
					 (CharSetCvt::CharSet)dialog );
	    if (fromTransDialog)
		toTransDialog = fromTransDialog->ReverseCvt();
	}
}

void
Client::CleanupTrans()
{
	if (transfname != this && transfname != translated)
	    delete transfname;
	if (translated != this)
	    delete translated;

	translated = this;
	transfname = this;

        delete fromTransDialog;
	delete toTransDialog;
	fromTransDialog = toTransDialog = NULL;

	is_unicode = 0;
	content_charset = 0;
	output_charset = 0;
 	enviro->SetCharSet( 0 );
}

int
Client::ContentCharset()
{
	// Content charset is overridden by server-provided charset if present

	StrPtr *charset = GetVar( P4Tag::v_charset );

	return charset ? charset->Atoi() : content_charset;
}

int
Client::GuessCharset()
{
        return CharSetApi::Discover(enviro);
}
# Change User Description Committed
#1 15903 Matt Attaway Everything should be happy now between the Workshop and the depot paths
//guest/perforce_software/p4/2014_2/client/clienti18n.cc
#1 15901 Matt Attaway Clean up code to fit modern Workshop naming standards
//guest/perforce_software/p4/2014.2/client/clienti18n.cc
#1 12189 Matt Attaway Initial (and much belated) drop of 2014.2 p4 source code