<commit_before>package pixel

import "image/color"

// Target is something that can be drawn onto, such as a window, a canvas, and so on.
//
// You can notice, that there are no "drawing" methods in a Target. That's because all drawing
// happens indirectly through Triangles instance generated via MakeTriangles method.
type Target interface {
	// MakeTriangles generates a specialized copy of the provided Triangles.
	//
	// When calling Draw method on the returned Triangles, the Triangles will be drawn onto the
	// target that generated them.
	//
	// Note, that not every Target has to recognize all possible types of triangles. Some may
	// only recognize TrianglesPosition and TrianglesColor and ignore all other properties (if
	// present) when making new Triangles. This varies from Target to Target.
	MakeTriangles(Triangles) Triangles

	// These are the most basic Target "adjustment" methods.
	SetPicture(*Picture)
	SetTransform(...Transform)
	SetMaskColor(color.Color)
}

// Triangles represents a list of vertices, where each three vertices form a triangle. (First,
// second and third is the first triangle, fourth, fifth and sixth is the second triangle, etc.)
type Triangles interface {
	// Len returns the number of vertices. The number of triangles is the number of vertices
	// divided by 3.
	Len() int

	// Draw draws Triangles onto an associated Target (if any).
	//
	// Note, that this method does not have to be implemented, however it is always implemented
	// for Triangles generated by a Target.
	Draw()

	// Update copies vertex properties from the supplied Triangles into this Triangles.
	//
	// Properies not supported by these Triangles should be ignored. Properties not supported by
	// the supplied Triangles should be left untouched.
	//
	// If these Triangles and supplied Triangles have different lengths, these Triangles should
	// be resized.
	Update(Triangles)

	// Append adds supplied Triangles to the end of these Triangles.
	//
	// Behavior regarding unsupported properties should be same as with Update.
	Append(Triangles)

	// Copy creates an exact independent copy of this Triangles (with the same underlying type).
	Copy() Triangles
}

// Drawer is something that can be drawn onto any Target.
type Drawer interface {
	Draw(Target)
}

// TrianglesPosition specifies Triangles with Position property.
type TrianglesPosition interface {
	Triangles
	Position(i int) Vec
}

// TrianglesColor specifies Triangles with Color property.
type TrianglesColor interface {
	Triangles
	Color(i int) color.Color
}

// TrianglesTexture specifies Triangles with Texture propery.
//
// Note that this represents texture coordinates, not an actual texture.
type TrianglesTexture interface {
	Triangles
	Texture(i int) Vec
}<commit_msg>add doc on default vertex properties values<commit_after>package pixel

import "image/color"

// Target is something that can be drawn onto, such as a window, a canvas, and so on.
//
// You can notice, that there are no "drawing" methods in a Target. That's because all drawing
// happens indirectly through Triangles instance generated via MakeTriangles method.
type Target interface {
	// MakeTriangles generates a specialized copy of the provided Triangles.
	//
	// When calling Draw method on the returned Triangles, the Triangles will be drawn onto the
	// target that generated them.
	//
	// Note, that not every Target has to recognize all possible types of triangles. Some may
	// only recognize TrianglesPosition and TrianglesColor and ignore all other properties (if
	// present) when making new Triangles. This varies from Target to Target.
	MakeTriangles(Triangles) Triangles

	// These are the most basic Target "adjustment" methods.
	SetPicture(*Picture)
	SetTransform(...Transform)
	SetMaskColor(color.Color)
}

// Triangles represents a list of vertices, where each three vertices form a triangle. (First,
// second and third is the first triangle, fourth, fifth and sixth is the second triangle, etc.)
type Triangles interface {
	// Len returns the number of vertices. The number of triangles is the number of vertices
	// divided by 3.
	Len() int

	// Draw draws Triangles onto an associated Target (if any).
	//
	// Note, that this method does not have to be implemented, however it is always implemented
	// for Triangles generated by a Target.
	Draw()

	// Update copies vertex properties from the supplied Triangles into this Triangles.
	//
	// Properies not supported by these Triangles should be ignored. Properties not supported by
	// the supplied Triangles should be left untouched.
	//
	// If these Triangles and supplied Triangles have different lengths, these Triangles should
	// be resized.
	Update(Triangles)

	// Append adds supplied Triangles to the end of these Triangles.
	//
	// Behavior regarding unsupported properties should be same as with Update.
	Append(Triangles)

	// Copy creates an exact independent copy of this Triangles (with the same underlying type).
	Copy() Triangles
}

// Drawer is something that can be drawn onto any Target.
type Drawer interface {
	Draw(Target)
}

// TrianglesPosition specifies Triangles with Position property.
//
// Default value for a position is (0, 0).
type TrianglesPosition interface {
	Triangles
	Position(i int) Vec
}

// TrianglesColor specifies Triangles with Color property.
//
// Default value for a color is the white color.
type TrianglesColor interface {
	Triangles
	Color(i int) color.Color
}

// TrianglesTexture specifies Triangles with Texture propery.
//
// Note that this represents texture coordinates, not an actual texture.
//
// Default value for a texture is (-1, -1), which means 'no texture'.
type TrianglesTexture interface {
	Triangles
	Texture(i int) Vec
}
{'fraction_non_alphanumeric': 0.06772560656310002, 'fraction_numerical': 0.0010473031942747426, 'mean_word_length': 3.7869674185463658, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5121603', 'n_tokens_mistral': 1477, 'n_tokens_neox': 1438, 'n_words': 749}