Пример #1
0
        public DefaultProcessingEngine(IShellContextFactory shellContextFactory, Func<IOrchardHost> orchardHost)
        {
            _shellContextFactory = shellContextFactory;
            _orchardHost = orchardHost;

            _entries = new ContextState<IList<Entry>>("DefaultProcessingEngine.Entries", () => new List<Entry>());
        }
        public DefaultProcessingEngine(IShellContextFactory shellContextFactory, Func<ICoeveryHost> coeveryHost)
        {
            _shellContextFactory = shellContextFactory;
            _coeveryHost = coeveryHost;

            _entries = new ContextState<IList<Entry>>("DefaultProcessingEngine.Entries", () => new List<Entry>());
        }
		public DefaultLifetimeScopeAccessor(ILifetimeScope rootContainer)
		{
			Guard.ArgumentNotNull(() => rootContainer);

			//rootContainer.ChildLifetimeScopeBeginning += OnScopeBeginning;

			this._rootContainer = rootContainer;
			this._state = new ContextState<ILifetimeScope>("CustomLifetimeScopeProvider.WorkScope");
		}
Пример #4
0
        public DefaultHost(IExtensionLoaderCoordinator extensionLoaderCoordinator, ICacheManager cacheManager, IHostLocalRestart hostLocalRestart, IExtensionMonitoringCoordinator extensionMonitoringCoordinator, IShellSettingsManager shellSettingsManager, IShellContextFactory shellContextFactory)
        {
            _extensionLoaderCoordinator = extensionLoaderCoordinator;
            _cacheManager = cacheManager;
            _hostLocalRestart = hostLocalRestart;
            _extensionMonitoringCoordinator = extensionMonitoringCoordinator;
            _shellSettingsManager = shellSettingsManager;
            _shellContextFactory = shellContextFactory;

            _tenantsToRestart = new ContextState<IList<ShellSettings>>("DefaultHost.TenantsToRestart", () => new List<ShellSettings>());

            Logger = NullLogger.Instance;
        }
Пример #5
0
        private async Task HandleStopAsync()
        {
            _state = ContextState.Stopping;
            //this is intentional
            await InvokeUserMessageAsync(Stopping.Instance);

            if (_children != null)
            {
                foreach (var child in _children)
                {
                    child.Stop();
                }
            }
            await TryRestartOrTerminateAsync();
        }
Пример #6
0
        protected void btnAdd_ServerClick(object sender, EventArgs e)
        {
            _repository = new EmployeeRepository();

            ContextState contextStateOb = _repository.AddEducationalQualification(txtEducationalQualificationName.Value);

            if (contextStateOb.State)
            {
                Response.Write("Employee has been added  sucssefly.");
            }
            else
            {
                Response.Write(contextStateOb.ErrorMessage);
            }
        }
Пример #7
0
        public object Construct(ObjectReferenceContext context)
        {
            ContextState contextState  = context.SaveState();
            bool         fieldHasValue = ContainingClass().SeekToField(context, this);

            try
            {
                return(((IObjectConstructor)_translator).OnInstantiate(context.Container(), fieldHasValue
                                         ? Read(context) : null));
            }
            finally
            {
                context.RestoreState(contextState);
            }
        }
Пример #8
0
 public void TrackMatch(MatchInfo match)
 {
     if (this.contextState == ContextState.CollectPost)
     {
         this.UpdateQueue();
     }
     this.matchInfo = match;
     if (this.postContext > 0)
     {
         this.contextState = ContextState.CollectPost;
     }
     else
     {
         this.UpdateQueue();
     }
 }
Пример #9
0
        //Last and final termination step
        private async Task FinalizeStopAsync()
        {
            ProcessRegistry.Instance.Remove(Self);
            //This is intentional
            await InvokeUserMessageAsync(Stopped.Instance);

            DisposeActorIfDisposable();

            //Notify watchers
            _extras?.Watchers.SendSystemNessage(Terminated.From(Self));

            //Notify parent
            Parent?.SendSystemMessage(Terminated.From(Self));

            _state = ContextState.Stopped;
        }
Пример #10
0
        protected void btnAdd_ServerClick(object sender, EventArgs e)
        {
            _repository = new EmployeeRepository();

            ContextState contextStateOb = _repository.AddEmployee(txtNationalID.Value, txtName.Value,
                                                                  txtBirthDate.Value, txtAddress.Value, txtPhoneNumber.Value, txtPhoto.Value, txtHireDate.Value,
                                                                  txtJoinDate.Value, employeeEducationList.Value, txtSubscriptionFee.Value, subscriptionFeeYears.Value);

            if (contextStateOb.State)
            {
                //Response.Write("Employee has been added  sucssefly.");
                Response.Redirect("~/Views/Employee/list.aspx");
            }
            else
            {
                Response.Write(contextStateOb.ErrorMessage);
            }
        }
Пример #11
0
        public Doc FindDocumentById(Guid docId, IContext context)
        {
            ContextState prev = this;

            while (prev != null)
            {
                if (prev is IDocumentContextState)
                {
                    var document = ((IDocumentContextState)prev).GetDocument(context);

                    if (document != null && document.Id == docId)
                    {
                        return(document);
                    }
                }
                prev = prev.Previous;
            }
            return(null);
        }
