### 2024-12-20 星期五更新
------ #### SuperDesign V3.0.2412.2001 - *.[新增]新增程序更新日志设置和自动发布功能。 - *.[修复]修复Post数据格式不正确时双击文本框会导致软件闪退的BUG。
This commit is contained in:
1 parent
03bcb8c5fd
commit
993f1ca1a9
349 files changed
+81977
-13873
No files matched your search
+224
@@ -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.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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.
@@ -0,0 +1,2 @@
|
||||
Scintilla: 5.3.6
|
||||
Lexilla: 5.2.6
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
Scintilla: 5.3.2
|
||||
Lexilla: 5.2.1
|
||||
@@ -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
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
File renamed without changes.
@@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
+42
@@ -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>
|
||||
+69
@@ -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; }
|
||||
}
|
||||
}
|
||||
File renamed without changes.
@@ -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
+1709
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;
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+180
@@ -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>
|
||||
+93
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+309
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+143
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+165
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+112
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+65
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+78
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+213
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+126
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+127
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+122
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+163
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+50
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+117
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+78
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+146
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+120
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+97
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+96
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+135
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+120
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+134
@@ -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
Reference in new issue
Block a user