#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?i)[\r\n]+\s*\/\/.*TODO:+.*"
Local $sString = "angular" & @CRLF & _
" .module('mdKeyboard', ['material.components.bottomSheet'])" & @CRLF & _
" .directive('mdKeyboard', MdKeyboardDirective)" & @CRLF & _
" .provider('$mdKeyboard', MdKeyboardProvider);" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"function MdKeyboardDirective($mdKeyboard, $mdBottomSheet, $timeout, $injector, $log) {" & @CRLF & _
" return {" & @CRLF & _
" restrict: 'A'," & @CRLF & _
" require: '?ngModel'," & @CRLF & _
" scope: {" & @CRLF & _
" clickOutsideToClose: '='," & @CRLF & _
" preserveScope: '='," & @CRLF & _
" showInMobile: '='" & @CRLF & _
" }," & @CRLF & _
" link: function (scope, element, attrs, ngModelCtrl) {" & @CRLF & _
" if (!ngModelCtrl) {" & @CRLF & _
" return;" & @CRLF & _
" }" & @CRLF & _
"" & @CRLF & _
" var bottomSheet;" & @CRLF & _
"" & @CRLF & _
" // Don't show virtual keyboard in mobile devices (default)" & @CRLF & _
" //TODO: test detection and reimplement if neccessary" & @CRLF & _
" //TODO: dissolve dependency to UAParser if possible / use angular or material utils" & @CRLF & _
" if ($injector.has('UAParser')) {" & @CRLF & _
" var UAParser = $injector.get('UAParser');" & @CRLF & _
" var results = new UAParser().getResult();" & @CRLF & _
" var isMobile = results.device.type === 'mobile' || results.device.type === 'tablet';" & @CRLF & _
" isMobile = isMobile || (results.os && (results.os.name === 'Android'));" & @CRLF & _
" isMobile = isMobile || (results.os && (results.os.name === 'iOS'));" & @CRLF & _
" isMobile = isMobile || (results.os && (results.os.name === 'Windows Phone'));" & @CRLF & _
" isMobile = isMobile || (results.os && (results.os.name === 'Windows Mobile'));" & @CRLF & _
" if (isMobile && attrs.showInMobile !== true) {" & @CRLF & _
" return;" & @CRLF & _
" }" & @CRLF & _
" }" & @CRLF & _
"" & @CRLF & _
" /*" & @CRLF & _
" ngVirtualKeyboardService.attach(elements[0], scope.config, function() {" & @CRLF & _
" $timeout(function() {" & @CRLF & _
" ngModelCtrl.$setViewValue(elements[0].value);" & @CRLF & _
" });" & @CRLF & _
" });" & @CRLF & _
" */" & @CRLF & _
"" & @CRLF & _
" $log.debug(attrs);" & @CRLF & _
" element" & @CRLF & _
" .bind('focus', showKeyboard)" & @CRLF & _
" .bind('blur', hideKeyboard);" & @CRLF & _
"" & @CRLF & _
" function showKeyboard() {" & @CRLF & _
" $log.info('showKeyboard');" & @CRLF & _
" bottomSheet = $mdBottomSheet" & @CRLF & _
" .show({" & @CRLF & _
" template: '<md-bottom-sheet class="md-grid" layout="column" ng-cloak>{{keyboard}}</md-bottom-sheet>'," & @CRLF & _
" controller: KeyboardController," & @CRLF & _
" clickOutsideToClose: attrs.clickOutsideToClose || false," & @CRLF & _
" preserveScope: attrs.preserveScope || true" & @CRLF & _
" })" & @CRLF & _
" .then(function () {" & @CRLF & _
"" & @CRLF & _
" });" & @CRLF & _
" }" & @CRLF & _
"" & @CRLF & _
" function hideKeyboard() {" & @CRLF & _
" $log.info('hideKeyboard');" & @CRLF & _
" if (bottomSheet) {" & @CRLF & _
" $mdBottomSheet.hide();" & @CRLF & _
" delete bottomSheet;" & @CRLF & _
" }" & @CRLF & _
" }" & @CRLF & _
"" & @CRLF & _
" function KeyboardController($scope, $mdBottomSheet) {" & @CRLF & _
" $scope.keyboard = 'TEST';" & @CRLF & _
" }" & @CRLF & _
"" & @CRLF & _
" // open bottomsheet with keyboard on focus TODO: and without backdrop" & @CRLF & _
" scope.keyboard = 'test';" & @CRLF & _
"" & @CRLF & _
" // When navigation force destroys an interimElement, then" & @CRLF & _
" // listen and $destroy() that interim instance..." & @CRLF & _
" scope.$on('$destroy', function () {" & @CRLF & _
" $mdKeyboard.destroy();" & @CRLF & _
" });" & @CRLF & _
" }" & @CRLF & _
" };" & @CRLF & _
"}" & @CRLF & _
"" & @CRLF & _
"function MdKeyboardProvider($$interimElementProvider) {" & @CRLF & _
" return $$interimElementProvider('$mdKeyboard')" & @CRLF & _
" .setDefaults({" & @CRLF & _
" options: keyboardDefaults" & @CRLF & _
" });" & @CRLF & _
"" & @CRLF & _
" function keyboardDefaults() {" & @CRLF & _
" return {" & @CRLF & _
" themable: true," & @CRLF & _
" layout: defaultLayout" & @CRLF & _
" };" & @CRLF & _
"" & @CRLF & _
" function defaultLayout() {" & @CRLF & _
" // get default language" & @CRLF & _
" return 'en-us';" & @CRLF & _
" }" & @CRLF & _
" }" & @CRLF & _
"}" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "Result")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm