IDE: extended the character map with unicode tables from Theo (issue #12992)

git-svn-id: trunk@18384 -
This commit is contained in:
vincents 2009-01-21 21:29:01 +00:00
parent 64ffa702f8
commit 4ee9b91633
3 changed files with 388 additions and 229 deletions

View File

@ -1,183 +1,119 @@
object CharacterMapDialog: TCharacterMapDialog
Left = 612
Height = 421
Top = 233
Width = 471
HelpContext = 0
ActiveControl = StringGrid1
Align = alNone
AllowDropFiles = False
AutoScroll = True
AutoSize = False
BorderIcons = [biSystemMenu, biMinimize, biMaximize]
BorderStyle = bsSizeable
Left = 370
Height = 432
Top = 128
Width = 484
ActiveControl = PageControl1
Caption = 'CharacterMapDialog'
ChildSizing.LeftRightSpacing = 0
ChildSizing.TopBottomSpacing = 0
ChildSizing.HorizontalSpacing = 0
ChildSizing.VerticalSpacing = 0
ChildSizing.ControlsPerLine = 0
ClientHeight = 421
ClientWidth = 471
DockSite = False
DragKind = dkDrag
DragMode = dmManual
Enabled = True
Font.Height = 0
Font.Style = []
ClientHeight = 432
ClientWidth = 484
FormStyle = fsStayOnTop
KeyPreview = True
OnCreate = FormCreate
OnShow = FormShow
ParentBiDiMode = True
ParentFont = False
Position = poScreenCenter
ShowInTaskBar = stDefault
UseDockManager = False
LCLVersion = '0.9.27'
WindowState = wsNormal
object CharInfoLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Side = asrBottom
object ButtonPanel: TButtonPanel
Left = 6
Height = 18
Top = 349
Width = 459
HelpContext = 0
Align = alBottom
Alignment = taLeftJustify
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Left = 0
BorderSpacing.Top = 0
BorderSpacing.Right = 0
BorderSpacing.Bottom = 0
BorderSpacing.Around = 6
BorderSpacing.CellAlignHorizontal = ccaFill
BorderSpacing.CellAlignVertical = ccaFill
Caption = 'CharInfoLabel'
DragCursor = crDrag
DragMode = dmManual
Enabled = True
Layout = tlTop
ParentBidiMode = True
ParentColor = False
ParentFont = True
ParentShowHint = True
ShowAccelChar = True
Transparent = True
Visible = True
WordWrap = False
OptimalFill = False
Height = 48
Top = 378
Width = 472
TabOrder = 0
ShowButtons = [pbClose, pbHelp]
end
object CharactersGroupbox: TGroupBox
object PageControl1: TPageControl
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CharInfoLabel
AnchorSideBottom.Control = ButtonPanel
Left = 6
Height = 337
Height = 366
Top = 6
Width = 459
HelpContext = 0
Align = alClient
AutoSize = False
BorderSpacing.Left = 0
BorderSpacing.Top = 0
BorderSpacing.Right = 0
BorderSpacing.Bottom = 0
Width = 472
ActivePage = TabSheet1
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Around = 6
BorderSpacing.CellAlignHorizontal = ccaFill
BorderSpacing.CellAlignVertical = ccaFill
Caption = 'Characters'
ChildSizing.LeftRightSpacing = 0
ChildSizing.TopBottomSpacing = 0
ChildSizing.HorizontalSpacing = 0
ChildSizing.VerticalSpacing = 0
ChildSizing.ControlsPerLine = 0
ClientHeight = 318
ClientWidth = 455
Ctl3D = False
DockSite = False
DragCursor = crDrag
DragKind = dkDrag
DragMode = dmManual
Enabled = True
ParentBidiMode = True
ParentColor = True
ParentCtl3D = False
ParentFont = True
ParentShowHint = True
TabOrder = 0
TabStop = False
Visible = True
object StringGrid1: TStringGrid
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 306
Top = 6
Width = 443
HelpContext = 0
Align = alClient
Anchors = []
AutoAdvance = aaRight
AutoEdit = True
AutoFillColumns = False
BorderSpacing.Left = 0
BorderSpacing.Top = 0
BorderSpacing.Right = 0
BorderSpacing.Bottom = 0
BorderSpacing.Around = 6
BorderSpacing.CellAlignHorizontal = ccaFill
BorderSpacing.CellAlignVertical = ccaFill
BorderStyle = bsSingle
ColCount = 17
DefaultColWidth = 16
DefaultDrawing = True
DragCursor = crDrag
DragKind = dkDrag
DragMode = dmManual
Enabled = True
ExtendedSelect = True
FixedColor = clBtnFace
FixedCols = 1
FixedRows = 1
Flat = False
GridLineWidth = 1
HeaderHotZones = [gzFixedCols]
HeaderPushZones = [gzFixedCols]
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goSmoothScroll]
ParentColor = False
ParentFont = True
ParentShowHint = True
RowCount = 15
ScrollBars = ssAutoBoth
TabOrder = 0
TabStop = True
TitleFont.Height = 0
TitleFont.Style = []
TitleStyle = tsLazarus
UseXORFeatures = False
Visible = True
OnMouseDown = StringGrid1MouseDown
OnMouseMove = StringGrid1MouseMove
TabIndex = 0
TabOrder = 1
object TabSheet1: TTabSheet
Caption = 'ANSI'
ClientHeight = 336
ClientWidth = 468
object CharInfoLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 313
Width = 456
Align = alBottom
Anchors = [akLeft, akBottom]
BorderSpacing.Around = 6
Caption = 'CharInfoLabel'
ParentColor = False
end
object StringGrid1: TStringGrid
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 288
Top = 0
Width = 468
Anchors = [akTop, akLeft, akRight, akBottom]
ColCount = 17
DefaultColWidth = 16
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goSmoothScroll]
RowCount = 15
TabOrder = 0
OnMouseDown = StringGrid1MouseDown
OnMouseMove = StringGrid1MouseMove
end
end
object TabSheet2: TTabSheet
Caption = 'Unicode'
ClientHeight = 336
ClientWidth = 468
object UnicodeCharInfoLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 313
Width = 126
Anchors = [akLeft, akBottom]
BorderSpacing.Around = 6
Caption = 'UnicodeCharInfoLabel'
ParentColor = False
end
object StringGrid2: TStringGrid
Left = 0
Height = 288
Top = 0
Width = 468
Anchors = [akTop, akLeft, akRight, akBottom]
ColCount = 16
DefaultColWidth = 26
DefaultRowHeight = 26
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goSmoothScroll]
RowCount = 15
TabOrder = 0
OnMouseDown = StringGrid2MouseDown
OnMouseMove = StringGrid2MouseMove
end
object cbUniRange: TComboBox
Left = 253
Height = 24
Top = 305
Width = 212
Anchors = [akRight, akBottom]
AutoComplete = False
ItemHeight = 0
ItemWidth = 0
OnSelect = cbUniRangeSelect
TabOrder = 1
Text = 'cbUniRange'
end
end
end
object ButtonPanel: TButtonPanel
Left = 6
Height = 48
Top = 373
Width = 459
HelpContext = 0
Align = alBottom
AutoSize = True
ButtonOrder = boDefault
TabOrder = 1
DefaultButton = pbOK
ShowButtons = [pbClose, pbHelp]
ShowGlyphs = [pbOK, pbCancel, pbClose, pbHelp]
Visible = True
end
end

