コード例 #1
0
        /// <summary>
        /// Switches the language being edited to HTML.
        /// </summary>
        /// <param name="sender">The <c>NSMenuItem</c> that initiated the switch.</param>
        partial void ShowHTML(Foundation.NSObject sender)
        {
            // Switching to a new language?
            if (Language.LanguageIdentifier != "HTML")
            {
                Language = new HTMLDescriptor();

                // Apply any changes to open windows
                App.UpdateWindowPreferences();
            }
        }
コード例 #2
0
        public override IEnumerable <ISavableFile> Create(FileCreationContext context)
        {
            // TODO: better detection of project descriptor...
            var descriptor = LanguageDescriptor.GetLanguageByName(LanguageName).GetProjectDescriptors().FirstOrDefault();
            var evaluator  = context.GetStringEvaluator();

            var project = descriptor.CreateProject(evaluator.EvaluateString(Path.GetFileNameWithoutExtension(UnevaluatedName)));

            project.FilePath       = context.FilePath.Combine(evaluator.EvaluateString(UnevaluatedName));
            context.CurrentProject = project;

            var referenceProvider = project as IAssemblyReferenceProvider;
            var propertyProvider  = project as IPropertyProvider;

            if (referenceProvider != null && ReferencesNode != null)
            {
                foreach (XmlNode child in ReferencesNode.ChildNodes)
                {
                    referenceProvider.References.Add(new AssemblyReference(evaluator.EvaluateString(child.InnerText)));
                }
            }

            if (propertyProvider != null && PropertiesNode != null)
            {
                foreach (XmlNode child in PropertiesNode.ChildNodes)
                {
                    propertyProvider.SetProperty(
                        evaluator.EvaluateString(child.Attributes["Name"].Value),
                        evaluator.EvaluateString(child.InnerText));
                }
            }

            if (FilesNode != null)
            {
                foreach (XmlNode child in FilesNode.ChildNodes)
                {
                    var newContext = context.Clone() as FileCreationContext;
                    newContext.FilePath = project.FilePath;
                    new FileTemplateNode(child).Create(newContext);
                }
            }

            context.CurrentProject = null;

            return(new ISavableFile[] { project });
        }
コード例 #3
0
        internal LanguageDescriptor[] MakeLanguageUploadData(string[] isoCodes)
        {
            var result = new LanguageDescriptor[isoCodes.Length];

            for (int i = 0; i < isoCodes.Length; i++)
            {
                var    code = isoCodes[i];
                string name;
                if (code == Language1.Iso639Code)
                {
                    name = Language1.Name;
                }
                else if (code == Language2.Iso639Code)
                {
                    name = Language2.Name;
                }
                else if (code == Language3.Iso639Code)
                {
                    name = Language3.Name;
                }
                else
                {
                    WritingSystem.LookupIsoCode.GetBestLanguageName(code, out name);
                }
                string         ethCode;
                LanguageSubtag data;
                if (!StandardSubtags.RegisteredLanguages.TryGet(code.ToLowerInvariant(), out data))
                {
                    ethCode = code;
                }
                else
                {
                    ethCode = data.Iso3Code;
                    if (string.IsNullOrEmpty(ethCode))
                    {
                        ethCode = code;
                    }
                }
                result[i] = new LanguageDescriptor()
                {
                    IsoCode = code, Name = name, EthnologueCode = ethCode
                };
            }
            return(result);
        }
コード例 #4
0
        internal string LanguageId(LanguageDescriptor lang)
        {
            var getLang = MakeGetRequest("classes/language");

            getLang.AddParameter("where", lang.Json, ParameterType.QueryString);
            var response = _client.Execute(getLang);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(null);
            }
            dynamic json = JObject.Parse(response.Content);

            if (json == null || json.results.Count < 1)
            {
                return(null);
            }
            return(json.results[0].objectId);
        }
