private IntPtr CreatePTSContext(int index, TextFormattingMode textFormattingMode) { PtsHost ptsHost = this._contextPool[index].PtsHost; Invariant.Assert(ptsHost != null); IntPtr installedObjects; int installedObjectsCount; this.InitInstalledObjectsInfo(ptsHost, ref this._contextPool[index].SubtrackParaInfo, ref this._contextPool[index].SubpageParaInfo, out installedObjects, out installedObjectsCount); this._contextPool[index].InstalledObjects = installedObjects; this.InitGenericInfo(ptsHost, (IntPtr)(index + 1), installedObjects, installedObjectsCount, ref this._contextPool[index].ContextInfo); this.InitFloaterObjInfo(ptsHost, ref this._contextPool[index].FloaterInit); this.InitTableObjInfo(ptsHost, ref this._contextPool[index].TableobjInit); if (this._contextPool[index].IsOptimalParagraphEnabled) { TextFormatterContext textFormatterContext = new TextFormatterContext(); TextPenaltyModule textPenaltyModule = textFormatterContext.GetTextPenaltyModule(); IntPtr ptsPenaltyModule = textPenaltyModule.DangerousGetHandle(); this._contextPool[index].TextPenaltyModule = textPenaltyModule; this._contextPool[index].ContextInfo.ptsPenaltyModule = ptsPenaltyModule; this._contextPool[index].TextFormatter = TextFormatter.CreateFromContext(textFormatterContext, textFormattingMode); GC.SuppressFinalize(this._contextPool[index].TextPenaltyModule); } IntPtr result; PTS.Validate(PTS.CreateDocContext(ref this._contextPool[index].ContextInfo, out result)); return(result); }