Codebase list mozc / debian/1.6.1187.102-1 dictionary / user_dictionary_storage.proto
debian/1.6.1187.102-1

Tree @debian/1.6.1187.102-1 (Download .tar.gz)

user_dictionary_storage.proto @debian/1.6.1187.102-1raw · history · blame

// Copyright 2010-2012, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

syntax = "proto2";

package mozc.user_dictionary;


message UserDictionary {
  enum PosType {
    NOUN = 1;  // "名詞"
    ABBREVIATION = 2;  // "短縮よみ"
    SUGGESTION_ONLY = 3;  // "サジェストのみ"
    PROPER_NOUN = 4;  // "固有名詞"
    PERSONAL_NAME = 5;  // "人名"
    FAMILY_NAME = 6;  // "姓"
    FIRST_NAME = 7;  // "名"
    ORGANIZATION_NAME = 8;  // "組織"
    PLACE_NAME = 9;  // "地名"
    SA_IRREGULAR_CONJUGATION_NOUN = 10;  // "名詞サ変"
    ADJECTIVE_VERBAL_NOUN = 11;  // "名詞形動"
    NUMBER = 12;  // "数字"
    ALPHABET = 13;  // "アルファベット"
    SYMBOL = 14;  // "記号"
    EMOTICON = 15;  // "顔文字"

    ADVERB = 16;  // "副詞"
    PRENOUN_ADJECTIVAL = 17;  // "連体詞"
    CONJUNCTION = 18;  // "接続詞"
    INTERJECTION = 19;  // "感動詞"

    PREFIX = 20;  // "接頭語"
    COUNTER_SUFFIX = 21;  // "助数詞"
    GENERIC_SUFFIX = 22;  // "接尾一般"
    PERSON_NAME_SUFFIX = 23;  // "接尾人名"
    PLACE_NAME_SUFFIX = 24;  // "接尾地名"

    WA_GROUP1_VERB = 25;  // "動詞ワ行五段"
    KA_GROUP1_VERB = 26;  // "動詞カ行五段"
    SA_GROUP1_VERB = 27;  // "動詞サ行五段"
    TA_GROUP1_VERB = 28;  // "動詞タ行五段"
    NA_GROUP1_VERB = 29;  // "動詞ナ行五段"
    MA_GROUP1_VERB = 30;  // "動詞マ行五段"
    RA_GROUP1_VERB = 31;  // "動詞ラ行五段"
    GA_GROUP1_VERB = 32;  // "動詞ガ行五段"
    BA_GROUP1_VERB = 33;  // "動詞バ行五段"
    HA_GROUP1_VERB = 34;  // "動詞ハ行四段"
    GROUP2_VERB = 35;  // "動詞一段"
    KURU_GROUP3_VERB = 36;  // "動詞カ変"
    SURU_GROUP3_VERB = 37;  // "動詞サ変"
    ZURU_GROUP3_VERB = 38;  // "動詞ザ変"
    RU_GROUP3_VERB = 39;  // "動詞ラ変"

    ADJECTIVE = 40;  // "形容詞"
    SENTENCE_ENDING_PARTICLE = 41;  // "終助詞"
    PUNCTUATION = 42;  // "句読点"
    FREE_STANDING_WORD = 43;  // "独立語"

    SUPPRESSION_WORD = 44;  // "抑制単語"
  };

  // ID of this dictionary
  optional uint64 id = 1 [ default = 0 ];

  // set false if this dictionary is not used.
  // Even if |enabled| is false, the dictionary
  // it self is visible to user.
  optional bool enabled = 2 [ default = true ];

  // name of dictionary
  optional string name = 3 [ default = "" ];

  // entry of each word
  message Entry {
    optional string key     = 1 [ default = "" ];
    optional string value   = 2 [ default = "" ];
    // Do NOT use tag number '3' in this proto. Please see below.
    optional string comment = 4 [ default = "" ];

    // Historically we used to use tag number '3' for POS in string format.
    // In order to switch it to enum based POS, we removed (deprecated) the
    // tag number '3' field and created another field numbered '5'.
    optional PosType pos    = 5;

    // set true if this entry is removed.
    // This flag is used for cloud sync feature.
    optional bool  removed  = 10 [ default = false ];

    // set true if this entry is automatically registered
    // by converter.
    optional bool auto_registered = 11 [ default = false ];
  };

  repeated Entry entries = 4;

  // set true if this dictionary is removed.
  // This flag is used for cloud sync feature.
  optional bool removed = 5 [ default = false ];

  // This flag is used for cloud sync feature.
  optional bool syncable = 6 [ default = false ];
};

message UserDictionaryStorage {
  // version of user dictionary
  optional int32 version = 1 [ default = 0 ];

  // dictionary body
  repeated UserDictionary dictionaries = 2;

  enum StorageType {
    SNAPSHOT = 1;   // This storage is a snapshot.
    UPDATE = 2;     // This storage is a diff of some snapshots.
  };

  optional StorageType storage_type = 10 [ default = SNAPSHOT ];
};

