### 2024-12-20 星期五更新

------
#### SuperDesign    V3.0.2412.2001
- *.[新增]新增程序更新日志设置和自动发布功能。
- *.[修复]修复Post数据格式不正确时双击文本框会导致软件闪退的BUG。
This commit is contained in:
zilinsoft committed 2024-12-20 08:15:19 +08:00
1 parent 03bcb8c5fd
commit 993f1ca1a9
349 files changed
+81977 -13873

No files matched your search

+224
View File
@@ -0,0 +1,224 @@
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 536870912 bytes for G1 virtual space
# Possible reasons:
# The system is out of physical RAM or swap space
# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# JVM is running with Zero Based Compressed Oops mode in which the Java heap is
# placed in the first 32GB address space. The Java Heap base address is the
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
# to set the Java Heap base and to place the Java Heap above 32GB virtual address.
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_windows.cpp:3617), pid=42876, tid=52332
#
# JRE version: (17.0.8.1+1) (build )
# Java VM: OpenJDK 64-Bit Server VM (17.0.8.1+1-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
--------------- S U M M A R Y ------------
Command Line:
Host: Intel(R) Core(TM) i7-10700F CPU @ 2.90GHz, 16 cores, 31G, Windows 11 , 64 bit Build 22621 (10.0.22621.3958)
Time: Fri Sep 6 16:43:48 2024 Windows 11 , 64 bit Build 22621 (10.0.22621.3958) elapsed time: 0.159681 seconds (0d 0h 0m 0s)
--------------- T H R E A D ---------------
Current thread (0x000001c96629bbd0): JavaThread "Unknown thread" [_thread_in_vm, id=52332, stack(0x000000a988100000,0x000000a988200000)]
Stack: [0x000000a988100000,0x000000a988200000]
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x67bf3a]
V [jvm.dll+0x83a024]
V [jvm.dll+0x83b7ce]
V [jvm.dll+0x83be33]
V [jvm.dll+0x24785f]
V [jvm.dll+0x678cb9]
V [jvm.dll+0x66d54a]
V [jvm.dll+0x308feb]
V [jvm.dll+0x310496]
V [jvm.dll+0x36019e]
V [jvm.dll+0x3603cf]
V [jvm.dll+0x2dff38]
V [jvm.dll+0x2e0ea4]
V [jvm.dll+0x80bca1]
V [jvm.dll+0x36df61]
V [jvm.dll+0x7eafac]
V [jvm.dll+0x3f0c8f]
V [jvm.dll+0x3f28a1]
C [jli.dll+0x528f]
C [ucrtbase.dll+0x29333]
C [KERNEL32.DLL+0x1257d]
C [ntdll.dll+0x5af28]
--------------- P R O C E S S ---------------
Threads class SMR info:
_java_thread_list=0x00007fff25743058, length=0, elements={
}
Java Threads: ( => current thread )
Other Threads:
0x000001c966348c10 GCTaskThread "GC Thread#0" [stack: 0x000000a988200000,0x000000a988300000] [id=52740]
0x000001c97f5fc780 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000a988300000,0x000000a988400000] [id=13960]
0x000001c96634dd70 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000a988400000,0x000000a988500000] [id=52328]
[error occurred during error reporting (printing all threads), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007fff24f00927]
VM state: not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
[0x000001c966297310] Heap_lock - owner thread: 0x000001c96629bbd0
Heap address: 0x0000000602000000, size: 8160 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
CDS archive(s) mapped at: [0x0000000000000000-0x0000000000000000-0x0000000000000000), size 0, SharedBaseAddress: 0x0000000800000000, ArchiveRelocationMode: 1.
Narrow klass base: 0x0000000000000000, Narrow klass shift: 0, Narrow klass range: 0x0
GC Precious Log:
<Empty>
Heap:
garbage-first heap total 0K, used 0K [0x0000000602000000, 0x0000000800000000)
region size 4096K, 0 young (0K), 0 survivors (0K)
[error occurred during error reporting (printing heap information), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007fff252e5fc9]
GC Heap History (0 events):
No events
Dll operation events (1 events):
Event: 0.112 Loaded shared library D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\java.dll
Deoptimization events (0 events):
No events
Classes unloaded (0 events):
No events
Classes redefined (0 events):
No events
Internal exceptions (0 events):
No events
VM Operations (0 events):
No events
Events (0 events):
No events
Dynamic libraries:
0x00007ff7a7e60000 - 0x00007ff7a7e6e000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\java.exe
0x00007ff8b9bd0000 - 0x00007ff8b9de7000 C:\Windows\SYSTEM32\ntdll.dll
0x00007ff8b7960000 - 0x00007ff8b7a24000 C:\Windows\System32\KERNEL32.DLL
0x00007ff8b7520000 - 0x00007ff8b78cd000 C:\Windows\System32\KERNELBASE.dll
0x00007ff8b7210000 - 0x00007ff8b7321000 C:\Windows\System32\ucrtbase.dll
0x00007ff86fc20000 - 0x00007ff86fc3b000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\VCRUNTIME140.dll
0x00007ff86d490000 - 0x00007ff86d4a7000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\jli.dll
0x00007ff8b9830000 - 0x00007ff8b99de000 C:\Windows\System32\USER32.dll
0x00007ff8b78d0000 - 0x00007ff8b78f6000 C:\Windows\System32\win32u.dll
0x00007ff8a4950000 - 0x00007ff8a4be3000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.3672_none_2713b9d173822955\COMCTL32.dll
0x00007ff8b9310000 - 0x00007ff8b9339000 C:\Windows\System32\GDI32.dll
0x00007ff8b99e0000 - 0x00007ff8b9a87000 C:\Windows\System32\msvcrt.dll
0x00007ff8b73d0000 - 0x00007ff8b74e9000 C:\Windows\System32\gdi32full.dll
0x00007ff8b7330000 - 0x00007ff8b73ca000 C:\Windows\System32\msvcp_win.dll
0x00007ff8b7eb0000 - 0x00007ff8b7ee1000 C:\Windows\System32\IMM32.DLL
0x00007ff86d480000 - 0x00007ff86d48c000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\vcruntime140_1.dll
0x00007fffde290000 - 0x00007fffde31d000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\msvcp140.dll
0x00007fff24c10000 - 0x00007fff25875000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\server\jvm.dll
0x00007ff8b7b50000 - 0x00007ff8b7c02000 C:\Windows\System32\ADVAPI32.dll
0x00007ff8b90a0000 - 0x00007ff8b9149000 C:\Windows\System32\sechost.dll
0x00007ff8b74f0000 - 0x00007ff8b7518000 C:\Windows\System32\bcrypt.dll
0x00007ff8b83e0000 - 0x00007ff8b84f4000 C:\Windows\System32\RPCRT4.dll
0x00007ff8b6c10000 - 0x00007ff8b6c5d000 C:\Windows\SYSTEM32\POWRPROF.dll
0x00007ff8970b0000 - 0x00007ff8970b9000 C:\Windows\SYSTEM32\WSOCK32.dll
0x00007ff8a3190000 - 0x00007ff8a31c4000 C:\Windows\SYSTEM32\WINMM.dll
0x00007ff8b8fd0000 - 0x00007ff8b9041000 C:\Windows\System32\WS2_32.dll
0x00007ff8b1e70000 - 0x00007ff8b1e7a000 C:\Windows\SYSTEM32\VERSION.dll
0x00007ff8b6bf0000 - 0x00007ff8b6c03000 C:\Windows\SYSTEM32\UMPDC.dll
0x00007ff8b5f40000 - 0x00007ff8b5f58000 C:\Windows\SYSTEM32\kernel.appcore.dll
0x00007ff81c320000 - 0x00007ff81c32a000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\jimage.dll
0x00007ff8b4750000 - 0x00007ff8b4982000 C:\Windows\SYSTEM32\DBGHELP.DLL
0x00007ff8b9340000 - 0x00007ff8b96ce000 C:\Windows\System32\combase.dll
0x00007ff8b7dd0000 - 0x00007ff8b7ea7000 C:\Windows\System32\OLEAUT32.dll
0x00007ff8a3290000 - 0x00007ff8a32c2000 C:\Windows\SYSTEM32\dbgcore.DLL
0x00007ff8b6f60000 - 0x00007ff8b6fdb000 C:\Windows\System32\bcryptPrimitives.dll
0x00007fffde260000 - 0x00007fffde285000 D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\java.dll
dbghelp: loaded successfully - version: 4.0.5 - missing functions: none
symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin;C:\Windows\SYSTEM32;C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.3672_none_2713b9d173822955;D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\server
VM Arguments:
java_command: <unknown>
java_class_path (initial): <not set>
Launcher Type: SUN_STANDARD
[Global flags]
intx CICompilerCount = 12 {product} {ergonomic}
uint ConcGCThreads = 3 {product} {ergonomic}
uint G1ConcRefinementThreads = 13 {product} {ergonomic}
size_t G1HeapRegionSize = 4194304 {product} {ergonomic}
uintx GCDrainStackTargetSize = 64 {product} {ergonomic}
size_t InitialHeapSize = 536870912 {product} {ergonomic}
size_t MarkStackSize = 4194304 {product} {ergonomic}
size_t MaxHeapSize = 8556380160 {product} {ergonomic}
size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic}
size_t MinHeapSize = 8388608 {product} {ergonomic}
uintx NonNMethodCodeHeapSize = 7602480 {pd product} {ergonomic}
uintx NonProfiledCodeHeapSize = 122027880 {pd product} {ergonomic}
uintx ProfiledCodeHeapSize = 122027880 {pd product} {ergonomic}
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
bool SegmentedCodeCache = true {product} {ergonomic}
size_t SoftMaxHeapSize = 8556380160 {manageable} {ergonomic}
bool UseCompressedClassPointers = true {product lp64_product} {ergonomic}
bool UseCompressedOops = true {product lp64_product} {ergonomic}
bool UseG1GC = true {product} {ergonomic}
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
Logging:
Log output configuration:
#0: stdout all=warning uptime,level,tags
#1: stderr all=off uptime,level,tags
Environment Variables:
PATH=D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin;E:\ZenDas\ZenTao\bin\sliksvn;E:\ZenDas\ZenTao\zbox\nssm\win64;D:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;D:\Program Files (x86)\AOMEI\AOMEI Backupper\7.3.2;d:\Program Files (x86)\AOMEI\AOMEI Backupper\7.3.3;C:\Program Files\dotnet\;C:\Program Files\Git\cmd;D:\Program Files\TortoiseGit\bin;C:\Users\Àî·ïöÎ\AppData\Local\Microsoft\WindowsApps;C:\Users\Àî·ïöÎ\.dotnet\tools;C:\Users\Àî·ïöÎ\AppData\Local\Microsoft\WindowsApps;C:\Users\Àî·ïöÎ\.dotnet\tools
USERNAME=Àî·ïöÎ
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 165 Stepping 5, GenuineIntel
TMP=C:\Users\Àî·ïöÎ\AppData\Local\Temp
TEMP=C:\Users\Àî·ïöÎ\AppData\Local\Temp
--------------- S Y S T E M ---------------
OS:
Windows 11 , 64 bit Build 22621 (10.0.22621.3958)
OS uptime: 1 days 1:48 hours
CPU: total 16 (initial active 16) (8 cores per cpu, 2 threads per core) family 6 model 165 stepping 5 microcode 0xf0, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, fma, vzeroupper, clflush, clflushopt
Processor Information for all 16 processors :
Max Mhz: 2904, Current Mhz: 2904, Mhz Limit: 2904
Memory: 4k page, system-wide physical 32636M (11215M free)
TotalPageFile size 32636M (AvailPageFile size 327M)
current process WorkingSet (physical memory assigned to process): 11M, peak: 11M
current process commit charge ("private bytes"): 71M, peak: 583M
vm_info: OpenJDK 64-Bit Server VM (17.0.8.1+1-LTS) for windows-amd64 JRE (17.0.8.1+1-LTS), built on Aug 23 2023 17:38:52 by "MicrosoftCorporation" with MS VC++ 16.10 / 16.11 (VS2019)
END.
Whitespace-only changes.
Binary file not shown.
@@ -0,0 +1,759 @@
{
"Version": 1,
"WorkspaceRootPath": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ryproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ryproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\frmmessagebox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\frmmessagebox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\itrycn_info.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\itrycn_info.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddvar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddvar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\frmfinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\frmfinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddtools.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddtools.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\controls\\frmtitle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\controls\\frmtitle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmuploadprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmuploadprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcreateproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcreateproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 11,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{e506b91c-c606-466a-90a9-123d1d1e12b3}"
},
{
"$type": "Bookmark",
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Bookmark",
"Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "FrmProject.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:39:48.367Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "FrmMainEditor.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ViewState": "AgIAANMDAAAAAAAAAAAewNwDAAAkAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:09:11.981Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "Form1.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ViewState": "AgIAABQAAAAAAAAAAADwvx4AAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T01:58:44.796Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 28,
"Title": "rySearch.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"RelativeDocumentMoniker": "..\\..\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"RelativeToolTip": "..\\..\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"ViewState": "AgIAAC4BAAAAAAAAAAASwDQBAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:35:53.178Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "RyProject.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"ViewState": "AgIAAH4BAAAAAAAAAAA3wH4BAAAbAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T07:22:20.456Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "FrmMessageBox.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:59:33.938Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "FrmProject.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ViewState": "AgIAAAQEAAAAAAAAAAAAAAcEAAAVAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:40:03.384Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "FrmSetting.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:09.902Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "FrmSetting.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ViewState": "AgIAAJEBAAAAAAAAAAAiwKQBAAAxAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:54:23.789Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "Form1.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:59:35.501Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Itrycn_Info.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"ViewState": "AgIAAKoAAAAAAAAAAADwvwEBAAAaAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T06:14:56.613Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "FrmAddVar.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:07.644Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "FindReplace.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ViewState": "AgIAAAABAAAAAAAAAAAvwA4BAAADAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:06:05.327Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "FrmWebGet.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T00:55:51.8Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "FrmFileBrowser.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:04:25.539Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:04:29.698Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "FrmFileBrowser_New.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ViewState": "AgIAANoEAAAAAAAAAAAMwOwEAAAlAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:05:42.087Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "FrmMainEditor.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:09:06.018Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "FindReplaceDialog.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:14.666Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "FrmUploadFilesToFtp.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ViewState": "AgIAAC8AAAAAAAAAAAAvwDIAAAA3AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T07:16:50.608Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:36:42.083Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "FrmUploadUpdateZipToFtp.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAAADMAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:46:17.661Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T07:15:54.077Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "FindReplaceDialog.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ViewState": "AgIAACcBAAAAAAAAAAAvwDYBAAA0AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:18.629Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": "IncrementalSearcher.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ViewState": "AgIAABQBAAAAAAAAAAAUwBgBAAAXAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:17:07.791Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 25,
"Title": "IncrementalSearcher.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:29:07.674Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "FindReplace.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:29:19.516Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 26,
"Title": "FrmFinding.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:06.98Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 27,
"Title": "FrmWebGet.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ViewState": "AgIAAOAGAAAAAAAAAAAAAOYGAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T00:56:03.069Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 29,
"Title": "FrmAddTools.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:06.132Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 30,
"Title": "FrmTitle.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:12.827Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 32,
"Title": "FrmXpath.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-07T02:22:33.189Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 31,
"Title": "FrmXpath.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ViewState": "AgIAAFcAAAAAAAAAAAA0wF4AAAAyAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-07T02:22:45.295Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 34,
"Title": "FrmUploadProg.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmUploadProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmUploadProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmUploadProg.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmUploadProg.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:28:44.883Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 33,
"Title": "FrmWebGet.Designer.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"ViewState": "AgIAADYEAAAAAAAAAAAAADoEAAA2AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T05:42:51.85Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 35,
"Title": "FrmColor.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"ViewState": "AgIAAB0AAAAAAAAAAADgvyoAAAA4AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T03:09:44.273Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 40,
"Title": "FrmDownProg.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmDownProg.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:25:03.014Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 39,
"Title": "FrmDownProg.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ViewState": "AgIAABYAAAAAAAAAAIA2wB8AAAAlAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:25:08.234Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 38,
"Title": "FrmStrToCode.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-28T08:27:04.422Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 36,
"Title": "FrmProject.Designer.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T00:31:55.969Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 37,
"Title": "FrmStrToCode.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ViewState": "AgIAAAwAAAAAAAAAAAAiwBsAAACSAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-28T08:27:11.198Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 41,
"Title": "FrmCreateProject.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:36:28.98Z",
"EditorCaption": " [\u8BBE\u8BA1]"
}
]
},
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{ca8cc5c7-0231-406a-95cd-aa5ed6ac0190}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
}
]
},
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{57d563b6-44a5-47df-85be-f4199ad6b651}"
}
]
}
]
}
]
}
@@ -0,0 +1,759 @@
{
"Version": 1,
"WorkspaceRootPath": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ryproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ryproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\frmmessagebox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\frmmessagebox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\itrycn_info.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\itrycn_info.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddvar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddvar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmsetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|e:\\my datas\\my codes\\\u6BD5\u65B9\u9879\u76EE\\csharp\\superdesign\\source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser_new.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmmaineditor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\smarteditor\\frmfilebrowser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\smarteditor\\frmfilebrowser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadupdateziptoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\ftp\\frmuploadfilestoftp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplacedialog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\findreplace.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\incrementalsearcher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\controls\\highlight\\findreplace\\frmfinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\controls\\highlight\\findreplace\\frmfinding.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddtools.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\manager\\frmaddtools.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\controls\\frmtitle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\controls\\frmtitle.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmxpath.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmwebget.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmuploadprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmuploadprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmproject.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmstrtocode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{90AFB93F-4147-473B-9A25-50F5B21FA2C6}|RySmartEditor\\RySmartEditor.csproj|solutionrelative:rysmarteditor\\ftp\\frmdownprog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcreateproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{8177CFD1-097C-4D4E-919D-8B519289496E}|\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj|solutionrelative:\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\tools\\frmcreateproject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 11,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{e506b91c-c606-466a-90a9-123d1d1e12b3}"
},
{
"$type": "Bookmark",
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Bookmark",
"Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "FrmProject.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:39:48.367Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "FrmMainEditor.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ViewState": "AgIAANMDAAAAAAAAAAAewNwDAAAkAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:09:11.981Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "Form1.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ViewState": "AgIAABQAAAAAAAAAAADwvx4AAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T01:58:44.796Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 28,
"Title": "rySearch.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"RelativeDocumentMoniker": "..\\..\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"RelativeToolTip": "..\\..\\\u777F\u5143\u516C\u7528\u63A7\u4EF6\u7EC4\\Source\\RaUI\\UI\\Controls\\rySearch.cs",
"ViewState": "AgIAAC4BAAAAAAAAAAASwDQBAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:35:53.178Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "RyProject.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\RyProject.cs",
"ViewState": "AgIAAH4BAAAAAAAAAAA3wH4BAAAbAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T07:22:20.456Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "FrmMessageBox.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\FrmMessageBox.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:59:33.938Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "FrmProject.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.cs",
"ViewState": "AgIAAAQEAAAAAAAAAAAAAAgEAAAXAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:40:03.384Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "FrmSetting.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:09.902Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "FrmSetting.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmSetting.cs",
"ViewState": "AgIAAJEBAAAAAAAAAAAiwKQBAAAxAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:54:23.789Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "Form1.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Form1.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T05:59:35.501Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Itrycn_Info.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\Itrycn_Info.cs",
"ViewState": "AgIAAKoAAAAAAAAAAADwvwEBAAAaAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-19T06:14:56.613Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "FrmAddVar.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddVar.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:07.644Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 20,
"Title": "FindReplace.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ViewState": "AgIAAAABAAAAAAAAAAAvwA4BAAADAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:06:05.327Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "FrmWebGet.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T00:55:51.8Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "FrmFileBrowser.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:04:25.539Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:04:29.698Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "FrmFileBrowser_New.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmFileBrowser_New.cs",
"ViewState": "AgIAANoEAAAAAAAAAAAMwOwEAAAlAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:05:42.087Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "FrmMainEditor.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"RelativeDocumentMoniker": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\SmartEditor\\FrmMainEditor.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\SmartEditor\\FrmMainEditor.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-06T03:09:06.018Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "FindReplaceDialog.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:14.666Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "FrmUploadFilesToFtp.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ViewState": "AgIAAC8AAAAAAAAAAAAvwDIAAAA3AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T07:16:50.608Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:36:42.083Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "FrmUploadUpdateZipToFtp.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadUpdateZipToFtp.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAAADMAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:46:17.661Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FTP\\FrmUploadFilesToFtp.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T07:15:54.077Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 22,
"Title": "FindReplaceDialog.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs",
"ViewState": "AgIAACcBAAAAAAAAAAAvwDYBAAA0AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:18.629Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 24,
"Title": "IncrementalSearcher.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ViewState": "AgIAABQBAAAAAAAAAAAUwBgBAAAXAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:17:07.791Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 25,
"Title": "IncrementalSearcher.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:29:07.674Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 23,
"Title": "FindReplace.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FindReplace.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T06:29:19.516Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 26,
"Title": "FrmFinding.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs",
"RelativeDocumentMoniker": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\Controls\\Highlight\\FindReplace\\FrmFinding.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-04T05:05:06.98Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 27,
"Title": "FrmWebGet.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.cs",
"ViewState": "AgIAAOAGAAAAAAAAAAAAAOYGAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T00:56:03.069Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 29,
"Title": "FrmAddTools.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Manager\\FrmAddTools.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:06.132Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 30,
"Title": "FrmTitle.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Controls\\FrmTitle.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T06:01:12.827Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 32,
"Title": "FrmXpath.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-07T02:22:33.189Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 31,
"Title": "FrmXpath.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.cs",
"ViewState": "AgIAAFcAAAAAAAAAAAA0wF4AAAAyAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-07T02:22:45.295Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 34,
"Title": "FrmUploadProg.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmUploadProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmUploadProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmUploadProg.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmUploadProg.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:28:44.883Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 33,
"Title": "FrmWebGet.Designer.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmWebGet.Designer.cs",
"ViewState": "AgIAADYEAAAAAAAAAAAAADoEAAA2AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-02T05:42:51.85Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 35,
"Title": "FrmColor.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmColor.cs",
"ViewState": "AgIAAB0AAAAAAAAAAADgvyoAAAA4AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T03:09:44.273Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 40,
"Title": "FrmDownProg.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmDownProg.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:25:03.014Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 39,
"Title": "FrmDownProg.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeDocumentMoniker": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\FTP\\FrmDownProg.cs",
"RelativeToolTip": "RySmartEditor\\FTP\\FrmDownProg.cs",
"ViewState": "AgIAABYAAAAAAAAAAIA2wB8AAAAlAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-25T02:25:08.234Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 38,
"Title": "FrmStrToCode.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-28T08:27:04.422Z",
"EditorCaption": " [\u8BBE\u8BA1]"
},
{
"$type": "Document",
"DocumentIndex": 36,
"Title": "FrmProject.Designer.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.Designer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-29T00:31:55.969Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 37,
"Title": "FrmStrToCode.cs",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmStrToCode.cs",
"ViewState": "AgIAAAwAAAAAAAAAAAAiwBsAAACSAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-28T08:27:11.198Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 41,
"Title": "FrmCreateProject.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs",
"RelativeDocumentMoniker": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs",
"ToolTip": "E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmCreateProject.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-18T08:36:28.98Z",
"EditorCaption": " [\u8BBE\u8BA1]"
}
]
},
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{ca8cc5c7-0231-406a-95cd-aa5ed6ac0190}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
}
]
},
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{57d563b6-44a5-47df-85be-f4199ad6b651}"
}
]
}
]
}
]
}
@@ -0,0 +1 @@
{"ShowEmptyProjects":false,"CustomColumnOrderings":{"name":0,"file-path":1,"file-name":2,"neutral-value":3,"neutral-comment":4,"type":5},"ShowValidationErrors":true,"SelectedResourceGroupsByProject":{"E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\SuperDesign.csproj":["E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmProject.resx","E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\\u5F00\u53D1\u8F85\u52A9\u5DE5\u5177\\Tools\\FrmXpath.resx"],"E:\\My Datas\\My Codes\\\u6BD5\u65B9\u9879\u76EE\\CSharp\\SuperDesign\\Source\\RySmartEditor\\RySmartEditor.csproj":[]},"VisibleColumnKeys":["name","neutral-value","neutral-comment"]}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
Scintilla: 5.3.6
Lexilla: 5.2.6
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
Scintilla: 5.3.2
Lexilla: 5.2.1
+2
View File
@@ -0,0 +1,2 @@
Scintilla: 5.3.6
Lexilla: 5.2.6
@@ -0,0 +1 @@
{"RootPath":"E:\\My Datas\\My Codes\\毕方项目\\CSharp\\SuperDesign\\Source\\RySmartEditor","ProjectFileName":"RySmartEditor.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"API\\JsBeautifier\\Beautifier.cs"},{"SourceFile":"API\\JsBeautifier\\BeautifierFlags.cs"},{"SourceFile":"API\\JsBeautifier\\BeautifierOptions.cs"},{"SourceFile":"API\\JsBeautifier\\BraceStyle.cs"},{"SourceFile":"Controls\\FrmTitle.cs"},{"SourceFile":"Controls\\FrmTitle.Designer.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\AutocompleteItem.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\AutocompleteItems.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\AutocompleteListView.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\AutocompleteMenu.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\AutocompleteMenuHost.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\Colors.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\EventArgs.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\IAutocompleteListView.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\ITextBoxWrapper.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\Range.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\ScintillaWrapper.cs"},{"SourceFile":"Controls\\Highlight\\AutoComplete\\TextBoxWrapper.cs"},{"SourceFile":"Controls\\Highlight\\CharacterRange.cs"},{"SourceFile":"Controls\\Highlight\\ContextMenuStripHighlightText2.cs"},{"SourceFile":"Controls\\Highlight\\ContextMenuStripHighlightText2.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindAllResults\\FindAllResultsPanel.cs"},{"SourceFile":"Controls\\Highlight\\FindAllResults\\FindAllResultsPanel.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindConfig.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindConfig.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindOption.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindReplace.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindReplaceDialog.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FindReplaceDialog.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FrmFinding.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\FrmFinding.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\IncrementalSearcher.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\IncrementalSearcher.Designer.cs"},{"SourceFile":"Controls\\Highlight\\FindReplace\\ToolStripIncrementalSearcher.cs"},{"SourceFile":"Controls\\Highlight\\GoTo\\GoTo.cs"},{"SourceFile":"Controls\\Highlight\\GoTo\\GoToDialog.cs"},{"SourceFile":"Controls\\Highlight\\GoTo\\GoToDialog.Designer.cs"},{"SourceFile":"Controls\\Highlight\\HighlightEditor.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerBatch.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerCommon.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerCpp.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerCs.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerCss.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerHtml.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerIni.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerInnoSetup.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerJava.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerJavaScript.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerJson.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerNsis.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerNull.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerPascal.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerPhp.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerPowerShell.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerPython.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerSql.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerVb.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerXml.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecificLexer\\CreateLexerYaml.cs"},{"SourceFile":"Controls\\Highlight\\VPKSoft.ScintillaLexers\\CreateSpecLine truncated
+62
View File
@@ -0,0 +1,62 @@
using 开发辅助工具.Tools.SmartEditor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RySmartEditor
{
public class Init
{
public static void Show(string[] args)
{
if (args.Length >= 2)
{
if (args[0] == "edit")
{
string ProjectPath = args[1];
OpenEditor(ProjectPath);
}
}
else if(args.Length == 1)
{
if (args[0] == "edit" || System.IO.File.Exists(args[0]))
{
OpenEditor(args[0]);
}
else
{
OpenEditor("edit");
}
}
else
{
OpenEditor("edit");
//Application.Run(new FrmMainEditor());
}
}
static void OpenEditor(string path)
{
object mainHandle = QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(Int64), "SmartEditor");
if (mainHandle != null && (long)mainHandle != 0)
{
var handle = new IntPtr((long)mainHandle);
if (path == "edit")
{
ryControls.Win32.SendMessage(handle, 17189, 100, 100);//让界面显示
}
else
{
ryConfig.MsgManager.SendMsg(handle, 1666, path);
}
return;
}
else
{
Application.Run(new FrmMainEditor(path == "edit" ? "" : path));
}
}
}
}
+364
View File
@@ -0,0 +1,364 @@
using ryCommon;
using ryCommonDb;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using static ryCommonDb.DataProvider;
namespace 开发辅助工具.Manager
{
public class Itrycn_Db
{
public static bool IsCloseConfirm = true;
public static string Sys_SQLConn = "<app>\\SysDb\\Tools.dat|";
public static string User_SQLConn = "<app>\\UserDb\\MyDb.dat|";
public static string History_SQLConn = "<app>\\UserDb\\history.dat|";
public static ryCommonDb.DataProvider.DataProviderType dataType = ryCommonDb.DataProvider.DataProviderType.SQLiteDataProvider;
public static IDbInterface CreateDataProvider(DataProviderType dataProviderType)
{
switch (dataProviderType)
{
//case DataProviderType.OdbcDataProvider:
// return new OdbcDataProvider();
//case DataProviderType.OleDbDataProvider:
// return new OleDbDataProvider();
//case DataProviderType.OracleDataProvider:
// return new OracleDataProvider();
case DataProviderType.SQLiteDataProvider:
return new SQLiteDataProvider();
default:
return null;
}
}
/// <summary>
/// 判断WinSCP是否在运行
/// </summary>
/// <returns></returns>
public static bool WinSCP_IsRunning() {
var exist = false;
try {
var proc_list = Process.GetProcessesByName("WinSCP");
for (int i = 0; i < proc_list.Length; i++) {
var path = proc_list[i].GetPath();
if (path.Length > 0) {
if (path.IndexOfEx(Application.StartupPath) < 0) {
exist = true; break;
}
}
}
}
catch {
}
if (!exist) {
//RyForm.get
}
return exist;
}
public static void DeleteFiles(string dir, string filter)
{
var files = System.IO.Directory.GetFiles(dir, filter);
for (int i = 0; i < files.Length; i++)
{
ryCommon.RyFiles.DeleteFile(files[i]);
}
ryCommon.RyFiles.DeleteFile(dir + "\\" + filter);
var dirs = System.IO.Directory.GetDirectories(dir);
for (int i = 0; i < dirs.Length; i++)
{
DeleteFiles(dirs[i], filter);
}
}
public static void CreateSysTable()
{
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(Sys_SQLConn) == 1)
{
#region 工具表
RyQuickSQL mySQL = new RyQuickSQL("Tools");
mySQL.AddField("Name", "");
mySQL.AddField("Des", "");
mySQL.AddField("Keys", "");
mySQL.AddField("Addr", "");
mySQL.AddField("PY", "");
mySQL.AddField("Sort", 0);
mySQL.AddField("addTime",DateTime.Now);
db.CreateDb(mySQL);
#endregion
//
}
}
/// <summary>
/// 获取设置
/// </summary>
/// <param name="name"></param>
/// <param name="defValue"></param>
/// <returns></returns>
public static string GetSetting(string name, string defValue)
{
var result = defValue;
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(User_SQLConn) == 1)
{
RyQuickSQL mySQL = new RyQuickSQL("Settings");
mySQL.AddField("Name", name);
var ds = db.ReadData("select * from Settings where Name=@Name", mySQL);
if (ds.HaveData())
{
result = ds.GetRow(0)["Value"].ToString();
}
ds.Dispose();
}
db.Free();
return result;
}
/// <summary>
/// 设置设置
/// </summary>
/// <param name="name"></param>
/// <param name="defValue"></param>
/// <returns></returns>
public static int SetSetting(string name, string value)
{
var result = 0;
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(User_SQLConn) == 1)
{
RyQuickSQL mySQL = new RyQuickSQL("Settings");
mySQL.AddField("Name", name);
mySQL.AddField("Value", value);
result= db.ExecuteNonQuery(mySQL.GetUpdateSQL()+ " where Name=@Name", mySQL);
if (result==0)
{
mySQL.AddField("addTime", DateTime.Now);
result = db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
}
}
db.Free();
return result;
}
public static void CreateDb()
{
CreateSysTable();
CreateUserTable();
CreateHistoryTable();
}
public static void CreateUserTable()
{
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(User_SQLConn) == 1)
{
#region Url表
RyQuickSQL mySQL = new RyQuickSQL("Urls");
mySQL.AddField("Name", "");
mySQL.AddField("Url", "");
mySQL.AddField("Cookie", "");
mySQL.AddField("Postdata", "");
mySQL.AddField("Method", "");
mySQL.AddField("Header", "");
mySQL.AddField("Referer", "");
mySQL.AddField("ContentType", "");
mySQL.AddField("Encoding", "");
mySQL.AddField("IsFav", 0);
mySQL.AddField("Des", "");
mySQL.AddField("ClickCount", 0);//点击次数
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region 启动表
mySQL.Clear();
mySQL.TableName = "Starts"; ;
mySQL.AddField("Addr", "");
mySQL.AddField("Name", "");
mySQL.AddField("ClickCount", 0);//点击次数
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region 变量表
mySQL.Clear();
mySQL.TableName = "VarInfo"; ;
mySQL.AddField("VarName", "");
mySQL.AddField("VarValue", "");
mySQL.AddField("Des", "");//备注
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region API表
mySQL.Clear();
mySQL.TableName = "api";
mySQL.AddField("Name", "");
mySQL.AddField("Url", "");
mySQL.AddField("APIName", "");
mySQL.AddField("Postdata", "");
mySQL.AddField("desc", "");
mySQL.AddField("ClickCount", 0);//点击次数
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_APIName ON api(APIName); ");
db.ExecuteNonQuery("CREATE INDEX index_APIUrl ON api(Url); ");
}
#endregion
#region FTP表
mySQL.Clear();
mySQL.TableName = "FTP";
mySQL.AddField("name", "");
mySQL.AddField("ip", "");
mySQL.AddField("port", 0);
mySQL.AddField("remoteDir", "");
mySQL.AddField("username", "");
mySQL.AddField("pwd", "");
mySQL.AddField("encrypt", 0);
mySQL.AddField("des", "");
mySQL.AddField("addTime", DateTime.Now);
mySQL.AddField("editTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region Site表
mySQL.Clear();
mySQL.TableName = "Site";
mySQL.AddField("name", "");
mySQL.AddField("localPath", "");
mySQL.AddField("ftpId", 0);
mySQL.AddField("ftpDir", "");
mySQL.AddField("addTime", DateTime.Now);
mySQL.AddField("editTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region FavGroup表
mySQL.Clear();
mySQL.TableName = "FavGroup";
mySQL.AddField("name", "");
mySQL.AddField("addTime", DateTime.Now);
mySQL.AddField("editTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region FavFiles表
mySQL.Clear();
mySQL.TableName = "FavFiles";
mySQL.AddField("name", "");
mySQL.AddField("FilePath", "");
mySQL.AddField("FindText", "");
mySQL.AddField("GroupId", 1);
mySQL.AddField("addTime", DateTime.Now);
mySQL.AddField("editTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region 设置表
mySQL.Clear();
mySQL.TableName = "Settings";
mySQL.AddField("Name", "");
mySQL.AddField("Value", "");//值
mySQL.AddField("addTime", DateTime.Now);
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_Name ON Settings(Name); ");
}
#endregion
}
}
public static void CreateHistoryTable()
{
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(History_SQLConn) == 1)
{
#region 标签文件表
RyQuickSQL mySQL = new RyQuickSQL("Files");
mySQL.AddField("FilePath", "");
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_FilePath ON Files(FilePath); ");
}
#endregion
#region 历史记录表
mySQL.Clear();
mySQL.TableName = "History"; ;
mySQL.AddField("fileid", 0);
mySQL.AddField("name", "");
mySQL.AddField("size", 0L);
mySQL.AddField("content", "");
mySQL.AddField("addTime", DateTime.Now);
db.CreateDb(mySQL);
#endregion
#region 设置表
mySQL.Clear();
mySQL.TableName = "Settings";
mySQL.AddField("Name", "");
mySQL.AddField("Value", "");//值
mySQL.AddField("addTime", DateTime.Now);
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_Name ON Settings(Name); ");
}
#endregion
}
}
/// <summary>
/// 添加历史记录
/// </summary>
/// <param name="path"></param>
/// <param name="content"></param>
public static void AddHistory(string path, string content)
{
new Thread(Start).Start();
void Start()
{
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(History_SQLConn) == 1)
{
var isadd = false;
RyQuickSQL mySQL = new RyQuickSQL("Files");
mySQL.AddField("FilePath", path);
mySQL.AddField("editTime", DateTime.Now);
if (db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where FilePath=@FilePath", mySQL) == 0)
{
mySQL.AddField("addTime", DateTime.Now);
db.Insert(mySQL);
isadd = true;
}
var ds = db.ReadData("select * from Files where FilePath=@FilePath", mySQL);
if (ds.HaveData())
{
var fileid = ds.GetFirstRowData()["id"].ToInt();
var issame = false;
if (!isadd)
{
var ds_his = db.ReadData("select * from History where fileid=" + fileid + " order by addTime desc limit 1");
if (ds_his.HaveData())
{
if (ds_his.GetFirstRowData()["content"].ToString() == content)
{
issame = true;
}
}
ds_his.Dispose();
}
if (!issame)
{
mySQL.Clear();
mySQL.TableName = "History";
mySQL.AddField("fileid", fileid);
mySQL.AddField("size", content.Length);
mySQL.AddField("content", content);
mySQL.AddField("addTime", DateTime.Now);
db.Insert(mySQL);
}
}
ds.Dispose();
}
db.Free();
}
}
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,74 @@
#region License
// MIT License
//
// Copyright (c) 2018 Denis Ivanov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#endregion
namespace Jsbeautifier
{
using System;
public class BeautifierFlags
{
public BeautifierFlags(string mode)
{
PreviousMode = "BLOCK";
Mode = mode;
VarLine = false;
VarLineTainted = false;
VarLineReindented = false;
InHtmlComment = false;
IfLine = false;
ChainExtraIndentation = 0;
InCase = false;
InCaseStatement = false;
CaseBody = false;
IndentationLevel = 0;
TernaryDepth = 0;
}
public string PreviousMode { get; set; }
public string Mode { get; set; }
public bool VarLine { get; set; }
public bool VarLineTainted { get; set; }
public bool VarLineReindented { get; set; }
public bool InHtmlComment { get; set; }
public bool IfLine { get; set; }
public int ChainExtraIndentation { get; set; }
public bool InCase { get; set; }
public bool InCaseStatement { get; set; }
public bool CaseBody { get; set; }
public int IndentationLevel { get; set; }
public int TernaryDepth { get; set; }
}
}
@@ -0,0 +1,69 @@
#region License
// MIT License
//
// Copyright (c) 2018 Denis Ivanov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#endregion
namespace Jsbeautifier
{
public class BeautifierOptions
{
public BeautifierOptions()
{
IndentSize = 4;
IndentChar = ' ';
IndentWithTabs = false;
PreserveNewlines = true;
MaxPreserveNewlines = 10.0f;
JslintHappy = false;
BraceStyle = BraceStyle.Collapse;
KeepArrayIndentation = false;
KeepFunctionIndentation = false;
EvalCode = false;
WrapLineLength = 0;
BreakChainedMethods = false;
}
public uint IndentSize { get; set; }
public char IndentChar { get; set; }
public bool IndentWithTabs { get; set; }
public bool PreserveNewlines { get; set; }
public float MaxPreserveNewlines { get; set; }
public bool JslintHappy { get; set; }
public BraceStyle BraceStyle { get; set; }
public bool KeepArrayIndentation { get; set; }
public bool KeepFunctionIndentation { get; set; }
public bool EvalCode { get; set; }
public int WrapLineLength { get; set; }
public bool BreakChainedMethods { get; set; }
}
}
@@ -0,0 +1,31 @@
#region License
// MIT License
//
// Copyright (c) 2018 Denis Ivanov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#endregion
namespace Jsbeautifier
{
public enum BraceStyle
{
Expand, Collapse, EndExpand
}
}
+113
View File
@@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Windows.Forms;
using ryCommon;
using QuickMsg;
using System.Runtime.CompilerServices;
using System.Threading;
namespace ryConfig
{
/// <summary>
/// 流程软件通信类
/// </summary>
public class MsgManager
{
[DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
private static extern IntPtr GetParent(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
[DllImport("user32.dll", EntryPoint = "IsWindow")]
private static extern bool IsWindow(IntPtr hWnd);
private const int WM_COPYDATA = 0x004A;
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam);
/// <summary>
/// 向指定句柄发送消息
/// </summary>
/// <param name="handle"></param>
/// <param name="wParam"></param>
/// <param name="str">要发送的文字内容</param>
public static void SendMsg(IntPtr handle, int wParam, string str)
{
byte[] arr = System.Text.Encoding.Default.GetBytes(str);
int len = arr.Length;
COPYDATASTRUCT cdata;
cdata.dwData = (IntPtr)100;
cdata.lpData = str;
cdata.cData = len + 1;
SendMessage(handle, WM_COPYDATA, wParam, ref cdata);
}
/// <summary>
/// 发送消息到文本编辑器
/// </summary>
/// <param name="wParam">附带信息</param>
/// <param name="str">要发送的文字内容</param>
public static void SendMsgToEditor(string str)
{
object mainHandle = QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(Int64), "SmartEditor");
if (mainHandle != null)
{
SendMsg((IntPtr)mainHandle.ToInt64(), 0, str);
}
}
/// <summary>
/// 发送消息到指定的内存ID窗口
/// </summary>
/// <param name="MemoryId">内存ID</param>
/// <param name="wParam">附带信息标识</param>
/// <param name="str">发送的内容</param>
public static void SendMsg(string MemoryId, int wParam, string str)
{
if (MemoryId == null || MemoryId.Length == 0)
{
return;
}
else
{
object mainHandle = QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(Int64), MemoryId);
if (mainHandle != null && (long)mainHandle != 0)
{
SendMsg((IntPtr)mainHandle.ToInt64(), wParam, str);
}
}
}
/// <summary>
/// 获取消息字符串内容
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public static string GetMsg(Message m)
{
COPYDATASTRUCT cdata = new COPYDATASTRUCT();
Type mytype = cdata.GetType();
cdata = (COPYDATASTRUCT)m.GetLParam(mytype);
return cdata.lpData;
}
/// <summary>
/// 通知已打开的编辑器,显示界面
/// </summary>
public static void ShowEditorUI()
{
object mainHandle = QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(Int64), "SmartEditor");
if (mainHandle != null && (long)mainHandle != 0)
{
ryControls.Win32.SendMessage(new IntPtr((long)mainHandle), 17189, 100, 100);//让界面显示
return;
}
}
}
}
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
@@ -0,0 +1,520 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor;
using System.Diagnostics;
using System.IO;
namespace XmlPad
{
public partial class FindAndReplaceForm : Form
{
public FindAndReplaceForm()
{
InitializeComponent();
_search = new TextEditorSearcher();
}
TextEditorSearcher _search;
FastColoredTextBoxNS.FastColoredTextBox _editor;
FastColoredTextBoxNS.FastColoredTextBox Editor
{
get { return _editor; }
set
{
_editor = value;
_search.Document = _editor.Document;
UpdateTitleBar();
}
}
private void UpdateTitleBar()
{
string text = ReplaceMode ? "查找和替换" : "查找";
if (_editor != null && _editor.FileName != null)
text += " - " + Path.GetFileName(_editor.FileName);
if (_search.HasScanRegion)
text += " (只可选)";
this.Text = text;
}
public void ShowFor(FastColoredTextBoxNS.FastColoredTextBox editor, bool replaceMode)
{
Editor = editor;
_search.ClearScanRegion();
SelectionManager sm = editor.ActiveTextAreaControl.SelectionManager;
if (sm.HasSomethingSelected && sm.SelectionCollection.Count == 1)
{
ISelection sel = sm.SelectionCollection[0];
if (sel.StartPosition.Y == sel.EndPosition.Y)
txtLookFor.Text = sm.SelectedText;
else
_search.SetScanRegion(sel);
}
else
{
// Get the current word that the caret is on
Caret caret = editor.ActiveTextAreaControl.Caret;
int start = TextUtilities.FindWordStart(editor.Document, caret.Offset);
int endAt = TextUtilities.FindWordEnd(editor.Document, caret.Offset);
txtLookFor.Text = editor.Document.GetText(start, endAt - start);
}
ReplaceMode = replaceMode;
this.Owner = (Form)editor.TopLevelControl;
this.Show();
txtLookFor.SelectAll();
txtLookFor.Focus();
}
public bool ReplaceMode
{
get { return txtReplaceWith.Visible; }
set
{
btnReplace.Visible = btnReplaceAll.Visible = value;
lblReplaceWith.Visible = txtReplaceWith.Visible = value;
btnFindAllHighlightAll.Visible = !value;
this.AcceptButton = value ? btnReplace : btnFindNext;
UpdateTitleBar();
}
}
private void BtnFindPrevious_Click(object sender, EventArgs e)
{
FindNext(false, true, "内容没有找到!");
}
private void BtnFindNext_Click(object sender, EventArgs e)
{
FindNext(false, false, "内容没有找到");
}
public bool _lastSearchWasBackward = false;
public bool _lastSearchLoopedAround;
public TextRange FindNext(bool viaF3, bool searchBackward, string messageIfNotFound)
{
if (string.IsNullOrEmpty(txtLookFor.Text))
{
MessageBox.Show("没有指定要查找的内容!", "提示");
return null;
}
_lastSearchWasBackward = searchBackward;
_search.LookFor = txtLookFor.Text;
_search.MatchCase = chkMatchCase.Checked;
_search.MatchWholeWordOnly = chkMatchWholeWord.Checked;
Caret caret = _editor.ActiveTextAreaControl.Caret;
if (viaF3 && _search.HasScanRegion && !Globals.IsInRange(caret.Offset, _search.BeginOffset, _search.EndOffset))
{
// user moved outside of the originally selected region
_search.ClearScanRegion();
UpdateTitleBar();
}
int startFrom = caret.Offset - (searchBackward ? 1 : 0);
TextRange range = _search.FindNext(startFrom, searchBackward, out _lastSearchLoopedAround);
if (range != null)
SelectResult(range);
else if (messageIfNotFound != null)
MessageBox.Show(messageIfNotFound, "提示");
return range;
}
private void SelectResult(TextRange range)
{
TextLocation p1 = _editor.Document.OffsetToPosition(range.Offset);
TextLocation p2 = _editor.Document.OffsetToPosition(range.Offset + range.Length);
_editor.ActiveTextAreaControl.SelectionManager.SetSelection(p1, p2);
//_editor.ActiveTextAreaControl.ScrollTo(p1.Line, p1.Column);
// Also move the caret to the end of the selection, because when the user
// presses F3, the caret is where we start searching next time.
_editor.ActiveTextAreaControl.Caret.Position =
_editor.Document.OffsetToPosition(range.Offset + range.Length);
}
Dictionary<TextEditorControl, HighlightGroup> _highlightGroups = new Dictionary<TextEditorControl, HighlightGroup>();
private void btnHighlightAll_Click(object sender, EventArgs e)
{
if (!_highlightGroups.ContainsKey(_editor))
_highlightGroups[_editor] = new HighlightGroup(_editor);
HighlightGroup group = _highlightGroups[_editor];
if (string.IsNullOrEmpty(LookFor))
// Clear highlights
group.ClearMarkers();
else
{
_search.LookFor = txtLookFor.Text;
_search.MatchCase = chkMatchCase.Checked;
_search.MatchWholeWordOnly = chkMatchWholeWord.Checked;
bool looped = false;
int offset = 0, count = 0;
for (; ; )
{
TextRange range = _search.FindNext(offset, false, out looped);
if (range == null || looped)
break;
offset = range.Offset + range.Length;
count++;
TextMarker m = new TextMarker(range.Offset, range.Length,
TextMarkerType.SolidBlock, Color.Yellow, Color.Black);
group.AddMarker(m);
}
if (count == 0)
MessageBox.Show("没有找到你要查找的内容", "提示");
else
Close();
}
}
private void FindAndReplaceForm_FormClosing(object sender, FormClosingEventArgs e)
{ // Prevent dispose, as this form can be re-used
if (e.CloseReason != CloseReason.FormOwnerClosing)
{
if (this.Owner != null)
this.Owner.Select(); // prevent another app from being activated instead
e.Cancel = true;
Hide();
// Discard search region
_search.ClearScanRegion();
_editor.Refresh(); // must repaint manually
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnReplace_Click(object sender, EventArgs e)
{
SelectionManager sm = _editor.ActiveTextAreaControl.SelectionManager;
if (string.Equals(sm.SelectedText, txtLookFor.Text, StringComparison.OrdinalIgnoreCase))
InsertText(txtReplaceWith.Text);
FindNext(false, _lastSearchWasBackward, "内容没有找到!");
}
private void btnReplaceAll_Click(object sender, EventArgs e)
{
int count = 0;
// BUG FIX: if the replacement string contains the original search string
// (e.g. replace "red" with "very red") we must avoid looping around and
// replacing forever! To fix, start replacing at beginning of region (by
// moving the caret) and stop as soon as we loop around.
_editor.ActiveTextAreaControl.Caret.Position =
_editor.Document.OffsetToPosition(_search.BeginOffset);
//_editor.Document.UndoStack.StartUndoGroup();
//try
//{
lock (_editor.Document.UndoStack)
{
while (FindNext(false, false, null) != null)
{
if (_lastSearchLoopedAround)
break;
// Replace
count++;
InsertText(txtReplaceWith.Text);
}
}
//}
//finally
//{
// _editor.Document.UndoStack.EndUndoGroup();
//}
if (count == 0)
MessageBox.Show(string.Format("没有找到目标内容: {0}!", txtLookFor.Text), "提示");
else
{
MessageBox.Show(string.Format("替换了 {0} 处内容!", count), "提示");
Close();
}
}
private void InsertText(string text)
{
TextArea textArea = _editor.ActiveTextAreaControl.TextArea;
//textArea.Document.UndoStack.StartUndoGroup();
//try
//{
lock (textArea.Document.UndoStack)
{
if (textArea.SelectionManager.HasSomethingSelected)
{
textArea.Caret.Position = textArea.SelectionManager.SelectionCollection[0].StartPosition;
textArea.SelectionManager.RemoveSelectedText();
}
textArea.InsertString(text);
}
//}
//finally
//{
// textArea.Document.UndoStack.EndUndoGroup();
//}
}
public string LookFor { get { return txtLookFor.Text; } }
}
public class TextRange : AbstractSegment
{
IDocument _document;
public TextRange(IDocument document, int offset, int length)
{
_document = document;
this.offset = offset;
this.length = length;
}
}
/// <summary>This class finds occurrances of a search string in a text
/// editor's IDocument... it's like Find box without a GUI.</summary>
public class TextEditorSearcher : IDisposable
{
IDocument _document;
public IDocument Document
{
get { return _document; }
set
{
if (_document != value)
{
ClearScanRegion();
_document = value;
}
}
}
// I would have used the TextAnchor class to represent the beginning and
// end of the region to scan while automatically adjusting to changes in
// the document--but for some reason it is sealed and its constructor is
// internal. Instead I use a TextMarker, which is perhaps even better as
// it gives me the opportunity to highlight the region. Note that all the
// markers and coloring information is associated with the text document,
// not the editor control, so TextEditorSearcher doesn't need a reference
// to the TextEditorControl. After adding the marker to the document, we
// must remember to remove it when it is no longer needed.
TextMarker _region = null;
/// <summary>Sets the region to search. The region is updated
/// automatically as the document changes.</summary>
public void SetScanRegion(ISelection sel)
{
SetScanRegion(sel.Offset, sel.Length);
}
/// <summary>Sets the region to search. The region is updated
/// automatically as the document changes.</summary>
public void SetScanRegion(int offset, int length)
{
Color bkgColor = _document.HighlightingStrategy.GetColorFor("Default").BackgroundColor;
_region = new TextMarker(offset, length, TextMarkerType.SolidBlock,
Globals.HalfMix(bkgColor, Color.FromArgb(160, 160, 160)));
_document.MarkerStrategy.AddMarker(_region);
}
public bool HasScanRegion
{
get { return _region != null; }
}
public void ClearScanRegion()
{
if (_region != null)
{
_document.MarkerStrategy.RemoveMarker(_region);
_region = null;
}
}
public void Dispose() { ClearScanRegion(); GC.SuppressFinalize(this); }
~TextEditorSearcher() { Dispose(); }
/// <summary>Begins the start offset for searching</summary>
public int BeginOffset
{
get
{
if (_region != null)
return _region.Offset;
else
return 0;
}
}
/// <summary>Begins the end offset for searching</summary>
public int EndOffset
{
get
{
if (_region != null)
return _region.EndOffset;
else
return _document.TextLength;
}
}
public bool MatchCase;
public bool MatchWholeWordOnly;
string _lookFor;
string _lookFor2; // uppercase in case-insensitive mode
public string LookFor
{
get { return _lookFor; }
set { _lookFor = value; }
}
/// <summary>Finds next instance of LookFor, according to the search rules
/// (MatchCase, MatchWholeWordOnly).</summary>
/// <param name="beginAtOffset">Offset in Document at which to begin the search</param>
/// <remarks>If there is a match at beginAtOffset precisely, it will be returned.</remarks>
/// <returns>Region of document that matches the search string</returns>
public TextRange FindNext(int beginAtOffset, bool searchBackward, out bool loopedAround)
{
Debug.Assert(!string.IsNullOrEmpty(_lookFor));
loopedAround = false;
int startAt = BeginOffset, endAt = EndOffset;
int curOffs = Globals.InRange(beginAtOffset, startAt, endAt);
_lookFor2 = MatchCase ? _lookFor : _lookFor.ToUpperInvariant();
TextRange result;
if (searchBackward)
{
result = FindNextIn(startAt, curOffs, true);
if (result == null)
{
loopedAround = true;
result = FindNextIn(curOffs, endAt, true);
}
}
else
{
result = FindNextIn(curOffs, endAt, false);
if (result == null)
{
loopedAround = true;
result = FindNextIn(startAt, curOffs, false);
}
}
return result;
}
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T, TResult>(T arg);
private TextRange FindNextIn(int offset1, int offset2, bool searchBackward)
{
Debug.Assert(offset2 >= offset1);
offset2 -= _lookFor.Length;
// Make behavior decisions before starting search loop
Func<char, char, bool> matchFirstCh;
Func<int, bool> matchWord;
if (MatchCase)
matchFirstCh = delegate(char lookFor, char c)
{
return lookFor == c;
};
else
matchFirstCh = delegate(char lookFor, char c)
{
return lookFor == Char.ToUpperInvariant(c);
};
if (MatchWholeWordOnly)
matchWord = IsWholeWordMatch;
else
matchWord = IsPartWordMatch;
// Search
char lookForCh = _lookFor2[0];
if (searchBackward)
{
for (int offset = offset2; offset >= offset1; offset--)
{
if (matchFirstCh(lookForCh, _document.GetCharAt(offset))
&& matchWord(offset))
return new TextRange(_document, offset, _lookFor.Length);
}
}
else
{
for (int offset = offset1; offset <= offset2; offset++)
{
if (matchFirstCh(lookForCh, _document.GetCharAt(offset))
&& matchWord(offset))
return new TextRange(_document, offset, _lookFor.Length);
}
}
return null;
}
private bool IsWholeWordMatch(int offset)
{
if (IsWordBoundary(offset) && IsWordBoundary(offset + _lookFor.Length))
return IsPartWordMatch(offset);
else
return false;
}
private bool IsWordBoundary(int offset)
{
return offset <= 0 || offset >= _document.TextLength ||
!IsAlphaNumeric(offset - 1) || !IsAlphaNumeric(offset);
}
private bool IsAlphaNumeric(int offset)
{
char c = _document.GetCharAt(offset);
return Char.IsLetterOrDigit(c) || c == '_';
}
private bool IsPartWordMatch(int offset)
{
string substr = _document.GetText(offset, _lookFor.Length);
if (!MatchCase)
substr = substr.ToUpperInvariant();
return substr == _lookFor2;
}
}
/// <summary>Bundles a group of markers together so that they can be cleared
/// together.</summary>
public class HighlightGroup : IDisposable
{
List<TextMarker> _markers = new List<TextMarker>();
TextEditorControl _editor;
IDocument _document;
public HighlightGroup(TextEditorControl editor)
{
_editor = editor;
_document = editor.Document;
}
public void AddMarker(TextMarker marker)
{
_markers.Add(marker);
_document.MarkerStrategy.AddMarker(marker);
}
public void ClearMarkers()
{
foreach (TextMarker m in _markers)
_document.MarkerStrategy.RemoveMarker(m);
_markers.Clear();
_editor.Refresh();
}
public void Dispose() { ClearMarkers(); GC.SuppressFinalize(this); }
~HighlightGroup() { Dispose(); }
public IList<TextMarker> Markers { get { return _markers.AsReadOnly(); } }
}
}
@@ -0,0 +1,235 @@
namespace XmlPad
{
partial class FindAndReplaceForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.lblReplaceWith = new System.Windows.Forms.Label();
this.txtLookFor = new System.Windows.Forms.TextBox();
this.txtReplaceWith = new System.Windows.Forms.TextBox();
this.btnFindNext = new System.Windows.Forms.Button();
this.btnReplace = new System.Windows.Forms.Button();
this.btnReplaceAll = new System.Windows.Forms.Button();
this.chkMatchWholeWord = new System.Windows.Forms.CheckBox();
this.chkMatchCase = new System.Windows.Forms.CheckBox();
this.btnFindAllHighlightAll = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.btnFindPrevious = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(77, 12);
this.label1.TabIndex = 0;
this.label1.Text = "查找内容(&N):";
//
// lblReplaceWith
//
this.lblReplaceWith.AutoSize = true;
this.lblReplaceWith.Location = new System.Drawing.Point(12, 36);
this.lblReplaceWith.Name = "lblReplaceWith";
this.lblReplaceWith.Size = new System.Drawing.Size(65, 12);
this.lblReplaceWith.TabIndex = 2;
this.lblReplaceWith.Text = "替换为(&P):";
//
// txtLookFor
//
this.txtLookFor.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtLookFor.Location = new System.Drawing.Point(95, 6);
this.txtLookFor.Name = "txtLookFor";
this.txtLookFor.Size = new System.Drawing.Size(232, 21);
this.txtLookFor.TabIndex = 1;
//
// txtReplaceWith
//
this.txtReplaceWith.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtReplaceWith.Location = new System.Drawing.Point(95, 33);
this.txtReplaceWith.Name = "txtReplaceWith";
this.txtReplaceWith.Size = new System.Drawing.Size(232, 21);
this.txtReplaceWith.TabIndex = 3;
//
// btnFindNext
//
this.btnFindNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFindNext.Location = new System.Drawing.Point(228, 137);
this.btnFindNext.Name = "btnFindNext";
this.btnFindNext.Size = new System.Drawing.Size(100, 30);
this.btnFindNext.TabIndex = 6;
this.btnFindNext.Text = "查找下一个(&F)";
this.btnFindNext.UseVisualStyleBackColor = true;
this.btnFindNext.Click += new System.EventHandler(this.BtnFindNext_Click);
//
// btnReplace
//
this.btnReplace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnReplace.Location = new System.Drawing.Point(12, 174);
this.btnReplace.Name = "btnReplace";
this.btnReplace.Size = new System.Drawing.Size(100, 30);
this.btnReplace.TabIndex = 7;
this.btnReplace.Text = "替换(&R)";
this.btnReplace.UseVisualStyleBackColor = true;
this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);
//
// btnReplaceAll
//
this.btnReplaceAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnReplaceAll.Location = new System.Drawing.Point(119, 174);
this.btnReplaceAll.Name = "btnReplaceAll";
this.btnReplaceAll.Size = new System.Drawing.Size(100, 30);
this.btnReplaceAll.TabIndex = 9;
this.btnReplaceAll.Text = "全部替换(&A)";
this.btnReplaceAll.UseVisualStyleBackColor = true;
this.btnReplaceAll.Click += new System.EventHandler(this.btnReplaceAll_Click);
//
// chkMatchWholeWord
//
this.chkMatchWholeWord.AutoSize = true;
this.chkMatchWholeWord.Location = new System.Drawing.Point(145, 27);
this.chkMatchWholeWord.Name = "chkMatchWholeWord";
this.chkMatchWholeWord.Size = new System.Drawing.Size(90, 16);
this.chkMatchWholeWord.TabIndex = 5;
this.chkMatchWholeWord.Text = "全字匹配(&W)";
this.chkMatchWholeWord.UseVisualStyleBackColor = true;
//
// chkMatchCase
//
this.chkMatchCase.AutoSize = true;
this.chkMatchCase.Location = new System.Drawing.Point(22, 27);
this.chkMatchCase.Name = "chkMatchCase";
this.chkMatchCase.Size = new System.Drawing.Size(102, 16);
this.chkMatchCase.TabIndex = 4;
this.chkMatchCase.Text = "大小写匹配(&C)";
this.chkMatchCase.UseVisualStyleBackColor = true;
//
// btnFindAllHighlightAll
//
this.btnFindAllHighlightAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFindAllHighlightAll.Location = new System.Drawing.Point(66, 174);
this.btnFindAllHighlightAll.Name = "btnFindAllHighlightAll";
this.btnFindAllHighlightAll.Size = new System.Drawing.Size(150, 30);
this.btnFindAllHighlightAll.TabIndex = 8;
this.btnFindAllHighlightAll.Text = "查找全部并高亮显示(&H)";
this.btnFindAllHighlightAll.UseVisualStyleBackColor = true;
this.btnFindAllHighlightAll.Visible = false;
this.btnFindAllHighlightAll.Click += new System.EventHandler(this.btnHighlightAll_Click);
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(228, 173);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(100, 30);
this.btnCancel.TabIndex = 6;
this.btnCancel.Text = "取消(&C)";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// btnFindPrevious
//
this.btnFindPrevious.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnFindPrevious.Location = new System.Drawing.Point(118, 138);
this.btnFindPrevious.Name = "btnFindPrevious";
this.btnFindPrevious.Size = new System.Drawing.Size(100, 30);
this.btnFindPrevious.TabIndex = 6;
this.btnFindPrevious.Text = "查找上一个(&P)";
this.btnFindPrevious.UseVisualStyleBackColor = true;
this.btnFindPrevious.Click += new System.EventHandler(this.BtnFindPrevious_Click);
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.chkMatchCase);
this.groupBox1.Controls.Add(this.chkMatchWholeWord);
this.groupBox1.Location = new System.Drawing.Point(14, 64);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(313, 63);
this.groupBox1.TabIndex = 10;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "查找选项";
//
// FindAndReplaceForm
//
this.AcceptButton = this.btnReplace;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(339, 215);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.btnReplaceAll);
this.Controls.Add(this.btnReplace);
this.Controls.Add(this.btnFindAllHighlightAll);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnFindPrevious);
this.Controls.Add(this.btnFindNext);
this.Controls.Add(this.txtReplaceWith);
this.Controls.Add(this.txtLookFor);
this.Controls.Add(this.lblReplaceWith);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FindAndReplaceForm";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "查找和替换";
this.TopMost = true;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FindAndReplaceForm_FormClosing);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lblReplaceWith;
private System.Windows.Forms.TextBox txtLookFor;
private System.Windows.Forms.TextBox txtReplaceWith;
private System.Windows.Forms.Button btnFindNext;
private System.Windows.Forms.Button btnReplace;
private System.Windows.Forms.Button btnReplaceAll;
private System.Windows.Forms.CheckBox chkMatchWholeWord;
private System.Windows.Forms.CheckBox chkMatchCase;
private System.Windows.Forms.Button btnFindAllHighlightAll;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnFindPrevious;
private System.Windows.Forms.GroupBox groupBox1;
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+92
View File
@@ -0,0 +1,92 @@
namespace RySmartEditor.Controls
{
partial class FrmTitle
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.TxtTitle = new ryControls.TextBoxEx2();
this.BtnOK = new ryControls.ButtonEx();
this.SuspendLayout();
//
// TxtTitle
//
this.TxtTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TxtTitle.BackColor = System.Drawing.Color.White;
this.TxtTitle.EmptyText = "请输入标题";
this.TxtTitle.ImeMode = System.Windows.Forms.ImeMode.Close;
this.TxtTitle.Location = new System.Drawing.Point(12, 23);
this.TxtTitle.MaxLength = 999999999;
this.TxtTitle.Multiline = false;
this.TxtTitle.Name = "TxtTitle";
this.TxtTitle.OnlyNumeric = false;
this.TxtTitle.PasswordChar = '\0';
this.TxtTitle.ReadOnly = false;
this.TxtTitle.SelectedText = "";
this.TxtTitle.SelectionLength = 0;
this.TxtTitle.SelectionStart = 0;
this.TxtTitle.Size = new System.Drawing.Size(363, 23);
this.TxtTitle.TabIndex = 111;
this.TxtTitle.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.TxtTitle.ToolTip = "";
this.TxtTitle.WordWrap = true;
//
// BtnOK
//
this.BtnOK.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95)))));
this.BtnOK.Location = new System.Drawing.Point(292, 78);
this.BtnOK.Name = "BtnOK";
this.BtnOK.Size = new System.Drawing.Size(82, 26);
this.BtnOK.TabIndex = 112;
this.BtnOK.Text = "确定";
this.BtnOK.UseVisualStyleBackColor = true;
this.BtnOK.Click += new System.EventHandler(this.BtnOK_Click);
//
// FrmTitle
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(383, 116);
this.Controls.Add(this.BtnOK);
this.Controls.Add(this.TxtTitle);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FrmTitle";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "请输入标题";
this.TopMost = true;
this.ResumeLayout(false);
}
#endregion
private ryControls.ButtonEx BtnOK;
public ryControls.TextBoxEx2 TxtTitle;
}
}
+29
View File
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RySmartEditor.Controls
{
public partial class FrmTitle : Form
{
public FrmTitle()
{
InitializeComponent();
}
private void BtnOK_Click(object sender, EventArgs e)
{
if(TxtTitle.Text.Length<2)
{
MessageBox.Show("内容输入太短。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
DialogResult = DialogResult.OK;
}
}
}
@@ -0,0 +1,154 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace AutocompleteMenuNS
{
/// <summary>
/// Item of autocomplete menu
/// </summary>
public class AutocompleteItem
{
public object Tag;
string toolTipTitle;
string toolTipText;
string menuText;
/// <summary>
/// Parent AutocompleteMenu
/// </summary>
public AutocompleteMenu Parent { get; internal set; }
/// <summary>
/// Text for inserting into textbox
/// </summary>
public string Text { get; set; }
/// <summary>
/// Image index for this item
/// </summary>
public int ImageIndex{get; set; }
/// <summary>
/// Alignment. The direction the text shows.
/// </summary>
public StringAlignment Alignment { get; set; }
/// <summary>
/// Title for tooltip.
/// </summary>
/// <remarks>Return null for disable tooltip for this item</remarks>
public virtual string ToolTipTitle
{
get { return toolTipTitle; }
set { toolTipTitle = value; }
}
/// <summary>
/// Tooltip text.
/// </summary>
/// <remarks>For display tooltip text, ToolTipTitle must be not null</remarks>
public virtual string ToolTipText
{
get { return toolTipText; }
set { toolTipText = value; }
}
/// <summary>
/// Menu text. This text is displayed in the drop-down menu.
/// </summary>
public virtual string MenuText
{
get { return menuText; }
set { menuText = value; }
}
public AutocompleteItem()
{
ImageIndex = -1;
}
public AutocompleteItem(string text):this()
{
Text = text;
Alignment = StringAlignment.Near;
}
public AutocompleteItem(string text, int imageIndex)
: this(text)
{
this.ImageIndex = imageIndex;
}
public AutocompleteItem(string text, int imageIndex, string menuText)
: this(text, imageIndex)
{
this.menuText = menuText;
}
public AutocompleteItem(string text, int imageIndex, string menuText, string toolTipTitle, string toolTipText)
: this(text, imageIndex, menuText)
{
this.toolTipTitle = toolTipTitle;
this.toolTipText = toolTipText;
}
/// <summary>
/// Returns text for inserting into Textbox
/// </summary>
public virtual string GetTextForReplace()
{
return Text;
}
/// <summary>
/// Compares fragment text with this item
/// </summary>
public virtual CompareResult Compare(string fragmentText)
{
if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) &&
Text != fragmentText)
return CompareResult.VisibleAndSelected;
return CompareResult.Hidden;
}
/// <summary>
/// Returns text for display into popup menu
/// </summary>
public override string ToString()
{
return menuText ?? Text;
}
/// <summary>
/// This method is called after item was inserted into text
/// </summary>
public virtual void OnSelected(SelectedEventArgs e)
{
}
public virtual void OnPaint(PaintItemEventArgs e)
{
using(var brush = new SolidBrush(e.IsSelected ? e.Colors.SelectedForeColor : e.Colors.ForeColor))
e.Graphics.DrawString(ToString(), e.Font, brush, e.TextRect, new StringFormat() {Alignment = Alignment});
}
}
public enum CompareResult
{
/// <summary>
/// Item do not appears
/// </summary>
Hidden,
/// <summary>
/// Item appears
/// </summary>
Visible,
/// <summary>
/// Item appears and will selected
/// </summary>
VisibleAndSelected
}
}
@@ -0,0 +1,199 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
/// <summary>
/// This autocomplete item appears after dot
/// </summary>
public class MethodAutocompleteItem : AutocompleteItem
{
string firstPart;
string lowercaseText;
public MethodAutocompleteItem(string text)
: base(text)
{
lowercaseText = Text.ToLower();
}
public override CompareResult Compare(string fragmentText)
{
int i = fragmentText.LastIndexOf('.');
if (i < 0)
return CompareResult.Hidden;
string lastPart = fragmentText.Substring(i + 1);
firstPart = fragmentText.Substring(0, i);
if (lastPart == "") return CompareResult.Visible;
if (Text.StartsWith(lastPart, StringComparison.InvariantCultureIgnoreCase))
return CompareResult.VisibleAndSelected;
if (lowercaseText.Contains(lastPart.ToLower()))
return CompareResult.Visible;
return CompareResult.Hidden;
}
public override string GetTextForReplace()
{
return firstPart + "." + Text;
}
}
/// <summary>
/// Autocomplete item for code snippets
/// </summary>
/// <remarks>Snippet can contain special char ^ for caret position.</remarks>
public class SnippetAutocompleteItem : AutocompleteItem
{
public SnippetAutocompleteItem(string snippet)
{
Text = snippet.Replace("\r", "");
ToolTipTitle = "Code snippet:";
ToolTipText = Text;
}
public override string ToString()
{
return MenuText ?? Text.Replace("\n", " ").Replace("^", "");
}
public override string GetTextForReplace()
{
return Text;
}
public override void OnSelected(SelectedEventArgs e)
{
var tb = Parent.TargetControlWrapper;
//
if (!Text.Contains("^"))
return;
var text = tb.Text;
for (int i = Parent.Fragment.Start; i < text.Length; i++)
if (text[i] == '^')
{
tb.SelectionStart = i;
tb.SelectionLength = 1;
tb.SelectedText = "";
return;
}
}
/// <summary>
/// Compares fragment text with this item
/// </summary>
public override CompareResult Compare(string fragmentText)
{
if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) &&
Text != fragmentText)
return CompareResult.Visible;
return CompareResult.Hidden;
}
}
/// <summary>
/// This class finds items by substring
/// </summary>
public class SubstringAutocompleteItem : AutocompleteItem
{
protected readonly string lowercaseText;
protected readonly bool ignoreCase;
public SubstringAutocompleteItem(string text, bool ignoreCase = true)
: base(text)
{
this.ignoreCase = ignoreCase;
if(ignoreCase)
lowercaseText = text.ToLower();
}
public override CompareResult Compare(string fragmentText)
{
if(ignoreCase)
{
if (lowercaseText.Contains(fragmentText.ToLower()))
return CompareResult.Visible;
}
else
{
if (Text.Contains(fragmentText))
return CompareResult.Visible;
}
return CompareResult.Hidden;
}
}
/// <summary>
/// This item draws multicolumn menu
/// </summary>
public class MulticolumnAutocompleteItem : SubstringAutocompleteItem
{
public bool CompareBySubstring { get; set; }
public string[] MenuTextByColumns { get; set; }
public int[] ColumnWidth { get; set; }
public StringAlignment[] Alignments { get; set; }
public MulticolumnAutocompleteItem(string[] menuTextByColumns, string insertingText, bool compareBySubstring = true, bool ignoreCase = true)
: base(insertingText, ignoreCase)
{
this.CompareBySubstring = compareBySubstring;
this.MenuTextByColumns = menuTextByColumns;
var tmp = new List<StringAlignment>();
for(int i = 0; i < menuTextByColumns.Length; i++)
tmp.Add(StringAlignment.Near);
this.Alignments = tmp.ToArray();
}
public override CompareResult Compare(string fragmentText)
{
if (CompareBySubstring)
return base.Compare(fragmentText);
if(ignoreCase)
{
if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase))
return CompareResult.VisibleAndSelected;
} else
if (Text.StartsWith(fragmentText))
return CompareResult.VisibleAndSelected;
return CompareResult.Hidden;
}
public override void OnPaint(PaintItemEventArgs e)
{
if (ColumnWidth != null && ColumnWidth.Length != MenuTextByColumns.Length)
throw new Exception("ColumnWidth.Length != MenuTextByColumns.Length");
int[] columnWidth = ColumnWidth;
if(columnWidth == null)
{
columnWidth = new int[MenuTextByColumns.Length];
float step = e.TextRect.Width/MenuTextByColumns.Length;
for (int i = 0; i < MenuTextByColumns.Length; i++)
columnWidth[i] = (int)step;
}
//draw columns
Pen pen = Pens.Silver;
float x = e.TextRect.X;
e.StringFormat.FormatFlags = e.StringFormat.FormatFlags | StringFormatFlags.NoWrap;
using (var brush = new SolidBrush(e.IsSelected ? e.Colors.SelectedForeColor : e.Colors.ForeColor))
for (int i=0;i<MenuTextByColumns.Length;i++)
{
var width = columnWidth[i];
var rect = new RectangleF(x, e.TextRect.Top, width, e.TextRect.Height);
e.Graphics.DrawLine(pen, new PointF(x, e.TextRect.Top), new PointF(x, e.TextRect.Bottom));
e.Graphics.DrawString(MenuTextByColumns[i], e.Font, brush, rect, new StringFormat() {Alignment = Alignments[i]});
x += width;
}
}
}
}
@@ -0,0 +1,420 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
[System.ComponentModel.ToolboxItem(false)]
public class AutocompleteListView : UserControl, IAutocompleteListView
{
private readonly ToolTip toolTip = new ToolTip();
public int HighlightedItemIndex { get; set; }
private int oldItemCount;
private int selectedItemIndex = -1;
private IList<AutocompleteItem> visibleItems;
/// <summary>
/// Duration (ms) of tooltip showing
/// </summary>
public int ToolTipDuration { get; set; }
/// <summary>
/// Occurs when user selected item for inserting into text
/// </summary>
public event EventHandler ItemSelected;
/// <summary>
/// Occurs when current hovered item is changing
/// </summary>
public event EventHandler<HoveredEventArgs> ItemHovered;
/// <summary>
/// Colors
/// </summary>
public Colors Colors { get; set; }
internal AutocompleteListView()
{
SetStyle(
ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
base.Font = new Font(FontFamily.GenericSansSerif, 11);
ItemHeight = Font.Height + 2;
VerticalScroll.SmallChange = ItemHeight;
BackColor = Color.White;
LeftPadding = 18;
ToolTipDuration = 3000;
Colors = new Colors();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
toolTip.Dispose();
}
base.Dispose(disposing);
}
private int itemHeight;
public int ItemHeight
{
get { return itemHeight; }
set {
itemHeight = value;
VerticalScroll.SmallChange = value;
oldItemCount = -1;
AdjustScroll();
}
}
public override Font Font
{
get { return base.Font; }
set
{
base.Font = value;
ItemHeight = Font.Height + 2;
}
}
public int LeftPadding { get; set; }
public ImageList ImageList { get; set; }
public string[] ColumnsTitle { get; set; } = null;
public int[] ColumnsWidth { get; set; } = null;
public IList<AutocompleteItem> VisibleItems
{
get { return visibleItems; }
set
{
visibleItems = value;
SelectedItemIndex = -1;
AdjustScroll();
Invalidate();
}
}
public int SelectedItemIndex
{
get { return selectedItemIndex; }
set
{
AutocompleteItem item = null;
if (value >= 0 && value < VisibleItems.Count)
item = VisibleItems[value];
selectedItemIndex = value;
OnItemHovered(new HoveredEventArgs() { Item = item });
if (item != null)
{
ShowToolTip(item, this.Parent);
ScrollToSelected();
}
Invalidate();
}
}
private void OnItemHovered(HoveredEventArgs e)
{
if (ItemHovered != null)
ItemHovered(this, e);
}
private void AdjustScroll()
{
if (VisibleItems == null)
return;
if (oldItemCount == VisibleItems.Count)
return;
int needHeight = ItemHeight*VisibleItems.Count + 1;
if (HasColumn) needHeight += ItemHeight;
Height = Math.Min(needHeight, MaximumSize.Height);
AutoScrollMinSize = new Size(0, needHeight);
oldItemCount = VisibleItems.Count;
}
private void ScrollToSelected()
{
int y;
if(HasColumn)
y = (SelectedItemIndex + 1)*ItemHeight - VerticalScroll.Value;
else
y = SelectedItemIndex * ItemHeight - VerticalScroll.Value;
//if (HasColumn) y += ItemHeight;
if (y < 0)
if(HasColumn)
VerticalScroll.Value = (SelectedItemIndex + 1) * ItemHeight;
else
VerticalScroll.Value = SelectedItemIndex * ItemHeight;
if (y > ClientSize.Height - ItemHeight)
VerticalScroll.Value = Math.Min(VerticalScroll.Maximum,
(HasColumn ? (SelectedItemIndex*ItemHeight) + ItemHeight : SelectedItemIndex * ItemHeight) - ClientSize.Height + ItemHeight);
//Show headers if index 0 is selected.
if (HasColumn && SelectedItemIndex == 0)
VerticalScroll.Value = 0;
//some magic for update scrolls
AutoScrollMinSize -= new Size(1, 0);
AutoScrollMinSize += new Size(1, 0);
}
public Rectangle GetItemRectangle(int itemIndex)
{
var y = itemIndex * ItemHeight - VerticalScroll.Value;
return new Rectangle(0, y, ClientSize.Width - 1, ItemHeight - 1);
}
protected override void OnPaintBackground(PaintEventArgs e)
{
e.Graphics.Clear(Colors.BackColor);
}
private bool HasColumn
{
get
{
return ColumnsTitle != null && ColumnsTitle.Length != 0;
}
}
protected override void OnPaint(PaintEventArgs e)
{
bool rtl = RightToLeft == RightToLeft.Yes;
AdjustScroll();
int startI = VerticalScroll.Value/ItemHeight - 1;
int finishI = (VerticalScroll.Value + ClientSize.Height)/ItemHeight + 1;
int y = 0;
var sf = new StringFormat();
if (rtl)
sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
if (HasColumn && VerticalScroll.Value == 0)
{
var textRect = new Rectangle(LeftPadding, y, ClientSize.Width - 1 - LeftPadding, ItemHeight - 1);
if (rtl)
textRect = new Rectangle(1, y, ClientSize.Width - 1 - LeftPadding, ItemHeight - 1);
int[] columnWidth = ColumnsWidth;
if (columnWidth == null)
{
columnWidth = new int[ColumnsTitle.Length];
float step = textRect.Width / ColumnsTitle.Length;
for (int i = 0; i < ColumnsTitle.Length; i++)
columnWidth[i] = (int)step;
}
float x = textRect.X;
sf.Alignment = StringAlignment.Center;
for (int i = 0; i < ColumnsTitle.Length; i++)
{
using (var brush = new SolidBrush(Colors.ForeColor))
{
var width = columnWidth[i];
var rect = new RectangleF(x, textRect.Top, width, textRect.Height);
e.Graphics.DrawLine(Pens.Silver, new PointF(x, textRect.Top), new PointF(x, textRect.Bottom));
e.Graphics.DrawString(ColumnsTitle[i], Font, brush, rect, sf);
x += width;
}
}
if (rtl)
sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
else
sf = new StringFormat();
}
startI = Math.Max(startI, 0);
finishI = Math.Min(finishI, VisibleItems.Count);
for (int i = startI; i < finishI; i++)
{
if(HasColumn)
y = (i * ItemHeight - VerticalScroll.Value) + ItemHeight;
else
y = i * ItemHeight - VerticalScroll.Value;
if (ImageList != null && VisibleItems[i].ImageIndex >= 0)
if (rtl)
e.Graphics.DrawImage(ImageList.Images[VisibleItems[i].ImageIndex], Width - 1 - LeftPadding, y);
else
e.Graphics.DrawImage(ImageList.Images[VisibleItems[i].ImageIndex], 1, y);
var textRect = new Rectangle(LeftPadding, y, ClientSize.Width - 1 - LeftPadding, ItemHeight - 1);
if (rtl)
textRect = new Rectangle(1, y, ClientSize.Width - 1 - LeftPadding, ItemHeight - 1);
if (i == SelectedItemIndex)
{
Brush selectedBrush = new LinearGradientBrush(new Point(0, y - 3), new Point(0, y + ItemHeight),
Colors.SelectedBackColor2, Colors.SelectedBackColor);
e.Graphics.FillRectangle(selectedBrush, textRect);
using(var pen = new Pen(Colors.SelectedBackColor2))
e.Graphics.DrawRectangle(pen, textRect);
}
if (i == HighlightedItemIndex)
using (var pen = new Pen(Colors.HighlightingColor))
e.Graphics.DrawRectangle(pen, textRect);
var args = new PaintItemEventArgs(e.Graphics, e.ClipRectangle)
{
Font = Font,
TextRect = new RectangleF(textRect.Location, textRect.Size),
StringFormat = sf,
IsSelected = i == SelectedItemIndex,
IsHovered = i == HighlightedItemIndex,
Colors = Colors
};
//call drawing
VisibleItems[i].OnPaint(args);
}
}
protected override void OnScroll(ScrollEventArgs se)
{
base.OnScroll(se);
Invalidate(true);
}
protected override void OnMouseClick(MouseEventArgs e)
{
int i = PointToItemIndex(e.Location);
if (i >= 0)
{
base.OnMouseClick(e);
if (e.Button == MouseButtons.Left)
{
SelectedItemIndex = i;
ScrollToSelected();
Invalidate();
}
}
}
private Point mouseEnterPoint;
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
mouseEnterPoint = Control.MousePosition;
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (mouseEnterPoint != Control.MousePosition)
{
int i = PointToItemIndex(e.Location);
if (i >= 0)
{
HighlightedItemIndex = i;
Invalidate();
}
}
}
protected override void OnMouseDoubleClick(MouseEventArgs e)
{
int i = PointToItemIndex(e.Location);
if (i >= 0)
{
base.OnMouseDoubleClick(e);
SelectedItemIndex = i;
Invalidate();
OnItemSelected();
}
}
private void OnItemSelected()
{
if (ItemSelected != null)
ItemSelected(this, EventArgs.Empty);
}
private int PointToItemIndex(Point p)
{
var t = (p.Y + VerticalScroll.Value);
if (HasColumn)
t -= ItemHeight;
return (float)t / ItemHeight < 0 ? -1 : t / ItemHeight;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
var host = Parent as AutocompleteMenuHost;
if (host != null)
if (host.Menu.ProcessKey((char) keyData, Keys.None))
return true;
return base.ProcessCmdKey(ref msg, keyData);
}
public void SelectItem(int itemIndex)
{
SelectedItemIndex = itemIndex;
ScrollToSelected();
Invalidate();
}
public void SetItems(List<AutocompleteItem> items)
{
VisibleItems = items;
SelectedItemIndex = -1;
AdjustScroll();
Invalidate();
}
public void ShowToolTip(AutocompleteItem autocompleteItem, Control control = null)
{
string title = autocompleteItem.ToolTipTitle;
string text = autocompleteItem.ToolTipText;
if (control == null)
control = this;
if (string.IsNullOrEmpty(title))
{
toolTip.ToolTipTitle = null;
toolTip.SetToolTip(control, null);
return;
}
if (string.IsNullOrEmpty(text))
{
toolTip.ToolTipTitle = null;
toolTip.Show(title, control, Width + 3, 0, ToolTipDuration);
}
else
{
toolTip.ToolTipTitle = title;
toolTip.Show(text, control, Width + 3, 0, ToolTipDuration);
}
}
public void HideToolTip(Control control)
{
toolTip.Hide(control);
}
public Control GetParentControl()
{
return this.Parent;
}
}
}
@@ -0,0 +1,903 @@
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// License: GNU Lesser General Public License (LGPLv3)
//
// Email: p_torgashov@ukr.net.
//
// Copyright (C) Pavel Torgashov, 2012-2015.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics;
namespace AutocompleteMenuNS
{
[ProvideProperty("AutocompleteMenu", typeof(Control))]
public class AutocompleteMenu : Component, IExtenderProvider
{
private static readonly Dictionary<Control, AutocompleteMenu> AutocompleteMenuByControls =
new Dictionary<Control, AutocompleteMenu>();
private static readonly Dictionary<Control, ITextBoxWrapper> WrapperByControls =
new Dictionary<Control, ITextBoxWrapper>();
private ITextBoxWrapper targetControlWrapper;
private readonly Timer timer = new Timer();
private IEnumerable<AutocompleteItem> sourceItems = new List<AutocompleteItem>();
[Browsable(false)]
public IList<AutocompleteItem> VisibleItems { get { return Host.ListView.VisibleItems; } private set { Host.ListView.VisibleItems = value;} }
private Size maximumSize;
/// <summary>
/// Duration (ms) of tooltip showing
/// </summary>
[Description("Duration (ms) of tooltip showing")]
[DefaultValue(3000)]
public int ToolTipDuration
{
get { return Host.ListView.ToolTipDuration; }
set { Host.ListView.ToolTipDuration = value; }
}
public AutocompleteMenu()
{
Host = new AutocompleteMenuHost(this);
Host.ListView.ItemSelected += new EventHandler(ListView_ItemSelected);
Host.ListView.ItemHovered += new EventHandler<HoveredEventArgs>(ListView_ItemHovered);
VisibleItems = new List<AutocompleteItem>();
Enabled = true;
AppearInterval = 500;
timer.Tick += timer_Tick;
MaximumSize = new Size(180, 200);
AutoPopup = true;
SearchPattern = @"[\w\.]";
MinFragmentLength = 2;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
timer.Dispose();
Host.Dispose();
}
base.Dispose(disposing);
}
void ListView_ItemSelected(object sender, EventArgs e)
{
OnSelecting();
}
void ListView_ItemHovered(object sender, HoveredEventArgs e)
{
OnHovered(e);
}
public void OnHovered(HoveredEventArgs e)
{
if (Hovered != null)
Hovered(this, e);
}
[Browsable(false)]
public int SelectedItemIndex { get { return Host.ListView.SelectedItemIndex; }
internal set { Host.ListView.SelectedItemIndex = value; }
}
internal AutocompleteMenuHost Host { get; set; }
/// <summary>
/// Called when user selected the control and needed wrapper over it.
/// You can assign own Wrapper for target control.
/// </summary>
[Description("Called when user selected the control and needed wrapper over it. You can assign own Wrapper for target control.")]
public event EventHandler<WrapperNeededEventArgs> WrapperNeeded;
protected void OnWrapperNeeded(WrapperNeededEventArgs args)
{
if (WrapperNeeded != null)
WrapperNeeded(this, args);
if (args.Wrapper == null)
args.Wrapper = TextBoxWrapper.Create(args.TargetControl);
}
ITextBoxWrapper CreateWrapper(Control control)
{
if (WrapperByControls.ContainsKey(control))
return WrapperByControls[control];
var args = new WrapperNeededEventArgs(control);
OnWrapperNeeded(args);
if (args.Wrapper != null)
WrapperByControls[control] = args.Wrapper;
return args.Wrapper;
}
/// <summary>
/// Current target control wrapper
/// </summary>
[Browsable(false)]
public ITextBoxWrapper TargetControlWrapper
{
get { return targetControlWrapper; }
set {
targetControlWrapper = value;
if (value != null && !WrapperByControls.ContainsKey(value.TargetControl))
{
WrapperByControls[value.TargetControl] = value;
SetAutocompleteMenu(value.TargetControl, this);
}
}
}
/// <summary>
/// Maximum size of popup menu
/// </summary>
[DefaultValue(typeof(Size), "180, 200")]
[Description("Maximum size of popup menu")]
public Size MaximumSize
{
get { return maximumSize; }
set {
maximumSize = value;
(Host.ListView as Control).MaximumSize = maximumSize;
(Host.ListView as Control).Size = maximumSize;
Host.CalcSize();
}
}
/// <summary>
/// Font
/// </summary>
public Font Font
{
get { return (Host.ListView as Control).Font; }
set { (Host.ListView as Control).Font = value; }
}
/// <summary>
/// Left padding of text
/// </summary>
[DefaultValue(18)]
[Description("Left padding of text")]
public int LeftPadding
{
get {
if (Host.ListView is AutocompleteListView)
return (Host.ListView as AutocompleteListView).LeftPadding;
else
return 0;
}
set {
if (Host.ListView is AutocompleteListView)
(Host.ListView as AutocompleteListView).LeftPadding = value;
}
}
/// <summary>
/// Colors of foreground and background
/// </summary>
[Browsable(true)]
[Description("Colors of foreground and background.")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public Colors Colors
{
get { return (Host.ListView as IAutocompleteListView).Colors; }
set { (Host.ListView as IAutocompleteListView).Colors = value; }
}
/// <summary>
/// AutocompleteMenu will popup automatically (when user writes text). Otherwise it will popup only programmatically or by Ctrl-Space.
/// </summary>
[DefaultValue(true)]
[Description("AutocompleteMenu will popup automatically (when user writes text). Otherwise it will popup only programmatically or by Ctrl-Space.")]
public bool AutoPopup { get; set; }
/// <summary>
/// AutocompleteMenu will capture focus when opening.
/// </summary>
[DefaultValue(false)]
[Description("AutocompleteMenu will capture focus when opening.")]
public bool CaptureFocus { get; set; }
/// <summary>
/// Indicates whether the component should draw right-to-left for RTL languages.
/// </summary>
[DefaultValue(typeof(RightToLeft), "No")]
[Description("Indicates whether the component should draw right-to-left for RTL languages.")]
public RightToLeft RightToLeft {
get { return Host.RightToLeft; }
set { Host.RightToLeft = value; }
}
/// <summary>
/// Image list
/// </summary>
public ImageList ImageList {
get { return Host.ListView.ImageList; }
set { Host.ListView.ImageList = value; }
}
/// <summary>
/// Fragment
/// </summary>
[Browsable(false)]
public Range Fragment { get; internal set; }
/// <summary>
/// Regex pattern for serach fragment around caret
/// </summary>
[Description("Regex pattern for serach fragment around caret")]
[DefaultValue(@"[\w\.]")]
public string SearchPattern { get; set; }
/// <summary>
/// Minimum fragment length for popup
/// </summary>
[Description("Minimum fragment length for popup")]
[DefaultValue(2)]
public int MinFragmentLength { get; set; }
/// <summary>
/// Allows TAB for select menu item
/// </summary>
[Description("Allows TAB for select menu item")]
[DefaultValue(false)]
public bool AllowsTabKey { get; set; }
/// <summary>
/// Interval of menu appear (ms)
/// </summary>
[Description("Interval of menu appear (ms)")]
[DefaultValue(500)]
public int AppearInterval { get; set; }
[DefaultValue(null)]
public string[] Items
{
get
{
if (sourceItems == null)
return null;
var list = new List<string>();
foreach (AutocompleteItem item in sourceItems)
list.Add(item.ToString());
return list.ToArray();
}
set { SetAutocompleteItems(value); }
}
/// <summary>
/// The control for menu displaying.
/// Set to null for restore default ListView (AutocompleteListView).
/// </summary>
[Browsable(false)]
public IAutocompleteListView ListView
{
get { return Host.ListView; }
set
{
if (ListView != null)
{
var ctrl = value as Control;
value.ImageList = ImageList;
ctrl.RightToLeft = RightToLeft;
ctrl.Font = Font;
ctrl.MaximumSize = MaximumSize;
}
Host.ListView = value;
Host.ListView.ItemSelected += new EventHandler(ListView_ItemSelected);
Host.ListView.ItemHovered += new EventHandler<HoveredEventArgs>(ListView_ItemHovered);
}
}
[DefaultValue(true)]
public bool Enabled { get; set; }
/// <summary>
/// Updates size of the menu
/// </summary>
public void Update()
{
Host.CalcSize();
}
/// <summary>
/// Returns rectangle of item
/// </summary>
public Rectangle GetItemRectangle(int itemIndex)
{
return Host.ListView.GetItemRectangle(itemIndex);
}
#region IExtenderProvider Members
bool IExtenderProvider.CanExtend(object extendee)
{
//find AutocompleteMenu with lowest hashcode
if (Container != null)
foreach (object comp in Container.Components)
if (comp is AutocompleteMenu)
if (comp.GetHashCode() < GetHashCode())
return false;
//we are main autocomplete menu on form ...
//check extendee as TextBox
if (!(extendee is Control))
return false;
var temp = TextBoxWrapper.Create(extendee as Control);
return temp!=null;
}
public void SetAutocompleteMenu(Control control, AutocompleteMenu menu)
{
if (menu != null)
{
if (WrapperByControls.ContainsKey(control))
{
var wrapper = WrapperByControls[control];
if (wrapper == null) return;
//
if (control.IsHandleCreated)
menu.SubscribeForm(wrapper);
else
control.HandleCreated += (o, e) => menu.SubscribeForm(wrapper);
//
AutocompleteMenuByControls[control] = this;
//
wrapper.LostFocus += menu.control_LostFocus;
wrapper.Scroll += menu.control_Scroll;
wrapper.KeyDown += menu.control_KeyDown;
wrapper.MouseDown += menu.control_MouseDown;
}
else
{
var wrapper = menu.CreateWrapper(control);
if (wrapper == null) return;
//
if (control.IsHandleCreated)
menu.SubscribeForm(wrapper);
else
control.HandleCreated += (o, e) => menu.SubscribeForm(wrapper);
//
AutocompleteMenuByControls[control] = this;
//
wrapper.LostFocus += menu.control_LostFocus;
wrapper.Scroll += menu.control_Scroll;
wrapper.KeyDown += menu.control_KeyDown;
wrapper.MouseDown += menu.control_MouseDown;
}
}
else
{
AutocompleteMenuByControls.TryGetValue(control, out menu);
AutocompleteMenuByControls.Remove(control);
ITextBoxWrapper wrapper = null;
WrapperByControls.TryGetValue(control, out wrapper);
WrapperByControls.Remove(control);
if (wrapper != null && menu != null)
{
wrapper.LostFocus -= menu.control_LostFocus;
wrapper.Scroll -= menu.control_Scroll;
wrapper.KeyDown -= menu.control_KeyDown;
wrapper.MouseDown -= menu.control_MouseDown;
}
}
}
#endregion
/// <summary>
/// User selects item
/// </summary>
[Description("Occurs when user selects item.")]
public event EventHandler<SelectingEventArgs> Selecting;
/// <summary>
/// It fires after item was inserting
/// </summary>
[Description("Occurs after user selected item.")]
public event EventHandler<SelectedEventArgs> Selected;
/// <summary>
/// It fires when item was hovered
/// </summary>
[Description("Occurs when user hovered item.")]
public event EventHandler<HoveredEventArgs> Hovered;
/// <summary>
/// Occurs when popup menu is opening
/// </summary>
public event EventHandler<CancelEventArgs> Opening;
private void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
if(TargetControlWrapper!=null)
ShowAutocomplete(false);
}
private Form myForm;
void SubscribeForm(ITextBoxWrapper wrapper)
{
if (wrapper == null) return;
var form = wrapper.TargetControl.FindForm();
if (form == null) return;
if (myForm != null)
{
if (myForm == form)
return;
UnsubscribeForm(wrapper);
}
myForm = form;
form.LocationChanged += new EventHandler(form_LocationChanged);
form.ResizeBegin += new EventHandler(form_LocationChanged);
form.FormClosing += new FormClosingEventHandler(form_FormClosing);
form.LostFocus += new EventHandler(form_LocationChanged);
}
void UnsubscribeForm(ITextBoxWrapper wrapper)
{
if (wrapper == null) return;
var form = wrapper.TargetControl.FindForm();
if (form == null) return;
form.LocationChanged -= new EventHandler(form_LocationChanged);
form.ResizeBegin -= new EventHandler(form_LocationChanged);
form.FormClosing -= new FormClosingEventHandler(form_FormClosing);
form.LostFocus -= new EventHandler(form_LocationChanged);
}
private void form_FormClosing(object sender, FormClosingEventArgs e)
{
Close();
}
private void form_LocationChanged(object sender, EventArgs e)
{
Close();
}
private void control_MouseDown(object sender, MouseEventArgs e)
{
Close();
}
ITextBoxWrapper FindWrapper(Control sender)
{
while (sender != null)
{
if (WrapperByControls.ContainsKey(sender))
return WrapperByControls[sender];
sender = sender.Parent;
}
return null;
}
private void control_KeyDown(object sender, KeyEventArgs e)
{
TargetControlWrapper = FindWrapper(sender as Control);
bool backspaceORdel = e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete;
if (Host.Visible)
{
if (ProcessKey((char)e.KeyCode, Control.ModifierKeys))
e.SuppressKeyPress = true;
else
if (!backspaceORdel)
ResetTimer(1);
else
ResetTimer();
return;
}
if (!Host.Visible)
{
switch (e.KeyCode)
{
case Keys.Up:
case Keys.Down:
case Keys.PageUp:
case Keys.PageDown:
case Keys.Left:
case Keys.Right:
case Keys.End:
case Keys.Home:
case Keys.ControlKey:
case Keys.Escape:
case Keys.Tab:
{
timer.Stop();
return;
}
}
if (Control.ModifierKeys== Keys.Alt)
{
timer.Stop();
return;
}
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.Space)
{
ShowAutocomplete(true);
e.SuppressKeyPress = true;
return;
}
}
ResetTimer();
}
void ResetTimer()
{
ResetTimer(-1);
}
void ResetTimer(int interval)
{
if (interval <= 0)
timer.Interval = AppearInterval;
else
timer.Interval = interval;
timer.Stop();
timer.Start();
}
private void control_Scroll(object sender, ScrollEventArgs e)
{
Close();
}
private void control_LostFocus(object sender, EventArgs e)
{
if (!Host.Focused) Close();
}
public AutocompleteMenu GetAutocompleteMenu(Control control)
{
if (AutocompleteMenuByControls.ContainsKey(control))
return AutocompleteMenuByControls[control];
else
return null;
}
bool forcedOpened = false;
internal void ShowAutocomplete(bool forced)
{
if (forced)
forcedOpened = true;
if (TargetControlWrapper != null && TargetControlWrapper.Readonly)
{
Close();
return;
}
if (!Enabled)
{
Close();
return;
}
if (!forcedOpened && !AutoPopup)
{
Close();
return;
}
//build list
BuildAutocompleteList(forcedOpened);
//show popup menu
if (VisibleItems.Count > 0)
{
if (forced && VisibleItems.Count == 1 && Host.ListView.SelectedItemIndex == 0)
{
//do autocomplete if menu contains only one line and user press CTRL-SPACE
OnSelecting();
Close();
}
else
ShowMenu();
}
else
Close();
}
private void ShowMenu()
{
if (!Host.Visible)
{
var args = new CancelEventArgs();
OnOpening(args);
if (!args.Cancel)
{
//calc screen point for popup menu
Point point = TargetControlWrapper.TargetControl.Location;
point.Offset(2, TargetControlWrapper.TargetControl.Height + 2);
point = TargetControlWrapper.GetPositionFromCharIndex(Fragment.Start);
point.Offset(2, TargetControlWrapper.TargetControl.Font.Height + 2);
//
Host.Show(TargetControlWrapper.TargetControl, point);
if (CaptureFocus)
{
(Host.ListView as Control).Focus();
//ProcessKey((char) Keys.Down, Keys.None);
}
}
}
else
(Host.ListView as Control).Invalidate();
}
private void BuildAutocompleteList(bool forced)
{
var visibleItems = new List<AutocompleteItem>();
bool foundSelected = false;
int selectedIndex = -1;
//get fragment around caret
Range fragment = GetFragment(SearchPattern);
string text = fragment.Text;
//
if (sourceItems != null)
if (forced || (text.Length >= MinFragmentLength /* && tb.Selection.Start == tb.Selection.End*/))
{
Fragment = fragment;
//build popup menu
foreach (AutocompleteItem item in sourceItems)
{
item.Parent = this;
CompareResult res = item.Compare(text);
if (res != CompareResult.Hidden)
visibleItems.Add(item);
if (res == CompareResult.VisibleAndSelected && !foundSelected)
{
foundSelected = true;
selectedIndex = visibleItems.Count - 1;
}
}
}
VisibleItems = visibleItems;
if (foundSelected)
Host.ListView.SelectedItemIndex = selectedIndex;
else
Host.ListView.SelectedItemIndex = 0;
Host.ListView.HighlightedItemIndex = -1;
Host.CalcSize();
}
internal void OnOpening(CancelEventArgs args)
{
if (Opening != null)
Opening(this, args);
}
private Range GetFragment(string searchPattern)
{
var tb = TargetControlWrapper;
if (tb.SelectionLength > 0) return new Range(tb);
string text = tb.Text;
var regex = new Regex(searchPattern);
var result = new Range(tb);
int startPos = tb.SelectionStart;
//go forward
int i = startPos;
while (i >= 0 && i < text.Length)
{
if (!regex.IsMatch(text[i].ToString()))
break;
i++;
}
result.End = i;
//go backward
i = startPos;
while (i > 0 && (i - 1) < text.Length)
{
if (!regex.IsMatch(text[i - 1].ToString()))
break;
i--;
}
result.Start = i;
return result;
}
public void Close()
{
Host.ListView.HideToolTip(Host.ListView.GetParentControl());
Host.Close();
forcedOpened = false;
}
public void SetAutocompleteItems(IEnumerable<string> items)
{
var list = new List<AutocompleteItem>();
if (items == null)
{
sourceItems = null;
return;
}
foreach (string item in items)
list.Add(new AutocompleteItem(item));
SetAutocompleteItems(list);
}
public void SetAutocompleteItems(IEnumerable<AutocompleteItem> items)
{
sourceItems = items;
}
public void AddItem(string item)
{
AddItem(new AutocompleteItem(item));
}
public void AddItem(AutocompleteItem item)
{
if (sourceItems == null)
sourceItems = new List<AutocompleteItem>();
if (sourceItems is IList)
(sourceItems as IList).Add(item);
else
throw new Exception("Current autocomplete items does not support adding");
}
/// <summary>
/// Shows popup menu immediately
/// </summary>
/// <param name="forced">If True - MinFragmentLength will be ignored</param>
public void Show(Control control, bool forced)
{
SetAutocompleteMenu(control, this);
this.TargetControlWrapper = FindWrapper(control);
ShowAutocomplete(forced);
}
internal virtual void OnSelecting()
{
if (SelectedItemIndex < 0 || SelectedItemIndex >= VisibleItems.Count)
return;
AutocompleteItem item = VisibleItems[SelectedItemIndex];
var args = new SelectingEventArgs
{
Item = item,
SelectedIndex = SelectedItemIndex
};
OnSelecting(args);
if (args.Cancel)
{
SelectedItemIndex = args.SelectedIndex;
(Host.ListView as Control).Invalidate(true);
return;
}
if (!args.Handled)
{
Range fragment = Fragment;
ApplyAutocomplete(item, fragment);
}
Close();
//
var args2 = new SelectedEventArgs
{
Item = item,
Control = TargetControlWrapper.TargetControl
};
item.OnSelected(args2);
OnSelected(args2);
}
private void ApplyAutocomplete(AutocompleteItem item, Range fragment)
{
string newText = item.GetTextForReplace();
//replace text of fragment
fragment.Text = newText;
fragment.TargetWrapper.TargetControl.Focus();
}
internal void OnSelecting(SelectingEventArgs args)
{
if (Selecting != null)
Selecting(this, args);
}
public void OnSelected(SelectedEventArgs args)
{
if (Selected != null)
Selected(this, args);
}
public void SetColumns(string[] columns, int[] columnsWidth = null)
{
ListView.ColumnsTitle = columns;
ListView.ColumnsWidth = columnsWidth;
}
public void SelectNext(int shift)
{
SelectedItemIndex = Math.Max(0, Math.Min(SelectedItemIndex + shift, VisibleItems.Count - 1));
//
(Host.ListView as Control).Invalidate();
}
public bool ProcessKey(char c, Keys keyModifiers)
{
var page = Host.Height / (Font.Height + 4);
if (keyModifiers == Keys.None)
switch ((Keys) c)
{
case Keys.Down:
SelectNext(+1);
return true;
case Keys.PageDown:
SelectNext(+page);
return true;
case Keys.Up:
SelectNext(-1);
return true;
case Keys.PageUp:
SelectNext(-page);
return true;
case Keys.Enter:
OnSelecting();
return true;
case Keys.Tab:
if (!AllowsTabKey)
break;
OnSelecting();
return true;
case Keys.Left:
case Keys.Right:
Close();
return false;
case Keys.Escape:
Close();
return true;
}
return false;
}
/// <summary>
/// Menu is visible
/// </summary>
public bool Visible
{
get { return Host != null && Host.Visible; }
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,98 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
[System.ComponentModel.ToolboxItem(false)]
internal class AutocompleteMenuHost : ToolStripDropDown
{
private IAutocompleteListView listView;
public ToolStripControlHost Host { get; set; }
public readonly AutocompleteMenu Menu;
public IAutocompleteListView ListView
{
get { return listView; }
set {
if(listView != null)
(listView as Control).LostFocus -= new EventHandler(ListView_LostFocus);
if (value == null)
listView = new AutocompleteListView();
else
{
if (!(value is Control))
throw new Exception("ListView must be derived from Control class");
listView = value;
}
Host = new ToolStripControlHost(ListView as Control);
Host.Margin = new Padding(2, 2, 2, 2);
Host.Padding = Padding.Empty;
Host.AutoSize = false;
Host.AutoToolTip = false;
(ListView as Control).MaximumSize = Menu.MaximumSize;
(ListView as Control).Size = Menu.MaximumSize;
(ListView as Control).LostFocus += new EventHandler(ListView_LostFocus);
CalcSize();
base.Items.Clear();
base.Items.Add(Host);
(ListView as Control).Parent = this;
}
}
public AutocompleteMenuHost(AutocompleteMenu menu)
{
AutoClose = false;
AutoSize = false;
Margin = Padding.Empty;
Padding = Padding.Empty;
Menu = menu;
ListView = new AutocompleteListView();
}
protected override void OnPaintBackground(PaintEventArgs e)
{
using (var brush = new SolidBrush(listView.Colors.BackColor))
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
internal void CalcSize()
{
Host.Size = (ListView as Control).Size;
Size = new System.Drawing.Size((ListView as Control).Size.Width + 4, (ListView as Control).Size.Height + 4);
}
public override RightToLeft RightToLeft
{
get
{
return base.RightToLeft;
}
set
{
base.RightToLeft = value;
(ListView as Control).RightToLeft = value;
}
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
if(!(ListView as Control).Focused)
Close();
}
void ListView_LostFocus(object sender, EventArgs e)
{
if (!Focused)
Close();
}
}
}
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace AutocompleteMenuNS
{
[Serializable]
public class Colors
{
public Color ForeColor { get; set; }
public Color BackColor { get; set; }
public Color SelectedForeColor { get; set; }
public Color SelectedBackColor { get; set; }
public Color SelectedBackColor2 { get; set; }
public Color HighlightingColor { get; set; }
public Colors()
{
ForeColor = Color.Black;
BackColor = Color.White;
SelectedForeColor = Color.Black;
SelectedBackColor = Color.Orange;
SelectedBackColor2 = Color.White;
HighlightingColor = Color.Orange;
}
}
}
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
public class SelectingEventArgs : EventArgs
{
public AutocompleteItem Item { get; internal set; }
public bool Cancel { get; set; }
public int SelectedIndex { get; set; }
public bool Handled { get; set; }
}
public class SelectedEventArgs : EventArgs
{
public AutocompleteItem Item { get; internal set; }
public Control Control { get; set; }
}
public class HoveredEventArgs : EventArgs
{
public AutocompleteItem Item { get; internal set; }
}
public class PaintItemEventArgs : PaintEventArgs
{
public RectangleF TextRect { get; internal set; }
public StringFormat StringFormat { get; internal set; }
public Font Font { get; internal set; }
public bool IsSelected { get; internal set; }
public bool IsHovered { get; internal set; }
public Colors Colors { get; internal set; }
public PaintItemEventArgs(Graphics graphics, Rectangle clipRect):base(graphics, clipRect)
{
}
}
public class WrapperNeededEventArgs : EventArgs
{
public Control TargetControl { get; private set; }
public ITextBoxWrapper Wrapper { get; set; }
public WrapperNeededEventArgs(Control targetControl)
{
this.TargetControl = targetControl;
}
}
}
@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
/// <summary>
/// Control for displaying menu items, hosted in AutocompleteMenu.
/// </summary>
public interface IAutocompleteListView
{
/// <summary>
/// Image list
/// </summary>
ImageList ImageList { get; set; }
string[] ColumnsTitle { get; set; }
int[] ColumnsWidth { get; set; }
/// <summary>
/// Index of current selected item
/// </summary>
int SelectedItemIndex { get; set; }
/// <summary>
/// Index of current selected item
/// </summary>
int HighlightedItemIndex { get; set; }
/// <summary>
/// List of visible elements
/// </summary>
IList<AutocompleteItem> VisibleItems { get;set;}
/// <summary>
/// Duration (ms) of tooltip showing
/// </summary>
int ToolTipDuration { get; set; }
/// <summary>
/// Occurs when user selected item for inserting into text
/// </summary>
event EventHandler ItemSelected;
/// <summary>
/// Occurs when current hovered item is changing
/// </summary>
event EventHandler<HoveredEventArgs> ItemHovered;
/// <summary>
/// Shows tooltip
/// </summary>
/// <param name="autocompleteItem"></param>
/// <param name="control"></param>
void ShowToolTip(AutocompleteItem autocompleteItem, Control control = null);
/// <summary>
/// Hides tooltip
/// </summary>
/// <param name="control"></param>
void HideToolTip(Control control);
/// <summary>
/// Returns rectangle of item
/// </summary>
Rectangle GetItemRectangle(int itemIndex);
/// <summary>
/// Colors
/// </summary>
Colors Colors { get; set; }
Control GetParentControl();
}
}
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
/// <summary>
/// Wrapper over the control like TextBox.
/// </summary>
public interface ITextBoxWrapper
{
Control TargetControl { get; }
string Text { get; }
string SelectedText { get; set; }
int SelectionLength { get; set; }
int SelectionStart { get; set; }
Point GetPositionFromCharIndex(int pos);
bool Readonly { get; }
event EventHandler LostFocus;
event ScrollEventHandler Scroll;
event KeyEventHandler KeyDown;
event MouseEventHandler MouseDown;
}
}
@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
public class Range
{
public ITextBoxWrapper TargetWrapper { get; private set; }
public int Start { get; set; }
public int End { get; set; }
public Range(ITextBoxWrapper targetWrapper)
{
this.TargetWrapper = targetWrapper;
}
public string Text
{
get
{
var text = TargetWrapper.Text;
if (string.IsNullOrEmpty(text))
return "";
if (Start >= text.Length)
return "";
if (End > text.Length)
return "";
return TargetWrapper.Text.Substring(Start, End - Start);
}
set
{
TargetWrapper.SelectionStart = Start;
TargetWrapper.SelectionLength = End - Start;
TargetWrapper.SelectedText = value;
}
}
}
}
@@ -0,0 +1,96 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using AutocompleteMenuNS;
using ScintillaNET;
public class ScintillaWrapper : ITextBoxWrapper
{
public Scintilla target;
public ScintillaWrapper(Scintilla trgt)
{
target = trgt;
//Now add handler for the UpdateUI event.
target.UpdateUI += (sender, args) =>
{
if (args?.Change == UpdateChange.HScroll || args?.Change == UpdateChange.VScroll)
{
Scroll?.Invoke(sender, new ScrollEventArgs(ScrollEventType.LargeIncrement, 0));
}
};
}
public bool Readonly
{
get{ return target.ReadOnly; }
}
public string SelectedText
{
get { return target.SelectedText; }
set
{
//Store the start of the selection.
int start = target.SelectionStart;
//Delete the current text between selections.
target.DeleteRange(target.SelectionStart, (target.SelectionEnd - target.SelectionStart));
//Add the text in the same postion.
target.InsertText(start, value);
//Clear selection and make sure the caret is at the end.
target.SelectionStart = (start + value.Length);
target.SelectionEnd = (start + value.Length);
}
}
public int SelectionLength
{
get { return (target.SelectionEnd - target.SelectionStart); }
set { target.SelectionEnd = (target.SelectionStart + value); }
}
public int SelectionStart
{
get { return target.SelectionStart; }
set { target.SelectionStart = value; }
}
public Control TargetControl
{
get { return target; }
}
public string Text
{
get { return target.Text; }
}
public Point GetPositionFromCharIndex(int pos)
{
return new Point(target.PointXFromPosition(pos), target.PointYFromPosition(pos));
}
//Events
public virtual event KeyEventHandler KeyDown
{
add { target.KeyDown += value; }
remove { target.KeyDown -= value; }
}
public virtual event EventHandler LostFocus
{
add { target.LostFocus += value; }
remove { target.LostFocus -= value; }
}
public virtual event MouseEventHandler MouseDown
{
add { target.MouseDown += value; }
remove { target.MouseDown -= value; }
}
public event ScrollEventHandler Scroll;
}
@@ -0,0 +1,138 @@
using System;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
namespace AutocompleteMenuNS
{
/// <summary>
/// Wrapper over the control like TextBox.
/// </summary>
public class TextBoxWrapper : ITextBoxWrapper
{
private Control target;
private PropertyInfo selectionStart;
private PropertyInfo selectionLength;
private PropertyInfo selectedText;
private PropertyInfo readonlyProperty;
private MethodInfo getPositionFromCharIndex;
private event ScrollEventHandler RTBScroll;
private TextBoxWrapper(Control targetControl)
{
this.target = targetControl;
Init();
}
protected virtual void Init()
{
var t = target.GetType();
selectedText = t.GetProperty("SelectedText");
selectionLength = t.GetProperty("SelectionLength");
selectionStart = t.GetProperty("SelectionStart");
readonlyProperty = t.GetProperty("ReadOnly");
getPositionFromCharIndex = t.GetMethod("GetPositionFromCharIndex") ?? t.GetMethod("PositionToPoint");
if (target is RichTextBox)
(target as RichTextBox).VScroll += new EventHandler(TextBoxWrapper_VScroll);
}
void TextBoxWrapper_VScroll(object sender, EventArgs e)
{
if (RTBScroll != null)
RTBScroll(sender, new ScrollEventArgs(ScrollEventType.EndScroll, 0, 1));
}
public static TextBoxWrapper Create(Control targetControl)
{
var result = new TextBoxWrapper(targetControl);
if (result.selectedText == null || result.selectionLength == null || result.selectionStart == null ||
result.getPositionFromCharIndex == null)
return null;
return result;
}
public virtual string Text
{
get { return target.Text; }
set { target.Text = value; }
}
public virtual string SelectedText
{
get { return (string) selectedText.GetValue(target, null); }
set { selectedText.SetValue(target, value, null); }
}
public virtual int SelectionLength
{
get { return (int) selectionLength.GetValue(target, null); }
set { selectionLength.SetValue(target, value, null); }
}
public virtual int SelectionStart
{
get { return (int) selectionStart.GetValue(target, null); }
set { selectionStart.SetValue(target, value, null); }
}
public virtual Point GetPositionFromCharIndex(int pos)
{
return (Point) getPositionFromCharIndex.Invoke(target, new object[] {pos});
}
public virtual Form FindForm()
{
return target.FindForm();
}
public virtual event EventHandler LostFocus
{
add { target.LostFocus += value; }
remove { target.LostFocus -= value; }
}
public virtual event ScrollEventHandler Scroll
{
add {
if(target is RichTextBox)
RTBScroll += value;
else
if(target is ScrollableControl)(target as ScrollableControl).Scroll += value;
}
remove {
if (target is RichTextBox)
RTBScroll -= value;
else
if(target is ScrollableControl)(target as ScrollableControl).Scroll -= value;
}
}
public virtual event KeyEventHandler KeyDown
{
add { target.KeyDown += value; }
remove { target.KeyDown -= value; }
}
public virtual event MouseEventHandler MouseDown
{
add { target.MouseDown += value; }
remove { target.MouseDown -= value; }
}
public virtual Control TargetControl
{
get { return target; }
}
public bool Readonly
{
get { return (bool) readonlyProperty.GetValue(target, null); }
}
}
}
@@ -0,0 +1,86 @@
#region Using Directives
using System;
using System.Runtime.InteropServices;
#endregion Using Directives
namespace ScintillaNET_FindReplaceDialog
{
/// <summary>
/// Specifies a range of characters. If the cpMin and cpMax members are equal, the range is empty.
/// The range includes everything if cpMin is 0 and cpMax is –1.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class CharacterRange
{
/// <summary>
/// Character position index immediately preceding the first character in the range.
/// </summary>
public int CpMin { get; set; }=0;
/// <summary>
/// Character position immediately following the last character in the range.
/// </summary>
public int CpMax { get; set; }=0;
/// <summary>
/// 所在行开始的位置
/// </summary>
public int LinePos { get; set; } = -1;
/// <summary>
/// 所在行数
/// </summary>
public int LineNum { get; set; }=-1;
/// <summary>
/// 所在行文本
/// </summary>
public string LineText { get; set; } = "";
/// <summary>
/// 所在行文本
/// </summary>
public string RangeText { get; set; } ="";
/// <summary>
/// 选择区域是否是空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return CpMin == CpMax;
}
public override bool Equals(object obj) {
if(obj == null) return false;
if(this == obj) return true;
if(obj is CharacterRange x2) {
if(x2.CpMin== CpMin && x2.CpMax==CpMax) {
return true;
}
else { return false; }
}
return false;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
/// <summary>
/// Specifies a range of characters. If the cpMin and cpMax members are equal, the range is empty.
/// The range includes everything if cpMin is 0 and cpMax is –1.
/// </summary>
/// <param name="Min">The minimum, or start position.</param>
/// <param name="Max">The maximum, or end position.</param>
public CharacterRange(int Min, int Max)
{
this.CpMin = Min;
this.CpMax = Max;
}
/// <summary>
/// Specifies a range of characters. If the cpMin and cpMax members are equal, the range is empty.
/// The range includes everything if cpMin is 0 and cpMax is –1.
/// </summary>
/// <param name="Min">The minimum, or start position.</param>
/// <param name="Max">The maximum, or end position.</param>
public CharacterRange()
{
}
}
}
@@ -0,0 +1,42 @@
namespace ryControls
{
partial class ContextMenuStripHighlightText2
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// ContextMenuStripRichText
//
this.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripRichText_Opening);
this.ResumeLayout(false);
}
#endregion
}
}
@@ -0,0 +1,154 @@
using ryCommon;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ryControls
{
public partial class ContextMenuStripHighlightText2 : ContextMenuStrip
{
public ContextMenuStripHighlightText2()
{
InitializeComponent();
AddMenu("撤销", "undo").Click += Undo_Click;
AddMenu("重做", "redo").Click += Redo_Click;
AddSeparatorMenu();
AddMenu("剪切", "cut").Click += Cut_Click;
AddMenu("复制", "copy").Click += Copy_Click;
AddMenu("粘贴", "paste").Click += Paste_Click;
AddMenu("删除", "del").Click += Del_Click;
AddMenu("全选", "selectall").Click += SelectAll_Click;
AddMenu("查找", "find").Click += Find_Click;
AddSeparatorMenu();
AddMenu("用百度搜索选中内容", "bdsearch").Click += BDSearch_Click;
}
private void BDSearch_Click(object sender, EventArgs e)
{
if (base.SourceControl is ScintillaNET.Scintilla editor)
{
RyFiles.OpenUrl("https://www.baidu.com/s?wd=" +RyWeb.WebDecode.UrlEncode(editor.SelectedText));
}
}
private void Find_Click(object sender, EventArgs e)
{
if(base.SourceControl is ScintillaNET.Scintilla editor)
{
if(editor.Parent is HighlightEditor rich_txt)
{
rich_txt.ShowFind();
}
}
}
private void SelectAll_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.SelectAll();
//Thread th = new Thread(sendkey);
//th.Start();
//void sendkey()
//{
// Thread.Sleep(100);
// this.Invoke(new Action(() =>
// {
// SendKeys.SendWait("^a");
// }));
//}
}
private void Undo_Click(object sender, EventArgs e)
{
if(!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.Undo();
}
private void Redo_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.Redo();
}
private void Cut_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.Cut();
}
private void Copy_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
//var ss = rich_txt.SelectedText;
rich_txt.Copy();
}
private void Paste_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.Paste();
}
private void Del_Click(object sender, EventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
rich_txt.DeleteRange(rich_txt.SelectionStart,rich_txt.SelectedText.Length);
}
public ToolStripSeparator AddSeparatorMenu()
{
ToolStripSeparator item = new ToolStripSeparator();
base.Items.Add(item);
return item;
}
public ToolStripMenuItem AddMenu(string name, string tag)
{
ToolStripMenuItem item = new ToolStripMenuItem(name)
{
Tag = tag
};
base.Items.Add(item);
return item;
}
private void ContextMenuStripRichText_Opening(object sender, CancelEventArgs e)
{
if (!(base.SourceControl is ScintillaNET.Scintilla)) { return; }
var rich_txt = (ScintillaNET.Scintilla)base.SourceControl;
for (int i = 0; i < base.Items.Count; i++)
{
var item = base.Items[i];
if (item.Tag == null) { continue; }
switch(item.Tag.ToString())
{
case "undo":
item.Enabled = rich_txt.CanUndo && !rich_txt.ReadOnly;
break;
case "redo":
item.Enabled = rich_txt.CanRedo && !rich_txt.ReadOnly;
break;
case "cut":
item.Enabled = (rich_txt.SelectedText != "" && !rich_txt.ReadOnly);
break;
case "copy":
item.Enabled = rich_txt.SelectedText != "";
break;
case "paste":
item.Enabled = !rich_txt.ReadOnly;
break;
case "del":
item.Enabled =(rich_txt.SelectedText != "" && !rich_txt.ReadOnly);
break;
case "bdsearch":
item.Enabled = (rich_txt.SelectedText != "" && rich_txt.SelectedText.IndexOfEx("\n")<0 && rich_txt.SelectedText.Length<50);
break;
case "selectall":
item.Enabled = rich_txt.SelectedText != rich_txt.Text;
break;
}
}
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>
@@ -0,0 +1,69 @@
namespace ScintillaNET_FindReplaceDialog.FindAllResults
{
partial class FindAllResultsPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.FindResultsScintilla = new ScintillaNET.Scintilla();
this.SuspendLayout();
//
// FindResultsScintilla
//
this.FindResultsScintilla.AutoCMaxHeight = 9;
this.FindResultsScintilla.BiDirectionality = ScintillaNET.BiDirectionalDisplayType.Disabled;
this.FindResultsScintilla.CaretLineBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
this.FindResultsScintilla.CaretLineVisible = true;
this.FindResultsScintilla.Dock = System.Windows.Forms.DockStyle.Fill;
this.FindResultsScintilla.LexerName = null;
this.FindResultsScintilla.Location = new System.Drawing.Point(0, 0);
this.FindResultsScintilla.Name = "FindResultsScintilla";
this.FindResultsScintilla.ScrollWidth = 5001;
this.FindResultsScintilla.Size = new System.Drawing.Size(556, 203);
this.FindResultsScintilla.TabIndents = true;
this.FindResultsScintilla.TabIndex = 4;
this.FindResultsScintilla.Text = "搜索结果";
this.FindResultsScintilla.WrapMode = ScintillaNET.WrapMode.None;
this.FindResultsScintilla.KeyUp += new System.Windows.Forms.KeyEventHandler(this.FindResultsScintilla_KeyUp);
this.FindResultsScintilla.MouseClick += new System.Windows.Forms.MouseEventHandler(this.FindResultsScintilla_MouseClick);
this.FindResultsScintilla.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.FindResultsScintilla_MouseDoubleClick);
//
// FindAllResultsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.FindResultsScintilla);
this.Name = "FindAllResultsPanel";
this.Size = new System.Drawing.Size(556, 203);
this.ResumeLayout(false);
}
#endregion
private ScintillaNET.Scintilla FindResultsScintilla;
}
}
@@ -0,0 +1,166 @@
namespace ScintillaNET_FindReplaceDialog.FindAllResults
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ScintillaNET;
public partial class FindAllResultsPanel : UserControl
{
#region Fields
private readonly Dictionary<int, FindResult> _findAllResults=new Dictionary<int, FindResult>();
#endregion Fields
#region Constructors
/// <summary>
/// Creates a new instance of FindAllResultsPanel
/// </summary>
public FindAllResultsPanel()
{
InitializeComponent();
FindResultsScintilla.Styles[Style.Default].Font = "Consolas";
FindResultsScintilla.Styles[Style.Default].Size = 10;
FindResultsScintilla.ClearAll();
}
public delegate void ResultEventHandler(object sender, FindResult r);
/// <summary>
/// 点击结果时发生
/// </summary>
[Description("点击结果时发生")]
public event ResultEventHandler OnResultClick;
#endregion Constructors
#region Properties
#endregion Properties
#region Methods
/// <summary>
/// Updates the find all results panel
/// </summary>
/// <param name="FindReplace">The FindReplace instance used to generate the find results.</param>
/// <param name="FindAllResults"></param>
public void UpdateFindAllResults(Dictionary<string,List<ScintillaNET_FindReplaceDialog.CharacterRange>> FindAllResults)
{
_findAllResults.Clear();
FindResultsScintilla.ReadOnly = false;
FindResultsScintilla.ClearAll();
Indicator _indicator_title = FindResultsScintilla.Indicators[15];
_indicator_title.ForeColor = Color.LightGreen;
_indicator_title.Alpha = 100;
_indicator_title.Style = IndicatorStyle.RoundBox;
_indicator_title.Under = true;
Indicator _indicator = FindResultsScintilla.Indicators[16];
_indicator.ForeColor = Color.Red;
_indicator.Alpha = 100;
_indicator.Style = IndicatorStyle.RoundBox;
_indicator.Under = true;
var line = 0;
//Write lines
foreach (var item in FindAllResults)
{
FindResultsScintilla.AppendText(item.Key+" (匹配"+ item.Value.Count+ "次)\r\n");
_findAllResults.Add(line, new FindResult());
FindResultsScintilla.Lines[line].ToggleFold();
line++;
foreach (var item_file in item.Value)
{
string resultsLinePrefix = string.Format("行 {0}: ", item_file.LineNum + 1);
FindResultsScintilla.AppendText(string.Format("{0}{1}",
resultsLinePrefix, item_file.RangeText.Replace("\n"," "))+"\r\n");
_findAllResults.Add(line,new FindResult() { Path = item.Key, Result = item_file });
line++;
}
//Highlight
foreach (var item_file in _findAllResults)
{
var item_range = item_file.Value.Result;
int lastLineStartPos = FindResultsScintilla.Lines[item_file.Key].Position;
if (item_range == null) {
FindResultsScintilla.IndicatorCurrent = _indicator_title.Index;
FindResultsScintilla.IndicatorFillRange(lastLineStartPos, FindResultsScintilla.Lines[item_file.Key].Length);
continue;
}
string resultsLinePrefix = string.Format("行 {0}: ", item_range.LineNum+1);
//int LinePos = item_range.LinePos;
//int startPosInLine = item_range.CpMin - LinePos;
FindResultsScintilla.IndicatorCurrent = _indicator.Index;
FindResultsScintilla.IndicatorFillRange(lastLineStartPos + resultsLinePrefix.Length+1, item_file.Value.Result.CpMax - item_file.Value.Result.CpMin);
}
}
FindResultsScintilla.ReadOnly = true;
}
private void FindResultsScintilla_KeyUp(object sender, KeyEventArgs e)
{
int pos = FindResultsScintilla.CurrentPosition;
int selectedLine = FindResultsScintilla.LineFromPosition(pos);
if (_findAllResults.ContainsKey(selectedLine))
{
ScintillaNET_FindReplaceDialog.CharacterRange CharRange = _findAllResults[selectedLine].Result;
if (CharRange == null) { return; }
if (CharRange.CpMax== CharRange.CpMin) { return; }
OnResultClick?.Invoke(this, _findAllResults[selectedLine]);
//Scintilla.SetSelection(CharRange.cpMin, CharRange.cpMax);
//Scintilla.ScrollCaret();
}
}
private void FindResultsScintilla_MouseClick(object sender, MouseEventArgs e)
{
int pos = FindResultsScintilla.CharPositionFromPointClose((e.Location).X, (e.Location).Y);
if (pos == -1)
return;
int selectedLine = FindResultsScintilla.LineFromPosition(pos);
if (_findAllResults.ContainsKey(selectedLine))
{
ScintillaNET_FindReplaceDialog.CharacterRange CharRange = _findAllResults[selectedLine].Result;
if (CharRange == null) { return; }
if (CharRange.CpMax == CharRange.CpMin) { return; }
OnResultClick?.Invoke(this, _findAllResults[selectedLine]);
//Scintilla.SetSelection(CharRange.cpMin, CharRange.cpMax);
//Scintilla.ScrollCaret();
}
}
private void FindResultsScintilla_MouseDoubleClick(object sender, MouseEventArgs e)
{
var aa = FindResultsScintilla.CurrentPosition;
int selectedLine = FindResultsScintilla.LineFromPosition(aa);
//int pos = FindResultsScintilla.CharPositionFromPointClose((e.Location).X, (e.Location).Y);
if (selectedLine == -1)
return;
//int selectedLine = FindResultsScintilla.LineFromPosition(pos);
if (_findAllResults.ContainsKey(selectedLine))
{
ScintillaNET_FindReplaceDialog.CharacterRange CharRange = _findAllResults[selectedLine].Result;
if (CharRange == null) { return; }
if (CharRange.CpMax == CharRange.CpMin) { return; }
OnResultClick?.Invoke(this, _findAllResults[selectedLine]);
//Scintilla.SetSelection(CharRange.cpMin, CharRange.cpMax);
//Scintilla.ScrollCaret();
//Scintilla.Focus();
}
}
#endregion Methods
}
public class FindResult
{
public string Path { get; set; } = "";
public ScintillaNET_FindReplaceDialog.CharacterRange Result { get; set; }
}
}
@@ -0,0 +1,319 @@
namespace SuperDesign.Controls.Highlight.FindReplace
{
partial class FindConfig
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.rdoFileStandardR = new System.Windows.Forms.RadioButton();
this.rdoFileExtendedR = new System.Windows.Forms.RadioButton();
this.rdoFileRegexR = new System.Windows.Forms.RadioButton();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.pnlStandardOptions = new System.Windows.Forms.Panel();
this.chkFileWordStartR = new System.Windows.Forms.CheckBox();
this.chkFileWholeWordR = new System.Windows.Forms.CheckBox();
this.chkFileMatchCaseR = new System.Windows.Forms.CheckBox();
this.pnlRegexpOptions = new System.Windows.Forms.Panel();
this.chkFileSinglelineR = new System.Windows.Forms.CheckBox();
this.chkFileRightToLeftR = new System.Windows.Forms.CheckBox();
this.chkFileMultilineR = new System.Windows.Forms.CheckBox();
this.chkFileIgnorePatternWhitespaceR = new System.Windows.Forms.CheckBox();
this.chkFileIgnoreCaseR = new System.Windows.Forms.CheckBox();
this.chkFileExplicitCaptureR = new System.Windows.Forms.CheckBox();
this.chkFileEcmaScriptR = new System.Windows.Forms.CheckBox();
this.chkFileCultureInvariantR = new System.Windows.Forms.CheckBox();
this.chkFileCompiledR = new System.Windows.Forms.CheckBox();
this.groupBox2.SuspendLayout();
this.groupBox1.SuspendLayout();
this.pnlStandardOptions.SuspendLayout();
this.pnlRegexpOptions.SuspendLayout();
this.SuspendLayout();
//
// groupBox2
//
this.groupBox2.Controls.Add(this.rdoFileStandardR);
this.groupBox2.Controls.Add(this.rdoFileExtendedR);
this.groupBox2.Controls.Add(this.rdoFileRegexR);
this.groupBox2.Location = new System.Drawing.Point(3, 3);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(158, 82);
this.groupBox2.TabIndex = 38;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "搜索模式";
//
// rdoFileStandardR
//
this.rdoFileStandardR.AutoSize = true;
this.rdoFileStandardR.Checked = true;
this.rdoFileStandardR.Location = new System.Drawing.Point(6, 20);
this.rdoFileStandardR.Name = "rdoFileStandardR";
this.rdoFileStandardR.Size = new System.Drawing.Size(47, 16);
this.rdoFileStandardR.TabIndex = 5;
this.rdoFileStandardR.TabStop = true;
this.rdoFileStandardR.Text = "标准";
this.rdoFileStandardR.UseVisualStyleBackColor = true;
this.rdoFileStandardR.CheckedChanged += new System.EventHandler(this.RdoFileStandardR_CheckedChanged);
//
// rdoFileExtendedR
//
this.rdoFileExtendedR.AutoSize = true;
this.rdoFileExtendedR.Location = new System.Drawing.Point(6, 41);
this.rdoFileExtendedR.Name = "rdoFileExtendedR";
this.rdoFileExtendedR.Size = new System.Drawing.Size(149, 16);
this.rdoFileExtendedR.TabIndex = 6;
this.rdoFileExtendedR.Text = "扩展 (\\n, \\r, \\t, \\0)";
this.rdoFileExtendedR.UseVisualStyleBackColor = true;
this.rdoFileExtendedR.CheckedChanged += new System.EventHandler(this.RdoFileExtendedR_CheckedChanged);
//
// rdoFileRegexR
//
this.rdoFileRegexR.AutoSize = true;
this.rdoFileRegexR.Location = new System.Drawing.Point(6, 62);
this.rdoFileRegexR.Name = "rdoFileRegexR";
this.rdoFileRegexR.Size = new System.Drawing.Size(83, 16);
this.rdoFileRegexR.TabIndex = 7;
this.rdoFileRegexR.Text = "正则表达式";
this.rdoFileRegexR.UseVisualStyleBackColor = true;
this.rdoFileRegexR.CheckedChanged += new System.EventHandler(this.RdoFileRegexR_CheckedChanged);
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.pnlRegexpOptions);
this.groupBox1.Controls.Add(this.pnlStandardOptions);
this.groupBox1.Location = new System.Drawing.Point(164, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(371, 82);
this.groupBox1.TabIndex = 39;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "选项";
//
// pnlStandardOptions
//
this.pnlStandardOptions.Controls.Add(this.chkFileWordStartR);
this.pnlStandardOptions.Controls.Add(this.chkFileWholeWordR);
this.pnlStandardOptions.Controls.Add(this.chkFileMatchCaseR);
this.pnlStandardOptions.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlStandardOptions.Location = new System.Drawing.Point(3, 17);
this.pnlStandardOptions.Name = "pnlStandardOptions";
this.pnlStandardOptions.Size = new System.Drawing.Size(365, 62);
this.pnlStandardOptions.TabIndex = 0;
//
// chkFileWordStartR
//
this.chkFileWordStartR.AutoSize = true;
this.chkFileWordStartR.Location = new System.Drawing.Point(10, 37);
this.chkFileWordStartR.Name = "chkFileWordStartR";
this.chkFileWordStartR.Size = new System.Drawing.Size(96, 16);
this.chkFileWordStartR.TabIndex = 2;
this.chkFileWordStartR.Text = "单词开头匹配";
this.chkFileWordStartR.UseVisualStyleBackColor = true;
//
// chkFileWholeWordR
//
this.chkFileWholeWordR.AutoSize = true;
this.chkFileWholeWordR.Location = new System.Drawing.Point(10, 20);
this.chkFileWholeWordR.Name = "chkFileWholeWordR";
this.chkFileWholeWordR.Size = new System.Drawing.Size(72, 16);
this.chkFileWholeWordR.TabIndex = 1;
this.chkFileWholeWordR.Text = "全词匹配";
this.chkFileWholeWordR.UseVisualStyleBackColor = true;
//
// chkFileMatchCaseR
//
this.chkFileMatchCaseR.AutoSize = true;
this.chkFileMatchCaseR.Location = new System.Drawing.Point(10, 3);
this.chkFileMatchCaseR.Name = "chkFileMatchCaseR";
this.chkFileMatchCaseR.Size = new System.Drawing.Size(84, 16);
this.chkFileMatchCaseR.TabIndex = 0;
this.chkFileMatchCaseR.Text = "匹配大小写";
this.chkFileMatchCaseR.UseVisualStyleBackColor = true;
//
// pnlRegexpOptions
//
this.pnlRegexpOptions.Controls.Add(this.chkFileSinglelineR);
this.pnlRegexpOptions.Controls.Add(this.chkFileRightToLeftR);
this.pnlRegexpOptions.Controls.Add(this.chkFileMultilineR);
this.pnlRegexpOptions.Controls.Add(this.chkFileIgnorePatternWhitespaceR);
this.pnlRegexpOptions.Controls.Add(this.chkFileIgnoreCaseR);
this.pnlRegexpOptions.Controls.Add(this.chkFileExplicitCaptureR);
this.pnlRegexpOptions.Controls.Add(this.chkFileEcmaScriptR);
this.pnlRegexpOptions.Controls.Add(this.chkFileCultureInvariantR);
this.pnlRegexpOptions.Controls.Add(this.chkFileCompiledR);
this.pnlRegexpOptions.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlRegexpOptions.Location = new System.Drawing.Point(3, 17);
this.pnlRegexpOptions.Name = "pnlRegexpOptions";
this.pnlRegexpOptions.Size = new System.Drawing.Size(365, 62);
this.pnlRegexpOptions.TabIndex = 1;
//
// chkFileSinglelineR
//
this.chkFileSinglelineR.AutoSize = true;
this.chkFileSinglelineR.Location = new System.Drawing.Point(251, 37);
this.chkFileSinglelineR.Name = "chkFileSinglelineR";
this.chkFileSinglelineR.Size = new System.Drawing.Size(72, 16);
this.chkFileSinglelineR.TabIndex = 8;
this.chkFileSinglelineR.Text = "单行模式";
this.toolTip1.SetToolTip(this.chkFileSinglelineR, "指定单行模式。 更改点 (.) 的含义,以使它与每个字符(而不是除 \\n 之外的所有字符)匹配。");
this.chkFileSinglelineR.UseVisualStyleBackColor = true;
//
// chkFileRightToLeftR
//
this.chkFileRightToLeftR.AutoSize = true;
this.chkFileRightToLeftR.Location = new System.Drawing.Point(251, 20);
this.chkFileRightToLeftR.Name = "chkFileRightToLeftR";
this.chkFileRightToLeftR.Size = new System.Drawing.Size(72, 16);
this.chkFileRightToLeftR.TabIndex = 7;
this.chkFileRightToLeftR.Text = "从右到左";
this.toolTip1.SetToolTip(this.chkFileRightToLeftR, "指定搜索从右向左而不是从左向右进行。");
this.chkFileRightToLeftR.UseVisualStyleBackColor = true;
//
// chkFileMultilineR
//
this.chkFileMultilineR.AutoSize = true;
this.chkFileMultilineR.Location = new System.Drawing.Point(251, 3);
this.chkFileMultilineR.Name = "chkFileMultilineR";
this.chkFileMultilineR.Size = new System.Drawing.Size(72, 16);
this.chkFileMultilineR.TabIndex = 6;
this.chkFileMultilineR.Text = "多行模式";
this.toolTip1.SetToolTip(this.chkFileMultilineR, "多行模式。 更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。 ");
this.chkFileMultilineR.UseVisualStyleBackColor = true;
//
// chkFileIgnorePatternWhitespaceR
//
this.chkFileIgnorePatternWhitespaceR.AutoSize = true;
this.chkFileIgnorePatternWhitespaceR.Location = new System.Drawing.Point(130, 37);
this.chkFileIgnorePatternWhitespaceR.Name = "chkFileIgnorePatternWhitespaceR";
this.chkFileIgnorePatternWhitespaceR.Size = new System.Drawing.Size(84, 16);
this.chkFileIgnorePatternWhitespaceR.TabIndex = 5;
this.chkFileIgnorePatternWhitespaceR.Text = "忽略空白符";
this.toolTip1.SetToolTip(this.chkFileIgnorePatternWhitespaceR, "消除模式中的非转义空白并启用由 # 标记的注释。 \r\n但是,此值不影响或消除标记单独的正则表达式语言元素的开头的字符类、数值量词或标记的空格。 ");
this.chkFileIgnorePatternWhitespaceR.UseVisualStyleBackColor = true;
//
// chkFileIgnoreCaseR
//
this.chkFileIgnoreCaseR.AutoSize = true;
this.chkFileIgnoreCaseR.Location = new System.Drawing.Point(130, 20);
this.chkFileIgnoreCaseR.Name = "chkFileIgnoreCaseR";
this.chkFileIgnoreCaseR.Size = new System.Drawing.Size(84, 16);
this.chkFileIgnoreCaseR.TabIndex = 4;
this.chkFileIgnoreCaseR.Text = "忽略大小写";
this.toolTip1.SetToolTip(this.chkFileIgnoreCaseR, "指定不区分大小写的匹配。 ");
this.chkFileIgnoreCaseR.UseVisualStyleBackColor = true;
//
// chkFileExplicitCaptureR
//
this.chkFileExplicitCaptureR.AutoSize = true;
this.chkFileExplicitCaptureR.Location = new System.Drawing.Point(130, 3);
this.chkFileExplicitCaptureR.Name = "chkFileExplicitCaptureR";
this.chkFileExplicitCaptureR.Size = new System.Drawing.Size(72, 16);
this.chkFileExplicitCaptureR.TabIndex = 3;
this.chkFileExplicitCaptureR.Text = "显式捕获";
this.toolTip1.SetToolTip(this.chkFileExplicitCaptureR, "指定唯一有效的捕获是显式命名或编号的 (?<name>...) 形式的组。\r\n这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:...) 显得笨拙" +
"。");
this.chkFileExplicitCaptureR.UseVisualStyleBackColor = true;
//
// chkFileEcmaScriptR
//
this.chkFileEcmaScriptR.AutoSize = true;
this.chkFileEcmaScriptR.Location = new System.Drawing.Point(3, 37);
this.chkFileEcmaScriptR.Name = "chkFileEcmaScriptR";
this.chkFileEcmaScriptR.Size = new System.Drawing.Size(72, 16);
this.chkFileEcmaScriptR.TabIndex = 2;
this.chkFileEcmaScriptR.Text = "ECMA脚本";
this.toolTip1.SetToolTip(this.chkFileEcmaScriptR, "指定搜索从右向左而不是从左向右进行。");
this.chkFileEcmaScriptR.UseVisualStyleBackColor = true;
this.chkFileEcmaScriptR.CheckedChanged += new System.EventHandler(this.chkFileEcmaScriptR_CheckedChanged);
//
// chkFileCultureInvariantR
//
this.chkFileCultureInvariantR.AutoSize = true;
this.chkFileCultureInvariantR.Location = new System.Drawing.Point(3, 20);
this.chkFileCultureInvariantR.Name = "chkFileCultureInvariantR";
this.chkFileCultureInvariantR.Size = new System.Drawing.Size(120, 16);
this.chkFileCultureInvariantR.TabIndex = 1;
this.chkFileCultureInvariantR.Text = "忽略语言区域差异";
this.toolTip1.SetToolTip(this.chkFileCultureInvariantR, "指定忽略语言中的区域性差异。");
this.chkFileCultureInvariantR.UseVisualStyleBackColor = true;
//
// chkFileCompiledR
//
this.chkFileCompiledR.AutoSize = true;
this.chkFileCompiledR.Location = new System.Drawing.Point(3, 3);
this.chkFileCompiledR.Name = "chkFileCompiledR";
this.chkFileCompiledR.Size = new System.Drawing.Size(60, 16);
this.chkFileCompiledR.TabIndex = 0;
this.chkFileCompiledR.Text = "已编译";
this.toolTip1.SetToolTip(this.chkFileCompiledR, "指定正则表达式编译为 MSIL 代码,而不是解释。 \r\n已编译的正则表达式最大限度地提高运行时性能,代价是会影响初始化时间。");
this.chkFileCompiledR.UseVisualStyleBackColor = true;
//
// FindConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "FindConfig";
this.Size = new System.Drawing.Size(538, 90);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.pnlStandardOptions.ResumeLayout(false);
this.pnlStandardOptions.PerformLayout();
this.pnlRegexpOptions.ResumeLayout(false);
this.pnlRegexpOptions.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.RadioButton rdoFileStandardR;
private System.Windows.Forms.RadioButton rdoFileExtendedR;
private System.Windows.Forms.RadioButton rdoFileRegexR;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Panel pnlRegexpOptions;
private System.Windows.Forms.CheckBox chkFileSinglelineR;
private System.Windows.Forms.CheckBox chkFileRightToLeftR;
private System.Windows.Forms.CheckBox chkFileMultilineR;
private System.Windows.Forms.CheckBox chkFileIgnorePatternWhitespaceR;
private System.Windows.Forms.CheckBox chkFileIgnoreCaseR;
private System.Windows.Forms.CheckBox chkFileExplicitCaptureR;
private System.Windows.Forms.CheckBox chkFileEcmaScriptR;
private System.Windows.Forms.CheckBox chkFileCultureInvariantR;
private System.Windows.Forms.CheckBox chkFileCompiledR;
private System.Windows.Forms.Panel pnlStandardOptions;
private System.Windows.Forms.CheckBox chkFileWordStartR;
private System.Windows.Forms.CheckBox chkFileWholeWordR;
private System.Windows.Forms.CheckBox chkFileMatchCaseR;
}
}
@@ -0,0 +1,284 @@
using Newtonsoft.Json.Linq;
using ryCommon;
using ScintillaNET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SuperDesign.Controls.Highlight.FindReplace
{
public partial class FindConfig : UserControl
{
public FindConfig()
{
InitializeComponent();
pnlStandardOptions.BringToFront();
}
/// <summary>
/// 搜索模式,0表示标准,1表示扩展,2表示正则
/// </summary>
[Description("搜索模式,0表示标准,1表示扩展,2表示正则")]
public int SearchMode
{
get
{
if (rdoFileStandardR.Checked) { return 0; }
if (rdoFileExtendedR.Checked) { return 1; }
if (rdoFileRegexR.Checked) { return 2; }
return -1;
}
set
{
if (value == 0) { rdoFileStandardR.Checked = true; }
else if (value ==1) { rdoFileExtendedR.Checked = true; }
else if (value == 2) { rdoFileRegexR.Checked = true; }
else { rdoFileStandardR.Checked = true; }
}
}
/// <summary>
/// 匹配大小写
/// </summary>
[Description("匹配大小写")]
public bool MatchCase
{
get { return chkFileMatchCaseR.Checked; }
set { chkFileMatchCaseR.Checked = value; }
}
/// <summary>
/// 全词匹配
/// </summary>
[Description("全词匹配")]
public bool FileWholeWord
{
get { return chkFileWholeWordR.Checked; }
set { chkFileWholeWordR.Checked = value; }
}
/// <summary>
/// 单词开头匹配
/// </summary>
[Description("单词开头匹配")]
public bool FileWordStart
{
get { return chkFileWordStartR.Checked; }
set { chkFileWordStartR.Checked = value; }
}
/// <summary>
/// 【正则】已编译
/// </summary>
[Description("【正则】已编译")]
public bool RegexCompiled
{
get { return chkFileCompiledR.Checked; }
set { chkFileCompiledR.Checked = value; }
}
/// <summary>
/// 【正则】显式捕获
/// </summary>
[Description("【正则】显式捕获")]
public bool RegexExplicitCapture
{
get { return chkFileExplicitCaptureR.Checked; }
set { chkFileExplicitCaptureR.Checked = value; }
}
/// <summary>
/// 【正则】多行模式
/// </summary>
[Description("【正则】多行模式")]
public bool RegexMultiline
{
get { return chkFileMultilineR.Checked; }
set { chkFileMultilineR.Checked = value; }
}
/// <summary>
/// 【正则】忽略语言区域差异
/// </summary>
[Description("【正则】忽略语言区域差异")]
public bool RegexFileCultureInvariant
{
get { return chkFileCultureInvariantR.Checked; }
set { chkFileCultureInvariantR.Checked = value; }
}
/// <summary>
/// 【正则】忽略大小写
/// </summary>
[Description("【正则】忽略大小写")]
public bool RegexIgnoreCase
{
get { return chkFileIgnoreCaseR.Checked; }
set { chkFileIgnoreCaseR.Checked = value; }
}
/// <summary>
/// 【正则】从右到左
/// </summary>
[Description("【正则】从右到左")]
public bool RegexRightToLeft
{
get { return chkFileRightToLeftR.Checked; }
set { chkFileRightToLeftR.Checked = value; }
}
/// <summary>
/// 【正则】ECMA脚本
/// </summary>
[Description("【正则】ECMA脚本")]
public bool RegexEcmaScript
{
get { return chkFileEcmaScriptR.Checked; }
set { chkFileEcmaScriptR.Checked = value; }
}
/// <summary>
/// 【正则】忽略空白符
/// </summary>
[Description("【正则】忽略空白符")]
public bool RegexIgnorePatternWhitespace
{
get { return chkFileIgnorePatternWhitespaceR.Checked; }
set { chkFileIgnorePatternWhitespaceR.Checked = value; }
}
/// <summary>
/// 【正则】单行模式
/// </summary>
[Description("【正则】单行模式")]
public bool RegexFileSingleline
{
get { return chkFileSinglelineR.Checked; }
set { chkFileSinglelineR.Checked = value; }
}
/// <summary>
/// 获取正则选项
/// </summary>
/// <returns></returns>
public RegexOptions GetRegexOptions()
{
RegexOptions ro = RegexOptions.None;
if (chkFileCompiledR.Checked)
ro |= RegexOptions.Compiled;
if (chkFileCultureInvariantR.Checked)
ro |= RegexOptions.CultureInvariant;
if (chkFileEcmaScriptR.Checked)
ro |= RegexOptions.ECMAScript;
if (chkFileExplicitCaptureR.Checked)
ro |= RegexOptions.ExplicitCapture;
if (chkFileIgnoreCaseR.Checked)
ro |= RegexOptions.IgnoreCase;
if (chkFileIgnorePatternWhitespaceR.Checked)
ro |= RegexOptions.IgnorePatternWhitespace;
if (chkFileMultilineR.Checked)
ro |= RegexOptions.Multiline;
if (chkFileRightToLeftR.Checked)
ro |= RegexOptions.RightToLeft;
if (chkFileSinglelineR.Checked)
ro |= RegexOptions.Singleline;
return ro;
}
/// <summary>
/// 设置正则选项
/// </summary>
/// <returns></returns>
public void SetRegexOptions(RegexOptions ro)
{
chkFileCompiledR.Checked = (ro & RegexOptions.Compiled) == RegexOptions.Compiled;
chkFileCultureInvariantR.Checked = (ro & RegexOptions.CultureInvariant) == RegexOptions.CultureInvariant;
chkFileEcmaScriptR.Checked = (ro & RegexOptions.ECMAScript) == RegexOptions.ECMAScript;
chkFileExplicitCaptureR.Checked = (ro & RegexOptions.ExplicitCapture) == RegexOptions.ExplicitCapture;
chkFileIgnoreCaseR.Checked = (ro & RegexOptions.IgnoreCase) == RegexOptions.IgnoreCase;
chkFileIgnorePatternWhitespaceR.Checked = (ro & RegexOptions.IgnorePatternWhitespace) == RegexOptions.IgnorePatternWhitespace;
chkFileMultilineR.Checked = (ro & RegexOptions.Multiline) == RegexOptions.Multiline;
chkFileRightToLeftR.Checked = (ro & RegexOptions.RightToLeft) == RegexOptions.RightToLeft;
chkFileSinglelineR.Checked = (ro & RegexOptions.Singleline) == RegexOptions.Singleline;
}
/// <summary>
/// 获取普通搜索选项
/// </summary>
/// <returns></returns>
public SearchFlags GetSearchFlags()
{
SearchFlags sf = SearchFlags.None;
if (chkFileMatchCaseR.Checked)
sf |= SearchFlags.MatchCase;
if (chkFileWholeWordR.Checked)
sf |= SearchFlags.WholeWord;
if (chkFileWordStartR.Checked)
sf |= SearchFlags.WordStart;
return sf;
}
/// <summary>
/// 设置普通搜索选项
/// </summary>
/// <returns></returns>
public void SetSearchFlags(SearchFlags sf)
{
chkFileMatchCaseR.Checked = (sf & SearchFlags.MatchCase) == SearchFlags.MatchCase;
chkFileWholeWordR.Checked = (sf & SearchFlags.WholeWord) == SearchFlags.WholeWord;
chkFileWordStartR.Checked = (sf & SearchFlags.WordStart) == SearchFlags.WordStart;
}
/// <summary>
/// 从另一个控件复制配置
/// </summary>
/// <param name="fc"></param>
public void LoadConfig(FindConfig fc)
{
SearchMode = fc.SearchMode;
fc.SetSearchFlags(fc.GetSearchFlags());
fc.SetRegexOptions(fc.GetRegexOptions());
}
private void RdoFileExtendedR_CheckedChanged(object sender, EventArgs e)
{
if (rdoFileExtendedR.Checked)
pnlStandardOptions.BringToFront();
//cmdExtCharAndRegExFindR.Enabled = !rdoStandardR.Checked;
//cmdExtCharAndRegExReplace.Enabled = !rdoStandardR.Checked;
}
private void RdoFileStandardR_CheckedChanged(object sender, EventArgs e)
{
if (rdoFileStandardR.Checked)
pnlStandardOptions.BringToFront();
}
private void RdoFileRegexR_CheckedChanged(object sender, EventArgs e)
{
if (rdoFileRegexR.Checked)
pnlRegexpOptions.BringToFront();
}
private void chkFileEcmaScriptR_CheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
{
chkFileExplicitCaptureR.Checked = false;
chkFileExplicitCaptureR.Enabled = false;
chkFileIgnorePatternWhitespaceR.Checked = false;
chkFileIgnorePatternWhitespaceR.Enabled = false;
chkFileRightToLeftR.Checked = false;
chkFileRightToLeftR.Enabled = false;
chkFileSinglelineR.Checked = false;
chkFileSinglelineR.Enabled = false;
}
else
{
chkFileExplicitCaptureR.Enabled = true;
chkFileIgnorePatternWhitespaceR.Enabled = true;
chkFileRightToLeftR.Enabled = true;
chkFileSinglelineR.Enabled = true;
}
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,40 @@
#region Using Directives
using System;
#endregion Using Directives
namespace ScintillaNET_FindReplaceDialog
{
/// <summary>
/// Controls find behavior for non-regular expression searches
/// </summary>
public enum FindOption
{
/// <summary>
/// Find must match the whole word
/// </summary>
WholeWord = 2,
/// <summary>
/// Find must match the case of the expression
/// </summary>
MatchCase = 4,
/// <summary>
/// Only match the _start of a word
/// </summary>
WordStart = 0x00100000,
/// <summary>
/// Not used in ScintillaNET
/// </summary>
RegularExpression = 0x00200000,
/// <summary>
/// Not used in ScintillaNET
/// </summary>
Posix = 0x00400000,
}
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 56</value>
</metadata>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>114, 56</value>
</metadata>
<metadata name="mnuExtendedCharFindF.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="mnuRecentFindF.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>576, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 56</value>
</metadata>
<metadata name="mnuExtendedCharFindR.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>198, 17</value>
</metadata>
<metadata name="mnuExtendedCharReplace.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>381, 17</value>
</metadata>
<metadata name="mnuRecentFindR.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>719, 17</value>
</metadata>
<metadata name="mnuRecentReplace.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>863, 17</value>
</metadata>
<metadata name="mnuRegExCharFindF.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>223, 56</value>
</metadata>
<metadata name="mnuRegExCharFindR.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>378, 56</value>
</metadata>
<metadata name="mnuRegExCharReplace.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>533, 56</value>
</metadata>
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>721, 56</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>86</value>
</metadata>
</root>
@@ -0,0 +1,92 @@
namespace ScintillaNET_FindReplaceDialog
{
partial class FrmFinding
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.label1 = new System.Windows.Forms.Label();
this.BtnClose = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// progressBar1
//
this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressBar1.Location = new System.Drawing.Point(12, 12);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(578, 23);
this.progressBar1.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 38);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(113, 12);
this.label1.TabIndex = 1;
this.label1.Text = "状态:正在查找中...";
//
// BtnClose
//
this.BtnClose.Location = new System.Drawing.Point(258, 62);
this.BtnClose.Name = "BtnClose";
this.BtnClose.Size = new System.Drawing.Size(72, 25);
this.BtnClose.TabIndex = 2;
this.BtnClose.Text = "关闭";
this.BtnClose.UseVisualStyleBackColor = true;
this.BtnClose.Click += new System.EventHandler(this.BtnClose_Click);
//
// FrmFinding
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(602, 93);
this.Controls.Add(this.BtnClose);
this.Controls.Add(this.label1);
this.Controls.Add(this.progressBar1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.Name = "FrmFinding";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "正在查找...";
this.TopMost = true;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmFinding_FormClosing);
this.Load += new System.EventHandler(this.FrmFinding_Load);
this.Shown += new System.EventHandler(this.FrmFinding_Shown);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button BtnClose;
}
}
@@ -0,0 +1,417 @@
using ryCommon;
using ryControls;
using ScintillaNET;
using SuperDesign.Tools.SmartEditor;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using 开发辅助工具.Tools.SmartEditor;
using static ScintillaNET.Style;
using static System.Net.Mime.MediaTypeNames;
namespace ScintillaNET_FindReplaceDialog
{
public partial class FrmFinding : Form
{
public FrmFinding()
{
InitializeComponent();
}
bool IsExit = false;
bool IsRunning = false;
/// <summary>
/// 搜索配置
/// </summary>
public SearchDirConfig SearchConfig=new SearchDirConfig();
/// <summary>
/// 获取待搜索的文件数量
/// </summary>
/// <returns></returns>
private int GetFileCount()
{
var count = 0;
GetCount(SearchConfig.SearchDir);
return count;
void GetCount(string folder)
{
if(!SearchConfig.SearchHiddenDir)
{
DirectoryInfo directory = new DirectoryInfo(folder);
if((directory.Attributes & FileAttributes.Hidden)== FileAttributes.Hidden) {
return;
}
}
var split_ext = SearchConfig.Exts.Split(';');
for (int i = 0; i < split_ext.Length; i++)
{
if (IsExit) { break; }
var files = System.IO.Directory.GetFiles(folder, split_ext[i]);
if (files != null)
count += files.Length;
}
if (SearchConfig.SearchSubDir)
{
if (IsExit) { return ; }
var folder_list = System.IO.Directory.GetDirectories(folder);
if (folder_list != null)
{
for (int i = 0; i < folder_list.Length; i++)
{
if (IsExit) { break; }
GetCount(folder_list[i]);
}
}
}
}
}
private void ShowText(string text)
{
this.Invoke(new Action(() =>
{
label1.Text = "状态:" + text;
}));
}
private List<CharacterRange> SearchText(string Text)
{
var list = new List<CharacterRange>();
var start_i = 0;
var all_text = Text;
while (start_i>=0)
{
CharacterRange foundRange = new CharacterRange(start_i, Text.Length);
try
{
if (SearchConfig.SearchMode == 2)//正则
{
Regex r = new Regex(SearchConfig.FindText, SearchConfig.RegexOptions);
Match m = r.Match(all_text);
if (!m.Success)
return list;
int start = foundRange.CpMin + all_text.Substring(0, m.Index).Length;
int end = all_text.Substring(m.Index, m.Length).Length;
var LineNum = GetLineNum(start, out var LinePos,out var LineText);
list.Add(new CharacterRange(start, start + end) {LineText= LineText, LineNum=LineNum, LinePos=LinePos,RangeText=Text.Substring(start,end) });
start_i = start+end + 1;
}
else
{
string textToFind = SearchConfig.SearchMode == 1 ? FindReplace.Transform(SearchConfig.FindText) : SearchConfig.FindText;
int start = 0;
if ((SearchConfig.SearchFlags & SearchFlags.MatchCase) == SearchFlags.MatchCase) //忽略大小写
{
start=Text.IndexOfEx(textToFind,start_i);
}
else
{
start = Text.IndexOf(textToFind, start_i, StringComparison.Ordinal);
}
int end = textToFind.Length;
if (start >= 0)
{
if ((SearchConfig.SearchFlags & SearchFlags.WholeWord) == SearchFlags.WholeWord) //全词匹配
{
if (start >= 0)
{
bool Word_Start = false;
bool Word_End = false;
if (start == 0) { Word_Start = true; }
else
{
var char_i = Text[start - 1];
if ((char_i >= '0' && char_i <= '9') || (char_i >= 'a' && char_i <= 'z')
|| (char_i >= 'A' && char_i <= 'Z'))
{
Word_Start = false;
}
else { Word_Start = true; }
}
if ((start + end)>=(Text.Length-1)) { Word_End = true; }
else
{
var char_i = Text[start + end];
if ((char_i >= '0' && char_i <= '9') || (char_i >= 'a' && char_i <= 'z')
|| (char_i >= 'A' && char_i <= 'Z'))
{
Word_End = false;
}
else { Word_End = true; }
}
if (Word_Start && Word_End)
{
var LineNum = GetLineNum(start, out var LinePos, out var LineText);
list.Add(new CharacterRange(start, start + end) { LineText = LineText, LineNum = LineNum, LinePos = LinePos, RangeText = Text.Substring(start, end) });
}
start_i = start+ end + 1;
}
else
{
break;
}
}
else if ((SearchConfig.SearchFlags & SearchFlags.WordStart) == SearchFlags.WordStart) //开头匹配
{
if (start >= 0)
{
bool Word_Start = false;
if (start == 0) { Word_Start = true; }
else
{
var char_i = Text[start - 1];
if ((char_i >= '0' && char_i <= '9') || (char_i >= 'a' && char_i <= 'z')
|| (char_i >= 'A' && char_i <= 'Z'))
{
Word_Start = false;
}
else { Word_Start = true; }
}
if (Word_Start)
{
var LineNum = GetLineNum(start, out var LinePos, out var LineText);
list.Add(new CharacterRange(start, start + end) { LineText = LineText, LineNum = LineNum, LinePos = LinePos, RangeText = Text.Substring(start, end) });
}
start_i = start+ end + 1;
}
else
{
break;
}
}
else
{
var LineNum = GetLineNum(start, out var LinePos, out var LineText);
list.Add(new CharacterRange(start, start + end) { LineText = LineText, LineNum = LineNum, LinePos = LinePos, RangeText = Text.Substring(start, end) });
start_i = start+end + 1;
}
}
else
{
break;
}
}
}
catch (ArgumentException ex)
{
}
if (foundRange.CpMin == foundRange.CpMax) { break; }
if (start_i < Text.Length)
{
all_text = Text.Substring(start_i);
}
}
//根据位置来获取该位置所在行
int GetLineNum(int pos,out int LinePos,out string LineText)
{
LinePos = -1;
var split_txt = Text.Split('\n');
var count = 0;
for (int i = 0; i < split_txt.Length; i++)
{
if (count+split_txt[i].Length+1>=pos)
{
LinePos = count;
LineText = split_txt[i];
return i;
}
else
{
count += split_txt[i].Length+1;
}
}
LineText = "";
return -1;
}
return list;
}
/// <summary>
/// 获取待搜索的文件数量
/// </summary>
/// <returns></returns>
private void SearchFiles()
{
IsRunning = true;
var count = 0;
ShowText("正在统计总文件数...");
var total_count= GetFileCount();
this.Invoke(new Action(() =>
{
progressBar1.Maximum = total_count;
}));
ShowText("统计结束,正在查找...");
Dictionary<string,List<CharacterRange>> dict_list = new Dictionary<string, List<CharacterRange>>();
new Thread(Start).Start();
void Start()
{
Search(SearchConfig.SearchDir);
this.Invoke(new Action(() =>
{
var opens = System.Windows.Forms.Application.OpenForms;
for (int i = 0; i < opens.Count; i++)
{
if (opens[i] is FrmResultText frm2)
{
frm2.findAllResultsPanel1.UpdateFindAllResults(dict_list);
frm2.Show(FrmMainEditor.MainEditor.DockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockBottom);
IsRunning = false;
this.Close();
return;
}
}
FrmResultText frm = new FrmResultText();
frm.findAllResultsPanel1.UpdateFindAllResults(dict_list);
frm.Show(FrmMainEditor.MainEditor.DockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockBottom);
IsRunning = false;
this.Close();
}));
}
void Search(string folder)
{
if (!SearchConfig.SearchHiddenDir)
{
DirectoryInfo directory = new DirectoryInfo(folder);
if ((directory.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
return;
}
}
var split_ext = SearchConfig.Exts.Split(';');
for (int i = 0; i < split_ext.Length; i++)
{
if (IsExit) { break; }
var files = System.IO.Directory.GetFiles(folder, split_ext[i]);
if (files != null)
{
for (int f = 0; f < files.Length; f++)
{
ShowText("正在查找=>" + files[f]);
if(SearchConfig.IgnoreBinExt)
{
var ext= Path.GetExtension(files[f]);
if (";.exe;.apk;.bin;.dll;.msi;.sys;.zip;.rar;.7z;.iso;.cab;.tar;.tgz;.crx;.psd;.jpg;.bmp;.gif;.webp;.png;.jpeg;.ico;.mp3;.wav;.ape;.aac;.flac;.ogg;.mp4;.rmvb;.flv;.wmv;.mov;.3gp;.mpeg;".IndexOfEx(";" + ext + ";") >= 0) { continue; }
}
if(SearchConfig.LimitFileSize>0)
{
if(RyFiles.GetFileSize(files[f])> SearchConfig.LimitFileSize) { continue; }
}
var text = RyFiles.ReadAllText(files[f]);
var find_list= SearchText(text);
if(find_list.Count>0)
{
dict_list.Add(files[f],find_list);
}
count++;
if (count <= total_count)
{
this.Invoke(new Action(() =>
{
progressBar1.Value = count;
}));
}
}
}
}
if (SearchConfig.SearchSubDir)
{
if (IsExit) { return; }
var folder_list = System.IO.Directory.GetDirectories(folder);
if (folder_list != null)
{
for (int i = 0; i < folder_list.Length; i++)
{
if (IsExit) { break; }
if(SearchConfig.SkipDirName.Length>0)
{
var name = Path.GetFileName(folder_list[i]);
if((";"+SearchConfig.SkipDirName+";").IndexOfEx(";"+name+";")>=0) { continue; }
}
Search(folder_list[i]);
}
}
}
}
}
private void FrmFinding_Load(object sender, EventArgs e)
{
}
private void BtnClose_Click(object sender, EventArgs e)
{
IsExit = true;
}
private void FrmFinding_FormClosing(object sender, FormClosingEventArgs e)
{
if (IsRunning) { e.Cancel = true; }
}
private void FrmFinding_Shown(object sender, EventArgs e)
{
SearchFiles();
}
}
public class FindResult
{
public string Path { get; set; } = "";
public CharacterRange Result { get; set; }
}
public class SearchDirConfig
{
/// <summary>
/// 搜索文件夹
/// </summary>
public string SearchDir { get; set; } = "";
/// <summary>
/// 是否搜索子目录
/// </summary>
public bool SearchSubDir { get; set; } = false;
/// <summary>
/// 忽略常见二进制格式
/// </summary>
public bool IgnoreBinExt { get; set; } = true;
/// <summary>
/// 是否搜索隐藏目录
/// </summary>
public bool SearchHiddenDir { get; set; } = false;
/// <summary>
/// 要查找的文本
/// </summary>
public string FindText { get; set; } = "";
/// <summary>
/// 要替换的文本
/// </summary>
public string ReplaceText { get; set; } = "";
/// <summary>
/// 要搜索的扩展名列表
/// </summary>
public string Exts { get; set; } = "";
/// <summary>
/// 跳过的目录名
/// </summary>
public string SkipDirName { get; set; } = "";
/// <summary>
/// 超过该大小的文件将不再查找
/// </summary>
public long LimitFileSize { get; set; } = 0;
/// <summary>
/// 是否开启替换模式,默认是查找模式
/// </summary>
public bool ReplaceModeOn { get; set; } = false;
/// <summary>
/// 正则表达式选项
/// </summary>
public RegexOptions RegexOptions { get; set; } = RegexOptions.None;
public ScintillaNET.SearchFlags SearchFlags { get; set; }
/// <summary>
/// 查找模式,0为普通查找,1表示扩展查找,2表示正则查找
/// </summary>
public int SearchMode { get; set; } = 0;
}
}
@@ -0,0 +1,180 @@
namespace ScintillaNET_FindReplaceDialog
{
partial class IncrementalSearcher
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblFind = new System.Windows.Forms.Label();
this.txtFind = new System.Windows.Forms.TextBox();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.btnNext = new System.Windows.Forms.Button();
this.brnPrevious = new System.Windows.Forms.Button();
this.btnHighlightAll = new System.Windows.Forms.Button();
this.btnClearHighlights = new System.Windows.Forms.Button();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.flowLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// lblFind
//
this.lblFind.AutoSize = true;
this.lblFind.Dock = System.Windows.Forms.DockStyle.Left;
this.lblFind.Location = new System.Drawing.Point(0, 0);
this.lblFind.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
this.lblFind.Name = "lblFind";
this.lblFind.Size = new System.Drawing.Size(27, 22);
this.lblFind.TabIndex = 0;
this.lblFind.Text = "&Find";
this.lblFind.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// txtFind
//
this.txtFind.Location = new System.Drawing.Point(33, 1);
this.txtFind.Margin = new System.Windows.Forms.Padding(3, 1, 0, 0);
this.txtFind.Name = "txtFind";
this.txtFind.Size = new System.Drawing.Size(135, 20);
this.txtFind.TabIndex = 1;
this.txtFind.TextChanged += new System.EventHandler(this.txtFind_TextChanged);
this.txtFind.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtFind_KeyDown);
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.flowLayoutPanel1.Controls.Add(this.lblFind);
this.flowLayoutPanel1.Controls.Add(this.txtFind);
this.flowLayoutPanel1.Controls.Add(this.btnNext);
this.flowLayoutPanel1.Controls.Add(this.brnPrevious);
this.flowLayoutPanel1.Controls.Add(this.btnHighlightAll);
this.flowLayoutPanel1.Controls.Add(this.btnClearHighlights);
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(259, 22);
this.flowLayoutPanel1.TabIndex = 4;
this.flowLayoutPanel1.WrapContents = false;
//
// btnNext
//
this.btnNext.AutoSize = true;
this.btnNext.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnNext.BackgroundImage = global::RySmartEditor.Properties.Resources.GoToNextMessage;
this.btnNext.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.btnNext.FlatAppearance.BorderSize = 0;
this.btnNext.Image = global::RySmartEditor.Properties.Resources.GoToNextMessage;
this.btnNext.Location = new System.Drawing.Point(171, 0);
this.btnNext.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(22, 22);
this.btnNext.TabIndex = 2;
this.toolTip.SetToolTip(this.btnNext, "Find Next");
this.btnNext.UseVisualStyleBackColor = true;
this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
//
// brnPrevious
//
this.brnPrevious.AutoSize = true;
this.brnPrevious.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.brnPrevious.FlatAppearance.BorderSize = 0;
this.brnPrevious.Image = global::RySmartEditor.Properties.Resources.GoToPreviousMessage;
this.brnPrevious.Location = new System.Drawing.Point(193, 0);
this.brnPrevious.Margin = new System.Windows.Forms.Padding(0);
this.brnPrevious.Name = "brnPrevious";
this.brnPrevious.Size = new System.Drawing.Size(22, 22);
this.brnPrevious.TabIndex = 3;
this.toolTip.SetToolTip(this.brnPrevious, "Find Previous");
this.brnPrevious.UseVisualStyleBackColor = true;
this.brnPrevious.Click += new System.EventHandler(this.brnPrevious_Click);
//
// btnHighlightAll
//
this.btnHighlightAll.AutoSize = true;
this.btnHighlightAll.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnHighlightAll.BackgroundImage = global::RySmartEditor.Properties.Resources.LineColorHS;
this.btnHighlightAll.FlatAppearance.BorderSize = 0;
this.btnHighlightAll.Font = new System.Drawing.Font("Microsoft Sans Serif", 1.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnHighlightAll.ForeColor = System.Drawing.Color.SkyBlue;
this.btnHighlightAll.Image = global::RySmartEditor.Properties.Resources.LineColorHS;
this.btnHighlightAll.Location = new System.Drawing.Point(215, 0);
this.btnHighlightAll.Margin = new System.Windows.Forms.Padding(0);
this.btnHighlightAll.Name = "btnHighlightAll";
this.btnHighlightAll.Size = new System.Drawing.Size(22, 22);
this.btnHighlightAll.TabIndex = 4;
this.btnHighlightAll.Text = "&h";
this.toolTip.SetToolTip(this.btnHighlightAll, "Highlight All Matches (ALT+H)");
this.btnHighlightAll.UseVisualStyleBackColor = true;
this.btnHighlightAll.Click += new System.EventHandler(this.btnHighlightAll_Click);
//
// btnClearHighlights
//
this.btnClearHighlights.AutoSize = true;
this.btnClearHighlights.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnClearHighlights.FlatAppearance.BorderSize = 0;
this.btnClearHighlights.Font = new System.Drawing.Font("Microsoft Sans Serif", 1.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnClearHighlights.Image = global::RySmartEditor.Properties.Resources.DeleteHS;
this.btnClearHighlights.Location = new System.Drawing.Point(237, 0);
this.btnClearHighlights.Margin = new System.Windows.Forms.Padding(0);
this.btnClearHighlights.Name = "btnClearHighlights";
this.btnClearHighlights.Size = new System.Drawing.Size(22, 22);
this.btnClearHighlights.TabIndex = 5;
this.btnClearHighlights.Text = "&j";
this.toolTip.SetToolTip(this.btnClearHighlights, "Clear Highlights (ALT+J)");
this.btnClearHighlights.UseVisualStyleBackColor = true;
this.btnClearHighlights.Click += new System.EventHandler(this.btnClearHighlights_Click);
//
// IncrementalSearcher
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.Color.LightSteelBlue;
this.Controls.Add(this.flowLayoutPanel1);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "IncrementalSearcher";
this.Size = new System.Drawing.Size(259, 22);
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblFind;
private System.Windows.Forms.TextBox txtFind;
private System.Windows.Forms.Button btnNext;
private System.Windows.Forms.Button brnPrevious;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.Button btnHighlightAll;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.Button btnClearHighlights;
}
}
@@ -0,0 +1,303 @@
namespace ScintillaNET_FindReplaceDialog
{
using ScintillaNET;
using ScintillaNET_FindReplaceDialog;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class IncrementalSearcher : UserControl
{
#region Fields
private bool _autoPosition = true;
private Scintilla _scintilla;
private bool _toolItem = false;
private FindReplace _findReplace;
#endregion Fields
#region Constructors
public IncrementalSearcher()
{
InitializeComponent();
}
public IncrementalSearcher(bool toolItem)
{
InitializeComponent();
_toolItem = toolItem;
if (toolItem)
BackColor = Color.Transparent;
}
#endregion Constructors
#region Properties
/// <summary>
/// Gets or sets whether the control should automatically move away from the current
/// selection to prevent obscuring it.
/// </summary>
/// <returns>true to automatically move away from the current selection; otherwise, false.
/// If ToolItem is enabled, this defaults to false.</returns>
public bool AutoPosition
{
get
{
return _autoPosition;
}
set
{
if (!ToolItem)
_autoPosition = value;
else
_autoPosition = false;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public FindReplace FindReplace
{
get
{
return _findReplace;
}
set
{
_findReplace = value;
if (value!=null)
{
_scintilla = _findReplace.Scintilla;
}
else
{
_scintilla = null;
}
}
}
[Browsable(false)]
public Scintilla Scintilla
{
get
{
return _scintilla;
}
set
{
_scintilla = value;
}
}
public bool ToolItem
{
get { return _toolItem; }
set
{
_toolItem = value;
if (_toolItem)
BackColor = Color.Transparent;
else
BackColor = Color.LightSteelBlue;
}
}
#endregion Properties
#region Event Handlers
private void brnPrevious_Click(object sender, EventArgs e)
{
findPrevious();
}
private void btnClearHighlights_Click(object sender, EventArgs e)
{
if (_scintilla == null)
return;
_findReplace.ClearAllHighlights();
}
private void btnHighlightAll_Click(object sender, EventArgs e)
{
if (txtFind.Text == string.Empty)
return;
if (_scintilla == null)
return;
int foundCount = _findReplace.FindAll(txtFind.Text, false, true).Count;
}
private void btnNext_Click(object sender, EventArgs e)
{
findNext();
}
#endregion Event Handlers
#region Methods
public virtual void MoveFormAwayFromSelection()
{
if (!Visible || _scintilla == null)
return;
if (!AutoPosition)
return;
int pos = _scintilla.CurrentPosition;
int x = _scintilla.PointXFromPosition(pos);
int y = _scintilla.PointYFromPosition(pos);
Point cursorPoint = new Point(x, y);
Rectangle r = new Rectangle(Location, Size);
if (_scintilla != null)
{
r.Location = new Point(_scintilla.ClientRectangle.Right - Size.Width, 0);
}
if (r.Contains(cursorPoint))
{
Point newLocation;
if (cursorPoint.Y < (Screen.PrimaryScreen.Bounds.Height / 2))
{
//TODO - replace lineheight with ScintillaNET command, when added
int SCI_TEXTHEIGHT = 2279;
int lineHeight = _scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
// Top half of the screen
newLocation = new Point(r.X, cursorPoint.Y + lineHeight * 2);
}
else
{
//TODO - replace lineheight with ScintillaNET command, when added
int SCI_TEXTHEIGHT = 2279;
int lineHeight = _scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
// Bottom half of the screen
newLocation = new Point(r.X, cursorPoint.Y - Height - (lineHeight * 2));
}
Location = newLocation;
}
else
{
Location = r.Location;
}
}
protected override void OnCreateControl()
{
base.OnCreateControl();
MoveFormAwayFromSelection();
txtFind.Focus();
}
protected override void OnLeave(EventArgs e)
{
base.OnLostFocus(e);
if (!_toolItem)
Hide();
}
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
txtFind.Text = string.Empty;
txtFind.BackColor = SystemColors.Window;
MoveFormAwayFromSelection();
if (Visible)
txtFind.Focus();
else if (_scintilla != null)
_scintilla.Focus();
}
private void findNext()
{
if (txtFind.Text == string.Empty)
return;
if (_scintilla == null)
return;
ScintillaNET_FindReplaceDialog.CharacterRange r = _findReplace.FindNext(txtFind.Text, true, _findReplace.Window.GetSearchFlags());
if (r.CpMin != r.CpMax)
{
_scintilla.GotoPosition(r.CpMin);
_scintilla.SetSel(r.CpMin, r.CpMax);
}
MoveFormAwayFromSelection();
}
private void findPrevious()
{
if (txtFind.Text == string.Empty)
return;
if (_scintilla == null)
return;
ScintillaNET_FindReplaceDialog.CharacterRange r = _findReplace.FindPrevious(txtFind.Text, true, _findReplace.Window.GetSearchFlags());
if (r.CpMin != r.CpMax)
{
_scintilla.GotoPosition(r.CpMin);
_scintilla.SetSel(r.CpMin, r.CpMax);
}
MoveFormAwayFromSelection();
}
private void txtFind_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
case Keys.Down:
findNext();
e.Handled = true;
break;
case Keys.Up:
findPrevious();
e.Handled = true;
break;
case Keys.Escape:
if (!_toolItem)
Hide();
break;
}
}
private void txtFind_TextChanged(object sender, EventArgs e)
{
txtFind.BackColor = SystemColors.Window;
if (txtFind.Text == string.Empty)
return;
if (_scintilla == null)
return;
int pos = Math.Min(_scintilla.CurrentPosition, _scintilla.AnchorPosition);
ScintillaNET_FindReplaceDialog.CharacterRange r = _findReplace.Find(pos, _scintilla.TextLength, txtFind.Text, _findReplace.Window.GetSearchFlags());
if (r.CpMin == r.CpMax)
r = _findReplace.Find(0, pos, txtFind.Text, _findReplace.Window.GetSearchFlags());
if (r.CpMin != r.CpMax)
{
_scintilla.GotoPosition(r.CpMin);
_scintilla.SetSel(r.CpMin, r.CpMax);
}
else
txtFind.BackColor = Color.Tomato;
MoveFormAwayFromSelection();
}
#endregion Methods
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,40 @@
#region Using Directives
using ScintillaNET;
using ScintillaNET_FindReplaceDialog;
using System;
using System.Windows.Forms;
#endregion Using Directives
namespace ScintillaNET_FindReplaceDialog
{
public class ToolStripIncrementalSearcher : ToolStripControlHost
{
#region Properties
public Scintilla Scintilla
{
get { return Searcher.Scintilla; }
set { Searcher.Scintilla = value; }
}
public IncrementalSearcher Searcher
{
get { return Control as IncrementalSearcher; }
}
#endregion Properties
#region Constructors
public ToolStripIncrementalSearcher() : base(new IncrementalSearcher(true))
{
}
#endregion Constructors
}
}
@@ -0,0 +1,120 @@
#region Using Directives
using ryCommon;
using ScintillaNET;
using System;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
#endregion Using Directives
namespace ScintillaNET_FindReplaceDialog
{
public class GoTo
{
private Scintilla _scintilla=null;
private GoToDialog _window;
#region Methods
public void Line(int number)
{
if (_scintilla == null) { return; }
_scintilla.Lines[number].Goto();
}
public void Position(int pos)
{
if (_scintilla == null) { return; }
_scintilla.GotoPosition(pos);
}
public void ShowGoToDialog()
{
if (_scintilla == null) { return; }
//GoToDialog gd = new GoToDialog();
GoToDialog gd = _window;
gd.CurrentLineNumber = _scintilla.CurrentLine;
gd.MaximumLineNumber = _scintilla.Lines.Count;
gd.Scintilla = _scintilla;
if (!_window.Visible)
{
var form = _scintilla.FindForm();
if (form != null)
{
if (form is DockContent dc)
{
var parent = dc.DockPanel.FindForm();
_window.StartPosition = FormStartPosition.Manual;
_window.Location = new System.Drawing.Point(parent.Left+(parent.Width - _window.Width) / 2, parent.Top+(parent.Height - _window.Height) / 2);
_window.Show(parent);
}
else
{
_window.Show(form);
}
}
else
{
_window.StartPosition = FormStartPosition.CenterScreen;
_window.Show();
}
}
//_window.ShowDialog(_scintilla.FindForm());
//_window.Show(_scintilla.FindForm());
//if (gd.ShowDialog() == DialogResult.OK)
//Line(gd.GotoLineNumber);
//gd.ShowDialog();
//gd.Show();
_scintilla.Focus();
}
#endregion Methods
#region Constructors
protected virtual GoToDialog CreateWindowInstance()
{
return new GoToDialog();
}
public GoTo(Scintilla scintilla)
{
_scintilla = scintilla;
_window = CreateWindowInstance();
_window.Scintilla = scintilla;
}
public GoTo()
{
_scintilla = null;
_window = CreateWindowInstance();
_window.Scintilla = null;
}
public Scintilla Scintilla
{
get { return _scintilla; }
set {
_scintilla = value;
_window.Scintilla = value;
if (value != null)
{
GoToDialog gd = _window;
gd.CurrentLineNumber = _scintilla.CurrentLine;
gd.MaximumLineNumber = _scintilla.Lines.Count;
gd.Scintilla = _scintilla;
gd.UpdateUI();
}
}
}
#endregion Constructors
}
}
@@ -0,0 +1,163 @@
namespace ScintillaNET_FindReplaceDialog
{
partial class GoToDialog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblCurrentLine = new System.Windows.Forms.Label();
this.txtCurrentLine = new System.Windows.Forms.TextBox();
this.err = new System.Windows.Forms.ErrorProvider(this.components);
this.txtMaxLine = new System.Windows.Forms.TextBox();
this.lblMaxLine = new System.Windows.Forms.Label();
this.txtGotoLine = new System.Windows.Forms.TextBox();
this.lblGotoLine = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.err)).BeginInit();
this.SuspendLayout();
//
// lblCurrentLine
//
this.lblCurrentLine.AutoSize = true;
this.lblCurrentLine.Location = new System.Drawing.Point(9, 13);
this.lblCurrentLine.Name = "lblCurrentLine";
this.lblCurrentLine.Size = new System.Drawing.Size(55, 13);
this.lblCurrentLine.TabIndex = 0;
this.lblCurrentLine.Text = "当前行号";
//
// txtCurrentLine
//
this.txtCurrentLine.Location = new System.Drawing.Point(132, 8);
this.txtCurrentLine.Name = "txtCurrentLine";
this.txtCurrentLine.ReadOnly = true;
this.txtCurrentLine.Size = new System.Drawing.Size(63, 21);
this.txtCurrentLine.TabIndex = 1;
//
// err
//
this.err.ContainerControl = this;
//
// txtMaxLine
//
this.txtMaxLine.Location = new System.Drawing.Point(132, 33);
this.txtMaxLine.Name = "txtMaxLine";
this.txtMaxLine.ReadOnly = true;
this.txtMaxLine.Size = new System.Drawing.Size(63, 21);
this.txtMaxLine.TabIndex = 3;
//
// lblMaxLine
//
this.lblMaxLine.AutoSize = true;
this.lblMaxLine.Location = new System.Drawing.Point(9, 37);
this.lblMaxLine.Name = "lblMaxLine";
this.lblMaxLine.Size = new System.Drawing.Size(55, 13);
this.lblMaxLine.TabIndex = 2;
this.lblMaxLine.Text = "最大行号";
//
// txtGotoLine
//
this.txtGotoLine.Location = new System.Drawing.Point(132, 58);
this.txtGotoLine.Name = "txtGotoLine";
this.txtGotoLine.Size = new System.Drawing.Size(63, 21);
this.txtGotoLine.TabIndex = 5;
//
// lblGotoLine
//
this.lblGotoLine.AutoSize = true;
this.lblGotoLine.Location = new System.Drawing.Point(9, 61);
this.lblGotoLine.Name = "lblGotoLine";
this.lblGotoLine.Size = new System.Drawing.Size(55, 13);
this.lblGotoLine.TabIndex = 4;
this.lblGotoLine.Text = "目标行号";
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(39, 85);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 6;
this.btnOK.Text = "确定";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.BtnOK_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(120, 85);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 7;
this.btnCancel.Text = "取消";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click);
//
// GoToDialog
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(210, 113);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.txtGotoLine);
this.Controls.Add(this.lblGotoLine);
this.Controls.Add(this.txtMaxLine);
this.Controls.Add(this.lblMaxLine);
this.Controls.Add(this.txtCurrentLine);
this.Controls.Add(this.lblCurrentLine);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "GoToDialog";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "行定位";
this.Activated += new System.EventHandler(this.GoToDialog_Activated);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.GoToDialog_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.err)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblCurrentLine;
private System.Windows.Forms.TextBox txtCurrentLine;
private System.Windows.Forms.ErrorProvider err;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.TextBox txtGotoLine;
private System.Windows.Forms.Label lblGotoLine;
private System.Windows.Forms.TextBox txtMaxLine;
private System.Windows.Forms.Label lblMaxLine;
}
}
@@ -0,0 +1,174 @@
#region Using Directives
using ScintillaNET;
using System;
using System.Drawing;
using System.Windows.Forms;
#endregion Using Directives
namespace ScintillaNET_FindReplaceDialog
{
public partial class GoToDialog : Form
{
#region Fields
private Scintilla _scintilla;
private int _currentLineNumber;
private int _maximumLineNumber;
private int _gotoLineNumber;
#endregion Fields
#region Methods
private void BtnOK_Click(object sender, EventArgs e)
{
if (int.TryParse(txtGotoLine.Text, out _gotoLineNumber))
{
// Line #s are 0 based but the users don't think that way
_gotoLineNumber--;
if (_gotoLineNumber < 0 || _gotoLineNumber >= _maximumLineNumber)
err.SetError(txtGotoLine, "转到行必须大于0且小于 " + (_maximumLineNumber + 1).ToString());
else
{
_scintilla.Lines[_gotoLineNumber].Goto();
//Line(GotoLineNumber);
this.Hide();
//DialogResult = DialogResult.OK;
}
}
else
{
err.SetError(txtGotoLine, "转到行必须是数值");
}
}
// This was taken from FindReplaceDialog. Obviously some refactoring is called for
// since we have common code. However I'm holding off on this because I'm coming
// up with some other ideas for the FindReplaceDialog. Right now every scintilla
// gets its own FindReplaceDialog, but they really need to be sharable across
// multiple scintillas much like how DropMarkers work.
private void MoveFormAwayFromSelection()
{
if (!Visible)
return;
int pos = Scintilla.CurrentPosition;
int x = Scintilla.PointXFromPosition(pos);
int y = Scintilla.PointYFromPosition(pos);
Point cursorPoint = Scintilla.PointToScreen(new Point(x, y));
Rectangle r = new Rectangle(Location, Size);
if (r.Contains(cursorPoint))
{
Point newLocation;
if (cursorPoint.Y < (Screen.PrimaryScreen.Bounds.Height / 2))
{
//TODO - replace lineheight with ScintillaNET command, when added
int SCI_TEXTHEIGHT = 2279;
int lineHeight = Scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
// Top half of the screen
newLocation = Scintilla.PointToClient(
new Point(Location.X, cursorPoint.Y + lineHeight * 2)
);
}
else
{
//TODO - replace lineheight with ScintillaNET command, when added
int SCI_TEXTHEIGHT = 2279;
int lineHeight = Scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
// Bottom half of the screen
newLocation = Scintilla.PointToClient(
new Point(Location.X, cursorPoint.Y - Height - (lineHeight * 2))
);
}
newLocation = Scintilla.PointToScreen(newLocation);
Location = newLocation;
}
}
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
MoveFormAwayFromSelection();
}
#endregion Methods
#region Properties
public int CurrentLineNumber
{
get { return _currentLineNumber; }
set
{
_currentLineNumber = value;
}
}
public int GotoLineNumber
{
get { return _gotoLineNumber; }
set
{
_gotoLineNumber = value;
}
}
public int MaximumLineNumber
{
get { return _maximumLineNumber; }
set
{
_maximumLineNumber = value;
}
}
public Scintilla Scintilla
{
get { return _scintilla; }
set { _scintilla = value; }
}
#endregion Properties
#region Constructors
public GoToDialog()
{
InitializeComponent();
}
#endregion Constructors
private void GoToDialog_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
}
}
private void GoToDialog_Activated(object sender, EventArgs e)
{
UpdateUI();
}
public void UpdateUI()
{
string displayLine = (_currentLineNumber + 1).ToString();
txtCurrentLine.Text = displayLine;
txtMaxLine.Text = _maximumLineNumber.ToString();
txtGotoLine.Text = displayLine;
txtGotoLine.Select();
}
private void BtnCancel_Click(object sender, EventArgs e)
{
Hide();
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="err.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
@@ -0,0 +1,800 @@
using ScintillaNET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static ScintillaNET.Style;
using VPKSoft.ScintillaLexers;
using ScintillaNET_FindReplaceDialog.FindAllResults;
using ScintillaNET_FindReplaceDialog;
using System.Windows.Forms;
using ryCommon;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
using Newtonsoft.Json.Linq;
using DiffPlex.Model;
using IfacesEnumsStructsClasses;
namespace ryControls
{
public partial class HighlightEditor : Control
{
public HighlightEditor() : base()
{
if(!this.DesignMode)
{
this.Controls.Add(Editor);
Editor.Parent = this;
Editor.Dock= DockStyle.Fill;
}
Editor.CaretLineBackColor = Color.FromArgb(255, 255, 192);
Editor.AutoCAutoHide = true;
Editor.TextChanged += Scintilla_TextChanged;
Editor.ContextMenuStrip = contextMenuStripHighlightText21;
Editor.CharAdded += HighlightEditor_CharAdded;
Editor.UpdateUI += HighlightEditor_UpdateUI;
Editor.EolMode = Eol.CrLf;
//Editor.AdditionalCaretForeColor=Color.Red;
//Editor
//base.HandleCreated += HighlightEditor_HandleCreated;
//base.InternalFocusFlag = true;
MyFindReplace = new FindReplace
{
Scintilla = Editor
};
AutoComplete.TargetControlWrapper = new ScintillaWrapper(Editor);
Editor.DoubleClick += Editor_DoubleClick;
var ind_17= Editor.Indicators[17];
ind_17.ForeColor = Color.FromArgb(232, 232, 255);
ind_17.Alpha = 100;
ind_17.Style = IndicatorStyle.RoundBox;
ind_17.Under = true;
_indicator = Editor.Indicators[16];
_indicator.ForeColor = Color.Red;
//_indicator.ForeColor = Color.LawnGreen; //Smart highlight
_indicator.Alpha = 100;
_indicator.Style = IndicatorStyle.RoundBox;
_indicator.Under = true;
Editor.IndicatorCurrent = _indicator.Index;
this.LostFocus += HighlightEditor_LostFocus;
Editor.LostFocus += HighlightEditor_LostFocus;
Editor.InternalFocusFlag = true;
Editor.CaretLineBackColorAlpha = 60;
Editor.CaretPeriod = 0;
}
private void HighlightEditor_LostFocus(object sender, EventArgs e)
{
//Editor.AdditionalCaretForeColor
}
#region 属性设置
/// <summary>
/// 读取或设置只读模式
/// </summary>
[Description("是否开启只读模式")]
public bool ReadOnly
{
get { return Editor.ReadOnly; }
set { Editor.ReadOnly = value; }
}
[DefaultValue(ScintillaNET.BorderStyle.Fixed3D)]
[Category("Appearance")]
[Description("编辑器边框.")]
public ScintillaNET.BorderStyle BorderStyle
{
get { return Editor.BorderStyle; }
set { Editor.BorderStyle = value; }
}
/// <summary>
/// 是否开启行号
/// </summary>
[Description("是否开启行号")]
public bool LineNumberOn { get; set; } = true;
/// <summary>
/// 是否使用自定义搜索功能
/// </summary>
[Description("是否使用自定义搜索功能")]
public bool UseCustomShowFindReplace { get; set; } = false;
/// <summary>
/// 是否使用自定义定位行功能
/// </summary>
[Description("是否使用自定义定位行功能")]
public bool UseCustomGotoLine { get; set; } = false;
/// <summary>
/// 当前高亮语言
/// </summary>
public LexerType CurHighliteLang
{
get; set;
} = LexerType.Text;
/// <summary>
/// 获取或设置是否开启自动标记功能
/// </summary>
[Description("开启自动标记功能")]
public bool AutoMark { get; set; } = true;
/// <summary>
/// 获取或设置编辑器字体
/// </summary>
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[DefaultValue(typeof(Font), "Consolas, 14pt")]
public override Font Font
{
get => base.Font;
set
{
base.Font = value;
Editor.Font = value;
for (int i = 0; i < Editor.Styles.Count; i++)
{
if (i != CallTip) SetStyleFont(i, value);
}
}
}
/// <summary>
/// Sets font style properties
/// </summary>
/// <param name="index"></param>
/// <param name="font"></param>
private void SetStyleFont(int index, Font font)
{
Editor.Styles[index].Font = font.Name;
Editor.Styles[index].SizeF = font.SizeInPoints;
Editor.Styles[index].Bold = font.Bold;
Editor.Styles[index].Italic = font.Italic;
Editor.Styles[index].Underline = font.Underline;
}
/// <summary>
/// 获取或设置当前选中的文字
/// </summary>
public string SelectedText
{
get {
var text= Editor.SelectedText.TrimEnd('\0');
if (text == "\0") { text = ""; }
return text;
}
set { Editor.ReplaceSelection(value); }
}
/// <summary>
/// 设置或获取文本
/// </summary>
public override string Text
{
get { return Editor.Text; }
set
{
bool Readonly = Editor.ReadOnly;
if (Readonly)
{
Editor.ReadOnly = false;
}
Editor.Text = value;
if (Readonly)
{
Editor.ReadOnly = true;
}
}
}
#endregion
#region 对外公开的事件
/// <summary>
/// 在自带菜单弹出前激发
/// </summary>
[Description("在自带菜单弹出前激发")]
public event CancelEventHandler OnMenuOpening;
/// <summary>
/// 保存热键发生时
/// </summary>
[Description("保存热键发生时")]
public event EventHandler OnSaveKeyHappen;
/// <summary>
/// 打开自定义查找窗口时发生
/// </summary>
[Description("打开自定义查找窗口时发生")]
public event EventHandler OnCustomShowFind;
/// <summary>
/// 打开自定义替换窗口时发生
/// </summary>
[Description("打开自定义替换窗口时发生")]
public event EventHandler OnCustomShowReplace;
/// <summary>
/// 打开自定义定位行窗口时发生
/// </summary>
[Description("打开自定义定位行窗口时发生")]
public event EventHandler OnCustomShowGotoLine;
/// <summary>
/// 选定内容发生变化
/// </summary>
[Description("选定内容发生变化")]
public event EventHandler OnSelectedChanged;
#endregion
#region 内部事件方法
private void Editor_DoubleClick(object sender, DoubleClickEventArgs e)
{
base.OnDoubleClick(new EventArgs());
}
private void ContextMenuStripRichText1_Opening(object sender, CancelEventArgs e)
{
OnMenuOpening?.Invoke(sender, e);
}
private string Indent(int len)
{
var str = "";
for (int i = 0; i < len; i++)
{
str += " ";
}
return str;
}
private string last_selected = "";
private void HighlightEditor_UpdateUI(object sender,UpdateUIEventArgs e)
{
if (e.Change != UpdateChange.Content)
{
var selected_text = SelectedText;
var sel_start = Editor.SelectionStart;
var sel_id= sel_start + "|" + selected_text.Length;
if (sel_id != last_selected)
{
ClearAllMark();
last_selected = sel_id;
if (AutoMark)
{
MarkText(selected_text);
}
OnSelectedChanged?.Invoke(this, EventArgs.Empty);
}
if (selected_text.Length == 0)
{
var a = Editor.BraceMatch(sel_start);
if (a >= 0)
{
Editor.IndicatorCurrent = _indicator.Index;
Editor.IndicatorFillRange(a, 1);
Editor.IndicatorFillRange(sel_start, 1);
}
else
{
if (sel_start - 1 >= 0)
{
a = Editor.BraceMatch(sel_start - 1);
if (a >= 0)
{
Editor.IndicatorCurrent = _indicator.Index;
Editor.IndicatorFillRange(a, 1);
Editor.IndicatorFillRange(sel_start - 1, 1);
}
}
}
}
var pos = Editor.CurrentPosition;
var line = Editor.LineFromPosition(pos);
Editor.IndicatorCurrent = 17;
Editor.IndicatorFillRange(Editor.Lines[line].Position, Editor.Lines[line].Length);
}
if (LastProcessedChar != 0)
{
var pos = Editor.CurrentPosition;
var line = Editor.LineFromPosition(pos);
if (line >= 1)
{
if (LastProcessedChar == 10)
{
//Editor.Lines[line].Indentation = Editor.Lines[line - 1].Indentation;
var nPrevLineText = Editor.Lines[line - 1].Text.Trim();//获取上一行文本
if (nPrevLineText.Length >= 1)
{
if ("{(<[".IndexOfEx(nPrevLineText.Substring(nPrevLineText.Length - 1, 1)) >= 0)
{
if (Editor.Lines[line].Text.Trim().StartsWith("}")) {
Editor.ReplaceSelection(Indent(Editor.Lines[line - 1].Indentation));
}
else {
Editor.ReplaceSelection(Indent(Editor.Lines[line - 1].Indentation + 4));
}
}
else
{
Editor.ReplaceSelection(Indent(Editor.Lines[line - 1].Indentation));
}
}
else
{
for (int i = line - 2; i >0; i--)
{
nPrevLineText = Editor.Lines[i].Text.Trim();
if (nPrevLineText.Length >= 1)
{
if ("{(<[".IndexOfEx(nPrevLineText.Substring(nPrevLineText.Length - 1, 1)) >= 0)
{
if (Editor.Lines[line].Text.Trim().StartsWith("}"))
{
Editor.ReplaceSelection(Indent(Editor.Lines[i].Indentation));
}
else
{
Editor.ReplaceSelection(Indent(Editor.Lines[i].Indentation + 4));
}
}
else
{
Editor.ReplaceSelection(Indent(Editor.Lines[i].Indentation));
}
break;
}
}
}
}
}
LastProcessedChar = 0;
// if(LastProcessedChar=='}' && this.GetCharAt(pos-2)==' ' && LastProcessedChar!=0)
//{
// var startpos = this.WordStartPosition(pos - 1, false);
// var linepos = this.Lines[line].Indentation;
// if(startpos== linepos)
// {
// var othpos = this.BraceMatch(pos - 1);
// var othline = this.LineFromPosition(othpos);
// int nIndent = this.Lines[othline].Indentation;
// this.TargetStart = startpos;
// this.TargetEnd = pos - 1;
// this.ReplaceTarget("xxxxxxx");
// }
//}
}
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.S))
{
OnSaveKeyHappen?.Invoke(this, new EventArgs());
return true;
}
else if (keyData == (Keys.Control | Keys.F))
{
ShowFind();
return true;
}
else if (keyData == (Keys.Control | Keys.B))
{
return true;
}
else if (keyData == (Keys.Control | Keys.M))
{
return true;
}
else if (keyData == (Keys.Control | Keys.N))
{
return true;
}
else if (keyData == (Keys.Control | Keys.J))
{
return true;
}
else if (keyData == (Keys.Control | Keys.Q))
{
return true;
}
else if (keyData == (Keys.Control | Keys.U))
{
return true;
}
else if (keyData == (Keys.Control | Keys.I))
{
return true;
}
else if (keyData == (Keys.Control | Keys.P))
{
return true;
}
else if (keyData == (Keys.Control | Keys.W))
{
return true;
}
else if (keyData == (Keys.Control | Keys.E))
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);//这里就是返回没有重写的键位,也就是这个函数原本的处理方式 //其余键位默认处理
}
private void HighlightEditor_CharAdded(object sender, CharAddedEventArgs e)
{
LastProcessedChar = e.Char;
}
private void Scintilla_TextChanged(object sender, EventArgs e)
{
base.OnTextChanged(new EventArgs());
if (LineNumberOn)
{
Scintilla scintilla = (Scintilla)sender;
int maxLineNumberCharLengthFromTag = mark;
// Did the number of characters in the line number display change?
// i.e. nnn VS nn, or nnnn VS nn, etc...
var maxLineNumberCharLength = scintilla.Lines.Count.ToString().Length;
if (maxLineNumberCharLength == maxLineNumberCharLengthFromTag)
return;
// Calculate the width required to display the last line number
// and include some padding for good measure.
const int padding = 2;
scintilla.Margins[0].Width = scintilla.TextWidth(ScintillaNET.Style.LineNumber, new string('9', maxLineNumberCharLength + 1)) + padding;
mark = maxLineNumberCharLength;
}
}
/// <summary>
/// 判断改行为函数开头行
/// </summary>
/// <param name="line"></param>
/// <returns></returns>
private bool IsFunLine(string line)
{
if (line.StartsWith("public", StringComparison.OrdinalIgnoreCase) ||
line.StartsWith("private", StringComparison.OrdinalIgnoreCase) ||
line.StartsWith("protected", StringComparison.OrdinalIgnoreCase) ||
line.StartsWith("const", StringComparison.OrdinalIgnoreCase))
{
return true;
}
else
{
if (line.IndexOfEx("(") > 0 && line.IndexOfEx(")") > 0 && line.IndexOfEx("function")>=0)
{
return true;
}
}
return false;
}
#endregion
#region 对方公开方法或函数
public void FindText(string FindText)
{
Editor.TargetStart = 0;
Editor.TargetEnd = Editor.TextLength;
var pos = Editor.SearchInTarget(FindText);
if (pos >= 0)
{
Editor.FirstVisibleLine = Editor.LineFromPosition(pos);
}
}
/// <summary>
/// 获取最近的函数名称所在行内容
/// </summary>
/// <param name="high_editor"></param>
/// <param name="fun_line_num"></param>
/// <returns></returns>
public string GetNearestFunLineStr(HighlightEditor high_editor,out int fun_line_num)
{
var line_num = high_editor.Editor.LineFromPosition(high_editor.Editor.CurrentPosition == 0 ? high_editor.Editor.FirstVisibleLine : high_editor.Editor.CurrentPosition);
var lines = high_editor.Editor.Lines;
var pre_fun_line = "";
var pre_fun_line_num = -1;
var next_fun_line = "";
var next_fun_line_num = -1;
string fun_line;
for (int i = line_num; i >= 0; i--)
{
var line = lines[i].Text.Trim();
if (IsFunLine(line))
{
pre_fun_line = line;
pre_fun_line_num = i;
break;
}
}
if (pre_fun_line_num == -1 || (line_num - pre_fun_line_num) > 3)
{
for (int i = line_num + 1; i < lines.Count; i++)
{
var line = lines[i].Text.Trim();
if (IsFunLine(line))
{
next_fun_line = line;
next_fun_line_num = i;
break;
}
}
}
if (next_fun_line_num == -1)
{
fun_line = pre_fun_line;
fun_line_num = pre_fun_line_num;
}
else if (pre_fun_line_num == -1)
{
fun_line = next_fun_line;
fun_line_num = next_fun_line_num;
}
else if ((line_num - pre_fun_line_num) > (next_fun_line_num - line_num))
{
fun_line = next_fun_line;
fun_line_num = next_fun_line_num;
}
else
{
fun_line = pre_fun_line;
fun_line_num = pre_fun_line_num;
}
return fun_line;
}
/// <summary>
/// 到达与指定编辑器同样的位置
/// </summary>
/// <param name="high_editor"></param>
public int GotoSameLocation(HighlightEditor high_editor)
{
if (high_editor.Editor.CurrentPosition == 0 && high_editor.Editor.FirstVisibleLine==0) { return 0; }
var result = 0;
var line_num=high_editor.Editor.LineFromPosition(high_editor.Editor.CurrentPosition==0? high_editor.Editor.FirstVisibleLine: high_editor.Editor.CurrentPosition);
var lines = high_editor.Editor.Lines;
string fun_line= GetNearestFunLineStr(high_editor,out var fun_line_num);
if (fun_line_num >= 0)
{
Editor.TargetStart = 0;
Editor.TargetEnd = Editor.TextLength;
var pos= Editor.SearchInTarget(fun_line);
if(pos>=0)
{
Editor.FirstVisibleLine = Editor.LineFromPosition(pos);
result = Editor.FirstVisibleLine;
}
else
{
var str = fun_line.GetStr("", "(");
if(str.Length>0)
{
pos = Editor.SearchInTarget(str);
if (pos >= 0)
{
Editor.FirstVisibleLine = Editor.LineFromPosition(pos);
result = Editor.FirstVisibleLine;
}
}
}
}
return result;
//var kk = Editor.Lines.FirstOrDefault(f => f.Text == high_editor.Editor.Lines[line_num].Text);
}
/// <summary>
/// 标记文本
/// </summary>
/// <param name="search_text"></param>
public void MarkText(string search_text)
{
if (search_text.Length == 0)
{
ClearAllMark();
return;
}
if (search_text.IndexOfEx("\n") >= 0 || !search_text.Replace("_","").IsEngOrNum())
{
ClearAllMark();
if (search_text.Length == 1)
{
var a= Editor.BraceMatch(Editor.SelectionStart);
if (a >= 0)
{
Editor.IndicatorCurrent = _indicator.Index;
Editor.IndicatorFillRange(a, 1);
Editor.IndicatorFillRange(Editor.SelectionStart, 1);
}
return;
}
return;
}
var find_count = 0;
//Editor.IndicatorCurrent = _indicator.Index;
var _text = Editor.Text;
var search_len = search_text.Length;
var total_len = _text.Length;
var pos = _text.IndexOf(search_text);
while (pos != -1)
{
if (pos > 0 && pos < total_len - 1)
{
var word = _text.Substring(pos - 1, 1)[0];
if ((word >= 'a' && word <= 'z') || (word >= 'A' && word <= 'Z') || (word >= '0' && word <= '9') || word=='_')
{
//是数字字母不处理
pos = _text.IndexOf(search_text, pos + search_len);
continue;
}
if ((pos + search_len) <= total_len - 1)
{
word = _text.Substring(pos + search_len, 1)[0];
if ((word >= 'a' && word <= 'z') || (word >= 'A' && word <= 'Z') || (word >= '0' && word <= '9') || word == '_')
{
//是数字字母不处理
pos = _text.IndexOf(search_text, pos + search_len);
continue;
}
}
}
find_count++;
Editor.IndicatorCurrent = _indicator.Index;
Editor.IndicatorFillRange(pos, search_len);
pos = _text.IndexOf(search_text, pos + search_len);
}
if (find_count == 1)
{
ClearAllMark();
return;
}
}
/// <summary>
/// 清除所有标记
/// </summary>
public void ClearAllMark()
{
int currentIndicator = Editor.IndicatorCurrent;
Editor.IndicatorCurrent = 17;
Editor.IndicatorClearRange(0, Editor.TextLength);
Editor.IndicatorCurrent = _indicator.Index;
Editor.IndicatorClearRange(0, Editor.TextLength);
Editor.IndicatorCurrent = currentIndicator;
}
/// <summary>
/// 设置高亮文本
/// </summary>
/// <param name="format"></param>
public void SetHightlightText(string format)
{
SetHightlightText(this.Text, format);
}
/// <summary>
/// 设置高亮文本
/// </summary>
/// <param name="text"></param>
/// <param name="format"></param>
public void SetHightlightText(string text, string format)
{
bool Readonly = Editor.ReadOnly;
if (Readonly)
{
Editor.ReadOnly = false;
}
Editor.Text = text;
var _formart = format;
if (_formart == "c#") { _formart = "cs"; }
try
{
var LexerType = VPKSoft.ScintillaLexers.HelperClasses.LexerFileExtensions.LexerTypeFromFileName(@"1." + _formart);
CurHighliteLang = LexerType;
ScintillaLexers.CreateLexer(Editor, LexerType);
}
catch { CurHighliteLang = LexerType.Unknown; }
if (Readonly)
{
Editor.ReadOnly = true;
}
Editor.Font = this.Font;
for (int i = 0; i < Editor.Styles.Count; i++)
{
if (i != CallTip) SetStyleFont(i, this.Font);
}
}
/// <summary>
/// 设置文本
/// </summary>
/// <param name="text"></param>
/// <param name="format"></param>
public void SetText(string text)
{
bool Readonly = Editor.ReadOnly;
if (Readonly)
{
Editor.ReadOnly = false;
}
Editor.Text = text;
if (Readonly)
{
Editor.ReadOnly = true;
}
}
/// <summary>
/// 显示查找对话框
/// </summary>
public void ShowFind()
{
if (UseCustomShowFindReplace)
{
OnCustomShowFind?.Invoke(this, new EventArgs());
}
else
{
MyFindReplace.ShowFind();
}
}
/// <summary>
/// 显示替换对话框
/// </summary>
public void ShowReplace()
{
if (UseCustomShowFindReplace)
{
OnCustomShowReplace?.Invoke(this, new EventArgs());
}
else
{
MyFindReplace.ShowFind(1);
}
}
/// <summary>
/// 显示行定位对话框
/// </summary>
public void ShowGotoLine()
{
if (UseCustomGotoLine)
{
OnCustomShowGotoLine?.Invoke(this, new EventArgs());
}
else
{
GoTo MyGoTo = new GoTo(Editor);
MyGoTo.ShowGoToDialog();
}
}
/// <summary>
/// 根据标签获得菜单项
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
public ToolStripItem GetMenuItem(string tag)
{
for (int i = 0; i < contextMenuStripHighlightText21.Items.Count; i++)
{
var item = contextMenuStripHighlightText21.Items[i];
if (item.Tag == null) { continue; }
if (tag == item.Tag.ToString())
{
return item;
}
}
return null;
}
/// <summary>
/// 设置自动完成列表
/// </summary>
/// <param name="list"></param>
public void SetAutoCompleteList(List<string> list)
{
AutoComplete.SetAutocompleteItems(list);
}
/// <summary>
/// 添加菜单分隔线
/// </summary>
/// <returns></returns>
public ToolStripSeparator AddSeparatorMenu()
{
return contextMenuStripHighlightText21.AddSeparatorMenu();
}
/// <summary>
/// 添加菜单
/// </summary>
/// <param name="name"></param>
/// <param name="tag"></param>
/// <returns></returns>
public ToolStripMenuItem AddMenu(string name, string tag)
{
return contextMenuStripHighlightText21.AddMenu(name, tag);
}
#endregion
#region 声明变量
int mark = -1;
private string lastSelectedText = "";
private int LastProcessedChar;
private Indicator _indicator;
public override ContextMenuStrip ContextMenuStrip { get => Editor.ContextMenuStrip; set => Editor.ContextMenuStrip = value; }
private readonly FindReplace MyFindReplace;
public ScintillaNET.Scintilla Editor { get; set; } = new Scintilla();
private readonly AutocompleteMenuNS.AutocompleteMenu AutoComplete = new AutocompleteMenuNS.AutocompleteMenu();
private readonly ryControls.ContextMenuStripHighlightText2 contextMenuStripHighlightText21 = new ContextMenuStripHighlightText2();
#endregion
}
}
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStripHighlightText21.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>
@@ -0,0 +1,93 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Batch lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerBatch: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the batch script file.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateBatchLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors,bool foldOn)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0
scintilla.Styles[Style.Batch.Default].ForeColor = lexerColors[LexerType.Batch, "DefaultFore"];
scintilla.Styles[Style.Batch.Default].BackColor = lexerColors[LexerType.Batch, "DefaultBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Batch.Comment].ForeColor = lexerColors[LexerType.Batch, "CommentFore"];
scintilla.Styles[Style.Batch.Comment].BackColor = lexerColors[LexerType.Batch, "CommentBack"];
// KEYWORDS, fontStyle = 1
scintilla.Styles[Style.Batch.Word].Bold = true;
scintilla.Styles[Style.Batch.Word].ForeColor = lexerColors[LexerType.Batch, "WordFore"];
scintilla.Styles[Style.Batch.Word].BackColor = lexerColors[LexerType.Batch, "WordBack"];
// LABEL, fontStyle = 1
scintilla.Styles[Style.Batch.Label].Bold = true;
scintilla.Styles[Style.Batch.Label].ForeColor = lexerColors[LexerType.Batch, "LabelFore"];
scintilla.Styles[Style.Batch.Label].BackColor = lexerColors[LexerType.Batch, "LabelBack"];
// HIDE SYBOL, fontStyle = 0
scintilla.Styles[Style.Batch.Hide].ForeColor = lexerColors[LexerType.Batch, "HideFore"];
scintilla.Styles[Style.Batch.Hide].BackColor = lexerColors[LexerType.Batch, "HideBack"];
// COMMAND, fontStyle = 0
scintilla.Styles[Style.Batch.Command].ForeColor = lexerColors[LexerType.Batch, "CommandFore"];
scintilla.Styles[Style.Batch.Command].BackColor = lexerColors[LexerType.Batch, "CommandBack"];
// VARIABLE, fontStyle = 1
scintilla.Styles[Style.Batch.Identifier].Bold = true;
scintilla.Styles[Style.Batch.Identifier].ForeColor = lexerColors[LexerType.Batch, "IdentifierFore"];
scintilla.Styles[Style.Batch.Identifier].BackColor = lexerColors[LexerType.Batch, "IdentifierBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[Style.Batch.Operator].Bold = true;
scintilla.Styles[Style.Batch.Operator].ForeColor = lexerColors[LexerType.Batch, "OperatorFore"];
scintilla.Styles[Style.Batch.Operator].BackColor = lexerColors[LexerType.Batch, "OperatorBack"];
scintilla.LexerName = "batch";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Batch);
if(foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,309 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using System.Drawing;
using System.Linq;
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
using static VPKSoft.ScintillaLexers.GlobalScintillaFont;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A base class for creating static lexers.
/// </summary>
public class CreateLexerCommon
{
/// <summary>
/// Resets the Scintilla's style to default.
/// </summary>
/// <param name="scintilla">A Scintilla which style to reset.</param>
public static void ClearStyle(Scintilla scintilla)
{
scintilla.StyleResetDefault();
scintilla.Styles[Style.Default].Font = FontFamilyName;
scintilla.Styles[Style.Default].Size = FontSize;
scintilla.StyleClearAll();
}
/// <summary>
/// Adds a "standard" folding to a lexer.
/// </summary>
/// <param name="scintilla">An instance to a Scintilla class.</param>
public static void AddFolding(Scintilla scintilla)
{
// the default colors as in the example.. (C)::https://github.com/jacobslusser/ScintillaNET/wiki/Automatic-Code-Folding
AddFolding(scintilla, SystemColors.ControlLightLight, SystemColors.ControlDark);
}
/// <summary>
/// Adds a "standard" folding to a lexer with given foreground and background colors.
/// </summary>
/// <param name="scintilla">An instance to a Scintilla class.</param>
/// <param name="foregroundColor">The foreground color to be used.</param>
/// <param name="backgroundColor">The background color to be used.</param>
public static void AddFolding(Scintilla scintilla, Color foregroundColor, Color backgroundColor)
{
// the default colors as in the example.. (C)::https://github.com/jacobslusser/ScintillaNET/wiki/Automatic-Code-Folding
// Instruct the lexer to calculate folding..
LexerFoldProperties.FoldDefault(scintilla);
// Configure a margin to display folding symbols
scintilla.Margins[2].Type = MarginType.Symbol;
scintilla.Margins[2].Mask = Marker.MaskFolders;
scintilla.Margins[2].Sensitive = true;
scintilla.Margins[2].Width = 20;
// Set colors for all folding markers
for (int i = 25; i <= 31; i++)
{
scintilla.Markers[i].SetForeColor(foregroundColor);
scintilla.Markers[i].SetBackColor(backgroundColor);
}
// Configure folding markers with respective symbols
scintilla.Markers[Marker.Folder].Symbol = MarkerSymbol.BoxPlus;
scintilla.Markers[Marker.FolderOpen].Symbol = MarkerSymbol.BoxMinus;
scintilla.Markers[Marker.FolderEnd].Symbol = MarkerSymbol.BoxPlusConnected;
scintilla.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
scintilla.Markers[Marker.FolderOpenMid].Symbol = MarkerSymbol.BoxMinusConnected;
scintilla.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
scintilla.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;
// Enable automatic folding
scintilla.AutomaticFold = (AutomaticFold.Show | AutomaticFold.Click | AutomaticFold.Change);
}
/// <summary>
/// Sets the HTML styles for a lexer.
/// </summary>
/// <param name="scintilla">A <see cref="Scintilla"/> class instance.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
public static void SetHtmlStyles(Scintilla scintilla, LexerColors.LexerColors lexerColors)
{
// DEFAULT, fontStyle = 1, styleId = 0
scintilla.Styles[Style.Html.Default].Bold = true;
scintilla.Styles[Style.Html.Default].ForeColor = lexerColors[LexerType.HTML, "DefaultFore"];
scintilla.Styles[Style.Html.Default].BackColor = lexerColors[LexerType.HTML, "DefaultBack"];
// COMMENT, fontStyle = 0, styleId = 9
scintilla.Styles[Style.Html.Comment].ForeColor = lexerColors[LexerType.HTML, "CommentFore"];
scintilla.Styles[Style.Html.Comment].BackColor = lexerColors[LexerType.HTML, "CommentBack"];
// NUMBER, fontStyle = 0, styleId = 5
scintilla.Styles[Style.Html.Number].ForeColor = lexerColors[LexerType.HTML, "NumberFore"];
scintilla.Styles[Style.Html.Number].BackColor = lexerColors[LexerType.HTML, "NumberBack"];
// self added, seemed to be missing..
scintilla.Styles[Style.Html.Entity].Italic = true;
scintilla.Styles[Style.Html.Entity].ForeColor = lexerColors[LexerType.HTML, "EntityFore"];
scintilla.Styles[Style.Html.Entity].BackColor = lexerColors[LexerType.HTML, "EntityBack"];
// DOUBLESTRING, fontStyle = 1, styleId = 6
scintilla.Styles[Style.Html.DoubleString].Bold = true;
scintilla.Styles[Style.Html.DoubleString].ForeColor = lexerColors[LexerType.HTML, "DoubleStringFore"];
scintilla.Styles[Style.Html.DoubleString].BackColor = lexerColors[LexerType.HTML, "DoubleStringBack"];
// SINGLESTRING, fontStyle = 1, styleId = 7
scintilla.Styles[Style.Html.SingleString].Bold = true;
scintilla.Styles[Style.Html.SingleString].ForeColor = lexerColors[LexerType.HTML, "SingleStringFore"];
scintilla.Styles[Style.Html.SingleString].BackColor = lexerColors[LexerType.HTML, "SingleStringBack"];
// TAG, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Html.Tag].ForeColor = lexerColors[LexerType.HTML, "TagFore"];
scintilla.Styles[Style.Html.Tag].BackColor = lexerColors[LexerType.HTML, "TagBack"];
// TAGEND, fontStyle = 0, styleId = 11
scintilla.Styles[Style.Html.TagEnd].ForeColor = lexerColors[LexerType.HTML, "TagEndFore"];
scintilla.Styles[Style.Html.TagEnd].BackColor = lexerColors[LexerType.HTML, "TagEndBack"];
// TAGUNKNOWN, fontStyle = 0, styleId = 2
scintilla.Styles[Style.Html.TagUnknown].ForeColor = lexerColors[LexerType.HTML, "TagUnknownFore"];
scintilla.Styles[Style.Html.TagUnknown].BackColor = lexerColors[LexerType.HTML, "TagUnknownBack"];
// ATTRIBUTE, fontStyle = 0, styleId = 3
scintilla.Styles[Style.Html.Attribute].ForeColor = lexerColors[LexerType.HTML, "AttributeFore"];
scintilla.Styles[Style.Html.Attribute].BackColor = lexerColors[LexerType.HTML, "AttributeBack"];
// ATTRIBUTEUNKNOWN, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Html.AttributeUnknown].ForeColor = lexerColors[LexerType.HTML, "AttributeUnknownFore"];
scintilla.Styles[Style.Html.AttributeUnknown].BackColor = lexerColors[LexerType.HTML, "AttributeUnknownBack"];
// SGMLDEFAULT, fontStyle = 0, styleId = 21
scintilla.Styles[21].ForeColor = lexerColors[LexerType.HTML, "SGMDefaultFore"];
scintilla.Styles[21].BackColor = lexerColors[LexerType.HTML, "SGMDefaultBack"];
}
/// <summary>
/// Sets the PHP styles for a lexer.
/// </summary>
/// <param name="scintilla">A <see cref="Scintilla"/> class instance.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
public static void SetPhpStyles(Scintilla scintilla, LexerColors.LexerColors lexerColors)
{
// QUESTION MARK, fontStyle = 0, styleId = 18
scintilla.Styles[Style.Html.Question].ForeColor = lexerColors[LexerType.PHP, "HQuestionFore"];
scintilla.Styles[Style.Html.Question].BackColor = lexerColors[LexerType.PHP, "HQuestionBack"];
// DEFAULT, fontStyle = 0, styleId = 118
scintilla.Styles[Style.PhpScript.Default].ForeColor = lexerColors[LexerType.PHP, "DefaultFore"];
scintilla.Styles[Style.PhpScript.Default].BackColor = lexerColors[LexerType.PHP, "DefaultBack"];
// STRING, fontStyle = 0, styleId = 119
scintilla.Styles[Style.PhpScript.HString].ForeColor = lexerColors[LexerType.PHP, "HStringFore"];
scintilla.Styles[Style.PhpScript.HString].BackColor = lexerColors[LexerType.PHP, "HStringBack"];
// STRING VARIABLE, fontStyle = 1, styleId = 126
scintilla.Styles[Style.PhpScript.HStringVariable].Bold = true;
scintilla.Styles[Style.PhpScript.HStringVariable].ForeColor = lexerColors[LexerType.PHP, "HStringVariableFore"];
scintilla.Styles[Style.PhpScript.HStringVariable].BackColor = lexerColors[LexerType.PHP, "HStringVariableBack"];
// SIMPLESTRING, fontStyle = 0, styleId = 120
scintilla.Styles[Style.PhpScript.SimpleString].ForeColor = lexerColors[LexerType.PHP, "SimpleStringFore"];
scintilla.Styles[Style.PhpScript.SimpleString].BackColor = lexerColors[LexerType.PHP, "SimpleStringBack"];
// WORD, fontStyle = 1, styleId = 121
scintilla.Styles[Style.PhpScript.Word].Bold = true;
scintilla.Styles[Style.PhpScript.Word].ForeColor = lexerColors[LexerType.PHP, "WordFore"];
scintilla.Styles[Style.PhpScript.Word].BackColor = lexerColors[LexerType.PHP, "WordBack"];
// NUMBER, fontStyle = 0, styleId = 122
scintilla.Styles[Style.PhpScript.Number].ForeColor = lexerColors[LexerType.PHP, "NumberFore"];
scintilla.Styles[Style.PhpScript.Number].BackColor = lexerColors[LexerType.PHP, "NumberBack"];
// VARIABLE, fontStyle = 0, styleId = 123
scintilla.Styles[Style.PhpScript.Variable].ForeColor = lexerColors[LexerType.PHP, "VariableFore"];
scintilla.Styles[Style.PhpScript.Variable].BackColor = lexerColors[LexerType.PHP, "VariableBack"];
// COMMENT, fontStyle = 0, styleId = 124
scintilla.Styles[Style.PhpScript.Comment].ForeColor = lexerColors[LexerType.PHP, "CommentFore"];
scintilla.Styles[Style.PhpScript.Comment].BackColor = lexerColors[LexerType.PHP, "CommentBack"];
// COMMENTLINE, fontStyle = 0, styleId = 125
scintilla.Styles[Style.PhpScript.CommentLine].ForeColor = lexerColors[LexerType.PHP, "CommentLineFore"];
scintilla.Styles[Style.PhpScript.CommentLine].BackColor = lexerColors[LexerType.PHP, "CommentLineBack"];
// OPERATOR, fontStyle = 0, styleId = 127
scintilla.Styles[Style.PhpScript.Operator].ForeColor = lexerColors[LexerType.PHP, "OperatorFore"];
scintilla.Styles[Style.PhpScript.Operator].BackColor = lexerColors[LexerType.PHP, "OperatorBack"];
}
/// <summary>
/// Sets the JS styles for a lexer.
/// </summary>
/// <param name="scintilla">A <see cref="Scintilla"/> class instance.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
public static void SetJSStyles(Scintilla scintilla, LexerColors.LexerColors lexerColors)
{
//// DEFAULT, fontStyle = 0, styleId = 118
//scintilla.Styles[Style.JavaScript.Default].ForeColor = lexerColors[LexerType.PHP, "DefaultFore"];
//scintilla.Styles[Style.JavaScript.Default].BackColor = lexerColors[LexerType.PHP, "DefaultBack"];
//// WORD, fontStyle = 1, styleId = 121
//scintilla.Styles[Style.JavaScript.Word].Bold = true;
//scintilla.Styles[Style.JavaScript.Word].ForeColor = lexerColors[LexerType.PHP, "WordFore"];
//scintilla.Styles[Style.JavaScript.Word].BackColor = lexerColors[LexerType.PHP, "WordBack"];
// NUMBER, fontStyle = 0, styleId = 122
scintilla.Styles[Style.JavaScript.Number].Bold = true;
scintilla.Styles[Style.JavaScript.Number].ForeColor = lexerColors[LexerType.PHP, "NumberFore"];
scintilla.Styles[Style.JavaScript.Number].BackColor = lexerColors[LexerType.PHP, "NumberBack"];
// COMMENT, fontStyle = 0, styleId = 124
scintilla.Styles[Style.JavaScript.Comment].ForeColor = lexerColors[LexerType.PHP, "CommentFore"];
scintilla.Styles[Style.JavaScript.Comment].BackColor = lexerColors[LexerType.PHP, "CommentBack"];
// COMMENTLINE, fontStyle = 0, styleId = 125
scintilla.Styles[Style.JavaScript.CommentLine].ForeColor = lexerColors[LexerType.PHP, "CommentLineFore"];
scintilla.Styles[Style.JavaScript.CommentLine].BackColor = lexerColors[LexerType.PHP, "CommentLineBack"];
// OPERATOR, fontStyle = 0, styleId = 127
scintilla.Styles[Style.JavaScript.SingleString].ForeColor = lexerColors[LexerType.PHP, "SimpleStringFore"];
scintilla.Styles[Style.JavaScript.SingleString].BackColor = lexerColors[LexerType.PHP, "SimpleStringBack"];
// OPERATOR, fontStyle = 0, styleId = 127
scintilla.Styles[Style.JavaScript.Keyword].Bold = true;
scintilla.Styles[Style.JavaScript.Keyword].ForeColor =Color.Blue;
// OPERATOR, fontStyle = 0, styleId = 127
scintilla.Styles[Style.JavaScript.Regex].ForeColor = Color.Gray;
// OPERATOR, fontStyle = 0, styleId = 127
scintilla.Styles[Style.JavaScript.DoubleString].ForeColor = Color.FromArgb(172, 62, 145);
//scintilla.Styles[Style.JavaScript.Word].ForeColor = Color.Goldenrod;
// OPERATOR, fontStyle = 0, styleId = 127
// COMMENT DOC KEYWORD, fontStyle = 1, styleId = 17
}
/// <summary>
/// A helper method to be used with HTML including scripts.
/// </summary>
/// <param name="lexerType">Type of the lexer to embed into the HTML lexer.</param>
/// <param name="scintilla">An instance to a scintilla to which to append the script lexer.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
public static void SetScriptedHtml(LexerType lexerType, Scintilla scintilla, LexerColors.LexerColors lexerColors)
{
if (lexerType == LexerType.PHP || lexerType == LexerType.HTML)
{
SetHtmlStyles(scintilla, lexerColors);
if (lexerType == LexerType.PHP)
{
var keyWords1 =
ScintillaKeyWords.KeyWordList.FirstOrDefault(f => f.LexerType == LexerType.HTML);
var keyWords2 =
ScintillaKeyWords.KeyWordList.FirstOrDefault(f => f.LexerType == LexerType.PHP);
//var keyWords3 =
// ScintillaKeyWords.KeyWordList.FindAll(f => f.LexerType == LexerType.JavaScript);
//var text = "";
//for (int i = 0; i < keyWords3.Count; i++)
//{
// text += " "+keyWords3[i].KeyWords;
//}
if (keyWords1 != null && keyWords2 != null)
{
scintilla.SetKeywords(4, keyWords1.KeyWords+" "+ keyWords2.KeyWords);
}
ScintillaKeyWords.SetKeywords(scintilla, LexerType.JavaScript);
}
else if (lexerType == LexerType.HTML)
{
var keyWords =
ScintillaKeyWords.KeyWordList.FirstOrDefault(f => f.LexerType == LexerType.PHP);
if (keyWords != null)
{
scintilla.SetKeywords(4, keyWords.KeyWords);
}
}
LexerFoldProperties.SetScintillaProperties(scintilla, LexerFoldProperties.HyperTextFolding);
SetHtmlStyles(scintilla, lexerColors);
}
}
}
}
@@ -0,0 +1,143 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the C++ lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerCpp: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the C++ programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateCppLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// PREPROCESSOR, fontStyle = 0
scintilla.Styles[Style.Cpp.Preprocessor].ForeColor = lexerColors[LexerType.Cpp, "PreprocessorFore"];
scintilla.Styles[Style.Cpp.Preprocessor].BackColor = lexerColors[LexerType.Cpp, "PreprocessorBack"];
// DEFAULT, fontStyle = 0
scintilla.Styles[Style.Cpp.Default].ForeColor = lexerColors[LexerType.Cpp, "DefaultFore"];
scintilla.Styles[Style.Cpp.Default].BackColor = lexerColors[LexerType.Cpp, "DefaultBack"];
// INSTRUCTION WORD, fontStyle = 1
scintilla.Styles[Style.Cpp.Word].Bold = true;
scintilla.Styles[Style.Cpp.Word].ForeColor = lexerColors[LexerType.Cpp, "WordFore"];
scintilla.Styles[Style.Cpp.Word].BackColor = lexerColors[LexerType.Cpp, "WordBack"];
// TYPE WORD, fontStyle = 0
scintilla.Styles[Style.Cpp.Word2].ForeColor = lexerColors[LexerType.Cpp, "Word2Fore"];
scintilla.Styles[Style.Cpp.Word2].BackColor = lexerColors[LexerType.Cpp, "Word2Back"];
// NUMBER, fontStyle = 0
scintilla.Styles[Style.Cpp.Number].ForeColor = lexerColors[LexerType.Cpp, "NumberFore"];
scintilla.Styles[Style.Cpp.Number].BackColor = lexerColors[LexerType.Cpp, "NumberBack"];
// STRING, fontStyle = 0
scintilla.Styles[Style.Cpp.String].ForeColor = lexerColors[LexerType.Cpp, "StringFore"];
scintilla.Styles[Style.Cpp.String].BackColor = lexerColors[LexerType.Cpp, "StringBack"];
// CHARACTER, fontStyle = 0
scintilla.Styles[Style.Cpp.Character].ForeColor = lexerColors[LexerType.Cpp, "CharacterFore"];
scintilla.Styles[Style.Cpp.Character].BackColor = lexerColors[LexerType.Cpp, "CharacterBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[Style.Cpp.Operator].Bold = true;
scintilla.Styles[Style.Cpp.Operator].ForeColor = lexerColors[LexerType.Cpp, "OperatorFore"];
scintilla.Styles[Style.Cpp.Operator].BackColor = lexerColors[LexerType.Cpp, "OperatorBack"];
// VERBATIM, fontStyle = 0
scintilla.Styles[Style.Cpp.Verbatim].ForeColor = lexerColors[LexerType.Cpp, "VerbatimFore"];
scintilla.Styles[Style.Cpp.Verbatim].BackColor = lexerColors[LexerType.Cpp, "VerbatimBack"];
// REGEX, fontStyle = 1
scintilla.Styles[Style.Cpp.Regex].Bold = true;
scintilla.Styles[Style.Cpp.Regex].ForeColor = lexerColors[LexerType.Cpp, "RegexFore"];
scintilla.Styles[Style.Cpp.Regex].BackColor = lexerColors[LexerType.Cpp, "RegexBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Cpp.Comment].ForeColor = lexerColors[LexerType.Cpp, "CommentFore"];
scintilla.Styles[Style.Cpp.Comment].BackColor = lexerColors[LexerType.Cpp, "CommentBack"];
// COMMENT LINE, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentLine].ForeColor = lexerColors[LexerType.Cpp, "CommentLineFore"];
scintilla.Styles[Style.Cpp.CommentLine].BackColor = lexerColors[LexerType.Cpp, "CommentLineBack"];
// COMMENT DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentDoc].ForeColor = lexerColors[LexerType.Cpp, "CommentDocFore"];
scintilla.Styles[Style.Cpp.CommentDoc].BackColor = lexerColors[LexerType.Cpp, "CommentDocBack"];
// COMMENT LINE DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentLineDoc].ForeColor = lexerColors[LexerType.Cpp, "CommentLineDocFore"];
scintilla.Styles[Style.Cpp.CommentLineDoc].BackColor = lexerColors[LexerType.Cpp, "CommentLineDocBack"];
// COMMENT DOC KEYWORD, fontStyle = 1
scintilla.Styles[Style.Cpp.CommentDocKeyword].Bold = true;
scintilla.Styles[Style.Cpp.CommentDocKeyword].ForeColor =
lexerColors[LexerType.Cpp, "CommentDocKeywordFore"];
scintilla.Styles[Style.Cpp.CommentDocKeyword].BackColor =
lexerColors[LexerType.Cpp, "CommentDocKeywordBack"];
// COMMENT DOC KEYWORD ERROR, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentDocKeywordError].ForeColor =
lexerColors[LexerType.Cpp, "CommentDocKeywordErrorFore"];
scintilla.Styles[Style.Cpp.CommentDocKeywordError].BackColor =
lexerColors[LexerType.Cpp, "CommentDocKeywordErrorBack"];
// PREPROCESSOR COMMENT, fontStyle = 0
scintilla.Styles[Style.Cpp.PreprocessorComment].ForeColor =
lexerColors[LexerType.Cpp, "PreprocessorCommentFore"];
scintilla.Styles[Style.Cpp.PreprocessorComment].BackColor =
lexerColors[LexerType.Cpp, "PreprocessorCommentBack"];
// PREPROCESSOR COMMENT DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.PreprocessorCommentDoc].ForeColor =
lexerColors[LexerType.Cpp, "PreprocessorCommentDocFore"];
scintilla.Styles[Style.Cpp.PreprocessorCommentDoc].BackColor =
lexerColors[LexerType.Cpp, "PreprocessorCommentDocBack"];
scintilla.LexerName = "cpp";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Cpp);
if(foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,165 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the C# lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerCs: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the C# programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateCsLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors,bool foldOn=true)
{
ClearStyle(scintilla);
// PREPROCESSOR, fontStyle = 0
scintilla.Styles[Style.Cpp.Preprocessor].ForeColor =
lexerColors[LexerType.Cs, "PreprocessorFore"];
scintilla.Styles[Style.Cpp.Preprocessor].BackColor =
lexerColors[LexerType.Cs, "PreprocessorBack"];
// DEFAULT, fontStyle = 0
scintilla.Styles[Style.Cpp.Default].ForeColor =
lexerColors[LexerType.Cs, "DefaultFore"];
scintilla.Styles[Style.Cpp.Default].BackColor =
lexerColors[LexerType.Cs, "DefaultBack"];
// INSTRUCTION WORD, fontStyle = 1
scintilla.Styles[Style.Cpp.Word].Bold = true;
scintilla.Styles[Style.Cpp.Word].ForeColor = lexerColors[LexerType.Cs, "WordFore"];
scintilla.Styles[Style.Cpp.Word].BackColor = lexerColors[LexerType.Cs, "WordBack"];
// TYPE WORD, fontStyle = 0
scintilla.Styles[Style.Cpp.Word2].ForeColor = lexerColors[LexerType.Cs, "Word2Fore"];
scintilla.Styles[Style.Cpp.Word2].BackColor = lexerColors[LexerType.Cs, "Word2Back"];
// NUMBER, fontStyle = 0
scintilla.Styles[Style.Cpp.Number].ForeColor =
lexerColors[LexerType.Cs, "NumberFore"];
scintilla.Styles[Style.Cpp.Number].BackColor =
lexerColors[LexerType.Cs, "NumberBack"];
// STRING, fontStyle = 0
scintilla.Styles[Style.Cpp.String].ForeColor =
lexerColors[LexerType.Cs, "StringFore"];
scintilla.Styles[Style.Cpp.String].BackColor =
lexerColors[LexerType.Cs, "StringBack"];
// CHARACTER, fontStyle = 0
scintilla.Styles[Style.Cpp.Character].ForeColor =
lexerColors[LexerType.Cs, "CharacterFore"];
scintilla.Styles[Style.Cpp.Character].BackColor =
lexerColors[LexerType.Cs, "CharacterBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[Style.Cpp.Operator].Bold = true;
scintilla.Styles[Style.Cpp.Operator].ForeColor =
lexerColors[LexerType.Cs, "OperatorFore"];
scintilla.Styles[Style.Cpp.Operator].BackColor =
lexerColors[LexerType.Cs, "OperatorBack"];
// VERBATIM, fontStyle = 0
scintilla.Styles[Style.Cpp.Verbatim].ForeColor =
lexerColors[LexerType.Cs, "VerbatimFore"];
scintilla.Styles[Style.Cpp.Verbatim].BackColor =
lexerColors[LexerType.Cs, "VerbatimBack"];
// REGEX, fontStyle = 1
scintilla.Styles[Style.Cpp.Regex].Bold = true;
scintilla.Styles[Style.Cpp.Regex].ForeColor = lexerColors[LexerType.Cs, "RegexFore"];
scintilla.Styles[Style.Cpp.Regex].BackColor = lexerColors[LexerType.Cs, "RegexBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Cpp.Comment].ForeColor =
lexerColors[LexerType.Cs, "CommentFore"];
scintilla.Styles[Style.Cpp.Comment].BackColor =
lexerColors[LexerType.Cs, "CommentBack"];
// COMMENT LINE, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentLine].ForeColor =
lexerColors[LexerType.Cs, "CommentLineFore"];
scintilla.Styles[Style.Cpp.CommentLine].BackColor =
lexerColors[LexerType.Cs, "CommentLineBack"];
// COMMENT DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentDoc].ForeColor =
lexerColors[LexerType.Cs, "CommentDocFore"];
scintilla.Styles[Style.Cpp.CommentDoc].BackColor =
lexerColors[LexerType.Cs, "CommentDocBack"];
// COMMENT LINE DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentLineDoc].ForeColor =
lexerColors[LexerType.Cs, "CommentLineDocFore"];
scintilla.Styles[Style.Cpp.CommentLineDoc].BackColor =
lexerColors[LexerType.Cs, "CommentLineDocBack"];
// COMMENT DOC KEYWORD, fontStyle = 1
scintilla.Styles[Style.Cpp.CommentDocKeyword].Bold = true;
scintilla.Styles[Style.Cpp.CommentDocKeyword].ForeColor =
lexerColors[LexerType.Cs, "CommentDocKeywordFore"];
scintilla.Styles[Style.Cpp.CommentDocKeyword].BackColor =
lexerColors[LexerType.Cs, "CommentDocKeywordBack"];
// COMMENT DOC KEYWORD ERROR, fontStyle = 0
scintilla.Styles[Style.Cpp.CommentDocKeywordError].ForeColor =
lexerColors[LexerType.Cs, "CommentDocKeywordErrorFore"];
scintilla.Styles[Style.Cpp.CommentDocKeywordError].BackColor =
lexerColors[LexerType.Cs, "CommentDocKeywordErrorBack"];
// PREPROCESSOR COMMENT, fontStyle = 0
scintilla.Styles[Style.Cpp.PreprocessorComment].ForeColor =
lexerColors[LexerType.Cs, "PreprocessorCommentFore"];
scintilla.Styles[Style.Cpp.PreprocessorComment].BackColor =
lexerColors[LexerType.Cs, "PreprocessorCommentBack"];
// PREPROCESSOR COMMENT DOC, fontStyle = 0
scintilla.Styles[Style.Cpp.PreprocessorCommentDoc].ForeColor =
lexerColors[LexerType.Cs, "PreprocessorCommentDocFore"];
scintilla.Styles[Style.Cpp.PreprocessorCommentDoc].BackColor =
lexerColors[LexerType.Cs, "PreprocessorCommentDocBack"];
scintilla.LexerName = "cpp";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Cs);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,112 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
class CreateLexerCss: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Cascading Style Sheets (CSS).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateCssLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0, styleId = 0
scintilla.Styles[Style.Css.Default].ForeColor = lexerColors[LexerType.Css, "DefaultFore"];
scintilla.Styles[Style.Css.Default].BackColor = lexerColors[LexerType.Css, "DefaultBack"];
// TAG, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Css.Tag].ForeColor = lexerColors[LexerType.Css, "TagFore"];
scintilla.Styles[Style.Css.Tag].BackColor = lexerColors[LexerType.Css, "TagBack"];
// CLASS, fontStyle = 0, styleId = 2
scintilla.Styles[Style.Css.Class].ForeColor = lexerColors[LexerType.Css, "ClassFore"];
scintilla.Styles[Style.Css.Class].BackColor = lexerColors[LexerType.Css, "ClassBack"];
// PSEUDOCLASS, fontStyle = 1, styleId = 3
scintilla.Styles[Style.Css.PseudoClass].Bold = true;
scintilla.Styles[Style.Css.PseudoClass].ForeColor = lexerColors[LexerType.Css, "PseudoClassFore"];
scintilla.Styles[Style.Css.PseudoClass].BackColor = lexerColors[LexerType.Css, "PseudoClassBack"];
// UNKNOWN_PSEUDOCLASS, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Css.UnknownPseudoClass].ForeColor = lexerColors[LexerType.Css, "UnknownPseudoClassFore"];
scintilla.Styles[Style.Css.UnknownPseudoClass].BackColor = lexerColors[LexerType.Css, "UnknownPseudoClassBack"];
// OPERATOR, fontStyle = 1, styleId = 5
scintilla.Styles[Style.Css.Operator].Bold = true;
scintilla.Styles[Style.Css.Operator].ForeColor = lexerColors[LexerType.Css, "OperatorFore"];
scintilla.Styles[Style.Css.Operator].BackColor = lexerColors[LexerType.Css, "OperatorBack"];
// IDENTIFIER, fontStyle = 1, styleId = 6
scintilla.Styles[Style.Css.Identifier].Bold = true;
scintilla.Styles[Style.Css.Identifier].ForeColor = lexerColors[LexerType.Css, "IdentifierFore"];
scintilla.Styles[Style.Css.Identifier].BackColor = lexerColors[LexerType.Css, "IdentifierBack"];
// UNKNOWN_IDENTIFIER, fontStyle = 0, styleId = 7
scintilla.Styles[Style.Css.UnknownIdentifier].ForeColor = lexerColors[LexerType.Css, "UnknownIdentifierFore"];
scintilla.Styles[Style.Css.UnknownIdentifier].BackColor = lexerColors[LexerType.Css, "UnknownIdentifierBack"];
// VALUE, fontStyle = 1, styleId = 8
scintilla.Styles[Style.Css.Value].Bold = true;
scintilla.Styles[Style.Css.Value].ForeColor = lexerColors[LexerType.Css, "ValueFore"];
scintilla.Styles[Style.Css.Value].BackColor = lexerColors[LexerType.Css, "ValueBack"];
// COMMENT, fontStyle = 0, styleId = 9
scintilla.Styles[Style.Css.Comment].ForeColor = lexerColors[LexerType.Css, "CommentFore"];
scintilla.Styles[Style.Css.Comment].BackColor = lexerColors[LexerType.Css, "CommentBack"];
// ID, fontStyle = 1, styleId = 10
scintilla.Styles[Style.Css.Id].Bold = true;
scintilla.Styles[Style.Css.Id].ForeColor = lexerColors[LexerType.Css, "IdFore"];
scintilla.Styles[Style.Css.Id].BackColor = lexerColors[LexerType.Css, "IdBack"];
// IMPORTANT, fontStyle = 1, styleId = 11
scintilla.Styles[Style.Css.Important].Bold = true;
scintilla.Styles[Style.Css.Important].ForeColor = lexerColors[LexerType.Css, "ImportantFore"];
scintilla.Styles[Style.Css.Important].BackColor = lexerColors[LexerType.Css, "ImportantBack"];
// DIRECTIVE, fontStyle = 0, styleId = 12
scintilla.Styles[Style.Css.Directive].ForeColor = lexerColors[LexerType.Css, "DirectiveFore"];
scintilla.Styles[Style.Css.Directive].BackColor = lexerColors[LexerType.Css, "DirectiveBack"];
scintilla.LexerName = "css";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Css);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,65 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the HTML lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
class CreateLexerHtml: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the HTML (Hypertext Markup Language).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateHtmlLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
// HTML should be simple but the embedded scripts make it hard for lexical "analysis"..
ClearStyle(scintilla);
//..therefore the weird logic.. (which might malfunction)..
SetHtmlStyles(scintilla, lexerColors);
SetPhpStyles(scintilla, lexerColors);
scintilla.LexerName = "hypertext";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.HTML);
SetScriptedHtml(LexerType.HTML, scintilla, lexerColors);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,78 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the INI lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerIni: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the INI (properties file).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateIniLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0, styleId = 0
scintilla.Styles[Style.Properties.Default].ForeColor = lexerColors[LexerType.INI, "DefaultFore"];
scintilla.Styles[Style.Properties.Default].BackColor = lexerColors[LexerType.INI, "DefaultBack"];
// COMMENT, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Properties.Comment].ForeColor = lexerColors[LexerType.INI, "CommentFore"];
scintilla.Styles[Style.Properties.Comment].BackColor = lexerColors[LexerType.INI, "CommentBack"];
// SECTION, fontStyle = 1, styleId = 2
scintilla.Styles[Style.Properties.Section].Bold = true;
scintilla.Styles[Style.Properties.Section].ForeColor = lexerColors[LexerType.INI, "SectionFore"];
scintilla.Styles[Style.Properties.Section].BackColor = lexerColors[LexerType.INI, "SectionBack"];
// ASSIGNMENT, fontStyle = 1, styleId = 3
scintilla.Styles[Style.Properties.Assignment].Bold = true;
scintilla.Styles[Style.Properties.Assignment].ForeColor = lexerColors[LexerType.INI, "AssignmentFore"];
scintilla.Styles[Style.Properties.Assignment].BackColor = lexerColors[LexerType.INI, "AssignmentBack"];
// DEFVAL, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Properties.DefVal].ForeColor = lexerColors[LexerType.INI, "DefValFore"];
scintilla.Styles[Style.Properties.DefVal].BackColor = lexerColors[LexerType.INI, "DefValBack"];
scintilla.LexerName = "props";
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,213 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
// ReSharper disable once CommentTypo
/// <summary>
/// Constants for the InnoSetup script language.
/// </summary>
// ReSharper disable once IdentifierTypo
public static class InnoSetup
{
///
/// Summary:
/// Default style index.
public const int Default = 0;
///
/// Summary:
/// Identifier style index.
public const int Identifier = 1;
///
/// Summary:
/// Comment style '{' index.
public const int Comment = 2;
///
/// Summary:
/// Comment style 2 "(*" index.
public const int Comment2 = 3;
///
/// Summary:
/// Comment line style "//" index.
public const int CommentLine = 4;
///
/// Summary:
/// Preprocessor style "{$" index.
public const int Preprocessor = 5;
///
/// Summary:
/// Preprocessor style 2 "(*$" index.
public const int Preprocessor2 = 6;
///
/// Summary:
/// Number style index.
public const int Number = 7;
///
/// Summary:
/// Hexadecimal number style index.
public const int HexNumber = 8;
///
/// Summary:
/// Word (keyword set 0) style index.
public const int Word = 9;
///
/// Summary:
/// Double-quoted string style index.
public const int String = 10;
///
/// Summary:
/// Unclosed string EOL style index.
public const int StringEol = 11;
///
/// Summary:
/// Single-quoted string style index.
public const int Character = 12;
///
/// Summary:
/// Operator style index.
public const int Operator = 13;
///
/// Summary:
/// Assembly style index.
public const int Asm = 14;
}
// ReSharper disable once CommentTypo
/// <summary>
/// A class for the InnoSetup lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
// ReSharper disable once IdentifierTypo
public class CreateLexerInnoSetup: CreateLexerCommon
{
// ReSharper disable once CommentTypo
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the InnoSetup programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
// ReSharper disable once IdentifierTypo
public static bool CreateInnoSetupLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0
scintilla.Styles[InnoSetup.Default].ForeColor = lexerColors[LexerType.InnoSetup, "DefaultFore"];
scintilla.Styles[InnoSetup.Default].BackColor = lexerColors[LexerType.InnoSetup, "DefaultBack"];
// IDENTIFIER, fontStyle = 0
scintilla.Styles[InnoSetup.Identifier].ForeColor = lexerColors[LexerType.InnoSetup, "IdentifierFore"];
scintilla.Styles[InnoSetup.Identifier].BackColor = lexerColors[LexerType.InnoSetup, "IdentifierBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[InnoSetup.Comment].ForeColor = lexerColors[LexerType.InnoSetup, "CommentFore"];
scintilla.Styles[InnoSetup.Comment].BackColor = lexerColors[LexerType.InnoSetup, "CommentBack"];
// COMMENT LINE, fontStyle = 0
scintilla.Styles[InnoSetup.Comment2].ForeColor = lexerColors[LexerType.InnoSetup, "Comment2Fore"];
scintilla.Styles[InnoSetup.Comment2].BackColor = lexerColors[LexerType.InnoSetup, "Comment2Back"];
// COMMENT DOC, fontStyle = 0
scintilla.Styles[InnoSetup.CommentLine].ForeColor = lexerColors[LexerType.InnoSetup, "CommentLineFore"];
scintilla.Styles[InnoSetup.CommentLine].BackColor = lexerColors[LexerType.InnoSetup, "CommentLineBack"];
// PREPROCESSOR, fontStyle = 0
scintilla.Styles[InnoSetup.Preprocessor].ForeColor = lexerColors[LexerType.InnoSetup, "PreprocessorFore"];
scintilla.Styles[InnoSetup.Preprocessor].BackColor = lexerColors[LexerType.InnoSetup, "PreprocessorBack"];
// PREPROCESSOR2, fontStyle = 0
scintilla.Styles[InnoSetup.Preprocessor2].ForeColor = lexerColors[LexerType.InnoSetup, "Preprocessor2Fore"];
scintilla.Styles[InnoSetup.Preprocessor2].BackColor = lexerColors[LexerType.InnoSetup, "Preprocessor2Back"];
// NUMBER, fontStyle = 0
scintilla.Styles[InnoSetup.Number].ForeColor = lexerColors[LexerType.InnoSetup, "NumberFore"];
scintilla.Styles[InnoSetup.Number].BackColor = lexerColors[LexerType.InnoSetup, "NumberBack"];
// HEX NUMBER, fontStyle = 0
scintilla.Styles[InnoSetup.HexNumber].ForeColor = lexerColors[LexerType.InnoSetup, "HexNumberFore"];
scintilla.Styles[InnoSetup.HexNumber].BackColor = lexerColors[LexerType.InnoSetup, "HexNumberBack"];
// INSTRUCTION WORD, fontStyle = 1
scintilla.Styles[InnoSetup.Word].Bold = true;
scintilla.Styles[InnoSetup.Word].ForeColor = lexerColors[LexerType.InnoSetup, "WordFore"];
scintilla.Styles[InnoSetup.Word].BackColor = lexerColors[LexerType.InnoSetup, "WordBack"];
// STRING, fontStyle = 0
scintilla.Styles[InnoSetup.String].ForeColor = lexerColors[LexerType.InnoSetup, "StringFore"];
scintilla.Styles[InnoSetup.String].BackColor = lexerColors[LexerType.InnoSetup, "StringBack"];
// CHARACTER, fontStyle = 0
scintilla.Styles[InnoSetup.Character].ForeColor = lexerColors[LexerType.InnoSetup, "CharacterFore"];
scintilla.Styles[InnoSetup.Character].BackColor = lexerColors[LexerType.InnoSetup, "CharacterBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[InnoSetup.Operator].Bold = true;
scintilla.Styles[InnoSetup.Operator].ForeColor = lexerColors[LexerType.InnoSetup, "OperatorFore"];
scintilla.Styles[InnoSetup.Operator].BackColor = lexerColors[LexerType.InnoSetup, "OperatorBack"];
// ASM, fontStyle = 1
scintilla.Styles[InnoSetup.Asm].Bold = true;
scintilla.Styles[InnoSetup.Asm].ForeColor = lexerColors[LexerType.InnoSetup, "ForeColorFore"];
scintilla.Styles[InnoSetup.Asm].BackColor = lexerColors[LexerType.InnoSetup, "ForeColorBack"];
scintilla.LexerName = "inno";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.InnoSetup);
if (foldOn)
AddFolding(scintilla);
return true;
}
/// <summary>
/// Creates a color value of a given integer containing an RGB color value.
/// </summary>
/// <param name="rgb">The RGB color value.</param>
/// <returns>System.Drawing.Color.</returns>
public static System.Drawing.Color IntToColor(int rgb)
{
return System.Drawing.Color.FromArgb(255, (byte)(rgb >> 16), (byte)(rgb >> 8), (byte)rgb);
}
}
}
@@ -0,0 +1,126 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Java lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerJava : CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Java programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateJavaLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// PREPROCESSOR, fontStyle = 0, styleId = 9
scintilla.Styles[Style.Cpp.Preprocessor].ForeColor = lexerColors[LexerType.Java, "PreprocessorFore"];
scintilla.Styles[Style.Cpp.Preprocessor].BackColor = lexerColors[LexerType.Java, "PreprocessorBack"];
// Style.Cpp.Identifier ?, Style.Cpp.Default = 0..
// DEFAULT, fontStyle = 0, styleId = 11
scintilla.Styles[Style.Cpp.Default].ForeColor = lexerColors[LexerType.Java, "DefaultFore"];
scintilla.Styles[Style.Cpp.Default].BackColor = lexerColors[LexerType.Java, "DefaultBack"];
// INSTRUCTION WORD, fontStyle = 1, styleId = 5
scintilla.Styles[Style.Cpp.Word].Bold = true;
scintilla.Styles[Style.Cpp.Word].ForeColor = lexerColors[LexerType.Java, "InstructionWordFore"];
scintilla.Styles[Style.Cpp.Word].BackColor = lexerColors[LexerType.Java, "InstructionWordBack"];
// TYPE WORD, fontStyle = 0, styleId = 16
scintilla.Styles[Style.Cpp.Word2].ForeColor = lexerColors[LexerType.Java, "TypeWordFore"];
scintilla.Styles[Style.Cpp.Word2].BackColor = lexerColors[LexerType.Java, "TypeWordBack"];
// NUMBER, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Cpp.Number].ForeColor = lexerColors[LexerType.Java, "NumberFore"];
scintilla.Styles[Style.Cpp.Number].BackColor = lexerColors[LexerType.Java, "NumberBack"];
// STRING, fontStyle = 0, styleId = 6
scintilla.Styles[Style.Cpp.String].ForeColor = lexerColors[LexerType.Java, "StringFore"];
scintilla.Styles[Style.Cpp.String].BackColor = lexerColors[LexerType.Java, "StringBack"];
// CHARACTER, fontStyle = 0, styleId = 7
scintilla.Styles[Style.Cpp.Character].ForeColor = lexerColors[LexerType.Java, "CharacterFore"];
scintilla.Styles[Style.Cpp.Character].BackColor = lexerColors[LexerType.Java, "CharacterBack"];
// OPERATOR, fontStyle = 1, styleId = 10
scintilla.Styles[Style.Cpp.Operator].Bold = true;
scintilla.Styles[Style.Cpp.Operator].ForeColor = lexerColors[LexerType.Java, "OperatorFore"];
scintilla.Styles[Style.Cpp.Operator].BackColor = lexerColors[LexerType.Java, "OperatorBack"];
// VERBATIM, fontStyle = 0, styleId = 13
scintilla.Styles[Style.Cpp.Verbatim].ForeColor = lexerColors[LexerType.Java, "VerbatimFore"];
scintilla.Styles[Style.Cpp.Verbatim].BackColor = lexerColors[LexerType.Java, "VerbatimBack"];
// REGEX, fontStyle = 1, styleId = 14
scintilla.Styles[Style.Cpp.Regex].Bold = true;
scintilla.Styles[Style.Cpp.Regex].ForeColor = lexerColors[LexerType.Java, "RegexFore"];
scintilla.Styles[Style.Cpp.Regex].BackColor = lexerColors[LexerType.Java, "RegexBack"];
// COMMENT, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Cpp.Comment].ForeColor = lexerColors[LexerType.Java, "CommentFore"];
scintilla.Styles[Style.Cpp.Comment].BackColor = lexerColors[LexerType.Java, "CommentBack"];
// COMMENT LINE, fontStyle = 0, styleId = 2
scintilla.Styles[Style.Cpp.CommentLine].ForeColor = lexerColors[LexerType.Java, "CommentLineFore"];
scintilla.Styles[Style.Cpp.CommentLine].BackColor = lexerColors[LexerType.Java, "CommentLineBack"];
// COMMENT DOC, fontStyle = 0, styleId = 3
scintilla.Styles[Style.Cpp.CommentDoc].ForeColor = lexerColors[LexerType.Java, "CommentDocFore"];
scintilla.Styles[Style.Cpp.CommentDoc].BackColor = lexerColors[LexerType.Java, "CommentDocBack"];
// COMMENT LINE DOC, fontStyle = 0, styleId = 15
scintilla.Styles[Style.Cpp.CommentLineDoc].ForeColor = lexerColors[LexerType.Java, "CommentLineDocFore"];
scintilla.Styles[Style.Cpp.CommentLineDoc].BackColor = lexerColors[LexerType.Java, "CommentLineDocBack"];
// COMMENT DOC KEYWORD, fontStyle = 1, styleId = 17
scintilla.Styles[Style.Cpp.CommentDocKeyword].Bold = true;
scintilla.Styles[Style.Cpp.CommentDocKeyword].ForeColor = lexerColors[LexerType.Java, "CommentDocKeywordFore"];
scintilla.Styles[Style.Cpp.CommentDocKeyword].BackColor = lexerColors[LexerType.Java, "CommentDocKeywordBack"];
// COMMENT DOC KEYWORD ERROR, fontStyle = 0, styleId = 18
scintilla.Styles[Style.Cpp.CommentDocKeywordError].ForeColor = lexerColors[LexerType.Java, "CommentDocKeywordErrorFore"];
scintilla.Styles[Style.Cpp.CommentDocKeywordError].BackColor = lexerColors[LexerType.Java, "CommentDocKeywordErrorBack"];
scintilla.LexerName = "cpp";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Java);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,127 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
class CreateLexerJavaScript: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Java programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateJavaScriptLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// 11 ?, Style.Cpp.Default = 0..
// DEFAULT, fontStyle = 0, styleId = 11
scintilla.Styles[Style.Cpp.Default].ForeColor = lexerColors[LexerType.JavaScript, "DefaultFore"];
scintilla.Styles[Style.Cpp.Default].BackColor = lexerColors[LexerType.JavaScript, "DefaultBack"];
// TODO::From here onward!!
// INSTRUCTION WORD, fontStyle = 1, styleId = 5
scintilla.Styles[Style.Cpp.Word].Bold = true;
scintilla.Styles[Style.Cpp.Word].ForeColor = lexerColors[LexerType.JavaScript, "InstructionWordFore"];
scintilla.Styles[Style.Cpp.Word].BackColor = lexerColors[LexerType.JavaScript, "InstructionWordBack"];
// TYPE WORD, fontStyle = 0, styleId = 16
scintilla.Styles[Style.Cpp.Word2].ForeColor = lexerColors[LexerType.JavaScript, "TypeWordFore"];
scintilla.Styles[Style.Cpp.Word2].BackColor = lexerColors[LexerType.JavaScript, "TypeWordBack"];
// WINDOW INSTRUCTION, fontStyle = 1, styleId = 19
scintilla.Styles[Style.Cpp.GlobalClass].Bold = true;
scintilla.Styles[Style.Cpp.GlobalClass].ForeColor = lexerColors[LexerType.JavaScript, "WindowInstructionFore"];
scintilla.Styles[Style.Cpp.GlobalClass].BackColor = lexerColors[LexerType.JavaScript, "WindowInstructionBack"];
// NUMBER, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Cpp.Number].ForeColor = lexerColors[LexerType.JavaScript, "NumberFore"];
scintilla.Styles[Style.Cpp.Number].BackColor = lexerColors[LexerType.JavaScript, "NumberBack"];
// STRING, fontStyle = 0, styleId = 6
scintilla.Styles[Style.Cpp.String].ForeColor = lexerColors[LexerType.JavaScript, "StringFore"];
scintilla.Styles[Style.Cpp.String].BackColor = lexerColors[LexerType.JavaScript, "StringBack"];
// STRINGRAW, fontStyle = 0, styleId = 20
scintilla.Styles[Style.Cpp.StringRaw].ForeColor = lexerColors[LexerType.JavaScript, "StringRawFore"];
scintilla.Styles[Style.Cpp.StringRaw].BackColor = lexerColors[LexerType.JavaScript, "StringRawBack"];
// CHARACTER, fontStyle = 0, styleId = 7
scintilla.Styles[Style.Cpp.Character].ForeColor = lexerColors[LexerType.JavaScript, "CharacterFore"];
scintilla.Styles[Style.Cpp.Character].BackColor = lexerColors[LexerType.JavaScript, "CharacterBack"];
// OPERATOR, fontStyle = 1, styleId = 10
scintilla.Styles[Style.Cpp.Operator].Bold = true;
scintilla.Styles[Style.Cpp.Operator].ForeColor = lexerColors[LexerType.JavaScript, "OperatorFore"];
scintilla.Styles[Style.Cpp.Operator].BackColor = lexerColors[LexerType.JavaScript, "OperatorBack"];
// VERBATIM, fontStyle = 0, styleId = 13
scintilla.Styles[Style.Cpp.Verbatim].ForeColor = lexerColors[LexerType.JavaScript, "VerbatimFore"];
scintilla.Styles[Style.Cpp.Verbatim].BackColor = lexerColors[LexerType.JavaScript, "VerbatimBack"];
// REGEX, fontStyle = 1, styleId = 14
scintilla.Styles[Style.Cpp.Regex].Bold = true;
scintilla.Styles[Style.Cpp.Regex].ForeColor = lexerColors[LexerType.JavaScript, "RegexFore"];
scintilla.Styles[Style.Cpp.Regex].BackColor = lexerColors[LexerType.JavaScript, "RegexBack"];
// COMMENT, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Cpp.Comment].ForeColor = lexerColors[LexerType.JavaScript, "CommentFore"];
scintilla.Styles[Style.Cpp.Comment].BackColor = lexerColors[LexerType.JavaScript, "CommentBack"];
// COMMENT LINE, fontStyle = 0, styleId = 2
scintilla.Styles[Style.Cpp.CommentLine].ForeColor = lexerColors[LexerType.JavaScript, "CommentLineFore"];
scintilla.Styles[Style.Cpp.CommentLine].BackColor = lexerColors[LexerType.JavaScript, "CommentLineBack"];
// COMMENT DOC, fontStyle = 0, styleId = 3
scintilla.Styles[Style.Cpp.CommentDoc].ForeColor = lexerColors[LexerType.JavaScript, "CommentDocFore"];
scintilla.Styles[Style.Cpp.CommentDoc].BackColor = lexerColors[LexerType.JavaScript, "CommentDocBack"];
// COMMENT LINE DOC, fontStyle = 0, styleId = 15
scintilla.Styles[Style.Cpp.CommentLineDoc].ForeColor = lexerColors[LexerType.JavaScript, "CommentLineDocFore"];
scintilla.Styles[Style.Cpp.CommentLineDoc].BackColor = lexerColors[LexerType.JavaScript, "CommentLineDocBack"];
// COMMENT DOC KEYWORD, fontStyle = 1, styleId = 17
scintilla.Styles[Style.Cpp.CommentDocKeyword].Bold = true;
scintilla.Styles[Style.Cpp.CommentDocKeyword].ForeColor = lexerColors[LexerType.JavaScript, "CommentDocKeywordFore"];
scintilla.Styles[Style.Cpp.CommentDocKeyword].BackColor = lexerColors[LexerType.JavaScript, "CommentDocKeywordBack"];
// COMMENT DOC KEYWORD ERROR, fontStyle = 0, styleId = 18
scintilla.Styles[Style.Cpp.CommentDocKeywordError].ForeColor = lexerColors[LexerType.JavaScript, "CommentDocKeywordErrorFore"];
scintilla.Styles[Style.Cpp.CommentDocKeywordError].BackColor = lexerColors[LexerType.JavaScript, "CommentDocKeywordErrorBack"];
scintilla.LexerName = "cpp";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.JavaScript);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,122 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the YAML lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerJson: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the YAML (YAML Ain't Markup Language).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateJsonLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT
scintilla.Styles[Style.Json.Default].ForeColor = lexerColors[LexerType.Json, "JsonDefaultFore"];
scintilla.Styles[Style.Json.Default].BackColor = lexerColors[LexerType.Json, "JsonDefaultBack"];
// NUMBER
scintilla.Styles[Style.Json.Number].ForeColor = lexerColors[LexerType.Json, "JsonNumberFore"];
scintilla.Styles[Style.Json.Number].BackColor = lexerColors[LexerType.Json, "JsonNumberBack"];
// STRING
scintilla.Styles[Style.Json.String].ForeColor = lexerColors[LexerType.Json, "JsonStringFore"];
scintilla.Styles[Style.Json.String].BackColor = lexerColors[LexerType.Json, "JsonStringBack"];
// UNCLOSED STRING
scintilla.Styles[Style.Json.StringEol].ForeColor = lexerColors[LexerType.Json, "JsonUnclosedStringFore"];
scintilla.Styles[Style.Json.StringEol].BackColor = lexerColors[LexerType.Json, "JsonUnclosedStringBack"];
// PROPERTY
scintilla.Styles[Style.Json.PropertyName].ForeColor = lexerColors[LexerType.Json, "JsonPropertyFore"];
scintilla.Styles[Style.Json.PropertyName].BackColor = lexerColors[LexerType.Json, "JsonPropertyBack"];
// ESCAPE SEQUENCE
scintilla.Styles[Style.Json.LineComment].ForeColor = lexerColors[LexerType.Json, "JsonEscapeSequenceFore"];
scintilla.Styles[Style.Json.LineComment].BackColor = lexerColors[LexerType.Json, "JsonEscapeSequenceBack"];
// LINE COMMENT
scintilla.Styles[Style.Json.LineComment].ForeColor = lexerColors[LexerType.Json, "JsonLineCommentFore"];
scintilla.Styles[Style.Json.LineComment].BackColor = lexerColors[LexerType.Json, "JsonLineCommentBack"];
scintilla.Styles[Style.Json.LineComment].Italic = true;
// BLOCK COMMENT
scintilla.Styles[Style.Json.BlockComment].ForeColor = lexerColors[LexerType.Json, "JsonBlockCommentFore"];
scintilla.Styles[Style.Json.BlockComment].BackColor = lexerColors[LexerType.Json, "JsonBlockCommentBack"];
// OPERATOR
scintilla.Styles[Style.Json.Operator].ForeColor = lexerColors[LexerType.Json, "JsonOperatorFore"];
scintilla.Styles[Style.Json.Operator].BackColor = lexerColors[LexerType.Json, "JsonOperatorBack"];
// URL/IRI
scintilla.Styles[Style.Json.Uri].ForeColor = lexerColors[LexerType.Json, "JsonUriFore"];
scintilla.Styles[Style.Json.Uri].BackColor = lexerColors[LexerType.Json, "JsonUriBack"];
// JSON-LD COMPACT IRI
scintilla.Styles[Style.Json.CompactIRI].ForeColor = lexerColors[LexerType.Json, "JsonCompactIRIFore"];
scintilla.Styles[Style.Json.CompactIRI].BackColor = lexerColors[LexerType.Json, "JsonCompactIRIBack"];
// JSON KEYWORD
scintilla.Styles[Style.Json.Keyword].ForeColor = lexerColors[LexerType.Json, "JsonKeywordFore"];
scintilla.Styles[Style.Json.Keyword].BackColor = lexerColors[LexerType.Json, "JsonKeywordBack"];
// JSON-LD KEYWORD
scintilla.Styles[Style.Json.LdKeyword].ForeColor = lexerColors[LexerType.Json, "JsonLdKeywordFore"];
scintilla.Styles[Style.Json.LdKeyword].BackColor = lexerColors[LexerType.Json, "JsonLdKeywordBack"];
// PARSING ERROR
scintilla.Styles[Style.Json.LdKeyword].ForeColor = lexerColors[LexerType.Json, "JsonErrorFore"];
scintilla.Styles[Style.Json.LdKeyword].BackColor = lexerColors[LexerType.Json, "JsonErrorBack"];
scintilla.LexerName = "json";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Json);
scintilla.SetProperty("lexer.json.allow.comments", "1");
scintilla.SetProperty("lexer.json.escape.sequence", "1");
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,163 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the NSIS lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerNsis: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the NSIS (Nullsoft Scriptable Install System).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateNsisLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// NSIS not found..
#region NSIS_CONSTANTS
const int SCE_NSIS_DEFAULT = 0;
const int SCE_NSIS_COMMENT = 1;
const int SCE_NSIS_STRINGDQ = 2;
const int SCE_NSIS_STRINGLQ = 3;
const int SCE_NSIS_STRINGRQ = 4;
const int SCE_NSIS_FUNCTION = 5;
const int SCE_NSIS_VARIABLE = 6;
const int SCE_NSIS_LABEL = 7;
const int SCE_NSIS_USERDEFINED = 8;
const int SCE_NSIS_SECTIONDEF = 9;
const int SCE_NSIS_SUBSECTIONDEF = 10;
const int SCE_NSIS_IFDEFINEDEF = 11;
const int SCE_NSIS_MACRODEF = 12;
const int SCE_NSIS_STRINGVAR = 13;
const int SCE_NSIS_NUMBER = 14;
const int SCE_NSIS_SECTIONGROUP = 15;
const int SCE_NSIS_PAGEEX = 16;
const int SCE_NSIS_FUNCTIONDEF = 17;
const int SCE_NSIS_COMMENTBOX = 18;
#endregion
// DEFAULT, fontStyle = 0
scintilla.Styles[SCE_NSIS_DEFAULT].ForeColor = lexerColors[LexerType.Nsis, "DefaultFore"];
scintilla.Styles[SCE_NSIS_DEFAULT].BackColor = lexerColors[LexerType.Nsis, "DefaultBack"];
// COMMENTLINE, fontStyle = 0
scintilla.Styles[SCE_NSIS_COMMENT].ForeColor = lexerColors[LexerType.Nsis, "CommentFore"];
scintilla.Styles[SCE_NSIS_COMMENT].BackColor = lexerColors[LexerType.Nsis, "CommentBack"];
// STRING DOUBLE QUOTE, fontStyle = 0
scintilla.Styles[SCE_NSIS_STRINGDQ].ForeColor = lexerColors[LexerType.Nsis, "StringDoubleQuoteFore"];
scintilla.Styles[SCE_NSIS_STRINGDQ].BackColor = lexerColors[LexerType.Nsis, "StringDoubleQuoteBack"];
// STRING LEFT QUOTE, fontStyle = 0
scintilla.Styles[SCE_NSIS_STRINGLQ].ForeColor = lexerColors[LexerType.Nsis, "StringLeftQuoteFore"];
scintilla.Styles[SCE_NSIS_STRINGLQ].BackColor = lexerColors[LexerType.Nsis, "StringLeftQuoteBack"];
// STRING RIGHT QUOTE, fontStyle = 0
scintilla.Styles[SCE_NSIS_STRINGRQ].ForeColor = lexerColors[LexerType.Nsis, "StringRightQuoteFore"];
scintilla.Styles[SCE_NSIS_STRINGRQ].BackColor = lexerColors[LexerType.Nsis, "StringRightQuoteBack"];
// FUNCTION, fontStyle = 0
scintilla.Styles[SCE_NSIS_FUNCTION].ForeColor = lexerColors[LexerType.Nsis, "FunctionFore"];
scintilla.Styles[SCE_NSIS_FUNCTION].BackColor = lexerColors[LexerType.Nsis, "FunctionBack"];
// VARIABLE, fontStyle = 0
scintilla.Styles[SCE_NSIS_VARIABLE].ForeColor = lexerColors[LexerType.Nsis, "VariableFore"];
scintilla.Styles[SCE_NSIS_VARIABLE].BackColor = lexerColors[LexerType.Nsis, "VariableBack"];
// LABEL, fontStyle = 0
scintilla.Styles[SCE_NSIS_LABEL].ForeColor = lexerColors[LexerType.Nsis, "LabelFore"];
scintilla.Styles[SCE_NSIS_LABEL].BackColor = lexerColors[LexerType.Nsis, "LabelBack"];
// USER DEFINED, fontStyle = 4
scintilla.Styles[SCE_NSIS_USERDEFINED].ForeColor = lexerColors[LexerType.Nsis, "UserDefinedFore"];
scintilla.Styles[SCE_NSIS_USERDEFINED].BackColor = lexerColors[LexerType.Nsis, "UserDefinedBack"];
// SECTION, fontStyle = 1
scintilla.Styles[SCE_NSIS_SECTIONDEF].Bold = true;
scintilla.Styles[SCE_NSIS_SECTIONDEF].ForeColor = lexerColors[LexerType.Nsis, "SectionFore"];
scintilla.Styles[SCE_NSIS_SECTIONDEF].BackColor = lexerColors[LexerType.Nsis, "SectionBack"];
// SUBSECTION, fontStyle = 1
scintilla.Styles[SCE_NSIS_SUBSECTIONDEF].Bold = true;
scintilla.Styles[SCE_NSIS_SUBSECTIONDEF].ForeColor = lexerColors[LexerType.Nsis, "SubSectionFore"];
scintilla.Styles[SCE_NSIS_SUBSECTIONDEF].BackColor = lexerColors[LexerType.Nsis, "SubSectionBack"];
// IF DEFINE, fontStyle = 0
scintilla.Styles[SCE_NSIS_IFDEFINEDEF].ForeColor = lexerColors[LexerType.Nsis, "IfDefineFore"];
scintilla.Styles[SCE_NSIS_IFDEFINEDEF].BackColor = lexerColors[LexerType.Nsis, "IfDefineBack"];
// MACRO, fontStyle = 1
scintilla.Styles[SCE_NSIS_MACRODEF].Bold = true;
scintilla.Styles[SCE_NSIS_MACRODEF].ForeColor = lexerColors[LexerType.Nsis, "MacroFore"];
scintilla.Styles[SCE_NSIS_MACRODEF].BackColor = lexerColors[LexerType.Nsis, "MacroBack"];
// STRING VAR, fontStyle = 0
scintilla.Styles[SCE_NSIS_STRINGVAR].ForeColor = lexerColors[LexerType.Nsis, "StringVarFore"];
scintilla.Styles[SCE_NSIS_STRINGVAR].BackColor = lexerColors[LexerType.Nsis, "StringVarBack"];
// NUMBER, fontStyle = 0
scintilla.Styles[SCE_NSIS_NUMBER].ForeColor = lexerColors[LexerType.Nsis, "NumberFore"];
scintilla.Styles[SCE_NSIS_NUMBER].BackColor = lexerColors[LexerType.Nsis, "NumberBack"];
// SECTION GROUP, fontStyle = 1
scintilla.Styles[SCE_NSIS_SECTIONGROUP].Bold = true;
scintilla.Styles[SCE_NSIS_SECTIONGROUP].ForeColor = lexerColors[LexerType.Nsis, "SectionGroupFore"];
scintilla.Styles[SCE_NSIS_SECTIONGROUP].BackColor = lexerColors[LexerType.Nsis, "SectionGroupBack"];
// PAGE EX, fontStyle = 1
scintilla.Styles[SCE_NSIS_PAGEEX].Bold = true;
scintilla.Styles[SCE_NSIS_PAGEEX].ForeColor = lexerColors[LexerType.Nsis, "PageExFore"];
scintilla.Styles[SCE_NSIS_PAGEEX].BackColor = lexerColors[LexerType.Nsis, "PageExBack"];
// FUNCTION DEFINITIONS, fontStyle = 1
scintilla.Styles[SCE_NSIS_FUNCTIONDEF].Bold = true;
scintilla.Styles[SCE_NSIS_FUNCTIONDEF].ForeColor = lexerColors[LexerType.Nsis, "FunctionDefinitionsFore"];
scintilla.Styles[SCE_NSIS_FUNCTIONDEF].BackColor = lexerColors[LexerType.Nsis, "FunctionDefinitionsBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[SCE_NSIS_COMMENTBOX].ForeColor = lexerColors[LexerType.Nsis, "CommentFore"];
scintilla.Styles[SCE_NSIS_COMMENTBOX].BackColor = lexerColors[LexerType.Nsis, "CommentBack"];
scintilla.LexerName = "nsis";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Nsis);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,50 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for plain text.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
class CreateLexerNull: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for a plain text file.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateNullLexer(Scintilla scintilla)
{
ClearStyle(scintilla);
scintilla.LexerName = "null";
return true;
}
}
}
@@ -0,0 +1,117 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Pascal lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerPascal: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Pascal programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreatePascalLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0
scintilla.Styles[Style.Pascal.Default].ForeColor = lexerColors[LexerType.Pascal, "DefaultFore"];
scintilla.Styles[Style.Pascal.Default].BackColor = lexerColors[LexerType.Pascal, "DefaultBack"];
// IDENTIFIER, fontStyle = 0
scintilla.Styles[Style.Pascal.Identifier].ForeColor = lexerColors[LexerType.Pascal, "IdentifierFore"];
scintilla.Styles[Style.Pascal.Identifier].BackColor = lexerColors[LexerType.Pascal, "IdentifierBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Pascal.Comment].ForeColor = lexerColors[LexerType.Pascal, "CommentFore"];
scintilla.Styles[Style.Pascal.Comment].BackColor = lexerColors[LexerType.Pascal, "CommentBack"];
// COMMENT LINE, fontStyle = 0
scintilla.Styles[Style.Pascal.Comment2].ForeColor = lexerColors[LexerType.Pascal, "Comment2Fore"];
scintilla.Styles[Style.Pascal.Comment2].BackColor = lexerColors[LexerType.Pascal, "Comment2Back"];
// COMMENT DOC, fontStyle = 0
scintilla.Styles[Style.Pascal.CommentLine].ForeColor = lexerColors[LexerType.Pascal, "CommentLineFore"];
scintilla.Styles[Style.Pascal.CommentLine].BackColor = lexerColors[LexerType.Pascal, "CommentLineBack"];
// PREPROCESSOR, fontStyle = 0
scintilla.Styles[Style.Pascal.Preprocessor].ForeColor = lexerColors[LexerType.Pascal, "PreprocessorFore"];
scintilla.Styles[Style.Pascal.Preprocessor].BackColor = lexerColors[LexerType.Pascal, "PreprocessorBack"];
// PREPROCESSOR2, fontStyle = 0
scintilla.Styles[Style.Pascal.Preprocessor2].ForeColor = lexerColors[LexerType.Pascal, "Preprocessor2Fore"];
scintilla.Styles[Style.Pascal.Preprocessor2].BackColor = lexerColors[LexerType.Pascal, "Preprocessor2Back"];
// NUMBER, fontStyle = 0
scintilla.Styles[Style.Pascal.Number].ForeColor = lexerColors[LexerType.Pascal, "NumberFore"];
scintilla.Styles[Style.Pascal.Number].BackColor = lexerColors[LexerType.Pascal, "NumberBack"];
// HEX NUMBER, fontStyle = 0
scintilla.Styles[Style.Pascal.HexNumber].ForeColor = lexerColors[LexerType.Pascal, "HexNumberFore"];
scintilla.Styles[Style.Pascal.HexNumber].BackColor = lexerColors[LexerType.Pascal, "HexNumberBack"];
// INSTRUCTION WORD, fontStyle = 1
scintilla.Styles[Style.Pascal.Word].Bold = true;
scintilla.Styles[Style.Pascal.Word].ForeColor = lexerColors[LexerType.Pascal, "WordFore"];
scintilla.Styles[Style.Pascal.Word].BackColor = lexerColors[LexerType.Pascal, "WordBack"];
// STRING, fontStyle = 0
scintilla.Styles[Style.Pascal.String].ForeColor = lexerColors[LexerType.Pascal, "StringFore"];
scintilla.Styles[Style.Pascal.String].BackColor = lexerColors[LexerType.Pascal, "StringBack"];
// CHARACTER, fontStyle = 0
scintilla.Styles[Style.Pascal.Character].ForeColor = lexerColors[LexerType.Pascal, "CharacterFore"];
scintilla.Styles[Style.Pascal.Character].BackColor = lexerColors[LexerType.Pascal, "CharacterBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[Style.Pascal.Operator].Bold = true;
scintilla.Styles[Style.Pascal.Operator].ForeColor = lexerColors[LexerType.Pascal, "OperatorFore"];
scintilla.Styles[Style.Pascal.Operator].BackColor = lexerColors[LexerType.Pascal, "OperatorBack"];
// ASM, fontStyle = 1
scintilla.Styles[Style.Pascal.Asm].Bold = true;
scintilla.Styles[Style.Pascal.Asm].ForeColor = lexerColors[LexerType.Pascal, "ForeColorFore"];
scintilla.Styles[Style.Pascal.Asm].BackColor = lexerColors[LexerType.Pascal, "ForeColorBack"];
scintilla.LexerName = "pascal";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Pascal);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,78 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the PHP lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerPhp: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the PHP programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreatePhpLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
//ClearStyle(scintilla);
////..therefore the weird logic.. (which might malfunction)..
//SetPhpStyles(scintilla, lexerColors);
//SetHtmlStyles(scintilla, lexerColors);
//scintilla.LexerName = "phpscript";
////ScintillaKeyWords.SetKeywords(scintilla, LexerType.PHP);
//SetScriptedHtml(LexerType.PHP, scintilla, lexerColors);
//if (foldOn)
// AddFolding(scintilla);
//return true;
ClearStyle(scintilla);
//..therefore the weird logic.. (which might malfunction)..
SetHtmlStyles(scintilla, lexerColors);
SetPhpStyles(scintilla, lexerColors);
SetJSStyles(scintilla, lexerColors);
scintilla.LexerName = "hypertext";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.HTML);
SetScriptedHtml(LexerType.HTML, scintilla, lexerColors);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,146 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Windows PowerShell lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerPowerShell: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Windows PowerShell script language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreatePowerShellLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0, styleId = 0
scintilla.Styles[Style.PowerShell.Default].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "DefaultFore"];
scintilla.Styles[Style.PowerShell.Default].BackColor =
lexerColors[LexerType.WindowsPowerShell, "DefaultBack"];
// COMMENT, fontStyle = 0, styleId = 1
scintilla.Styles[Style.PowerShell.Comment].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "CommentFore"];
scintilla.Styles[Style.PowerShell.Comment].BackColor =
lexerColors[LexerType.WindowsPowerShell, "CommentBack"];
// STRING, fontStyle = 0, styleId = 2
scintilla.Styles[Style.PowerShell.String].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "StringFore"];
scintilla.Styles[Style.PowerShell.String].BackColor =
lexerColors[LexerType.WindowsPowerShell, "StringBack"];
// CHARACTER, fontStyle = 0, styleId = 3
scintilla.Styles[Style.PowerShell.Character].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "CharacterFore"];
scintilla.Styles[Style.PowerShell.Character].BackColor =
lexerColors[LexerType.WindowsPowerShell, "CharacterBack"];
// NUMBER, fontStyle = 0, styleId = 4
scintilla.Styles[Style.PowerShell.Number].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "NumberFore"];
scintilla.Styles[Style.PowerShell.Number].BackColor =
lexerColors[LexerType.WindowsPowerShell, "NumberBack"];
// VARIABLE, fontStyle = 1, styleId = 5
scintilla.Styles[Style.PowerShell.Variable].Bold = true;
scintilla.Styles[Style.PowerShell.Variable].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "VariableFore"];
scintilla.Styles[Style.PowerShell.Variable].BackColor =
lexerColors[LexerType.WindowsPowerShell, "VariableBack"];
// OPERATOR, fontStyle = 1, styleId = 6
scintilla.Styles[Style.PowerShell.Operator].Bold = true;
scintilla.Styles[Style.PowerShell.Operator].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "OperatorFore"];
scintilla.Styles[Style.PowerShell.Operator].BackColor =
lexerColors[LexerType.WindowsPowerShell, "OperatorBack"];
// INSTRUCTION WORD, fontStyle = 1, styleId = 8
scintilla.Styles[Style.PowerShell.Keyword].Bold = true;
scintilla.Styles[Style.PowerShell.Keyword].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "InstructionWordFore"];
scintilla.Styles[Style.PowerShell.Keyword].BackColor =
lexerColors[LexerType.WindowsPowerShell, "InstructionWordBack"];
// CMDLET, fontStyle = 0, styleId = 9
scintilla.Styles[Style.PowerShell.Cmdlet].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "CommandletFore"];
scintilla.Styles[Style.PowerShell.Cmdlet].BackColor =
lexerColors[LexerType.WindowsPowerShell, "CommandletBack"];
// ALIAS, fontStyle = 0, styleId = 10
scintilla.Styles[Style.PowerShell.Alias].ForeColor = lexerColors[LexerType.WindowsPowerShell, "AliasFore"];
scintilla.Styles[Style.PowerShell.Alias].BackColor = lexerColors[LexerType.WindowsPowerShell, "AliasBack"];
// COMMENT STREAM, fontStyle = 0, styleId = 13
scintilla.Styles[Style.PowerShell.CommentStream].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "CommentStreamFore"];
scintilla.Styles[Style.PowerShell.CommentStream].BackColor =
lexerColors[LexerType.WindowsPowerShell, "CommentStreamBack"];
// HERE STRING, fontStyle = 0, styleId = 14
scintilla.Styles[Style.PowerShell.HereString].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "HereStringFore"];
scintilla.Styles[Style.PowerShell.HereString].BackColor =
lexerColors[LexerType.WindowsPowerShell, "HereStringBack"];
// HERE CHARACTER, fontStyle = 0, styleId = 15
scintilla.Styles[Style.PowerShell.HereCharacter].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "HereCharacterFore"];
scintilla.Styles[Style.PowerShell.HereCharacter].BackColor =
lexerColors[LexerType.WindowsPowerShell, "HereCharacterBack"];
// COMMENT DOC KEYWORD, fontStyle = 1, styleId = 16
scintilla.Styles[Style.PowerShell.CommentDocKeyword].Bold = true;
scintilla.Styles[Style.PowerShell.CommentDocKeyword].ForeColor =
lexerColors[LexerType.WindowsPowerShell, "CommentDocKeywordFore"];
scintilla.Styles[Style.PowerShell.CommentDocKeyword].BackColor =
lexerColors[LexerType.WindowsPowerShell, "CommentDocKeywordBack"];
ScintillaKeyWords.SetKeywords(scintilla, LexerType.WindowsPowerShell);
scintilla.LexerName = "powershell";
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,120 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Python lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerPython: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Python programming language.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreatePythonLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0, styleId = 0
scintilla.Styles[Style.Python.Default].ForeColor = lexerColors[LexerType.Python, "DefaultFore"];
scintilla.Styles[Style.Python.Default].BackColor = lexerColors[LexerType.Python, "DefaultBack"];
// COMMENTLINE, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Python.CommentLine].ForeColor = lexerColors[LexerType.Python, "CommentLineFore"];
scintilla.Styles[Style.Python.CommentLine].BackColor = lexerColors[LexerType.Python, "CommentLineBack"];
// NUMBER, fontStyle = 0, styleId = 2
scintilla.Styles[Style.Python.Number].ForeColor = lexerColors[LexerType.Python, "NumberFore"];
scintilla.Styles[Style.Python.Number].BackColor = lexerColors[LexerType.Python, "NumberBack"];
// STRING, fontStyle = 0, styleId = 3
scintilla.Styles[Style.Python.String].ForeColor = lexerColors[LexerType.Python, "StringFore"];
scintilla.Styles[Style.Python.String].BackColor = lexerColors[LexerType.Python, "StringBack"];
// CHARACTER, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Python.Character].ForeColor = lexerColors[LexerType.Python, "CharacterFore"];
scintilla.Styles[Style.Python.Character].BackColor = lexerColors[LexerType.Python, "CharacterBack"];
// KEYWORDS, fontStyle = 1, styleId = 5
scintilla.Styles[Style.Python.Word].Bold = true;
scintilla.Styles[Style.Python.Word].ForeColor = lexerColors[LexerType.Python, "WordFore"];
scintilla.Styles[Style.Python.Word].BackColor = lexerColors[LexerType.Python, "WordBack"];
// TRIPLE, fontStyle = 0, styleId = 6
scintilla.Styles[Style.Python.Triple].ForeColor = lexerColors[LexerType.Python, "TripleFore"];
scintilla.Styles[Style.Python.Triple].BackColor = lexerColors[LexerType.Python, "TripleBack"];
// TRIPLEDOUBLE, fontStyle = 0, styleId = 7
scintilla.Styles[Style.Python.TripleDouble].ForeColor = lexerColors[LexerType.Python, "TripleDoubleFore"];
scintilla.Styles[Style.Python.TripleDouble].BackColor = lexerColors[LexerType.Python, "TripleDoubleBack"];
// CLASSNAME, fontStyle = 1, styleId = 8
scintilla.Styles[Style.Python.ClassName].Bold = true;
scintilla.Styles[Style.Python.ClassName].ForeColor = lexerColors[LexerType.Python, "ClassNameFore"];
scintilla.Styles[Style.Python.ClassName].BackColor = lexerColors[LexerType.Python, "ClassNameBack"];
// DEFNAME, fontStyle = 0, styleId = 9
scintilla.Styles[Style.Python.DefName].ForeColor = lexerColors[LexerType.Python, "DefNameFore"];
scintilla.Styles[Style.Python.DefName].BackColor = lexerColors[LexerType.Python, "DefNameBack"];
// OPERATOR, fontStyle = 1, styleId = 10
scintilla.Styles[Style.Python.Operator].Bold = true;
scintilla.Styles[Style.Python.Operator].ForeColor = lexerColors[LexerType.Python, "OperatorFore"];
scintilla.Styles[Style.Python.Operator].BackColor = lexerColors[LexerType.Python, "OperatorBack"];
// IDENTIFIER, fontStyle = 0, styleId = 11
scintilla.Styles[Style.Python.Identifier].ForeColor = lexerColors[LexerType.Python, "IdentifierFore"];
scintilla.Styles[Style.Python.Identifier].BackColor = lexerColors[LexerType.Python, "IdentifierBack"];
// COMMENTBLOCK, fontStyle = 0, styleId = 12
scintilla.Styles[Style.Python.CommentBlock].ForeColor = lexerColors[LexerType.Python, "CommentBlockFore"];
scintilla.Styles[Style.Python.CommentBlock].BackColor = lexerColors[LexerType.Python, "CommentBlockBack"];
// DECORATOR, fontStyle = 2, styleId = 15
scintilla.Styles[Style.Python.Decorator].Italic = true;
scintilla.Styles[Style.Python.Decorator].ForeColor = lexerColors[LexerType.Python, "DecoratorFore"];
scintilla.Styles[Style.Python.Decorator].BackColor = lexerColors[LexerType.Python, "DecoratorBack"];
scintilla.LexerName = "python";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.Python);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,97 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the SQL lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerSql: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the Structured Query Language (SQL).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateSqlLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// KEYWORD, fontStyle = 1
scintilla.Styles[Style.Sql.Word].Bold = true;
scintilla.Styles[Style.Sql.Word].ForeColor = lexerColors[LexerType.SQL, "WordFore"];
scintilla.Styles[Style.Sql.Word].BackColor = lexerColors[LexerType.SQL, "WordBack"];
// NUMBER, fontStyle = 0
scintilla.Styles[Style.Sql.Number].ForeColor = lexerColors[LexerType.SQL, "NumberFore"];
scintilla.Styles[Style.Sql.Number].BackColor = lexerColors[LexerType.SQL, "NumberBack"];
// STRING, fontStyle = 0
scintilla.Styles[Style.Sql.String].ForeColor = lexerColors[LexerType.SQL, "StringFore"];
scintilla.Styles[Style.Sql.String].BackColor = lexerColors[LexerType.SQL, "StringBack"];
// STRING2, fontStyle = 0
scintilla.Styles[Style.Sql.Character].ForeColor =
lexerColors[LexerType.SQL, "CharacterFore"];
scintilla.Styles[Style.Sql.Character].BackColor =
lexerColors[LexerType.SQL, "CharacterBack"];
// OPERATOR, fontStyle = 1
scintilla.Styles[Style.Sql.Operator].Bold = true;
scintilla.Styles[Style.Sql.Operator].ForeColor =
lexerColors[LexerType.SQL, "OperatorFore"];
scintilla.Styles[Style.Sql.Operator].BackColor =
lexerColors[LexerType.SQL, "OperatorBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Sql.Comment].ForeColor = lexerColors[LexerType.SQL, "CommentFore"];
scintilla.Styles[Style.Sql.Comment].BackColor = lexerColors[LexerType.SQL, "CommentBack"];
// COMMENT LINE, fontStyle = 0
scintilla.Styles[Style.Sql.CommentLine].ForeColor =
lexerColors[LexerType.SQL, "CommentLineFore"];
scintilla.Styles[Style.Sql.CommentLine].BackColor =
lexerColors[LexerType.SQL, "CommentLineBack"];
scintilla.LexerName = "sql";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.SQL);
LexerFoldProperties.SetScintillaProperties(scintilla, LexerFoldProperties.SqlFolding);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,96 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the Batch lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerVb: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the batch script file.
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateVbLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// DEFAULT, fontStyle = 0, styleId = 7
scintilla.Styles[Style.Vb.Default].ForeColor = lexerColors[LexerType.VbDotNet, "DefaultFore"];
scintilla.Styles[Style.Vb.Default].BackColor = lexerColors[LexerType.VbDotNet, "DefaultBack"];
// COMMENT, fontStyle = 0, styleId = 1
scintilla.Styles[Style.Vb.Comment].ForeColor = lexerColors[LexerType.VbDotNet, "CommentFore"];
scintilla.Styles[Style.Vb.Comment].BackColor = lexerColors[LexerType.VbDotNet, "CommentBack"];
// NUMBER, fontStyle = 1, styleId = 2
scintilla.Styles[Style.Vb.Number].Bold = true;
scintilla.Styles[Style.Vb.Number].ForeColor = lexerColors[LexerType.VbDotNet, "NumberFore"];
scintilla.Styles[Style.Vb.Number].BackColor = lexerColors[LexerType.VbDotNet, "NumberBack"];
// WORD, fontStyle = 0, styleId = 3
scintilla.Styles[Style.Vb.Keyword].ForeColor = lexerColors[LexerType.VbDotNet, "WordFore"];
scintilla.Styles[Style.Vb.Keyword].BackColor = lexerColors[LexerType.VbDotNet, "WordBack"];
// WORD2, fontStyle = 0, styleId = 10
scintilla.Styles[Style.Vb.Keyword2].ForeColor = lexerColors[LexerType.VbDotNet, "Word2Fore"];
scintilla.Styles[Style.Vb.Keyword2].BackColor = lexerColors[LexerType.VbDotNet, "Word2Back"];
// STRING, fontStyle = 0, styleId = 4
scintilla.Styles[Style.Vb.String].ForeColor = lexerColors[LexerType.VbDotNet, "StringFore"];
scintilla.Styles[Style.Vb.String].BackColor = lexerColors[LexerType.VbDotNet, "StringBack"];
// PREPROCESSOR, fontStyle = 0, styleId = 5
scintilla.Styles[Style.Vb.Preprocessor].ForeColor = lexerColors[LexerType.VbDotNet, "PreprocessorFore"];
scintilla.Styles[Style.Vb.Preprocessor].BackColor = lexerColors[LexerType.VbDotNet, "PreprocessorBack"];
// OPERATOR, fontStyle = 1, styleId = 6
scintilla.Styles[Style.Vb.Operator].Bold = true;
scintilla.Styles[Style.Vb.Operator].ForeColor = lexerColors[LexerType.VbDotNet, "OperatorFore"];
scintilla.Styles[Style.Vb.Operator].BackColor = lexerColors[LexerType.VbDotNet, "OperatorBack"];
// DATE, fontStyle = 0, styleId = 8
scintilla.Styles[Style.Vb.Date].ForeColor = lexerColors[LexerType.VbDotNet, "DateFore"];
scintilla.Styles[Style.Vb.Date].BackColor = lexerColors[LexerType.VbDotNet, "DateBack"];
scintilla.LexerName = "vb";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.VbDotNet);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,135 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using ScintillaNET;
using VPKSoft.ScintillaLexers.LexerColors;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the XML lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerXml: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the XML (The eXtensible Markup Language).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateXmlLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
// XMLSTART, fontStyle = 0
scintilla.Styles[Style.Xml.XmlStart].ForeColor =
lexerColors[LexerType.Xml, "XmlStartFore"];
scintilla.Styles[Style.Xml.XmlStart].BackColor =
lexerColors[LexerType.Xml, "XmlStartBack"];
// XMLEND, fontStyle = 0
scintilla.Styles[Style.Xml.XmlEnd].ForeColor = lexerColors[LexerType.Xml, "XmlEndFore"];
scintilla.Styles[Style.Xml.XmlEnd].BackColor = lexerColors[LexerType.Xml, "XmlEndBack"];
// DEFAULT, fontStyle = 1
scintilla.Styles[Style.Xml.Default].Bold = true;
scintilla.Styles[Style.Xml.Default].ForeColor = lexerColors[LexerType.Xml, "DefaultFore"];
scintilla.Styles[Style.Xml.Default].BackColor = lexerColors[LexerType.Xml, "DefaultBack"];
// COMMENT, fontStyle = 0
scintilla.Styles[Style.Xml.Comment].ForeColor = lexerColors[LexerType.Xml, "CommentFore"];
scintilla.Styles[Style.Xml.Comment].BackColor = lexerColors[LexerType.Xml, "CommentBack"];
// NUMBER, fontStyle = 0
scintilla.Styles[Style.Xml.Number].ForeColor = lexerColors[LexerType.Xml, "NumberFore"];
scintilla.Styles[Style.Xml.Number].BackColor = lexerColors[LexerType.Xml, "NumberBack"];
// DOUBLESTRING, fontStyle = 1
scintilla.Styles[Style.Xml.DoubleString].Bold = true;
scintilla.Styles[Style.Xml.DoubleString].ForeColor =
lexerColors[LexerType.Xml, "DoubleStringFore"];
scintilla.Styles[Style.Xml.DoubleString].BackColor =
lexerColors[LexerType.Xml, "DoubleStringBack"];
// SINGLESTRING, fontStyle = 1
scintilla.Styles[Style.Xml.SingleString].Bold = true;
scintilla.Styles[Style.Xml.SingleString].ForeColor =
lexerColors[LexerType.Xml, "SingleStringFore"];
scintilla.Styles[Style.Xml.SingleString].BackColor =
lexerColors[LexerType.Xml, "SingleStringBack"];
// TAG, fontStyle = 0
scintilla.Styles[Style.Xml.Tag].ForeColor = lexerColors[LexerType.Xml, "TagFore"];
scintilla.Styles[Style.Xml.Tag].BackColor = lexerColors[LexerType.Xml, "TagBack"];
// TAGEND, fontStyle = 0
scintilla.Styles[Style.Xml.TagEnd].ForeColor = lexerColors[LexerType.Xml, "TagEndFore"];
scintilla.Styles[Style.Xml.TagEnd].BackColor = lexerColors[LexerType.Xml, "TagEndBack"];
// TAGUNKNOWN, fontStyle = 0
scintilla.Styles[Style.Xml.TagUnknown].ForeColor =
lexerColors[LexerType.Xml, "TagUnknownFore"];
scintilla.Styles[Style.Xml.TagUnknown].BackColor =
lexerColors[LexerType.Xml, "TagUnknownBack"];
// ATTRIBUTE, fontStyle = 0
scintilla.Styles[Style.Xml.Attribute].ForeColor =
lexerColors[LexerType.Xml, "AttributeFore"];
scintilla.Styles[Style.Xml.Attribute].BackColor =
lexerColors[LexerType.Xml, "AttributeBack"];
// ATTRIBUTEUNKNOWN, fontStyle = 0
scintilla.Styles[Style.Xml.AttributeUnknown].ForeColor =
lexerColors[LexerType.Xml, "AttributeUnknownFore"];
scintilla.Styles[Style.Xml.AttributeUnknown].BackColor =
lexerColors[LexerType.Xml, "AttributeUnknownBack"];
// SGMLDEFAULT, fontStyle = 0
scintilla.Styles[21].ForeColor = lexerColors[LexerType.Xml, "SgmlDefaultFore"];
scintilla.Styles[21].BackColor = lexerColors[LexerType.Xml, "SgmlDefaultBack"];
// CDATA, fontStyle = 0
scintilla.Styles[Style.Xml.CData].ForeColor = lexerColors[LexerType.Xml, "CDataFore"];
scintilla.Styles[Style.Xml.CData].BackColor = lexerColors[LexerType.Xml, "CDataBack"];
// ENTITY, fontStyle = 2
scintilla.Styles[Style.Xml.Entity].Italic = true;
scintilla.Styles[Style.Xml.Entity].ForeColor = lexerColors[LexerType.Xml, "EntityFore"];
scintilla.Styles[Style.Xml.Entity].BackColor = lexerColors[LexerType.Xml, "EntityBack"];
scintilla.LexerName = "xml";
// folding for a XML lexer..
LexerFoldProperties.SetScintillaProperties(scintilla, LexerFoldProperties.XmlFolding);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,120 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ScintillaNET;
using VPKSoft.ScintillaLexers.HelperClasses;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class for the YAML lexer.
/// Implements the <see cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
/// </summary>
/// <seealso cref="VPKSoft.ScintillaLexers.CreateSpecificLexer.CreateLexerCommon" />
public class CreateLexerYaml: CreateLexerCommon
{
/// <summary>
/// Creates the lexer for a given Scintilla class instance for the YAML (YAML Ain't Markup Language).
/// </summary>
/// <param name="scintilla">A Scintilla class instance to set the lexer style for.</param>
/// <param name="lexerColors">A <see cref="LexerColors"/> class instance for the lexer coloring.</param>
/// <returns>True if the operation was successful; otherwise false.</returns>
public static bool CreateYamlLexer(Scintilla scintilla, LexerColors.LexerColors lexerColors, bool foldOn = true)
{
ClearStyle(scintilla);
#region YAML_CONSTANTS
const int SCE_YAML_DEFAULT = 0;
const int SCE_YAML_COMMENT = 1;
const int SCE_YAML_IDENTIFIER = 2;
const int SCE_YAML_KEYWORD = 3;
const int SCE_YAML_NUMBER = 4;
const int SCE_YAML_REFERENCE = 5;
const int SCE_YAML_DOCUMENT = 6;
const int SCE_YAML_TEXT = 7;
const int SCE_YAML_ERROR = 8;
const int SCE_YAML_OPERATOR = 9;
#endregion
// DEFAULT, fontStyle = 0
scintilla.Styles[SCE_YAML_DEFAULT].ForeColor = lexerColors[LexerType.YAML, "YamlDefaultFore"];
scintilla.Styles[SCE_YAML_DEFAULT].BackColor = lexerColors[LexerType.YAML, "YamlDefaultBack"];
// COMMENT, fontStyle = 1
scintilla.Styles[SCE_YAML_COMMENT].ForeColor = lexerColors[LexerType.YAML, "CommentFore"];
scintilla.Styles[SCE_YAML_COMMENT].BackColor = lexerColors[LexerType.YAML, "CommentBack"];
// IDENTIFIER, fontStyle = 2
scintilla.Styles[SCE_YAML_IDENTIFIER].Bold = true;
scintilla.Styles[SCE_YAML_IDENTIFIER].ForeColor = lexerColors[LexerType.YAML, "IdentifierFore"];
scintilla.Styles[SCE_YAML_IDENTIFIER].BackColor = lexerColors[LexerType.YAML, "IdentifierBack"];
// KEYWORD, fontStyle = 3
scintilla.Styles[SCE_YAML_KEYWORD].Bold = true;
scintilla.Styles[SCE_YAML_KEYWORD].ForeColor = lexerColors[LexerType.YAML, "KeywordFore"];
scintilla.Styles[SCE_YAML_KEYWORD].BackColor = lexerColors[LexerType.YAML, "KeywordBack"];
// NUMBER, fontStyle = 4
scintilla.Styles[SCE_YAML_NUMBER].ForeColor = lexerColors[LexerType.YAML, "NumberFore"];
scintilla.Styles[SCE_YAML_NUMBER].BackColor = lexerColors[LexerType.YAML, "NumberBack"];
// REFERENCE, fontStyle = 5
scintilla.Styles[SCE_YAML_REFERENCE].ForeColor = lexerColors[LexerType.YAML, "ReferenceFore"];
scintilla.Styles[SCE_YAML_REFERENCE].BackColor = lexerColors[LexerType.YAML, "ReferenceBack"];
// DOCUMENT, fontStyle = 6
scintilla.Styles[SCE_YAML_DOCUMENT].ForeColor = lexerColors[LexerType.YAML, "DocumentFore"];
scintilla.Styles[SCE_YAML_DOCUMENT].BackColor = lexerColors[LexerType.YAML, "DocumentBack"];
// TEXT, fontStyle = 7
scintilla.Styles[SCE_YAML_TEXT].Bold = true;
scintilla.Styles[SCE_YAML_TEXT].ForeColor = lexerColors[LexerType.YAML, "TextFore"];
scintilla.Styles[SCE_YAML_TEXT].BackColor = lexerColors[LexerType.YAML, "TextBack"];
// ERROR, fontStyle = 8
scintilla.Styles[SCE_YAML_ERROR].ForeColor = lexerColors[LexerType.YAML, "ErrorFore"];
scintilla.Styles[SCE_YAML_ERROR].BackColor = lexerColors[LexerType.YAML, "ErrorBack"];
// OPERATOR, fontStyle = 9
scintilla.Styles[SCE_YAML_OPERATOR].ForeColor = lexerColors[LexerType.YAML, "OperatorFore"];
scintilla.Styles[SCE_YAML_OPERATOR].BackColor = lexerColors[LexerType.YAML, "OperatorBack"];
scintilla.LexerName = "yaml";
ScintillaKeyWords.SetKeywords(scintilla, LexerType.YAML);
if (foldOn)
AddFolding(scintilla);
return true;
}
}
}
@@ -0,0 +1,134 @@
#region License
/*
MIT License
Copyright(c) 2020 Petteri Kautonen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#endregion
using System.Collections.Generic;
using ScintillaNET;
using static VPKSoft.ScintillaLexers.LexerEnumerations;
namespace VPKSoft.ScintillaLexers.CreateSpecificLexer
{
/// <summary>
/// A class containing code folding properties for different lexers.
/// </summary>
public class LexerFoldProperties
{
/// <summary>
/// Gets or sets the name of the fold property.
/// </summary>
/// <value>The name of the fold property.</value>
public string FoldPropertyName { get; set; }
/// <summary>
/// Gets or sets the fold property value.
/// </summary>
/// <value>The fold property value.</value>
public string FoldPropertyValue { get; set; }
/// <summary>
/// Gets or sets the default folding properties for all lexers.
/// </summary>
public static List<LexerFoldProperties> DefaultFolding { get; set; } = new List<LexerFoldProperties>(new[]
{
new LexerFoldProperties {FoldPropertyName = "fold", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "fold.compact", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "fold.preprocessor", FoldPropertyValue = "1"},
});
/// <summary>
/// Gets or sets the additional folding properties for the XML (eXtensible Markup Language) lexer.
/// </summary>
public static List<LexerFoldProperties> XmlFolding { get; set; } = new List<LexerFoldProperties>(new[]
{
new LexerFoldProperties {FoldPropertyName = "fold.html", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "html.tags.case.sensitive", FoldPropertyValue = "1"},
});
/// <summary>
/// Gets or sets the additional folding properties for the SQL (Structured Query Language) lexer.
/// </summary>
public static List<LexerFoldProperties> SqlFolding { get; set; } = new List<LexerFoldProperties>(new[]
{
new LexerFoldProperties {FoldPropertyName = "fold.sql.at.else", FoldPropertyValue = "1"}, // for a SQL lexer..
new LexerFoldProperties {FoldPropertyName = "fold.comment", FoldPropertyValue = "1"}, // for a SQL lexer..
new LexerFoldProperties {FoldPropertyName = "sql.backslash.escapes", FoldPropertyValue = "1"}, // for a SQL lexer.. (Enables backslash as an escape character in SQL.)
new LexerFoldProperties {FoldPropertyName = "lexer.sql.numbersign.comment", FoldPropertyValue = "1"}, // for a SQL lexer.. (If lexer.sql.numbersign.comment property is set to 0 a line beginning with '#' will not be a comment.)
new LexerFoldProperties {FoldPropertyName = "lexer.sql.allow.dotted.word", FoldPropertyValue = "1"}, // for a SQL lexer.. (set to 1 to colorize recognized words with dots (recommended for Oracle PL/SQL objects))
});
/// <summary>
/// Gets or sets the additional folding properties for the HTML (Hypertext Markup Language) lexer.
/// </summary>
public static List<LexerFoldProperties> HyperTextFolding { get; set; } = new List<LexerFoldProperties>(new[]
{
new LexerFoldProperties {FoldPropertyName = "fold.hypertext.comment", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "fold.hypertext.heredoc", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "fold.html.preprocessor", FoldPropertyValue = "1"},
new LexerFoldProperties {FoldPropertyName = "fold.html", FoldPropertyValue = "1"},
});
/// <summary>
/// Sets the <see cref="Scintilla"/> properties.
/// </summary>
/// <param name="scintilla">The <see cref="Scintilla"/> instance of which properties to set.</param>
/// <param name="foldProperties">A list of fold properties.</param>
public static void SetScintillaProperties(Scintilla scintilla, List<LexerFoldProperties> foldProperties)
{
foreach (var foldProperty in foldProperties)
{
scintilla.SetProperty(foldProperty.FoldPropertyName, foldProperty.FoldPropertyValue);
}
}
/// <summary>
/// Sets the default folding for all lexers.
/// </summary>
/// <param name="scintilla">The <see cref="Scintilla"/> instance of which default folding properties to set.</param>
public static void FoldDefault(Scintilla scintilla)
{
SetScintillaProperties(scintilla, DefaultFolding);
}
/// <summary>
/// Sets the fold properties to a given lexer type.
/// </summary>
/// <param name="scintilla">The <see cref="Scintilla"/> of which fold properties to set.</param>
/// <param name="lexerType">Type of the lexer.</param>
public static void SetFoldProperties(Scintilla scintilla, LexerType lexerType)
{
switch (lexerType)
{
case LexerType.HTML:
SetScintillaProperties(scintilla, HyperTextFolding); break;
case LexerType.SQL:
SetScintillaProperties(scintilla, SqlFolding); break;
case LexerType.Xml:
SetScintillaProperties(scintilla, XmlFolding); break;
default:
SetScintillaProperties(scintilla, DefaultFolding); break;
}
}
}
}
Loaded 100 of 349 files, more files were not shown because too many files have changed in this diff. Show more