Пример #12
0
        void _chat_LoginOKEvent(Vha.Net.Chat chat, EventArgs e)
        {
            // Prevent duplicate events
            if (this._state == ContextState.Connected)
            {
                return;
            }
            // Update state
            ContextState previousState = this._state;

            this._state = ContextState.Connected;
            // This tastes like more
            this._chat.AutoReconnect = true;
            // Notify state change
            if (this.StateEvent != null)
            {
                this.StateEvent(this, new StateEventArgs(this._state, previousState));
            }
        }
Пример #13
0
            public override bool Equals(object obj)
            {
                if (obj == this)
                {
                    return(true);
                }

                ContextState other = obj as ContextState;

                if (other == null)
                {
                    return(false);
                }

                return(this.ContextWordEnd == other.ContextWordEnd &&
                       this.RepeatWordEnd == other.RepeatWordEnd &&
                       this.RepeatCount == other.RepeatCount &&
                       base.Equals(other));
            }
        public void ActivateAspects(UnmarshallingContext context)
        {
            BooleanByRef           schemaUpdateDetected = new BooleanByRef();
            ContextState           savedState           = context.SaveState();
            ITraverseAspectCommand command = new _MarshallingInfoTraverseAspectCommand_63(context
                                                                                          , schemaUpdateDetected, EnsureFieldList(context));

            // TODO: cant the aspect handle it itself?
            // Probably no because old aspect versions might not be able
            // to handle null...
            TraverseAllAspects(context, command);
            if (schemaUpdateDetected.value)
            {
                context.RestoreState(savedState);
                command = new _MarshallingInfoTraverseAspectCommand_94(context, EnsureFieldList(context
                                                                                                ));
                TraverseAllAspects(context, command);
            }
        }
Пример #15
0
        public ActionContext(
            string contextGroupName                = "default",
            [CallerMemberName] string name         = null,
            ActionContextSettings settings         = null,
            IEnumerable <ISanitizer> logSanitizers = null)
        {
            _stopwatch = new Stopwatch();
            _stopwatch.Start();

            _parent = _namedContexts.GetOrAdd(contextGroupName, new AsyncLocal <ActionContext>()).Value;
            _namedContexts[contextGroupName].Value = this;

            ContextName      = name;
            ContextGroupName = contextGroupName;

            if (IsRoot)
            {
                Settings = settings ?? new ActionContextSettings();

                Depth  = 0;
                State  = new ContextState(logSanitizers);
                Logger = new ContextLogger(this);
            }
            else
            {
                Settings = _parent.Settings;

                Depth = _parent.Depth + 1;
                State = _parent.State;

                Logger = _parent.Logger;
                Logger.TrySetContext(this);
            }

            var shouldSuppressStartMessage = !IsRoot && Settings.SuppressChildContextStartMessages;
            var shouldAlwaysShowStart      = Settings.EnableContextStartMessage && !shouldSuppressStartMessage;

            Logger.Log(Settings.ContextStartMessageLevel,
                       $"Context {ContextName} has started.", !shouldAlwaysShowStart);

            Loaded?.Invoke(this);
        }
        private void OnActivePageStateChanged(ContextState state)
        {
            if (active_page == null || !pane_pages.ContainsKey(active_page))
            {
                return;
            }

            if (state == ContextState.NotLoaded)
            {
                notebook.CurrentPage = notebook.PageNum(no_active);
            }
            else if (state == ContextState.Loading)
            {
                notebook.CurrentPage = notebook.PageNum(loading);
            }
            else if (state == ContextState.Loaded)
            {
                notebook.CurrentPage = notebook.PageNum(pane_pages[active_page]);
            }
        }
Пример #17
0
        private void SetCCowIcon(ContextState state)
        {
            switch (state)
            {
            case ContextState.Broken:
                pictureBoxCcowStatus.Image = Resources.Broken;
                //pictureBoxCcowStatus.ToolTipText = "Broken";
                break;

            case ContextState.Changing:
                pictureBoxCcowStatus.Image = Resources.Changing;
                //toolStripStatusLabelConnection.ToolTipText = "Changing";
                break;

            case ContextState.Linked:
                pictureBoxCcowStatus.Image = Resources.Linked;
                //toolStripStatusLabelConnection.ToolTipText = "Linked";
                break;
            }
        }
Пример #18
0
        static API()
        {
            PluginManager = new PluginManager();
            UiElements    = new ContextUiElements();
            State         = new ContextState();
            Content       = new XnaContent();
            FrameDrawer   = new FrameDrawer();
            PluginConfig  = new PluginConfig(
                new DirectoryInfo(
                    Path.Combine(
                        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                        "Demoder.PlanetMapViewer")
                    )
                );

            XmlCache = new XmlCacheWrapper(
                new DirectoryInfo(
                    Path.Combine(
                        Demoder.Common.Misc.MyTemporaryDirectory,
                        "XmlCache")));
        }
Пример #19
0
        private void DoStart()
        {
            LoadConfiguration();
            LoadLayout();
            DownHandler = new RawKeyEventHandler(KListener_KeyDown);
            UpHandler   = new RawKeyEventHandler(KListener_KeyUp);

            Context = new ContextState
            {
                LastCombinationKeys = new List <KeyPressInfo>(),
                NextUpKeyToIgnore   = null
            };

            KListener          = new KeyboardListener();
            KListener.KeyDown += DownHandler;
            KListener.KeyUp   += UpHandler;

            if (Settings.UseScrollLock && !IsActive)
            {
                Activate();
            }
        }