コード例 #5
0
        internal LanguageDescriptor[] MakeLanguageUploadData(string[] isoCodes)
        {
            var result = new LanguageDescriptor[isoCodes.Length];

            for (int i = 0; i < isoCodes.Length; i++)
            {
                var    code = isoCodes[i];
                var    data = _lookupIsoCode.GetExactLanguageMatch(code);
                string name;
                if (code == Language1Iso639Code)
                {
                    name = Language1Name;
                }
                else if (data == null)
                {
                    name = code;
                }
                else
                {
                    name = data.Name;
                }
                string ethCode;
                if (data == null)
                {
                    ethCode = code;
                }
                else
                {
                    ethCode = data.ISO3Code;
                    if (string.IsNullOrEmpty(ethCode))
                    {
                        ethCode = code;
                    }
                }
                result[i] = new LanguageDescriptor()
                {
                    IsoCode = code, Name = name, EthnologueCode = ethCode
                };
            }
            return(result);
        }
コード例 #6
0
        internal int LanguageCount(LanguageDescriptor lang)
        {
            var getLang = MakeGetRequest(ClassesLanguagePath);

            getLang.AddParameter("where", lang.Json, ParameterType.QueryString);
            var response = Client.Execute(getLang);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(0);
            }
            dynamic json = JObject.Parse(response.Content);

            if (json == null)
            {
                return(0);
            }
            var results = json.results;

            return(results.Count);
        }
コード例 #7
0
        /// <summary>
        /// Creates or updates resources based on the natural key values of the supplied resource. The POST operation can be used to create or update resources. In database terms, this is often referred to as an &quot;upsert&quot; operation (insert + update).  Clients should NOT include the resource &quot;id&quot; in the JSON body because it will result in an error (you must use a PUT operation to update a resource by &quot;id&quot;). The web service will identify whether the resource already exists based on the natural key values provided, and update or create the resource appropriately.
        /// </summary>
        /// <param name="body">The JSON representation of the &quot;languageDescriptor&quot; resource to be created or updated.</param>
        /// <returns>A RestSharp <see cref="IRestResponse"/> instance containing the API response details.</returns>
        public IRestResponse PostLanguageDescriptors(LanguageDescriptor body)
        {
            var request = new RestRequest("/languageDescriptors", Method.POST);

            request.RequestFormat = DataFormat.Json;

            // verify required params are set
            if (body == null)
            {
                throw new ArgumentException("API method call is missing required parameters");
            }
            request.AddBody(body);
            var response = client.Execute(request);

            var location = response.Headers.FirstOrDefault(x => x.Name == "Location");

            if (location != null && !string.IsNullOrWhiteSpace(location.Value.ToString()))
            {
                body.id = location.Value.ToString().Split('/').Last();
            }
            return(response);
        }
コード例 #8
0
        private void languagesTreeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            templatesListView.Clear();
            templatesListView.SmallImageList.Images.Clear();
            templatesListView.LargeImageList.Images.Clear();

            if (languagesTreeView.SelectedNode != null && languagesTreeView.SelectedNode.Tag is LanguageDescriptor)
            {
                LanguageDescriptor descriptor = languagesTreeView.SelectedNode.Tag as LanguageDescriptor;

                foreach (var template in descriptor.Templates)
                {
                    if (template is FileTemplate && ((template as FileTemplate).ProjectRequired ? _parentProject != null : true))
                    {
                        int index = -1;
                        if (template.Icon != null)
                        {
                            index = templatesListView.SmallImageList.Images.Count;
                            templatesListView.SmallImageList.Images.Add(template.Icon);
                            templatesListView.LargeImageList.Images.Add(template.Icon);
                        }

                        templatesListView.Items.Add(new ListViewItem(template.Name)
                        {
                            Tag        = template,
                            ImageIndex = index,
                        });
                    }
                }

                if (templatesListView.Items.Count > 0)
                {
                    templatesListView.Items[0].Selected = true;
                }
            }

            UpdateOkButton();
        }
コード例 #9
0
 public bool LanguageExists(LanguageDescriptor lang)
 {
     return(LanguageCount(lang) > 0);
 }
コード例 #10
0
 public static EditorLayoutData GetLayout(LanguageDescriptor language)
 {
     return(RegisteredLayouts.FirstOrDefault(x => x.Language == language));
 }
