/// <summary>
        /// Add document locale files
        /// </summary>
        /// <param name="files">list of pathes in given locale</param>
        /// <param name="locale">locale of files</param>
        public void AddLocaleFileList(string[] files, LanguageUtil.ELanguage locale)
        {
            foreach (string file in files)
            {
                var sig = Path.GetFileNameWithoutExtension(file);
                Debug.Assert(sig != null, "sig != null");

                DocumentDataItem docItem = null;

                if (_hashtable.ContainsKey(sig))
                {
                    docItem = _hashtable[sig];
                    Debug.Assert(docItem.signature.Equals(sig));
                }
                else
                {
                    docItem = new DocumentDataItem
                    {
                        signature      = sig,
                        baseDocDirPath = baseDocDirPath
                    };
                    _hashtable.Add(sig, docItem);
                    _documentList.Add(docItem);
                }

                docItem.AddLocaleFile(file, locale);
            }
        }
示例#2
0
    public MemberSession(NewDataItemProject docProject, MemberItem member, LanguageUtil.ELanguage language)
    {
        DocProject = docProject;
        Language   = language;
        Member     = member;

        Load();
    }
示例#3
0
 /// <summary>
 /// Adding locale to this DocumentDataItem
 /// </summary>
 /// <param name="path">file path to locale obj</param>
 /// <param name="locale">locale to add</param>
 internal void AddLocaleFile(String path, LanguageUtil.ELanguage locale)
 {
     if (FileMap.ContainsKey(locale))
     {
         FileMap[locale] = path;
     }
     else
     {
         FileMap.Add(locale, path);
     }
 }
示例#4
0
        public MeaningfulBlock(IDataItem memberData, LanguageUtil.ELanguage language)
        {
            string           memberDoc = null;
            DocumentDataItem docItem   = memberData.GetDocumentDataItem();

            if (docItem != null)
            {
                memberDoc = docItem.LoadDocumentOfLocale(language);
            }

            Init(memberData.GetAssemblyDataItem(), memberDoc);
        }
        private static void CreateLocaleDirectory(String path, LanguageUtil.ELanguage locale)
        {
            var destinDir = DirectoryWithLangUtil.LocalizedDir(path, locale);

            try
            {
                //create a base dir based on language
                Directory.CreateDirectory(destinDir);
            }
            catch (DirectoryNotFoundException e)
            {
                Console.Out.WriteLine("createLocaleDirectory failed:{0}", e.Message);
                Console.Error.WriteLine("Could not create directory {0}", Path.GetFullPath(destinDir));
            }
        }
        private static string[] GetDocumentPathListOf(String path, LanguageUtil.ELanguage locale)
        {
            var destinDir = DirectoryWithLangUtil.LocalizedDir(path, locale);

            string[] sourceMemFiles = null;
            try
            {
                sourceMemFiles = Directory.GetFiles(destinDir);
            }
            catch (DirectoryNotFoundException)
            {
                Console.Error.WriteLine("Could not read from directory {0}. Please run DocDissector first!", path);
            }

            return(sourceMemFiles);
        }
示例#7
0
    public MemberSession(NewDataItemProject docProject, MemberItem member, string oldMemberText, LanguageUtil.ELanguage language)
    {
        DocProject = docProject;
        Language   = language;
        Member     = member;

        m_IsDummy  = true;
        DummyModel = member.LoadDoc(oldMemberText, Language, false, false);
        if (language == LanguageUtil.ELanguage.English)
        {
            Model.EnforcePunctuation();
        }
        Model.SanitizeForEditing();

        TextOrig    = Model.ToString();
        TextCurrent = TextOrig;
    }