message UserDictionaryCommand {
  enum CommandType {
    // Does nothing.
    NO_OPERATION = 0;

    // Unlink the user dictionary file if necessary.
    // We can do this operation without creating a session.
    // This operation is introduced as a last resort to clean up
    // user dictionary, so it *forces* to unlink the file regardless
    // of the current user dictionary session status.
    CLEAR_STORAGE = 1;

    // Creates a new session, and returns its id via
    // UserDictionaryCommandStatus::session_id.
    CREATE_SESSION = 2;

    // Deletes the session identified by session_id.
    DELETE_SESSION = 3;

    // Sets the default dictionary name. It will be used when
    // ensure_non_empty_storage is enabled and the operation supporting the
    // flag is invoked.
    SET_DEFAULT_DICTIONARY_NAME = 4;

    // Checks if the session is currently undoable or not.
    CHECK_UNDOABILITY = 5;

    // Undoes the last operation.
    UNDO = 6;

    // Loads from local storage.
    LOAD = 7;

    // Saves to local storage.
    SAVE = 8;

    // Returns a list of name and dictionary-id pairs.
    // They are filled in the form of UserDictionary without any entries
    // in UserDictionaryCommandStatus::storage.
    GET_USER_DICTIONARY_NAME_LIST = 9;

    // Returns the number of entries in the dictionary with the
    // given dictionary_id.
    GET_ENTRY_SIZE = 10;

    // Returns an entry in the dictionary specified by dictionary_id.
    // The position of the entry should be specified via entry_index(0).
    GET_ENTRY = 11;

    // Returns if it is possible to add new dictionary or not.
    // The result is returned by using status code.
    CHECK_NEW_DICTIONARY_AVAILABILITY = 12;

    // Creates a new dictionary with the dictionary_name.
    CREATE_DICTIONARY = 13;

    // Deletes the dictionary with the given dictionary_id.
    DELETE_DICTIONARY = 14;

    // Renames the dictionary with the given dictionary_id to dictionary_name.
    RENAME_DICTIONARY = 15;

    // Returns if it is possible to add new entry to the dictionary
    // with the given dictionary_id or not.
    CHECK_NEW_ENTRY_AVAILABILITY = 16;

    // Adds an entry to the dictionary with the given dictionary_id.
    // Added entry should be located at the end of the dictionary, and
    // the data should be passed via entry field.
    ADD_ENTRY = 17;

    // Edits an entry in the dictionary with the given dictionary_id.
    // The new data should be passed via entry.
    // The edit target should be specified via entry_index(0).
    EDIT_ENTRY = 18;

    // Deletes entries in the dictionary with the given dictionary_id.
    // The target entries should be specified based on index in entry_index.
    DELETE_ENTRY = 19;

    // Imports entries from the given data into a dictionary.
    // There are two ways to specify the dictionary:
    // 1) set dictionary_id for the dictionary
    // 2) set dictionary_name to create a new dictionary with the name.
    IMPORT_DATA = 20;
  };

  required CommandType type = 1;
  optional uint64 session_id = 2;
  optional uint64 dictionary_id = 3;
  optional string dictionary_name = 4;
  repeated int32 entry_index = 5;
  optional UserDictionary.Entry entry = 6;
  optional string data = 7;
  optional bool ensure_non_empty_storage = 8;
};

message UserDictionaryCommandStatus {
  // Note: this status code is now temporary assgined.
  // It may be updated (incl. re-numbering) to organize the code.
  // I.e., the code shouldn't be saved in serialized format for now.
  // TODO(hidehiko): Re-organize and re-number the enum values,
  //   after we check all necessary codes in.
  enum Status {
    // Note: SUCCEEDED is conflicting Windows MACRO.
    USER_DICTIONARY_COMMAND_SUCCESS = 1;
    UNKNOWN_ERROR = 2;

    UNKNOWN_COMMAND = 3;
    INVALID_ARGUMENT = 4;

    UNKNOWN_SESSION_ID = 5;

    FILE_NOT_FOUND = 6;
    INVALID_FILE_FORMAT = 7;

    // Note: currently if we recieve this error status,
    // the file is actually saved.
    FILE_SIZE_LIMIT_EXCEEDED = 8;
    DICTIONARY_SIZE_LIMIT_EXCEEDED = 9;
    ENTRY_SIZE_LIMIT_EXCEEDED = 10;

    UNKNOWN_DICTIONARY_ID = 11;
    ENTRY_INDEX_OUT_OF_RANGE = 12;

    // Errors for dictionary names.
    DICTIONARY_NAME_EMPTY = 13;
    DICTIONARY_NAME_TOO_LONG = 14;
    DICTIONARY_NAME_CONTAINS_INVALID_CHARACTER = 15;
    DICTIONARY_NAME_DUPLICATED = 16;

    // Errors for entry data.
    READING_EMPTY = 17;
    READING_TOO_LONG = 18;
    READING_CONTAINS_INVALID_CHARACTER = 19;
    WORD_EMPTY = 20;
    WORD_TOO_LONG = 21;
    WORD_CONTAINS_INVALID_CHARACTER = 22;
    INVALID_POS_TYPE = 23;
    COMMENT_TOO_LONG = 24;
    COMMENT_CONTAINS_INVALID_CHARACTER = 25;

    // Errors for importing.
    IMPORT_TOO_MANY_WORDS = 26;
    IMPORT_INVALID_ENTRIES = 27;

    NO_UNDO_HISTORY = 28;
  };

  required Status status = 1;
  optional uint64 session_id = 2;
  optional UserDictionaryStorage storage = 3;
  optional UserDictionary.Entry entry = 4;
  optional uint64 dictionary_id = 5;
  optional uint32 entry_size = 6;
};