В режиме git add --patch
предусмотрена возможность разделения отдельного фрагмента или редактирования отдельного фрагмента.
s - split the current hunk into smaller hunks
e - manually edit the current hunk
Разве это не решит вашу проблему, касающуюся вашего непрерывного набора строк?
После добавления частичек для фиксации пользователь должен используйте ТОЛЬКО git commit
для фиксации, используя git commit -a
или используя коммит с флагом all files
, игнорирует добавленные частичные и фиксирует все подготовленные файлы.
Посмотрите на функциональность Rules Engine, которая является частью Windows Workflow Foundation.
Это не то место, куда можно было бы подумать. Однако в рамках работы, которую они проделали для создания пользовательского интерфейса, который позволяет разработчику рабочего процесса использовать настраиваемые правила и выражения, они придумали способ сделать то же самое в вашем собственном приложении, даже если вы не используете рабочий процесс. вообще. Их документация включает примеры размещения этой функции в приложении Windows Forms.
Я использовал ANTLR, FSLEX / FSYACC и Managed Babel. Все делают то, что вы просите, и хотя все они бесплатны, только первый из них имеет открытый исходный код.
Antlr: http://antlr.org/
FSLEX: http: // www. strangelights.com/fsharp/wiki/default.aspx/FSharpWiki/fslex.html
Управляемый Babel: http://msdn.microsoft.com/en-us/library/bb165963.aspx
Вы можете использовать cs-скрипт . Это позволяет вам выполнять код C #, что может быть больше, чем вы хотите, но почему бы просто не придерживаться C # вместо создания собственного синтаксиса, подобного C #. Можно интегрировать cs-скрипт в ваше приложение как DLL, и вы можете разрешить ему выполнять код C #, который не является частью класса, чтобы пользователи могли просто написать несколько необходимых им операторов.
Выражения Spring очень мощные, и в меньшей степени, чем все или ничего, чем, например, WF
(движок основан на ANTLR, а выражения бит, в то время как размер библиотеки, не дергается во всей Spring.NET)
Пока я забиваю это до смерти, Dynamic LINQ играет в этом пространстве (в частности, синтаксис, подобный C #). Очевидно, будьте осторожны, чтобы его требования (выпуск / компиляция кода) поддерживались в вашем контексте.