XTPSyntaxEditLexSchemas.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:12k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. //<title Lex Schemas>
  2. //<toctitle LexSchemas>
  3. //<keywords lexClass>
  4. //
  5. // Summary:
  6. //  *   Lex class description *
  7. //
  8. //  <B>lexClass</B> object is a block of text with defined begin and end sequence;
  9. //  for which can be specified some font and colors attributes.
  10. //  One lex class can contain others inside itself;
  11. //  also it can have some relations to other classes.
  12. //
  13. //  lex schema is defined as a set of lexClasses.
  14. //  It contains a root class with parent type 'file'
  15. //  (which defines a files extensions to apply this schema to,
  16. //  and some global schema attributes).
  17. //
  18. //  - Lex schemes -
  19. //
  20. //  Lex schemes are defined in *.schclass files.
  21. //  Lex class properties (attributes) can be compound, like:
  22. //  <P><C>parent:dyn, previous:tag:separators.</C>
  23. //
  24. //  - Multiple values -
  25. //
  26. //  For multiple value properties the following syntax is allowed:
  27. //
  28. //  <P><C>  propertyX = value1, value2, value3, .... </C>
  29. //  <P><C>  propertyX = valueA1, valueA2, ... </C>
  30. //  <P><C>  propertyX = valueN1 </C>
  31. //  <P><C>  propertyX = valueN2 </C>
  32. //  <P><C>          .... </C>
  33. //
  34. //  - String values -
  35. //
  36. //  String(character) values are defined in single quotation marks:
  37. //  <P>'stringValue'<P>
  38. //  There are a few special chars (as in C++):
  39. //  <P>'\', ''', 't', 'r', 'n'
  40. //
  41. //  And predefined constants:
  42. //
  43. //  <P><C> @alpha   = a-z, A-Z </C>
  44. //  <P><C> @digit   = 0-9 </C>
  45. //  <P><C> @HexDdigit = 0-9, a-f, A-F </C>
  46. //  <P><C> @specs   = ~!@#$%^&*()_-+=|{}[];:'",.<>/? </C>
  47. //  <P><C> @EOL     = End Of Line </C>
  48. //
  49. //  <P><P>NOT operation supported for constants comparisons,
  50. //  <P>like: <C> @alpha:not </C>
  51. //
  52. //  - Comments -
  53. //  <B> <COLOR 00c000> // </COLOR> </B>
  54. //  <P>Two slashes are used to define a single line comment in Lex schema files.
  55. //  (same as in C++)
  56. //
  57. //  - Lex Class Section -
  58. //  <P>
  59. //  <B>lexClass:</B>
  60. //  <P>This keyword begins a lex class section.
  61. //
  62. //  - name - Property (required) -
  63. //
  64. //  Define a lexClass name. Must be unique withing same lex schema (*.schclass file).
  65. //  <PRE>
  66. //  lexClass:
  67. //      name = c_CPPString
  68. //  </PRE>
  69. // <P>
  70. //
  71. //  - parent - Property (required) -
  72. //
  73. //  <B>parent </B>
  74. //  <P>Defines a direct parent of lex class. (parent class name)
  75. //
  76. //  <P><B>parent:dyn</B>
  77. //  <P>Defines a dynamic parent of lex class. (parent class name)
  78. //  Dynamic means that parent class can be not only direct parent,
  79. //  but parent of its parent [of parent ...] until the top class/block.
  80. //
  81. //  <P><B>parent:file</B>
  82. //  <P>Defines a top schema class. (as file extensions list <*.ext1|*.ext2>)
  83. //  <P>
  84. //  <P>Only one of mentioned above 'parent' properties can be used for each class.
  85. //
  86. //  <PRE>
  87. //  parent:file = <*.c|*.cpp|*.h|*.inl|*.tli|*.tlh|*.rc|*.rc2>
  88. //  parent      = c_CPP
  89. //  parent:dyn  = c_CPP
  90. //  </PRE>
  91. //
  92. //  - children - Property (optional) -
  93. //
  94. //  <B>children</B>
  95. //  <P>Defines an allowed direct children for lex class
  96. //  (as comma separated class names or zero to restrict any child).
  97. //
  98. //  <P>Parent-child relation is defined by 'parent' property.  This property helps
  99. //  to restrict create parent-child relation for classes other than specified
  100. //  or define that class has no children.
  101. //
  102. //  <PRE>
  103. //  children = 0 // has no children
  104. //  children = class1, class2, ...
  105. //  </PRE>
  106. //
  107. //  - RecurrenceDepth - Property  (optional) -
  108. //
  109. //  <B>RecurrenceDepth</B>
  110. //  <P>Defines maximum depth of nested classes (blocks).
  111. //  <P>(as a number, default value 1).
  112. //  <P>
  113. //  <P>Class A can be parent for class B. And Class B can be parent for class A.
  114. //  Possible situation when A=B. (for example '{}' block in C++)
  115. //  This property defines maximum depth of A->B->A->B->... nested construction.
  116. //
  117. //  <PRE>
  118. //  RecurrenceDepth = 32
  119. //  </PRE>
  120. //
  121. //  - previous - Property (optional) -
  122. //
  123. //  'previous' property used to set condition to start lex class as previous
  124. //  tag or class. The difference from 'start' property that objects specified
  125. //  in this property is not included in class(block).
  126. //  Can be used alone or together with 'start' property.
  127. //
  128. //  <P><B>previous:class</B>
  129. //  <P>This class is started only if previous determined class name in collection
  130. //  specified in this property.
  131. //  <P>(as one or more class names)
  132. //
  133. //  <P><B>previous:tag</B>
  134. //  <P>This class is started only if start condition is true and previous tag is
  135. //  in collection specified in this property.
  136. //  <P>(as one or more tags)
  137. //
  138. //  <P><B>previous:tag:separators</B>
  139. //  <P>separators set for previous:tag values.
  140. //
  141. //  <P>Previous 'tag' and 'class' conditions can be specified separately or together.
  142. //
  143. //  <PRE>
  144. //  previous:class  = c_HTMLelement_SCRIPT_lang_VB, c_HTMLelement_SCRIPT_lang_JS
  145. //  previous:tag            = '='
  146. //  previous:tag:separators = ' ', 't', @eol
  147. //  </PRE>
  148. //
  149. //  - start - Property  (optional) -
  150. //
  151. //  'start' property used to set condition to start lex class as tag or class.
  152. //  The difference from 'previous' property that objects specified in this
  153. //  property is included in class(block).
  154. //  <P>Can be used alone or together with 'previous' property.
  155. //
  156. //  <P><B>start:class</B>
  157. //  <P>This class is started only if previous determined class name in collection
  158. //  specified in this property.
  159. //  <P>(as one or more class names)
  160. //
  161. //  <P><B>start:Tag</B>
  162. //  <P>This class is started if current tag is in collection specified in this property.
  163. //  <P>(as one or more tags)
  164. //
  165. //  <P>Start 'tag' and 'class' conditions can be specified separately or together.
  166. //
  167. //  - end - Property (optional) -
  168. //
  169. //  'end' property used to set end lex class condition as tag or class.
  170. //
  171. //  <P><B>end:class</B>
  172. //  <P>This class is ended if previous determined class name in collection
  173. //  specified in this property.
  174. //  <P>(as one or more class names)
  175. //
  176. //  <P><B>end:Tag</B>
  177. //  <P>This class is ended if current tag is in collection specified in this property.
  178. //  <P>(as one or more tags)
  179. //
  180. //  <P><B>end:separators</B>
  181. //  <P>This class is ended if tag after current position is in collection specified
  182. //  in this property. Difference from end:Tag is that end:Tag specify tags before
  183. //  current position and end:Tag included in this block but end:separators not
  184. //  included.
  185. //  <P>(as one or more tags)
  186. //
  187. //  <P>End 'class', 'tag' and 'separators' conditions can be specified separately or together.
  188. //
  189. //  - skip - Property  (optional) -
  190. //
  191. //  <B>skip:Tag</B>
  192. //  <P>Used to skip some tags from parsing. Useful to support special tags
  193. //  part of which can be a begin of end tag.
  194. //  <P>(as one or more tags)
  195. //
  196. //  <PRE>
  197. //  EXAMPLES (for start, end, skip):
  198. //
  199. //  start:Tag   ='/*'
  200. //  end:Tag     ='*/'
  201. //
  202. //  //-------------------------------------------
  203. //  start:Tag       = '"'
  204. //  skip:Tag        = '\"', '\rn', '\nr', '\n', '\r'
  205. //  end:Tag         = '"', @eol
  206. //
  207. //  //-------------------------------------------
  208. //  start:tag   = @alpha
  209. //  skip:tag    = @digit
  210. //  end:separators = @alpha:not
  211. //
  212. //  //-------------------------------------------
  213. //  start:CLASS = c_CPPAfxInsertBlock_Start
  214. //  end:CLASS   = c_CPPAfxInsertBlock_End
  215. //  </PRE>
  216. //
  217. //  - token - Property  (optional) -
  218. //
  219. //  'token' property is used to set lex class as some token(s).
  220. //  It could be useful to define keywords.
  221. //  Can be used alone or together with 'previous' property.
  222. //  It must not be used together with 'start'-'end' condition.
  223. //
  224. //  <P><B>token:tag</B>
  225. //  <P>This class is a word from this collection.
  226. //  <P>(as one or more tags)
  227. //
  228. //  <P><B>Token:start:separators</B>
  229. //  <P>Start separators set for token:tag values.
  230. //
  231. //  <P><B>Token:end:separators</B>
  232. //  <P>End separators set for token:tag values.
  233. //
  234. //  <P>Token 'tag' is main condition. Token 'separators' additional conditions.
  235. //  <P>'separators' without 'tag' have no sense.
  236. //
  237. //  <PRE>
  238. //  token:start:separators  = ' ', 't', '<%=', '<%', @specs, @eol
  239. //  token:end:separators    = ' ', 't', '%>', @specs, @eol
  240. //
  241. //  token:tag = 'if', 'for', 'while', 'do'
  242. //  token:tag = 'break'
  243. //  token:tag = 'case'
  244. //  token:tag = 'catch'
  245. //  </PRE>
  246. //  <P>
  247. //
  248. //  * TEXT Attributes *
  249. //
  250. //  txt:XXX defines a few text properties for lex class (block of text).
  251. //  All of them are optional and if some text attribute is not specified -
  252. //  it is inherited from parent class or set to default value for a top (file) lex class.
  253. //
  254. //  <P><B>txt:colorFG</B>
  255. //      <P>Fore color value in hex format (like 0xffc0c0).
  256. //      <P>default: black
  257. //
  258. //  <P><B>txt:colorBK</B>
  259. //      <P>Background color value in hex format (like 0xffFFff).
  260. //      <P>default: white
  261. //
  262. //  <P><B>txt:colorSelFG</B>
  263. //      <P>Selected text fore color value in hex format (like 0xffFFff).
  264. //      <P>default: white
  265. //
  266. //  <P><B>txt:colorSelBK</B>
  267. //      <P>Selected text background color value in hex format (like 0xab0077).
  268. //      <P>default: black
  269. //
  270. //  <P><B>txt:Bold</B>
  271. //      <P>Bold font attribute. Values {1, 0}
  272. //      <P>default: 0
  273. //
  274. //  <P><B>txt:Italic</B>
  275. //      <P>Italic font attribute. Values {1, 0}
  276. //      <P>default: 0
  277. //
  278. //  <P><B>txt:Underline</B>
  279. //      <P>Underline font attribute. Values {1, 0}
  280. //      <P>default: 0
  281. //
  282. //  <PRE>
  283. //  txt:colorFG = 0x0fc0c0
  284. //  txt:colorBK = 0xffffff
  285. //
  286. //  txt:colorSelFG  = 0xffffff
  287. //  txt:colorSelBK  = 0x0fc0c0
  288. //
  289. //  txt:Bold    = 1
  290. //  txt:Italic  = 0
  291. //  txt:Underline = 1
  292. //  </PRE>
  293. //
  294. //  * caseSensitive - Property  (optional) *
  295. //
  296. //  <B>caseSensitive</B>
  297. //  <P>Define compare method for this lex class tags: case sensitive or insensitive.
  298. //  <P>Inheritable from parent class.
  299. //  <P>Values {1, 0}
  300. //  <P>default: 0
  301. //
  302. //  * Collapsable - Property  (optional) *
  303. //
  304. //  <B>Collapsable</B>
  305. //  <P>Define is this block Collapsable or not. Inheritable from parent class.
  306. //  <P>Values {1, 0}
  307. //  <P>default: 0
  308. //
  309. //  * CollapsedText - Property  (optional) *
  310. //
  311. //  <B>CollapsedText</B>
  312. //  <P>Collapsed block string (as quoted string value).
  313. //  <P>default: '[..]'
  314. //
  315. //  * ParseOnScreen - Property  (optional) *
  316. //
  317. //  <B>ParseOnScreen</B>
  318. //  <P>Values {1, 0}
  319. //  <P>default: 0
  320. //  <P>If set to 1 - lex class will be parsed only before drawing on the screen in
  321. //  the main thread. Useful for keywords and other single line text blocks, which
  322. //  are parsed very fast.
  323. //
  324. //  - *** Global attributes *** -
  325. //
  326. //  'global' attributes let to adjust some common parser parameters for each
  327. //  lex schema separately. They can be used only in top layer lex class
  328. //  (parent type file).
  329. //
  330. //  <P><B>global:FirstParseInSeparateThread</B>
  331. //  <P>Values {1, 0}
  332. //  <P>default: 1
  333. //  <P>Define is first parse (when file opening) will run in the main or
  334. //  additional thread.
  335. //
  336. //  <P><B>global:EditReparceInSeparateThread</B>
  337. //  <P>Values {1, 0}
  338. //  <P>default: 1
  339. //  <P>Define is reparse after text edited will run in the main or
  340. //  additional thread.
  341. //
  342. //  <P><B>global:ConfigChangedReparceInSeparateThread</B>
  343. //  <P>Values {1, 0}
  344. //  <P>default: 1
  345. //  <P>Define is reparse text after schema file (*.schclass) will run
  346. //  in the main or additional thread.
  347. //
  348. //  <P><B>global:EditReparceTimeout_ms</B>
  349. //  <P>as time in milliseconds;
  350. //  <P>default: 500
  351. //  <P>Time out to start reparse after last key was pressed.
  352. //
  353. //  <P><B>global:MaxBackParseOffset</B>
  354. //  <P>as number (chars);
  355. //  <P>default: 100
  356. //  <P>Some times parser look back for the text from current position.
  357. //  This parameter define maximum back buffer size.
  358. //
  359. //  <P><B>global:OnScreenSchCacheLifeTime_sec</B>
  360. //  <P>as time in seconds; -1 and 0 means infinite;
  361. //  <P>default= 180
  362. //  <P>When piece of text is displayed, edit control run parser to parse
  363. //  lexClasses with 'ParseOnScreen' attribute set and cache this
  364. //  information to do not run parser every time for this lines. For each
  365. //  entry in this cache last access time is stored.
  366. //  This parameter define time period from last access time after which
  367. //  cached entries will be removed (for memory using optimization).
  368. //
  369. //  <P><B>global:ParserThreadIdleLifeTime_sec</B>
  370. //  <P>as time in seconds; -1 and 0 means infinite;
  371. //  <P>default: 60
  372. //  <P>Idle time out for parser thread. If no parse requests (no editing operations)
  373. //  additional parser thread will be exited. It will be recreated again
  374. //  when necessary (to system resources optimization).