Пример #20
0
        public DefaultOrchardHost(
            IShellContextFactory shellContextFactory,
            IRunningShellTable runningShellTable,
            IProcessingEngine processingEngine,
            IExtensionLoaderCoordinator extensionLoaderCoordinator,
            IExtensionMonitoringCoordinator extensionMonitoringCoordinator,
            ICacheManager cacheManager,
            IShellSettingsManager shellSettingsManager,
            IHostLocalRestart hostLocalRestart)
        {
            _shellContextFactory            = shellContextFactory;
            _extensionLoaderCoordinator     = extensionLoaderCoordinator;
            _extensionMonitoringCoordinator = extensionMonitoringCoordinator;
            _cacheManager         = cacheManager;
            _runningShellTable    = runningShellTable;
            _hostLocalRestart     = hostLocalRestart;
            _processingEngine     = processingEngine;
            _shellSettingsManager = shellSettingsManager;
            Logger = NullLogger.Instance;

            _tenantsToRestart = new ContextState <IList <ShellSettings> >("DefaultOrchardHost.TenantsToRestart", () => new List <ShellSettings>());
        }
Пример #21
0
        public ActionResult SendFile()
        {
            try
            {
                var process = Check <RunProcess>();
                if (process.ProcessContext != null)
                {
                    ContextState prev = process;
                    if (process.ProcessContext.DownloadFiles != null && process.ProcessContext.DownloadFiles.Count > 0)
                    {
                        var downloadFile = process.ProcessContext.DownloadFiles[0];

                        /*
                         * // CANCELLED:TODO Добавить переход на следующее действие в текущем процессе
                         * // Set(process.Previous); // ??
                         *
                         * var ext = Path.GetExtension(downloadFile.FileName);
                         * return File(downloadFile.Data, "application/" + ext, downloadFile.FileName);*/

                        return(RedirectTo(new SendFile(this, prev, downloadFile.FileName, downloadFile.Data)));
                    }

                    var fileName = process.ProcessContext.TemplateFileName ?? "UnnamedFile" + DateTime.Today.ToString("yyyy-mm-dd");

                    /*var wm = GetWorkflowProxy();
                     * process.Continue(wm.Proxy);
                     * if (process.ProcessContext != null && process.ProcessContext.State == WorkflowRuntimeState.Finish)
                     *  prev = process.Previous;*/

                    return(RedirectTo(new SendFile(this, prev, fileName)));
                }
                return(ThrowException(Process.ProcessContextNotFound));
            }
            catch (Exception e)
            {
                return(RedirectTo(new ExceptionState(this, e.Message)));
            }
        }
Пример #22
0
        public DefaultOrchardHost(
            IShellSettingsManager shellSettingsManager,
            IShellContextFactory shellContextFactory,
            IRunningShellTable runningShellTable,
            IProcessingEngine processingEngine,
            IExtensionLoaderCoordinator extensionLoaderCoordinator,
            IExtensionMonitoringCoordinator extensionMonitoringCoordinator,
            ICacheManager cacheManager,
            IHostLocalRestart hostLocalRestart ) {
            _shellSettingsManager = shellSettingsManager;
            _shellContextFactory = shellContextFactory;
            _runningShellTable = runningShellTable;
            _processingEngine = processingEngine;
            _extensionLoaderCoordinator = extensionLoaderCoordinator;
            _extensionMonitoringCoordinator = extensionMonitoringCoordinator;
            _cacheManager = cacheManager;
            _hostLocalRestart = hostLocalRestart;

            _tenantsToRestart = new ContextState<IList<ShellSettings>>("DefaultOrchardHost.TenantsToRestart", () => new List<ShellSettings>());

            T = NullLocalizer.Instance;
            Logger = NullLogger.Instance;
        }
Пример #23
0
        public ActionResult RunProcess(Guid id, Guid menuId)
        {
            ContextState state = Find <RunProcess>();

            if (state != null)
            {
                return(RedirectTo(
                           new AskForm(this, Resources.Home.ConfirmProcessTerminationToStartOther /*"Вы уверены, что хотите прервать процесс(ы) и запустить другой процесс?"*/,
                                       new ContextAction("Home", "ForceToRunProcess", new { id, menuId }), null)));
            }
            try
            {
                state = FindCheck <MainForm>();

                Set(state);

                return(RedirectToAction("Run", "Process", new { id, docId = (Guid?)null, menuId }));
            }
            catch (Exception e)
            {
                return(ThrowException(e));
            }
        }
Пример #24
0
        public ActionResult ShowFilterList(Guid id, Guid docStateId, Guid menuId)
        {
            try
            {
                ContextState state = Find <RunProcess>();

                if (state != null)
                {
                    return(RedirectTo(
                               new AskForm(this, Resources.Home.ConfirmProcessTerminationToOpenForm /*"Вы уверены, что хотите прервать процесс(ы) и открыть форму?"*/,
                                           new ContextAction("Home", "ForceToShowFilterList", new { id, docStateId, menuId }), null)));
                }
                state = FindCheck <MainForm>();

                Set(state);

                return(RedirectToAction("ShowFilterList", "Form", new { id, docStateId, menuId, noLoad = true }));
            }
            catch (Exception e)
            {
                return(ThrowException(e));
            }
        }