コード例 #11
0
        private Token ParseToken()
        {
            var TokType = TokenType.Error;

            CurrentType_ = LexerStateType.Begin;
            CurrentText_.Reset();

            var TokenLine      = CurrentLine_;
            var TokenLineIndex = CurrentLineIndex_;

            while (!CharsStream_.IsEnd() && CurrentType_ != LexerStateType.End)
            {
                var Ch = CharsStream_.Take();
                CurrentText_.Push(Ch);
                CurrentLineIndex_++;

                switch (CurrentType_)
                {
                    #region Begin
                case LexerStateType.Begin:
                    if (LanguageDescriptor.IsWhitespaceChar(Ch))
                    {
                        TokType      = TokenType.None;
                        CurrentType_ = LexerStateType.End;
                    }
                    else if (LanguageDescriptor.IsEndOfLineChar(Ch))
                    {
                        CurrentLine_++;
                        CurrentLineIndex_ = 0;

                        TokType      = TokenType.None;
                        CurrentType_ = LexerStateType.End;
                    }
                    else if (LanguageDescriptor.IsDelimiterChar(Ch))
                    {
                        TokType      = TokenType.Delimiter;
                        CurrentType_ = LexerStateType.End;
                    }
                    else if (LanguageDescriptor.IsDigitChar(Ch))
                    {
                        CurrentType_ = LexerStateType.Number;
                    }
                    else if (LanguageDescriptor.IsQuoteChar(Ch))
                    {
                        CurrentType_ = LexerStateType.String;
                    }
                    else if (LanguageDescriptor.IsIdentityChar(Ch))
                    {
                        CurrentType_ = LexerStateType.Identity;
                    }
                    break;

                    #endregion
                    #region Number
                case LexerStateType.Number:
                    if (LanguageDescriptor.IsPointChar(Ch))
                    {
                        CurrentType_ = LexerStateType.Float;
                    }
                    else if (!LanguageDescriptor.IsDigitChar(Ch))
                    {
                        CurrentText_.Pop();
                        CharsStream_.Back();

                        if (LanguageDescriptor.IsWhitespaceChar(Ch) ||
                            LanguageDescriptor.IsDelimiterChar(Ch) ||
                            LanguageDescriptor.IsEndOfLineChar(Ch))
                        {
                            TokType = TokenType.Numeric;
                        }
                        else
                        {
                            TokType = TokenType.Error;
                            Logger.Add(CurrentLine_, CurrentLineIndex_, $"unexpected character '{Ch}' in {CurrentText_}");
                        }

                        CurrentType_ = LexerStateType.End;
                    }
                    break;

                    #endregion
                    #region Float
                case LexerStateType.Float:
                    if (!LanguageDescriptor.IsDigitChar(Ch))
                    {
                        CurrentText_.Pop();
                        CharsStream_.Back();

                        if (LanguageDescriptor.IsWhitespaceChar(Ch) ||
                            LanguageDescriptor.IsDelimiterChar(Ch) ||
                            LanguageDescriptor.IsEndOfLineChar(Ch))
                        {
                            TokType = TokenType.Numeric;
                        }
                        else
                        {
                            TokType = TokenType.Error;
                            Logger.Add(CurrentLine_, CurrentLineIndex_, $"unexpected character '{Ch}' in {CurrentText_}");
                        }

                        CurrentType_ = LexerStateType.End;
                    }
                    break;

                    #endregion
                    #region String
                case LexerStateType.String:
                    if (LanguageDescriptor.IsEscapeChar(Ch))
                    {
                        CurrentText_.Pop();
                        CurrentText_.Push(LanguageDescriptor.EscapeChar(CharsStream_.Take()));
                    }
                    else if (LanguageDescriptor.IsQuoteChar(Ch) && CurrentText_.Index(0) == Ch)
                    {
                        CurrentText_.Pop();
                        CurrentText_.Remove(0);

                        TokType      = TokenType.String;
                        CurrentType_ = LexerStateType.End;
                    }
                    else if (LanguageDescriptor.IsEndOfLineChar(Ch))
                    {
                        CurrentText_.Pop();
                        CharsStream_.Back();

                        TokType      = TokenType.Error;
                        CurrentType_ = LexerStateType.End;
                        Logger.Add(CurrentLine_, CurrentLineIndex_, $"unexpected <eof> in {CurrentText_}");
                    }
                    break;

                    #endregion
                    #region Identity
                case LexerStateType.Identity:
                    if (!LanguageDescriptor.IsIdentityChar(Ch) && !LanguageDescriptor.IsDigitChar(Ch))
                    {
                        CurrentText_.Pop();
                        CharsStream_.Back();
                        TokType      = TokenType.Identity;
                        CurrentType_ = LexerStateType.End;
                    }
                    break;
                    #endregion
                }
            }

            var TokCode = CurrentText_.ToString();
            if (LanguageDescriptor.IsBooleanString(TokCode))
            {
                TokType = TokenType.Boolean;
            }
            else if (LanguageDescriptor.IsNullString(TokCode))
            {
                TokType = TokenType.Null;
            }

            return(new Token(TokType, TokCode, TokenLine, TokenLineIndex));
        }
