Skip to content

Commit ce4efec

Browse files
committed
Fix for ModificationFlags in Enums
CreateWrapper.py is ever-more hacky. Need to fix this.
1 parent 6cb0207 commit ce4efec

4 files changed

Lines changed: 134 additions & 11 deletions

File tree

PythonScript/src/CreateWrapper.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,21 @@ def writeEnumsWrapperFile(f, out):
622622
if v.get('Values'):
623623
out.write('\tboost::python::enum_<{0}>("{1}")'.format(name, name.upper()))
624624
for val in v['Values']:
625-
out.write('\n\t\t.value("{0}", PYSCR_{1})'.format(val[0][len(v['Value']):].upper(), val[0]))
625+
takeEnumValueFromPosition = None
626+
for prefix in v['Value'].split(' '):
627+
if val[0][:len(prefix)] == prefix:
628+
takeEnumValueFromPosition = len(prefix)
629+
break
630+
631+
# Hack for ModificationFlags
632+
# There's more than one prefix specified for ModificationFlags, separated with spaces.
633+
# Unfortunately, some of the prefixes are the complete symbol, which means we patch that here to just remove the SC_
634+
if val[0] in ['SC_STARTACTION', 'SC_MULTISTEPUNDOREDO', 'SC_LASTSTEPINUNDOREDO', 'SC_MULTILINEUNDOREDO', 'SC_MODEVENTMASKALL']:
635+
takeEnumValueFromPosition = len('SC_')
636+
637+
638+
639+
out.write('\n\t\t.value("{0}", PYSCR_{1})'.format(val[0][takeEnumValueFromPosition:].upper(), val[0]))
626640
out.write(';\n\n')
627641

628642
out.write('\tboost::python::enum_<ScintillaNotification>("SCINTILLANOTIFICATION")'.format(name, name.upper()))
@@ -687,13 +701,26 @@ def writeScintillaEnums(f, out):
687701
out.write('{0}\n{1}\n\n.. _{0}:\n.. class:: {0}\n\n'.format(name.upper(), '-' * len(name)))
688702

689703
for val in v['Values']:
690-
out.write('.. attribute:: {0}.{1}\n\n'.format(name.upper(), val[0][len(v['Value']):].upper()))
704+
takeEnumValueFromPosition = None
705+
for prefix in v['Value'].split(' '):
706+
if val[0][:len(prefix)] == prefix:
707+
takeEnumValueFromPosition = len(prefix)
708+
break
709+
710+
# Hack for ModificationFlags
711+
# There's more than one prefix specified for ModificationFlags, separated with spaces.
712+
# Unfortunately, some of the prefixes are the complete symbol, which means we patch that here to just remove the SC_
713+
if val[0] in ['SC_STARTACTION', 'SC_MULTISTEPUNDOREDO', 'SC_LASTSTEPINUNDOREDO', 'SC_MULTILINEUNDOREDO', 'SC_MODEVENTMASKALL']:
714+
takeEnumValueFromPosition = len('SC_')
715+
716+
out.write('.. attribute:: {0}.{1}\n\n'.format(name.upper(), val[0][takeEnumValueFromPosition:].upper()))
691717

692718
def findEnum(f, name):
693-
for e in f.enums:
694-
l = len(f.enums[e]["Value"])
695-
if f.enums[e]["Value"] == name[:l]:
696-
return e
719+
for enumName in f.enums:
720+
for e in f.enums[enumName]["Value"].split(' '):
721+
l = len(e)
722+
if e == name[:l]:
723+
return enumName
697724
return None
698725

699726
def findEnumValues(f):

PythonScript/src/Enums.h

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,31 @@ enum FindOption
579579
PYSCR_SCFIND_POSIX = SCFIND_POSIX
580580
};
581581