Пример #25
0
        /// <summary>
        /// Starts the context. Note: You can only call this method once per Context.
        /// </summary>
        public void Start()
        {
            AssertState(ContextState.Created);

            lock (_contextMutex)
            {
                AssertState(ContextState.Created);

                injectionProviders.Add(new ContextInjectionProvider());
                injectionProviders.Add(new ComponentInjectionProvider());

                componentLifecycleProcessors.Add(new NotifyingComponentLifecycleProcessor());

                State = ContextState.Starting;

                foreach (ComponentDescriptor descriptor in descriptorTypeCache.Values)
                {
                    GetInstance(descriptor);
                }

                State = ContextState.Started;
            }
        }
Пример #26
0
        /// <summary>
        /// Switches the right click menu state, enabling/disabling the right buttons matching that state
        /// </summary>
        /// <param name="newState">The new state detemining what buttons are active/disabled</param>
        public void SwitchState(ContextState newState)
        {
            state = newState;

            //Start by disabling all buttons but disablig their interactibility
            foreach (Button button in allButtons)
            {
                button.interactable = false;
            }

            //Now only active the buttons that should be active in this new state
            foreach (StateButtons stateButtons in buttonsAvailableOnState)
            {
                if (state == stateButtons.state)
                {
                    foreach (Button button in stateButtons.activeButtons)
                    {
                        button.interactable = true;
                    }
                    return;
                }
            }
        }
Пример #27
0
			public void saveState()
			{
				mLastState = mState;
			}
Пример #28
0
        public void Handle(IComparable version, IProjectChangeDescription projectChange, ContextState state, IProjectLogger logger)
        {
            Requires.NotNull(version, nameof(version));
            Requires.NotNull(projectChange, nameof(projectChange));
            Requires.NotNull(logger, nameof(logger));

            VerifyInitialized();

            if (projectChange.Difference.ChangedProperties.Contains(ConfigurationGeneral.MSBuildProjectFullPathProperty) &&
                projectChange.After.Properties.TryGetValue(ConfigurationGeneral.MSBuildProjectFullPathProperty, out string projectFilePath))
            {
                string displayName = GetDisplayName(projectFilePath);

                logger.WriteLine("DisplayName: {0}", displayName);
                logger.WriteLine("ProjectFilePath: {0}", projectFilePath);

                Context.ProjectFilePath = projectFilePath;
                Context.DisplayName     = displayName;
            }
        }
        public void Handle(IComparable version, BuildOptions added, BuildOptions removed, ContextState state, IProjectDiagnosticOutputService logger)
        {
            Requires.NotNull(version, nameof(version));
            Requires.NotNull(added, nameof(added));
            Requires.NotNull(removed, nameof(removed));
            Requires.NotNull(logger, nameof(logger));

            VerifyInitialized();

            foreach (Lazy <Action <string, BuildOptions, BuildOptions>, IOrderPrecedenceMetadataView> value in CommandLineNotifications)
            {
                value.Value(Context.BinOutputPath, added, removed);
            }
        }
Пример #30
0
        public NewDocForm(IContext context, ContextState previous, Guid formId) : base(context, previous, formId)
        {
//            _docManager = context.GetDocManager();
//            _presentationManager = context.GetPresentationManager();
        }
        private void ctxDelete_Click(object sender, System.EventArgs e)
        {
            nodeToOperateList = GetOperateNode(objSender);

            if (nodeToOperateList == null) return;

            DeleteNode(nodeToOperateList);

            ctxState = ContextState.CTX_READY;
        }
Пример #32
0
 static API()
 {
     State = new ContextState();
 }
Пример #33
0
 /// <summary>
 /// Disposes the request. If required, a disposition frame is sent to
 /// the peer to acknowledge the message.
 /// </summary>
 /// <param name="deliveryState">The delivery state to send.</param>
 protected void Dispose(DeliveryState deliveryState)
 {
     this.Link.DisposeMessage(this.Message, deliveryState, true);
     this.state = ContextState.Completed;
 }
        public void Handle(IComparable version, BuildOptions added, BuildOptions removed, ContextState state, IProjectLogger logger)
        {
            Requires.NotNull(version, nameof(version));
            Requires.NotNull(added, nameof(added));
            Requires.NotNull(removed, nameof(removed));
            Requires.NotNull(logger, nameof(logger));

            VerifyInitialized();

            foreach (CommandLineSourceFile additionalFile in removed.AdditionalFiles)
            {
                string fullPath = _project.MakeRooted(additionalFile.Path);

                RemoveFromContextIfPresent(fullPath, logger);
            }

            foreach (CommandLineSourceFile additionalFile in added.AdditionalFiles)
            {
                string fullPath = _project.MakeRooted(additionalFile.Path);

                AddToContextIfNotPresent(fullPath, state.IsActiveEditorContext, logger);
            }
        }
Пример #35
0
 public ShowMessage(IContext context, ContextState previous, string message, IList <UserAction> userActions = null)
     : base(context, previous)
 {
     Message     = message;
     UserActions = userActions;
 }
Пример #36
0
 public ShowSelectForm(IContext context, ContextState previous, Guid formId, IList <BizControl> controls, IList <UserAction> userActions = null)
     : base(context, previous, formId, controls, userActions)
 {
 }
 public InvalidContextStateException(ContextState expectedState, ContextState currentState)
     : base("Expected: " + expectedState + ", but current state is: " + currentState)
 {
 }
Пример #38
0
        private void OnActivePageStateChanged (ContextState state)
        {
            if (active_page == null || !pane_pages.ContainsKey (active_page)) {
                return;
            }

            if (state == ContextState.NotLoaded)
                notebook.CurrentPage = notebook.PageNum (no_active);
            else if (state == ContextState.Loading)
                notebook.CurrentPage = notebook.PageNum (loading);
            else if (state == ContextState.Loaded)
                notebook.CurrentPage = notebook.PageNum (pane_pages[active_page]);
        }