View File

@ -1,66 +1,44 @@
{ This is an automatically generated lazarus resource file }
{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei }
LazarusResources.Add('TCharacterMapDialog','FORMDATA',[
'TPF0'#19'TCharacterMapDialog'#18'CharacterMapDialog'#4'Left'#3'd'#2#6'Height'
+#3#165#1#3'Top'#3#233#0#5'Width'#3#215#1#11'HelpContext'#2#0#13'ActiveContro'
+'l'#7#11'StringGrid1'#5'Align'#7#6'alNone'#14'AllowDropFiles'#8#10'AutoScrol'
+'l'#9#8'AutoSize'#8#11'BorderIcons'#11#12'biSystemMenu'#10'biMinimize'#10'bi'
+'Maximize'#0#11'BorderStyle'#7#10'bsSizeable'#7'Caption'#6#18'CharacterMapDi'
+'alog'#28'ChildSizing.LeftRightSpacing'#2#0#28'ChildSizing.TopBottomSpacing'
+#2#0#29'ChildSizing.HorizontalSpacing'#2#0#27'ChildSizing.VerticalSpacing'#2
+#0#27'ChildSizing.ControlsPerLine'#2#0#12'ClientHeight'#3#165#1#11'ClientWid'
+'th'#3#215#1#8'DockSite'#8#8'DragKind'#7#6'dkDrag'#8'DragMode'#7#8'dmManual'
+#7'Enabled'#9#11'Font.Height'#2#0#10'Font.Style'#11#0#9'FormStyle'#7#11'fsSt'
+'ayOnTop'#10'KeyPreview'#9#8'OnCreate'#7#10'FormCreate'#6'OnShow'#7#8'FormSh'
+'ow'#14'ParentBiDiMode'#9#10'ParentFont'#8#8'Position'#7#14'poScreenCenter'
+#13'ShowInTaskBar'#7#9'stDefault'#14'UseDockManager'#8#10'LCLVersion'#6#6'0.'
+'9.27'#11'WindowState'#7#8'wsNormal'#0#6'TLabel'#13'CharInfoLabel'#22'Anchor'
'TPF0'#19'TCharacterMapDialog'#18'CharacterMapDialog'#4'Left'#3'r'#1#6'Height'
+#3#176#1#3'Top'#3#128#0#5'Width'#3#228#1#13'ActiveControl'#7#12'PageControl1'
+#7'Caption'#6#18'CharacterMapDialog'#12'ClientHeight'#3#176#1#11'ClientWidth'
+#3#228#1#9'FormStyle'#7#11'fsStayOnTop'#10'KeyPreview'#9#8'OnCreate'#7#10'Fo'
+'rmCreate'#6'OnShow'#7#8'FormShow'#8'Position'#7#14'poScreenCenter'#10'LCLVe'
+'rsion'#6#6'0.9.27'#0#12'TButtonPanel'#11'ButtonPanel'#4'Left'#2#6#6'Height'
+#2'0'#3'Top'#3'z'#1#5'Width'#3#216#1#8'TabOrder'#2#0#11'ShowButtons'#11#7'pb'
+'Close'#6'pbHelp'#0#0#0#12'TPageControl'#12'PageControl1'#22'AnchorSideLeft.'
+'Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#23'AnchorSideRight'
+'.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideB'
+'ottom.Control'#7#11'ButtonPanel'#4'Left'#2#6#6'Height'#3'n'#1#3'Top'#2#6#5
+'Width'#3#216#1#10'ActivePage'#7#9'TabSheet1'#7'Anchors'#11#5'akTop'#6'akLef'
+'t'#7'akRight'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#8'TabIndex'#2#0#8
+'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#4'ANSI'#12'ClientHei'
+'ght'#3'P'#1#11'ClientWidth'#3#212#1#0#6'TLabel'#13'CharInfoLabel'#22'Anchor'
+'SideLeft.Control'#7#5'Owner'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2
+#6#6'Height'#2#18#3'Top'#3']'#1#5'Width'#3#203#1#11'HelpContext'#2#0#5'Align'
+#7#8'alBottom'#9'Alignment'#7#13'taLeftJustify'#7'Anchors'#11#6'akLeft'#8'ak'
+'Bottom'#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#0#17'BorderSpacing.Top'#2#0
+#19'BorderSpacing.Right'#2#0#20'BorderSpacing.Bottom'#2#0#20'BorderSpacing.A'
+'round'#2#6'!BorderSpacing.CellAlignHorizontal'#7#7'ccaFill'#31'BorderSpacin'
+'g.CellAlignVertical'#7#7'ccaFill'#7'Caption'#6#13'CharInfoLabel'#10'DragCur'
+'sor'#7#6'crDrag'#8'DragMode'#7#8'dmManual'#7'Enabled'#9#6'Layout'#7#5'tlTop'
+#14'ParentBidiMode'#9#11'ParentColor'#8#10'ParentFont'#9#14'ParentShowHint'#9
+#13'ShowAccelChar'#9#11'Transparent'#9#7'Visible'#9#8'WordWrap'#8#11'Optimal'
+'Fill'#8#0#0#9'TGroupBox'#18'CharactersGroupbox'#22'AnchorSideLeft.Control'#7
+#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#23'AnchorSideRight.Control'#7
+#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Contro'
+'l'#7#13'CharInfoLabel'#4'Left'#2#6#6'Height'#3'Q'#1#3'Top'#2#6#5'Width'#3
+#203#1#11'HelpContext'#2#0#5'Align'#7#8'alClient'#8'AutoSize'#8#18'BorderSpa'
+'cing.Left'#2#0#17'BorderSpacing.Top'#2#0#19'BorderSpacing.Right'#2#0#20'Bor'
+'derSpacing.Bottom'#2#0#20'BorderSpacing.Around'#2#6'!BorderSpacing.CellAlig'
+'nHorizontal'#7#7'ccaFill'#31'BorderSpacing.CellAlignVertical'#7#7'ccaFill'#7
+'Caption'#6#10'Characters'#28'ChildSizing.LeftRightSpacing'#2#0#28'ChildSizi'
+'ng.TopBottomSpacing'#2#0#29'ChildSizing.HorizontalSpacing'#2#0#27'ChildSizi'
+'ng.VerticalSpacing'#2#0#27'ChildSizing.ControlsPerLine'#2#0#12'ClientHeight'
+#3'>'#1#11'ClientWidth'#3#199#1#5'Ctl3D'#8#8'DockSite'#8#10'DragCursor'#7#6
+'crDrag'#8'DragKind'#7#6'dkDrag'#8'DragMode'#7#8'dmManual'#7'Enabled'#9#14'P'
+'arentBidiMode'#9#11'ParentColor'#9#11'ParentCtl3D'#8#10'ParentFont'#9#14'Pa'
+'rentShowHint'#9#8'TabOrder'#2#0#7'TabStop'#8#7'Visible'#9#0#11'TStringGrid'
+#11'StringGrid1'#20'AnchorSideRight.Side'#7#9'asrBottom'#21'AnchorSideBottom'
+'.Side'#7#9'asrBottom'#4'Left'#2#6#6'Height'#3'2'#1#3'Top'#2#6#5'Width'#3#187
+#1#11'HelpContext'#2#0#5'Align'#7#8'alClient'#7'Anchors'#11#0#11'AutoAdvance'
+#7#7'aaRight'#8'AutoEdit'#9#15'AutoFillColumns'#8#18'BorderSpacing.Left'#2#0
+#17'BorderSpacing.Top'#2#0#19'BorderSpacing.Right'#2#0#20'BorderSpacing.Bott'
+'om'#2#0#20'BorderSpacing.Around'#2#6'!BorderSpacing.CellAlignHorizontal'#7#7
+'ccaFill'#31'BorderSpacing.CellAlignVertical'#7#7'ccaFill'#11'BorderStyle'#7
+#8'bsSingle'#8'ColCount'#2#17#15'DefaultColWidth'#2#16#14'DefaultDrawing'#9
+#10'DragCursor'#7#6'crDrag'#8'DragKind'#7#6'dkDrag'#8'DragMode'#7#8'dmManual'
+#7'Enabled'#9#14'ExtendedSelect'#9#10'FixedColor'#7#9'clBtnFace'#9'FixedCols'
+#2#1#9'FixedRows'#2#1#4'Flat'#8#13'GridLineWidth'#2#1#14'HeaderHotZones'#11
+#11'gzFixedCols'#0#15'HeaderPushZones'#11#11'gzFixedCols'#0#7'Options'#11#15
+'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#14'goSmo'
+'othScroll'#0#11'ParentColor'#8#10'ParentFont'#9#14'ParentShowHint'#9#8'RowC'
+'ount'#2#15#10'ScrollBars'#7#10'ssAutoBoth'#8'TabOrder'#2#0#7'TabStop'#9#16
+'TitleFont.Height'#2#0#15'TitleFont.Style'#11#0#10'TitleStyle'#7#9'tsLazarus'
+#14'UseXORFeatures'#8#7'Visible'#9#11'OnMouseDown'#7#20'StringGrid1MouseDown'
+#11'OnMouseMove'#7#20'StringGrid1MouseMove'#0#0#0#12'TButtonPanel'#11'Button'
+'Panel'#4'Left'#2#6#6'Height'#2'0'#3'Top'#3'u'#1#5'Width'#3#203#1#11'HelpCon'
+'text'#2#0#5'Align'#7#8'alBottom'#8'AutoSize'#9#11'ButtonOrder'#7#9'boDefaul'
+'t'#8'TabOrder'#2#1#13'DefaultButton'#7#4'pbOK'#11'ShowButtons'#11#7'pbClose'
+#6'pbHelp'#0#10'ShowGlyphs'#11#4'pbOK'#8'pbCancel'#7'pbClose'#6'pbHelp'#0#7
+'Visible'#9#0#0#0
+#6#6'Height'#2#17#3'Top'#3'9'#1#5'Width'#3#200#1#5'Align'#7#8'alBottom'#7'An'
+'chors'#11#6'akLeft'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#7'Caption'#6
+#13'CharInfoLabel'#11'ParentColor'#8#0#0#11'TStringGrid'#11'StringGrid1'#20
+'AnchorSideRight.Side'#7#9'asrBottom'#21'AnchorSideBottom.Side'#7#9'asrBotto'
+'m'#4'Left'#2#0#6'Height'#3' '#1#3'Top'#2#0#5'Width'#3#212#1#7'Anchors'#11#5
+'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'ColCount'#2#17#15'DefaultColWid'
+'th'#2#16#7'Options'#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLin'
+'e'#10'goHorzLine'#14'goSmoothScroll'#0#8'RowCount'#2#15#8'TabOrder'#2#0#11
+'OnMouseDown'#7#20'StringGrid1MouseDown'#11'OnMouseMove'#7#20'StringGrid1Mou'
+'seMove'#0#0#0#9'TTabSheet'#9'TabSheet2'#7'Caption'#6#7'Unicode'#12'ClientHe'
+'ight'#3'P'#1#11'ClientWidth'#3#212#1#0#6'TLabel'#20'UnicodeCharInfoLabel'#22
+'AnchorSideLeft.Control'#7#5'Owner'#18'AnchorSideTop.Side'#7#9'asrBottom'#4
+'Left'#2#6#6'Height'#2#17#3'Top'#3'9'#1#5'Width'#2'~'#7'Anchors'#11#6'akLeft'
+#8'akBottom'#0#20'BorderSpacing.Around'#2#6#7'Caption'#6#20'UnicodeCharInfoL'
+'abel'#11'ParentColor'#8#0#0#11'TStringGrid'#11'StringGrid2'#4'Left'#2#0#6'H'
+'eight'#3' '#1#3'Top'#2#0#5'Width'#3#212#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
+'akRight'#8'akBottom'#0#8'ColCount'#2#16#15'DefaultColWidth'#2#26#16'Default'
+'RowHeight'#2#26#7'Options'#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'go'
+'VertLine'#10'goHorzLine'#14'goSmoothScroll'#0#8'RowCount'#2#15#8'TabOrder'#2
+#0#11'OnMouseDown'#7#20'StringGrid2MouseDown'#11'OnMouseMove'#7#20'StringGri'
+'d2MouseMove'#0#0#9'TComboBox'#10'cbUniRange'#4'Left'#3#253#0#6'Height'#2#24
+#3'Top'#3'1'#1#5'Width'#3#212#0#7'Anchors'#11#7'akRight'#8'akBottom'#0#12'Au'
+'toComplete'#8#10'ItemHeight'#2#0#9'ItemWidth'#2#0#8'OnSelect'#7#16'cbUniRan'
+'geSelect'#8'TabOrder'#2#1#4'Text'#6#10'cbUniRange'#0#0#0#0#0
]);

