Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression

/
/

Test String

Code Generator

Generated Code

using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"(?ms)(Classes\\par)(.*?).*Detailed Description"; string input = @"{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033 {\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} {\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;} } {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} {\stylesheet {\widctlpar\adjustright \fs20\cgrid \snext0 Normal;} {\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect} {\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;} {\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;} {\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;} {\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;} {\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;} {\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;} {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;} {\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;} {\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;} {\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;} {\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;} {\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;} {\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;} {\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;} {\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;} {\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;} {\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;} {\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;} {\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;} {\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;} {\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 9;} {\s50\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext51 List Continue 0;} {\s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext52 List Continue 1;} {\s52\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext53 List Continue 2;} {\s53\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext54 List Continue 3;} {\s54\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext55 List Continue 4;} {\s55\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext56 List Continue 5;} {\s56\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext57 List Continue 6;} {\s57\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext58 List Continue 7;} {\s58\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 8;} {\s59\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 9;} {\s60\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext61 DescContinue 0;} {\s61\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext62 DescContinue 1;} {\s62\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext63 DescContinue 2;} {\s63\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext64 DescContinue 3;} {\s64\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext65 DescContinue 4;} {\s65\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext66 DescContinue 5;} {\s66\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext67 DescContinue 6;} {\s67\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext68 DescContinue 7;} {\s68\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 8;} {\s69\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 9;} {\s70\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext81 LatexTOC 0;} {\s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext82 LatexTOC 1;} {\s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext83 LatexTOC 2;} {\s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext84 LatexTOC 3;} {\s74\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext85 LatexTOC 4;} {\s75\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext86 LatexTOC 5;} {\s76\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext87 LatexTOC 6;} {\s77\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext88 LatexTOC 7;} {\s78\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 8;} {\s79\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 9;} {\s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext81 \sautoupd List Bullet 0;} {\s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid \sbasedon0 \snext82 \sautoupd List Bullet 1;} {\s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid \sbasedon0 \snext83 \sautoupd List Bullet 2;} {\s83\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls4\adjustright \fs20\cgrid \sbasedon0 \snext84 \sautoupd List Bullet 3;} {\s84\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls5\adjustright \fs20\cgrid \sbasedon0 \snext85 \sautoupd List Bullet 4;} {\s85\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls6\adjustright \fs20\cgrid \sbasedon0 \snext86 \sautoupd List Bullet 5;} {\s86\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls7\adjustright \fs20\cgrid \sbasedon0 \snext87 \sautoupd List Bullet 6;} {\s87\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls8\adjustright \fs20\cgrid \sbasedon0 \snext88 \sautoupd List Bullet 7;} {\s88\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls9\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 8;} {\s89\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls10\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 9;} {\s90\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext91 \sautoupd List Enum 0;} {\s91\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext92 \sautoupd List Enum 1;} {\s92\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext93 \sautoupd List Enum 2;} {\s93\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext94 \sautoupd List Enum 3;} {\s94\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext95 \sautoupd List Enum 4;} {\s95\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;} {\s96\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;} {\s97\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext98 \sautoupd List Enum 7;} {\s98\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 8;} {\s99\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 9;} } \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Class Documentation{\tc \v Class Documentation} \par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid DocSrc.frmDocSrc Class Reference\par \pard\plain {\tc\tcl2 \v DocSrc.frmDocSrc} {\xe \v DocSrc.frmDocSrc} {\bkmkstart AAAAAAAAAC} {\bkmkend AAAAAAAAAC} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Automatically take source code (focus on: C#, with XML comments) and generate DOORS- and/or EDMS- ready SDDs. }}\par { Inherits Form.}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Classes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b DocumentationSettings}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid State/values of the form/project to be documented }}} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b frmDocSrc} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Constructor }{ }\par }} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Events\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EditWordBreakProc} {\b myCallBackEvent}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Private Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static bool {\b SetForegroundWindow} (IntPtr hwnd)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid delegate int {\b EditWordBreakProc} (IntPtr text, int pos_in_text, int bCharSet, int action)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b CheckIfRunAsCopy} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Check to see if we need to create and run a copy, to enable self-documenting }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid string {\b GetTimestamp} (string format=""yyyy-MM-DD_HH-mm-ss"")\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Returns a timestamp, used for ensuring new file names are unique. In practice this wont be called more than once a second. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b btnRun_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For each checked checkbox, sequentially run the related steps. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b RebuildSolution} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call MSBuild.exe to rebuild the solution file, and log the results to the pseudo console. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b SendCommandToPseudoConsole} (string fileName, string arguments)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run command with arguments, display results on the pseudo console. Block other steps from running while this completes, with {\b WaitWhileOtherStepRuns()} and {\b SetNoLongerRunning()}. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b OutputHandler} (Object source, DataReceivedEventArgs outLine)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Mimics the colorized Command Prompt, designed to show the user what is happening with the various commands which are run. Specific strings are checked for to set the line colorings, defaulting to a darker gray. HERE}{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b WriteToPseudoConsole} (string str, Color color)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Add colored text lines to the pseudo-console. Auto scrolls to the end. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b GenerateRTF} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call Doxygen with the code's doxyfile, to generate initial (RTF) document. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b PostProcessRTF} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call {\b CleanRtfFile()} to removed undesired sections from the generated RTF file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b CleanRtfFile} (string rtfFile)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Post-process the RTF file, to remove undesired sections: Front matter, Class References, Index }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b OpenRTFWord} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open RTF file in Word, ignoring ""Convert File"" prompt, saving as a Word .DOCX file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b OpenWordApp} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create the internal Word application, used to load RTF/DOCX files and call DOORS. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b OpenRtfInWord} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open the RTF document in Word. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b SaveRtfAsDocx} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the opened document as DOCX, for imput to DOORS. Prompt if failure and desire to try again. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b DoorsNav} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run DOORS, login to DOORS, set DOORS location. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b RunDoors} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 1 on running DOORS <todo>To Be automated in the future.</todo> }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b LoginDoors} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 2 on running DOORS <todo>To Be automated in the future.</todo> }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b SetDoorsLocation} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 3 on running DOORS <todo>To Be automated in the future.</todo> }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b DoorsDocxImport} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run ""Export To DOORS"" Word Add-in. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b AddDoorsSections} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the imported DOORS document, to add front matter, Section 1 ""Introduction"", etc. <todo>Not implemented yet.</todo> }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b DoorsExportToWord} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To export an officially formatted WEC SDD from DOORS <todo>Not implemented yet.</todo> }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b btnDoxyWizardDoxyFile_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open Doxywizard with DoxyFile, to enable easy doxyfile editing }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b btnDeleteXML_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete the source code's XML documentation file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b btnDeleteRtf_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete the initial RTF file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b openToolStripMenuItem_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Load a previous state of the form from an XML file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b saveAsToolStripMenuItem_Click} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the current state of the form to an XML file, name chosen by user. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b frmDocSrc_FormClosing} (object sender, FormClosingEventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save last state settings as the form closes. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b LoadStateFile} (string file)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Load a previous state of the form from an XML file. From: HERE}{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b SaveStateFile} (string file)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the current state of the form to an XML file. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b ObjectStateUpdated} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If any of the checkboxes/textboxes we care about changes, update doc. Unless DISABLE_OBJECT_STATE_UPDATED is true, then don't update. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b DocStateUpdated} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set object attributes to match doc. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b frmDocSrc_Shown} (object sender, EventArgs e)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For character-wrapping (NOT word-wrapping) in the pseudo-console From: HERE}{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int {\b myCallBack} (IntPtr text, int pos_in_text, int bCharSet, int action)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For character-wrapping (NOT word-wrapping) in the pseudo-console From: HERE}{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid IntPtr {\b GetHandleByTitle} (string wName)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Returns the handle to the first window, whose title contains wName. Case-insensitive. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b SetForegroundWindow} (string wName)\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the first window, whose title contains wName. Case-insensitive. }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b WaitWhileOtherStepRuns} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid if another process is running, wait here until it completes todo: probably need to have some sort of timeout feature }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b SetNoLongerRunning} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set RUNNING to false, alert if it was already false }{ }\par }} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid string {\b CallingMethod} ()\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid SomeMethod() -SomeOtherMethod() -CallingMethod() }{ }\par }} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Private Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static IntPtr {\b SendMessage} (IntPtr hwnd, uint message, IntPtr wParam, IntPtr lParam)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Private Attributes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid string {\b m_xmlPath} = {\b applicationPath} + ""DocSrc_SETTINGS.XML""\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid string {\b nl} = Environment.NewLine\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const uint {\b EM_SETWORDBREAKPROC} = 0x00D0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Microsoft.Office.Interop.Word.Document {\b wd}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Microsoft.Office.Interop.Word.Application {\b app}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b DISABLE_OBJECT_STATE_UPDATED} = false\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Process {\b p} = new Process()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b RUNNING} = false\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid object {\b missing} = Missing.Value\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid object {\b f} = false\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid object {\b t} = true\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid object {\b encoding} = WdSaveFormat.wdFormatDocumentDefault\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid object {\b noEncodingDialog} = true\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DocumentationSettings} {\b doc}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid DataSet {\b ds} = new DataSet()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Private Attributes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static string {\b applicationFile} = System.Reflection.Assembly.GetExecutingAssembly().Location.ToLower()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static string {\b applicationPath} = Path.GetDirectoryName({\b applicationFile}) + @""\\""\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Automatically take source code (focus on: C#, with XML comments) and generate DOORS- and/or EDMS- ready SDDs. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v frmDocSrc\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:frmDocSrc} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b DocSrc.frmDocSrc.frmDocSrc ()}} \par {\bkmkstart AAAAAAAAAD} {\bkmkend AAAAAAAAAD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Constructor }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v AddDoorsSections\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:AddDoorsSections} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.AddDoorsSections (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAE} {\bkmkend AAAAAAAAAE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the imported DOORS document, to add front matter, Section 1 ""Introduction"", etc. <todo>Not implemented yet.</todo> }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v btnDeleteRtf_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:btnDeleteRtf_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.btnDeleteRtf_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAF} {\bkmkend AAAAAAAAAF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete the initial RTF file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v btnDeleteXML_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:btnDeleteXML_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.btnDeleteXML_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAG} {\bkmkend AAAAAAAAAG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete the source code's XML documentation file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v btnDoxyWizardDoxyFile_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:btnDoxyWizardDoxyFile_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.btnDoxyWizardDoxyFile_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAH} {\bkmkend AAAAAAAAAH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open Doxywizard with DoxyFile, to enable easy doxyfile editing }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v btnRun_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:btnRun_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.btnRun_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAI} {\bkmkend AAAAAAAAAI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For each checked checkbox, sequentially run the related steps. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v CallingMethod\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:CallingMethod} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b string DocSrc.frmDocSrc.CallingMethod (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAJ} {\bkmkend AAAAAAAAAJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid SomeMethod() -SomeOtherMethod() -CallingMethod() }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid SomeMethod\par }}} {\xe \v CheckIfRunAsCopy\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:CheckIfRunAsCopy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.CheckIfRunAsCopy (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAK} {\bkmkend AAAAAAAAAK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Check to see if we need to create and run a copy, to enable self-documenting }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v CleanRtfFile\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:CleanRtfFile} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.CleanRtfFile (string {\i rtfFile}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAL} {\bkmkend AAAAAAAAAL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Post-process the RTF file, to remove undesired sections: Front matter, Class References, Index }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i rtfFile} \cell }{Path of RTF file to open in Word and process, removing undesired sections\cell } {\row } } }} {\xe \v DocStateUpdated\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:DocStateUpdated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.DocStateUpdated (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAM} {\bkmkend AAAAAAAAAM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set object attributes to match doc. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v DoorsDocxImport\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:DoorsDocxImport} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.DoorsDocxImport (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAN} {\bkmkend AAAAAAAAAN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run ""Export To DOORS"" Word Add-in. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v DoorsExportToWord\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:DoorsExportToWord} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.DoorsExportToWord (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAO} {\bkmkend AAAAAAAAAO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To export an officially formatted WEC SDD from DOORS <todo>Not implemented yet.</todo> }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v DoorsNav\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:DoorsNav} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.DoorsNav (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAP} {\bkmkend AAAAAAAAAP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run DOORS, login to DOORS, set DOORS location. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v EditWordBreakProc\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:EditWordBreakProc} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b delegate int DocSrc.frmDocSrc.EditWordBreakProc (IntPtr {\i text}, int {\i pos_in_text}, int {\i bCharSet}, int {\i action}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAQ} {\bkmkend AAAAAAAAAQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid } {\xe \v frmDocSrc_FormClosing\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:frmDocSrc_FormClosing} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.frmDocSrc_FormClosing (object {\i sender}, FormClosingEventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAR} {\bkmkend AAAAAAAAAR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save last state settings as the form closes. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v frmDocSrc_Shown\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:frmDocSrc_Shown} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.frmDocSrc_Shown (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAS} {\bkmkend AAAAAAAAAS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For character-wrapping (NOT word-wrapping) in the pseudo-console From: HERE}}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v GenerateRTF\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:GenerateRTF} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.GenerateRTF (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAT} {\bkmkend AAAAAAAAAT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call Doxygen with the code's doxyfile, to generate initial (RTF) document. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v GetHandleByTitle\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:GetHandleByTitle} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b IntPtr DocSrc.frmDocSrc.GetHandleByTitle (string {\i wName}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAU} {\bkmkend AAAAAAAAAU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Returns the handle to the first window, whose title contains wName. Case-insensitive. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i wName} \cell }{Part or all of the desired window's title\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The requested handle, or zero.\par }}} {\xe \v GetTimestamp\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:GetTimestamp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b string DocSrc.frmDocSrc.GetTimestamp (string {\i format} = {\f2 ""yyyy-MM-DD_HH-mm-ss""}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAV} {\bkmkend AAAAAAAAAV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Returns a timestamp, used for ensuring new file names are unique. In practice this wont be called more than once a second. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i format} \cell }{Optional format.\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid Formatted timestamp.\par }}} {\xe \v LoadStateFile\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:LoadStateFile} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.LoadStateFile (string {\i file}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAW} {\bkmkend AAAAAAAAAW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Load a previous state of the form from an XML file. From: HERE}}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i file} \cell }{XML file name to load from.\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v LoginDoors\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:LoginDoors} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.LoginDoors (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAX} {\bkmkend AAAAAAAAAX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 2 on running DOORS <todo>To Be automated in the future.</todo> }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v myCallBack\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:myCallBack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int DocSrc.frmDocSrc.myCallBack (IntPtr {\i text}, int {\i pos_in_text}, int {\i bCharSet}, int {\i action}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAY} {\bkmkend AAAAAAAAAY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For character-wrapping (NOT word-wrapping) in the pseudo-console From: HERE}}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v ObjectStateUpdated\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:ObjectStateUpdated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.ObjectStateUpdated (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAZ} {\bkmkend AAAAAAAAAZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If any of the checkboxes/textboxes we care about changes, update doc. Unless DISABLE_OBJECT_STATE_UPDATED is true, then don't update. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid This is typically set true when the object values are being changed (like when loaded), to avoid interfering with that. \par} }} {\xe \v OpenRtfInWord\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:OpenRtfInWord} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.OpenRtfInWord (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABA} {\bkmkend AAAAAAAABA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open the RTF document in Word. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v OpenRTFWord\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:OpenRTFWord} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.OpenRTFWord (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABB} {\bkmkend AAAAAAAABB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Open RTF file in Word, ignoring ""Convert File"" prompt, saving as a Word .DOCX file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v openToolStripMenuItem_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:openToolStripMenuItem_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.openToolStripMenuItem_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABC} {\bkmkend AAAAAAAABC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Load a previous state of the form from an XML file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v OpenWordApp\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:OpenWordApp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.OpenWordApp (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABD} {\bkmkend AAAAAAAABD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create the internal Word application, used to load RTF/DOCX files and call DOORS. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v OutputHandler\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:OutputHandler} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.OutputHandler (Object {\i source}, DataReceivedEventArgs {\i outLine}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABE} {\bkmkend AAAAAAAABE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Mimics the colorized Command Prompt, designed to show the user what is happening with the various commands which are run. Specific strings are checked for to set the line colorings, defaulting to a darker gray. HERE}}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i source} \cell }{The executing application/process.\cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i outLine} \cell }{the current ouptut line from source, to display on pseudo console\cell } {\row } } }} {\xe \v PostProcessRTF\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:PostProcessRTF} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.PostProcessRTF (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABF} {\bkmkend AAAAAAAABF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call {\b CleanRtfFile()} to removed undesired sections from the generated RTF file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v RebuildSolution\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:RebuildSolution} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.RebuildSolution (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABG} {\bkmkend AAAAAAAABG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Call MSBuild.exe to rebuild the solution file, and log the results to the pseudo console. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v RunDoors\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:RunDoors} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.RunDoors (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABH} {\bkmkend AAAAAAAABH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 1 on running DOORS <todo>To Be automated in the future.</todo> }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v saveAsToolStripMenuItem_Click\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:saveAsToolStripMenuItem_Click} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.saveAsToolStripMenuItem_Click (object {\i sender}, EventArgs {\i e}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABI} {\bkmkend AAAAAAAABI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the current state of the form to an XML file, name chosen by user. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v SaveRtfAsDocx\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SaveRtfAsDocx} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.SaveRtfAsDocx (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABJ} {\bkmkend AAAAAAAABJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the opened document as DOCX, for imput to DOORS. Prompt if failure and desire to try again. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v SaveStateFile\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SaveStateFile} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.SaveStateFile (string {\i file}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABK} {\bkmkend AAAAAAAABK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Save the current state of the form to an XML file. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i file} \cell }{XML file name to save as.\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v SendCommandToPseudoConsole\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SendCommandToPseudoConsole} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.SendCommandToPseudoConsole (string {\i fileName}, string {\i arguments}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABL} {\bkmkend AAAAAAAABL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run command with arguments, display results on the pseudo console. Block other steps from running while this completes, with {\b WaitWhileOtherStepRuns()} and {\b SetNoLongerRunning()}. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i fileName} \cell }{Command/executable file to run.\cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i arguments} \cell }{Arguments/parameters to the executable.\cell } {\row } } }} {\xe \v SendMessage\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SendMessage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b static IntPtr DocSrc.frmDocSrc.SendMessage (IntPtr {\i hwnd}, uint {\i message}, IntPtr {\i wParam}, IntPtr {\i lParam}){\f2 [static]}, {\f2 [private]}}} \par {\bkmkstart AAAAAAAABM} {\bkmkend AAAAAAAABM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid } {\xe \v SetDoorsLocation\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SetDoorsLocation} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.SetDoorsLocation (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABN} {\bkmkend AAAAAAAABN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid MessageBox displaying step 3 on running DOORS <todo>To Be automated in the future.</todo> }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/False whether successful.\par }}} {\xe \v SetForegroundWindow\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SetForegroundWindow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b static bool DocSrc.frmDocSrc.SetForegroundWindow (IntPtr {\i hwnd}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABO} {\bkmkend AAAAAAAABO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid } {\xe \v SetForegroundWindow\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SetForegroundWindow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool DocSrc.frmDocSrc.SetForegroundWindow (string {\i wName}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABP} {\bkmkend AAAAAAAABP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the first window, whose title contains wName. Case-insensitive. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i wName} \cell }{Part or all of the desired window's title\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid True/false whether was able to find and set the desired window to the front.\par }}} {\xe \v SetNoLongerRunning\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:SetNoLongerRunning} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.SetNoLongerRunning (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABQ} {\bkmkend AAAAAAAABQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set RUNNING to false, alert if it was already false }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v WaitWhileOtherStepRuns\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:WaitWhileOtherStepRuns} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.WaitWhileOtherStepRuns (){\f2 [private]}}} \par {\bkmkstart AAAAAAAABR} {\bkmkend AAAAAAAABR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid if another process is running, wait here until it completes todo: probably need to have some sort of timeout feature }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }} {\xe \v WriteToPseudoConsole\:DocSrc::frmDocSrc} {\xe \v DocSrc::frmDocSrc\:WriteToPseudoConsole} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void DocSrc.frmDocSrc.WriteToPseudoConsole (string {\i str}, Color {\i color}){\f2 [private]}}} \par {\bkmkstart AAAAAAAABS} {\bkmkend AAAAAAAABS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Add colored text lines to the pseudo-console. Auto scrolls to the end. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i str} \cell }{New text line to add to the pseudo-console.\cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i color} \cell }{Color of the new text to add to the pseudo-console.\cell } {\row } } }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid }"; Match m = Regex.Match(input, pattern); Console.WriteLine("'{0}' found at index {1}", m.Value, m.Index); } }

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx