/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



#include "optasian.hrc"
#include <sfx2/sfx.hrc>
#include "helpid.hrc"
#include <cuires.hrc>

TabPage RID_SVXPAGE_ASIAN_LAYOUT
{
	HelpId = HID_OPTIONS_ASIAN_LAYOUT ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	FixedLine GB_KERNING
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Kerning" ;
	};
	RadioButton RB_CHAR_KERNING
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ASIAN_LAYOUT:RB_CHAR_KERNING";
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 200, 10 ) ;
		Text [ en-US ] = "~Western characters only" ;
	};
	RadioButton RB_CHAR_PUNCT
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ASIAN_LAYOUT:RB_CHAR_PUNCT";
		Pos = MAP_APPFONT ( 12, 27 ) ;
		Size = MAP_APPFONT ( 200, 10 ) ;
		Text [ en-US ] = "Western ~text and Asian punctuation" ;
	};
	FixedLine GB_CHAR_DIST
	{
		Pos = MAP_APPFONT ( 6, 43 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Character spacing" ;
	};
	RadioButton RB_NO_COMP
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ASIAN_LAYOUT:RB_NO_COMP";
		Pos = MAP_APPFONT ( 12, 54 ) ;
		Size = MAP_APPFONT ( 200, 10 ) ;
		Text [ en-US ] = "~No compression" ;
	};
	RadioButton RB_PUNCT_COMP
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ASIAN_LAYOUT:RB_PUNCT_COMP";
		Pos = MAP_APPFONT ( 12, 67) ;
		Size = MAP_APPFONT ( 200, 10 ) ;
		Text [ en-US ] = "~Compress punctuation only" ;
	};
	RadioButton RB_PUNCT_KANA_COMP
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ASIAN_LAYOUT:RB_PUNCT_KANA_COMP";
		Pos = MAP_APPFONT ( 12, 80 ) ;
		Size = MAP_APPFONT ( 200, 10 ) ;
		Text [ en-US ] = "Compress ~punctuation and Japanese Kana" ;
	};
	FixedLine GB_START_END
	{
		Pos = MAP_APPFONT ( 6, 96 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "First and last characters" ;
	};
	FixedText FT_LANGUAGE
	{
		Pos = MAP_APPFONT ( 12, 109 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "~Language" ;
	};
	ListBox LB_LANGUAGE
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_ASIAN_LAYOUT:LB_LANGUAGE";
		Pos = MAP_APPFONT ( 95, 107 ) ;
		Size = MAP_APPFONT ( 80, 48 ) ;
		Border = TRUE ;
		DropDown = TRUE ;
	};
	CheckBox CB_STANDARD
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ASIAN_LAYOUT:CB_STANDARD";
		Pos = MAP_APPFONT ( 180, 109 ) ;
		Size = MAP_APPFONT ( 74, 10 ) ;
		Text [ en-US ] = "~Default" ;
	};
	FixedText FT_START
	{
		Pos = MAP_APPFONT ( 12, 125 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "Not at start of line:" ;
	};
	Edit ED_START
	{
		HelpID = "cui:Edit:RID_SVXPAGE_ASIAN_LAYOUT:ED_START";
		Pos = MAP_APPFONT ( 95, 123 ) ;
		Size = MAP_APPFONT ( 159, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_END
	{
		Pos = MAP_APPFONT ( 12, 141 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "Not at end of line:" ;
	};
	Edit ED_END
	{
		HelpID = "cui:Edit:RID_SVXPAGE_ASIAN_LAYOUT:ED_END";
		Pos = MAP_APPFONT ( 95, 139 ) ;
		Size = MAP_APPFONT ( 159, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_HINT
	{
		Pos = MAP_APPFONT ( 12, 155 ) ;
		Size = MAP_APPFONT ( 242, 8 ) ;
		Text [ en-US ] = "Without user-defined line break symbols" ;
	};
	Text [ en-US ] = "Proxy" ;
};

// ******************************************************************* EOF
