├── image.png ├── mdEditor.ico ├── image_code.png ├── markdownlogo.png ├── .gitignore ├── .github └── FUNDING.yml ├── README.md ├── mdEditor.lpr ├── Test.md ├── mdEditor.lpi ├── LICENSE ├── mainformu.pas └── mainformu.lfm /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mriscoc/mdEditor/HEAD/image.png -------------------------------------------------------------------------------- /mdEditor.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mriscoc/mdEditor/HEAD/mdEditor.ico -------------------------------------------------------------------------------- /image_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mriscoc/mdEditor/HEAD/image_code.png -------------------------------------------------------------------------------- /markdownlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mriscoc/mdEditor/HEAD/markdownlogo.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | backup 2 | lib 3 | resources 4 | images 5 | *.bak 6 | *.exe 7 | *.lps 8 | *.res 9 | *.ico 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ["https://www.paypal.com/donate/?business=85SPAAR6UZEE8","https://link.mercadopago.com.pe/mriscoc"] 2 | patreon: mriscoc 3 | github: [mriscoc] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | mdEditor 2 | ======== 3 | Basic Markdown editor with syntax highlight. 4 | 5 | image 6 | 7 | -------------------------------------------------------------------------------- /mdEditor.lpr: -------------------------------------------------------------------------------- 1 | program mdEditor; 2 | 3 | {$mode objfpc}{$H+} 4 | 5 | uses 6 | {$IFDEF UNIX}{$IFDEF UseCThreads} 7 | cthreads, 8 | {$ENDIF}{$ENDIF} 9 | Interfaces, // this includes the LCL widgetset 10 | Forms, mainformu; 11 | 12 | {$R *.res} 13 | 14 | begin 15 | Application.Scaled:=True; 16 | Application.Initialize; 17 | Application.CreateForm(TMainForm, MainForm); 18 | Application.Run; 19 | end. 20 | 21 | -------------------------------------------------------------------------------- /Test.md: -------------------------------------------------------------------------------- 1 | Markdown support test 2 | ===================== 3 | 4 | ![Markdown logo](markdownlogo.png) 5 | 6 | This page is a small demonstration of Markdown support. 7 | 8 | From [CommonMark]: 9 | >Markdown is a plain text format for writing structured documents, 10 | >based on conventions for indicating formatting in email and Usenet posts. 11 | >It was developed by John Gruber (with help from Aaron Swartz) 12 | >and released in 2004 in the form of a syntax description and a 13 | >Perl script (Markdown.pl) for converting Markdown to HTML. 14 | >In the next decade, dozens of implementations were developed in many languages. 15 | 16 | [CommonMark]:http://spec.commonmark.org/0.28/ 17 | 18 | *Italic* or _Italic_ 19 | **Bold** or __Bold__ 20 | 21 | `` 22 | ~~Strike~~ 23 | ++Ins++ 24 | Subscript~text~ 25 | Superscript^text^ 26 | ==Mark== 27 | 28 | Tables 29 | ------ 30 | | First Header | Second Header | Third Header | 31 | | :----------- | :-----------: | -----------: | 32 | | Left | Center | Right | 33 | | Second row | **strong** | *italic* | 34 | 35 | Formulas 36 | -------- 37 | It is possible to use the [Google Chart API] using `TeX` language, 38 | but the translated formula can only to be seen using a browser, 39 | for insert a formula using `TeX` enclose the code between `$` 40 | without `spaces`: 41 | 42 | Quadratic formula |Zeta formula 43 | ---------------------------|----------------------------- 44 | $x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$ | $\zeta(s)=\sum_{n=1}^\infty\frac{1}{n^s}$ 45 | 46 | [Google Chart API]:https://developers.google.com/chart/infographics/docs/formulas 47 | 48 | 49 | -------------------------------------------------------------------------------- /mdEditor.lpi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | <Scaled Value="True"/> 13 | <ResourceType Value="res"/> 14 | <UseXPManifest Value="True"/> 15 | <XPManifest> 16 | <DpiAware Value="True"/> 17 | <LongPathAware Value="True"/> 18 | <AnsiUTF8 Value="True"/> 19 | <TextName Value="mriscoc.mdeditor"/> 20 | <TextDesc Value="Simple Markdown editor"/> 21 | </XPManifest> 22 | <Icon Value="0"/> 23 | </General> 24 | <VersionInfo> 25 | <UseVersionInfo Value="True"/> 26 | <MajorVersionNr Value="1"/> 27 | <MinorVersionNr Value="9"/> 28 | <RevisionNr Value="1"/> 29 | <BuildNr Value="1"/> 30 | <StringTable CompanyName="MRiscoC" LegalCopyright="(c) 2018-2025 Miguel Risco-Castillo" ProductName="Markdown Editor"/> 31 | </VersionInfo> 32 | <BuildModes Count="3"> 33 | <Item1 Name="Default" Default="True"/> 34 | <Item2 Name="Debug"> 35 | <CompilerOptions> 36 | <Version Value="11"/> 37 | <PathDelim Value="\"/> 38 | <Target> 39 | <Filename Value="$Env(PRJOUT)\$NameOnly($(ProjFile))\$NameOnly($(ProjFile))"/> 40 | </Target> 41 | <SearchPaths> 42 | <IncludeFiles Value="$(ProjOutDir)"/> 43 | <UnitOutputDirectory Value="$Env(Temp)\lazarus\lib\$(TargetCPU)-$(TargetOS)"/> 44 | </SearchPaths> 45 | <Parsing> 46 | <SyntaxOptions> 47 | <IncludeAssertionCode Value="True"/> 48 | </SyntaxOptions> 49 | </Parsing> 50 | <CodeGeneration> 51 | <Checks> 52 | <IOChecks Value="True"/> 53 | <RangeChecks Value="True"/> 54 | <OverflowChecks Value="True"/> 55 | <StackChecks Value="True"/> 56 | </Checks> 57 | <VerifyObjMethodCallValidity Value="True"/> 58 | <Optimizations> 59 | <OptimizationLevel Value="0"/> 60 | </Optimizations> 61 | </CodeGeneration> 62 | <Linking> 63 | <Debugging> 64 | <DebugInfoType Value="dsDwarf2Set"/> 65 | <UseHeaptrc Value="True"/> 66 | <TrashVariables Value="True"/> 67 | <UseExternalDbgSyms Value="True"/> 68 | </Debugging> 69 | <Options> 70 | <Win32> 71 | <GraphicApplication Value="True"/> 72 | </Win32> 73 | </Options> 74 | </Linking> 75 | <Other> 76 | <CustomOptions Value="-dDEBUG"/> 77 | <OtherDefines Count="1"> 78 | <Define0 Value="DEBUG"/> 79 | </OtherDefines> 80 | <CompilerPath Value="D:\fpcup\fpc\bin\i386-win32\fpc.exe"/> 81 | </Other> 82 | </CompilerOptions> 83 | </Item2> 84 | <Item3 Name="Release"> 85 | <CompilerOptions> 86 | <Version Value="11"/> 87 | <PathDelim Value="\"/> 88 | <Target> 89 | <Filename Value="$Env(PRJOUT)\$NameOnly($(ProjFile))\$NameOnly($(ProjFile))"/> 90 | </Target> 91 | <SearchPaths> 92 | <IncludeFiles Value="$(ProjOutDir)"/> 93 | <UnitOutputDirectory Value="$Env(Temp)\lazarus\lib\$(TargetCPU)-$(TargetOS)"/> 94 | </SearchPaths> 95 | <CodeGeneration> 96 | <SmartLinkUnit Value="True"/> 97 | <Optimizations> 98 | <OptimizationLevel Value="3"/> 99 | </Optimizations> 100 | </CodeGeneration> 101 | <Linking> 102 | <Debugging> 103 | <GenerateDebugInfo Value="False"/> 104 | <StripSymbols Value="True"/> 105 | </Debugging> 106 | <LinkSmart Value="True"/> 107 | <Options> 108 | <Win32> 109 | <GraphicApplication Value="True"/> 110 | </Win32> 111 | </Options> 112 | </Linking> 113 | <Other> 114 | <OtherDefines Count="1"> 115 | <Define0 Value="DEBUG"/> 116 | </OtherDefines> 117 | </Other> 118 | </CompilerOptions> 119 | </Item3> 120 | </BuildModes> 121 | <PublishOptions> 122 | <Version Value="2"/> 123 | <DestinationDirectory Value="D:\Users\Miguel\Documents\Trabajos\for_GIT\mdEditor"/> 124 | </PublishOptions> 125 | <RunParams> 126 | <FormatVersion Value="2"/> 127 | <Modes Count="1"> 128 | <Mode0 Name="default"/> 129 | </Modes> 130 | </RunParams> 131 | <RequiredPackages Count="9"> 132 | <Item1> 133 | <PackageName Value="ExtraHighlighters_Dsgn"/> 134 | </Item1> 135 | <Item2> 136 | <PackageName Value="ExtraHighlighters"/> 137 | </Item2> 138 | <Item3> 139 | <PackageName Value="SynEditDsgn"/> 140 | </Item3> 141 | <Item4> 142 | <PackageName Value="BGRABitmapPack"/> 143 | </Item4> 144 | <Item5> 145 | <PackageName Value="laz_synapse"/> 146 | </Item5> 147 | <Item6> 148 | <PackageName Value="FrameViewer09"/> 149 | </Item6> 150 | <Item7> 151 | <PackageName Value="SynEdit"/> 152 | </Item7> 153 | <Item8> 154 | <PackageName Value="fpc_markdown"/> 155 | </Item8> 156 | <Item9> 157 | <PackageName Value="LCL"/> 158 | </Item9> 159 | </RequiredPackages> 160 | <Units Count="2"> 161 | <Unit0> 162 | <Filename Value="mdEditor.lpr"/> 163 | <IsPartOfProject Value="True"/> 164 | </Unit0> 165 | <Unit1> 166 | <Filename Value="mainformu.pas"/> 167 | <IsPartOfProject Value="True"/> 168 | <ComponentName Value="MainForm"/> 169 | <HasResources Value="True"/> 170 | <ResourceBaseClass Value="Form"/> 171 | </Unit1> 172 | </Units> 173 | </ProjectOptions> 174 | <CompilerOptions> 175 | <Version Value="11"/> 176 | <PathDelim Value="\"/> 177 | <Target> 178 | <Filename Value="$Env(PRJOUT)\$NameOnly($(ProjFile))\$NameOnly($(ProjFile))"/> 179 | </Target> 180 | <SearchPaths> 181 | <IncludeFiles Value="$(ProjOutDir)"/> 182 | <UnitOutputDirectory Value="$Env(Temp)\lazarus\lib\$(TargetCPU)-$(TargetOS)"/> 183 | </SearchPaths> 184 | <Linking> 185 | <Options> 186 | <Win32> 187 | <GraphicApplication Value="True"/> 188 | </Win32> 189 | </Options> 190 | </Linking> 191 | <Other> 192 | <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> 193 | <OtherDefines Count="1"> 194 | <Define0 Value="DEBUG"/> 195 | </OtherDefines> 196 | </Other> 197 | </CompilerOptions> 198 | <Debugging> 199 | <Exceptions Count="3"> 200 | <Item1> 201 | <Name Value="EAbort"/> 202 | </Item1> 203 | <Item2> 204 | <Name Value="ECodetoolError"/> 205 | </Item2> 206 | <Item3> 207 | <Name Value="EFOpenError"/> 208 | </Item3> 209 | </Exceptions> 210 | </Debugging> 211 | </CONFIG> 212 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /mainformu.pas: -------------------------------------------------------------------------------- 1 | unit mainformu; 2 | 3 | interface 4 | 5 | uses 6 | Classes, SysUtils, LazFileUtils, SynEdit, SynHighlighterHTML, 7 | SynExportHTMLCSS, SynEditTypes, SynHighlighterPas, SynHighlighterCpp, 8 | dbugintf, SynHighlighterJScript, SynHighlighterJava, SynHighlighterXML, 9 | synhighlighterunixshellscript, SynPopupMenu, Forms, Controls, Graphics, 10 | Dialogs, StdCtrls, ExtCtrls, Clipbrd, MarkdownProcessor, MarkdownUtils, 11 | LCLIntf, ComCtrls, Buttons, StrUtils, HtmlView, HtmlGlobals, HTMLUn2, 12 | SynHighlighterVHDL, SynHighlighterJSON, SynHighlighterSmali, 13 | SynHighlighterMarkdown, SynHighlighterRuby, SynEditMarkupHighAll, 14 | SynHighlighterCss, SynHighlighterPython, ssl_openssl, httpsend, 15 | BGRABitmap, BGRASvg, IniPropStorage, Menus, ActnList, FileCtrl; 16 | 17 | type 18 | 19 | { TMainForm } 20 | 21 | TMainForm = class(TForm) 22 | A_SearchFind: TAction; 23 | A_SaveFile: TAction; 24 | A_OpenFile: TAction; 25 | A_SaveAs: TAction; 26 | A_CopyAll: TAction; 27 | A_Paste: TAction; 28 | A_Convert: TAction; 29 | A_View: TAction; 30 | ActionList1: TActionList; 31 | B_Convert: TBitBtn; 32 | B_Copy: TBitBtn; 33 | B_OpenFile: TBitBtn; 34 | B_Paste: TBitBtn; 35 | B_Find: TBitBtn; 36 | B_Save: TBitBtn; 37 | B_ViewBrowser: TBitBtn; 38 | ChkB_DownloadfromWeb: TCheckBox; 39 | FindDialog1: TFindDialog; 40 | HtmlViewer: THtmlViewer; 41 | ImageList1: TImageList; 42 | IniPropStorage1: TIniPropStorage; 43 | CopyHTLMViewer: TMenuItem; 44 | M_SearchFind: TMenuItem; 45 | OpenDialog1: TOpenDialog; 46 | PageControl1: TPageControl; 47 | Panel1: TPanel; 48 | PopupMenu1: TPopupMenu; 49 | SaveDialog1: TSaveDialog; 50 | SE_MarkDown: TSynEdit; 51 | SE_HTML: TSynEdit; 52 | Splitter1: TSplitter; 53 | SynCppSyn1: TSynCppSyn; 54 | SynCssSyn1: TSynCssSyn; 55 | SynFreePascalSyn1: TSynFreePascalSyn; 56 | SynHTMLSyn1: TSynHTMLSyn; 57 | SynJavaSyn1: TSynJavaSyn; 58 | SynJScriptSyn1: TSynJScriptSyn; 59 | SynJSONSyn1: TSynJSONSyn; 60 | SynMarkdownSyn1: TSynMarkdownSyn; 61 | SynPopupMenu1: TSynPopupMenu; 62 | SynPythonSyn1: TSynPythonSyn; 63 | SynRubySyn1: TSynRubySyn; 64 | SynSmaliSyn1: TSynSmaliSyn; 65 | SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn; 66 | SynVHDLSyn1: TSynVHDLSyn; 67 | SynXMLSyn1: TSynXMLSyn; 68 | TS_MarkDown: TTabSheet; 69 | TS_HTML: TTabSheet; 70 | SynExporter: TSynExporterHTMLCSS; 71 | procedure A_SearchFindExecute(Sender: TObject); 72 | procedure HtmlViewerEnter(Sender: TObject); 73 | procedure onFind(Sender: TObject); 74 | procedure B_CopyClick(Sender: TObject); 75 | procedure B_PasteClick(Sender: TObject); 76 | procedure B_ViewBrowserClick(Sender: TObject); 77 | procedure B_OpenFileClick(Sender: TObject); 78 | procedure B_ConvertClick(Sender: TObject); 79 | procedure B_SaveAsClick(Sender: TObject); 80 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 81 | procedure FormCreate(Sender: TObject); 82 | procedure FormDestroy(Sender: TObject); 83 | procedure HtmlViewerHotSpotClick(Sender: TObject; const SRC: ThtString; 84 | var Handled: Boolean); 85 | procedure HtmlViewerHotSpotTargetClick(Sender: TObject; const Target, 86 | URL: ThtString; var Handled: boolean); 87 | procedure HtmlViewerImageRequest(Sender: TObject; const SRC: ThtString; 88 | var Stream: TStream); 89 | procedure CopyHTLMViewerClick(Sender: TObject); 90 | procedure A_SaveFileExecute(Sender: TObject); 91 | procedure PageControl1Enter(Sender: TObject); 92 | procedure SE_HTMLChange(Sender: TObject); 93 | procedure SE_MarkDownChange(Sender: TObject); 94 | private 95 | procedure CheckParams; 96 | function getStreamData(Path: TFileName): TStream; 97 | function OpenFile(Path: TFileName): boolean; 98 | function SaveAs: boolean; 99 | procedure SaveToFile; 100 | procedure OpenInBrowser; 101 | procedure SetPreview; 102 | end; 103 | 104 | { TCodeEmiter } 105 | 106 | TCodeEmiter = class(TBlockEmitter) 107 | public 108 | procedure emitBlock(out_: TStringBuilder; lines: TStringList; meta: String); override; 109 | end; 110 | 111 | var 112 | MainForm: TMainForm; 113 | 114 | implementation 115 | 116 | {$R *.lfm} 117 | 118 | var 119 | RootPath,f,FileName:TFileName; 120 | md:TMarkdownProcessor=nil; 121 | MStream:TMemoryStream=nil; 122 | SynMarkup: TSynEditMarkupHighlightAllCaret; 123 | PreviousFocusedControl:TWinControl=nil; 124 | 125 | const 126 | CSSDecoration = '<style type="text/css">'#10+ 127 | 'Blockquote{'#10+ 128 | ' border-left: 3px solid #d0d0d0;'#10+ 129 | ' padding-left: 0.5em;'#10+ 130 | ' margin-left:1em;'#10+ 131 | '}'#10+ 132 | 'Blockquote p{'#10+ 133 | ' margin: 0;'#10+ 134 | '}'#10+ 135 | 'table{'#10+ 136 | ' border:1px solid;'#10+ 137 | ' border-collapse:collapse;'#10+ 138 | '}'#10+ 139 | 'th{'#10+ 140 | ' padding:5px;'#10+ 141 | ' background: #e0e0e0;'#10+ 142 | ' border:1px solid;'#10+ 143 | '}'#10+ 144 | 'td{'#10+ 145 | ' padding:5px;'#10+ 146 | ' border:1px solid;'#10+ 147 | '}'#10+ 148 | 'pre{'#10+ 149 | ' background: #f4f4f4;'#10+ 150 | ' border: 1px solid #ddd;'#10+ 151 | ' border-left: 3px solid #f36d33;'#10+ 152 | ' padding: 1em 1.5em;'#10+ 153 | '}'#10+ 154 | 'code{'#10+ 155 | ' font-size: 14px;'#10+ 156 | ' font-family: "Courier New";'#10+ 157 | ' color: #A00;'#10+ 158 | '}'#10+ 159 | '</style>'#10; 160 | 161 | { TCodeEmiter } 162 | 163 | procedure TCodeEmiter.emitBlock(out_: TStringBuilder; lines: TStringList; 164 | meta: String); 165 | var 166 | s:string; 167 | 168 | procedure exportlines; 169 | var 170 | sstream: TStringStream; 171 | begin 172 | MainForm.SynExporter.ExportAll(lines); 173 | try 174 | sstream:=TStringStream.Create(''); 175 | MainForm.SynExporter.SaveToStream(sstream); 176 | out_.Append(sstream.DataString); 177 | finally 178 | if assigned(sstream) then freeandnil(sstream); 179 | end; 180 | end; 181 | 182 | begin 183 | case meta of 184 | 'vhdl': MainForm.SynExporter.Highlighter:=MainForm.SynVHDLSyn1; 185 | 'html': MainForm.SynExporter.Highlighter:=MainForm.SynHTMLSyn1; 186 | 'js','jscript','javascript': MainForm.SynExporter.Highlighter:=MainForm.SynJScriptSyn1; 187 | 'java': MainForm.SynExporter.Highlighter:=MainForm.SynJavaSyn1; 188 | 'json': MainForm.SynExporter.Highlighter:=MainForm.SynJSONSyn1; 189 | 'fpc','pas','pascal': MainForm.SynExporter.Highlighter:=MainForm.SynFreePascalSyn1; 190 | 'cmd','shell','bash': MainForm.SynExporter.Highlighter:=MainForm.SynUNIXShellScriptSyn1; 191 | 'cpp','c++','c': MainForm.SynExporter.Highlighter:=MainForm.SynCppSyn1; 192 | 'css': MainForm.SynExporter.Highlighter:=MainForm.SynCssSyn1; 193 | 'xml': MainForm.SynExporter.Highlighter:=MainForm.SynXMLSyn1; 194 | 'markdown','md': MainForm.SynExporter.Highlighter:=MainForm.SynMarkdownSyn1; 195 | 'ruby': MainForm.SynExporter.Highlighter:=MainForm.SynRubySyn1; 196 | 'python', 'py': MainForm.SynExporter.Highlighter:=MainForm.SynPythonSyn1; 197 | 'smali': MainForm.SynExporter.Highlighter:=MainForm.SynSmaliSyn1; 198 | else 199 | begin 200 | if meta='' then out_.append('<pre><code>') 201 | else out_.append('<pre><code class="'+meta+'">'); 202 | for s in lines do 203 | begin 204 | TUtils.appendValue(out_,s,0,Length(s)); 205 | out_.append(#10); 206 | end; 207 | out_.append('</code></pre>'#10); 208 | exit; 209 | end; 210 | end; 211 | MainForm.SynExporter.CodeClass:=meta; 212 | exportlines; 213 | end; 214 | 215 | 216 | { TMainForm } 217 | 218 | procedure TMainForm.SetPreview; 219 | begin 220 | if SE_HTML.Modified then 221 | begin 222 | HtmlViewer.LoadFromString(SE_HTML.Text); 223 | SE_HTML.Modified:=false; 224 | end; 225 | end; 226 | 227 | procedure TMainForm.B_ConvertClick(Sender: TObject); 228 | begin 229 | SE_HTML.Text:=CSSDecoration+md.process(SE_MarkDown.Text); 230 | SE_HTML.Modified:=true; 231 | SetPreview; 232 | end; 233 | 234 | procedure TMainForm.SaveToFile; 235 | begin 236 | try 237 | SE_MarkDown.Lines.SaveToFile(FileName); 238 | SE_MarkDown.Modified:=false; 239 | SE_MarkDownChange(self); 240 | except on E: Exception do 241 | ShowMessage('Can not save the file: '+E.Message); 242 | end; 243 | end; 244 | 245 | function TMainForm.SaveAs:boolean; 246 | begin 247 | SaveDialog1.InitialDir:=ExtractFilePath(FileName); 248 | SaveDialog1.FileName:=ExtractFileName(FileName); 249 | if savedialog1.Execute then 250 | begin 251 | FileName:=savedialog1.FileName; 252 | SaveToFile; 253 | result:=true; 254 | end else 255 | result:=false; 256 | end; 257 | 258 | procedure TMainForm.B_SaveAsClick(Sender: TObject); 259 | begin 260 | PageControl1.ActivePageIndex:=0; 261 | SaveAs; 262 | end; 263 | 264 | procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 265 | var 266 | response : Integer; 267 | begin 268 | CanClose := not SE_MarkDown.Modified; 269 | If not CanClose then 270 | begin 271 | response := MessageDlg( 272 | 'Do you want to save changes?', 273 | mtConfirmation, 274 | [mbYes, mbNo, mbCancel], 275 | 0); 276 | case response of 277 | mrYes: CanClose := SaveAs; 278 | mrNo: CanClose := true; 279 | mrCancel: CanClose := false; 280 | end; 281 | end; 282 | end; 283 | 284 | procedure TMainForm.FormCreate(Sender: TObject); 285 | var 286 | i:integer; 287 | begin 288 | FileName := 'untitled.md'; 289 | MStream := TMemoryStream.Create; 290 | SynExporter:= TSynExporterHTMLCSS.Create(Mainform); 291 | SynExporter.Options:= SynExporter.Options + [heoFragmentOnly]; 292 | md := TMarkdownProcessor.createDialect(mdCommonMark); 293 | md.UnSafe := false; 294 | md.config.codeBlockEmitter:=TCodeEmiter.Create; 295 | RootPath:=GetTempDir; 296 | I:=0; 297 | Repeat 298 | f:=Format('%s%.3d.html',['markdown',I]); 299 | Inc(I); 300 | Until not FileExists(RootPath+f); 301 | SynMarkup := TSynEditMarkupHighlightAllCaret(SE_MarkDown.MarkupByClass[TSynEditMarkupHighlightAllCaret]); 302 | SynMarkup.MarkupInfo.Background := clSkyBlue; 303 | SynMarkup.WaitTime := 1000; // ms 304 | SynMarkup.Trim := True; 305 | SynMarkup.FullWord:= True; 306 | PageControl1.ActivePageIndex:=0; 307 | HtmlViewer.DefBackground:=clWhite; 308 | HtmlViewer.DefFontColor:=clBlack; 309 | HtmlViewer.DefFontName:='Helvetica'; 310 | HtmlViewer.DefFontSize:=10; 311 | HtmlViewer.DefPreFontName:='Courier'; 312 | HtmlViewer.ServerRoot:=RootPath; 313 | // HtmlViewer.OnHotSpotTargetClick:=@HtmlViewerHotSpotTargetClick; 314 | HtmlViewer.OnHotSpotClick:=@HtmlViewerHotSpotClick; 315 | HtmlViewer.OnImageRequest:=@HtmlViewerImageRequest; 316 | HtmlViewer.LoadFromString(CSSDecoration); 317 | PreviousFocusedControl := PageControl1.ActivePage; 318 | CheckParams; 319 | end; 320 | 321 | procedure TMainForm.CheckParams; 322 | begin 323 | If (ParamCount=1) and FileExists(ParamStr(1)) then OpenFile(ParamStr(1)); 324 | end; 325 | 326 | procedure TMainForm.FormDestroy(Sender: TObject); 327 | begin 328 | if FileExists(RootPath+f) then DeleteFile(RootPath+f); 329 | if assigned(md) then md.Free; 330 | if Assigned(MStream) then freeandnil(MStream); 331 | end; 332 | 333 | procedure TMainForm.HtmlViewerHotSpotClick(Sender: TObject; 334 | const SRC: ThtString; var Handled: Boolean); 335 | begin 336 | Handled:=OpenUrl(SRC); 337 | end; 338 | 339 | procedure TMainForm.HtmlViewerHotSpotTargetClick(Sender: TObject; 340 | const Target, URL: ThtString; var Handled: boolean); 341 | begin 342 | Handled:=OpenUrl(URL); 343 | end; 344 | 345 | procedure ConvertSVG(FileName:string); 346 | var 347 | bmp: TBGRABitmap; 348 | svg: TBGRASVG; 349 | begin 350 | if (pos('.svg',lowercase(FileName))>0) then 351 | begin 352 | try 353 | MStream.Position:=0; 354 | svg:= TBGRASVG.Create(MStream); 355 | try 356 | bmp:=TBGRABitmap.Create(trunc(svg.Width.value),trunc(svg.Height.value)); 357 | svg.Draw(bmp.Canvas2D,0,0); 358 | MStream.Clear; 359 | bmp.Bitmap.SaveToStream(MStream); 360 | finally 361 | if assigned(bmp) then FreeAndNil(bmp); 362 | end; 363 | finally 364 | if assigned(svg) then FreeAndNil(svg); 365 | end; 366 | end; 367 | end; 368 | 369 | function TMainForm.getStreamData(Path: TFileName):TStream; 370 | var 371 | sl : TStringList; 372 | bFail : Boolean; 373 | bTryAgain : Boolean; 374 | Begin 375 | Result:=nil; 376 | MStream.Clear; 377 | with THTTPSend.Create do 378 | Begin 379 | sl := TStringList.Create; 380 | if HTTPMethod('GET',Path) then 381 | Begin 382 | MStream.CopyFrom(Document, 0); 383 | // Need To check For Failed Retrieval... 384 | MStream.Position:= 0; 385 | sl.LoadFromStream(MStream); 386 | bTryAgain := False; 387 | bFail := False; 388 | if Length(sl.Text) = 0 then bFail:= True; 389 | if MStream.Size = 0 then bFail:= True; 390 | 391 | if MStream.Size < 1024 then 392 | Begin 393 | if Pos('not found', LowerCase(sl.Text)) > 0 then bFail:= True; 394 | if (Pos('<title>301 moved permanently', LowerCase(sl.Text)) > 0) or 395 | (Pos('', LowerCase(sl.Text)) > 0) then 396 | Begin 397 | if Pos('RootPath then 534 | begin 535 | SE_HTML.Clear; 536 | HtmlViewer.Clear; 537 | if FileExists(RootPath+f) then DeleteFile(RootPath+f); 538 | HtmlViewer.ServerRoot:=NewPath; 539 | RootPath:=NewPath; 540 | end; 541 | FileName:=Path; 542 | SE_MarkDownChange(self); 543 | PageControl1.ActivePageIndex:=0; 544 | Result:=true; 545 | except 546 | Result:=false; 547 | end; 548 | end; 549 | 550 | procedure TMainForm.B_OpenFileClick(Sender: TObject); 551 | var CanClose:boolean; 552 | begin 553 | CanClose:= false; 554 | FormCloseQuery(self, CanClose); 555 | if CanClose and OpenDialog1.Execute then OpenFile(OpenDialog1.FileName); 556 | end; 557 | 558 | procedure TMainForm.OpenInBrowser; 559 | var p:string; 560 | begin 561 | p:=IfThen(DirectoryIsWritable(RootPath),RootPath+f,GetTempDir+f); 562 | try 563 | SE_HTML.Lines.SaveToFile(p); 564 | OpenURL(p); 565 | except 566 | ShowMessage('Can not create and open the temp file'); 567 | end; 568 | end; 569 | 570 | 571 | end. 572 | 573 | -------------------------------------------------------------------------------- /mainformu.lfm: -------------------------------------------------------------------------------- 1 | object MainForm: TMainForm 2 | Left = 0 3 | Height = 721 4 | Top = 0 5 | Width = 982 6 | Caption = 'Simple Markdown Editor' 7 | ClientHeight = 721 8 | ClientWidth = 982 9 | Constraints.MinHeight = 288 10 | Constraints.MinWidth = 662 11 | DesignTimePPI = 120 12 | SessionProperties = 'Height;Left;PageControl1.Width;Top;Width' 13 | LCLVersion = '4.3.0.0' 14 | OnCloseQuery = FormCloseQuery 15 | OnCreate = FormCreate 16 | OnDestroy = FormDestroy 17 | object Panel1: TPanel 18 | Left = 0 19 | Height = 42 20 | Top = 0 21 | Width = 982 22 | Align = alTop 23 | AutoSize = True 24 | ChildSizing.LeftRightSpacing = 5 25 | ChildSizing.TopBottomSpacing = 5 26 | ChildSizing.HorizontalSpacing = 2 27 | ChildSizing.VerticalSpacing = 5 28 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 29 | ChildSizing.ControlsPerLine = 7 30 | ClientHeight = 42 31 | ClientWidth = 982 32 | TabOrder = 0 33 | object B_OpenFile: TBitBtn 34 | Left = 6 35 | Height = 30 36 | Top = 6 37 | Width = 109 38 | Action = A_OpenFile 39 | Default = True 40 | Images = ImageList1 41 | ImageIndex = 0 42 | TabOrder = 0 43 | OnClick = B_OpenFileClick 44 | end 45 | object B_Save: TBitBtn 46 | Left = 117 47 | Height = 30 48 | Top = 6 49 | Width = 122 50 | Action = A_SaveAs 51 | Images = ImageList1 52 | ImageIndex = 1 53 | TabOrder = 1 54 | end 55 | object B_Find: TBitBtn 56 | Left = 241 57 | Height = 30 58 | Top = 6 59 | Width = 83 60 | Action = A_SearchFind 61 | Images = ImageList1 62 | ImageIndex = 6 63 | TabOrder = 7 64 | end 65 | object B_Copy: TBitBtn 66 | Left = 326 67 | Height = 30 68 | Top = 6 69 | Width = 102 70 | Action = A_CopyAll 71 | Images = ImageList1 72 | ImageIndex = 2 73 | TabOrder = 2 74 | OnClick = B_CopyClick 75 | end 76 | object B_Paste: TBitBtn 77 | Left = 430 78 | Height = 30 79 | Top = 6 80 | Width = 80 81 | Action = A_Paste 82 | Images = ImageList1 83 | ImageIndex = 3 84 | TabOrder = 3 85 | OnClick = B_PasteClick 86 | end 87 | object B_Convert: TBitBtn 88 | Left = 512 89 | Height = 30 90 | Top = 6 91 | Width = 97 92 | Action = A_Convert 93 | Images = ImageList1 94 | ImageIndex = 4 95 | TabOrder = 4 96 | OnClick = B_ConvertClick 97 | end 98 | object B_ViewBrowser: TBitBtn 99 | Left = 611 100 | Height = 30 101 | Top = 6 102 | Width = 151 103 | Action = A_View 104 | Images = ImageList1 105 | ImageIndex = 5 106 | TabOrder = 5 107 | OnClick = B_ViewBrowserClick 108 | end 109 | object ChkB_DownloadfromWeb: TCheckBox 110 | Left = 808 111 | Height = 30 112 | Top = 6 113 | Width = 161 114 | Align = alRight 115 | BorderSpacing.Right = 12 116 | Caption = 'Download from Web' 117 | TabOrder = 6 118 | end 119 | end 120 | object PageControl1: TPageControl 121 | Left = 0 122 | Height = 679 123 | Top = 42 124 | Width = 484 125 | ActivePage = TS_MarkDown 126 | Align = alLeft 127 | PopupMenu = SynPopupMenu1 128 | TabIndex = 0 129 | TabOrder = 1 130 | OnEnter = PageControl1Enter 131 | object TS_MarkDown: TTabSheet 132 | Caption = 'MarkDown' 133 | ClientHeight = 646 134 | ClientWidth = 476 135 | inline SE_MarkDown: TSynEdit 136 | Left = 0 137 | Height = 646 138 | Top = 0 139 | Width = 476 140 | Align = alClient 141 | Font.Height = -16 142 | Font.Name = 'Courier New' 143 | Font.Pitch = fpFixed 144 | Font.Quality = fqNonAntialiased 145 | ParentColor = False 146 | ParentFont = False 147 | PopupMenu = SynPopupMenu1 148 | TabOrder = 0 149 | Gutter.Width = 72 150 | Gutter.MouseActions = <> 151 | RightGutter.Width = 0 152 | RightGutter.MouseActions = <> 153 | Highlighter = SynMarkdownSyn1 154 | Keystrokes = < 155 | item 156 | Command = ecUp 157 | ShortCut = 38 158 | end 159 | item 160 | Command = ecSelUp 161 | ShortCut = 8230 162 | end 163 | item 164 | Command = ecScrollUp 165 | ShortCut = 16422 166 | end 167 | item 168 | Command = ecDown 169 | ShortCut = 40 170 | end 171 | item 172 | Command = ecSelDown 173 | ShortCut = 8232 174 | end 175 | item 176 | Command = ecScrollDown 177 | ShortCut = 16424 178 | end 179 | item 180 | Command = ecLeft 181 | ShortCut = 37 182 | end 183 | item 184 | Command = ecSelLeft 185 | ShortCut = 8229 186 | end 187 | item 188 | Command = ecWordLeft 189 | ShortCut = 16421 190 | end 191 | item 192 | Command = ecSelWordLeft 193 | ShortCut = 24613 194 | end 195 | item 196 | Command = ecRight 197 | ShortCut = 39 198 | end 199 | item 200 | Command = ecSelRight 201 | ShortCut = 8231 202 | end 203 | item 204 | Command = ecWordRight 205 | ShortCut = 16423 206 | end 207 | item 208 | Command = ecSelWordRight 209 | ShortCut = 24615 210 | end 211 | item 212 | Command = ecPageDown 213 | ShortCut = 34 214 | end 215 | item 216 | Command = ecSelPageDown 217 | ShortCut = 8226 218 | end 219 | item 220 | Command = ecPageBottom 221 | ShortCut = 16418 222 | end 223 | item 224 | Command = ecSelPageBottom 225 | ShortCut = 24610 226 | end 227 | item 228 | Command = ecPageUp 229 | ShortCut = 33 230 | end 231 | item 232 | Command = ecSelPageUp 233 | ShortCut = 8225 234 | end 235 | item 236 | Command = ecPageTop 237 | ShortCut = 16417 238 | end 239 | item 240 | Command = ecSelPageTop 241 | ShortCut = 24609 242 | end 243 | item 244 | Command = ecLineStart 245 | ShortCut = 36 246 | end 247 | item 248 | Command = ecSelLineStart 249 | ShortCut = 8228 250 | end 251 | item 252 | Command = ecEditorTop 253 | ShortCut = 16420 254 | end 255 | item 256 | Command = ecSelEditorTop 257 | ShortCut = 24612 258 | end 259 | item 260 | Command = ecLineEnd 261 | ShortCut = 35 262 | end 263 | item 264 | Command = ecSelLineEnd 265 | ShortCut = 8227 266 | end 267 | item 268 | Command = ecEditorBottom 269 | ShortCut = 16419 270 | end 271 | item 272 | Command = ecSelEditorBottom 273 | ShortCut = 24611 274 | end 275 | item 276 | Command = ecToggleMode 277 | ShortCut = 45 278 | end 279 | item 280 | Command = ecCopy 281 | ShortCut = 16429 282 | end 283 | item 284 | Command = ecPaste 285 | ShortCut = 8237 286 | end 287 | item 288 | Command = ecDeleteChar 289 | ShortCut = 46 290 | end 291 | item 292 | Command = ecCut 293 | ShortCut = 8238 294 | end 295 | item 296 | Command = ecDeleteLastChar 297 | ShortCut = 8 298 | end 299 | item 300 | Command = ecDeleteLastChar 301 | ShortCut = 8200 302 | end 303 | item 304 | Command = ecDeleteLastWord 305 | ShortCut = 16392 306 | end 307 | item 308 | Command = ecUndo 309 | ShortCut = 32776 310 | end 311 | item 312 | Command = ecRedo 313 | ShortCut = 40968 314 | end 315 | item 316 | Command = ecLineBreak 317 | ShortCut = 13 318 | end 319 | item 320 | Command = ecSelectAll 321 | ShortCut = 16449 322 | end 323 | item 324 | Command = ecCopy 325 | ShortCut = 16451 326 | end 327 | item 328 | Command = ecBlockIndent 329 | ShortCut = 24649 330 | end 331 | item 332 | Command = ecLineBreak 333 | ShortCut = 16461 334 | end 335 | item 336 | Command = ecInsertLine 337 | ShortCut = 16462 338 | end 339 | item 340 | Command = ecDeleteWord 341 | ShortCut = 16468 342 | end 343 | item 344 | Command = ecBlockUnindent 345 | ShortCut = 24661 346 | end 347 | item 348 | Command = ecPaste 349 | ShortCut = 16470 350 | end 351 | item 352 | Command = ecCut 353 | ShortCut = 16472 354 | end 355 | item 356 | Command = ecDeleteLine 357 | ShortCut = 16473 358 | end 359 | item 360 | Command = ecDeleteEOL 361 | ShortCut = 24665 362 | end 363 | item 364 | Command = ecUndo 365 | ShortCut = 16474 366 | end 367 | item 368 | Command = ecRedo 369 | ShortCut = 24666 370 | end 371 | item 372 | Command = ecGotoMarker0 373 | ShortCut = 16432 374 | end 375 | item 376 | Command = ecGotoMarker1 377 | ShortCut = 16433 378 | end 379 | item 380 | Command = ecGotoMarker2 381 | ShortCut = 16434 382 | end 383 | item 384 | Command = ecGotoMarker3 385 | ShortCut = 16435 386 | end 387 | item 388 | Command = ecGotoMarker4 389 | ShortCut = 16436 390 | end 391 | item 392 | Command = ecGotoMarker5 393 | ShortCut = 16437 394 | end 395 | item 396 | Command = ecGotoMarker6 397 | ShortCut = 16438 398 | end 399 | item 400 | Command = ecGotoMarker7 401 | ShortCut = 16439 402 | end 403 | item 404 | Command = ecGotoMarker8 405 | ShortCut = 16440 406 | end 407 | item 408 | Command = ecGotoMarker9 409 | ShortCut = 16441 410 | end 411 | item 412 | Command = ecSetMarker0 413 | ShortCut = 24624 414 | end 415 | item 416 | Command = ecSetMarker1 417 | ShortCut = 24625 418 | end 419 | item 420 | Command = ecSetMarker2 421 | ShortCut = 24626 422 | end 423 | item 424 | Command = ecSetMarker3 425 | ShortCut = 24627 426 | end 427 | item 428 | Command = ecSetMarker4 429 | ShortCut = 24628 430 | end 431 | item 432 | Command = ecSetMarker5 433 | ShortCut = 24629 434 | end 435 | item 436 | Command = ecSetMarker6 437 | ShortCut = 24630 438 | end 439 | item 440 | Command = ecSetMarker7 441 | ShortCut = 24631 442 | end 443 | item 444 | Command = ecSetMarker8 445 | ShortCut = 24632 446 | end 447 | item 448 | Command = ecSetMarker9 449 | ShortCut = 24633 450 | end 451 | item 452 | Command = EcFoldLevel1 453 | ShortCut = 41009 454 | end 455 | item 456 | Command = EcFoldLevel2 457 | ShortCut = 41010 458 | end 459 | item 460 | Command = EcFoldLevel3 461 | ShortCut = 41011 462 | end 463 | item 464 | Command = EcFoldLevel4 465 | ShortCut = 41012 466 | end 467 | item 468 | Command = EcFoldLevel5 469 | ShortCut = 41013 470 | end 471 | item 472 | Command = EcFoldLevel6 473 | ShortCut = 41014 474 | end 475 | item 476 | Command = EcFoldLevel7 477 | ShortCut = 41015 478 | end 479 | item 480 | Command = EcFoldLevel8 481 | ShortCut = 41016 482 | end 483 | item 484 | Command = EcFoldLevel9 485 | ShortCut = 41017 486 | end 487 | item 488 | Command = EcFoldLevel0 489 | ShortCut = 41008 490 | end 491 | item 492 | Command = EcFoldCurrent 493 | ShortCut = 41005 494 | end 495 | item 496 | Command = EcUnFoldCurrent 497 | ShortCut = 41003 498 | end 499 | item 500 | Command = EcToggleMarkupWord 501 | ShortCut = 32845 502 | end 503 | item 504 | Command = ecNormalSelect 505 | ShortCut = 24654 506 | end 507 | item 508 | Command = ecColumnSelect 509 | ShortCut = 24643 510 | end 511 | item 512 | Command = ecLineSelect 513 | ShortCut = 24652 514 | end 515 | item 516 | Command = ecTab 517 | ShortCut = 9 518 | end 519 | item 520 | Command = ecShiftTab 521 | ShortCut = 8201 522 | end 523 | item 524 | Command = ecMatchBracket 525 | ShortCut = 24642 526 | end 527 | item 528 | Command = ecColSelUp 529 | ShortCut = 40998 530 | end 531 | item 532 | Command = ecColSelDown 533 | ShortCut = 41000 534 | end 535 | item 536 | Command = ecColSelLeft 537 | ShortCut = 40997 538 | end 539 | item 540 | Command = ecColSelRight 541 | ShortCut = 40999 542 | end 543 | item 544 | Command = ecColSelPageDown 545 | ShortCut = 40994 546 | end 547 | item 548 | Command = ecColSelPageBottom 549 | ShortCut = 57378 550 | end 551 | item 552 | Command = ecColSelPageUp 553 | ShortCut = 40993 554 | end 555 | item 556 | Command = ecColSelPageTop 557 | ShortCut = 57377 558 | end 559 | item 560 | Command = ecColSelLineStart 561 | ShortCut = 40996 562 | end 563 | item 564 | Command = ecColSelLineEnd 565 | ShortCut = 40995 566 | end 567 | item 568 | Command = ecColSelEditorTop 569 | ShortCut = 57380 570 | end 571 | item 572 | Command = ecColSelEditorBottom 573 | ShortCut = 57379 574 | end> 575 | MouseActions = <> 576 | MouseTextActions = <> 577 | MouseSelActions = <> 578 | Options = [eoAutoIndent, eoBracketHighlight, eoGroupUndo, eoShowSpecialChars, eoSmartTabs, eoTabsToSpaces] 579 | MouseOptions = [emAltSetsColumnMode] 580 | VisibleSpecialChars = [vscSpace, vscTabAtLast] 581 | ScrollBars = ssAutoBoth 582 | SelectedColor.BackPriority = 50 583 | SelectedColor.ForePriority = 50 584 | SelectedColor.FramePriority = 50 585 | SelectedColor.BoldPriority = 50 586 | SelectedColor.ItalicPriority = 50 587 | SelectedColor.UnderlinePriority = 50 588 | SelectedColor.StrikeOutPriority = 50 589 | BracketHighlightStyle = sbhsBoth 590 | BracketMatchColor.Background = clNone 591 | BracketMatchColor.Foreground = clNone 592 | BracketMatchColor.Style = [fsBold] 593 | FoldedCodeColor.Background = clNone 594 | FoldedCodeColor.Foreground = clGray 595 | FoldedCodeColor.FrameColor = clGray 596 | MouseLinkColor.Background = clNone 597 | MouseLinkColor.Foreground = clBlue 598 | LineHighlightColor.Background = clCream 599 | LineHighlightColor.Foreground = clNone 600 | TabWidth = 4 601 | OnChange = SE_MarkDownChange 602 | inline SynLeftGutterPartList1: TSynGutterPartList 603 | object SynGutterMarks1: TSynGutterMarks 604 | Width = 30 605 | MouseActions = <> 606 | MaxExtraMarksColums = 0 607 | Options = [sgmoDeDuplicateMarksOnOverflow] 608 | MarkupInfo.Background = clBtnFace 609 | MarkupInfo.Foreground = clNone 610 | end 611 | object SynGutterLineNumber1: TSynGutterLineNumber 612 | Width = 21 613 | MouseActions = <> 614 | MarkupInfo.Background = clBtnFace 615 | MarkupInfo.Foreground = clNone 616 | DigitCount = 2 617 | ShowOnlyLineNumbersMultiplesOf = 1 618 | ZeroStart = False 619 | LeadingZeros = False 620 | end 621 | object SynGutterChanges1: TSynGutterChanges 622 | Width = 5 623 | MouseActions = <> 624 | ModifiedColor = 59900 625 | SavedColor = clGreen 626 | MarkupInfo.Background = clNone 627 | MarkupInfo.Foreground = clGreen 628 | MarkupInfo.FrameColor = 59900 629 | end 630 | object SynGutterSeparator1: TSynGutterSeparator 631 | Width = 3 632 | MouseActions = <> 633 | MarkupInfo.Background = clWhite 634 | MarkupInfo.Foreground = clGray 635 | end 636 | object SynGutterCodeFolding1: TSynGutterCodeFolding 637 | Width = 13 638 | MouseActions = <> 639 | MarkupInfo.Background = clNone 640 | MarkupInfo.Foreground = clGray 641 | MouseActionsExpanded = <> 642 | MouseActionsCollapsed = <> 643 | end 644 | end 645 | end 646 | end 647 | object TS_HTML: TTabSheet 648 | Caption = 'HTML' 649 | ClientHeight = 646 650 | ClientWidth = 476 651 | inline SE_HTML: TSynEdit 652 | Left = 0 653 | Height = 646 654 | Top = 0 655 | Width = 476 656 | Align = alClient 657 | Font.Height = -16 658 | Font.Name = 'Courier New' 659 | Font.Pitch = fpFixed 660 | Font.Quality = fqNonAntialiased 661 | ParentColor = False 662 | ParentFont = False 663 | PopupMenu = SynPopupMenu1 664 | TabOrder = 0 665 | Gutter.Width = 72 666 | Gutter.MouseActions = <> 667 | RightGutter.Width = 0 668 | RightGutter.MouseActions = <> 669 | Highlighter = SynHTMLSyn1 670 | Keystrokes = < 671 | item 672 | Command = ecUp 673 | ShortCut = 38 674 | end 675 | item 676 | Command = ecSelUp 677 | ShortCut = 8230 678 | end 679 | item 680 | Command = ecScrollUp 681 | ShortCut = 16422 682 | end 683 | item 684 | Command = ecDown 685 | ShortCut = 40 686 | end 687 | item 688 | Command = ecSelDown 689 | ShortCut = 8232 690 | end 691 | item 692 | Command = ecScrollDown 693 | ShortCut = 16424 694 | end 695 | item 696 | Command = ecLeft 697 | ShortCut = 37 698 | end 699 | item 700 | Command = ecSelLeft 701 | ShortCut = 8229 702 | end 703 | item 704 | Command = ecWordLeft 705 | ShortCut = 16421 706 | end 707 | item 708 | Command = ecSelWordLeft 709 | ShortCut = 24613 710 | end 711 | item 712 | Command = ecRight 713 | ShortCut = 39 714 | end 715 | item 716 | Command = ecSelRight 717 | ShortCut = 8231 718 | end 719 | item 720 | Command = ecWordRight 721 | ShortCut = 16423 722 | end 723 | item 724 | Command = ecSelWordRight 725 | ShortCut = 24615 726 | end 727 | item 728 | Command = ecPageDown 729 | ShortCut = 34 730 | end 731 | item 732 | Command = ecSelPageDown 733 | ShortCut = 8226 734 | end 735 | item 736 | Command = ecPageBottom 737 | ShortCut = 16418 738 | end 739 | item 740 | Command = ecSelPageBottom 741 | ShortCut = 24610 742 | end 743 | item 744 | Command = ecPageUp 745 | ShortCut = 33 746 | end 747 | item 748 | Command = ecSelPageUp 749 | ShortCut = 8225 750 | end 751 | item 752 | Command = ecPageTop 753 | ShortCut = 16417 754 | end 755 | item 756 | Command = ecSelPageTop 757 | ShortCut = 24609 758 | end 759 | item 760 | Command = ecLineStart 761 | ShortCut = 36 762 | end 763 | item 764 | Command = ecSelLineStart 765 | ShortCut = 8228 766 | end 767 | item 768 | Command = ecEditorTop 769 | ShortCut = 16420 770 | end 771 | item 772 | Command = ecSelEditorTop 773 | ShortCut = 24612 774 | end 775 | item 776 | Command = ecLineEnd 777 | ShortCut = 35 778 | end 779 | item 780 | Command = ecSelLineEnd 781 | ShortCut = 8227 782 | end 783 | item 784 | Command = ecEditorBottom 785 | ShortCut = 16419 786 | end 787 | item 788 | Command = ecSelEditorBottom 789 | ShortCut = 24611 790 | end 791 | item 792 | Command = ecToggleMode 793 | ShortCut = 45 794 | end 795 | item 796 | Command = ecCopy 797 | ShortCut = 16429 798 | end 799 | item 800 | Command = ecPaste 801 | ShortCut = 8237 802 | end 803 | item 804 | Command = ecDeleteChar 805 | ShortCut = 46 806 | end 807 | item 808 | Command = ecCut 809 | ShortCut = 8238 810 | end 811 | item 812 | Command = ecDeleteLastChar 813 | ShortCut = 8 814 | end 815 | item 816 | Command = ecDeleteLastChar 817 | ShortCut = 8200 818 | end 819 | item 820 | Command = ecDeleteLastWord 821 | ShortCut = 16392 822 | end 823 | item 824 | Command = ecUndo 825 | ShortCut = 32776 826 | end 827 | item 828 | Command = ecRedo 829 | ShortCut = 40968 830 | end 831 | item 832 | Command = ecLineBreak 833 | ShortCut = 13 834 | end 835 | item 836 | Command = ecSelectAll 837 | ShortCut = 16449 838 | end 839 | item 840 | Command = ecCopy 841 | ShortCut = 16451 842 | end 843 | item 844 | Command = ecBlockIndent 845 | ShortCut = 24649 846 | end 847 | item 848 | Command = ecLineBreak 849 | ShortCut = 16461 850 | end 851 | item 852 | Command = ecInsertLine 853 | ShortCut = 16462 854 | end 855 | item 856 | Command = ecDeleteWord 857 | ShortCut = 16468 858 | end 859 | item 860 | Command = ecBlockUnindent 861 | ShortCut = 24661 862 | end 863 | item 864 | Command = ecPaste 865 | ShortCut = 16470 866 | end 867 | item 868 | Command = ecCut 869 | ShortCut = 16472 870 | end 871 | item 872 | Command = ecDeleteLine 873 | ShortCut = 16473 874 | end 875 | item 876 | Command = ecDeleteEOL 877 | ShortCut = 24665 878 | end 879 | item 880 | Command = ecUndo 881 | ShortCut = 16474 882 | end 883 | item 884 | Command = ecRedo 885 | ShortCut = 24666 886 | end 887 | item 888 | Command = ecGotoMarker0 889 | ShortCut = 16432 890 | end 891 | item 892 | Command = ecGotoMarker1 893 | ShortCut = 16433 894 | end 895 | item 896 | Command = ecGotoMarker2 897 | ShortCut = 16434 898 | end 899 | item 900 | Command = ecGotoMarker3 901 | ShortCut = 16435 902 | end 903 | item 904 | Command = ecGotoMarker4 905 | ShortCut = 16436 906 | end 907 | item 908 | Command = ecGotoMarker5 909 | ShortCut = 16437 910 | end 911 | item 912 | Command = ecGotoMarker6 913 | ShortCut = 16438 914 | end 915 | item 916 | Command = ecGotoMarker7 917 | ShortCut = 16439 918 | end 919 | item 920 | Command = ecGotoMarker8 921 | ShortCut = 16440 922 | end 923 | item 924 | Command = ecGotoMarker9 925 | ShortCut = 16441 926 | end 927 | item 928 | Command = ecSetMarker0 929 | ShortCut = 24624 930 | end 931 | item 932 | Command = ecSetMarker1 933 | ShortCut = 24625 934 | end 935 | item 936 | Command = ecSetMarker2 937 | ShortCut = 24626 938 | end 939 | item 940 | Command = ecSetMarker3 941 | ShortCut = 24627 942 | end 943 | item 944 | Command = ecSetMarker4 945 | ShortCut = 24628 946 | end 947 | item 948 | Command = ecSetMarker5 949 | ShortCut = 24629 950 | end 951 | item 952 | Command = ecSetMarker6 953 | ShortCut = 24630 954 | end 955 | item 956 | Command = ecSetMarker7 957 | ShortCut = 24631 958 | end 959 | item 960 | Command = ecSetMarker8 961 | ShortCut = 24632 962 | end 963 | item 964 | Command = ecSetMarker9 965 | ShortCut = 24633 966 | end 967 | item 968 | Command = EcFoldLevel1 969 | ShortCut = 41009 970 | end 971 | item 972 | Command = EcFoldLevel2 973 | ShortCut = 41010 974 | end 975 | item 976 | Command = EcFoldLevel3 977 | ShortCut = 41011 978 | end 979 | item 980 | Command = EcFoldLevel4 981 | ShortCut = 41012 982 | end 983 | item 984 | Command = EcFoldLevel5 985 | ShortCut = 41013 986 | end 987 | item 988 | Command = EcFoldLevel6 989 | ShortCut = 41014 990 | end 991 | item 992 | Command = EcFoldLevel7 993 | ShortCut = 41015 994 | end 995 | item 996 | Command = EcFoldLevel8 997 | ShortCut = 41016 998 | end 999 | item 1000 | Command = EcFoldLevel9 1001 | ShortCut = 41017 1002 | end 1003 | item 1004 | Command = EcFoldLevel0 1005 | ShortCut = 41008 1006 | end 1007 | item 1008 | Command = EcFoldCurrent 1009 | ShortCut = 41005 1010 | end 1011 | item 1012 | Command = EcUnFoldCurrent 1013 | ShortCut = 41003 1014 | end 1015 | item 1016 | Command = EcToggleMarkupWord 1017 | ShortCut = 32845 1018 | end 1019 | item 1020 | Command = ecNormalSelect 1021 | ShortCut = 24654 1022 | end 1023 | item 1024 | Command = ecColumnSelect 1025 | ShortCut = 24643 1026 | end 1027 | item 1028 | Command = ecLineSelect 1029 | ShortCut = 24652 1030 | end 1031 | item 1032 | Command = ecTab 1033 | ShortCut = 9 1034 | end 1035 | item 1036 | Command = ecShiftTab 1037 | ShortCut = 8201 1038 | end 1039 | item 1040 | Command = ecMatchBracket 1041 | ShortCut = 24642 1042 | end 1043 | item 1044 | Command = ecColSelUp 1045 | ShortCut = 40998 1046 | end 1047 | item 1048 | Command = ecColSelDown 1049 | ShortCut = 41000 1050 | end 1051 | item 1052 | Command = ecColSelLeft 1053 | ShortCut = 40997 1054 | end 1055 | item 1056 | Command = ecColSelRight 1057 | ShortCut = 40999 1058 | end 1059 | item 1060 | Command = ecColSelPageDown 1061 | ShortCut = 40994 1062 | end 1063 | item 1064 | Command = ecColSelPageBottom 1065 | ShortCut = 57378 1066 | end 1067 | item 1068 | Command = ecColSelPageUp 1069 | ShortCut = 40993 1070 | end 1071 | item 1072 | Command = ecColSelPageTop 1073 | ShortCut = 57377 1074 | end 1075 | item 1076 | Command = ecColSelLineStart 1077 | ShortCut = 40996 1078 | end 1079 | item 1080 | Command = ecColSelLineEnd 1081 | ShortCut = 40995 1082 | end 1083 | item 1084 | Command = ecColSelEditorTop 1085 | ShortCut = 57380 1086 | end 1087 | item 1088 | Command = ecColSelEditorBottom 1089 | ShortCut = 57379 1090 | end> 1091 | MouseActions = <> 1092 | MouseTextActions = <> 1093 | MouseSelActions = <> 1094 | Options = [eoAutoIndent, eoBracketHighlight, eoGroupUndo, eoSmartTabs, eoTabsToSpaces] 1095 | VisibleSpecialChars = [vscSpace, vscTabAtLast] 1096 | ScrollBars = ssAutoBoth 1097 | SelectedColor.BackPriority = 50 1098 | SelectedColor.ForePriority = 50 1099 | SelectedColor.FramePriority = 50 1100 | SelectedColor.BoldPriority = 50 1101 | SelectedColor.ItalicPriority = 50 1102 | SelectedColor.UnderlinePriority = 50 1103 | SelectedColor.StrikeOutPriority = 50 1104 | BracketHighlightStyle = sbhsBoth 1105 | BracketMatchColor.Background = clNone 1106 | BracketMatchColor.Foreground = clNone 1107 | BracketMatchColor.Style = [fsBold] 1108 | FoldedCodeColor.Background = clNone 1109 | FoldedCodeColor.Foreground = clGray 1110 | FoldedCodeColor.FrameColor = clGray 1111 | MouseLinkColor.Background = clNone 1112 | MouseLinkColor.Foreground = clBlue 1113 | LineHighlightColor.Background = clNone 1114 | LineHighlightColor.Foreground = clNone 1115 | OnChange = SE_HTMLChange 1116 | inline SynLeftGutterPartList1: TSynGutterPartList 1117 | object SynGutterMarks1: TSynGutterMarks 1118 | Width = 30 1119 | MouseActions = <> 1120 | MaxExtraMarksColums = 0 1121 | Options = [sgmoDeDuplicateMarksOnOverflow] 1122 | MarkupInfo.Background = clBtnFace 1123 | MarkupInfo.Foreground = clNone 1124 | end 1125 | object SynGutterLineNumber1: TSynGutterLineNumber 1126 | Width = 21 1127 | MouseActions = <> 1128 | MarkupInfo.Background = clBtnFace 1129 | MarkupInfo.Foreground = clNone 1130 | DigitCount = 2 1131 | ShowOnlyLineNumbersMultiplesOf = 1 1132 | ZeroStart = False 1133 | LeadingZeros = False 1134 | end 1135 | object SynGutterChanges1: TSynGutterChanges 1136 | Width = 5 1137 | MouseActions = <> 1138 | ModifiedColor = 59900 1139 | SavedColor = clGreen 1140 | MarkupInfo.Background = clNone 1141 | MarkupInfo.Foreground = clGreen 1142 | MarkupInfo.FrameColor = 59900 1143 | end 1144 | object SynGutterSeparator1: TSynGutterSeparator 1145 | Width = 3 1146 | MouseActions = <> 1147 | MarkupInfo.Background = clWhite 1148 | MarkupInfo.Foreground = clGray 1149 | end 1150 | object SynGutterCodeFolding1: TSynGutterCodeFolding 1151 | Width = 13 1152 | MouseActions = <> 1153 | MarkupInfo.Background = clNone 1154 | MarkupInfo.Foreground = clGray 1155 | MouseActionsExpanded = <> 1156 | MouseActionsCollapsed = <> 1157 | end 1158 | end 1159 | end 1160 | end 1161 | end 1162 | object Splitter1: TSplitter 1163 | Left = 484 1164 | Height = 679 1165 | Top = 42 1166 | Width = 6 1167 | end 1168 | object HtmlViewer: THtmlViewer 1169 | Left = 490 1170 | Height = 679 1171 | Top = 42 1172 | Width = 492 1173 | BorderStyle = htSingle 1174 | DefBackground = clWhite 1175 | HistoryMaxCount = 0 1176 | ImageCacheCount = 10 1177 | NoSelect = False 1178 | PrintMarginBottom = 2 1179 | PrintMarginLeft = 2 1180 | PrintMarginRight = 2 1181 | PrintMarginTop = 2 1182 | PrintScale = 1 1183 | QuirksMode = qmDetect 1184 | Align = alClient 1185 | PopupMenu = PopupMenu1 1186 | TabOrder = 3 1187 | OnEnter = HtmlViewerEnter 1188 | end 1189 | object SynHTMLSyn1: TSynHTMLSyn 1190 | DefaultFilter = 'Documento HTML (*.htm,*.html)|*.htm;*.html' 1191 | Enabled = False 1192 | KeyAttri.Foreground = clMaroon 1193 | KeyAttri.Style = [] 1194 | Left = 392 1195 | Top = 128 1196 | end 1197 | object OpenDialog1: TOpenDialog 1198 | DefaultExt = '.*.md' 1199 | Filter = 'MarkDown|*.md; *.text|TextFile|*.txt|All Files|*.*' 1200 | Options = [ofFileMustExist, ofEnableSizing, ofViewDetail] 1201 | Left = 90 1202 | Top = 140 1203 | end 1204 | object SaveDialog1: TSaveDialog 1205 | DefaultExt = '.*.md' 1206 | Filter = 'MarkDown|*.md;*.text|Text file|*.txt|All files|*.*' 1207 | Options = [ofPathMustExist, ofEnableSizing, ofViewDetail] 1208 | Left = 90 1209 | Top = 230 1210 | end 1211 | object SynFreePascalSyn1: TSynFreePascalSyn 1212 | Enabled = False 1213 | CommentAttri.Foreground = clGreen 1214 | NumberAttri.Foreground = clNavy 1215 | StringAttri.Foreground = clBlue 1216 | SymbolAttri.Foreground = clRed 1217 | CompilerMode = pcmObjFPC 1218 | NestedComments = True 1219 | TypeHelpers = False 1220 | StringMultilineMode = [] 1221 | Left = 392 1222 | Top = 60 1223 | end 1224 | object SynCppSyn1: TSynCppSyn 1225 | DefaultFilter = 'Ficheros C++ (*.c,*.cpp,*.h,*.hpp,*.hh)|*.c;*.cpp;*.h;*.hpp;*.hh' 1226 | Enabled = False 1227 | CommentAttri.Foreground = clGreen 1228 | DirecAttri.Foreground = clNavy 1229 | IdentifierAttri.Foreground = 12615680 1230 | KeyAttri.Foreground = clRed 1231 | NumberAttri.Foreground = clGreen 1232 | StringAttri.Foreground = clBlue 1233 | Left = 392 1234 | Top = 200 1235 | end 1236 | object SynVHDLSyn1: TSynVHDLSyn 1237 | DefaultFilter = 'VHDL Files (*.vhd;*.vhdl)|*.vhd;*.vhdl' 1238 | Enabled = False 1239 | Left = 392 1240 | Top = 272 1241 | end 1242 | object ImageList1: TImageList 1243 | Left = 90 1244 | Top = 330 1245 | Bitmap = { 1246 | 4C7A0700000010000000100000006C0800000000000078DAED996B5094D719C7 1247 | F99074FAC162C0860F4147300CD6D112EFC5D27651D3494B1C302618B9A8C488 1248 | 225A1D05D144E22242101554C098A412C4869B68A222220A2C1188012F542962 1249 | C0DD75D94524DC417145EABFCF73D877B322905DEB4C3A4E77E637FB72DEE7F7 1250 | 9CEB7BF6EC626535F82B6EDF5EC4EDDB23D8BD770F76ED89436CFC6EECD8BD13 1251 | 31BB62111DBB03513B626035949FB017BDBDBD82070F1E40AFD7A3A7A707DDDD 1252 | DDE8E8E8406B6B2BB6C77C3CACFFF0E143819483FDBB77EF1AFDC88FA387F6F7 1253 | 0DEE73FD9D9D9D686B6BC3B6E8A861FC3D43D62FF91151919897A00A7EFBC02D 1254 | 7DC0211D020E6905FC378F99D47F6660FFD9976FDF26620B347DB8D0047C7B07 1255 | 286D04F26FF561D7DE7851A73476F7EFDF177577757519FBBF3532025CEF77E4 1256 | 5610E53FA03F0FB1333E4E3812F7EEDD33F6BDBDBD5DF81F6DEBF78BEAFBF09E 1257 | 68BB6E10B458CAA4D46349B206FE07D558F8A90AA159F508DF2617F7134B3BB1 1258 | E77C87683F53C6FD30F4E59BDB4091B60F67553DC8B9DE86A397B5D89B5F87F8 1259 | 3C2DC223E422F79AAC46E42A7B71DE105F6C40D10014EA1EE1ECAD87C8ADBD8B 1260 | AFAA9A9159A14148E64D145D6B247F2B9650BB96A56A51A8D1A340F340C4E613 1261 | 67883C752F4EABF4C8A9BD87AFFFD58ECCCBB771F85B25961C54A2A1B1095BC8 1262 | F7F95C8D2D271A70FA463B4EDDE8C0C99A4E1C27BEBEDECFB1EA76645F6B41C6 1263 | 25722FA8B1BFA0163E71A5A26EE6ADFD2A7C52A4C1B12B3A645F6940D6E50611 1264 | CBA45F6C405A850EFFF84E8343654A247FF33D361FF95EAC19699DD175138FA7 1265 | DFDF7FC477209FABA89D4AF87CA68467A2EA1E39D656CFE8F565E074F8F8745B 1266 | 0C7BCFCA6FA167C152FEEF3F3BFF6979D6FEE9C2B34362AE3F549EE7D8F7FE6F 1267 | C6AFB8B8F8B941317A74ED356BEB1635D145E888EBC465C21C9FDD86868604B5 1268 | 5A1DBE72E5CA6EA55219AAD56A77554D9E5C638ECFF5B27BE4C891889090901F 1269 | 72727222E9EF8FEAA74FD799E3739B6B6A6A1653DD618E8E8E080B0B5B565757 1270 | B7BAC7D5B5C71C9FFB7BE9D2A5C98B162D8AD5F8FB479FA5F168F4F0486EB4B1 1271 | 6912EF0686F279ACAE529D17895E5B5BFA34EE7F9D3A750AC697A72786F2AF1C 1272 | 3830B32229C9ED02A1B7B3D3488A9B9B9B59BE293D63C6DCE0F0E4E464F8FAFA 1273 | 223636F6A9FCF9F3E7A7A954AA727F7FFF043EF358EA5756568A6AABABABC559 1274 | CC5C5F1914145A4FF33018CFD333F73FBF27D09A36C5227FEDDABF9D193912E7 1275 | 66CE2C297FFDF56AC50B2F3C28A6356EB64FCF11AD9B776A6B6B83E9DC5ECE7B 1276 | CBE9A953AB7FB2CDB4F618F6A5B2FAFAFAD8B2B2B25185AEAE85C3BAF4DC5DF4 1277 | F6AEC84B4B436A6A74CAA64D9B024CFD33D3A6550EE7A705079FA37DA7C2C3C3 1278 | E3E839B91C2792E695E4A5A7BB497ECE6BAF6986F3BF78FFFD9AF31B36DC9A3B 1279 | 77EE95345B5BA89292EA8A693F90FCE39326B50EE7D77CF861DD3A990C95A1A1 1280 | 28A6BD2A77E3C6C8FCFC7C7BC9CF9D3CB96EB8FDDF77E1427C4A7EC94B2F41F1 1281 | E28BFAE2BCBC11A6FD2F9A352BEF09D7D77707E7DDEFED8DC4C4C468A9FCD49B 1282 | 6F9E3B3A7E3C4C391B1414FD3C3D1FB4B5FDACC8698DC9E55646647219AC68FE 1283 | E87313E6FA038B398742A130DB97A50440AE703716733B2CF1AD222220777787 1284 | C2C1814AC8B7B2CC67C7144B7DB9C19190197C7373F0584BF1122929297C3E84 1285 | 8CE6A27F8C2D9F5B763987186399D563F34C0DC7D2A54BF1D36B432EDAC38EE9 1286 | 6D056470777737BB5D5614CB73AC503B188B2DF5650101629EA579B2C4970F98 1287 | 634B7DD98039965BE80F36C78CE96F01050505888989A1339327E6FC89BED77B 1288 | F5C3D75CC6F73866B0DF11688FC6F2E5CBE1E4F80A562C188BDC7817D4664F17 1289 | F03597F13D8EE15853F7C48913D8F05E0096BFFC4BF42C7005D62E073E206203 1290 | 014504D0F105D09884CC7D5E701C638B55AB82C08EE4D379193EBFB5C7CD1923 1291 | 80153EE4AE013CA600EF8E07FEE90F347F0074A7026D3B10B77912FEF03B67B0 1292 | C32E8F81B3B3333ED938115D87670001BF07A21703F90140DE5F801B6F014DAB 1293 | A80DDB81D675682E9F83DD61CEC26197CFC6B6F43977BBDC03B8B30028980B1C 1294 | A07939E745AE2750F167A0C58F5CCAD9F2B688D1964C110EBB9999991849670C 1295 | B42C01BAA8CFDDF47E93BC432E409213B06A14707002A07903E87C87629601BA 1296 | 99C261F7F0E1C3B0B6B6067AA8CFF7D701BDAB013D8D5B33B525615CFF5A1B41 1297 | 848C052ECEA3832CB5A36D8670D84D4D4DEDAFBF6B3DD0B71978B89158DFDF96 1298 | 8333815F19FC577E01CCA11CABFF48B9A709875DC6CECE0ECA2AEAE3BFB7D252 1299 | DB497922892D40FD0A1ACF89C0381BC06534E02703E2BD5059325138EC721B5C 1300 | 5C5CB026E837E8BC4D7522D54012F585CEFCD9D4DF7954E7BA4540D576B4D5BC 1301 | 8BA57EF6C26197C760F1E2C5183B762C42D64E30B4E118719CFC34E064141019 1302 | 0694C689BE05073AC181F66976D8E539888A8A82979717ECEDEDE1F1C6ABB85C 1303 | B2926233683C4F02B99F51BA68F4AA698D79BF2A6238961D76790D646464203C 1304 | 3C1C746682939313468DB2C538071BAC0A188D2DEB1D3063CAAF61F7B28DB8C7 1305 | 311CCB8EF4FC151616223D3D5D947BD31964F6ECD9E23BD3AC59B3047CCD657C 1306 | 8F6338961DD367A8A8A808D9D9D9888B8B43289D9D82828210181828E06B2EE3 1307 | 7B1CC3B19237D47EE1BEFFAF038181C7CA39363FD1DF149862EA8F7FE4FE440E 1308 | C937BC03776F0A4CEA3332BED74D609AC3A47E3CEAAC459F3A43C031CE5DAE43 1309 | 22E590EAED6BAD81FEFA21237CDFA979EA90F875AE143192DFDB5485EE4B078C 1310 | F03DBFE6158FE1A89B24E0EB81F5EB6F5F457BC93E2383F5DF4139017E779689 1311 | EBD2D252D3FEE3BEAE12AD45F183C2F7447B743FBA03FCFE36345E454759E263 1312 | 7099611E879D7FE338B6DD780C2ED36AB568696941565616A47562BAD6865B3F 1313 | ECF0FF3F06E618C67F82C17258E29BE6E0DF009EC697720CD6FE9F93FF005FED 1314 | A351 1315 | } 1316 | end 1317 | object IniPropStorage1: TIniPropStorage 1318 | StoredValues = <> 1319 | Left = 90 1320 | Top = 430 1321 | end 1322 | object SynJScriptSyn1: TSynJScriptSyn 1323 | Enabled = False 1324 | CommentAttri.Foreground = clGray 1325 | IdentifierAttri.Foreground = 12615680 1326 | KeyAttri.Foreground = clRed 1327 | NumberAttri.Foreground = clGreen 1328 | StringAttri.Foreground = clBlue 1329 | Left = 392 1330 | Top = 344 1331 | end 1332 | object SynJSONSyn1: TSynJSONSyn 1333 | DefaultFilter = 'JSON Files (*.json)|*.json' 1334 | Enabled = False 1335 | Left = 392 1336 | Top = 488 1337 | end 1338 | object SynJavaSyn1: TSynJavaSyn 1339 | DefaultFilter = 'Java Files (*.java)|*.java' 1340 | Enabled = False 1341 | Left = 392 1342 | Top = 416 1343 | end 1344 | object SynSmaliSyn1: TSynSmaliSyn 1345 | Enabled = False 1346 | Left = 392 1347 | Top = 560 1348 | end 1349 | object SynXMLSyn1: TSynXMLSyn 1350 | DefaultFilter = 'XML Document (*.xml,*.xsd,*.xsl,*.xslt,*.dtd)|*.xml;*.xsd;*.xsl;*.xslt;*.dtd' 1351 | Enabled = False 1352 | WantBracesParsed = False 1353 | Left = 248 1354 | Top = 128 1355 | end 1356 | object SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn 1357 | DefaultFilter = 'UNIX Shell Scripts (*.sh)|*.sh' 1358 | Enabled = False 1359 | Left = 248 1360 | Top = 60 1361 | end 1362 | object PopupMenu1: TPopupMenu 1363 | Images = ImageList1 1364 | Left = 528 1365 | Top = 64 1366 | object CopyHTLMViewer: TMenuItem 1367 | Caption = 'Copy' 1368 | ImageIndex = 2 1369 | ShortCut = 16451 1370 | OnClick = CopyHTLMViewerClick 1371 | end 1372 | object M_SearchFind: TMenuItem 1373 | Action = A_SearchFind 1374 | end 1375 | end 1376 | object SynPopupMenu1: TSynPopupMenu 1377 | Left = 90 1378 | Top = 64 1379 | end 1380 | object ActionList1: TActionList 1381 | Images = ImageList1 1382 | Left = 248 1383 | Top = 200 1384 | object A_OpenFile: TAction 1385 | Caption = 'Open File' 1386 | ImageIndex = 0 1387 | ShortCut = 16463 1388 | OnExecute = B_OpenFileClick 1389 | end 1390 | object A_SaveFile: TAction 1391 | Caption = 'Save File' 1392 | ImageIndex = 1 1393 | ShortCut = 16467 1394 | OnExecute = A_SaveFileExecute 1395 | end 1396 | object A_SaveAs: TAction 1397 | Caption = 'Save to File' 1398 | ImageIndex = 1 1399 | OnExecute = B_SaveAsClick 1400 | end 1401 | object A_CopyAll: TAction 1402 | Caption = 'Copy All' 1403 | ImageIndex = 2 1404 | OnExecute = B_CopyClick 1405 | end 1406 | object A_Paste: TAction 1407 | Caption = 'Paste' 1408 | ImageIndex = 3 1409 | OnExecute = B_PasteClick 1410 | end 1411 | object A_Convert: TAction 1412 | Caption = 'Convert' 1413 | ImageIndex = 4 1414 | OnExecute = B_ConvertClick 1415 | end 1416 | object A_View: TAction 1417 | Caption = 'View in Browser' 1418 | ImageIndex = 5 1419 | OnExecute = B_ViewBrowserClick 1420 | end 1421 | object A_SearchFind: TAction 1422 | Caption = 'Find...' 1423 | ImageIndex = 6 1424 | ShortCut = 16454 1425 | OnExecute = A_SearchFindExecute 1426 | end 1427 | end 1428 | object SynMarkdownSyn1: TSynMarkdownSyn 1429 | Enabled = False 1430 | CodeBlockAttri.Style = [fsItalic] 1431 | SpaceAttri.Foreground = clSilver 1432 | SpaceAttri.ForePriority = 10 1433 | Left = 392 1434 | Top = 640 1435 | end 1436 | object FindDialog1: TFindDialog 1437 | Options = [frDown, frHideWholeWord, frEntireScope] 1438 | OnFind = onFind 1439 | Left = 624 1440 | Top = 60 1441 | end 1442 | object SynRubySyn1: TSynRubySyn 1443 | Enabled = False 1444 | Left = 248 1445 | Top = 272 1446 | end 1447 | object SynCssSyn1: TSynCssSyn 1448 | DefaultFilter = 'Cascading Stylesheets (*.css)|*.css' 1449 | Enabled = False 1450 | CommentAttri.Foreground = clGreen 1451 | IdentifierAttri.Foreground = 12615680 1452 | KeyAttri.Foreground = clRed 1453 | NumberAttri.Foreground = clGreen 1454 | StringAttri.Foreground = clBlue 1455 | Left = 248 1456 | Top = 344 1457 | end 1458 | object SynPythonSyn1: TSynPythonSyn 1459 | DefaultFilter = 'Python Files (*.py)|*.py' 1460 | Enabled = False 1461 | CommentAttri.Foreground = clGreen 1462 | IdentifierAttri.Foreground = 12615680 1463 | KeyAttri.Foreground = clRed 1464 | Left = 248 1465 | Top = 416 1466 | end 1467 | end 1468 | --------------------------------------------------------------------------------