/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



interface Annotation : _Annotation
[
	uuid = "CA0C4280-293D-11D1-89CB-008029E4B0B1"
]
{

    SID_THESAURUS // api:
	[
		ExecMethod = ExecLingu ;
		StateMethod = GetLinguState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

    SID_HANGUL_HANJA_CONVERSION  // api:
    [
        ExecMethod = ExecLingu ;
        StateMethod = GetLinguState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_CHINESE_CONVERSION  // api:
    [
        ExecMethod = ExecLingu ;
        StateMethod = GetLinguState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

	SID_STYLE_CATALOG  // ole(no) api(play/rec)
	[
		StateMethod = StateDisableItems ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TWAIN_SELECT
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_TWAIN_TRANSFER
	[
		StateMethod = StateDisableItems ;
	]
	
	 SID_INSERT_GRAPHIC
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_AUTOSPELL_CHECK
	[
		ExecMethod = Exec;
		StateMethod = GetState;
	]

	SID_HYPERLINK_SETLINK  // status()
	[
		ExecMethod = Exec ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_HYPERLINK_GETLINK // status()
	[
		StateMethod = StateInsert ;
	]

    FN_INSERT_SOFT_HYPHEN // status(final|play)
    [
        ExecMethod = Exec ;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    FN_INSERT_HARDHYPHEN // status()
    [
        ExecMethod = Exec ;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    FN_INSERT_HARD_SPACE // status(final|play)
    [
        ExecMethod = Exec ;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_INSERT_RLM
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_INSERT_LRM
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_INSERT_ZWSP
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_INSERT_ZWNBSP
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_ATTR_PARA_LEFT_TO_RIGHT
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_ATTR_PARA_RIGHT_TO_LEFT
    [
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_TEXTDIRECTION_LEFT_TO_RIGHT
	[
		ExecMethod = Exec ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TEXTDIRECTION_TOP_TO_BOTTOM
	[
		ExecMethod = Exec ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_VERTICALTEXT_STATE
	[
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_CTLFONT_STATE
    [
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_TRANSLITERATE_SENTENCE_CASE
    [
        ExecMethod = ExecTransliteration;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_TRANSLITERATE_TITLE_CASE
    [
        ExecMethod = ExecTransliteration;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
    SID_TRANSLITERATE_TOGGLE_CASE
    [
        ExecMethod = ExecTransliteration;
        StateMethod = NoState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]
    
	SID_TRANSLITERATE_UPPER
	[
		ExecMethod = ExecTransliteration;
		StateMethod = NoState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TRANSLITERATE_LOWER
	[
		ExecMethod = ExecTransliteration;
		StateMethod = NoState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TRANSLITERATE_HALFWIDTH
	[
		ExecMethod = ExecTransliteration;
        StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TRANSLITERATE_FULLWIDTH
	[
		ExecMethod = ExecTransliteration;
        StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TRANSLITERATE_HIRAGANA
	[
		ExecMethod = ExecTransliteration;
        StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TRANSLITERATE_KATAGANA
	[
		ExecMethod = ExecTransliteration;
        StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_ATTR_CHAR_WORDLINEMODE // status(final|play)
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_ATTR_CHAR_RELIEF
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_ATTR_CHAR_LANGUAGE // status(final|play)
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_ATTR_CHAR_KERNING // status(final|play)
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
    SID_ATTR_CHAR_AUTOKERN // // status(final|play)
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;	
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_ATTR_CHAR_ESCAPEMENT // status(final|play)
	[
        ExecMethod = Exec ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

    SID_ATTR_CHAR_SCALEWIDTH // status()
	[
		ExecMethod = Exec ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_STYLE_FAMILY1
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_STYLE_FAMILY2
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_STYLE_FAMILY3
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_STYLE_FAMILY4
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_STYLE_FAMILY5
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_WATERCAN // status()
	[
		StateMethod = StateDisableItems ;
	]
	
	SID_STYLE_UPDATE_BY_EXAMPLE // status()
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_NEW_BY_EXAMPLE // status(fina|play)
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_APPLY // status(fina|play)
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_NEW // ole : no, status : ?
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_EDIT // ole : no, status : ?
	[
		StateMethod = StateDisableItems ;
	]

	SID_STYLE_DELETE // ole : no, status : ?
	[
		StateMethod = StateDisableItems ;
	]
	FN_STAT_SELMODE
	[
		StateMethod = StateStatusLine ;
	]
	
	FN_STAT_TEMPLATE
	[
		StateMethod = StateStatusLine ;
	]
	
	SID_LANGUAGE_STATUS
	[
		ExecMethod = ExecLingu ;
		StateMethod = GetLinguState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

    SID_THES
    [
        ExecMethod = ExecLingu ;
        StateMethod = GetLinguState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";  // e.g. disable for read-only documents
    ]

}

shell SwAnnotationShell
{
	import Annotation[Automation];
}
