search_engine

Creator: coderz1093

Last updated:

0 purchases

search_engine Image
search_engine Images
Add to Cart

Description:

search engine

A text engine for inserting/deleting
and a search engine for searching and replacing in a text
given by a file, or a list of lines.
Glossary: #

A position is a well known location in the text, given by a line index (0..N-1) and a column index (0..M-1)
A region is a part of the text given by a start / end position. The end position of the region is outside the region (exclusive).
A block is a lot of consecutive lines that can described by three regular expressions:

an optional pattern of the start line
an optional pattern of the end line
a pattern describing the rest lines or a pattern describing lines not part of the block



Created from templates made available by Stagehand under a BSD-style
license.
Usage #
A simple usage example:
import 'package:dart_bones/dart_bones.dart';
import 'package:search_engine/search_engine.dart';

/// Prints some statistics about all classes from a file given from program arguments.
void main(List<String> args) {
final logger = MemoryLogger(LEVEL_FINE);
final engine = SearchEngine.fromFile(args[0], logger);
final regExpEmpty = RegExp(r'^\s*$');
final regExpComment = RegExp(r'^\s*//');
final regExpDocumentationComment = RegExp(r'^\s*///');
// over all classes:
while (engine.searchByRegExp(pattern: r'^class\s*(\w+)')) {
// sets the start of the region:
engine.currentRegion.start.clone(engine.currentPosition);
final name = engine.lastMatch!.group(1);
// Search backward to the start of the documenting comments (///...)
engine.currentPosition.previousLine();
if (!engine.skipBackwardBlockByRegExp(regExprBody: regExpDocumentationComment)){
/// No comments found: than we must undo *.previousLine():
engine.currentPosition.nextLine();
}
final start = engine.currentPosition.line;
if (!engine.searchByRegExp(regExp: RegExp(r'^\}'), skipLastMatch: true)) {
logger.log('syntax error: missing "}"');
break;
} else {
// sets the end of the region:
engine.currentRegion.end.clone(engine.currentPosition);
final count = engine.currentPosition.line - start + 1;
// set the current position to the region start
engine.goto(engine.currentRegion.start);
// count inside the region only:
final comments = engine.countByRegExp(regExp: regExpComment, onePerLine: true);
final empty = engine.countByRegExp(regExp: regExpEmpty, onePerLine: true);
final code = count - comments - empty;
print(
'class $name: $count line(s), $comments comment(s), $code line(s) of code');
// sets the current position at the end:
engine.goto(engine.currentRegion.start);
// expand the region to the text end
// otherwise the search of the next class will fail
engine.currentRegion.end.setEndOfText();
}
}
}
copied to clipboard
Features and bugs #
Please file feature requests and bugs at the issue tracker.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.

Related Products

More From This Creator