582+
enum ModificationFlags
583+
{
584+
PYSCR_SC_MOD_INSERTTEXT = SC_MOD_INSERTTEXT,
585+
PYSCR_SC_MOD_DELETETEXT = SC_MOD_DELETETEXT,
586+
PYSCR_SC_MOD_CHANGESTYLE = SC_MOD_CHANGESTYLE,
587+
PYSCR_SC_MOD_CHANGEFOLD = SC_MOD_CHANGEFOLD,
588+
PYSCR_SC_PERFORMED_USER = SC_PERFORMED_USER,
589+
PYSCR_SC_PERFORMED_UNDO = SC_PERFORMED_UNDO,
590+
PYSCR_SC_PERFORMED_REDO = SC_PERFORMED_REDO,
591+
PYSCR_SC_MULTISTEPUNDOREDO = SC_MULTISTEPUNDOREDO,
592+
PYSCR_SC_LASTSTEPINUNDOREDO = SC_LASTSTEPINUNDOREDO,
593+
PYSCR_SC_MOD_CHANGEMARKER = SC_MOD_CHANGEMARKER,
594+
PYSCR_SC_MOD_BEFOREINSERT = SC_MOD_BEFOREINSERT,
595+
PYSCR_SC_MOD_BEFOREDELETE = SC_MOD_BEFOREDELETE,
596+
PYSCR_SC_MULTILINEUNDOREDO = SC_MULTILINEUNDOREDO,
597+
PYSCR_SC_STARTACTION = SC_STARTACTION,
598+
PYSCR_SC_MOD_CHANGEINDICATOR = SC_MOD_CHANGEINDICATOR,
599+
PYSCR_SC_MOD_CHANGELINESTATE = SC_MOD_CHANGELINESTATE,
600+
PYSCR_SC_MOD_CHANGEMARGIN = SC_MOD_CHANGEMARGIN,
601+
PYSCR_SC_MOD_CHANGEANNOTATION = SC_MOD_CHANGEANNOTATION,
602+
PYSCR_SC_MOD_CONTAINER = SC_MOD_CONTAINER,
603+
PYSCR_SC_MOD_LEXERSTATE = SC_MOD_LEXERSTATE,
604+
PYSCR_SC_MODEVENTMASKALL = SC_MODEVENTMASKALL
605+
};
606+
582607
enum LineEndType
583608
{
584609
PYSCR_SC_LINE_END_TYPE_DEFAULT = SC_LINE_END_TYPE_DEFAULT,
@@ -721,11 +746,11 @@ enum EndOfLine
721746

722747

723748
/* The following is the enum of events/notifications.
724-
* Note that the PYSCN_XXX constants are NOT automatically generated (in ScintillaNotifications.h).
725-
* This is very deliberate.
726-
* An error here indicates that a new notification has been added,
727-
* and hence handler code should be added to the ScintillaWrapper::notify() function
728-
*/
749+
* Note that the PYSCN_XXX constants are NOT automatically generated (in ScintillaNotifications.h).
750+
* This is very deliberate.
751+
* An error here indicates that a new notification has been added,
752+
* and hence handler code should be added to the ScintillaWrapper::notify() function
753+
*/
729754
enum ScintillaMessage
730755
{
731756
PYSCR_SCI_ADDTEXT = SCI_ADDTEXT,

PythonScript/src/EnumsWrapper.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,29 @@ void export_enums()
527527
.value("REGEXP", PYSCR_SCFIND_REGEXP)
528528
.value("POSIX", PYSCR_SCFIND_POSIX);
529529

530+
boost::python::enum_<ModificationFlags>("MODIFICATIONFLAGS")
531+
.value("INSERTTEXT", PYSCR_SC_MOD_INSERTTEXT)
532+
.value("DELETETEXT", PYSCR_SC_MOD_DELETETEXT)
533+
.value("CHANGESTYLE", PYSCR_SC_MOD_CHANGESTYLE)
534+
.value("CHANGEFOLD", PYSCR_SC_MOD_CHANGEFOLD)
535+
.value("USER", PYSCR_SC_PERFORMED_USER)
536+
.value("UNDO", PYSCR_SC_PERFORMED_UNDO)
537+
.value("REDO", PYSCR_SC_PERFORMED_REDO)
538+
.value("MULTISTEPUNDOREDO", PYSCR_SC_MULTISTEPUNDOREDO)
539+
.value("LASTSTEPINUNDOREDO", PYSCR_SC_LASTSTEPINUNDOREDO)
540+
.value("CHANGEMARKER", PYSCR_SC_MOD_CHANGEMARKER)
541+
.value("BEFOREINSERT", PYSCR_SC_MOD_BEFOREINSERT)
542+
.value("BEFOREDELETE", PYSCR_SC_MOD_BEFOREDELETE)
543+
.value("MULTILINEUNDOREDO", PYSCR_SC_MULTILINEUNDOREDO)
544+
.value("STARTACTION", PYSCR_SC_STARTACTION)
545+
.value("CHANGEINDICATOR", PYSCR_SC_MOD_CHANGEINDICATOR)
546+
.value("CHANGELINESTATE", PYSCR_SC_MOD_CHANGELINESTATE)
547+
.value("CHANGEMARGIN", PYSCR_SC_MOD_CHANGEMARGIN)
548+
.value("CHANGEANNOTATION", PYSCR_SC_MOD_CHANGEANNOTATION)
549+
.value("CONTAINER", PYSCR_SC_MOD_CONTAINER)
550+
.value("LEXERSTATE", PYSCR_SC_MOD_LEXERSTATE)
551+
.value("MODEVENTMASKALL", PYSCR_SC_MODEVENTMASKALL);
552+
530553
boost::python::enum_<LineEndType>("LINEENDTYPE")
531554
.value("DEFAULT", PYSCR_SC_LINE_END_TYPE_DEFAULT)
532555
.value("UNICODE", PYSCR_SC_LINE_END_TYPE_UNICODE);

docs/source/enums.rst

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,6 +1678,54 @@ MARKERSYMBOL
16781678

16791679
.. attribute:: MARKERSYMBOL.CHARACTER
16801680

1681+
MODIFICATIONFLAGS
1682+
-----------------
1683+
1684+
.. _MODIFICATIONFLAGS:
1685+
.. class:: MODIFICATIONFLAGS
1686+
1687+
.. attribute:: MODIFICATIONFLAGS.INSERTTEXT
1688+
1689+
.. attribute:: MODIFICATIONFLAGS.DELETETEXT
1690+
1691+
.. attribute:: MODIFICATIONFLAGS.CHANGESTYLE
1692+
1693+
.. attribute:: MODIFICATIONFLAGS.CHANGEFOLD
1694+
1695+
.. attribute:: MODIFICATIONFLAGS.USER
1696+
1697+
.. attribute:: MODIFICATIONFLAGS.UNDO
1698+
1699+
.. attribute:: MODIFICATIONFLAGS.REDO
1700+
1701+
.. attribute:: MODIFICATIONFLAGS.MULTISTEPUNDOREDO
1702+
1703+
.. attribute:: MODIFICATIONFLAGS.LASTSTEPINUNDOREDO
1704+
1705+
.. attribute:: MODIFICATIONFLAGS.CHANGEMARKER
1706+
1707+
.. attribute:: MODIFICATIONFLAGS.BEFOREINSERT
1708+
1709+
.. attribute:: MODIFICATIONFLAGS.BEFOREDELETE
1710+
1711+
.. attribute:: MODIFICATIONFLAGS.MULTILINEUNDOREDO
1712+
1713+
.. attribute:: MODIFICATIONFLAGS.STARTACTION
1714+
1715+
.. attribute:: MODIFICATIONFLAGS.CHANGEINDICATOR
1716+
1717+
.. attribute:: MODIFICATIONFLAGS.CHANGELINESTATE
1718+
1719+
.. attribute:: MODIFICATIONFLAGS.CHANGEMARGIN
1720+
1721+
.. attribute:: MODIFICATIONFLAGS.CHANGEANNOTATION
1722+
1723+
.. attribute:: MODIFICATIONFLAGS.CONTAINER
1724+
1725+
.. attribute:: MODIFICATIONFLAGS.LEXERSTATE
1726+
1727+
.. attribute:: MODIFICATIONFLAGS.MODEVENTMASKALL
1728+
16811729
MULTIPASTE
16821730
----------
16831731

0 commit comments

Comments
 (0)