View File

@ -37,8 +37,8 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
StdCtrls, LCLType, GraphType, LazarusIDEStrConsts, EditorOptions,
EnvironmentOpts, Grids, IDEContextHelpEdit, ButtonPanel;
StdCtrls, LCLType, LCLProc, GraphType, LazarusIDEStrConsts, EditorOptions,
EnvironmentOpts, Grids, IDEContextHelpEdit, ButtonPanel, ComCtrls;
type
TOnInsertCharacterEvent = procedure (const C: TUTF8Char) of object;
@ -47,9 +47,15 @@ type
TCharacterMapDialog = class(TForm)
ButtonPanel: TButtonPanel;
CharactersGroupbox: TGroupbox;
CharInfoLabel: TLabel;
cbUniRange: TComboBox;
UnicodeCharInfoLabel: TLabel;
PageControl1: TPageControl;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
procedure cbUniRangeSelect(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
@ -57,6 +63,10 @@ type
Shift: TShiftState; X, Y: Integer);
procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure StringGrid2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
FOnInsertCharacter: TOnInsertCharacterEvent;
procedure FillCharMap;
@ -72,6 +82,173 @@ var
implementation
type TUnicodeRange = record
S: longint;
E: longint;
PG: string[50];
end;
const
MaxUnicodeRanges = 151;
UnicodeRanges: array[0..MaxUnicodeRanges] of TUnicodeRange = (
(S: $0020; E: $007F; PG: 'Basic Latin'),
(S: $00A0; E: $00FF; PG: 'Latin-1 Supplement'),
(S: $0100; E: $017F; PG: 'Latin Extended-A'),
(S: $0180; E: $024F; PG: 'Latin Extended-B'),
(S: $0250; E: $02AF; PG: 'IPA Extensions'),
(S: $02B0; E: $02FF; PG: 'Spacing Modifier Letters'),
(S: $0300; E: $036F; PG: 'Combining Diacritical Marks'),
(S: $0370; E: $03FF; PG: 'Greek and Coptic'),
(S: $0400; E: $04FF; PG: 'Cyrillic'),
(S: $0500; E: $052F; PG: 'Cyrillic Supplement'),
(S: $0530; E: $058F; PG: 'Armenian'),
(S: $0590; E: $05FF; PG: 'Hebrew'),
(S: $0600; E: $06FF; PG: 'Arabic'),
(S: $0700; E: $074F; PG: 'Syriac'),
(S: $0750; E: $077F; PG: 'Arabic Supplement'),
(S: $0780; E: $07BF; PG: 'Thaana'),
(S: $07C0; E: $07FF; PG: 'NKo'),
(S: $0900; E: $097F; PG: 'Devanagari'),
(S: $0980; E: $09FF; PG: 'Bengali'),
(S: $0A00; E: $0A7F; PG: 'Gurmukhi'),
(S: $0A80; E: $0AFF; PG: 'Gujarati'),
(S: $0B00; E: $0B7F; PG: 'Oriya'),
(S: $0B80; E: $0BFF; PG: 'Tamil'),
(S: $0C00; E: $0C7F; PG: 'Telugu'),
(S: $0C80; E: $0CFF; PG: 'Kannada'),
(S: $0D00; E: $0D7F; PG: 'Malayalam'),
(S: $0D80; E: $0DFF; PG: 'Sinhala'),
(S: $0E00; E: $0E7F; PG: 'Thai'),
(S: $0E80; E: $0EFF; PG: 'Lao'),
(S: $0F00; E: $0FFF; PG: 'Tibetan'),
(S: $1000; E: $109F; PG: 'Myanmar'),
(S: $10A0; E: $10FF; PG: 'Georgian'),
(S: $1100; E: $11FF; PG: 'Hangul Jamo'),
(S: $1200; E: $137F; PG: 'Ethiopic'),
(S: $1380; E: $139F; PG: 'Ethiopic Supplement'),
(S: $13A0; E: $13FF; PG: 'Cherokee'),
(S: $1400; E: $167F; PG: 'Unified Canadian Aboriginal Syllabics'),
(S: $1680; E: $169F; PG: 'Ogham'),
(S: $16A0; E: $16FF; PG: 'Runic'),
(S: $1700; E: $171F; PG: 'Tagalog'),
(S: $1720; E: $173F; PG: 'Hanunoo'),
(S: $1740; E: $175F; PG: 'Buhid'),
(S: $1760; E: $177F; PG: 'Tagbanwa'),
(S: $1780; E: $17FF; PG: 'Khmer'),
(S: $1800; E: $18AF; PG: 'Mongolian'),
(S: $1900; E: $194F; PG: 'Limbu'),
(S: $1950; E: $197F; PG: 'Tai Le'),
(S: $1980; E: $19DF; PG: 'New Tai Lue'),
(S: $19E0; E: $19FF; PG: 'Khmer Symbols'),
(S: $1A00; E: $1A1F; PG: 'Buginese'),
(S: $1B00; E: $1B7F; PG: 'Balinese'),
(S: $1D00; E: $1D7F; PG: 'Phonetic Extensions'),
(S: $1D80; E: $1DBF; PG: 'Phonetic Extensions Supplement'),
(S: $1DC0; E: $1DFF; PG: 'Combining Diacritical Marks Supplement'),
(S: $1E00; E: $1EFF; PG: 'Latin Extended Additional'),
(S: $1F00; E: $1FFF; PG: 'Greek Extended'),
(S: $2000; E: $206F; PG: 'General Punctuation'),
(S: $2070; E: $209F; PG: 'Superscripts and Subscripts'),
(S: $20A0; E: $20CF; PG: 'Currency Symbols'),
(S: $20D0; E: $20FF; PG: 'Combining Diacritical Marks for Symbols'),
(S: $2100; E: $214F; PG: 'Letterlike Symbols'),
(S: $2150; E: $218F; PG: 'Number Forms'),
(S: $2190; E: $21FF; PG: 'Arrows'),
(S: $2200; E: $22FF; PG: 'Mathematical Operators'),
(S: $2300; E: $23FF; PG: 'Miscellaneous Technical'),
(S: $2400; E: $243F; PG: 'Control Pictures'),
(S: $2440; E: $245F; PG: 'Optical Character Recognition'),
(S: $2460; E: $24FF; PG: 'Enclosed Alphanumerics'),
(S: $2500; E: $257F; PG: 'Box Drawing'),
(S: $2580; E: $259F; PG: 'Block Elements'),
(S: $25A0; E: $25FF; PG: 'Geometric Shapes'),
(S: $2600; E: $26FF; PG: 'Miscellaneous Symbols'),
(S: $2700; E: $27BF; PG: 'Dingbats'),
(S: $27C0; E: $27EF; PG: 'Miscellaneous Mathematical Symbols-A'),
(S: $27F0; E: $27FF; PG: 'Supplemental Arrows-A'),
(S: $2800; E: $28FF; PG: 'Braille Patterns'),
(S: $2900; E: $297F; PG: 'Supplemental Arrows-B'),
(S: $2980; E: $29FF; PG: 'Miscellaneous Mathematical Symbols-B'),
(S: $2A00; E: $2AFF; PG: 'Supplemental Mathematical Operators'),
(S: $2B00; E: $2BFF; PG: 'Miscellaneous Symbols and Arrows'),
(S: $2C00; E: $2C5F; PG: 'Glagolitic'),
(S: $2C60; E: $2C7F; PG: 'Latin Extended-C'),
(S: $2C80; E: $2CFF; PG: 'Coptic'),
(S: $2D00; E: $2D2F; PG: 'Georgian Supplement'),
(S: $2D30; E: $2D7F; PG: 'Tifinagh'),
(S: $2D80; E: $2DDF; PG: 'Ethiopic Extended'),
(S: $2E00; E: $2E7F; PG: 'Supplemental Punctuation'),
(S: $2E80; E: $2EFF; PG: 'CJK Radicals Supplement'),
(S: $2F00; E: $2FDF; PG: 'Kangxi Radicals'),
(S: $2FF0; E: $2FFF; PG: 'Ideographic Description Characters'),
(S: $3000; E: $303F; PG: 'CJK Symbols and Punctuation'),
(S: $3040; E: $309F; PG: 'Hiragana'),
(S: $30A0; E: $30FF; PG: 'Katakana'),
(S: $3100; E: $312F; PG: 'Bopomofo'),
(S: $3130; E: $318F; PG: 'Hangul Compatibility Jamo'),
(S: $3190; E: $319F; PG: 'Kanbun'),
(S: $31A0; E: $31BF; PG: 'Bopomofo Extended'),
(S: $31C0; E: $31EF; PG: 'CJK Strokes'),
(S: $31F0; E: $31FF; PG: 'Katakana Phonetic Extensions'),
(S: $3200; E: $32FF; PG: 'Enclosed CJK Letters and Months'),
(S: $3300; E: $33FF; PG: 'CJK Compatibility'),
(S: $3400; E: $4DBF; PG: 'CJK Unified Ideographs Extension A'),
(S: $4DC0; E: $4DFF; PG: 'Yijing Hexagram Symbols'),
(S: $4E00; E: $9FFF; PG: 'CJK Unified Ideographs'),
(S: $A000; E: $A48F; PG: 'Yi Syllables'),
(S: $A490; E: $A4CF; PG: 'Yi Radicals'),
(S: $A700; E: $A71F; PG: 'Modifier Tone Letters'),
(S: $A720; E: $A7FF; PG: 'Latin Extended-D'),
(S: $A800; E: $A82F; PG: 'Syloti Nagri'),
(S: $A840; E: $A87F; PG: 'Phags-pa'),
(S: $AC00; E: $D7AF; PG: 'Hangul Syllables'),
(S: $D800; E: $DB7F; PG: 'High Surrogates'),
(S: $DB80; E: $DBFF; PG: 'High Private Use Surrogates'),
(S: $DC00; E: $DFFF; PG: 'Low Surrogates'),
(S: $E000; E: $F8FF; PG: 'Private Use Area'),
(S: $F900; E: $FAFF; PG: 'CJK Compatibility Ideographs'),
(S: $FB00; E: $FB4F; PG: 'Alphabetic Presentation Forms'),
(S: $FB50; E: $FDFF; PG: 'Arabic Presentation Forms-A'),
(S: $FE00; E: $FE0F; PG: 'Variation Selectors'),
(S: $FE10; E: $FE1F; PG: 'Vertical Forms'),
(S: $FE20; E: $FE2F; PG: 'Combining Half Marks'),
(S: $FE30; E: $FE4F; PG: 'CJK Compatibility Forms'),
(S: $FE50; E: $FE6F; PG: 'Small Form Variants'),
(S: $FE70; E: $FEFF; PG: 'Arabic Presentation Forms-B'),
(S: $FF00; E: $FFEF; PG: 'Halfwidth and Fullwidth Forms'),
(S: $FFF0; E: $FFFF; PG: 'Specials'),
(S: $10000; E: $1007F; PG: 'Linear B Syllabary'),
(S: $10080; E: $100FF; PG: 'Linear B Ideograms'),
(S: $10100; E: $1013F; PG: 'Aegean Numbers'),
(S: $10140; E: $1018F; PG: 'Ancient Greek Numbers'),
(S: $10300; E: $1032F; PG: 'Old Italic'),
(S: $10330; E: $1034F; PG: 'Gothic'),
(S: $10380; E: $1039F; PG: 'Ugaritic'),
(S: $103A0; E: $103DF; PG: 'Old Persian'),
(S: $10400; E: $1044F; PG: 'Deseret'),
(S: $10450; E: $1047F; PG: 'Shavian'),
(S: $10480; E: $104AF; PG: 'Osmanya'),
(S: $10800; E: $1083F; PG: 'Cypriot Syllabary'),
(S: $10900; E: $1091F; PG: 'Phoenician'),
(S: $10A00; E: $10A5F; PG: 'Kharoshthi'),
(S: $12000; E: $123FF; PG: 'Cuneiform'),
(S: $12400; E: $1247F; PG: 'Cuneiform Numbers and Punctuation'),
(S: $1D000; E: $1D0FF; PG: 'Byzantine Musical Symbols'),
(S: $1D100; E: $1D1FF; PG: 'Musical Symbols'),
(S: $1D200; E: $1D24F; PG: 'Ancient Greek Musical Notation'),
(S: $1D300; E: $1D35F; PG: 'Tai Xuan Jing Symbols'),
(S: $1D360; E: $1D37F; PG: 'Counting Rod Numerals'),
(S: $1D400; E: $1D7FF; PG: 'Mathematical Alphanumeric Symbols'),
(S: $20000; E: $2A6DF; PG: 'CJK Unified Ideographs Extension B'),
(S: $2F800; E: $2FA1F; PG: 'CJK Compatibility Ideographs Supplement'),
(S: $E0000; E: $E007F; PG: 'Tags'),
(S: $E0100; E: $E01EF; PG: 'Variation Selectors Supplement')
//(S: $F0000; E: $FFFFF; PG: 'Supplementary Private Use Area-A'),
//(S: $100000; E: $10FFFF; PG: 'Supplementary Private Use Area-B')
);
procedure ShowCharacterMap(AOnInsertChar: TOnInsertCharacterEvent);
begin
if CharacterMapDialog = nil then
@ -86,11 +263,11 @@ end;
procedure TCharacterMapDialog.FormCreate(Sender: TObject);
begin
Caption := lisCharacterMap;
CharactersGroupbox.Caption := lisCharacterMap;
ButtonPanel.HelpButton.OnClick := @HelpButtonClick;
//EnvironmentOptions.IDEWindowLayoutList.Apply(Self, Name);
CharInfoLabel.Caption := '-';
UnicodeCharInfoLabel.Caption := '-';
FillCharMap;
end;
@ -99,12 +276,46 @@ begin
ShowContextHelpForIDE(Self);
end;
function RoundUp(Value, Divi:integer):integer;
begin
if Value mod Divi=0 then
Result:=Value div Divi else
Result:=(Value div Divi)+1;
end;
procedure TCharacterMapDialog.cbUniRangeSelect(Sender: TObject);
var cnt, x, y :integer;
S,E:Integer;
begin
S:=UnicodeRanges[cbUniRange.ItemIndex].S;
E:=UnicodeRanges[cbUniRange.ItemIndex].E;
StringGrid2.Clear;
StringGrid2.ColCount:=16;
StringGrid2.RowCount:=RoundUp(E-S,16);
cnt:=0;
for y:=0 to StringGrid2.RowCount-1 do
for x:=0 to StringGrid2.ColCount-1 do
begin
if S+Cnt<=E then
StringGrid2.Cells[x,y]:=UnicodeToUTF8(S+Cnt);
inc(cnt);
end;
StringGrid2.AutoSizeColumns;
end;
procedure TCharacterMapDialog.FormShow(Sender: TObject);
var i:integer;
begin
StringGrid1.Font.Name := EditorOpts.EditorFont;
StringGrid2.Font.Name := EditorOpts.EditorFont;
StringGrid1.Font.Size := 10;
StringGrid2.Font.Size := 10;
StringGrid1.AutoSizeColumns;
for i:=0 to MaxUnicodeRanges do cbUniRange.Items.Add(UnicodeRanges[i].PG);
cbUniRange.ItemIndex:=0;
cbUniRangeSelect(nil);
end;
procedure TCharacterMapDialog.StringGrid1MouseDown(Sender: TObject;
@ -140,6 +351,40 @@ begin
end;
end;
procedure TCharacterMapDialog.StringGrid2MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Row, Col: Integer;
begin
if (Button = mbLeft) and (StringGrid2.MouseToGridZone(X, Y) = gzNormal) then
begin
StringGrid2.MouseToCell(X, Y, Col, Row);
if Assigned(OnInsertCharacter) then
OnInsertCharacter(StringGrid2.Cells[Col, Row]);
end;
end;
procedure TCharacterMapDialog.StringGrid2MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var Row, Col, i: Integer;
S:Cardinal;
tmp,tmp2:String;
begin
if StringGrid2.MouseToGridZone(X, Y) = gzNormal then
begin
StringGrid2.MouseToCell(X, Y, Col, Row);
S:=UnicodeRanges[cbUniRange.ItemIndex].S+(Col)+(Row*16);
tmp:=UnicodeToUTF8(S);
tmp2:='';
for i:=1 to Length(tmp) do tmp2:=tmp2+'$'+IntToHex(Ord(tmp[i]),2);
UnicodeCharInfoLabel.Caption:='U+'+inttohex(S,4)+', UTF-8 = '+tmp2;
end
else
begin
CharInfoLabel.Caption := '-';
end;
end;
procedure TCharacterMapDialog.FillCharMap;
var
R, C: Integer;