Пример #39
0
 /// <summary>
 /// Initializes a context object.
 /// </summary>
 /// <param name="link">The link where the message was received.</param>
 /// <param name="message">The received message.</param>
 protected Context(ListenerLink link, Message message)
 {
     this.Link = link;
     this.Message = message;
     this.state = ContextState.Active;
 }
 internal void SetState(ContextState state)
 {
     State = state;
 }
Пример #41
0
 public InvalidContextStateException(ContextState expectedState, ContextState currentState) : base("Expected: " + expectedState + ", but current state is: " + currentState)
 {
 }
 private static string Scripted(string code, ContextState state, bool isAtomic) {
     if(state == ContextState.None) {
         code = "{{" + code + "}}";
     } else if(!isAtomic) {
         DekiScriptExpression expr = SafeParse(code);
         if((expr == null) || (expr is DekiScriptBinary) || (expr is DekiScriptTernary)) {
             code = "(" + code + ")";
         }
     }
     return code;
 }
Пример #43
0
 private void IncarnateActor()
 {
     _state = ContextState.Alive;
     Actor  = _props.Producer();
 }
 private void ctxCut_Click(object sender, System.EventArgs e)
 {
     //Save the node that currently clicked to cut
     nodeToOperateList = GetOperateNode(objSender);
     //Not null is required
     if (nodeToOperateList == null) return;
     //Change state
     ctxState = ContextState.CTX_CUT;
 }
Пример #45
0
			public void restoreState()
			{
				mState = mLastState;
                mLastState = new ContextState();
			}