示例#8
0
        public void ReloadAllProjectData(LanguageUtil.ELanguage language = LanguageUtil.ELanguage.English)
        {
            m_MapNameToItem.Clear();

            DateTime startTime         = DateTime.Now;
            DateTime originalStartTime = startTime;

            // Populate list from assembly
            LoadAsmModules();
            PrintElapsedTime("Loading ASM modules", ref startTime);

            PopulateFromAsm();
            PrintElapsedTime("Populating from ASM", ref startTime);
            // Populate list from member files - does not actually load the MemDocModels
            PopulateFromMem();
            PrintElapsedTime("PopulateFromMem", ref startTime);
            SearchAsmForPrivateApiMatchingOrphanDocs();
            PrintElapsedTime("SearchingOrphanDocs", ref startTime);
            // For each member, load MemDocModel from disc.
            // We do this for all members, even the ones we know don't have member files.
            // This way the state and flags for each member are initialized correctly.
            foreach (MemberItem member in m_MapNameToItem.Values)
            {
                try
                {
                    member.LoadDoc();
                    if (language != LanguageUtil.ELanguage.English)
                    {
                        member.LoadDoc(language);
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("error loading doc for {0}", member.ItemName);
                }
            }

            PrintElapsedTime("Loading member docs", ref startTime);
            var totalDuration = (startTime - originalStartTime).TotalSeconds;

            Console.WriteLine("Total time for ReloadAllProjectData = {0} sec", totalDuration);
        }
示例#9
0
        /// <summary>
        /// Get Collection of Undocumented APIs
        /// </summary>
        /// <param name="locale"></param>
        /// <returns></returns>
        public List <AssemblyDataItem> GetUndocumentedAPIs(LanguageUtil.ELanguage locale)
        {
            var list = new List <AssemblyDataItem>();

            foreach (var item in Items)
            {
                if (item.DocDataItem == null)
                {
                    list.Add(item);
                }
                else if (locale != LanguageUtil.ELanguage.Any)
                {
                    if (!item.DocDataItem.HasDocForLocale(locale))
                    {
                        list.Add(item);
                    }
                }
            }
            return(list);
        }
示例#10
0
        /// <summary>
        /// Read file of given locale.
        /// If file is missing, it crosses out that document and set it to missing satus.
        /// </summary>
        /// <param name="locale">locale to read</param>
        /// <returns>contents of the document</returns>
        public String LoadDocumentOfLocale(LanguageUtil.ELanguage locale)
        {
            if (FileMap.ContainsKey(locale))
            {
                try
                {
                    var reader  = File.OpenText(FileMap[locale]);
                    var content = reader.ReadToEnd();
                    reader.Close();
                    return(content);
                }
                catch (Exception e)
                {
                    Console.Out.WriteLine("File Save Failed:{0}", e.Message);
                    FileMap.Remove(locale);
                }
            }

            return(null);
        }
示例#11
0
        /// <summary>
        /// Saves content to given locale
        /// </summary>
        /// <param name="content">content to save into file</param>
        /// <param name="locale">locale to save</param>
        /// <returns>true if succeeds</returns>
        public bool SaveDocumentOfLocale(String content, LanguageUtil.ELanguage locale)
        {
            String savingPath = null;

            if (FileMap.ContainsKey(locale))
            {
                savingPath = FileMap[locale];
            }
            else
            {
                var filename = DirectoryUtil.MemberNameWithExtension(signature, DirectoryUtil.MemExtension);

                if (LanguageUtil.IsEnglish(locale))
                {
                    savingPath = Path.Combine(baseDocDirPath, filename);
                }
                else
                {
                    savingPath = string.Concat(Path.Combine(baseDocDirPath, locale.ToString()), Path.DirectorySeparatorChar, filename);
                }
            }

            try
            {
                File.WriteAllText(savingPath, content);
                if (!FileMap.ContainsKey(locale))
                {
                    FileMap.Add(locale, savingPath);
                }
                return(true);
            }
            catch (Exception e)
            {
                Console.Out.WriteLine("saveDocumentOfLocale failed:{0}", e.Message);
                FileMap.Remove(locale);
            }

            return(false);
        }
示例#12
0
    private string TextArea(string text, GUIStyle style, bool readOnly, LanguageUtil.ELanguage language)
    {
        // @TODO: Make SelectableLabel work correctly and then use that,

        /*if (readOnly)
         * {
         *      EditorGUILayout.SelectableLabel (text, style);
         *      return text;
         * }*/

        Rect rect = GUILayoutUtility.GetRect(new GUIContent(text), style);

        // Hack to prevent select all when clicking in a text field
        Event evt            = Event.current;
        Color oldCursorColor = GUI.skin.settings.cursorColor;

        if (evt.type == EventType.MouseDown && rect.Contains(evt.mousePosition))
        {
            GUI.skin.settings.cursorColor = Color.clear;
        }

        //GUI.enabled = !readOnly || Event.current.type == EventType.Repaint;
        EditorGUI.BeginChangeCheck();
        string newText = EditorGUI.TextArea(rect, text, style);

        if (EditorGUI.EndChangeCheck() && !readOnly)
        {
            text = newText;
            if (style != DocBrowser.styles.example && language == LanguageUtil.ELanguage.English)
            {
                text = MemberSubSection.EnforcePunctuation(text);
            }
        }

        GUI.skin.settings.cursorColor = oldCursorColor;

        return(text);
    }
示例#13
0
    void ToolbarGUI()
    {
        EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
        GUILayout.Space(1);

        if (!m_ShowMatchList)
        {
            // Hide List
            m_ShowList = !GUILayout.Toggle(!m_ShowList, "Hide List", EditorStyles.toolbarButton);

            GUILayout.Space(100);

            // Translation

            EditorGUI.BeginChangeCheck();

            bool translatingNew = GUILayout.Toggle(m_Translating, "Translation Mode", EditorStyles.toolbarButton);

            LanguageUtil.ELanguage languageNew = m_Language;
            if (m_Translating)
            {
                languageNew = (LanguageUtil.ELanguage)EditorGUILayout.EnumPopup(m_Language, EditorStyles.toolbarPopup);
            }

            if (EditorGUI.EndChangeCheck())
            {
                EditorGUIUtility.keyboardControl = 0;
                if (m_Editor == null || m_Editor.LeaveWithPermission())
                {
                    bool doLoad = m_Language != languageNew;
                    m_Language    = languageNew;
                    m_Translating = translatingNew;
                    if (translatingNew)
                    {
                        m_EditGrouping = false;
                    }
                    if (doLoad)
                    {
                        LoadMembers();
                    }
                    OnSelectMember(m_List, m_List.selectedMemberName);
                }
            }
        }

        GUILayout.FlexibleSpace();

        // Raw Names button
        ShowRawNames = GUILayout.Toggle(ShowRawNames, "Show Raw Names", EditorStyles.toolbarButton);

        // Diff button
        ShowDiff = GUILayout.Toggle(ShowDiff, "Show Diff", EditorStyles.toolbarButton);

        GUILayout.Space(100);

        // Reload
        if (GUILayout.Button("Reload", EditorStyles.toolbarButton))
        {
            LoadMembers();
        }

        EditorGUILayout.EndHorizontal();
    }
示例#14
0
    void OpenMemberFile(MemberItem member, LanguageUtil.ELanguage language)
    {
        string filePath = DirectoryWithLangUtil.GetPathFromMemberNameAndDir(member.ItemName, DirectoryWithLangUtil.LocalizedDir(DirectoryUtil.MemberDocsDir, language));

        System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("open", "-t " + filePath));
    }