コード例 #12
0
        private string[] GetModifiers(string input)
        {
            MatchCollection matches = Regex.Matches(input, BuildRegexAlternativeRange(LanguageDescriptor.GetLanguage <VisualBasicLanguage>().Modifiers));

            string[] output = new string[matches.Count];

            for (int i = 0; i < matches.Count; i++)
            {
                output[i] = matches[i].Value;
            }

            return(output);
        }
コード例 #13
0
        private void SetupProjectTemplates()
        {
            var programClassTemplate = new NetAstFileTemplate("Program", "Program", null, CodeEditorExtension.Instance, CodeDomUnitFactory.CreateEntryPointModuleUnit("%folder%", "Program"));

            var method = programClassTemplate.CompileUnit.Namespaces[1].Types[0].Members[0] as CodeMemberMethod;

            method.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(STAThreadAttribute))));
            method.Statements.AddRange(new CodeStatement[]
            {
                new CodeExpressionStatement(
                    new CodeMethodInvokeExpression(
                        new CodeMethodReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(Application)),
                            "EnableVisualStyles"))),
                new CodeExpressionStatement(
                    new CodeMethodInvokeExpression(
                        new CodeMethodReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(Application)),
                            "SetCompatibleTextRenderingDefault"),
                        new CodePrimitiveExpression(false))),
                new CodeExpressionStatement(
                    new CodeMethodInvokeExpression(
                        new CodeMethodReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(Application)),
                            "Run"),
                        new CodeObjectCreateExpression("Form1"))),
            });

            var formClassTemplate = new NetAstFileTemplate(
                "Form1",
                "Form1",
                null,
                CodeEditorExtension.Instance,
                CodeDomUnitFactory.CreateFormClass("%folder%", "Form1"));
            var formDesignerClassTemplate = new NetAstFileTemplate(
                "Form1.Designer",
                "Form1",
                null,
                this,
                CodeDomUnitFactory.CreateFormDesignerClass("%folder%", "Form1"));

            var formTemplate = new NetFormTemplate(
                "Form1",
                Properties.Resources.window_new,
                this,
                formDesignerClassTemplate, formClassTemplate);

            var csProject = new NetProjectTemplate(
                "Windows Forms Application",
                Properties.Resources.window_list,
                LanguageDescriptor.GetLanguage <CSharpLanguage>(),
                SubSystem.Windows,
                programClassTemplate,
                formTemplate);

            csProject.References.AddRange(new string[] { "System.Drawing.dll", "System.Windows.Forms.dll" });

            LanguageDescriptor.GetLanguage <CSharpLanguage>().Templates.Add(csProject);

            var vbProject = new NetProjectTemplate(
                "Windows Forms Application",
                Properties.Resources.window_list,
                LanguageDescriptor.GetLanguage <VisualBasicLanguage>(),
                SubSystem.Windows,
                programClassTemplate,
                formTemplate);

            vbProject.References.AddRange(new string[] { "System.Drawing.dll", "System.Windows.Forms.dll" });

            LanguageDescriptor.GetLanguage <VisualBasicLanguage>().Templates.Add(vbProject);
        }
コード例 #14
0
 void VerifyLangData(LanguageDescriptor lang, string code, string name, string ethCode)
 {
     Assert.That(lang.IsoCode, Is.EqualTo(code));
     Assert.That(lang.Name, Is.EqualTo(name));
     Assert.That(lang.EthnologueCode, Is.EqualTo(ethCode));
 }