Пример #46
0
 public void SetState(ContextState state)
 {
     State = state;
 }
        private void ctxPaste_Click(object sender, System.EventArgs e)
        {
            if (nodeToOperateList == null) return;

            //Get node to operate
            AIONode [] destNodes = ((AIONode[])GetOperateNode(objSender));

            if (destNodes == null)
            {
                if (objSender.Equals(listView1)) //Neu ListView khong select
                {
                    destNodes = ((AIONode[])GetOperateNode(treeView1)); //Sau khi lay o tree, destNode luon la mot thu muc
                }
                else return;
            }
            else
            if (destNodes[0].data.isFile)
            {
                //Change destNode to current category in treeView
                destNodes = ((AIONode[])GetOperateNode(treeView1));
                if (destNodes == null) return;
            }

            if (destNodes.Length > 1)
            {
                MessageBox.Show("Paste into " + destNodes[0].data.Name);
            }

            AIONode destNode = destNodes[0];
            //Loop through operate node
            for (int i = 0;i<nodeToOperateList.Length;i++)
            {
                AIONode nodeToOperate = nodeToOperateList[i];
                //Checking
                if (!tree.IsValidMoveCopy(nodeToOperate, destNode))
                {
                    //continue;
                    return;
                }

                if (nodeToOperate.data.isFile == false && nodeToOperate.container == null)
                {
                    CreateContainerNode(nodeToOperate);
                }
            }

            switch (ctxState)
            {
                case ContextState.CTX_CUT:
                    MoveNode(nodeToOperateList, destNode);

                    break;

                case ContextState.CTX_COPY:
                    CopyNode(nodeToOperateList, destNode);

                    break;
            }

            //Change the state to READY when done
            ctxState = ContextState.CTX_READY;
        }
        private static void Convert(Site site, XDoc doc, bool isTemplate, XmlNode node, ContextState state, XmlNamespaceManager ns) {
            List<XmlNode> list = new List<XmlNode>();
            foreach(XmlNode child in node.ChildNodes) {
                list.Add(child);
            }
            ContextState original = state;
            bool firstChild = true;
            foreach(XmlNode child in list) {

                // only first arguments can be expressions
                if(original == ContextState.FirstExpressionThenArgument) {
                    if(!firstChild) {
                        state = ContextState.Argument;
                    } else {
                        state = ContextState.Expression;
                    }
                }
                firstChild = false;
                
                // determine what kinf of child element this is
                XDoc current = doc[child];
                if((child.NodeType == XmlNodeType.Element) && (child.NamespaceURI == "#mediawiki")) {
                    switch(child.LocalName) {
                    case "internal": {

                            // check if this element contains elements that would prevent it from being an internal link
                            if(current.AtPath(".//m:link | .//m:internal | .//m:external", ns).IsEmpty) {
                                Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                                StringBuilder code = new StringBuilder();
                                code.Append("mediawiki.internal").Append("(");
                                code.Append(AsArgument(child));
                                if(!string.IsNullOrEmpty(site.Language)) {
                                    code.Append(", ").Append(DekiScriptString.QuoteString(site.Language));
                                }
                                code.Append(")");
                                current.Replace(Scripted(code.ToString(), state, true));
                            } else {
                                Convert(site, doc, isTemplate, child, state, ns);
                                if(state == ContextState.Argument) {
                                    current.AddBefore("'[['");
                                    current.AddAfter("']]'");
                                } else {
                                    current.AddBefore("[[");
                                    current.AddAfter("]]");
                                }
                                current.ReplaceWithNodes(current);
                            }
                        }
                        break;
                    case "external": {

                            // check if this element contains elements that would prevent it from being an external link
                            if(current.AtPath(".//m:link | .//m:internal | .//m:external", ns).IsEmpty) {
                                Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                                StringBuilder code = new StringBuilder();
                                code.Append("mediawiki.external").Append("(");
                                code.Append(AsArgument(child));
                                code.Append(")");
                                current.Replace(Scripted(code.ToString(), state, true));
                            } else {
                                Convert(site, doc, isTemplate, child, state, ns);
                                if(state == ContextState.Argument) {
                                    current.AddBefore("'['");
                                    current.AddAfter("']'");
                                } else {
                                    current.AddBefore("[");
                                    current.AddAfter("]");
                                }
                                current.ReplaceWithNodes(current);
                            }
                        }
                        break;
                    case "link":
                        Convert(site, doc, isTemplate, child, state, ns);
                        switch(current["@type"].AsText) {
                        case "internal":
                            current.Replace(new XDoc("a").Attr("href", current["@href"].AsText).AddNodes(current));
                            break;
                        case "external":
                            current.Replace(new XDoc("a").Attr("class", "external").Attr("href", current["@href"].AsText).AddNodes(current));
                            break;
                        case "external-free":
                            if(state == ContextState.None) {
                                current.Replace(current["@href"].AsText);
                            } else {
                                current.Replace(QuoteString(current["@href"].AsText));
                            }
                            break;
                        case "external-ref":
                            current.Replace(new XDoc("a").Attr("class", "external").Attr("href", current["@href"].AsText));
                            break;
                        default:

                            // no idea what this link is, let's replace with a text version of itself
                            current.Replace(child.OuterXml);
                            break;
                        }
                        break;
                    case "image":
                        current.Replace(new XDoc("img").Attr("src", current["@href"].AsText).Attr("alt", current["@alt"].AsText).Attr("align", current["@align"].AsText));
                        break;
                    case "comment":
                        Convert(site, doc, isTemplate, child, state, ns);
                        current.Replace(new XDoc("span").Attr("class", "comment").AddNodes(current));
                        break;
                    case "nowiki":
                        current.Replace(new XDoc("span").Attr("class", "plain").AddNodes(current));
                        break;
                    case "extension":

                        // TODO: should the behavior be different depending on 'state'?
                        Convert(site, doc, isTemplate, child, state, ns);
                        if (!current["@value"].IsEmpty) {
                            current.Replace("{{" + current["@value"].AsText + "}}");
                        } else {
                            switch (current["@function"].AsText) {
                                case "math":
                                    current.Replace(new XDoc("pre").Attr("class", "script").Attr("function", "math.formula").Value(current.AsText));
                                    break;
                                case "kbd":
                                case "abbr":
                                case "object":
                                    current.Rename(current["@function"].AsText.ToLowerInvariant());
                                    current.RemoveAttr("function");
                                    break;
                                case "rss": {
                                        StringBuilder code = new StringBuilder();
                                        string[] rssParams = current.Contents.Split('|');
                                        code.Append("ajaxrss{");
                                        code.AppendFormat(" feed: '{0}' ", rssParams[0]);
                                        for (int i = 1; i < rssParams.Length; i++) {
                                            string rssParam = rssParams[i].Trim();
                                            int index = rssParam.IndexOf('=');
                                            if (index >= 0) {
                                                code.AppendFormat(", {0}: {1}", rssParam.Substring(0, index), QuoteString(rssParam.Substring(index + 1)));
                                            } else {
                                                code.AppendFormat(", {0}: true", rssParam);
                                            }
                                        }
                                        code.Append(" }");
                                        current.Replace(new XDoc("span").Attr("class", "script").Value(code.ToString()));
                                    }
                                    break;
                                case "title-override":
                                case "breadcrumbs":
                                    current.Remove();
                                    break;
                                default:
                                    current.Replace(child.OuterXml);
                                    break;
                            }
                        }
                        break;
                    case "magic": {
                            string code = null;
                            switch(current["@name"].AsText) {
                            case "CONTENTLANGUAGE":
                                code = "site.language";
                                break;
                            case "CURRENTDAY":
                                code = "date.format(date.now, '%d')";
                                break;
                            case "CURRENTDAY2":
                                code = "date.format(date.now, 'dd')";
                                break;
                            case "CURRENTDAYNAME":
                                code = "date.dayname(date.now)";
                                break;
                            case "CURRENTDOW":
                                code = "date.dayofweek(date.now)";
                                break;
                            case "CURRENTMONTH":
                                code = "date.month(date.now)";
                                break;
                            case "CURRENTMONTHABBREV":
                                code = "date.format(date.now, 'MMM')";
                                break;
                            case "CURRENTMONTHNAME":
                                code = "date.monthname(date.now)";
                                break;
                            case "CURRENTTIME":
                                code = "date.time(date.now)";
                                break;
                            case "CURRENTHOUR":
                                code = "date.format(date.now, 'HH')";
                                break;
                            case "CURRENTWEEK":
                                code = "date.week(date.now)";
                                break;
                            case "CURRENTYEAR":
                                code = "date.year(date.now)";
                                break;
                            case "CURRENTTIMESTAMP":
                                code = "date.format(date.now, 'yyyyMMddHHmmss')";
                                break;
                            case "PAGENAME":
                            case "PAGENAMEE":
                                code = "page.unprefixedpath";
                                break;
                            case "NUMBEROFARTICLES":
                                code = "site.pagecount";
                                break;
                            case "NUMBEROFUSERS":
                                code = "site.usercount";
                                break;
                            case "NAMESPACE":
                                code = "page.namespace";
                                break;
                            case "REVISIONDAY":
                                code = "date.format(page.date, '%d')";
                                break;
                            case "REVISIONDAY2":
                                code = "date.format(page.date, 'dd')";
                                break;
                            case "REVISIONMONTH":
                                code = "date.month(page.date)";
                                break;
                            case "REVISIONYEAR":
                                code = "date.year(page.date)";
                                break;
                            case "REVISIONTIMESTAMP":
                                code = "date.format(page.date, 'yyyyMMddHHmmss')";
                                break;
                            case "SITENAME":
                                code = "site.name";
                                break;
                            case "SERVER":
                                code = "site.uri";
                                break;
                            case "SERVERNAME":
                                code = "site.host";
                                break;
                            default:

                                // unrecognized magic word - use the mediawiki magicword extension
                                code = String.Format("mediawiki.variable('{0}')", DekiScriptString.EscapeString(current["@name"].AsText));
                                break;
                            }
                            current.Replace(Scripted(code, state, true));
                        }
                        break;
                    case "interwiki": {
                            string code = String.Format("mediawiki.interwiki('{0}', '{1}', '{2}')", 
                                DekiScriptString.EscapeString(child.Attributes["prefix"].Value),
                                DekiScriptString.EscapeString(child.Attributes["path"].Value + (((XmlElement)child).HasAttribute("fragment") ? ("#" + child.Attributes["fragment"].Value) : string.Empty)), 
                                DekiScriptString.EscapeString(child.InnerText));
                            current.Replace(Scripted(code, state, true));
                            break;
                    }
                    case "function": {
                            Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                            StringBuilder code = new StringBuilder();
                            bool withLang = false;
                            switch (current["@name"].AsText) {
                            case "formatnum": {
                                    code.Append("num.format");

                                    // add one more parameter
                                    XmlElement arg = child.OwnerDocument.CreateElement("arg", "#mediawiki");
                                    arg.AppendChild(child.OwnerDocument.CreateTextNode(QuoteString("N")));
                                    child.AppendChild(arg);
                                }
                                break;
                            case "fullurl":
                                code.Append("wiki.uri");
                                break;
                            case "lc":
                                code.Append("string.tolower");
                                break;
                            case "lcfirst":
                                code.Append("string.tolowerfirst");
                                break;
                            case "padleft":
                                code.Append("string.padleft");
                                break;
                            case "padright":
                                code.Append("string.padright");
                                break;
                            case "uc":
                                code.Append("string.toupper");
                                break;
                            case "ucfirst":
                                code.Append("string.toupperfirst");
                                break;
                            case "urlencode":
                                code.Append("web.uriencode");
                                break;
                            case "int":
                                code.Append("wiki.page");
                                break;
                            case "localurl":
                            case "localurle":
                                withLang = true;
                                code.Append(At("mediawiki", current["@name"].AsText));
                                break;
                            default:
                                code.Append(At("mediawiki", current["@name"].AsText));
                                break;
                            }

                            // append parameters
                            code.Append("(");
                            if (withLang) {
                                code.Append(null == site.Language ? "_" : DekiScriptString.QuoteString(site.Language));
                            }
                            bool first = true && !withLang;
                            foreach(XDoc arg in current.AtPath("m:arg", ns)) {
                                if(!first) {
                                    code.Append(", ");
                                }
                                first = false;
                                code.Append(AsArgument(arg.AsXmlNode));
                            }
                            code.Append(")");
                            current.Replace(Scripted(code.ToString(), state, true));
                        }
                        break;
                    case "expression": {
                            StringBuilder code = new StringBuilder();
                            switch(current["@name"].AsText) {
                            case "#expr":
                                Convert(site, doc, isTemplate, child, ContextState.Expression, ns);
                                code.Append(AsExpression(current.AtPath("m:arg", ns).AsXmlNode));
                                break;
                            case "#if": {
                                    Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                                    code.Append("string.trim(");
                                    code.Append(AsArgument(current.AtPath("m:arg[1]", ns).AsXmlNode));
                                    code.Append(") !== '' ? ");
                                    code.Append(WebHtml(current.AtPath("m:arg[2]", ns).AsXmlNode));
                                    code.Append(" : ");
                                    code.Append(WebHtml(current.AtPath("m:arg[3]", ns).AsXmlNode));
                                }
                                break;
                            case "#ifeq": {
                                    Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                                    code.Append(AsArgument(current.AtPath("m:arg[1]", ns).AsXmlNode));
                                    code.Append(" == ");
                                    code.Append(AsArgument(current.AtPath("m:arg[2]", ns).AsXmlNode));
                                    code.Append(" ? ");
                                    code.Append(WebHtml(current.AtPath("m:arg[3]", ns).AsXmlNode));
                                    code.Append(" : ");
                                    code.Append(WebHtml(current.AtPath("m:arg[4]", ns).AsXmlNode));
                                }
                                break;
                            case "#ifexpr": {
                                    Convert(site, doc, isTemplate, child, ContextState.FirstExpressionThenArgument, ns);
                                    code.Append(AsExpression(current.AtPath("m:arg[1]", ns).AsXmlNode));
                                    code.Append(" ? ");
                                    code.Append(WebHtml(current.AtPath("m:arg[2]", ns).AsXmlNode));
                                    code.Append(" : ");
                                    code.Append(WebHtml(current.AtPath("m:arg[3]", ns).AsXmlNode));
                                }
                                break;
                            case "#ifexist": {
                                    bool simple;
                                    Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                                    code.Append("wiki.pageexists(");
                                    string title = AsPathArgument(site, current.AtPath("m:arg[1]", ns), false, out simple);
                                    code.Append(simple ? ("'" + title + "'") : title);
                                    code.Append(") ? ");
                                    code.Append(WebHtml(current.AtPath("m:arg[2]", ns).AsXmlNode));
                                    code.Append(" : ");
                                    code.Append(WebHtml(current.AtPath("m:arg[3]", ns).AsXmlNode));
                                }
                                break;
                            case "#switch":
                            case "#time":
                            case "#rel2abs":
                            case "#titleparts":
                            case "#iferror":

                            // TODO (steveb): missing code, falling through to default case

                            default:
                                code.Append(At("mediawiki", current["@name"].AsText));

                                // append parameters
                                code.Append("(");
                                bool first = true;
                                foreach(XDoc arg in current.AtPath("m:arg", ns)) {
                                    if(!first) {
                                        code.Append(", ");
                                    }
                                    first = false;
                                    code.Append(AsArgument(arg.AsXmlNode));
                                }
                                code.Append(")");
                                break;
                            }
                            current.Replace(Scripted(code.ToString(), state, false));
                        }
                        break;
                    case "template": {
                            Convert(site, doc, isTemplate, child, ContextState.Argument, ns);
                            StringBuilder code = new StringBuilder();

                            // check if we need to decode the page name
                            bool simpleTitle;
                            bool simpleArgs;
                            string title = AsPathArgument(site, current.AtPath("m:name", ns), true, out simpleTitle);
                            XDoc args = current.AtPath("m:arg", ns);
                            string argCode = AppendTemplateArguments(args, out simpleArgs);

                            // append parameters
                            if(simpleTitle && simpleArgs) {
                                code.Append("template.");
                                code.Append(title.Substring(1, title.Length - 2));
                                if(string.IsNullOrEmpty(argCode)) {
                                    code.Append("()");
                                } else if(argCode.StartsWith("[") && argCode.EndsWith("]")) {
                                    code.Append("(" + argCode.Substring(2, argCode.Length - 4) + ")");
                                } else {
                                    code.Append(argCode);
                                }
                            } else {
                                code.Append("wiki.template").Append("(");
                                code.Append(title);
                                if(!string.IsNullOrEmpty(argCode)) {
                                    code.Append(", ");
                                    code.Append(argCode);
                                }
                                code.Append(")");
                            }
                            current.Replace(Scripted(code.ToString(), state, true));
                        }
                        break;
                    case "arg":
                        Convert(site, doc, isTemplate, child, state, ns);
                        break;
                    case "name":
                        Convert(site, doc, isTemplate, child, state, ns);
                        break;
                    case "ref": {
                            if(isTemplate || (state != ContextState.None)) {
                                Convert(site, doc, isTemplate, child, state, ns);
                                string code;
                                int? index = current["@index"].AsInt;
                                if(index != null) {
                                    code = "$" + (index.Value - 1);
                                } else {
                                    code = "$" + current["@name"].AsText;
                                }
                                switch(state) {
                                case ContextState.None:
                                    if(current["@alt"].IsEmpty) {
                                        current.Replace(Scripted("web.html(" + code + ")", state, true));
                                    } else {
                                        current.Replace(Scripted("web.html(" + code + " ?? " + AsArgument(current.AsXmlNode) + ")", state, true));
                                    }
                                    break;
                                default:
                                    if(current["@alt"].IsEmpty) {
                                        current.Replace(Scripted(code, state, true));
                                    } else {
                                        current.Replace(Scripted(code + " ?? " + AsArgument(current.AsXmlNode), state, false));
                                    }
                                    break;
                                }
                            } else {
                                string code = current["@index"].AsText ?? current["@name"].AsText;
                                if(!current["@alt"].IsEmpty) {
                                    code += "|" + current["@alt"].AsText;
                                }
                                current.Replace(new XDoc("span").Attr("class", "plain").Value("{{{" + code + "}}}"));
                            }
                        }
                        break;
                    }
                } else if(child.NodeType == XmlNodeType.Element) {
                    Convert(site, doc, isTemplate, child, state, ns);

                    // loop over attribute nodes
                    foreach(XDoc attribute in current.AtPath("@m:*", ns)) {
                        XDoc code = XDocFactory.From("<code xmlns:mediawiki=\"#mediawiki\">" + attribute.Contents + "</code>", MimeType.XML);
                        Convert(site, code, isTemplate, code.AsXmlNode, ContextState.Argument, ns);
                        attribute.Parent.Attr(attribute.Name, "{{" + AsArgument(code.AsXmlNode) + "}}");
                        attribute.Remove();
                    }
                } else {
                    Convert(site, doc, isTemplate, child, state, ns);
                    if((state == ContextState.Argument) && ((child.NodeType == XmlNodeType.Text) || (child.NodeType == XmlNodeType.Whitespace) || (child.NodeType == XmlNodeType.SignificantWhitespace))) {
                        if(!string.IsNullOrEmpty(child.Value)) {
                            double value;
                            if(double.TryParse(child.Value, out value)) {
                                current.Replace(child.Value);
                            } else {
                                current.Replace(QuoteString(child.Value));
                            }
                        } else {
                            current.Remove();
                        }
                    }
                }
            }
        }