示例#15
0
 public static string GetPathFromMemberNameAndDir(string memberName, string dir, LanguageUtil.ELanguage lang)
 {
     if (!LanguageUtil.IsEnglish(lang))
     {
         dir = Path.Combine(dir, lang.ToString());
     }
     return(Path.Combine(dir, DirectoryUtil.MemberNameWithExtension(memberName, DirectoryUtil.MemExtension)));
 }
示例#16
0
        public static string LocalizedDir(string path, LanguageUtil.ELanguage locale)
        {
            var localizedPath = LanguageUtil.IsEnglish(locale) ? path : Path.Combine(path, locale.ToString());

            return(localizedPath);
        }
 public IEnumerable <DocumentDataItem> GetTranslatedAPIs(LanguageUtil.ELanguage currentDocumentLocale)
 {
     return(ValidEnglishDocs().Where(item => item.HasDocForLocale(currentDocumentLocale)));
 }
示例#18
0
    string ParamOrReturnGUI(bool hasAsm, bool hasDoc, string label, string text, LanguageUtil.ELanguage language, bool readOnly, out bool remove, IList list = null, int index = -1)
    {
        remove = false;

        EditorGUILayout.BeginHorizontal();

        bool edit = !m_Browser.translating && !readOnly;

        bool hasSource, hasDest;

        if (m_Browser.translating)
        {
            hasSource = true;
            hasDest   = !text.StartsWith(sTodoText);
        }
        else
        {
            hasSource = hasAsm;
            hasDest   = hasDoc;
        }

        Rect labelRect = GUILayoutUtility.GetRect(160 + (edit ? 18 : 0), 16, GUILayout.ExpandWidth(false));

        labelRect.xMin += 4;
        labelRect.y    += 2;

        if (edit)
        {
            // Drag handle
            Rect dragRect = new Rect(labelRect.x, labelRect.y + 2, 14, 14);
            if (list != null)
            {
                DocBrowser.DragHandle(dragRect, typeof(ParameterWithDoc), list, index, DocBrowser.styles.dragHandle);
            }
            labelRect.xMin += 14 + 4;

            // remove button
            if (!hasSource)
            {
                Rect buttonRect = new Rect(labelRect.x, labelRect.y + 2, 14, 14);
                if (MiniButton(buttonRect, DocBrowser.styles.iconRemove))
                {
                    remove = true;
                }
                labelRect.xMin += 14;
            }
        }

        // Label
        GUI.Label(labelRect, label, DocBrowser.styles.paramLabel);

        // Text field
        if (!readOnly)
        {
            GUI.backgroundColor = GetColor(hasSource, hasDest);
        }
        text = TextArea(text, DocBrowser.styles.param, readOnly, language);
        GUI.backgroundColor = Color.white;

        EditorGUILayout.EndHorizontal();

        // Handle dragging
        if (list != null)
        {
            Rect dragTargetRect = GUILayoutUtility.GetRect(10, 0);
            dragTargetRect.y     -= 6;
            dragTargetRect.height = 14;
            DocBrowser.DragTarget(dragTargetRect, typeof(ParameterWithDoc), list, index + 1);
        }

        return(text);
    }
示例#19
0
 // check if given locale's document exists
 public bool HasDocForLocale(LanguageUtil.ELanguage locale)
 {
     return(FileMap.ContainsKey(locale));
 }
示例#20
0
        public MemDocModel(IDataItemOld memberData, LanguageUtil.ELanguage language)
        {
            var block = new MeaningfulBlock(memberData, language);

            MeaningfulBlocks.Add(block);
        }