search_engine

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.